diff options
Diffstat (limited to 'src/bin/dhcp4/dhcp4.dox')
-rw-r--r-- | src/bin/dhcp4/dhcp4.dox | 112 |
1 files changed, 111 insertions, 1 deletions
diff --git a/src/bin/dhcp4/dhcp4.dox b/src/bin/dhcp4/dhcp4.dox index 86ae845a9c..aa43ee3267 100644 --- a/src/bin/dhcp4/dhcp4.dox +++ b/src/bin/dhcp4/dhcp4.dox @@ -1,4 +1,4 @@ -// Copyright (C) 2012 Internet Systems Consortium, Inc. ("ISC") +// Copyright (C) 2012-2013 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 @@ -79,4 +79,114 @@ See \ref dhcpv6ConfigParser. Configuration inheritance in DHCPv4 follows exactly the same logic as its DHCPv6 counterpart. See \ref dhcpv6ConfigInherit. +@section dhcpv4OptionsParse Custom functions to parse message options + +The DHCPv4 server uses the same logic to supply custom callback function to +parse message option as DHCPv6 server implementation. See \ref dhcpv6OptionsParse. + +@section dhcpv4DDNSIntegration DHCPv4 Server Support for the Dynamic DNS Updates +T +he DHCPv4 server supports processing of the DHCPv4 Client FQDN option (RFC4702) +and the DHCPv4 Host Name option (RFC2132). Client may send one of these options +to convey its fully qualified or partial name to the server. The server may use +this name to perform DNS updates for the client. If server receives both options +in the same message, the DHCPv4 Client FQDN %Option is processed and the Host +Name option is ignored. If only Host Name Option is present in the client's +message, it is used to update DNS. + +Server may be configured to use a different name to perform DNS update for the +client. In this case the server will return one of the DHCPv4 Client FQDN or +Host Name %Option in its response with the name which was selected for the +client to indicate that this name will be used to perform DNS update. + +The b10-dhcp-ddns process is responsible for the actual communication with the +DNS, i.e. to send DNS update messages. The b10-dhcp4 module is responsible for +generating @ref isc::dhcp_ddns::NameChangeRequest and sending it to +the b10-dhcp-ddns module. The @ref isc::dhcp_ddns::NameChangeRequest object +represents changes to the DNS bindings, related to acquisition, renewal or +release of the DHCP lease. The b10-dhcp4 module implements the simple FIFO queue +of the NameChangeRequest objects. The module logic, which processes the incoming +DHCPv4 Client FQDN and Host Name Options puts these requests into the FIFO queue. + +@todo Currently the FIFO queue is not processed after the NameChangeRequests are +generated and added to it. In the future implementation steps it is planned to +create a code which will check if there are any outstanding requests in the queue +and send them to the b10-dhcp-ddns module when server is idle waiting for DHCP +messages. + +When client gets an address from the server, a DHCPv4 server may generate 0, 1 +or 2 NameChangeRequests during single message processing. Server generates no +NameChangeRequests if it is not configured to update DNS or it rejects the DNS +update for any other reason. + +Server may generate 1 NameChangeRequest in a case when client acquired a new +lease or it releases an existing lease. In the former case, the NameChangeRequest +type is CHG_ADD, which indicates that the b10-dhcp-ddns module should add a new +DNS binding for the client, and it is assumed that there is no DNS binding for +this client already. In the latter case, the NameChangeRequest type is CHG_REMOVE +to indicate to the b10-dhcp-ddns module that an existing DNS binding should be +removed from the DNS. The binding consists of the forward and reverse mapping. +The server may only remove the mapping which it had added. Therefore, the lease +database holds the information which updates (no update, reverse only update, +forward only update or both reverse and forward update) have been performed when +the lease was acquired or renewed. Server checks this information to make a +decision which mapping it is supposed to remove when lease is released. + +Server may generate 2 NameChangeRequests in case a client is renewing a lease and +it already has a DNS binding for that lease. The DHCPv4 server will check if +there is an existing lease for the client which has sent a message and if DNS +Updates had been performed for this lease. If the notion of client's FQDN changes, +comparing to the information stored in the lease database, the DHCPv4 has to +remove an existing binding from the DNS and then add a new binding according to +the new FQDN information received from the client. If the client's FQDN +information (including the client's name and type of update performed) doesn't +change comparing to the NameChangeRequest is not generated. + +The DHCPv4 Client FQDN %Option comprises flags which communicate to the server +what updates (if any) client expects the server to perform. Server may be +configured to obey client's preference or to do FQDN processing in a different way. +If the server overrides client's preference it will communicate it by sending +the DHCPv4 Client FQDN %Option in its responses to a client, with the appropriate +flags set. + +@todo Note, that current implementation doesn't allow configuration of the +server's behaviour with respect to DNS Updates. This is planned for the future. +The default behaviour is constituted by the set of constants defined in the +(upper part of) dhcp4_srv.cc file. Once the configuration is implemented, +these constants will be removed. + +@section dhcpv4Classifier DHCPv4 Client Classification + +Kea DHCPv4 server currently supports simplified client classification. It is called +"simplified", because the incoming packets are classified based on the content +of the vendor class (60) option. More flexible classification is planned, but there +are no specific development dates agreed. + +For each incoming packet, @ref isc::dhcp::Dhcpv4Srv::classifyPacket() method is called. +It attempts to extract content of the vendor class option and interpret as a name +of the class. For now, the code has been tested with two classes used in cable modem +networks: eRouter1.0 and docsis3.0, but any other content of the vendor class option will +be interpreted as a class name. + +In principle any given packet can belong to zero or more classes. As the current +classifier is very modest, there's only one way to assign a class (based on vendor class +option), the ability to assign more than one class to a packet is not yet exercised. +Neverthless, there is such a possibility and it will be used in a near future. To +check whether a packet belongs to given class, isc::dhcp::Pkt4::inClass method should +be used. + +Currently there is a short code section that alternates packet processing depending on +which class it belongs to. It is planned to move that capability to an external hook +library. See ticket #3275. The class specific behavior is: + +- docsis3.0 packets have siaddr (next server) field set +- docsis3.0 packets have file field set to the content of the boot-file-name option +- eRouter1.0 packets have siaddr (next server) field cleared + +Aforementioned modifications are conducted in @ref isc::dhcp::Dhcpv4Srv::classSpecificProcessing. + +@section dhcpv4Other Other DHCPv4 topics + + For hooks API support in DHCPv4, see @ref dhcpv4Hooks. + */ |