]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#1298] all-options.json
authorAndrei Pavel <andrei@isc.org>
Tue, 13 Oct 2020 17:30:52 +0000 (20:30 +0300)
committerAndrei Pavel <andrei@isc.org>
Fri, 23 Oct 2020 15:29:26 +0000 (18:29 +0300)
doc/Makefile.am
doc/examples/kea4/all-keys.json
doc/examples/kea4/all-options.json [new file with mode: 0644]
doc/examples/kea6/all-keys.json
doc/examples/kea6/all-options.json [new file with mode: 0644]
doc/sphinx/arm/dhcp4-srv.rst
src/lib/dhcp/dhcp4.h
src/lib/dhcp/dhcp6.h

index f15185ac330a9960872143b8541df041d151671e..f153e2b68cc455238f618c91ffda95d102ed55ab 100644 (file)
@@ -13,6 +13,7 @@ nobase_dist_doc_DATA += examples/https/shell/kea-stunnel.conf
 nobase_dist_doc_DATA += examples/kea4/advanced.json
 nobase_dist_doc_DATA += examples/kea4/all-keys.json
 nobase_dist_doc_DATA += examples/kea4/all-keys-netconf.json
+nobase_dist_doc_DATA += examples/kea4/all-options.json
 nobase_dist_doc_DATA += examples/kea4/backends.json
 nobase_dist_doc_DATA += examples/kea4/cassandra.json
 nobase_dist_doc_DATA += examples/kea4/classify.json
@@ -36,6 +37,7 @@ nobase_dist_doc_DATA += examples/kea4/with-ddns.json
 nobase_dist_doc_DATA += examples/kea6/advanced.json
 nobase_dist_doc_DATA += examples/kea6/all-keys.json
 nobase_dist_doc_DATA += examples/kea6/all-keys-netconf.json
+nobase_dist_doc_DATA += examples/kea6/all-options.json
 nobase_dist_doc_DATA += examples/kea6/backends.json
 nobase_dist_doc_DATA += examples/kea6/cassandra.json
 nobase_dist_doc_DATA += examples/kea6/classify.json
index 2c1f4af756b558e0724670d7c647d8a960566f7b..a8aedd94b4a6b549cff57627b2ad55896549af79 100644 (file)
         "ddns-update-on-renew": true,
 
         // Boolean flag, which is passed to kea-dhcp-ddns with each DDNS
-        // update request to indicate whether or not DNS update conflict 
+        // update request to indicate whether or not DNS update conflict
         // resolution as described in RFC 4703 should be employed for the
-        // given update request.  The default value for this flag is true.  
+        // given update request.  The default value for this flag is true.
         // It may be specified at the global, shared-network and subnet levels.
         "ddns-use-conflict-resolution": true,
 
