// 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_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_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 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
      // The vendor options are not standardized and are specific to each
      // vendor. The vendors are identified with the enterprise number,
      // sometimes also called vendor-id or enterprise-id. For example,
      // CableLabs that specified DOCSIS options, use 4491. Some vendors
      // have their own mechanisms. For example, DOCSIS vendor sub-option 1
      // is an equivalent of ORO for normal DHCPv6 options. Usually there
      // are several vendor sub-options defined within. See the ARM section:
      // https://kea.readthedocs.io/en/latest/arm/dhcp6-srv.html#dhcpv6-vendor-specific-options

      {
        "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_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_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_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://boot.example.org/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          |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                                                               |
      .                        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-code (136)       |          option-length        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      .           bootstrap-server-list (variable length)             .
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

      option-code: OPTION_V6_SZTP_REDIRECT (136)

      option-length: The option length in octets.

      bootstrap-server-list: A list of servers for the
       client to attempt contacting, in order to obtain
       further bootstrapping data. Each URI entry in the
       bootstrap-server-list is structured as follows:

      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...-+-+-+-+-+-+-+
      |       uri-length              |          URI                  |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...-+-+-+-+-+-+-+

      uri-length: 2 octets long; specifies the length of the URI data.
      URI: URI of the SZTP bootstrap server.
      */
      // Type: array of {tuple}
      {
        "code": 136,
        "data": "https://sztp1.example.com:8443, https://sztp2.example.com:8444",
        "name": "v6-sztp-redirect"
      },

      // Option codes 137-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"
      },

      /*
       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         |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |       Service Priority        |         ADN Length            |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      ~                   authentication-domain-name                  ~
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |         Addr Length           |                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               |
      ~                        ipv6-address(es)                       ~
      |                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                               |                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               |
      ~                 Service Parameters (SvcParams)                ~
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

      Option-code:  OPTION_V6_DNR (144)

      Option-length:  Length of the enclosed data in octets.  The option
         length is ('ADN Length' + 4) when only an ADN is included in the
         option.

      Service Priority:  The priority of this OPTION_V6_DNR instance
         compared to other instances.  This 16-bit unsigned integer is
         interpreted following the rules specified in Section 2.4.1 of
         [RFC9460].

      ADN Length:  Length of the authentication-domain-name field in
         octets.

      authentication-domain-name (variable length):  A fully qualified
         domain name of the encrypted DNS resolver.  This field is
         formatted as specified in Section 10 of [RFC8415].

      Addr Length:  Length of enclosed IPv6 addresses in octets.  When
         present, it MUST be a multiple of 16.

      ipv6-address(es) (variable length):  Indicates one or more IPv6
         addresses to reach the encrypted DNS resolver.  An address can be
         link-local, ULA, or GUA.

      Service Parameters (SvcParams) (variable length):  Specifies a set of
         service parameters that are encoded following the rules in
         Section 2.2 of [RFC9460].
      */
      // Type: internal
      {
        // DNR option may be configured using convenient notation. Comma separated fields must be provided:
        // - service priority (mandatory),
        // - ADN (mandatory),
        // - IP address(es) (optional - if more than one - they must be space-separated)
        // - SvcParams (optional - if more than one - they must be space-separated;
        //   to provide more than one alpn-id separate them with double-backslash escaped comma like in the
        //   example below).
        // Basing on the config, Kea will encode the option according to RFC9463.
        "code": 144,
        "name": "v6-dnr",
        "data": "100, resolver.example., 2001:db8::1 2001:db8::2, alpn=dot\\,h2\\,h3 port=8530 dohpath=/dns-query{?dns}"
      },

      // Option codes 145-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 successfully 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           |
          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
          |                          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"
          }
        ],
        "subnet": "2001:db8:d0c5:15::/64",
        "id": 1
      }
    ]
  }
}
