1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- // Copyright (C) 2016 Internet Systems Consortium, Inc. ("ISC")
- //
- // This Source Code Form is subject to the terms of the Mozilla Public
- // License, v. 2.0. If a copy of the MPL was not distributed with this
- // file, You can obtain one at http://mozilla.org/MPL/2.0/.
- /**
- @page dhcpv4o6Dhcp4 DHCPv4-over-DHCPv6 DHCPv4 Server Side
- Kea supports DHCPv4-over-DHCPv6 using cooperating DHCPv6 and DHCPv4
- servers. This section describes the DHCPv4 server side. For its
- DHCPv6 counter-part, see @ref dhcpv4o6Dhcp6.
- @section Dhcp4to6Ipc DHCPv6-to-DHCPv4 Inter Process Communication
- The @c Dhcp4to6Ipc class is derived from the base @c Dhcp4o6IpcBase as
- a singleton class (by the static @ref isc::dhcp::Dhcp4to6Ipc::instance
- function). @ref isc::dhcp::Dhcp4to6Ipc::open is called to open IPC
- UDP sockets and to register @ref isc::dhcp::Dhcp4to6Ipc::handler on
- external sockets on the @c IfaceMgr.
- @section dhcp4to6Receive DHCPv4-over-DHCPv6 Packet Processing
- DHCPv6 DHCPv4-QUERY messages are forwarded by the DHCPv6 server on the IPC.
- The interface manager (@c IfaceMgr) using the external socket mechanism
- invokes @ref isc::dhcp::Dhcp4to6Ipc::handler, the packet is received using
- (inherited) @ref isc::dhcp::Dhcp4o6IpcBase::receive which decodes and strips
- the ISC Vendor option.
- The handler verifies there is one and only one DHCPv4-Message option
- and extracts it. @ref isc::dhcp::Dhcpv4Srv::processPacket processes
- the DHCPv4 query as a @c Pkt4o6 instance and builds the
- DHCPv4-over-DHCPv6 response.
- Registered callouts for "buffer4_send" are called (@ref
- dhcpv4HooksBuffer4Send, note all the other DHCPv4 hook points are
- served during the standard processing). The response is sent back
- to the DHCPv6 server on the IPC.
- @section dhcp4to6Specific Modified DHCPv4 Routines
- For a @c Pkt4o6 query the @ref isc::dhcp::Dhcpv4Exchange::initResponse
- performs some extra steps (@ref isc::dhcp::Dhcpv4Exchange::initResponse4o6):
- the DHCPv6 response is built and the response member is reset to
- a @c Pkt4o6 instance with DHCPv4 and DHCPv6 parts.
- The subnet selection (@ref isc::dhcp::Dhcpv4Srv::selectSubnet) is specialized
- for @c Pkt4o6 queries (@ref isc::dhcp::Dhcpv4Srv::selectSubnet4o6):
- the subnet selector class (@c SubnetSelector) is filled using DHCPv4 and
- DHCPv6 information and the @ref isc::dhcp::CfgSubnets4::selectSubnet4o6
- function is called (instead of @ref isc::dhcp::CfgSubnets4::selectSubnet).
- In @ref isc::dhcp::Dhcpv4Srv::adjustIfaceData for @c Pkt4o6 queries
- the local address is set to the incoming interface assigned address
- (same case than for a broadcast local address).
- In @ref isc::dhcp::Dhcpv4Srv::adjustRemoteAddr for @c Pkt4o6 queries the
- remote address is set to the query one (which is in fact an IPv6 address).
- In @ref isc::dhcp::Dhcpv4Srv::acceptDirectRequest @c Pkt4o6 queries are
- accepted (they are considered as being relayed).
- */
|