diff --git a/doc/examples/kea4/all-options.json b/doc/examples/kea4/all-options.json
new file mode 100644 (file)
index 0000000..d4b9385
--- /dev/null
@@ -0,0 +1,1954 @@
+// This example configuration file for DHCPv4 server in Kea contains:
+//
+// - data for all the standard options
+// - custom option definitions at global level along with some associated
+// option data
+// - custom option data with standardized option spaces other than "dhcp4"
+// - custom option spaces
+// - option embedding examples
+//
+// The reader is strongly encouraged to take a look at the option formats
+// documented in the Kea ARM:
+// https://kea.readthedocs.io/en/latest/arm/dhcp4-srv.html?highlight=list%20of%20standard%20dhcpv4#id2
+
+{
+  "Dhcp4": {
+    /*                Data for all standard option definitions                */
+    // Option data defined globally
+    "option-data": [
+      /*
+       Code   Len        Subnet Mask
+      +-----+-----+-----+-----+-----+-----+
+      |  1  |  4  |  m1 |  m2 |  m3 |  m4 |
+      +-----+-----+-----+-----+-----+-----+
+      */
+      // Note: not commonly configured in Kea
+      // Type: IPv4 address
+      {
+        "code": 1,
+        "data": "192.0.2.1",
+        "name": "subnet-mask"
+      },
+
+      /*
+       Code   Len        Time Offset
+      +-----+-----+-----+-----+-----+-----+
+      |  2  |  4  |  n1 |  n2 |  n3 |  n4 |
+      +-----+-----+-----+-----+-----+-----+
+      */
+      // Type: int32
+      {
+        "code": 2,
+        "data": "-25200",
+        "name": "time-offset"
+      },
+
+      /*
+       Code   Len         Address 1               Address 2
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      |  3  |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |  ...
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      */
+      // Type: array of {IPv4 address}
+      {
+        "code": 3,
+        "data": "192.0.2.2, 192.0.2.3",
+        "name": "routers"
+      },
+
+      /*
+       Code   Len         Address 1               Address 2
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      |  4  |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |  ...
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      */
+      // Type: array of {IPv4 address}
+      {
+        "code": 4,
+        "data": "192.0.2.4, 192.0.2.5",
+        "name": "time-servers"
+      },
+
+      /*
+       Code   Len         Address 1               Address 2
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      |  5  |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |  ...
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      */
+      // Type: array of {IPv4 address}
+      {
+        "code": 5,
+        "data": "192.0.2.6, 192.0.2.7",
+        "name": "name-servers"
+      },
+
+      /*
+       Code   Len         Address 1               Address 2
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      |  6  |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |  ...
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      */
+      // Type: array of {IPv4 address}
+      {
+        "code": 6,
+        "data": "192.0.2.8, 192.0.2.9",
+        "name": "domain-name-servers"
+      },
+
+      /*
+       Code   Len         Address 1               Address 2
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      |  7  |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |  ...
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      */
+      // Type: array of {IPv4 address}
+      {
+        "code": 7,
+        "data": "192.0.2.10, 192.0.2.11",
+        "name": "log-servers"
+      },
+
+      /*
+       Code   Len         Address 1               Address 2
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      |  8  |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |  ...
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      */
+      // Type: array of {IPv4 address}
+      {
+        "code": 8,
+        "data": "192.0.2.12, 192.0.2.13",
+        "name": "cookie-servers"
+      },
+
+      /*
+       Code   Len         Address 1               Address 2
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      |  9  |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |  ...
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      */
+      // Type: array of {IPv4 address}
+      {
+        "code": 9,
+        "data": "192.0.2.14, 192.0.2.15",
+        "name": "lpr-servers"
+      },
+
+      /*
+       Code   Len         Address 1               Address 2
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      |  10 |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |  ...
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      */
+      // Type: array of {IPv4 address}
+      {
+        "code": 10,
+        "data": "192.0.2.16, 192.0.2.17",
+        "name": "impress-servers"
+      },
+
+      /*
+       Code   Len         Address 1               Address 2
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      |  11 |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |  ...
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      */
+      // Type: array of {IPv4 address}
+      {
+        "code": 11,
+        "data": "192.0.2.18, 192.0.2.19",
+        "name": "resource-location-servers"
+      },
+
+      /*
+       Code   Len                 Host Name
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      |  12 |  n  |  h1 |  h2 |  h3 |  h4 |  h5 |  h6 |  ...
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      */
+      // Note: not commonly configured in Kea
+      // Type: string
+      {
+        "code": 12,
+        "data": "my-hostname",
+        "name": "host-name"
+      },
+
+      /*
+       Code   Len   File Size
+      +-----+-----+-----+-----+
+      |  13 |  2  |  l1 |  l2 |
+      +-----+-----+-----+-----+
+      */
+      // Type: uint16
+      {
+        "code": 13,
+        "data": "1024",
+        "name": "boot-size"
+      },
+
+      /*
+       Code   Len      Dump File Pathname
+      +-----+-----+-----+-----+-----+-----+---
+      |  14 |  n  |  n1 |  n2 |  n3 |  n4 | ...
+      +-----+-----+-----+-----+-----+-----+---
+      */
+      // Type: string
+      {
+        "code": 14,
+        "data": "/etc/crash-dump.img",
+        "name": "merit-dump"
+      },
+
+      /*
+       Code   Len        Domain Name
+      +-----+-----+-----+-----+-----+-----+--
+      |  15 |  n  |  d1 |  d2 |  d3 |  d4 |  ...
+      +-----+-----+-----+-----+-----+-----+--
+      */
+      // Type: FQDN
+      {
+        "code": 15,
+        "data": "my.example.org",
+        "name": "domain-name"
+      },
+
+      /*
+       Code   Len    Swap Server Address
+      +-----+-----+-----+-----+-----+-----+
+      |  16 |  n  |  a1 |  a2 |  a3 |  a4 |
+      +-----+-----+-----+-----+-----+-----+
+      */
+      // Type: IPv4 address
+      {
+        "code": 16,
+        "data": "192.0.2.20",
+        "name": "swap-server"
+      },
+
+      /*
+       Code   Len      Root Disk Pathname
+      +-----+-----+-----+-----+-----+-----+---
+      |  17 |  n  |  n1 |  n2 |  n3 |  n4 | ...
+      +-----+-----+-----+-----+-----+-----+---
+      */
+      // Type: string
+      {
+        "code": 17,
+        "data": "/path/to/root",
+        "name": "root-path"
+      },
+
+      /*
+       Code   Len      Extensions Pathname
+      +-----+-----+-----+-----+-----+-----+---
+      |  18 |  n  |  n1 |  n2 |  n3 |  n4 | ...
+      +-----+-----+-----+-----+-----+-----+---
+      */
+      // Type: string
+      {
+        "code": 18,
+        "data": "/path/to/extensions",
+        "name": "extensions-path"
+      },
+
+      /*
+       Code   Len  Value
+      +-----+-----+-----+
+      |  19 |  1  | 0/1 |
+      +-----+-----+-----+
+      */
+      // Type: boolean
+      {
+        "code": 19,
+        "data": "true",
+        "name": "ip-forwarding"
+      },
+
+      /*
+       Code   Len  Value
+      +-----+-----+-----+
+      |  20 |  1  | 0/1 |
+      +-----+-----+-----+
+      */
+      // Type: boolean
+      {
+        "code": 20,
+        "data": "true",
+        "name": "non-local-source-routing"
+      },
+
+      /*
+       Code   Len         Address 1                  Mask 1
+      +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
+      |  21 |  n  |  a1 |  a2 |  a3 |  a4 |  m1 |  m2 |  m3 |  m4 |
+      +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
+              Address 2                  Mask 2
+      +-----+-----+-----+-----+-----+-----+-----+-----+---
+      |  a1 |  a2 |  a3 |  a4 |  m1 |  m2 |  m3 |  m4 | ...
+      +-----+-----+-----+-----+-----+-----+-----+-----+---
+      */
+      // Type: array of {IPv4 address}
+      {
+        "code": 21,
+        "data": "192.0.2.21, 192.0.2.22",
+        "name": "policy-filter"
+      },
+
+      /*
+       Code   Len      Size
+      +-----+-----+-----+-----+
+      |  22 |  2  |  s1 |  s2 |
+      +-----+-----+-----+-----+
+      */
+      // Type: uint16
+      {
+        "code": 22,
+        "data": "2048",
+        "name": "max-dgram-reassembly"
+      },
+
+      /*
+       Code   Len   TTL
+      +-----+-----+-----+
+      |  23 |  1  | ttl |
+      +-----+-----+-----+
+      */
+      // Type: uint8
+      {
+        "code": 23,
+        "data": "248",
+        "name": "default-ip-ttl"
+      },
+
+      /*
+       Code   Len           Timeout
+      +-----+-----+-----+-----+-----+-----+
+      |  24 |  4  |  t1 |  t2 |  t3 |  t4 |
+      +-----+-----+-----+-----+-----+-----+
+      */
+      // Type: uint32
+      {
+        "code": 24,
+        "data": "131072",
+        "name": "path-mtu-aging-timeout"
+      },
+
+      /*
+       Code   Len     Size 1      Size 2
+      +-----+-----+-----+-----+-----+-----+---
+      |  25 |  n  |  s1 |  s2 |  s1 |  s2 | ...
+      +-----+-----+-----+-----+-----+-----+---
+      */
+      // Type: array of {uint16}
+      {
+        "code": 25,
+        "data": "3072, 4096",
+        "name": "path-mtu-plateau-table"
+      },
+
+      /*
+       Code   Len      MTU
+      +-----+-----+-----+-----+
+      |  26 |  2  |  m1 |  m2 |
+      +-----+-----+-----+-----+
+      */
+      // Type: uint16
+      {
+        "code": 26,
+        "data": "5120",
+        "name": "interface-mtu"
+      },
+
+      /*
+       Code   Len  Value
+      +-----+-----+-----+
+      |  27 |  1  | 0/1 |
+      +-----+-----+-----+
+      */
+      // Type: boolean
+      {
+        "code": 27,
+        "data": "true",
+        "name": "all-subnets-local"
+      },
+
+      /*
+       Code   Len     Broadcast Address
+      +-----+-----+-----+-----+-----+-----+
+      |  28 |  4  |  b1 |  b2 |  b3 |  b4 |
+      +-----+-----+-----+-----+-----+-----+
+      */
+      // Type: IPv4 address
+      {
+        "code": 28,
+        "data": "192.0.2.255",
+        "name": "broadcast-address"
+      },
+
+      /*
+       Code   Len  Value
+      +-----+-----+-----+
+      |  29 |  1  | 0/1 |
+      +-----+-----+-----+
+      */
+      // Type: boolean
+      {
+        "code": 29,
+        "data": "true",
+        "name": "perform-mask-discovery"
+      },
+
+      /*
+       Code   Len  Value
+      +-----+-----+-----+
+      |  30 |  1  | 0/1 |
+      +-----+-----+-----+
+      */
+      // Type: boolean
+      {
+        "code": 30,
+        "data": "true",
+        "name": "mask-supplier"
+      },
+
+      /*
+       Code   Len  Value
+      +-----+-----+-----+
+      |  31 |  1  | 0/1 |
+      +-----+-----+-----+
+      */
+      // Type: boolean
+      {
+        "code": 31,
+        "data": "true",
+        "name": "router-discovery"
+      },
+
+      /*
+       Code   Len            Address
+      +-----+-----+-----+-----+-----+-----+
+      |  32 |  4  |  a1 |  a2 |  a3 |  a4 |
+      +-----+-----+-----+-----+-----+-----+
+      */
+      // Type: IPv4 address
+      {
+        "code": 32,
+        "data": "192.0.2.23",
+        "name": "router-solicitation-address"
+      },
+
+      /*
+       Code   Len         Destination 1           Router 1
+      +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
+      |  33 |  n  |  d1 |  d2 |  d3 |  d4 |  r1 |  r2 |  r3 |  r4 |
+      +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
+              Destination 2           Router 2
+      +-----+-----+-----+-----+-----+-----+-----+-----+---
+      |  d1 |  d2 |  d3 |  d4 |  r1 |  r2 |  r3 |  r4 | ...
+      +-----+-----+-----+-----+-----+-----+-----+-----+---
+      */
+      // Type: array of {IPv4 address}
+      {
+        "code": 33,
+        "data": "192.0.2.24, 192.0.2.25",
+        "name": "static-routes"
+      },
+
+      /*
+       Code   Len  Value
+      +-----+-----+-----+
+      |  34 |  1  | 0/1 |
+      +-----+-----+-----+
+      */
+      // Type: boolean
+      {
+        "code": 34,
+        "data": "true",
+        "name": "trailer-encapsulation"
+      },
+
+      /*
+       Code   Len           Time
+      +-----+-----+-----+-----+-----+-----+
+      |  35 |  4  |  t1 |  t2 |  t3 |  t4 |
+      +-----+-----+-----+-----+-----+-----+
+      */
+      // Type: uint32
+      {
+        "code": 35,
+        "data": "196608",
+        "name": "arp-cache-timeout"
+      },
+
+      /*
+       Code   Len  Value
+      +-----+-----+-----+
+      |  36 |  1  | 0/1 |
+      +-----+-----+-----+
+      */
+      // Type: boolean
+      {
+        "code": 36,
+        "data": "true",
+        "name": "ieee802-3-encapsulation"
+      },
+
+      /*
+       Code   Len   TTL
+      +-----+-----+-----+
+      |  37 |  1  |  n  |
+      +-----+-----+-----+
+      */
+      // Type: uint8
+      {
+        "code": 37,
+        "data": "124",
+        "name": "default-tcp-ttl"
+      },
+
+      /*
+       Code   Len           Time
+      +-----+-----+-----+-----+-----+-----+
+      |  38 |  4  |  t1 |  t2 |  t3 |  t4 |
+      +-----+-----+-----+-----+-----+-----+
+      */
+      // Type: uint32
+      {
+        "code": 38,
+        "data": "262144",
+        "name": "tcp-keepalive-interval"
+      },
+
+      /*
+       Code   Len  Value
+      +-----+-----+-----+
+      |  39 |  1  | 0/1 |
+      +-----+-----+-----+
+      */
+      // Type: boolean
+      {
+        "code": 39,
+        "data": "true",
+        "name": "tcp-keepalive-garbage"
+      },
+
+      /*
+       Code   Len      NIS Domain Name
+      +-----+-----+-----+-----+-----+-----+---
+      |  40 |  n  |  n1 |  n2 |  n3 |  n4 | ...
+      +-----+-----+-----+-----+-----+-----+---
+      */
+      // Type: string
+      {
+        "code": 40,
+        "data": "nis.example.org",
+        "name": "nis-domain"
+      },
+
+      /*
+       Code   Len         Address 1               Address 2
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      |  41 |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |  ...
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      */
+      // Type: array of {IPv4 address}
+      {
+        "code": 41,
+        "data": "192.0.2.26, 192.0.2.27",
+        "name": "nis-servers"
+      },
+
+      /*
+       Code   Len         Address 1               Address 2
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      |  42 |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |  ...
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      */
+      // Type: array of {IPv4 address}
+      {
+        "code": 42,
+        "data": "192.0.2.28, 192.0.2.29",
+        "name": "ntp-servers"
+      },
+
+      /*
+       Code   Len   Vendor-specific information
+      +-----+-----+-----+-----+---
+      |  43 |  n  |  i1 |  i2 | ...
+      +-----+-----+-----+-----+---
+
+       Code   Len   Data item        Code   Len   Data item       Code
+      +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
+      |  T1 |  n  |  d1 |  d2 | ... |  T2 |  n  |  D1 |  D2 | ... | ... |
+      +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
+      */
+      // Type: empty
+      {
+        "code": 43,
+        "name": "vendor-encapsulated-options"
+      },
+
+      /*
+       Code   Len           Address 1              Address 2
+      +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+----
+      |  44 |  n  |  a1 |  a2 |  a3 |  a4 |  b1 |  b2 |  b3 |  b4 | ...
+      +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+----
+      */
+      // Type: array of {IPv4 address}
+      {
+        "code": 44,
+        "data": "192.0.2.30, 192.0.2.31",
+        "name": "netbios-name-servers"
+      },
+
+      /*
+       Code   Len           Address 1              Address 2
+      +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+----
+      |  45 |  n  |  a1 |  a2 |  a3 |  a4 |  b1 |  b2 |  b3 |  b4 | ...
+      +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+----
+      */
+      // Type: array of {IPv4 address}
+      {
+        "code": 45,
+        "data": "192.0.2.32, 192.0.2.33",
+        "name": "netbios-dd-server"
+      },
+
+      /*
+      Value         Node Type
+      -----         ---------
+      0x1           B-node
+      0x2           P-node
+      0x4           M-node
+      0x8           H-node
+
+       Code   Len  Node Type
+      +-----+-----+-----------+
+      |  46 |  1  | see above |
+      +-----+-----+-----------+
+      */
+      // Type: uint8
+      {
+        "code": 46,
+        "data": "0x1",
+        "name": "netbios-node-type"
+      },
+
+      /*
+       Code   Len       NetBIOS Scope
+      +-----+-----+-----+-----+-----+-----+----
+      |  47 |  n  |  s1 |  s2 |  s3 |  s4 | ...
+      +-----+-----+-----+-----+-----+-----+----
+      */
+      // Type: string
+      {
+        "code": 47,
+        "data": "scope42",
+        "name": "netbios-scope"
+      },
+
+      /*
+       Code   Len         Address 1               Address 2
+      +-----+-----+-----+-----+-----+-----+-----+-----+---
+      |  48 |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |   ...
+      +-----+-----+-----+-----+-----+-----+-----+-----+---
+      */
+      // Type: array of {IPv4 address}
+      {
+        "code": 48,
+        "data": "192.0.2.34, 192.0.2.35",
+        "name": "font-servers"
+      },
+
+      /*
+       Code   Len         Address 1               Address 2
+      +-----+-----+-----+-----+-----+-----+-----+-----+---
+      |  49 |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |   ...
+      +-----+-----+-----+-----+-----+-----+-----+-----+---
+      */
+      // Type: array of {IPv4 address}
+      {
+        "code": 49,
+        "data": "192.0.2.36, 192.0.2.37",
+        "name": "x-display-manager"
+      },
+
+      /*
+       Code   Len          Address
+      +-----+-----+-----+-----+-----+-----+
+      |  50 |  4  |  a1 |  a2 |  a3 |  a4 |
+      +-----+-----+-----+-----+-----+-----+
+      */
+      // Note: not commonly configured in Kea
+      // Type: IPv4 address
+      {
+        "code": 50,
+        "data": "192.0.2.38",
+        "name": "dhcp-requested-address"
+      },
+
+      /*
+       Code   Len         Lease Time
+      +-----+-----+-----+-----+-----+-----+
+      |  51 |  4  |  t1 |  t2 |  t3 |  t4 |
+      +-----+-----+-----+-----+-----+-----+
+      */
+      // Note: not commonly configured in Kea
+      // Type: uint32
+      {
+        "code": 51,
+        "data": "86400",
+        "name": "dhcp-lease-time"
+      },
+
+      /*
+      Value   Meaning
+      -----   --------
+        1     the 'file' field is used to hold options
+        2     the 'sname' field is used to hold options
+        3     both fields are used to hold options
+
+       Code   Len  Value
+      +-----+-----+-----+
+      |  52 |  1  |1/2/3|
+      +-----+-----+-----+
+      */
+      // Type: uint8
+      {
+        "code": 52,
+        "data": "3",
+        "name": "dhcp-option-overload"
+      },
+
+      /*
+      Value   Message Type
+      -----   ------------
+        1     DHCPDISCOVER
+        2     DHCPOFFER
+        3     DHCPREQUEST
+        4     DHCPDECLINE
+        5     DHCPACK
+        6     DHCPNAK
+        7     DHCPRELEASE
+        8     DHCPINFORM
+
+       Code   Len  Type
+      +-----+-----+-----+
+      |  53 |  1  | 1-9 |
+      +-----+-----+-----+
+      */
+      // Note: not commonly configured in Kea
+      // Type: string
+      {
+        "code": 53,
+        "data": "2",
+        "name": "dhcp-message-type"
+      },
+
+      /*
+       Code   Len            Address
+      +-----+-----+-----+-----+-----+-----+
+      |  54 |  4  |  a1 |  a2 |  a3 |  a4 |
+      +-----+-----+-----+-----+-----+-----+
+      */
+      // Type: IPv4 address
+      {
+        "code": 54,
+        "data": "192.0.2.39",
+        "name": "dhcp-server-identifier"
+      },
+
+      /*
+       Code   Len   Option Codes
+      +-----+-----+-----+-----+---
+      |  55 |  n  |  c1 |  c2 | ...
+      +-----+-----+-----+-----+---
+      */
+      // Note: not commonly configured in Kea
+      // Type: array of {uint8}
+      {
+        "code": 55,
+        "data": "32, 42",
+        "name": "dhcp-parameter-request-list"
+      },
+
+      /*
+       Code   Len     Text
+      +-----+-----+-----+-----+---
+      |  56 |  n  |  c1 |  c2 | ...
+      +-----+-----+-----+-----+---
+      */
+      // Type: string
+      {
+        "code": 56,
+        "data": "Error: here's a DHCPNAK!",
+        "name": "dhcp-message"
+      },
+
+      /*
+       Code   Len     Length
+      +-----+-----+-----+-----+
+      |  57 |  2  |  l1 |  l2 |
+      +-----+-----+-----+-----+
+      */
+      // Type: uint16
+      {
+        "code": 57,
+        "data": "1536",
+        "name": "dhcp-max-message-size"
+      },
+
+      /*
+       Code   Len         T1 Interval
+      +-----+-----+-----+-----+-----+-----+
+      |  58 |  4  |  t1 |  t2 |  t3 |  t4 |
+      +-----+-----+-----+-----+-----+-----+
+      */
+      // Note: not commonly configured in Kea
+      // Type: uint32
+      {
+        "code": 58,
+        "data": "7200",
+        "name": "dhcp-renewal-time"
+      },
+
+      /*
+       Code   Len         T2 Interval
+      +-----+-----+-----+-----+-----+-----+
+      |  59 |  4  |  t1 |  t2 |  t3 |  t4 |
+      +-----+-----+-----+-----+-----+-----+
+      */
+      // Note: not commonly configured in Kea
+      // Type: uint32
+      {
+        "code": 59,
+        "data": "14400",
+        "name": "dhcp-rebinding-time"
+      },
+
+      /*
+       Code   Len   Vendor class Identifier
+      +-----+-----+-----+-----+---
+      |  60 |  n  |  i1 |  i2 | ...
+      +-----+-----+-----+-----+---
+      */
+      // Type: string
+      {
+        "code": 60,
+        "data": "ISC",
+        "name": "vendor-class-identifier"
+      },
+
+      /*
+        Code Len  Type  IAID                DUID
+       +----+----+-----+----+----+----+----+----+----+---
+       | 61 | n  | 255 | i1 | i2 | i3 | i4 | d1 | d2 |...
+       +----+----+-----+----+----+----+----+----+----+---
+      */
+      // Note: not commonly configured in Kea
+      // Type: binary
+      {
+        "code": 61,
+        "data": "1A BB AD AB BA D0 00 00 00 00 00 00 00 00 CA FE",
+        "name": "dhcp-client-identifier"
+      },
+
+      /*
+       Code  Len    NetWare/IP Domain Name
+      +-----+-----+------+------+------+-----
+      |  62 |  n  |  c1  |  c2  |  c3  |  ...
+      +-----+-----+------+------+------+-----
+      */
+      // Type: string
+      {
+        "code": 62,
+        "data": "nwip.example.org",
+        "name": "nwip-domain-name"
+      },
+
+      /*
+       Code   Len  NetWare/IP General Info
+      +-----+-----+----+----+
+      | 63  | 11  | 2  |  0 |
+      +-----+-----+----+----+
+                   NWIP_EXIST_IN_OPTIONS_AREA (length 0)
+
+                  +----+----+----+
+                  |  5 |  1 |  1 |
+                  +----+----+----+
+                   NSQ_BROADCAST_SERVER (length 1)
+                   value is YES
+
+                  +----+----+------------+
+                  |  7 |  4 | IP address |
+                  +----+----+------------+
+                   NEAREST_NWIP_SERVER (length 4)
+                   value is IP address of server
+      */
+      // Type: binary
+      {
+        "code": 63,
+        "data": "1A BB AD AB BA D0 00 00 00 00 00 00 00 00 CA FE",
+        "name": "nwip-suboptions"
+      },
+
+      /*
+       Code   Len      NIS Client Domain Name
+      +-----+-----+-----+-----+-----+-----+---
+      |  64 |  n  |  n1 |  n2 |  n3 |  n4 | ...
+      +-----+-----+-----+-----+-----+-----+---
+      */
+      // Type: string
+      {
+        "code": 64,
+        "data": "nisplus.example.org",
+        "name": "nisplus-domain-name"
+      },
+
+      /*
+       Code   Len         Address 1               Address 2
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      |  65 |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |  ...
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      */
+      // Type: IPv4 address
+      {
+        "code": 65,
+        "data": "192.0.2.40",
+        "name": "nisplus-servers"
+      },
+
+      /*
+       Code  Len   TFTP server
+      +-----+-----+-----+-----+-----+---
+      | 66  |  n  |  c1 |  c2 |  c3 | ...
+      +-----+-----+-----+-----+-----+---
+      */
+      // Type: string
+      {
+        "code": 66,
+        "data": "tftp.example.org",
+        "name": "tftp-server-name"
+      },
+
+      /*
+       Code  Len   Bootfile name
+      +-----+-----+-----+-----+-----+---
+      | 67  |  n  |  c1 |  c2 |  c3 | ...
+      +-----+-----+-----+-----+-----+---
+      */
+      // Type: string
+      {
+        "code": 67,
+        "data": "boot-file.img",
+        "name": "boot-file-name"
+      },
+
+      /*
+       Code Len    Home Agent Addresses (zero or more)
+      +-----+-----+-----+-----+-----+-----+--
+      | 68  |  n  | a1  | a2  | a3  | a4  | ...
+      +-----+-----+-----+-----+-----+-----+--
+      */
+      // Type: array of {IPv4 address}
+      {
+        "code": 68,
+        "data": "192.0.2.41, 192.0.2.42",
+        "name": "mobile-ip-home-agent"
+      },
+
+      /*
+       Code   Len         Address 1               Address 2
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      | 69  |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |  ...
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      */
+      // Type: array of {IPv4 address}
+      {
+        "code": 69,
+        "data": "192.0.2.43, 192.0.2.44",
+        "name": "smtp-server"
+      },
+
+      /*
+       Code   Len         Address 1               Address 2
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      | 70  |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |  ...
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      */
+      // Type: array of {IPv4 address}
+      {
+        "code": 70,
+        "data": "192.0.2.45, 192.0.2.46",
+        "name": "pop-server"
+      },
+
+      /*
+       Code   Len         Address 1               Address 2
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      | 71  |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |  ...
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      */
+      // Type: array of {IPv4 address}
+      {
+        "code": 71,
+        "data": "192.0.2.47, 192.0.2.48",
+        "name": "nntp-server"
+      },
+
+      /*
+       Code   Len         Address 1               Address 2
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      | 72  |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |  ...
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      */
+      // Type: array of {IPv4 address}
+      {
+        "code": 72,
+        "data": "192.0.2.49, 192.0.2.50",
+        "name": "www-server"
+      },
+
+      /*
+       Code   Len         Address 1               Address 2
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      | 73  |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |  ...
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      */
+      // Type: array of {IPv4 address}
+      {
+        "code": 73,
+        "data": "192.0.2.51, 192.0.2.52",
+        "name": "finger-server"
+      },
+
+      /*
+       Code   Len         Address 1               Address 2
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      | 74  |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |  ...
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      */
+      // Type: array of {IPv4 address}
+      {
+        "code": 74,
+        "data": "192.0.2.53, 192.0.2.54",
+        "name": "irc-server"
+      },
+
+      /*
+       Code   Len         Address 1               Address 2
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      | 75  |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |  ...
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      */
+      // Type: array of {IPv4 address}
+      {
+        "code": 75,
+        "data": "192.0.2.55, 192.0.2.56",
+        "name": "streettalk-server"
+      },
+
+      /*
+       Code   Len         Address 1               Address 2
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      | 76  |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |  ...
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      */
+      // Type: array of {IPv4 address}
+      {
+        "code": 76,
+        "data": "192.0.2.57, 192.0.2.58",
+        "name": "streettalk-directory-assistance-server"
+      },
+
+      /*
+       Code   Len   Value
+      +-----+-----+---------------------  . . .  --+
+      | 77  |  N  | User Class Data ('Len' octets) |
+      +-----+-----+---------------------  . . .  --+
+      */
+      // Type: binary
+      {
+        "code": 77,
+        "data": "1A BB AD AB BA D0 00 00 00 00 00 00 00 00 CA FE",
+        "name": "user-class"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |   Code = 78   |    Length     |   Mandatory   |      a1       |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |      a2       |       a3      |       a4      |      ...
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      */
+      // Type: boolean, array of {IPv4 address}
+      {
+        "code": 78,
+        "data": "true, 192.0.2.59, 192.0.2.60",
+        "name": "slp-directory-agent"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |   Code = 79   |     Length    |   Mandatory   | <Scope List>...
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      */
+      // Type: boolean, string
+      {
+        "code": 79,
+        "data": "true, slp-scope",
+        "name": "slp-service-scope"
+      },
+
+      // Option code 80 is not defined in Kea.
+
+      /*
+       Code   Len    Flags  RCODE1 RCODE2   Domain Name
+      +------+------+------+------+------+------+--
+      |  81  |   n  |      |      |      |       ...
+      +------+------+------+------+------+------+--
+      */
+      // Note: not commonly configured in Kea
+      // Type: uint8, uint8, uint8, FQDN
+      {
+        "code": 81,
+        "data": "4, 5, 7, my.example.org",
+        "name": "fqdn"
+      },
+
+      /*
+       Code   Len     Agent Information Field
+      +------+------+------+------+------+------+--...-+------+
+      |  82  |   N  |  i1  |  i2  |  i3  |  i4  |      |  iN  |
+      +------+------+------+------+------+------+--...-+------+
+
+       SubOpt  Len     Sub-option Value
+      +------+------+------+------+------+------+--...-+------+
+      |  1   |   N  |  s1  |  s2  |  s3  |  s4  |      |  sN  |
+      +------+------+------+------+------+------+--...-+------+
+       SubOpt  Len     Sub-option Value
+      +------+------+------+------+------+------+--...-+------+
+      |  2   |   N  |  i1  |  i2  |  i3  |  i4  |      |  iN  |
+      +------+------+------+------+------+------+--...-+------+
+      */
+      // Note: not commonly configured in Kea
+      // Type: empty
+      {
+        "code": 82,
+        "name": "dhcp-agent-options"
+      },
+
+      // Option code 83 is not defined in Kea.
+      // Option code 84 is unassigned.
+
+      /*
+       Code   Len        Address 1               Address 2
+      +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--
+      | 85  |  n  |  a1 |  a2 | a3  |  a4 |  a1 |  a2 |  a3 |  a4 |  ...
+      +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--
+      */
+      // Type: array of IPv4 address
+      {
+        "code": 85,
+        "data": "192.0.2.61, 192.0.2.62",
+        "name": "nds-servers"
+      },
+
+      /*
+       Code Len  NDS Tree Name
+      +----+----+----+----+----+----+--
+      | 86 | n  | c1 | c2 | c3 | c4 |  ...
+      +----+----+----+----+----+----+--
+      */
+      // Type: string
+      {
+        "code": 86,
+        "data": "my-tree",
+        "name": "nds-tree-name"
+      },
+
+      /*
+       Code Len  Initial NDS Context
+      +----+----+----+----+----+----+--
+      | 87 | n  | c1 | c2 | c3 | c4 |  ...
+      +----+----+----+----+----+----+--
+      */
+      // Type: string
+      {
+        "code": 87,
+        "data": "context",
+        "name": "nds-context"
+      },
+
+      /*
+       Code   Len  FQDN(s) of BCMCS Controller
+      +-----+-----+-----+-----+-----+-----+-----+--
+      | 88  |  n  |  s1 |  s2 |  s3 |  s4 | s5  |  ...
+      +-----+-----+-----+-----+-----+-----+-----+--
+      */
+      // Type: FQDN
+      {
+        "code": 88,
+        "data": "bcms-controller.example.org",
+        "name": "bcms-controller-names"
+      },
+
+      /*
+       Code   Len  Address 1               Address 2
+      +-----+-----+-----+-----+-----+-----+-----+--
+      | 89  |  n  | a1  | a2  | a3  | a4  | a1  |  ...
+      +-----+-----+-----+-----+-----+-----+-----+--
+      */
+      // Type: array of {IPv4 address}
+      {
+        "code": 89,
+        "data": "192.0.2.63",
+        "name": "bcms-controller-address"
+      },
+
+      /*
+      0                   1                   2                   3
+      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |     Code      |    Length     |  Protocol     |   Algorithm   |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |     RDM       | Replay Detection (64 bits)                    |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |  Replay cont.                                                 |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |  Replay cont. |                                               |
+      +-+-+-+-+-+-+-+-+                                               |
+      |                                                               |
+      |           Authentication Information                          |
+      |                                                               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      */
+      // Note: not commonly configured in Kea
+      // Type: binary
+      {
+        "code": 90,
+        "data": "1A BB AD AB BA D0 00 00 00 00 00 00 00 00 CA FE",
+        "name": "authenticate"
+      },
+
+      /*
+       Code   Len      Seconds in the past
+      +-----+-----+-----+-----+-----+-----+
+      |  91 |  4  |  t1 |  t2 |  t3 |  t4 |
+      +-----+-----+-----+-----+-----+-----+
+      */
+      // Note: not commonly configured in Kea
+      // Type: uint32
+      {
+        "code": 91,
+        "data": "360",
+        "name": "client-last-transaction-time"
+      },
+
+      /*
+       Code   Len         Address 1               Address 2
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      |  92 |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |  ...
+      +-----+-----+-----+-----+-----+-----+-----+-----+--
+      */
+      // Note: not commonly configured in Kea
+      // Type: array of {IPv4 address}
+      {
+        "code": 92,
+        "data": "192.0.2.64, 192.0.2.65",
+        "name": "associated-ip"
+      },
+
+      /*
+       Code  Len  16-bit Type
+      +----+-----+-----+-----+
+      | 93 |  n  | n1  | n2  |
+      +----+-----+-----+-----+
+      */
+      // Type: array of uint16
+      {
+        "code": 93,
+        "data": "6144, 7168",
+        "name": "client-system"
+      },
+
+      /*
+       Code  Len  Type Major Minor
+      +----+-----+----+-----+-----+
+      | 94 |  3  |  t |  M  |  m  |
+      +----+-----+----+-----+-----+
+      */
+      // Type: uint8, uint8, uint8
+      {
+        "code": 94,
+        "data": "0, 1, 0",
+        "name": "client-ndi"
+      },
+
+      // Option code 95 is unsupported.
+      // Option code 96 is unassigned.
+
+      /*
+       Code  Len  Type  Machine Identifier
+      +----+-----+----+-----+ . . . +-----+
+      | 97 |  n  |  t |     | . . . |     |
+      +----+-----+----+-----+ . . . +-----+
+      */
+      // Type: uint8, binary
+      {
+        "code": 97,
+        "data": "0, 1A BB AD AB BA D0 00 00 00 00 00 00 00 00 CA FE",
+        "name": "uuid-guid"
+      },
+
+      /*
+      0                   1                   2                   3
+      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |     Code      |    Length     |   URL list
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+         Code            98
+
+         Length          The length of the data field (i.e., URL list) in
+                         bytes.
+
+         URL list        A list of one or more URLs separated by the ASCII
+                         space character (0x20).
+      */
+      // Type: string
+      {
+        "code": 98,
+        "data": "uap1.example.org uap2.example.org",
+        "name": "uap-servers"
+      },
+
+      /*
+      0                   1                   2                   3
+      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      | GEOCONF_CIVIC |       N       |      what     |    country    |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |    code       |        civic address elements                ...
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      Code GEOCONF_CIVIC:  The code for this DHCP option is 99.
+
+      N:  The length of this option is variable.  The minimum length is 3
+         octets.
+
+      what:  The 'what' element describes to which location the DHCP entry
+         refers.  Currently, three options are defined: the location of the
+         DHCP server (a value of 0), the location of the network element
+         believed to be closest to the client (a value of 1), or the
+         location of the client (a value of 2).  Option (2) SHOULD be used,
+         but may not be known.  Options (0) and (1) SHOULD NOT be used
+         unless it is known that the DHCP client is in close physical
+         proximity to the server or network element.
+
+      country code:  The two-letter ISO 3166 country code in capital ASCII
+         letters, e.g., DE or US.  (Civic addresses always contain country
+         designations, suggesting the use of a fixed-format field to save
+         space.)
+
+      civic address elements:  Zero or more elements comprising the civic
+         and/or postal address, with the format described below
+         (Section 3.3).
+      */
+      // Type: binary
+      {
+        "code": 99,
+        "data": "1A BB AD AB BA D0 00 00 00 00 00 00 00 00 CA FE",
+        "name": "geoconf-civic"
+      },
+
+      /*
+       PCode  Len   TZ-POSIX String
+      +-----+-----+------------------------------+
+      | 100 |  N  | IEEE 1003.1 String           |
+      +-----+-----+------------------------------+
+      */
+      // Type: string
+      {
+        "code": 100,
+        // String options that have a comma in their values need to have
+        // it escaped (i.e. each comma is preceded by two backslashes).
+        // That's because commas are reserved for separating fields in
+        // compound options. At the same time, we need to be conformant
+        // with JSON spec, that does not allow "\,". Therefore the
+        // slightly uncommon double backslashes notation is needed.
+        // The value sent over the wire is:
+        // EST5EDT4,M3.2.0/02:00,M11.1.0/02:00
+        "data": "EST5EDT4\\,M3.2.0/02:00\\,M11.1.0/02:00",
+        "name": "pcode"
+      },
+
+      /*
+       TCode  Len   TZ-Database String
+      +-----+-----+------------------------------+
+      | 101 |  N  | Reference to the TZ Database |
+      +-----+-----+------------------------------+
+      */
+      // Type: string
+      {
+        "code": 101,
+        "data": "Europe/Zurich",
+        "name": "tcode"
+      },
+
+      // Option codes 102-107 are unassigned.
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |     Code      |   Length      |           Value               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |         Value (cont.)         |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      Code:  8-bit identifier of the IPv6-Only Preferred option code as
+         assigned by IANA: 108.  The client includes the Code in the
+         Parameter Request List in DHCPDISCOVER and DHCPREQUEST messages as
+         described in Section 3.2.
+
+      Length:  8-bit unsigned integer.  The length of the option, excluding
+         the Code and Length Fields.  The server MUST set the length field
+         to 4.  The client MUST ignore the IPv6-Only Preferred option if
+         the length field value is not 4.
+
+      Value:  32-bit unsigned integer.  The number of seconds for which the
+         client should disable DHCPv4 (V6ONLY_WAIT configuration variable).
+         If the server pool is explicitly configured with a V6ONLY_WAIT
+         timer, the server MUST set the field to that configured value.
+         Otherwise, the server MUST set it to zero.  The client MUST
+         process that field as described in Section 3.2.
+      */
+      // Type: uint32
+      {
+        "code": 108,
+        "data": "3600",
+        "name": "v6-only-preferred"
+      },
+
+      // Option codes 109-111 are unassigned.
+
+      // Type: array of {IPv4 address}
+      {
+        "code": 112,
+        "data": "192.0.2.63, 192.0.2.64",
+        "name": "netinfo-server-address"
+      },
+
+      // Type: string
+      {
+        "code": 113,
+        "data": "server1",
+        "name": "netinfo-server-tag"
+      },
+
+      // Type: string
+      {
+        "code": 114,
+        "data": "https://default.example.org",
+        "name": "default-url"
+      },
+
+      // Option code 115 is unassigned.
+
+      /*
+       Code   Len   Value
+      +-----+-----+-----+
+      | 116 |  1  |  a  |
+      +-----+-----+-----+
+      */
+      // Type: uint8
+      {
+        "code": 116,
+        "data": "1",
+        "name": "auto-config"
+      },
+
+      /*
+           Code            Length      Name Service Search Order in Sequence
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |     117       |     Len       |             ns1               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |             ns2               |             ...               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      */
+      // Type: array of {uint16}
+      {
+        "code": 117,
+        "data": "6, 41, 44, 65",
+        "name": "name-service-search"
+      },
+
+      /*
+       Code   Len        IPv4 Address
+      +-----+-----+-----+-----+-----+-----+
+      | 118 |  4  | A1  | A2  | A3  | A4  |
+      +-----+-----+-----+-----+-----+-----+
+      */
+      // Type: IPv4 address
+      {
+        "code": 118,
+        "data": "192.0.2.65",
+        "name": "subnet-selection"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |     119       |     Len       |         Searchstring...
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                     Searchstring...
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      */
+      // Type: array of {FQDN}
+      {
+        "code": 119,
+        "data": "example.com, example.org",
+        "name": "domain-search"
+      },
+
+      // Option codes 120-123 are not defined in Kea.
+
+      /*
+                           1 1 1 1 1 1
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |  option-code  |  option-len   |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |      enterprise-number1       |
+      |                               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |   data-len1   |               |
+      +-+-+-+-+-+-+-+-+               |
+      /      vendor-class-data1       /
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ----
+      |      enterprise-number2       |   ^
+      |                               |   |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   |
+      |   data-len2   |               | optional
+      +-+-+-+-+-+-+-+-+               |   |
+      /      vendor-class-data2       /   |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   |
+      ~            ...                ~   V
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ----
+
+      option-code         OPTION_V-I_VENDOR_CLASS (124)
+
+      option-len          total length of all following option data in
+                          octets
+
+      enterprise-numberN  The vendor's 32-bit Enterprise Number as
+                          registered with IANA [3]
+
+      data-lenN           Length of vendor-class-data field
+
+      vendor-class-dataN  Details of the hardware configuration of the
+                          host on which the client is running, or of
+                          industry consortium compliance
+      */
+      // Type: uint32, binary
+      {
+        "code": 124,
+        "data": "4491, 0f BA AD AB BA D0 00 00 00 00 00 00 00 00 CA FE",
+        "name": "vivco-suboptions"
+      },
+
+      /*
+                           1 1 1 1 1 1
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |  option-code  |  option-len   |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |      enterprise-number1       |
+      |                               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |   data-len1   |               |
+      +-+-+-+-+-+-+-+-+ option-data1  |
+      /                               /
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ----
+      |      enterprise-number2       |   ^
+      |                               |   |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   |
+      |   data-len2   |               | optional
+      +-+-+-+-+-+-+-+-+ option-data2  |   |
+      /                               /   |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   |
+      ~            ...                ~   V
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ----
+
+      option-code         OPTION_V-I_VENDOR_OPTS (125)
+
+      option-len          total length of all following option data in
+                          octets
+
+      enterprise-numberN  The vendor's registered 32-bit Enterprise Number
+                          as registered with IANA [3]
+
+      data-lenN           Length of option-data field
+
+      option-dataN        Vendor-specific options, described below
+      */
+      // Type: uint32
+      {
+        "code": 125,
+        "data": "4491",
+        "name": "vivso-suboptions"
+      },
+
+    // Option codes 126-127 are unassigned.
+    // Option codes 128-135 are not defined in Kea.
+
+      /*
+      0                   1
+      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |  option-code  | option-length |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                               |
+      +      PAA IPv4 Address         +
+      |                               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |             ...               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+         Figure 1: PAA DHCPv4 option
+
+      option-code:        OPTION_PANA_AGENT (136).
+
+      option-length:      Length of the 'options' field in octets;
+                          MUST be a multiple of four (4).
+
+      PAA IPv4 Address:   IPv4 address of a PAA for the client to use.
+                          The PAAs are listed in the order of preference
+                          for use by the client.
+      */
+      // Type: array of {IPv4 address}
+      {
+        "code": 136,
+        "data": "192.0.2.66, 192.0.2.67",
+        "name": "pana-agent"
+      },
+
+      /*
+      Code    Len   LoST Server Domain Name
+      +-----+-----+-----+-----+-----+-----+-----+----
+      | 137 |  n  |  s1 |  s2 |  s3 |  s4 | s5  |  ...
+      +-----+-----+-----+-----+-----+-----+-----+----
+      */
+      // Type: FQDN
+      {
+        "code": 137,
+        "data": "lost.example.org",
+        "name": "v4-lost"
+      },
+
+      /*
+      0                   1
+      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |  option-code  | option-length |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                               |
+      +       AC IPv4 Address         +
+      |                               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |             ...               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code:   OPTION_CAPWAP_AC_V4 (138)
+
+      option-length:   Length of the 'options' field in octets; MUST be a
+         multiple of four (4).
+
+      AC IPv4 Address:  IPv4 address of a CAPWAP AC that the WTP may use.
+         The ACs are listed in the order of preference for use by the WTP
+      */
+      // Type: array of {IPv4 address}
+      {
+        "code": 138,
+        "data": "192.0.2.68, 192.0.2.69",
+        "name": "capwap-ac-v4"
+      },
+
+      // Option codes 139-140 are not defined in Kea.
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |      141      |     Len       |         Searchstring...       |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                     Searchstring...                           |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      */
+      // Type: array of {FQDN}
+      {
+        "code": 141,
+        "data": "example.com, example.org",
+        "name": "sip-ua-cs-domains"
+      },
+
+      // Option codes 142-145 are not defined in Kea.
+
+      // Type: uint8, IPv4 address, IPv4 address, array of {FQDN}
+      {
+        "code": 146,
+        "data": "1, 192.0.2.70, 192.0.2.71, example.com, example.org",
+        "name": "rdnss-selection"
+      },
+
+      // Option codes 147-158 are not defined in Kea.
+
+      // Type: uint8, PSID
+      {
+        "code": 159,
+        "data": "2, 3/4",
+        "name": "v4-portparams"
+      },
+
+      // Type: string
+      {
+        "code": 160,
+        "data": "portal",
+        "name": "v4-captive-portal"
+      },
+
+      // Option codes 161-209 are unassigned.
+
+      /*
+      0                   1                   2                   3
+      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |  OPTION_6RD   | option-length |  IPv4MaskLen  |  6rdPrefixLen |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                                                               |
+      |                           6rdPrefix                           |
+      |                          (16 octets)                          |
+      |                                                               |
+      |                                                               |
+      |                                                               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                     6rdBRIPv4Address(es)                      |
+      .                                                               .
+      .                                                               .
+      .                                                               .
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code         OPTION_6RD (212)
+
+      option-length       The length of the DHCP option in octets (22
+                          octets with one BR IPv4 address).
+
+      IPv4MaskLen         The number of high-order bits that are identical
+                          across all CE IPv4 addresses within a given 6rd
+                          domain.  This may be any value between 0 and 32.
+                          Any value greater than 32 is invalid.
+
+      6rdPrefixLen        The IPv6 prefix length of the SP's 6rd IPv6
+                          prefix in number of bits.  For the purpose of
+                          bounds checking by DHCP option processing, the
+                          sum of (32 - IPv4MaskLen) + 6rdPrefixLen MUST be
+                          less than or equal to 128.
+
+      6rdBRIPv4Address    One or more IPv4 addresses of the 6rd Border
+                          Relay(s) for a given 6rd domain.
+
+      6rdPrefix           The service provider's 6rd IPv6 prefix
+                          represented as a 16-octet IPv6 address.  The bits
+                          in the prefix after the 6rdPrefixlen number of
+                          bits are reserved and MUST be initialized to zero
+                          by the sender and ignored by the receiver.
+      */
+      // Type: uint8, uint8, IPv6 address, array of {IPv4 address}
+      {
+        "code": 212,
+        "data": "24, 96, 2001:db8::f001, 192.0.2.72, 192.0.2.73",
+        "name": "option-6rd"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |     Code      |   Length      |  Access Network Domain Name   .
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      .            Access Network Domain Name (cont.)                 .
+      .                              ...                              .
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code:  OPTION_V4_ACCESS_DOMAIN (213).
+
+      option-length:  The length of the entire access network domain name
+         option in octets.
+
+      option-value:  The domain name associated with the access network,
+         encoded as described in Section 3.1.
+      */
+      // Type: FQDN
+      {
+        "code": 213,
+        "data": "example.org",
+        "name": "v4-access-domain"
+      },
+
+      // Option codes 214-219 are unassigned.
+      // Option codes 220-221 are not defined in Kea.
+      // Option codes 222-254 are unassigned
+
+      /*                         Custom option data                           */
+      // See "option-def" below for the definitions.
+      {
+        "code": 1,
+        "name": "my-empty-option",
+        "space": "my-fancy-space"
+      },
+      {
+        "code": 224,
+        "data": "192.0.2.74, 3/4, 1, example.org, string",
+        "name": "my-lengthy-option",
+        "space": "my-fancy-space"
+      },
+      {
+        "code": 254,
+        "data": "127, 32767, 2147483647, 255, 65535, 4294967295, 192.0.2.75, 3/4, 1, example.org, string",
+        "name": "my-fancy-option",
+        "space": "my-fancy-space"
+      },
+      {
+        "code": 232,
+        "name": "my-encapsulating-option",
+        "space": "my-encapsulating-space"
+      }
+    ],
+
+    /*                       Custom option definitions                        */
+    // For kea-dhcp4, custom option definitions can be global or in a client
+    // class.
+    "option-def": [
+      // New option space allows for a new set of option codes.
+      // An empty option requires no "data" in "option-data". It's
+      // presence should be sufficient to trigger custom behavior.
+      {
+        "array": false,
+        "code": 1,
+        "encapsulate": "",
+        "name": "my-empty-option",
+        "record-types": "",
+        "space": "my-fancy-space",
+        "type": "empty"
+      },
+
+      // A custom type has "type" set to "record" and all data types (which need
+      // to be more than 1, otherwise you're better off using the type directly)
+      // are specified in "record-types". If "string" is part of them, it needs
+      // to be last.
+      {
+        "array": false,
+        "code": 224,
+        "encapsulate": "",
+        "name": "my-lengthy-option",
+        "record-types": "ipv4-address, psid, tuple, fqdn, string",
+        "space": "my-fancy-space",
+        "type": "record"
+      },
+
+      // Contains arrays of all types except strings since an array of strings
+      // is not a valid option definition.
+      {
+        "array": true,
+        "code": 254,
+        "encapsulate": "",
+        "name": "my-fancy-option",
+        "record-types": "int8, int16, int32, uint8, uint16, uint32, ipv4-address, psid, tuple, fqdn",
+        "space": "my-fancy-space",
+        "type": "record"
+      },
+
+      // A single encapsulating space can be used. An option containing any
+      // option from said space will now be unpacked succesfully by Kea.
+      {
+        "array": false,
+        "code": 232,
+        "encapsulate": "my-fancy-space",
+        "name": "my-encapsulating-option",
+        "record-types": "",
+        "space": "my-encapsulating-space",
+        "type": "empty"
+      }
+    ],
+
+    "subnet4": [
+      /*                         DOCSIS3 option data                          */
+      // Headers are as defined in CL-SP-CANN-DHCP-Reg-I16-200715.
+      // "space" is required to be explicitly defined as "docsis3-v4"
+      {
+        "option-data": [
+          /*
+           0                   1                   2                   3
+           0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          | CL_V4OPTION_ORO|  option-len  | req-opt-code-1| req-opt-code-2|
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          |                              ...                              |
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+          option-code   CL_V4OPTION_ORO (1).
+
+          option-len    number of requested options.
+
+          req-opt-code-n The option code for an option requested by the client.
+
+          */
+          // Type: array of {uint8}
+          {
+            "code": 1,
+            "data": "32, 42",
+            "name": "oro",
+            "space": "docsis3-v4"
+          },
+
+          /*
+           0                   1                   2                   3
+           0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          | option code |    option-len   | IPv4 address of TFTP server 1 |
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          |  address of server 1 (cont.)  | IPv4 address of TFTP server 2 |
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          |  address of server 2 (cont.)  |              ...
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          .               ...             | IPv4 address of TFTP server n |
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          |  address of server n (cont.)  |
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+          option code      CL_VV4OPTION_TFTP_SERVERS (2)
+
+          option len       number of bytes for TFTP server IPv4 addresses (4*n for
+                           n servers)
+          */
+          // Type: array of {IPv4 address}
+          {
+            "code": 2,
+            "data": "192.0.2.76, 192.0.2.77",
+            "name": "tftp-servers",
+            "space": "docsis3-v4"
+          }
+        ],
+        "subnet": "192.0.2.0/24"
+      }
+    ]
+  }
+}
index 45b1d0efc9c938e3278765c3f14626f969ff8539..71733f729e278daaf72442daddad5d0b26d8c8c0 100644 (file)
         "ddns-update-on-renew": true,
 
         // Boolean flag, which is passed to kea-dhcp-ddns with each DDNS
-        // update request to indicate whether or not DNS update conflict 
+        // update request to indicate whether or not DNS update conflict
         // resolution as described in RFC 4703 should be employed for the
-        // given update request.  The default value for this flag is true.  
+        // given update request.  The default value for this flag is true.
         // It may be specified at the global, shared-network and subnet levels.
         "ddns-use-conflict-resolution": true,
 
diff --git a/doc/examples/kea6/all-options.json b/doc/examples/kea6/all-options.json
new file mode 100644 (file)
index 0000000..4a7f05b
--- /dev/null
@@ -0,0 +1,2778 @@
+// This example configuration file for DHCPv6 server in Kea contains:
+//
+// - data for all the standard options
+// - custom option definitions at global level along with some associated
+// option data
+// - custom option data with standardized option spaces other than "dhcp6"
+// - custom option spaces
+// - option embedding examples
+// - DOCSIS3 option data
+//
+// The reader is strongly encouraged to take a look at the option formats
+// documented in the Kea ARM:
+// https://kea.readthedocs.io/en/latest/arm/dhcp6-srv.html?highlight=option%20definitions#dhcp6-std-options-list
+//
+// Other options require special logic which is not yet implemented. They are
+// marked with:
+// "Note: special logic not implemented"
+
+{
+  "Dhcp6": {
+    /*                Data for all standard option definitions                */
+    // Option data defined globally
+    "option-data": [
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |        OPTION_CLIENTID        |          option-len           |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      .                                                               .
+      .                              DUID                             .
+      .                        (variable length)                      .
+      .                                                               .
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code   OPTION_CLIENTID (1).
+
+      option-len    Length of DUID in octets.
+
+      DUID          The DUID for the client.
+      */
+      // Note: not commonly configured in Kea
+      // Type: binary
+      {
+        "always-send": false,  // default
+        "csv-format": true,  // default
+        "code": 1,
+        "data": "01 02 03 04 05 06",
+        "name": "clientid",
+        "space": "dhcp6"  // default
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |        OPTION_SERVERID        |          option-len           |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      .                                                               .
+      .                              DUID                             .
+      .                        (variable length)                      .
+      .                                                               .
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code   OPTION_SERVERID (2).
+
+      option-len    Length of DUID in octets.
+
+      DUID          The DUID for the server.
+      */
+      // Note: not commonly configured in Kea
+      // Type: binary
+      {
+        "code": 2,
+        "data": "0708090A0B0C",
+        "name": "serverid"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |          OPTION_IA_NA         |          option-len           |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                        IAID (4 octets)                        |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                              T1                               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                              T2                               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                                                               |
+      .                         IA_NA-options                         .
+      .                                                               .
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code          OPTION_IA_NA (3).
+
+      option-len           12 + length of IA_NA-options field.
+
+      IAID                 The unique identifier for this IA_NA; the
+                           IAID must be unique among the identifiers for
+                           all of this client's IA_NAs.  The number
+                           space for IA_NA IAIDs is separate from the
+                           number space for IA_TA IAIDs.
+
+      T1                   The time at which the client contacts the
+                           server from which the addresses in the IA_NA
+                           were obtained to extend the lifetimes of the
+                           addresses assigned to the IA_NA; T1 is a
+                           time duration relative to the current time
+                           expressed in units of seconds.
+
+      T2                   The time at which the client contacts any
+                           available server to extend the lifetimes of
+                           the addresses assigned to the IA_NA; T2 is a
+                           time duration relative to the current time
+                           expressed in units of seconds.
+      */
+      // Note: not commonly configured in Kea
+      // Type: uint32, uint32, uint32
+      {
+        "code": 3,
+        "data": "1A1D, 3600, 7200",
+        "name": "ia-na"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |         OPTION_IA_TA          |          option-len           |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                        IAID (4 octets)                        |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                                                               |
+      .                         IA_TA-options                         .
+      .                                                               .
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code          OPTION_IA_TA (4).
+
+      option-len           4 + length of IA_TA-options field.
+
+      IAID                 The unique identifier for this IA_TA; the
+                           IAID must be unique among the identifiers
+                           for all of this client's IA_TAs.  The number
+                           space for IA_TA IAIDs is separate from the
+                           number space for IA_NA IAIDs.
+
+      IA_TA-options        Options associated with this IA_TA.
+      */
+      // Note: not commonly configured in Kea
+      // Type: uint32
+      {
+        "code": 4,
+        "data": "1A1D",
+        "name": "ia-ta"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |          OPTION_IAADDR        |          option-len           |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                                                               |
+      |                         IPv6 address                          |
+      |                                                               |
+      |                                                               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                      preferred-lifetime                       |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                        valid-lifetime                         |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      .                                                               .
+      .                        IAaddr-options                         .
+      .                                                               .
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code   OPTION_IAADDR (5).
+
+      option-len    24 + length of IAaddr-options field.
+
+      IPv6 address  An IPv6 address.
+
+      preferred-lifetime The preferred lifetime for the IPv6 address in
+                    the option, expressed in units of seconds.
+
+      valid-lifetime The valid lifetime for the IPv6 address in the
+                    option, expressed in units of seconds.
+
+      IAaddr-options Options associated with this address.
+      */
+      // Note: not commonly configured in Kea
+      // Type: IPv6 address, uint32 uint32
+      {
+        "code": 5,
+        "data": "2001:db8::1, 3600, 7200",
+        "name": "iaaddr"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |           OPTION_ORO          |           option-len          |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |    requested-option-code-1    |    requested-option-code-2    |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                              ...                              |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code   OPTION_ORO (6).
+
+      option-len    2 * number of requested options.
+
+      requested-option-code-n The option code for an option requested by
+                    the client.
+      */
+      // Note: not commonly configured in Kea
+      // Type: array of {uint16}
+      {
+        "code": 6,
+        "data": "16, 32, 42",
+        "name": "oro"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |       OPTION_PREFERENCE       |          option-len           |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |  pref-value   |
+      +-+-+-+-+-+-+-+-+
+
+      option-code   OPTION_PREFERENCE (7).
+
+      option-len    1.
+
+      pref-value    The preference value for the server in this message.
+      */
+      // Type: uint8
+      {
+        "code": 7,
+        "data": "0xf0",
+        "name": "preference"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |      OPTION_ELAPSED_TIME      |           option-len          |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |          elapsed-time         |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code   OPTION_ELAPSED_TIME (8).
+
+      option-len    2.
+
+      elapsed-time  The amount of time since the client began its
+                    current DHCP transaction.  This time is expressed in
+                    hundredths of a second (10^-2 seconds).
+      */
+      // Note: not commonly configured in Kea
+      // Type: uint16
+      {
+        "code": 8,
+        "data": "2",
+        "name": "elapsed-time"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |        OPTION_RELAY_MSG       |           option-len          |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                                                               |
+      .                       DHCP-relay-message                      .
+      .                                                               .
+      .                                                               .
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code   OPTION_RELAY_MSG (9)
+
+      option-len    Length of DHCP-relay-message
+
+      DHCP-relay-message In a Relay-forward message, the received
+                    message, relayed verbatim to the next relay agent
+                    or server; in a Relay-reply message, the message to
+                    be copied and relayed to the relay agent or client
+                    whose address is in the peer-address field of the
+                    Relay-reply message
+      */
+      // Note: not commonly configured in Kea
+      // Type: binary
+      {
+        "code": 9,
+        "data": "1A BB AD AB BA D0 00 00 00 00 00 00 00 00 CA FE",
+        "name": "relay-msg"
+      },
+
+      // Option code 10 is unassigned.
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |          OPTION_AUTH          |          option-len           |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |   protocol    |   algorithm   |      RDM      |               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+               |
+      |                                                               |
+      |          replay detection (64 bits)           +-+-+-+-+-+-+-+-+
+      |                                               |   auth-info   |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+               |
+      .                   authentication information                  .
+      .                       (variable length)                       .
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code                  OPTION_AUTH (11)
+
+      option-len                   11 + length of authentication
+                                   information field
+
+      protocol                     The authentication protocol used in
+                                   this authentication option
+
+      algorithm                    The algorithm used in the
+                                   authentication protocol
+
+      RDM                          The replay detection method used in
+                                   this authentication option
+
+      Replay detection             The replay detection information for
+                                   the RDM
+
+      authentication information   The authentication information,
+                                   as specified by the protocol and
+                                   algorithm used in this authentication
+                                   option
+      */
+      // Note: not commonly configured in Kea
+      // Type: binary
+      {
+        "code": 11,
+        "data": "CA FE DE CA FB AD 00 12 34 00 1A BB AD AB BA D0",
+        "name": "auth"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |          OPTION_UNICAST       |        option-len             |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                                                               |
+      |                       server-address                          |
+      |                                                               |
+      |                                                               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code     OPTION_UNICAST (12).
+
+      option-len      16.
+
+      server-address  The IP address to which the client should send
+                      messages delivered using unicast.
+      */
+      // Type: IPv6 address
+      {
+        "code": 12,
+        "data": "2001:db8::2",
+        "name": "unicast"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |       OPTION_STATUS_CODE      |         option-len            |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |          status-code          |                               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               |
+      .                                                               .
+      .                        status-message                         .
+      .                                                               .
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code          OPTION_STATUS_CODE (13).
+
+      option-len           2 + length of status-message.
+
+      status-code          The numeric code for the status encoded in
+                           this option.  The status codes are defined in
+                           section 24.4.
+
+      status-message       A UTF-8 encoded text string suitable for
+                           display to an end user, which MUST NOT be
+                           null-terminated.
+      */
+      // Note: not commonly configured in Kea
+      // Type: uint16, string
+      {
+        "code": 13,
+        "data": "1, Succesfully failed!",
+        "name": "status-code"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |      OPTION_RAPID_COMMIT      |               0               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code     OPTION_RAPID_COMMIT (14).
+
+      option-len      0.
+      */
+      // Note: not commonly configured in Kea
+      // Type: empty
+      {
+        "code": 14,
+        "name": "rapid-commit"
+      },
+
+      /*
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |       OPTION_USER_CLASS       |          option-len           |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      .                                                               .
+      .                          user-class-data                      .
+      .                                                               .
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code          OPTION_USER_CLASS (15).
+
+      option-len           Length of user class data field.
+
+      user-class-data      The user classes carried by the client.
+      */
+      // Note: not commonly configured in Kea
+      // Type: binary
+      {
+        "code": 15,
+        "data": "05 E4 C1 A5 50 00 01 02 03 04 05 06 07 08 09 0A",
+        "name": "user-class"
+      },
+
+      /*
+      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |      OPTION_VENDOR_CLASS      |           option-len          |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                       enterprise-number                       |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      .                                                               .
+      .                       vendor-class-data                       .
+      .                             . . .                             .
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code          OPTION_VENDOR_CLASS (16).
+
+      option-len           4 + length of vendor class data field.
+
+      enterprise-number    The vendor's registered Enterprise Number as
+                           registered with IANA [6].
+
+      vendor-class-data    The hardware configuration of the host on
+                           which the client is running.
+      */
+      // Note: not commonly configured in Kea
+      // Type: uint32, binary
+      {
+        "code": 16,
+        // The first two bytes in the vendor-class-data represent the length of
+        // the rest of the buffer.
+        "data": "256, 00 0E 05 E4 C1 A5 50 00 01 02 03 04 05 06 07 0A",
+        "name": "vendor-class"
+      },
+
+      /*
+      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |      OPTION_VENDOR_OPTS       |           option-len          |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                       enterprise-number                       |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      .                                                               .
+      .                          option-data                          .
+      .                                                               .
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code          OPTION_VENDOR_OPTS (17)
+
+      option-len           4 + length of option-data field
+
+      enterprise-number    The vendor's registered Enterprise Number as
+                           registered with IANA [6].
+
+      option-data          An opaque object of option-len octets,
+                           interpreted by vendor-specific code on the
+                           clients and servers
+      */
+      // Type: uint32
+      {
+        "code": 17,
+        "data": "4294967295",
+        "name": "vendor-opts"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |      OPTION_INTERFACE_ID      |         option-len            |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      .                                                               .
+      .                         interface-id                          .
+      .                                                               .
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code          OPTION_INTERFACE_ID (18).
+
+      option-len           Length of interface-id field.
+
+      interface-id         An opaque value of arbitrary length generated
+                           by the relay agent to identify one of the
+                           relay agent's interfaces.
+      */
+      // Note: not commonly configured in Kea
+      // Type: binary
+      {
+        "code": 18,
+        "data": "FE 01 BA 45 87 89",
+        "name": "interface-id"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |      OPTION_RECONF_MSG        |         option-len            |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |    msg-type   |
+      +-+-+-+-+-+-+-+-+
+
+      option-code          OPTION_RECONF_MSG (19).
+
+      option-len           1.
+
+      msg-type             5 for Renew message, 11 for
+                           Information-request message.
+      */
+      // Note: not commonly configured in Kea
+      // Type: uint8
+      {
+        "code": 19,
+        "data": "5",
+        "name": "reconf-msg"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |     OPTION_RECONF_ACCEPT      |               0               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code   OPTION_RECONF_ACCEPT (20).
+
+      option-len    0.
+      */
+      // Type: empty
+      {
+        "code": 20,
+        "name": "reconf-accept"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |      OPTION_SIP_SERVER_D      |         option-length         |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                 SIP Server Domain Name List                   |
+      |                              ...                              |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      SIP Server Domain Name List: The domain names of the SIP outbound
+      proxy servers for the client to use.  The domain names are encoded
+      as specified in Section 8 ("Representation and use of domain
+      names") of the DHCPv6 specification [1].
+      */
+      // Type: array of {FQDN}
+      {
+        "code": 21,
+        "data": "sip1.server.net, sip2.server.net",
+        "name": "sip-server-dns"
+      },
+
+      /*
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |      OPTION_SIP_SERVER_A      |           option-len          |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                                                               |
+      |                   SIP server (IP address)                     |
+      |                                                               |
+      |                                                               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                                                               |
+      |                   SIP server (IP address)                     |
+      |                                                               |
+      |                                                               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                              ...                              |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code: OPTION_SIP_SERVER_A (22)
+
+      option-length: Length of the 'options' field in octets; must be a
+      multiple of 16.
+
+      SIP server: IPv6 address of a SIP server for the client to use.
+                  The servers are listed in the order of preference for
+                  use by the client.
+      */
+      // Type: array of {IPv6 address}
+      {
+        "code": 22,
+        "data": "2001:db8::3, 2001:db8::4",
+        "name": "sip-server-addr"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |      OPTION_DNS_SERVERS       |         option-len            |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                                                               |
+      |            DNS-recursive-name-server (IPv6 address)           |
+      |                                                               |
+      |                                                               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                                                               |
+      |            DNS-recursive-name-server (IPv6 address)           |
+      |                                                               |
+      |                                                               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                              ...                              |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code:               OPTION_DNS_SERVERS (23)
+
+      option-len:                Length of the list of DNS recursive name
+                                 servers in octets; must be a multiple of
+                                 16
+
+      DNS-recursive-name-server: IPv6 address of DNS recursive name server
+      */
+      // Type: array of {IPv6 address}
+      {
+        "code": 23,
+        "data": "2001:db8::5, 2001:db8::6",
+        "name": "dns-servers"
+      },
+
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |      OPTION_DOMAIN_LIST       |         option-len            |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                          searchlist                           |
+      |                              ...                              |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code:  OPTION_DOMAIN_LIST (24)
+
+      option-len:   Length of the 'searchlist' field in octets
+
+      searchlist:   The specification of the list of domain names in the
+                    Domain Search List
+      */
+      // Type: array of {FQDN}
+      {
+        "code": 24,
+        "data": "example.com, example.org",
+        "name": "domain-search"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |         OPTION_IA_PD          |           option-len          |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                         IAID (4 octets)                       |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                              T1                               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                              T2                               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      .                                                               .
+      .                          IA_PD-options                        .
+      .                                                               .
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code          OPTION_IA_PD (25).
+
+      option-len           12 + length of IA_PD-options field.
+
+      IAID                 The unique identifier for this IA_PD; the
+                           IAID must be unique among the identifiers for
+                           all of this client's IA_PDs.  The number
+                           space for IA_PD IAIDs is separate from the
+                           number space for other IA option types (i.e.,
+                           IA_NA and IA_TA).  A 4-octet field containing
+                           an unsigned integer.
+
+      T1                   The time interval after which the client
+                           should contact the server from which the
+                           prefixes in the IA_PD were obtained to extend
+                           the lifetimes of the prefixes delegated to
+                           the IA_PD; T1 is a time duration relative to
+                           the message reception time expressed in units
+                           of seconds.  A 4-octet field containing an
+                           unsigned integer.
+
+      T2                   The time interval after which the client
+                           should contact any available server to extend
+                           the lifetimes of the prefixes assigned to the
+                           IA_PD; T2 is a time duration relative to the
+                           message reception time expressed in units of
+                           seconds.  A 4-octet field containing an
+                           unsigned integer.
+
+      IA_PD-options        Options associated with this IA_PD.  A
+                           variable-length field (12 octets less than
+                           the value in the option-len field).
+      */
+      // Note: not commonly configured in Kea
+      // Type: uint32, uint32, uint32
+      {
+        "code": 25,
+        "data": "1A1D, 3600, 7200",
+        "name": "ia-pd"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |        OPTION_IAPREFIX        |           option-len          |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                      preferred-lifetime                       |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                        valid-lifetime                         |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      | prefix-length |                                               |
+      +-+-+-+-+-+-+-+-+          IPv6-prefix                          |
+      |                           (16 octets)                         |
+      |                                                               |
+      |                                                               |
+      |                                                               |
+      |               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |               |                                               .
+      +-+-+-+-+-+-+-+-+                                               .
+      .                       IAprefix-options                        .
+      .                                                               .
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code          OPTION_IAPREFIX (26).
+
+      option-len           25 + length of IAprefix-options field.
+
+      preferred-lifetime   The preferred lifetime for the prefix in the
+                           option, expressed in units of seconds.  A
+                           value of 0xffffffff represents "infinity"
+                           (see Section 7.7).  A 4-octet field
+                           containing an unsigned integer.
+
+      valid-lifetime       The valid lifetime for the prefix in the
+                           option, expressed in units of seconds.  A
+                           value of 0xffffffff represents "infinity".  A
+                           4-octet field containing an unsigned integer.
+
+      prefix-length        Length for this prefix in bits.  A 1-octet
+                           unsigned integer.
+
+      IPv6-prefix          An IPv6 prefix.  A 16-octet field.
+
+      IAprefix-options     Options associated with this prefix.  A
+                           variable-length field (25 octets less than
+                           the value in the option-len field).
+      */
+      // Note: not commonly configured in Kea
+      // Type: uint32, uint32, uint8, IPv6 address
+      {
+        "code": 26,
+        "data": "3600, 7200, 64, 2001:db8::",
+        "name": "iaprefix"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |      OPTION_NIS_SERVERS       |         option-len            |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                                                               |
+      |                   NIS server (IPv6 address)                   |
+      |                                                               |
+      |                                                               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                                                               |
+      |                   NIS server (IPv6 address)                   |
+      |                                                               |
+      |                                                               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                              ...                              |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code:  OPTION_NIS_SERVERS (27)
+
+      option-len:   Length of the 'NIS server' fields in octets; It must be
+                    a multiple of 16
+
+      NIS server:   IPv6 address of NIS server
+      */
+      // Type: array of {IPv6 address}
+      {
+        "code": 27,
+        "data": "2001:db8::7, 2001:db8::8",
+        "name": "nis-servers"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |      OPTION_NISP_SERVERS      |         option-len            |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                                                               |
+      |                   NIS+ server (IPv6 address)                  |
+      |                                                               |
+      |                                                               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                                                               |
+      |                   NIS+ server (IPv6 address)                  |
+      |                                                               |
+      |                                                               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                              ...                              |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code: OPTION_NISP_SERVERS (28)
+
+      option-len:  Length of the 'NIS+ server' fields in octets; It must be
+                   a multiple of 16
+
+      NIS+ server: IPv6 address of NIS+ server
+      */
+      // Type: array of {IPv6 address}
+      {
+        "code": 28,
+        "data": "2001:db8::9, 2001:db8::10",
+        "name": "nisp-servers"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |    OPTION_NIS_DOMAIN_NAME     |         option-len            |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                       nis-domain-name                         |
+      |                              ...                              |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code:      OPTION_NIS_DOMAIN_NAME (29)
+
+      option-len:       Length of the 'nis-domain-name' field in octets
+
+      nis-domain-name:  NIS Domain name for client
+      */
+      // Type: array of {FQDN}
+      {
+        "code": 29,
+        "data": "nis1.example.org, nis2.example.org",
+        "name": "nis-domain-name"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |    OPTION_NISP_DOMAIN_NAME    |         option-len            |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                       nisp-domain-name                        |
+      |                              ...                              |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code:      OPTION_NISP_DOMAIN_NAME (30)
+
+      option-len:       Length of the 'nisp-domain-name' field in octets
+
+      nisp-domain-name: NIS+ Domain name for client
+      */
+      // Type: array of {FQDN}
+      {
+        "code": 30,
+        "data": "nisp1.example.org, nisp2.example.org",
+        "name": "nisp-domain-name"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |      OPTION_SNTP_SERVERS       |        option-len            |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                                                               |
+      |                  SNTP server (IPv6 address)                   |
+      |                                                               |
+      |                                                               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                                                               |
+      |                  SNTP server (IPv6 address)                   |
+      |                                                               |
+      |                                                               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                              ...                              |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code: OPTION_SNTP_SERVERS (31)
+
+      option-len:  Length of the 'SNTP server' fields, in octets;
+                   it must be a multiple of 16
+
+      SNTP server: IPv6 address of SNTP server
+      */
+      // Type: array of {IPv6 address}
+      {
+        "code": 31,
+        "data": "2001:db8::11, 2001:db8::12",
+        "name": "sntp-servers"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |OPTION_INFORMATION_REFRESH_TIME|         option-len            |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                   information-refresh-time                    |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code                OPTION_INFORMATION_REFRESH_TIME (32).
+
+      option-len                 4.
+
+      information-refresh-time   Time duration relative to the current
+                                 time, expressed in units of seconds.  A
+                                 4-octet field containing an unsigned
+                                 integer.
+      */
+      // Type: uint32
+      {
+        "code": 32,
+        "data": "3600",
+        "name": "information-refresh-time"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |      OPTION_BCMCS_SERVER_D    |         option-length         |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |          BCMCS Control Server Domain Name List                |
+      |                              ...                              |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code: OPTION_BCMCS_SERVER_D (33).
+
+      option-length: Length of the 'BCMCS Control Server Domain Name List'
+      field in octets; variable.
+
+      BCMCS Control Server Domain Name List: Identical format as in Section
+      4.1 (except the Code and Len fields).
+      */
+      // Type: array of {FQDN}
+      {
+        "code": 33,
+        "data": "bcmcs1.example.org, bcmcs2.example.org",
+        "name": "bcmcs-server-dns"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |      OPTION_BCMCS_SERVER_A    |         option-length         |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                                                               |
+      |    BCMCS Control server-1 address (IPv6 address)              |
+      |                                                               |
+      |                                                               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                                                               |
+      |    BCMCS Control server-2 address (IPv6 address)              |
+      |                                                               |
+      |                                                               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                              ...                              |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code: OPTION_BCMCS_SERVER_A (34).
+
+      option-length: Length of the 'BCMCS Control Server IPv6 address'
+      field in octets; variable.
+      */
+      // Type: array of {IPv6 address}
+      {
+        "code": 34,
+        "data": "2001:db8::13, 2001:db8::14",
+        "name": "bcmcs-server-addr"
+      },
+
+      // Option code 35 is unassigned.
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |      OPTION_GEOCONF_CIVIC     |           option-len          |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |      what     |        country code           |               .
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+               .
+      .                     civic address elements                    .
+      .                              ...                              .
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code:  OPTION_GEOCONF_CIVIC (36)
+
+      option-len:  Length of the Countrycode, 'what' and civic address
+         elements in octets.
+
+      what:  The 'what' element describes to which location the DHCP entry
+         refers.  Currently, three options are defined: the location of the
+         DHCP server (a value of 0), the location of the network element
+         believed to be closest to the client (a value of 1), or the
+         location of the client (a value of 2).  Option (2) SHOULD be used,
+         but may not be known.  Options (0) and (1) SHOULD NOT be used
+         unless it is known that the DHCP client is in close physical
+         proximity to the server or network element.
+
+      country code:  The two-letter ISO 3166 country code in capital ASCII
+         letters, e.g., DE or US.  (Civic addresses always contain country
+         designations, suggesting the use of a fixed-format field to save
+         space.)
+
+      civic address elements:  Zero or more elements comprising the civic
+         and/or postal address, with the format described below
+         (Section 3.3).
+      */
+      // Type: uint8, uint16, array of {binary}
+      {
+        "code": 36,
+        // 0x5553 is "US" in UTF-8
+        "data": "0, 0x5553, 15 9D, A3 FF",
+        "name": "geoconf-civic"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |       OPTION_REMOTE_ID        |         option-len            |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                       enterprise-number                       |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      .                                                               .
+      .                           remote-id                           .
+      .                                                               .
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code        OPTION_REMOTE_ID (37)
+
+      option-len         4 + the length, in octets, of the remote-id
+                         field.  The minimum option-len is 5 octets.
+
+      enterprise-number  The vendor's registered Enterprise Number as
+                         registered with IANA [5].
+
+      remote-id          The opaque value for the remote-id.
+      */
+      // Type: uint32, binary
+      {
+        "code": 37,
+        "data": "4294967295, 1A BB AD AB BA D0 00 00 00 00 00 00 00 00 CA FE",
+        "name": "remote-id"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |     OPTION_SUBSCRIBER_ID      |         option-len            |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      .                                                               .
+      .                         subscriber-id                         .
+      .                                                               .
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code      OPTION_SUBSCRIBER_ID (38)
+
+      option-len       length, in octets, of the subscriber-id field.
+                       The minimum length is 1 octet.
+
+      subscriber-id    The subscriber's identity.
+      */
+      // Note: not commonly configured in Kea
+      // Type: binary
+      {
+        "code": 38,
+        "data": "1A BB AD AB BA D0 00 00 00 00 00 00 00 00 CA FE",
+        "name": "subscriber-id"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |          OPTION_FQDN          |         option-len            |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |   flags       |                                               |
+      +-+-+-+-+-+-+-+-+                                               |
+      .                                                               .
+      .                          domain-name                          .
+      .                                                               .
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code      OPTION_CLIENT_FQDN (39)
+
+      option-len       1 + length of domain name
+
+      flags            flag bits used between client and server to
+                       negotiate who performs which updates
+
+      domain-name      the partial or fully qualified domain name
+                       (with length option-len - 1)
+      */
+      // Type: uint8, FQDN
+      {
+        "code": 39,
+        "data": "224, client.example.org",
+        "name": "client-fqdn"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |       option-code             |       option-length           |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                                                               |
+      +                                                               +
+      |                                                               |
+      +                         PAA IPv6 Address                      +
+      |                                                               |
+      +                                                               +
+      |                                                               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                          ....                                 |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code:        OPTION_PANA_AGENT (40).
+
+      option-length:      Length of the 'options' field in octets;
+                          MUST be a multiple of sixteen (16).
+
+      PAA IPv6 Address:   IPv6 address of a PAA for the client to use.
+                          The PAAs are listed in the order of preference
+                          for use by the client.
+      */
+      // Type: array of {IPv6 address}
+      {
+        "code": 40,
+        "data": "2001:db8::15, 2001:db8::16",
+        "name": "pana-agent"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |  OPTION_NEW_POSIX_TIMEZONE    |         option-length         |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                      TZ POSIX String                          |
+      |                              ...                              |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code: OPTION_NEW_POSIX_TIMEZONE(41)
+
+      option-length: the number of octets of the TZ POSIX String Index
+      described below.
+      */
+      // Type: string
+      {
+        "code": 41,
+        // String options that have a comma in their values need to have
+        // it escaped (i.e. each comma is preceded by two backslashes).
+        // That's because commas are reserved for separating fields in
+        // compound options. At the same time, we need to be conformant
+        // with JSON spec, that does not allow "\,". Therefore the
+        // slightly uncommon double backslashes notation is needed.
+        // The value sent over the wire is:
+        // EST5EDT4,M3.2.0/02:00,M11.1.0/02:00
+        "data": "EST5EDT4\\,M3.2.0/02:00\\,M11.1.0/02:00",
+        "name": "new-posix-timezone"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |  OPTION_NEW_TZDB_TIMEZONE    |          option-length         |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                          TZ Name                              |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code: OPTION_NEW_TZDB_TIMEZONE(42)
+
+      option-length: the number of octets of the TZ Database String Index
+      described below.
+      */
+      // Type: string
+      {
+        "code": 42,
+        "data": "Europe/Zurich",
+        "name": "new-tzdb-timezone"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |           OPTION_ERO          |           option-len          |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |    requested-option-code-1    |    requested-option-code-2    |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                              ...                              |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code              OPTION_ERO (43).
+      option-len               2 * number of requested options.
+      requested-option-code-n  The option code for an option requested by
+                               the relay agent.
+      */
+      // Type: array of {uint16}
+      {
+        "code": 43,
+        "data": "16, 32, 42",
+        "name": "ero"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |        OPTION_LQ_QUERY        |         option-len            |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |   query-type  |                                               |
+      +-+-+-+-+-+-+-+-+                                               |
+      |                                                               |
+      |                         link-address                          |
+      |                                                               |
+      |               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |               |                                               .
+      +-+-+-+-+-+-+-+-+                                               .
+      .                         query-options                         .
+      .                                                               .
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code      OPTION_LQ_QUERY (44)
+
+      option-len       17 + length of query-options field.
+
+      link-address     A global address that will be used by the
+                       server to identify the link to which the
+                       query applies, or 0::0 if unspecified.
+
+      query-type       The query requested (see below).
+
+      query-options    The options related to the query.
+      */
+      // Note: special logic not implemented
+      // Type: uint8, IPv6 address
+      {
+        "code": 44,
+        "data": "1, 2001:db8::17",
+        "name": "lq-query"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |       OPTION_CLIENT_DATA      |         option-len            |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      .                                                               .
+      .                        client-options                         .
+      .                                                               .
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code      OPTION_CLIENT_DATA (45)
+
+      option-len       Length, in octets, of the encapsulated client-
+                       options field.
+
+      client-options   The options associated with this client.
+      */
+      // Note: special logic not implemented
+      // Type: empty
+      {
+        "code": 45,
+        "name": "client-data"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |        OPTION_CLT_TIME        |         option-len            |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                 client-last-transaction-time                  |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code      OPTION_CLT_TIME (46)
+
+      option-len       4
+
+      client-last-transaction-time
+                       The number of seconds since the server last
+                       communicated with the client (on that link).
+      */
+      // Note: special logic not implemented
+      // Type: uint32
+      {
+        "code": 46,
+        "data": "600",
+        "name": "clt-time"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |     OPTION_LQ_RELAY_DATA      |         option-len            |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                                                               |
+      |                  peer-address (IPv6 address)                  |
+      |                                                               |
+      |                                                               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                                                               |
+      |                       DHCP-relay-message                      |
+      .                                                               .
+      .                                                               .
+      .                                                               .
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code      OPTION_LQ_RELAY_DATA (47)
+
+      option-len       16 + length of DHCP-relay-message.
+
+      peer-address     The address of the relay agent from which
+                       the relayed message was received by the
+                       server.
+
+      DHCP-relay-message
+                       The last complete relayed message, excluding
+                       the client's message OPTION_RELAY_MSG,
+                       received by the server.
+      */
+      // Note: special logic not implemented
+      // Type: IPv6 address, binary
+      {
+        "code": 47,
+        "data": "2001:db8::18, 1A BB AD AB BA D0 00 00 00 00 00 00 00 00 CA FE",
+        "name": "lq-relay-data"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |     OPTION_LQ_CLIENT_LINK     |         option-len            |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                                                               |
+      |                  link-address (IPv6 address)                  |
+      |                                                               |
+      |                                                               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                                                               |
+      |                  link-address (IPv6 address)                  |
+      |                                                               |
+      |                                                               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                              ...                              |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code      OPTION_LQ_CLIENT_LINK (48)
+
+      option-len       Length of the list of links in octets;
+                       must be a multiple of 16.
+
+      link-address     A global address used by the server to
+                       identify the link on which the client is
+                       located.
+      */
+      // Note: special logic not implemented
+      // Type: array of {IPv6 address}
+      {
+        "code": 48,
+        "data": "2001:db8::19, 2001:db8::20",
+        "name": "lq-client-link"
+      },
+
+      // Option codes 49-50 are not defined in Kea.
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |      OPTION_V6_LOST           |         option-length         |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                LoST Server Domain Name                        |
+      |                              ...                              |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code: OPTION_V6_LOST (51)
+
+      option-length: Length of the 'LoST Server Domain Name' field
+           in octets; variable.
+
+      LoST Server Domain Name: The domain name of the LoST
+           server for the client to use.
+      */
+      // Type: FQDN
+      {
+        "code": 51,
+        "data": "lost.example.org",
+        "name": "v6-lost"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |       option-code             |       option-length           |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                                                               |
+      +                                                               +
+      |                                                               |
+      +                          AC IPv6 Address                      +
+      |                                                               |
+      +                                                               +
+      |                                                               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                          ....                                 |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code:   OPTION_CAPWAP_AC_V6 (52)
+
+      option-length:   Length of the 'options' field in octets; MUST be a
+         multiple of sixteen (16).
+
+      AC IPv6 Address:  IPv6 address of a CAPWAP AC that the WTP may use.
+         The ACs are listed in the order of preference for use by the WTP.
+      */
+      // Type: array of {IPv6 address}
+      {
+        "code": 52,
+        "data": "2001:db8::21, 2001:db8::22",
+        "name": "capwap-ac-v6"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |       OPTION_RELAY_ID         |          option-len           |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      .                                                               .
+      .                              DUID                             .
+      .                        (variable length)                      .
+      .                                                               .
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code   OPTION_RELAY_ID.
+
+      option-len    Length of DUID in octets.
+
+      DUID          The DUID for the relay agent.
+      */
+      // Type: binary
+      {
+        "code": 53,
+        "data": "1A BB AD AB BA D0 00 00 00 00 00 00 00 00 CA FE",
+        "name": "relay-id"
+      },
+
+      // Option codes 54-56 are not defined in Kea.
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |    OPTION_V6_ACCESS_DOMAIN    |           Length              |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      .                  Access Network Domain Name                   .
+      .                              ...                              .
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code:  OPTION_V6_ACCESS_DOMAIN (57).
+
+      option-length:  The length of the entire access network domain name
+         option in octets.
+
+      option-value:  The domain name associated with the access network,
+         encoded as described in Section 3.1.
+      */
+      // Type: FQDN
+      {
+        "code": 57,
+        "data": "v6-access.example.org",
+        "name": "v6-access-domain"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |     OPTION_SIP_UA_CS_LIST     |         option-len            |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                          searchlist                           |
+      |                              ...                              |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code OPTION_SIP_UA_CS_LIST (58)
+
+      option-len  Length of the 'searchlist' field in octets
+
+      searchlist  The specification of the list of domain names in the SIP
+                  User Agent Configuration Service Domains
+      */
+      // Type: array of {FQDN}
+      {
+        "code": 58,
+        "data": "sip-ua1.example.org, sip-ua1.example.org",
+        "name": "sip-ua-cs-list"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |       OPT_BOOTFILE_URL        |            option-len         |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                                                               |
+      .                  boot-file-url (variable length)              .
+      |                                                               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code       OPT_BOOTFILE_URL (59).
+
+      option-len        Length of the boot-file-url in octets.
+
+      boot-file-url     This string is the URL for the boot file.  It MUST
+                        comply with STD 66 [RFC3986].  The string is not
+                        NUL-terminated.
+      */
+      // Type: string
+      {
+        "code": 59,
+        "data": "https://how-to-boot.net/pxe/os.img",
+        "name": "bootfile-url"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |       OPT_BOOTFILE_PARAM      |            option-len         |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      | param-len 1                   |                               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+           parameter 1         .
+      .                                        (variable length)      |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      .                                                               .
+      .                       <multiple Parameters>                   .
+      .                                                               .
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      | param-len n                   |                               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+           parameter n         .
+      .                                        (variable length)      |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code       OPT_BOOTFILE_PARAM (60).
+
+      option-len        Length of the Boot File Parameters option in octets
+                        (not including the size of the option-code and
+                        option-len fields).
+
+      param-len 1...n   This is a 16-bit integer that specifies the length
+                        of the following parameter in octets (not including
+                        the parameter-length field).
+
+      parameter 1...n   These UTF-8 strings are parameters needed for
+                        booting, e.g., kernel parameters.  The strings are
+                        not NUL-terminated.
+      */
+      // Type: array of {tuple}
+      {
+        "code": 60,
+        "data": "root=/dev/sda2, quiet, splash",
+        "name": "bootfile-param"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |    OPTION_CLIENT_ARCH_TYPE    |         option-len            |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      .                                                               .
+      .             architecture-types (variable length)              .
+      .                                                               .
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code         OPTION_CLIENT_ARCH_TYPE (61).
+
+      option-len          Length of the "architecture-types" field in
+                          octets.  It MUST be an even number greater than
+                          zero.  See Section 2.1 of [RFC4578] for details.
+
+      architecture-types  A list of one or more architecture types, as
+                          specified in Section 2.1 of [RFC4578].  Each
+                          architecture type identifier in this list is a
+                          16-bit value that describes the pre-boot runtime
+                          environment of the client machine.  A list of
+                          valid values is maintained by the IANA (see
+                          Section 6).
+      */
+      // Type: array of {uint16}
+      {
+        "code": 61,
+        "data": "1, 3, 5, 7",
+        "name": "client-arch-type"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |           OPTION_NII          |          option-len           |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |     Type      |     Major     |      Minor      |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code       OPTION_NII (62).
+
+      option-len        3
+
+      Type              As specified in Section 2.2 of [RFC4578].
+
+      Major             As specified in Section 2.2 of [RFC4578].
+
+      Minor             As specified in Section 2.2 of [RFC4578].
+      */
+      // Type: uint8, uint8, array of {uint8}
+      {
+        "code": 62,
+        "data": "1, 2, 11, 13",
+        "name": "nii"
+      },
+
+      // Option code 63 is not defined in Kea.
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-------------------------------+-------------------------------+
+      |    OPTION_AFTR_NAME: 64       |          option-len           |
+      +-------------------------------+-------------------------------+
+      |                                                               |
+      |                  tunnel-endpoint-name (FQDN)                  |
+      |                                                               |
+      +---------------------------------------------------------------+
+
+      option-len: Length of the tunnel-endpoint-name field in
+                  octets.
+
+      tunnel-endpoint-name: A fully qualified domain name of the AFTR
+                            tunnel endpoint
+      */
+      // Type: FQDN
+      {
+        "code": 64,
+        "data": "aftr.example.org",
+        "name": "aftr-name"
+      },
+
+      /*
+      0                   1                   2                   3
+      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      | OPTION_ERP_LOCAL_DOMAIN_NAME|         option-length         |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      | erp-local-domain-name...
+      +-+-+-+-+-+-+-+-+-+-+-+-+-
+
+      option code
+         OPTION_ERP_LOCAL_DOMAIN_NAME (65)
+
+      option-length
+         Length of the erp-local-domain-name field, in octets
+
+      erp-local-domain-name
+         This field contains the name of the local ERP domain and MUST be
+         encoded as specified in Section 8 of RFC 3315 [RFC3315].  Note
+         that this encoding does enable the use of internationalized domain
+         names, but only as a set of A-labels [RFC5890].
+      */
+      // Type: FQDN
+      {
+        "code": 65,
+        "data": "erp-local.example.org",
+        "name": "erp-local-domain-name"
+      },
+
+      /*
+      0                   1                   2                   3
+      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |         OPTION_RSOO         |         option-length         |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |         options...
+      +-+-+-+-+-+-+-+-+-+-+-+
+
+      OPTION_RSOO
+
+         Relay-Supplied Options code (66).
+
+      option-length
+
+         Length of the RSOO.
+
+      options
+
+         One or more DHCPv6 options.
+      */
+      // Type: empty
+      {
+        "code": 66,
+        "name": "rsoo"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |       OPTION_PD_EXCLUDE       |         option-len            |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |  prefix-len   | IPv6 subnet ID (1 to 16 octets)               ~
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+                              Prefix Exclude Option
+
+      o  option-code: OPTION_PD_EXCLUDE (67).
+
+      o  option-len: 1 + length of IPv6 subnet ID in octets.  A valid
+         option-len is between 2 and 17.
+
+      o  prefix-len: The length of the excluded prefix in bits.  The
+         prefix-len MUST be between 'OPTION_IAPREFIX prefix-length'+1 and
+         128.
+
+      o  IPv6 subnet ID: A variable-length IPv6 subnet ID up to 128 bits.
+      */
+      // Type: binary
+      {
+        "code": 67,
+        "data": "2001:db8:1:1::/64",
+        "name": "pd-exclude"
+      },
+
+      // Option codes 68-73 are not defined in Kea.
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |    OPTION_RDNSS_SELECTION     |         option-len            |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                                                               |
+      |            DNS-recursive-name-server (IPv6 address)           |
+      |                                                               |
+      |                                                               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      | Reserved  |prf|                                               |
+      +-+-+-+-+-+-+-+-+          Domains and networks                 |
+      |                          (variable length)                    |
+      |                                                               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code:  OPTION_RDNSS_SELECTION (74)
+
+      option-len:  Length of the option in octets
+
+      DNS-recursive-name-server:  An IPv6 address of RDNSS
+
+      Reserved:  Field reserved for the future.  MUST be set to zero and
+                 MUST be ignored on receipt.
+
+      prf:  RDNSS preference:
+
+            01 High
+            00 Medium
+            11 Low
+            10 Reserved
+
+            Reserved preference value (10) MUST NOT be sent.  On receipt,
+            the Reserved value MUST be treated as Medium preference (00).
+      */
+      // Type: IPv6 address, uint8, array of {FQDN}
+      {
+        "code": 74,
+        "data": "2001:db8::23, 01, example.com, example.org",
+        "name": "rdnss-selection"
+      },
+
+      // Option codes 75-78 are not defined in Kea.
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      | OPTION_CLIENT_LINKLAYER_ADDR  |           option-length       |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |   link-layer type (16 bits)   |                               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               |
+      |               link-layer address (variable length)            |
+      |                                                               |
+      |                                                               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code:        OPTION_CLIENT_LINKLAYER_ADDR (79)
+      option-length:      2 + length of link-layer address
+      link-layer type:    Client link-layer address type.  The link-layer
+                          type MUST be a valid hardware type assigned
+                          by the IANA, as described in [RFC0826]
+      link-layer address: Client link-layer address
+      */
+      // Type: binary
+      {
+        "code": 79,
+        "data": "1A BB AD AB BA D0 00 00 00 00 00 00 00 00 CA FE",
+        "name": "client-linklayer-addr"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |       OPTION_LINK_ADDRESS     |         option-len            |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                                                               |
+      |                  link-address (IPv6 address)                  |
+      |                                                               |
+      |                                                               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code: OPTION_LINK_ADDRESS (80)
+
+      option-len: 16 (octets)
+
+      link-address: An IPv6 address used by the server to identify the
+      link on which the client is located.
+      */
+      // Type: IPv6 address
+      {
+        "code": 80,
+        "data": "2001:db8::24",
+        "name": "link-address"
+      },
+
+      // Option code 81 is not defined in Kea.
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |      OPTION_SOL_MAX_RT        |         option-len            |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                       SOL_MAX_RT value                        |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code          OPTION_SOL_MAX_RT (82).
+
+      option-len           4.
+
+      SOL_MAX_RT value     Overriding value for SOL_MAX_RT in seconds;
+                           MUST be in this range: 60 <= "value" <= 86400
+                           (1 day).  A 4-octet field containing an
+                           unsigned integer.
+      */
+      // Type: uint32
+      {
+        "code": 82,
+        "data": "420",
+        "name": "solmax-rt"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |      OPTION_INF_MAX_RT        |         option-len            |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                       INF_MAX_RT value                        |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+                    Figure 39: INF_MAX_RT Option Format
+
+      option-code          OPTION_INF_MAX_RT (83).
+
+      option-len           4.
+
+      INF_MAX_RT value     Overriding value for INF_MAX_RT in seconds;
+                           MUST be in this range: 60 <= "value" <= 86400
+                           (1 day).  A 4-octet field containing an
+                           unsigned integer.
+      */
+      // Type: uint32
+      {
+        "code": 83,
+        "data": "2220",
+        "name": "inf-max-rt"
+      },
+
+      // Option codes 84-86 are not defined in Kea.
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |          option-code          |           option-len          |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                                                               |
+      .                        DHCPv4-message                         .
+      .                                                               .
+      .                                                               .
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code:  OPTION_DHCPV4_MSG (87).
+
+      option-len:  Length of the DHCPv4 message.
+
+      DHCPv4-message:  The DHCPv4 message sent by the client or the server.
+         In a DHCPv4-query message, it contains a DHCPv4 message sent by a
+         client.  In a DHCPv4-response message, it contains a DHCPv4
+         message sent by a server in response to a client.
+      */
+      // Note: not commonly configured in Kea
+      // Type: binary
+      {
+        "code": 87,
+        "data": "1A BB AD AB BA D0 00 00 00 00 00 00 00 00 CA FE",
+        "name": "dhcpv4-message"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |           option-code         |           option-len          |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                                                               |
+      .                        IPv6 Address(es)                       .
+      .                                                               .
+      .                                                               .
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      option-code:  OPTION_DHCP4_O_DHCP6_SERVER (88).
+
+      option-len:  Length of the IPv6 address(es) carried by the option,
+         i.e., multiple of 16 octets.  Minimal length of this option is 0.
+
+      IPv6 Address:  Zero or more IPv6 addresses of the DHCP 4o6 server(s).
+      */
+      // Type: array of {IPv6 address}
+      {
+        "code": 88,
+        "data": "2001:db8::25, 2001:db8::26",
+        "name": "dhcp4o6-server-addr"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |        OPTION_S46_RULE        |         option-length         |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |     flags     |     ea-len    |  prefix4-len  | ipv4-prefix   |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                  (continued)                  |  prefix6-len  |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                           ipv6-prefix                         |
+      |                       (variable length)                       |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                                                               |
+      .                        S46_RULE-options                       .
+      .                                                               .
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      o  option-code: OPTION_S46_RULE (89)
+
+      o  option-length: length of the option, excluding option-code and
+         option-length fields, including length of all encapsulated
+         options; expressed in octets.
+
+      o  flags: 8 bits long; carries flags applicable to the rule.  The
+         meanings of the specific bits are explained in Figure 2.
+
+      o  ea-len: 8 bits long; specifies the Embedded Address (EA) bit
+         length.  Allowed values range from 0 to 48.
+
+      o  prefix4-len: 8 bits long; expresses the prefix length of the
+         Rule IPv4 prefix specified in the ipv4-prefix field.  Allowed
+         values range from 0 to 32.
+
+      o  ipv4-prefix: a fixed-length 32-bit field that specifies the IPv4
+         prefix for the S46 rule.  The bits in the prefix after prefix4-len
+         number of bits are reserved and MUST be initialized to zero by the
+         sender and ignored by the receiver.
+
+      o  prefix6-len: 8 bits long; expresses the length of the
+         Rule IPv6 prefix specified in the ipv6-prefix field.  Allowed
+         values range from 0 to 128.
+
+      o  ipv6-prefix: a variable-length field that specifies the IPv6
+         domain prefix for the S46 rule.  The field is padded on the right
+         with zero bits up to the nearest octet boundary when prefix6-len
+         is not evenly divisible by 8.
+
+      o  S46_RULE-options: a variable-length field that may contain zero or
+         more options that specify additional parameters for this S46 rule.
+         This document specifies one such option: OPTION_S46_PORTPARAMS.
+      */
+      // Type: uint8, uint8, IPv4 address, IPv6 prefix
+      {
+        "code": 89,
+        "data": "1, 0, 24, 192.0.2.0, 2001:db8:1::/64",
+        "name": "s46-rule",
+        "space": "s46-cont-mape-options"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |         OPTION_S46_BR         |         option-length         |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                      br-ipv6-address                          |
+      |                                                               |
+      |                                                               |
+      |                                                               |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      o  option-code: OPTION_S46_BR (90)
+
+      o  option-length: 16
+
+      o  br-ipv6-address: a fixed-length field of 16 octets that specifies
+         the IPv6 address for the S46 BR.
+      */
+      // Type: IPv6 address
+      {
+        "code": 90,
+        "data": "2001:db8::27",
+        "name": "s46-br",
+        "space": "s46-cont-mape-options"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |        OPTION_S46_DMR         |         option-length         |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |dmr-prefix6-len|            dmr-ipv6-prefix                    |
+      +-+-+-+-+-+-+-+-+           (variable length)                   |
+      .                                                               .
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      o  option-code: OPTION_S46_DMR (91)
+
+      o  option-length: 1 + length of dmr-ipv6-prefix specified in octets.
+
+      o  dmr-prefix6-len: 8 bits long; expresses the bitmask length of the
+         IPv6 prefix specified in the dmr-ipv6-prefix field.  Allowed
+         values range from 0 to 128.
+
+      o  dmr-ipv6-prefix: a variable-length field specifying the IPv6
+         prefix or address for the BR.  This field is right-padded with
+         zeros to the nearest octet boundary when dmr-prefix6-len is not
+         divisible by 8.
+      */
+      // Type: IPv6 prefix
+      {
+        "code": 91,
+        "data": "2001:db8:cafe::/64",
+        "name": "s46-dmr",
+        "space": "s46-cont-mapt-options"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |      OPTION_S46_V4V6BIND      |         option-length         |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                         ipv4-address                          |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |bindprefix6-len|             bind-ipv6-prefix                  |
+      +-+-+-+-+-+-+-+-+             (variable length)                 |
+      .                                                               .
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                                                               |
+      .                      S46_V4V6BIND-options                     .
+      .                                                               .
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      o  option-code: OPTION_S46_V4V6BIND (92)
+
+      o  option-length: length of the option, excluding option-code and
+         option-length fields, including length of all encapsulated
+         options; expressed in octets.
+
+      o  ipv4-address: a fixed-length field of 4 octets specifying an IPv4
+         address.
+
+      o  bindprefix6-len: 8 bits long; expresses the bitmask length of the
+         IPv6 prefix specified in the bind-ipv6-prefix field.  Allowed
+         values range from 0 to 128.
+
+      o  bind-ipv6-prefix: a variable-length field specifying the IPv6
+         prefix or address for the S46 CE.  This field is right-padded with
+         zeros to the nearest octet boundary when bindprefix6-len is not
+         divisible by 8.
+
+      o  S46_V4V6BIND-options: a variable-length field that may contain
+         zero or more options that specify additional parameters.  This
+         document specifies one such option: OPTION_S46_PORTPARAMS.
+      */
+      // Type: IPv4 address, IPv6 prefix
+      {
+        "code": 92,
+        "data": "192.0.2.78, 2001:db8:1:cafe::/64",
+        "name": "s46-v4v6bind",
+        "space": "s46-cont-lw-options"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |     OPTION_S46_PORTPARAMS     |         option-length         |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |   offset      |    PSID-len   |              PSID             |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      o  option-code: OPTION_S46_PORTPARAMS (93)
+
+      o  option-length: 4
+
+      o  offset: Port Set Identifier (PSID) offset.  8 bits long; specifies
+         the numeric value for the S46 algorithm's excluded port range/
+         offset bits (a-bits), as per Section 5.1 of [RFC7597].  Allowed
+         values are between 0 and 15.  Default values for this field are
+         specific to the softwire mechanism being implemented and are
+         defined in the relevant specification document.
+
+      o  PSID-len: 8 bits long; specifies the number of significant bits in
+         the PSID field (also known as 'k').  When set to 0, the PSID field
+         is to be ignored.  After the first 'a' bits, there are k bits in
+         the port number representing the value of the PSID.  Consequently,
+         the address-sharing ratio would be 2^k.
+
+      o  PSID: 16 bits long.  The PSID value algorithmically identifies a
+         set of ports assigned to a CE.  The first k bits on the left of
+         this field contain the PSID binary value.  The remaining (16 - k)
+         bits on the right are padding zeros.
+      */
+      // Type: uint8, PSID
+      {
+        "code": 93,
+        "data": "2, 3/4",
+        "name": "s46-portparams",
+        "space": "s46-rule-options"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |        OPTION_S46_CONT_MAPE   |         option-length         |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                                                               |
+      .            encapsulated-options (variable length)             .
+      .                                                               .
+      +---------------------------------------------------------------+
+
+      o  option-code: OPTION_S46_CONT_MAPE (94)
+
+      o  option-length: length of encapsulated options, expressed in
+         octets.
+
+      o  encapsulated-options: options associated with this Softwire46
+         MAP-E domain.
+      */
+      // Type: empty
+      {
+        "code": 94,
+        "name": "s46-cont-mape",
+        "space": "dhcp6"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |     OPTION_S46_CONT_MAPT      |         option-length         |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                                                               |
+      .            encapsulated-options (variable length)             .
+      .                                                               .
+      +---------------------------------------------------------------+
+
+      o  option-code: OPTION_S46_CONT_MAPT (95)
+
+      o  option-length: length of encapsulated options, expressed in
+         octets.
+
+      o  encapsulated-options: options associated with this Softwire46
+         MAP-T domain.
+      */
+      // Type: empty
+      {
+        "code": 95,
+        "name": "s46-cont-mapt",
+        "space": "dhcp6"
+      },
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |      OPTION_S46_CONT_LW       |         option-length         |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                                                               |
+      +            encapsulated-options (variable length)             .
+      .                                                               .
+      +---------------------------------------------------------------+
+
+      o  option-code: OPTION_S46_CONT_LW (96)
+
+      o  option-length: length of encapsulated options, expressed in
+         octets.
+
+      o  encapsulated-options: options associated with this Softwire46
+         Lightweight 4over6 domain.
+      */
+      // Type: empty
+      {
+        "code": 96,
+        "name": "s46-cont-lw",
+        "space": "dhcp6"
+      },
+
+      // Option codes 97-102 are not defined in Kea.
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |          option-code          |          option-len           |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      .                      URI (variable length)                    .
+      |                              ...                              |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      o  option-code: The Captive-Portal DHCPv6 option (103) (two octets).
+
+      o  option-len: The length, in octets of the URI.
+
+      o  URI: The contact URI for the captive portal that the user should
+         connect to (encoded following the rules in [RFC3986]).
+      */
+      // Type: string
+      {
+        "code": 103,
+        "data": "https://example.org/captive-portal",
+        "name": "v6-captive-portal"
+      },
+
+      // Option codes 104-111 are not defined in Kea.
+      // Option code 112 is unassigned.
+      // Option codes 113-134 are not defined in Kea.
+
+      /*
+       0                   1                   2                   3
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |    OPTION_RELAY_PORT    |         Option-Len                  |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |    Downstream Source Port     |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+      Option-Code:  OPTION_RELAY_PORT. 16-bit value, 135.
+
+      Option-Len:  16-bit value to be set to 2.
+
+      Downstream Source Port:  16-bit value.  To be set by the IPv6 relay
+         either to the downstream relay agent's UDP source port used for
+         the UDP packet, or to zero if only the local relay agent uses the
+         non-DHCP UDP port (not 547).
+      */
+      // Note: not commonly configured in Kea
+      // Type: uint16
+      {
+        "code": 135,
+        "data": "12345",
+        "name": "relay-source-port"
+      },
+
+      // Option codes 136-142 are unassigned.
+
+      /*
+       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |      Option Code              |         Length                |
+      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+      |                         IP Address                            |
+      .                                                               .
+      +---------------------------------------------------------------+
+
+      Option Code
+         OPTION-IPv6_Address-ANDSF (143)
+
+      Length
+         Length (in bytes) of the option excluding the 'Option Code' and
+         the 'Length' fields; 'Length' field is set to 16N, where N is the
+         number of IPv6 addresses carried in the option
+
+      IP Address
+         IPv6 address(es) of ANDSF server(s)
+      */
+      // Type: IPv6 address
+      {
+        "code": 143,
+        "data": "2001:db8::28",
+        "name": "ipv6-address-andsf"
+      },
+
+      // Option codes 144-65535 are unassigned.
+
+      /*                         Custom option data                           */
+      // See "option-def" below for the definitions.
+      {
+        "code": 111,
+        "data": "88, 96, 64",
+        "name": "s46-priority"
+      },
+      {
+        "code": 1,
+        "name": "my-empty-option",
+        "space": "my-fancy-space"
+      },
+      {
+        "code": 222,
+        "data": "2001:db8::29, 2001:db8::/64, 3/4, 1, example.org, string",
+        "name": "my-lengthy-option",
+        "space": "my-fancy-space"
+      },
+      {
+        "code": 65432,
+        "data": "127, 32767, 2147483647, 255, 65535, 4294967295, 192.0.2.79, 2001:db8::30, 2001:db8::/64, 3/4, 1, example.org, string",
+        "name": "my-fancy-option",
+        "space": "my-fancy-space"
+      },
+      {
+        "code": 12321,
+        "name": "my-encapsulating-option",
+        "space": "my-encapsulating-space"
+      }
+    ],
+
+    /*                       Custom option definitions                        */
+    // For kea-dhcp6, custom option definitions are always global. Even when
+    // data for said options is then configured at subnet level.
+    "option-def": [
+      // Inside the default space. Codes need to not overlap with other
+      // standard/custom option definitions.
+      // An option from an actual RFC (8026) not implemented amongst the
+      // standard definitions. The option is structured as an array of 16-bit
+      // integers so "array" is set to true and "type" to "uint16".
+      {
+        "array": true,
+        "code": 111,
+        "encapsulate": "",
+        "name": "s46-priority",
+        "record-types": "",
+        "space": "dhcp6",
+        "type": "uint16"
+      },
+
+      // New option space allows for a new set of option codes.
+      // An empty option requires no "data" in "option-data". It's
+      // presence should be sufficient to trigger custom behavior.
+      {
+        "array": false,
+        "code": 1,
+        "encapsulate": "",
+        "name": "my-empty-option",
+        "record-types": "",
+        "space": "my-fancy-space",
+        "type": "empty"
+      },
+
+      // A custom type has "type" set to "record" and all data types (which need
+      // to be more than 1, otherwise you're better off using the type directly)
+      // are specified in "record-types". If "string" is part of them, it needs
+      // to be last.
+      {
+        "array": false,
+        "code": 222,
+        "encapsulate": "",
+        "name": "my-lengthy-option",
+        "record-types": "ipv6-address, ipv6-prefix, psid, tuple, fqdn, string",
+        "space": "my-fancy-space",
+        "type": "record"
+      },
+
+      // Contains arrays of all types except strings since an array of strings
+      // is not a valid option definition.
+      {
+        "array": true,
+        "code": 65432,
+        "encapsulate": "",
+        "name": "my-fancy-option",
+        "record-types": "int8, int16, int32, uint8, uint16, uint32, ipv4-address, ipv6-address, ipv6-prefix, psid, tuple, fqdn",
+        "space": "my-fancy-space",
+        "type": "record"
+      },
+
+      // A single encapsulating space can be used. An option containing any
+      // option from said space will now be unpacked succesfully by Kea.
+      {
+        "array": false,
+        "code": 12321,
+        "encapsulate": "my-fancy-space",
+        "name": "my-encapsulating-option",
+        "record-types": "",
+        "space": "my-encapsulating-space",
+        "type": "empty"
+      }
+    ],
+
+    "subnet6": [
+      /*                         DOCSIS3 option data                          */
+      // Headers are as defined in CL-SP-CANN-DHCP-Reg-I16-200715.
+      // "space" is required to be explicitly defined as "docsis3-v6"
+      {
+        "option-data": [
+          /*
+           0                   1                   2                   3
+           0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          |          option-code          |          option-len           |
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          |    requested-option-code-1    |    requested-option-code-2    |
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+          option-code   CL_OPTION_ORO (1)
+
+          option-len    2 * number of requested options in bytes
+
+          requested-option-code-n The option code for an option requested by the client.
+          */
+          // Note: not commonly configured in Kea
+          // Type: array of {uint16}
+          {
+            "code": 1,
+            "data": "32, 33",
+            "name": "oro",
+            "space": "docsis3-v6"
+          },
+
+          /*
+           0                   1                   2                   3
+           0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          |          option-code          |          option-len           |
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          |                          device-type                          |
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          |                              ...                              |
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+          option-code   CL_OPTION_DEVICE_TYPE (2)
+
+          option-len    length of device-type field in bytes.
+
+          device-type   The device type as NVT ASCII text MUST NOT be null terminated.
+             "ECM" for embedded Cable Modem (as specified by DOCSIS 1.0, 1.1, 2.0, 3.0
+             or 3.1 Base Specifications)
+             "EPS" for CableHome embedded Portal Services Element
+             "EMTA" for PacketCable embedded Multimedia Terminal Adapter
+             "EDVA" for PacketCable embedded Digital Voice Adapter
+             "ESTB" for an embedded Set-Top Box
+             "EROUTER" for an embedded DOCSIS Router
+             "SROUTER" for a Standalone Router
+          */
+          // Type: string
+          {
+            "code": 2,
+            "data": "ECM",
+            "name": "device-type",
+            "space": "docsis3-v6"
+          },
+
+          /*
+           0                   1                   2                   3
+           0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          |          option-code          |          option-len           |
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          |                                                               .
+          .                          vendor-name                          .
+          .                                                               |
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+          option code:         CL_OPTION_VENDOR_NAME(10)
+
+          option length:       n (for string of length n)
+
+          vendor-name:         The vendor name string NVT ASCII text MUST NOT be
+                               null terminated.
+          */
+          // Type: string
+          {
+            "code": 10,
+            "data": "CableLabs",
+            "name": "vendor-type",
+            "space": "docsis3-v6"
+          },
+
+          /*
+           0                   1                   2                   3
+           0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          |          option-code          |          option-len           |
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          |                                                               |
+          |                         TFTP-server-1                         |
+          |                                                               |
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          |                                                               |
+          |                         TFTP-server-2                         |
+          |                                                               |
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          .                                                               .
+          .                                                               .
+          .                                                               .
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          |                                                               |
+          |                         TFTP-server-n                         |
+          |                                                               |
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+          option code:         CL_OPTION_TFTP_SERVERS(32)
+
+          option length:       16*n (for n servers in the option) in bytes
+
+          TFTP-server:         The IPv6 address of a TFTP server
+          */
+          // Type: array of {IPv6 address}
+          {
+            "code": 32,
+            "data": "2001:db8::31",
+            "name": "tftp-servers",
+            "space": "docsis3-v6"
+          },
+
+          /*
+           0                   1                   2                   3
+           0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          |          option-code          |          option-len           |
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          |                                                               .
+          .                    configuration-file-name                    .
+          .                                                               |
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+          option code:         CL_OPTION_CONFIG_FILE_NAME(33)
+
+          option length:       n (for file name of length n)
+
+          configuration-file-name: The name of the configuration file for the client
+          */
+          // Type: string
+          {
+            "code": 33,
+            "data": "cm/012345678.cfg",
+            "name": "config-file",
+            "space": "docsis3-v6"
+          },
+
+          /*
+           0                   1                   2                   3
+           0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          |          option-code          |          option-len           |
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          |                                                               .
+          .                          vendor-name                          .
+          .                                                               |
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+          option code:           CL_OPTION_VENDOR_NAME(10)
+
+          option length:         n (for string of length n)
+
+          vendor-name:           The vendor name string NVT ASCII text MUST NOT be
+                                 null terminated.
+          */
+          // Type: array of {IPv6 address}
+          {
+            "code": 34,
+            "data": "2001:db8::32",
+            "name": "syslog-servers",
+            "space": "docsis3-v6"
+          },
+
+          /*
+           0                   1                   2                   3
+           0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          |          option-code          |          option-len           |
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          |                                                               .
+          .                          vendor-name                          .
+          .                                                               |
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+          option code:           CL_OPTION_VENDOR_NAME(10)
+
+          option length:         n (for string of length n)
+
+          vendor-name:           The vendor name string NVT ASCII text MUST NOT be
+                                 null terminated.
+          */
+          // Type: binary
+          {
+            "code": 36,
+            "data": "1A BB AD AB BA D0 00 00 00 00 00 00 00 00 CA FE",
+            "name": "device-id",
+            "space": "docsis3-v6"
+          },
+
+          /*
+           0                   1                   2                   3
+           0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          |          option-code          |          option-len           |
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          |                                                               .
+          .                          vendor-name                          .
+          .                                                               |
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+          option code:           CL_OPTION_VENDOR_NAME(10)
+
+          option length:         n (for string of length n)
+
+          vendor-name:           The vendor name string NVT ASCII text MUST NOT be
+                                 null terminated.
+          */
+          // Type: int32
+          {
+            "code": 37,
+            "data": "2001:db8::33",
+            "name": "time-servers",
+            "space": "docsis3-v6"
+          },
+
+          /*
+           0                   1                   2                   3
+           0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          |          option-code          |          option-len           |
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          |                                                               .
+          .                          vendor-name                          .
+          .                                                               |
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+          option code:           CL_OPTION_VENDOR_NAME(10)
+
+          option length:         n (for string of length n)
+
+          vendor-name:           The vendor name string NVT ASCII text MUST NOT be
+                                 null terminated.
+          */
+          // Type: int32
+          {
+            "code": 38,
+            "data": "-25200",
+            "name": "time-offset",
+            "space": "docsis3-v6"
+          },
+
+          /*
+           0                   1                   2                   3
+           0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          |          option-code          |          option-len           |
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          |                        CM-MAC-address                         |
+          |                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+          |                               |
+          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+          option code:           CL_CM_MAC_ADDR (1026)
+
+          option len:            MUST be 6 bytes.
+
+          CM-MAC-address         The MAC address of the CM.
+          */
+          // Note: not commonly configured in Kea
+          // Type: binary
+          {
+            "code": 1026,
+            "data": "1A BB AD AB BA D0",
+            "name": "cmts-cm-mac",
+            "space": "docsis3-v6"
+          }
+        ],
+        "subnet": "2001:db8:D0C5:15::/64"
+      }
+    ]
+  }
+}
index dec1bf09e686a7753b382dff0ddcc83f1714f889..8ea0f0b1a2d7e417c28b911a238da74fefebe774 100644 (file)
@@ -1753,9 +1753,9 @@ currently has no means to validate it.
    +----------------------------------------+------+---------------------------+-------------+-------------+
    | domain-search                          | 119  | fqdn                      | true        | false       |
    +----------------------------------------+------+---------------------------+-------------+-------------+
-   | vivco-suboptions                       | 124  | binary                    | false       | false       |
+   | vivco-suboptions                       | 124  | record (uint32, binary)   | false       | false       |
    +----------------------------------------+------+---------------------------+-------------+-------------+
-   | vivso-suboptions                       | 125  | binary                    | false       | false       |
+   | vivso-suboptions                       | 125  | uint32                    | false       | false       |
    +----------------------------------------+------+---------------------------+-------------+-------------+
    | pana-agent                             | 136  | ipv4-address              | true        | false       |
    +----------------------------------------+------+---------------------------+-------------+-------------+
@@ -1786,36 +1786,43 @@ returned by the Kea engine itself and in general should not be configured manual
 
 .. table:: List of standard DHCPv4 options managed by Kea on its own and not directly configurable by an administrator
 
-   +----------------------------+------+--------------+----------------------------------------------------------------+
-   | Name                       | Code | Type         | Description                                                    |
-   +============================+======+==============+================================================================+
-   | subnet-mask                | 1    | ipv4-address | calculated automatically, based on subnet definition.          |
-   +----------------------------+------+--------------+----------------------------------------------------------------+
-   | host-name                  | 12   | string       | sent by client, generally governed by the DNS configuration.   |
-   +----------------------------+------+--------------+----------------------------------------------------------------+
-   | dhcp-requested-address     | 50   | ipv6-address | may be sent by the client and the server should not set it.    |
-   +----------------------------+------+--------------+----------------------------------------------------------------+
-   | dhcp-lease-time            | 51   | uint32       | set automatically based on the ``valid-lifetime`` parameter.   |
-   +----------------------------+------+--------------+----------------------------------------------------------------+
-   | dhcp-message-type          | 53   | string       | sent by clients and servers. Set by the Kea engine depending on|
-   |                            |      |              | the situation and should never be configured explicitly.       |
-   +----------------------------+------+--------------+----------------------------------------------------------------+
-   | dhcp-parameter-request-list| 55   | uint8 array  | sent by clients and should never be sent by the server.        |
-   +----------------------------+------+--------------+----------------------------------------------------------------+
-   | dhcp-renewal-time          | 58   | uint32       | governed by ``renew-timer`` parameter.                         |
-   +----------------------------+------+--------------+----------------------------------------------------------------+
-   | dhcp-rebinding-time        | 59   | uint32       | governed by ``rebind-timer`` parameter.                        |
-   +----------------------------+------+--------------+----------------------------------------------------------------+
-   | dhcp-client-identifier     | 61   | binary       | send by client, echoed back with the value sent by the client. |
-   +----------------------------+------+--------------+----------------------------------------------------------------+
-   | fqdn                       | 81   | fqdn         | it's part of the DDNS and D2 configuration.                    |
-   +----------------------------+------+--------------+----------------------------------------------------------------+
-   | dhcp-agent-options         | 82   | empty        | sent by the relay agent. It's an empty container option, see   |
-   |                            |      |              | RAI option detail in later part of this section.               |
-   +----------------------------+------+--------------+----------------------------------------------------------------+
-   | subnet-selection           | 118  | ipv4-address | if present in client's messages, will be used in the subnet    |
-   |                            |      |              | selection process.                                             |
-   +----------------------------+------+--------------+----------------------------------------------------------------+
+   +--------------------------------+-------+---------------------------------------+-------------------------------------------------------------------+
+   | Name                           | Code  | Type                                  | Description                                                       |
+   +================================+=======+=======================================+===================================================================+
+   | subnet-mask                    | 1     | ipv4-address                          | calculated automatically, based on subnet definition.             |
+   +--------------------------------+-------+---------------------------------------+-------------------------------------------------------------------+
+   | host-name                      | 12    | string                                | sent by client, generally governed by the DNS configuration.      |
+   +--------------------------------+-------+---------------------------------------+-------------------------------------------------------------------+
+   | dhcp-requested-address         | 50    | ipv6-address                          | may be sent by the client and the server should not set it.       |
+   +--------------------------------+-------+---------------------------------------+-------------------------------------------------------------------+
+   | dhcp-lease-time                | 51    | uint32                                | set automatically based on the ``valid-lifetime`` parameter.      |
+   +--------------------------------+-------+---------------------------------------+-------------------------------------------------------------------+
+   | dhcp-message-type              | 53    | string                                | sent by clients and servers. Set by the Kea engine depending on   |
+   |                                |       |                                       | the situation and should never be configured explicitly.          |
+   +--------------------------------+-------+---------------------------------------+-------------------------------------------------------------------+
+   | dhcp-parameter-request-list    | 55    | uint8 array                           | sent by clients and should never be sent by the server.           |
+   +--------------------------------+-------+---------------------------------------+-------------------------------------------------------------------+
+   | dhcp-renewal-time              | 58    | uint32                                | governed by ``renew-timer`` parameter.                            |
+   +--------------------------------+-------+---------------------------------------+-------------------------------------------------------------------+
+   | dhcp-rebinding-time            | 59    | uint32                                | governed by ``rebind-timer`` parameter.                           |
+   +--------------------------------+-------+---------------------------------------+-------------------------------------------------------------------+
+   | dhcp-client-identifier         | 61    | binary                                | send by client, echoed back with the value sent by the client.    |
+   +--------------------------------+-------+---------------------------------------+-------------------------------------------------------------------+
+   | fqdn                           | 81    | record (uint8, uint8, uint8, fqdn)    | it's part of the DDNS and D2 configuration.                       |
+   +--------------------------------+-------+---------------------------------------+-------------------------------------------------------------------+
+   | dhcp-agent-options             | 82    | empty                                 | sent by the relay agent. It's an empty container option, see      |
+   |                                |       |                                       | RAI option detail in later part of this section.                  |
+   +--------------------------------+-------+---------------------------------------+-------------------------------------------------------------------+
+   | authenticate                   | 90    | binary                                | sent by client, validated by server, sent encoded back to client  |
+   |                                |       |                                       | with the same secret for validation                               |
+   +--------------------------------+-------+---------------------------------------+-------------------------------------------------------------------+
+   | client-last-transaction-time   | 91    | uint32                                | sent by client, server does not set it                            |
+   +--------------------------------+-------+---------------------------------------+-------------------------------------------------------------------+
+   | associated-ip                  | 92    | ipv4-address array                    | sent by client, server responds with list of addresses            |
+   +--------------------------------+-------+---------------------------------------+-------------------------------------------------------------------+
+   | subnet-selection               | 118   | ipv4-address                          | if present in client's messages, will be used in the subnet       |
+   |                                |       |                                       | selection process.                                                |
+   +--------------------------------+-------+---------------------------------------+-------------------------------------------------------------------+
 
 The following table lists all option types used in the previous two tables with a description of
 what values are accepted for them.
index 522d9e6587c70ccc5aedc49747e383d628e21b5d..982e987d3bbf4fa0e426cf742bd1091fccf5cde4 100644 (file)
@@ -66,7 +66,7 @@ enum HType {
 
 /* DHCP Option codes: */
 enum DHCPOptionType {
-    DHO_PAD                          = 0,
+    DHO_PAD                          = 0, /* RFC2132 */
     DHO_SUBNET_MASK                  = 1,
     DHO_TIME_OFFSET                  = 2,
     DHO_ROUTERS                      = 3,
@@ -128,9 +128,9 @@ enum DHCPOptionType {
     DHO_DHCP_REBINDING_TIME          = 59,
     DHO_VENDOR_CLASS_IDENTIFIER      = 60,
     DHO_DHCP_CLIENT_IDENTIFIER       = 61,
-    DHO_NWIP_DOMAIN_NAME             = 62,
-    DHO_NWIP_SUBOPTIONS              = 63,
-    DHO_NISP_DOMAIN_NAME             = 64,
+    DHO_NWIP_DOMAIN_NAME             = 62, /* RFC2242 */
+    DHO_NWIP_SUBOPTIONS              = 63, /* RFC2242 */
+    DHO_NISP_DOMAIN_NAME             = 64, /* RFC2132 */
     DHO_NISP_SERVER_ADDR             = 65,
     DHO_TFTP_SERVER_NAME             = 66,
     DHO_BOOT_FILE_NAME               = 67,
@@ -143,60 +143,60 @@ enum DHCPOptionType {
     DHO_IRC_SERVER                   = 74,
     DHO_STREETTALK_SERVER            = 75,
     DHO_STDASERVER                   = 76,
-    DHO_USER_CLASS                   = 77,
-    DHO_DIRECTORY_AGENT              = 78,
-    DHO_SERVICE_SCOPE                = 79,
-//  DHO_RAPID_COMMIT                 = 80,
-    DHO_FQDN                         = 81,
-    DHO_DHCP_AGENT_OPTIONS           = 82,
-//  DHO_ISNS                         = 83,
+    DHO_USER_CLASS                   = 77, /* RFC3004 */
+    DHO_DIRECTORY_AGENT              = 78, /* RFC2610 */
+    DHO_SERVICE_SCOPE                = 79, /* RFC4039 */
+//  DHO_RAPID_COMMIT                 = 80, /* RFC4702 */
+    DHO_FQDN                         = 81, /* RFC4702 */
+    DHO_DHCP_AGENT_OPTIONS           = 82, /* RFC3046 */
+//  DHO_ISNS                         = 83, /* RFC4174 */
     // 84 is removed/unassigned
-    DHO_NDS_SERVERS                  = 85,
-    DHO_NDS_TREE_NAME                = 86,
-    DHO_NDS_CONTEXT                  = 87,
-    DHO_BCMCS_DOMAIN_NAME_LIST       = 88,
-    DHO_BCMCS_IPV4_ADDR              = 89,
-    DHO_AUTHENTICATE                 = 90,  /* RFC3118, was 210 */
-    DHO_CLIENT_LAST_TRANSACTION_TIME = 91,
-    DHO_ASSOCIATED_IP                = 92,
+    DHO_NDS_SERVERS                  = 85, /* RFC2241 */
+    DHO_NDS_TREE_NAME                = 86, /* RFC2241 */
+    DHO_NDS_CONTEXT                  = 87, /* RFC2241 */
+    DHO_BCMCS_DOMAIN_NAME_LIST       = 88, /* RFC4280 */
+    DHO_BCMCS_IPV4_ADDR              = 89, /* RFC4280 */
+    DHO_AUTHENTICATE                 = 90, /* RFC3118 */
+    DHO_CLIENT_LAST_TRANSACTION_TIME = 91, /* RFC4388 */
+    DHO_ASSOCIATED_IP                = 92, /* RFC4388 */
     DHO_SYSTEM                       = 93, /* RFC4578 */
     DHO_NDI                          = 94, /* RFC4578 */
-//  DHO_LDAP                         = 95,
+//  DHO_LDAP                         = 95, /* RFC3679 */
     // 96 is removed/unassigned
     DHO_UUID_GUID                    = 97, /* RFC4578 */
-    DHO_USER_AUTH                    = 98,
-    DHO_GEOCONF_CIVIC                = 99,
-    DHO_PCODE                        = 100,
-    DHO_TCODE                        = 101,
+    DHO_USER_AUTH                    = 98, /* RFC2485 */
+    DHO_GEOCONF_CIVIC                = 99, /* RFC4776 */
+    DHO_PCODE                        = 100, /* RFC4833 */
+    DHO_TCODE                        = 101, /* RFC4833 */
     // 102-107 are removed/unassigned
-    DHO_V6_ONLY_PREFERRED            = 108, /* draft-ietf-dhc-v6only */
+    DHO_V6_ONLY_PREFERRED            = 108, /* RFC8925 */
     // 109-111 are removed/unassigned
-    DHO_NETINFO_ADDR                 = 112,
-    DHO_NETINFO_TAG                  = 113,
-    DHO_URL                          = 114,
+    DHO_NETINFO_ADDR                 = 112, /* RFC3679 */
+    DHO_NETINFO_TAG                  = 113, /* RFC3679 */
+    DHO_URL                          = 114, /* RFC3679 */
     // 115 is removed/unassigned
-    DHO_AUTO_CONFIG                  = 116,
-    DHO_NAME_SERVICE_SEARCH          = 117,
+    DHO_AUTO_CONFIG                  = 116, /* RFC2563 */
+    DHO_NAME_SERVICE_SEARCH          = 117, /* RFC2937 */
     DHO_SUBNET_SELECTION             = 118, /* RFC3011 */
     DHO_DOMAIN_SEARCH                = 119, /* RFC3397 */
-//  DHO_SIP_SERVERS                  = 120,
-//  DHO_CLASSLESS_STATIC_ROUTE       = 121,
-//  DHO_CCC                          = 122,
-//  DHO_GEOCONF                      = 123,
-    DHO_VIVCO_SUBOPTIONS             = 124,
-    DHO_VIVSO_SUBOPTIONS             = 125,
+//  DHO_SIP_SERVERS                  = 120, /* RFC3361 */
+//  DHO_CLASSLESS_STATIC_ROUTE       = 121, /* RFC3442 */
+//  DHO_CCC                          = 122, /* RFC3495 */
+//  DHO_GEOCONF                      = 123, /* RFC3825 */
+    DHO_VIVCO_SUBOPTIONS             = 124, /* RFC3925 */
+    DHO_VIVSO_SUBOPTIONS             = 125, /* RFC3925 */
     // 126-127 are removed/unassigned
     // 128-135 have multiple definitions including PXE
-    DHO_PANA_AGENT                   = 136,
-    DHO_V4_LOST                      = 137,
-    DHO_CAPWAP_AC_V4                 = 138,
-//  DHO_IPV4_ADDR_MOS                = 139,
-//  DHO_IPV4_FQDN_MOS                = 140,
-    DHO_SIP_UA_CONF_SERVICE_DOMAINS  = 141,
-//  DHO_IPV4_ADDR_ANDSF              = 142,
+    DHO_PANA_AGENT                   = 136, /* RFC5192 */
+    DHO_V4_LOST                      = 137, /* RFC5223 */
+    DHO_CAPWAP_AC_V4                 = 138, /* RFC5417 */
+//  DHO_IPV4_ADDR_MOS                = 139, /* RFC5678 */
+//  DHO_IPV4_FQDN_MOS                = 140, /* RFC5678 */
+    DHO_SIP_UA_CONF_SERVICE_DOMAINS  = 141, /* RFC6011 */
+//  DHO_IPV4_ADDR_ANDSF              = 142, /* RFC6153 */
     // 143 is removed/unassigned
 //  DHO_GEOLOC                       = 144,
-//  DHO_FORCERENEW_NONCE_CAPABLE     = 145,
+//  DHO_FORCERENEW_NONCE_CAPABLE     = 145, /* RFC5859 */
     DHO_RDNSS_SELECT                 = 146,
     // 147-149 are removed/unassigned
     // 150 have multiple definitions
@@ -211,17 +211,17 @@ enum DHCPOptionType {
     DHO_V4_PORTPARAMS                = 159,
     DHO_V4_CAPTIVE_PORTAL            = 160,
     // 161-209 are removed/unassigned
-//  DHO_PATH_PREFIX                  = 210,
-//  DHO_REBOOT_TIME                  = 211,    
-    DHO_6RD                          = 212,
-    DHO_V4_ACCESS_DOMAIN             = 213,
+//  DHO_PATH_PREFIX                  = 210, /* RFC5071 */
+//  DHO_REBOOT_TIME                  = 211, /* RFC5071 */
+    DHO_6RD                          = 212, /* RFC5969 */
+    DHO_V4_ACCESS_DOMAIN             = 213, /* RFC5986 */
     // 214-219 are removed/unassigned
 //  DHO_SUBNET_ALLOC                 = 220,
-//  DHO_VSS                          = 221,
+//  DHO_VSS                          = 221, /* RFC6607 */
     // 222-223 are removed/unassigned
     // 224-254 are reserved for private use
 
-    DHO_END                          = 255
+    DHO_END                          = 255 /* RFC2132 */
 };
 
 /* DHCP message types. */
index 1f4a350e317b97e25defe3700b485f233305660b..428c74b305c53e3a3adcb9fb2c12367becd2f0d3 100644 (file)
@@ -18,7 +18,7 @@
 
 /* DHCPv6 Option codes: */
 enum DHCPv6OptionType {
-   D6O_CLIENTID                            = 1, /* RFC 8415 */
+   D6O_CLIENTID                            = 1, /* RFC8415 */
    D6O_SERVERID                            = 2,
    D6O_IA_NA                               = 3,
    D6O_IA_TA                               = 4,
@@ -27,7 +27,7 @@ enum DHCPv6OptionType {
    D6O_PREFERENCE                          = 7,
    D6O_ELAPSED_TIME                        = 8,
    D6O_RELAY_MSG                           = 9,
-   // Option code 10 unassigned.
+   // Option code 10 is unassigned.
    D6O_AUTH                                = 11,
    D6O_UNICAST                             = 12,
    D6O_STATUS_CODE                         = 13,
@@ -52,12 +52,12 @@ enum DHCPv6OptionType {
    D6O_INFORMATION_REFRESH_TIME            = 32, /* RFC8415 */
    D6O_BCMCS_SERVER_D                      = 33, /* RFC4280 */
    D6O_BCMCS_SERVER_A                      = 34, /* RFC4280 */
-   // 35 is unassigned
+   // Option code 35 is unassigned.
    D6O_GEOCONF_CIVIC                       = 36, /* RFC4776 */
    D6O_REMOTE_ID                           = 37, /* RFC4649 */
    D6O_SUBSCRIBER_ID                       = 38, /* RFC4580 */
    D6O_CLIENT_FQDN                         = 39, /* RFC4704 */
-   D6O_PANA_AGENT                          = 40, /* paa-option */
+   D6O_PANA_AGENT                          = 40, /* RFC5192 */
    D6O_NEW_POSIX_TIMEZONE                  = 41, /* RFC4833 */
    D6O_NEW_TZDB_TIMEZONE                   = 42, /* RFC4833 */
    D6O_ERO                                 = 43, /* RFC4994 */
@@ -129,7 +129,7 @@ enum DHCPv6OptionType {
 // D6O_ANI_OPERATOR_ID                    = 109, /* RFC7839 */
 // D6O_ANI_OPERATOR_REALM                 = 110, /* RFC7839 */
 // D6O_S46_PRIORITY                       = 111, /* RFC8026 */
-   // 112 unassigned
+   // Option code 112 is unassigned.
 // D6O_V6_PREFIX64                        = 113, /* RFC8115 */
 // D6O_F_BINDING_STATUS                   = 114, /* RFC8156 */
 // D6O_F_CONNECT_FLAGS                    = 115, /* RFC8156 */
@@ -153,7 +153,7 @@ enum DHCPv6OptionType {
 // D6O_F_START_TIME_OF_STATE              = 133, /* RFC8156 */
 // D6O_F_STATE_EXPIRATION_TIME            = 134, /* RFC8156 */
    D6O_RELAY_SOURCE_PORT                  = 135, /* RFC8357 */
-   // 136-142 unassigned
+   // Option codes 136-142 are unassigned.
    D6O_IPV6_ADDRESS_ANDSF                 = 143 /* RFC6153 */
 };