- DHCP Overview
- Configuring the Cisco IOS DHCP Server
- Configuring the DHCP Server On-Demand Address Pool Manager
- Configuring the Cisco IOS DHCP Relay Agent
- Configuring the Cisco IOS DHCP Client
- Configuring DHCP Services for Accounting and Security
- Configuring DHCP Enhancements for Edge-Session Management
- Finding Feature Information
- Information About DHCP Enhancements for Edge-Session Management
- How to Configure DHCP Enhancements for Edge-Session Management
- DHCP Address Range and Class Name Configuration Example
- DHCP Server Co-Resident with SG Configuration Example
- DHCP Relay Agent Co-Resident with SG Configuration Example
- Multiple DHCP Pools and Different ISPs Configuration Example
- Multiple Relay Sources and Destinations Configuration Example
- SG-Supplied Class Name Configuration Example
Configuring DHCP Enhancements for Edge-Session Management
The DHCP Enhancements for Edge-Session Management feature provides the capability of simultaneous service by multiple Internet Service Providers (ISPs) to customers using one network infrastructure. The end-user customer may change ISPs at any time.
The DHCP enhancements evolved out of the Service Gateways (SGs) requirement to receive information from the DHCP server about when client DISCOVER packets (session initiation) are received, when an address has been allocated to a client, and when a client has released a DHCP lease or the lease has expired (session termination).
- Finding Feature Information
- Information About DHCP Enhancements for Edge-Session Management
- How to Configure DHCP Enhancements for Edge-Session Management
- Configuration Examples for DHCP Enhancements for Edge Session Management
- Additional References
- Feature Information for DHCP Enhancements for Edge-Session Management
Finding Feature Information
Your software release may not support all the features documented in this module. For the latest feature information and caveats, see the release notes for your platform and software release. To find information about the features documented in this module, and to see a list of the releases in which each feature is supported, see the Feature Information Table at the end of this document.
Use Cisco Feature Navigator to find information about platform support and Cisco software image support. To access Cisco Feature Navigator, go to www.cisco.com/go/cfn. An account on Cisco.com is not required.
Information About DHCP Enhancements for Edge-Session Management
- DHCP Servers and Relay Agents
- On-Demand Address Pool Management
- Design of the DHCP Enhancements for Edge-Session Management Feature
- Benefits of the DHCP Enhancements for Edge-Session Management
DHCP Servers and Relay Agents
DHCP provides a framework for passing configuration information dynamically to hosts on a TCP/IP network. A DHCP client is an Internet host using DHCP to obtain configuration parameters such as an IP address.
A DHCP relay agent is any host that forwards DHCP packets between clients and servers. Relay agents are used to forward requests and replies between clients and servers when they are not on the same physical subnet. Relay agent forwarding is distinct from the normal forwarding of an IP router, where IP datagrams are switched between networks somewhat transparently. By contrast, relay agents receive DHCP messages and then generate a new DHCP message to send on another interface.
For more information, refer to the DHCP modules in the Cisco IOS IP Addressing Services Configuration Guide , Release 12.4.
On-Demand Address Pool Management
An On-Demand Address Pool (ODAP) is used to centralize the management of large pools of addresses and simplifies the configuration of large networks. ODAP provides a central management point for the allocation and assignment of IP addresses.
When a Cisco router is configured as an ODAP manager, pools of IP addresses are dynamically increased or reduced in size depending on the address utilization level. The ODAP manager is supported by centralized Remote Authentication Dial-In User Service (RADIUS) or DHCP servers and is configured to request an initial pool of addresses from either the RADIUS or DHCP server.
The ODAP manager controls IP address assignment and will allocate additional IP addresses as necessary. This method of address allocation and assignment optimizes the use of available address space and simplifies the configuration of medium and large-sized networks.
For more information, see the "Configuring the DHCP Server On-Demand Address Pool Manager" module.
Design of the DHCP Enhancements for Edge-Session Management Feature
With the DHCP Enhancements for Edge-Session Management feature, a DHCP server and relay agent are separate, but closely coupled. The basic design of the feature encompasses two types of configuration at the edge of an ISP network as follows:
- DHCP server and an SG that are co-resident (in the same device)
- DHCP relay agent and an SG that are co-resident
DHCP Server Co-Resident with the SG
With this configuration, the DHCP server is in the same device as the SG and allocates addresses from locally configured address pools or acquires a subnet of addresses to allocate from some other system in the network. There are no changes to the server address allocation function to support the configuration.
This configuration enables the DHCP server to notify the SG that it has received a broadcast sent by the end-user DHCP client. The SG passes the MAC address and other information to the DHCP server. The SG also passes a class name (for example, the name of the ISP), which is used by the DHCP server to match a pool-class definition.
Lease-state notifications are always made by the DHCP server to the SG, because the information is already present.
Note |
The local configuration may also be performed by an ODAP that acquires subnets for the address pools from another DHCP server or a RADIUS server. |
DHCP Relay Agent Co-Resident with the SG
With this configuration, the relay agent is in the same device as the SG and intercedes in DHCP sessions to appear as the DHCP server to the DHCP client. As the server, the relay agent may obtain enough information about the DHCP session to notify the SG of all events (for example, lease termination).
Appearing to be the DHCP server is performed by using the DHCP functionality that is currently in use on unnumbered interfaces. This functionality enables the relay agent to substitute its own IP address for the server.
The packet is passed by the relay agent to the DHCP server and the SG is notified of the receipt. Following the notification, an inquiry is made by the relay agent to the SG about which DHCP class name to use. Then, the packet is passed by the relay agent to the selected DHCP server.
The end-user DHCP client MAC address and other pertinent information is passed to the SG. The SG returns the DHCP class name to use when matching a DHCP pool if the SG is configured to do so. If the DHCP relay agent is not acting as a server, it relays the packet to the DHCP server.
Note |
An address pool may have one DHCP class defined to specify one central DHCP server to which the relay agent passes the packet, or it may have multiple DHCP classes defined to specify a different DHCP server for each client. |
Benefits of the DHCP Enhancements for Edge-Session Management
The benefits of the DHCP Enhancements for Edge-Session Management feature are as follows:
- Allows the full DHCP server system to be located farther inside the network, while only running a relatively simple DHCP relay agent at the edge.
- Simplifies the DHCP configuration at the edge.
- Allows all DHCP server administration to occur closer to the middle of the network on one centralized DHCP server, or on separate DHCP servers (one for each ISP).
- Allows each ISP full control over all DHCP options and lease times.
- Allows both the DHCP server and client configurations to be used on the same edge system simultaneously.
How to Configure DHCP Enhancements for Edge-Session Management
- Configuring the DHCP Address Pool and a Class Name
- Configuring a Relay Pool with a Relay Source and Destination
- Configuring a Relay Pool for a Remote DHCP Server
- Configuring Other Types of Relay Pools
Configuring the DHCP Address Pool and a Class Name
Perform this task to configure a DHCP server that assigns addresses from an address pool for a specific class name that has been assigned by an SG that is co-resident with the DHCP server at the edge.
If a DHCP server is resident in the same device as an SG and both are at the edge, a class name and address pool should be configured. In this case, the DHCP server notifies an SG of a DISCOVER broadcast received from a client and the SG returns a class name. The returned class name designates an address range of an address pool. The DHCP server sends the MAC address and IP address of the incoming interface or the specified relay-agent address to the SG.
Note |
If the DHCP server has its address pools defined locally or retrieves the subnets from ISP DHCP servers or AAA servers using ODAP, additional DHCP server configuration on behalf of the SG is not required. |
If dynamic allocation of the address pool is required using ODAP, the origin command is specified.
The specification of the class name is required in the DHCP address-pool configuration and in the SG system itself to designate each DHCP client class name. A default class name should be configured if a user does not have one.
Each address pool should be associated with one or more DHCP classes (address-provider ISPs). When the DHCP client selects an ISP, the selection becomes the class name designated by the SG.
DETAILED STEPS
Configuring a Relay Pool with a Relay Source and Destination
Perform this task to configure a relay pool when the DHCP relay and SG are resident in the same device at the edge, and all end users will obtain addresses from one pool. This task replaces the IP helper-address interface configuration.
If the SG notifies the relay agent that DHCP session notifications are required for a particular DHCP client, the relay agent will retain enough information about the DHCP session to notify the SG of all events (for example, lease termination). The relay intercedes DHCP sessions and assumes the role of the DHCP server. The IP address configuration becomes a dynamically changing value depending on the DHCP client information and the SG device policy information.
Note |
If a relay agent is interceding in DHCP sessions and assuming the role of the DHCP server, the use of DHCP authentication is not possible. > |
DETAILED STEPS
Command or Action | Purpose | |||
---|---|---|---|---|
|
Example: Router> enable |
Enables privileged EXEC mode.
|
||
|
Example: Router# configure terminal |
Enters global configuration mode. |
||
|
Example: Router(config)# ip dhcp pool abc-pool |
Configures a DHCP address pool on a Cisco IOS DHCP server and enters DHCP pool configuration mode. The name argument is the name of the pool and may either be a symbolic string (such as engineering) or an integer (such as 0). More than one name may be configured. |
||
|
Example: Router(dhcp-config)# update arp |
(Optional) Configures secure and dynamic Address Resolution Protocol (ARP) entries in the ARP table to their corresponding DHCP bindings.
|
||
|
Example: Router(dhcp-config)# relay source 10.0.0.0 255.0.0.0 |
Configures the relay source. The ip-addressand subnet-mask arguments are the IP address and subnet mask for the relay source.
|
||
|
Example: Router(dhcp-config)# relay destination 10.5.5.0 |
Configures the IPv4 address of a remote DHCP server to which DHCP client packets are sent. The arguments and keywords are as follows:
|
||
|
Example: Router(dhcp-config)# accounting RADIUS-GROUP1 |
(Optional) Enables DHCP accounting if the specified server group is configured to run RADIUS accounting.
|
||
|
Example: Router(dhcp-config)# exit |
Exits to global configuration mode. |
Configuring a Relay Pool for a Remote DHCP Server
Perform this task to use an SG-supplied class name when selecting the remote DHCP server in a configured relay pool, which is used to specify how DHCP client packets should be relayed. Multiple configurations of relay targets may appear in a pool-class definition in which case all addresses are used for relay purposes.
Note |
The relay source command cannot be used with the network command or origin command since those commands implicitly designate the incoming interface and are used to define a different type of pool. It associates the relay only with an interface in the same way that the ip helper-address command does by its presence as an interface configuration command. > |
DETAILED STEPS
Command or Action | Purpose | |||||
---|---|---|---|---|---|---|
|
Example: Router> enable |
Enables privileged EXEC mode.
|
||||
|
Example: Router# configure terminal |
Enters global configuration mode. |
||||
|
Example: Router(config)# ip dhcp pool abc-pool |
Configures a DHCP address pool on a Cisco IOS DHCP server and enters DHCP pool configuration mode. The name argument is the name of the pool and may either be a symbolic string (such as engineering) or an integer (such as 0). You may specify more than one DHCP address pool. |
||||
|
Example: Router(dhcp-config)# relay source 10.0.0.0 255.0.0.0 |
Configures the relay source. The ip-addressand subnet-mask arguments are the IP address and subnet mask for the relay source.
|
||||
|
Example: Router(dhcp-config)# relay destination 10.5.5.0 |
Configures the IPv4 address of a remote DHCP server to which DHCP client packets are sent. The arguments and keywords are as follows:
|
||||
|
Example: Router(dhcp-config)# accounting RADIUS-GROUP1 |
(Optional) Enables DHCP accounting if the specified server group is configured to run RADIUS accounting.
|
||||
|
Example: Router(dhcp-config)# class abc-pool |
Associates a class with a DHCP address pool and enters DHCP pool-class configuration mode. The class-name argument is the name of the class. You may configure more than one class name. |
||||
|
Example: Router(config-dhcp-pool-class)# relay target 10.0.0.0 |
Configures the relay target IP address. The arguments and keywords are as follows:
|
||||
|
Example: Router(config-dhcp-pool-class)# exit |
Exits to DHCP pool configuration mode. |
Configuring Other Types of Relay Pools
- Configuring Relay Information for an Address Pool
- Configuring Multiple Relay Sources for a Relay Pool
Configuring Relay Information for an Address Pool
Perform this task to configure relay information for an address pool. In this configuration, the SG sends one class name that results in the DISCOVER packet being relayed to a server at the IP address configured using the relay targetcommand. If the SG sends a class name that is not configured as being associated with the address pool, then no action is taken.
Note |
Specifying the address range command and relay target command in a pool-class definition is not possible, because this would allocate an address and relay for the same packet. > |
DETAILED STEPS
Command or Action | Purpose | |||
---|---|---|---|---|
|
Example: Router> enable |
Enables privileged EXEC mode.
|
||
|
Example: Router# configure terminal |
Enters global configuration mode. |
||
|
Example: Router(config)# ip dhcp pool abc-pool |
Configures a DHCP address pool on a Cisco IOS DHCP server and enters DHCP pool configuration mode. The name argument is the name of the pool and may either be a symbolic string (such as engineering) or an integer (such as 0). |
||
|
Example: Router(dhcp-config)# network 10.0.0.0 255.0.0.0 |
Configures the subnet number and mask for a DHCP address pool on a Cisco IOS DHCP server. The arguments are as follows:
|
||
|
Example: Router(dhcp-config)# class abc-pool |
Associates a class with a DHCP address pool and enters DHCP pool-class configuration mode. The class-name argument is the name of the class. More than one class name may be configured.
|
||
|
Example: Router(config-dhcp-pool-class)# relay target 10.0.0.0 |
Configures the relay target IP address. The arguments and keywords for the relay target command are as follows:
|
||
|
Example: Router(config-dhcp-pool-class)# exit |
Exits to DHCP pool configuration mode. |
||
|
|
-- |
Configuring Multiple Relay Sources for a Relay Pool
Perform this task to configure multiple relay sources for a relay pool. The configuration is similar to configuring an IP helper address on multiple interfaces. Pools are matched to the IP addresses on an incoming interface in the order in which the interfaces display when the show running-configcommand is used. Once a relay is found or an address allocation is found, the search stops.
DETAILED STEPS
Command or Action | Purpose | |||
---|---|---|---|---|
|
Example: Router> enable |
Enables privileged EXEC mode.
|
||
|
Example: Router# configure terminal |
Enters global configuration mode. |
||
|
Example: Router(config)# interface ethernet1 |
Configures an interface and enters interface configuration mode. The arguments are as follows: |
||
|
Example: Router(config-if)# ip address 10.0.0.0 255.0.0.0 |
Sets a primary or secondary IP address for an interface. |
||
|
Example: Router(config-if)# exit |
Exits to global configuration mode. |
||
|
Example: Router(config)# ip dhcp pool abc-pool1 |
Configures a DHCP address pool on a DHCP server and enters DHCP pool configuration mode. The name argument is the name of the pool and may either be a symbolic string (such as engineering) or an integer (such as 0). More than one pool may be assigned. |
||
|
Example: Router(dhcp-config)# relay source 10.0.0.0 255.0.0.0 |
Configures the relay source. The ip-addressand subnet-mask arguments are the IP address and subnet mask for the relay source.
|
||
|
Example: Router(dhcp-config)# relay destination 10.5.5.0 |
Configures the IPv4 address of a remote DHCP server to which DHCP client packets are sent. The arguments and keywords are as follows:
|
||
|
Example: Router(dhcp-config)# accounting RADIUS-GROUP1 |
(Optional) Enables DHCP accounting if the specified server group is configured to run RADIUS accounting.
|
||
|
|
-- |
||
|
Example: Router(dhcp-config)# exit |
Exits to global configuration mode. |
Configuration Examples for DHCP Enhancements for Edge Session Management
- DHCP Address Range and Class Name Configuration Example
- DHCP Server Co-Resident with SG Configuration Example
- DHCP Relay Agent Co-Resident with SG Configuration Example
- Multiple DHCP Pools and Different ISPs Configuration Example
- Multiple Relay Sources and Destinations Configuration Example
- SG-Supplied Class Name Configuration Example
DHCP Address Range and Class Name Configuration Example
The following example shows how to configure an address range for a particular network and class name for a DHCP pool.
ip dhcp pool abc-pool network 10.10.0.0 255.255.0.0 class abc-pool address range 10.10.5.0 10.10.5.99
DHCP Server Co-Resident with SG Configuration Example
In the following example, the ISPs are ABC and DEF companies. The ABC company has its addresses assigned from an address pool that is dynamically allocated using ODAP. The DEF company has its customer addresses assigned from the address pool 10.100.0.0/16. Customers not associated with any ISP will have an address allocated from the address pool 10.1.0.0/16 and the lease time is set to 10 minutes.
!Interface configuration interface ethernet1 ip address 10.20.0.1. 255.255.0.0 ip address 10.1.0.1 255.255.0.0 secondary ip address 10.100.0.1 255.255.0.0 secondary !Address pool for ABC customers ip dhcp pool abc-pool network 20.1.0.0 255.255.0.0 class abc ! !Address pool for DEF customers ip dhcp pool def-pool network 10.100.0.0 255.255.0.0 class def !Address pool for customers without an ISP ip dhcp pool temp network 10.1.0.0 255.255.0.0 lease 0 0 10 class default
DHCP Relay Agent Co-Resident with SG Configuration Example
In the following example, there are two ISPs: abcpool and defpool. The abcpool ISP and its customers are allowed to have addresses in the ranges 10.1.0.0/16 and 30.1.0.0/16 and are relayed to the DHCP server at 10.55.10.1. The defpool ISP and its customers are allowed to have addresses in the ranges 20.1.0.0/16 and 40.4.0.0/16 and are relayed to the DHCP server at 12.10.2.1.
!Address ranges: interface ethernet1 ip address 10.1.0.0 255.255.0.0 ip address 10.2.0.0 255.255.0.0 secondary interface ethernet2 ip address 10.3.0.0 255.255.0.0 ip address 10.4.0.0 255.255.0.0 secondary !Address pools for abcpool1 and abcpool2: ip dhcp pool abcpool1 relay source 10.1.0.0 255.255.0.0 class abcpool relay target 10.5.10.1 !Address pool for abcpool2: ip dhcp pool abcpool2 relay source 10.1.0.0 255.255.0.0 class abcpool relay target 10.55.10.1 !Address pools for defpool1 and defpool2: ip dhcp pool defpool1 relay source 10.1.0.0 255.255.0.0 class defpool relay target 10.10.2.1 ip dhcp pool defpool2 relay source 10.4.0.0 255.255.0.0 class defpool relay target 10.10.2.1
Multiple DHCP Pools and Different ISPs Configuration Example
The following example shows how to configure one interface and multiple DHCP pools that have different ISPs by using the network command.
interface ethernet1 ip address 10.0.0.1 255.0.0.0 ip address 10.1.0.1 255.0.0.0 ! ip dhcp pool x network 10.0.0.0 255.0.0.0 class ISP1 ! ip dhcp pool y network 10.1.0.0 255.0.0.0 class ISP2
Multiple Relay Sources and Destinations Configuration Example
In the following example, multiple relay sources and destinations may be configured for a relay pool. This is similar the ip helper-address configuration on multiple interfaces. Pools are matched to the (possibly multiple) IP addresses on an incoming interface in the order in which they appear when using the show running-config command to display information about that interface. Once either a relay is found or an address allocation is found, the search stops. For example, given the following configuration:
interface ethernet1 ip address 10.0.0.1 255.0.0.0 ip address 10.0.0.5 255.0.0.0 secondary ip dhcp pool x relay source 10.0.0.0 255.0.0.0 relay destination 10.0.0.1 ip dhcp pool y relay source 10.0.0.0 255.0.0.0 relay destination 10.0.0.1
In the following example, the DHCP client packet would be relayed to 10.0.0.1, if the SG specified ISP1 as the class name, and would be relayed to 10.0.0.5, if the SG specified ISP2 as the class name.
interface ethernet1 ip address 10.0.0.1 255.0.0.0 ip address 10.0.0.5 255.0.0.0 secondary ip dhcp pool x relay source 10.0.0.0 255.0.0.0 relay destination 10.2.0.0 255.0.0.0 class ISP1 relay target 10.0.0.1 class ISP2 relay target 10.0.0.5
SG-Supplied Class Name Configuration Example
In the following example, an SG-supplied class name is to be used in selecting the remote DHCP server to which packets should be relayed.
ip dhcp pool abc-pool-1 relay source 10.1.0.0 255.255.0.0 relay destination 10.1.0.0 class classname1 relay target 10.20.10.1 class classname2 relay target 10.0.10.1 class classname3
In the example above, an SG-supplied class name, called classname1, would relay the DHCP DISCOVER packet to the server at the relay target IP address 10.20.10.1, while SG classname2 would relay the DHCP DISCOVER packet to the server at the relay target IP address 10.0.10.1. This configuration relays the packet to destination IP address 10.0.0.1, because the pool matches the first configured address on the interface. If the SG returns a classname3, then the default pool is the default address specified as the relay destination. If the SG returns any class name other than classname1, classname2, or classname3, then no relay action is taken.
Additional References
The following sections provide references related to configuring DHCP Enhancements for Edge-Session Management.
Related Documents
Related Topic |
Document Title |
---|---|
DHCP commands: complete command syntax, command modes, command history, defaults, usage guidelines, and examples |
Cisco IOS IP Addressing Services Command Reference |
DHCP conceptual information |
"DHCP Overview" module |
DHCP server configuration |
"Configuring the Cisco IOS DHCP Server" module |
DHCP client configuration |
"Configuring the Cisco IOS DHCP Client" module |
DHCP relay agent configuration |
"Configuring the Cisco IOS DHCP Relay Agent" module |
DHCP server on-demand address pool manager configuration |
"Configuring the DHCP Server On-Demand Address Pool Manager" module |
DHCP advanced features |
"Configuring DHCP Services for Accounting and Security" module |
DHCP options |
"DHCP Options" appendix in the Network Registrar User's Guide , Release 6.1.1 |
Standards
Standards |
Title |
---|---|
No new or modified standards are supported by this functionality. |
-- |
MIBs
MIBs |
MIBs Link |
---|---|
No new or modified MIBs are supported by this feature. |
To locate and download MIBs for selected platforms, Cisco IOS releases, and feature sets, use Cisco MIB Locator found at the following URL: |
RFCs
RFCs |
Title |
---|---|
RFC 951 |
Bootstrap Protocol (BOOTP) |
RFC 1542 |
Clarifications and Extensions for the Bootstrap Protocol |
RFC 2131 |
Dynamic Host Configuration Protocol |
RFC 2685 |
Virtual Private Networks Identifier |
RFC 3046 |
DHCP Relay Information Option |
Technical Assistance
Description |
Link |
---|---|
The Cisco Support website provides extensive online resources, including documentation and tools for troubleshooting and resolving technical issues with Cisco products and technologies. To receive security and technical information about your products, you can subscribe to various services, such as the Product Alert Tool (accessed from Field Notices), the Cisco Technical Services Newsletter, and Really Simple Syndication (RSS) Feeds. Access to most tools on the Cisco Support website requires a Cisco.com user ID and password. |
Feature Information for DHCP Enhancements for Edge-Session Management
The following table provides release information about the feature or features described in this module. This table lists only the software release that introduced support for a given feature in a given software release train. Unless noted otherwise, subsequent releases of that software release train also support that feature.
Use Cisco Feature Navigator to find information about platform support and Cisco software image support. To access Cisco Feature Navigator, go to www.cisco.com/go/cfn. An account on Cisco.com is not required.
Table 1 | Feature Information for DHCP Enhancements for Edge-Session Management |
Feature Name |
Releases |
Feature Configuration Information |
---|---|---|
DHCP Relay Accounting |
12.4(6)T |
The DHCP Relay Accounting feature allows a Cisco IOS DHCP relay agent to send a RADIUS accounting start packet when an address is assigned to a client and a RADIUS accounting stop packet when the address is released. This feature is enabled by using the accounting command with relay pools that use the relay destination command in DHCP pool configuration mode. No new commands were introduced by this feature. |
DHCP Enhancements for Edge-Session Management |
12.3(14)T 12.2(28)SB 12.2(33)SRC |
The DHCP Enhancements for Edge-Session Management feature provides the capability of simultaneous service by multiple ISPs to customers using one network infrastructure. The end-user customer may change ISPs at any time. The following commands were introduced by this feature: relay destination, relay source,and relay target. |
Cisco and the Cisco logo are trademarks or registered trademarks of Cisco and/or its affiliates in the U.S. and other countries. To view a list of Cisco trademarks, go to this URL: www.cisco.com/go/trademarks. Third-party trademarks mentioned are the property of their respective owners. The use of the word partner does not imply a partnership relationship between Cisco and any other company. (1110R)
Any Internet Protocol (IP) addresses and phone numbers used in this document are not intended to be actual addresses and phone numbers. Any examples, command display output, network topology diagrams, and other figures included in the document are shown for illustrative purposes only. Any use of actual IP addresses or phone numbers in illustrative content is unintentional and coincidental.