dhcp4.dox 4.16 KB
 Jeremy C. Reed committed Feb 13, 2013 1 2 3 4 5 6 7 8 9 10 11 12 13 14 // Copyright (C) 2012 Internet Systems Consortium, Inc. ("ISC") // // Permission to use, copy, modify, and/or distribute this software for any // purpose with or without fee is hereby granted, provided that the above // copyright notice and this permission notice appear in all copies. // // THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH // REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY // AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, // INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM // LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE // OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR // PERFORMANCE OF THIS SOFTWARE.  Tomek Mrugalski committed Oct 12, 2012 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 /** @page dhcp4 DHCPv4 Server Component BIND10 offers DHCPv4 server implementation. It is implemented as b10-dhcp4 component. Its primary code is located in isc::dhcp::Dhcpv4Srv class. It uses \ref libdhcp extensively, especially isc::dhcp::Pkt4, isc::dhcp::Option and isc::dhcp::IfaceMgr classes. Currently this code offers skeleton functionality, i.e. it is able to receive and process incoming requests and trasmit responses. However, it does not have database management, so it returns only one, hardcoded lease to whoever asks for it. DHCPv4 server component does not support direct traffic (relayed only), as support for transmission to hosts without IPv4 address assigned is not implemented in IfaceMgr yet.  Stephen Morris committed Dec 13, 2012 32 @section dhcpv4Session BIND10 message queue integration  Tomek Mrugalski committed Oct 12, 2012 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71  DHCPv4 server component is now integrated with BIND10 message queue. The integration is performed by establishSession() and disconnectSession() functions in isc::dhcp::ControlledDhcpv4Srv class. main() method deifined in the src/bin/dhcp4/main.cc file instantiates isc::dhcp::ControlledDhcpv4Srv class that establishes connection with msgq and install necessary handlers for receiving commands and configuration updates. It is derived from a base isc::dhcp::Dhcpv4Srv class that implements DHCPv4 server functionality, without any controlling mechanisms. ControlledDhcpv4Srv instantiates several components to make management session possible. In particular, isc::cc::Session cc_session object uses ASIO for establishing connection. It registers its socket in isc::asiolink::IOService io_service object. Typically, other components (e.g. auth or resolver) that use ASIO for their communication, register their other sockets in the same io_service and then just call io_service.run() method that does not return, until one of the callback decides that it is time to shut down the whole component cal calls io_service.stop(). DHCPv4 works in a different way. It does receive messages using select() (see isc::dhcp::IfaceMgr::receive4()), which is incompatible with ASIO. To solve this problem, socket descriptor is extracted from cc_session object and is passed to IfaceMgr by using isc::dhcp::IfaceMgr::set_session_socket(). IfaceMgr then uses this socket in its select() call. If there is some data to be read, it calls registered callback that is supposed to read and process incoming data. This somewhat complicated approach is needed for a simple reason. In embedded deployments there will be no message queue. Not referring directly to anything related to message queue in isc::dhcp::Dhcpv4Srv and isc::dhcp::IfaceMgr classes brings in two benefits. First, the can be used with and without message queue. Second benefit is related to the first one: \ref libdhcp is supposed to be simple and robust and not require many dependencies. One notable example of a use case that benefits from this approach is a perfdhcp tool. Finally, the idea is that it should be possible to instantiate Dhcpv4Srv object directly, thus getting a server that does not support msgq. That is useful for embedded environments. It may also be useful in validation.  Stephen Morris committed Dec 13, 2012 72 @section dhcpv4ConfigParser Configuration Parser in DHCPv4  Tomek Mrugalski committed Oct 12, 2012 73 74  This parser follows exactly the same logic as its DHCPv6 counterpart.  Stephen Morris committed Dec 13, 2012 75 See \ref dhcpv6ConfigParser.  Tomek Mrugalski committed Oct 12, 2012 76   Stephen Morris committed Dec 13, 2012 77 @section dhcpv4ConfigInherit DHCPv4 configuration inheritance  Tomek Mrugalski committed Oct 12, 2012 78 79  Configuration inheritance in DHCPv4 follows exactly the same logic as its DHCPv6  Stephen Morris committed Dec 13, 2012 80 counterpart. See \ref dhcpv6ConfigInherit.  Tomek Mrugalski committed Oct 12, 2012 81 82  */