From 3aaabf071685f724f0542ff51db0cb049d6d68a2 Mon Sep 17 00:00:00 2001 From: Tomek Mrugalski Date: Mon, 16 Jun 2014 16:32:26 +0200 Subject: [PATCH] [3418] Remaining DHCPv4 sections converted to JSON --- doc/guide/config.xml | 4 +- doc/guide/dhcp4-srv.xml | 481 ++++++++++++++++++++++++--------------- doc/guide/quickstart.xml | 4 +- 3 files changed, 297 insertions(+), 192 deletions(-) diff --git a/doc/guide/config.xml b/doc/guide/config.xml index bfad9ed96c..2fc939c334 100644 --- a/doc/guide/config.xml +++ b/doc/guide/config.xml @@ -107,7 +107,9 @@ context. For example, when discussing IPv6 subnets configuration in DHCPv6, only subnet6 parameters will be mentioned. It is implied that remaining elements (global that holds Dhcp6, Logging and possibly - DhcpDdns) are present, but are omitted for clarity. + DhcpDdns) are present, but are omitted for clarity. Usually, locations + where extra parameters may appear are denoted with ellipsis (triple + dot).
diff --git a/doc/guide/dhcp4-srv.xml b/doc/guide/dhcp4-srv.xml index 8a4bccb1bb..beaf2f2a2c 100644 --- a/doc/guide/dhcp4-srv.xml +++ b/doc/guide/dhcp4-srv.xml @@ -818,13 +818,18 @@ to temporary add asterisk and retain the list of interface names. The values of the option are set as follows: -> config add Dhcp4/option-data -> config set Dhcp4/option-data[0]/name "bar" -> config set Dhcp4/option-data[0]/space "dhcp4" -> config set Dhcp4/option-data[0]/code 223 -> config set Dhcp4/option-data[0]/csv-format true -> config set Dhcp4/option-data[0]/data "192.0.2.100, 123, true, Hello World" -> config commit +"Dhcp4": { + "option-data": [ + { + "name": "bar", + "space": "dhcp4", + "code": 223, + "csv-format": true, + "data": "192.0.2.100, 123, true, Hello World" + } + ], + ... +} "csv-format" is set "true" to indicate that the "data" field comprises a command-separated list of values. The values in the "data" must correspond to the types set in the "record-types" field of the option definition. @@ -857,37 +862,51 @@ to temporary add asterisk and retain the list of interface names. The first step is to define the format of the option: -> config add Dhcp4/option-def -> config set Dhcp4/option-def[0]/name "foo" -> config set Dhcp4/option-def[0]/code 1 -> config set Dhcp4/option-def[0]/space "vendor-encapsulated-options-space" -> config set Dhcp4/option-def[0]/type "record" -> config set Dhcp4/option-def[0]/array false -> config set Dhcp4/option-def[0]/record-types "ipv4-address, uint16, string" -> config set Dhcp4/option-def[0]/encapsulates "" -> config commit - +"Dhcp4": { + "option-def": [ + { + "name": "foo", + "code": 1, + "space": "vendor-encapsulated-options-space", + "type": "record", + "array: false, + "record-types": "ipv4-address, uint16, string", + "encapsulates": "" + } + ], + ... +} (Note that the option space is set to "vendor-encapsulated-options-space".) Once the option format is defined, the next step is to define actual values for that option: - -> config add Dhcp4/option-data -> config set Dhcp4/option-data[0]/name "foo" -> config set Dhcp4/option-data[0]/space "vendor-encapsulated-options-space" -> config set Dhcp4/option-data[0]/code 1 -> config set Dhcp4/option-data[0]/csv-format true -> config set Dhcp4/option-data[0]/data "192.0.2.3, 123, Hello World" -> config commit + +"Dhcp4": { + "option-data": [ + { + "name": "foo" + "space": "vendor-encapsulated-options-space", + "code": 1, + "csv-format": true, + "data": "192.0.2.3, 123, Hello World" + } + ], + ... +} We also set up a dummy value for vendor-opts, the option that conveys our sub-option "foo". This is required else the option will not be included in messages sent to the client. - -> config add Dhcp4/option-data -> config set Dhcp4/option-data[1]/name "vendor-encapsulated-options" -> config set Dhcp4/option-data[1]/space "dhcp4" -> config set Dhcp4/option-data[1]/code 43 -> config set Dhcp4/option-data[1]/csv-format false -> config set Dhcp4/option-data[1]/data "" -> config commit + +"Dhcp4": { + "option-data": [ + { + "name": "vendor-encapsulated-options" + "space": "dhcp4", + "code": 43, + "csv-format": false, + "data: "" + } + ], + ... +} @@ -922,26 +941,29 @@ to temporary add asterisk and retain the list of interface names. code 222 that conveys two sub-options with codes 1 and 2. First we need to define the new sub-options: -> config add Dhcp4/option-def -> config set Dhcp4/option-def[0]/name "subopt1" -> config set Dhcp4/option-def[0]/code 1 -> config set Dhcp4/option-def[0]/space "isc" -> config set Dhcp4/option-def[0]/type "ipv4-address" -> config set Dhcp4/option-def[0]/record-types "" -> config set Dhcp4/option-def[0]/array false -> config set Dhcp4/option-def[0]/encapsulate "" -> config commit - -> config add Dhcp4/option-def -> config set Dhcp4/option-def[1]/name "subopt2" -> config set Dhcp4/option-def[1]/code 2 -> config set Dhcp4/option-def[1]/space "isc" -> config set Dhcp4/option-def[1]/type "string" -> config set Dhcp4/option-def[1]/record-types "" -> config set Dhcp4/option-def[1]/array false -> config set Dhcp4/option-def[1]/encapsulate "" -> config commit - +"Dhcp4": { + "option-def": [ + { + "name": "subopt1", + "code": 1, + "space": "isc", + "type": "ipv4-address". + "record-types": "", + "array": false, + "encapsulate "" + }, + { + "name": "subopt2", + "code": 2, + "space": "isc", + "type": "string", + "record-types": "", + "array": false + "encapsulate": "" + } + ], + ... +} Note that we have defined the options to belong to a new option space (in this case, "isc"). @@ -949,16 +971,21 @@ to temporary add asterisk and retain the list of interface names. The next step is to define a regular DHCPv4 option with our desired code and specify that it should include options from the new option space: -> add Dhcp4/option-def -> set Dhcp4/option-def[2]/name "container" -> set Dhcp4/option-def[2]/code 222 -> set Dhcp4/option-def[2]/space "dhcp4" -> set Dhcp4/option-def[2]/type "empty" -> set Dhcp4/option-def[2]/array false -> set Dhcp4/option-def[2]/record-types "" -> set Dhcp4/option-def[2]/encapsulate "isc" -> commit - +"Dhcp4": { + "option-def": [ + ..., + { + "name": "container", + "code": 222, + "space": "dhcp4", + "type": "empty", + "array": false, + "record-types": "", + "encapsulate": "isc" + } + ], + ... +} The name of the option space in which the sub-options are defined is set in the "encapsulate" field. The "type" field is set to "empty" to indicate that this option does not carry any data other than @@ -967,29 +994,32 @@ to temporary add asterisk and retain the list of interface names. Finally, we can set values for the new options: -> config add Dhcp4/option-data -> config set Dhcp4/option-data[0]/name "subopt1" -> config set Dhcp4/option-data[0]/space "isc" -> config set Dhcp4/option-data[0]/code 1 -> config set Dhcp4/option-data[0]/csv-format true -> config set Dhcp4/option-data[0]/data "192.0.2.3" -> config commit - -> config add Dhcp4/option-data -> config set Dhcp4/option-data[1]/name "subopt2" -> config set Dhcp4/option-data[1]/space "isc" -> config set Dhcp4/option-data[1]/code 2 -> config set Dhcp4/option-data[1]/csv-format true -> config set Dhcp4/option-data[1]/data "Hello world" -> config commit - -> config add Dhcp4/option-data -> config set Dhcp4/option-data[2]/name "container" -> config set Dhcp4/option-data[2]/space "dhcp4" -> config set Dhcp4/option-data[2]/code 222 -> config set Dhcp4/option-data[2]/csv-format true -> config set Dhcp4/option-data[2]/data "" -> config commit +"Dhcp4": { + "option-data": [ + { + "name": "subopt1", + "space": "isc", + "code": 1, + "csv-format": true, + "data": "192.0.2.3" + }, + } + "name": "subopt2", + "space": "isc", + "code": 2, + "csv-format": true, + "data": "Hello world" + }, + { + "name": "container", + "space": "dhcp4", + "code": 222, + "csv-format": true, + "data": "" + } + ], + ... +} Even though the "container" option does not carry any data except sub-options, the "data" field must be explicitly set to an empty value. @@ -1075,11 +1105,16 @@ to temporary add asterisk and retain the list of interface names. VENDOR_CLASS_docsis3.0 are allowed to use this subnet. Such a configuration can be achieved in the following way: -> config add Dhcp4/subnet4 -> config set Dhcp4/subnet4[0]/subnet "192.0.2.0/24" -> config set Dhcp4/subnet4[0]/pool [ "192.0.2.10 - 192.0.2.20" ] -> config set Dhcp4/subnet4[0]/client-class "VENDOR_CLASS_docsis3.0" -> config commit +"Dhcp4": { + "subnet4": [ + { + subnet: "192.0.2.0/24", + "pool": [ "192.0.2.10 - 192.0.2.20" ], + "client-class": "VENDOR_CLASS_docsis3.0" + } + ], + ... +} @@ -1107,24 +1142,29 @@ to temporary add asterisk and retain the list of interface names. The parameters for controlling the generation of NCRs for submission to D2 are contained in the "dhcp-ddns" section of the b10-dhcp4 server - configuration. The default values for this section appears as follows: + configuration. The default values for this section appear as follows: -> config show Dhcp4/dhcp-ddns -Dhcp4/dhcp-ddns/enable-updates true boolean -Dhcp4/dhcp-ddns/server-ip "127.0.0.1" string -Dhcp4/dhcp-ddns/server-port 53001 integer -Dhcp4/dhcp-ddns/sender-ip "" string -Dhcp4/dhcp-ddns/sender-port 0 integer -Dhcp4/dhcp-ddns/max-queue-size 1024 integer -Dhcp4/dhcp-ddns/ncr-protocol "UDP" string -Dhcp4/dhcp-ddns/ncr-format "JSON" string -Dhcp4/dhcp-ddns/override-no-update false boolean -Dhcp4/dhcp-ddns/override-client-update false boolean -Dhcp4/dhcp-ddns/replace-client-name false boolean -Dhcp4/dhcp-ddns/generated-prefix "myhost" string -Dhcp4/dhcp-ddns/qualifying-suffix "example.com" string +"Dhcp4": { + "dhcp-ddns": { + "enable-updates": true, + "server-ip": "127.0.0.1", + "server-port": 53001, + "sender-ip": "", + "sender-port: 0, + "max-queue-size": 1024, + "ncr-protocol": "UDP", + "ncr-format": "JSON", + "override-no-update": false, + "override-client-update": false, + "replace-client-name": false, + "generated-prefix": "myhost", + "qualifying-suffix": "example.com" + }, + ... +} +
DHCP-DDNS Server Connectivity @@ -1182,12 +1222,17 @@ Dhcp4/dhcp-ddns/qualifying-suffix "example.com" string all of the default values mentioned above should be sufficient. If, however, D2 has been configured to listen on a different address or port, these values must altered accordingly. For example, if D2 has been - configured to listen on 198.162.1.10 port 900, the following commands + configured to listen on 192.168.1.10 port 900, the following commands would be required: -> config set Dhcp4/dhcp-ddns/server-ip "198.162.1.10" -> config set Dhcp4/dhcp-ddns/server-port 900 -> config commit +"Dhcp4": { + "dhcp-ddns: { + "server-ip": "192.168.1.10", + "server-port": 900, + ... + }, + ... +}
@@ -1289,11 +1334,17 @@ Dhcp4/dhcp-ddns/qualifying-suffix "example.com" string will be dropped by the b10-dhcp4.) - To override client delegation, issue the following commands: + To override client delegation, set the following values in your configuration + file: -> config set Dhcp4/dhcp-ddns/override-client-update true -> config commit +"Dhcp4": { + "dhcp-ddns": { + "override-client-update": true, + ... + }, + ... +} The third row in the table above describes the case in which the client @@ -1307,8 +1358,13 @@ Dhcp4/dhcp-ddns/qualifying-suffix "example.com" string To override client delegation, issue the following commands: -> config set Dhcp4/dhcp-ddns/override-no-update true -> config commit +"Dhcp4": { + "dhcp-ddns": { + "override-no-update": true, + ... + }, + ... +} b10-dhcp4 will always generate DDNS update requests if the client request @@ -1354,8 +1410,13 @@ Dhcp4/dhcp-ddns/qualifying-suffix "example.com" string parameter "replace-client-name" to true as follows: -> config set Dhcp4/dhcp-ddns/replace-client-name true -> config commit +"Dhcp4": { + "dhcp-ddns": { + "replace-client-name": true, + ... + }, + ... +} The prefix used in the generation of a FQDN is specified by the @@ -1363,8 +1424,13 @@ Dhcp4/dhcp-ddns/qualifying-suffix "example.com" string its value simply set it to the desired string: -> config set Dhcp4/dhcp-ddns/generated-prefix "another.host" -> config commit +"Dhcp4": { + "dhcp-ddns": { + "generated-prefix": "another.host", + ... + }, + ... +} The suffix used when generating a FQDN or when qualifying a partial @@ -1373,8 +1439,13 @@ Dhcp4/dhcp-ddns/qualifying-suffix "example.com" string string: -> config set Dhcp4/dhcp-ddns/generated-prefix "our.net" -> config commit +"Dhcp4": { + "dhcp-ddns": { + "generated-prefix": "foo.example.org", + ... + }, + ... +}
@@ -1394,6 +1465,58 @@ Dhcp4/dhcp-ddns/qualifying-suffix "example.com" string +
+ Next server (siaddr) + In some cases, clients want to obtain configuration from the TFTP server. + Although there is a dedicated option for it, some devices may use siaddr field + in the DHCPv4 packet for that purpose. That specific field can be configured + using next-server directive. It is possible to define it in global scope or + for a given subnet only. If both are defined, subnet value takes precedence. + The value in subnet can be set to 0.0.0.0, which means that next-server should + not be sent. It may also be set to empty string, which means the same as if + it was not defined at all - use global value. + + + +"Dhcp4": { + "next-server": "192.0.2.123", + ..., + "subnet4": { + [ + "next-server": "192.0.2.234", + ... + ] + } +} + +
+ +
+ Echoing client-id (RFC6842) + Original DHCPv4 spec (RFC2131) states that the DHCPv4 + server must not send back client-id options when responding to + clients. However, in some cases that confused clients that did + not have MAC address or client-id. See RFC6842 for details. That + behavior has changed with the publication of RFC6842 which + updated RFC2131. That update now states that the server must + send client-id if client sent it. That is the default behaviour + that Kea offers. However, in some cases older devices that do + not support RFC6842 may refuse to accept responses that include + client-id option. To enable backward compatibility, an optional + configuration parameter has been introduced. To configure it, + use the following commands: + + +"Dhcp4": { + "echo-client-id": false, + ... +} + +
+ + + thomson +
@@ -1413,56 +1536,8 @@ Dhcp4/dhcp-ddns/qualifying-suffix "example.com" string
- -
- Next server (siaddr) - In some cases, clients want to obtain configuration from the TFTP server. - Although there is a dedicated option for it, some devices may use siaddr field - in the DHCPv4 packet for that purpose. That specific field can be configured - using next-server directive. It is possible to define it in global scope or - for a given subnet only. If both are defined, subnet value takes precedence. - The value in subnet can be set to 0.0.0.0, which means that next-server should - not be sent. It may also be set to empty string, which means the same as if - it was not defined at all - use global value. - - - -> config add Dhcp4/next-server -> config set Dhcp4/next-server "192.0.2.123" -> config commit - -> config add Dhcp4/subnet[0]/next-server -> config set Dhcp4/subnet[0]/next-server "192.0.2.234" -> config commit - - -
- -
- Echoing client-id (RFC6842) - Original DHCPv4 spec (RFC2131) states that the DHCPv4 - server must not send back client-id options when responding to - clients. However, in some cases that confused clients that did - not have MAC address or client-id. See RFC6842 for details. That - behavior has changed with the publication of RFC6842 which - updated RFC2131. That update now states that the server must - send client-id if client sent it. That is the default behaviour - that Kea offers. However, in some cases older devices that do - not support RFC6842 may refuse to accept responses that include - client-id option. To enable backward compatibility, an optional - configuration parameter has been introduced. To configure it, - use the following commands: - - -> config add Dhcp4/echo-client-id -> config set Dhcp4/echo-client-id False -> config commit - - -
-
- How DHCPv4 server selects subnet for a client + How DHCPv4 server selects a subnet for the client The DHCPv4 server differentiates between the directly connected clients, clients trying to renew leases and clients sending their messages through @@ -1498,7 +1573,6 @@ Dhcp4/dhcp-ddns/qualifying-suffix "example.com" string mechanism alters the way in which subnet is selected for the client, depending on the classes that the client belongs to. -
Using specific relay agent for a subnet @@ -1528,12 +1602,21 @@ Dhcp4/dhcp-ddns/qualifying-suffix "example.com" string The server will be able to select this subnet for any incoming packets that came from a relay that has an address in 192.0.2.0/24 subnet. It will also select that subnet for a relay with address 10.0.0.1. - -> config add Dhcp4/subnet4 -> config set Dhcp4/subnet4[0]/subnet "192.0.2.0/24" -> config set Dhcp4/subnet4[0]/pool [ "192.0.2.10 - 192.0.2.20" ] -> config set Dhcp4/subnet4[0]/relay/ip-address "10.0.0.1" -> config commit + +"Dhcp4": { + "subnet4: [ + { + "subnet": "192.0.2.0/24", + "pool": [ "192.0.2.10 - 192.0.2.20" ], + "relay": { + "ip-address": "10.0.0.1" + }, + ... + } + ], + ... +} +
@@ -1555,20 +1638,34 @@ Dhcp4/dhcp-ddns/qualifying-suffix "example.com" string everything connected behind modems should get addresses from another subnet (192.0.2.0/24). The CMTS that acts as a relay an uses address 10.1.1.1. The following configuration can serve that configuration: - -> config add Dhcp4/subnet4 -> config set Dhcp4/subnet4[0]/subnet "10.1.1.0/24" -> config set Dhcp4/subnet4[0]/pool [ "10.1.1.2 - 10.1.1.20" ] -> config set Dhcp4/subnet4[0]/client-class "docsis3.0" -> config set Dhcp4/subnet4[0]/relay/ip-address "10.1.1.1" -> config add Dhcp4/subnet4 -> config set Dhcp4/subnet4[1]/subnet "192.0.2.0/24" -> config set Dhcp4/subnet4[1]/pool [ "192.0.2.10 - 192.0.2.20" ] -> config set Dhcp4/subnet4[1]/relay/ip-address "10.1.1.1" -> config commit + +"Dhcp4": { + "subnet4: [ + { + "subnet": "10.1.1.0/24", + "pool": [ "10.1.1.2 - 10.1.1.20" ], + "client-class" "docsis3.0", + "relay": { + "ip-address": "10.1.1.1" + } + }, + { + "subnet": "192.0.2.0/24", + "pool": [ "192.0.2.10 - 192.0.2.20" ], + "relay": { + "ip-address": "10.1.1.1" + } + } + ], + ... +} + + + +
Supported Standards The following standards and draft standards are currently @@ -1617,6 +1714,12 @@ Dhcp4/dhcp-ddns/qualifying-suffix "example.com" string . + + Host reservation (statis addresses) is not supported yet. + + + Full featured client classification is not supported yet. + BOOTP (RFC 951) diff --git a/doc/guide/quickstart.xml b/doc/guide/quickstart.xml index 12efe32aec..076cbb97e1 100644 --- a/doc/guide/quickstart.xml +++ b/doc/guide/quickstart.xml @@ -49,8 +49,8 @@ $ ./configure [your extra parameters] - Install it as root (by default to prefix - /usr/local/): + Install it (by default the installation prefix is /usr/local/, + so you need root privileges for that step): $ make install