std_option_defs.h 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334
  1. // Copyright (C) 2012-2013 Internet Systems Consortium, Inc. ("ISC")
  2. //
  3. // Permission to use, copy, modify, and/or distribute this software for any
  4. // purpose with or without fee is hereby granted, provided that the above
  5. // copyright notice and this permission notice appear in all copies.
  6. //
  7. // THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
  8. // REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
  9. // AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
  10. // INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
  11. // LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
  12. // OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  13. // PERFORMANCE OF THIS SOFTWARE.
  14. #ifndef STD_OPTION_DEFS_H
  15. #define STD_OPTION_DEFS_H
  16. #include <dhcp/option_data_types.h>
  17. namespace {
  18. /// @brief Declare an array holding parameters used to create instance
  19. /// of a definition for option comprising a record of data fields.
  20. ///
  21. /// @param name name of the array being declared.
  22. /// @param types data types of fields that belong to the record.
  23. #ifndef RECORD_DECL
  24. #define RECORD_DECL(name, types...) const OptionDataType name[] = { types }
  25. #endif
  26. /// @brief A pair of values: one pointing to the array holding types of
  27. /// data fields belonging to the record, and size of this array.
  28. ///
  29. /// @param name name of the array holding data fields' types.
  30. #ifndef RECORD_DEF
  31. #define RECORD_DEF(name) name, sizeof(name) / sizeof(name[0])
  32. #endif
  33. #ifndef NO_RECORD_DEF
  34. #define NO_RECORD_DEF 0, 0
  35. #endif
  36. using namespace isc::dhcp;
  37. /// @brief Parameters being used to make up an option definition.
  38. struct OptionDefParams {
  39. const char* name; // option name
  40. uint16_t code; // option code
  41. OptionDataType type; // data type
  42. bool array; // is array
  43. const OptionDataType* records; // record fields
  44. size_t records_size; // number of fields in a record
  45. const char* encapsulates; // option space encapsulated by
  46. // the particular option.
  47. };
  48. // fqdn option record fields.
  49. //
  50. // Note that the flags field indicates the type of domain
  51. // name encoding. There is a choice between deprecated
  52. // ASCII encoding and compressed encoding described in
  53. // RFC 1035, section 3.1. The latter could be handled
  54. // by OPT_FQDN_TYPE but we can't use it here because
  55. // clients may request ASCII encoding.
  56. RECORD_DECL(FQDN_RECORDS, OPT_UINT8_TYPE, OPT_UINT8_TYPE, OPT_UINT8_TYPE,
  57. OPT_FQDN_TYPE);
  58. /// @brief Definitions of standard DHCPv4 options.
  59. const OptionDefParams OPTION_DEF_PARAMS4[] = {
  60. { "subnet-mask", DHO_SUBNET_MASK, OPT_IPV4_ADDRESS_TYPE, false, NO_RECORD_DEF, "" },
  61. { "time-offset", DHO_TIME_OFFSET, OPT_INT32_TYPE, false, NO_RECORD_DEF, "" },
  62. { "routers", DHO_ROUTERS, OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" },
  63. { "time-servers", DHO_TIME_SERVERS, OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" },
  64. { "name-servers", DHO_NAME_SERVERS, OPT_IPV4_ADDRESS_TYPE,
  65. false, NO_RECORD_DEF, "" },
  66. { "domain-name-servers", DHO_DOMAIN_NAME_SERVERS,
  67. OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" },
  68. { "log-servers", DHO_LOG_SERVERS, OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" },
  69. { "cookie-servers", DHO_COOKIE_SERVERS, OPT_IPV4_ADDRESS_TYPE,
  70. true, NO_RECORD_DEF, "" },
  71. { "lpr-servers", DHO_LPR_SERVERS, OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" },
  72. { "impress-servers", DHO_IMPRESS_SERVERS, OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" },
  73. { "resource-location-servers", DHO_RESOURCE_LOCATION_SERVERS,
  74. OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" },
  75. { "host-name", DHO_HOST_NAME, OPT_STRING_TYPE, false, NO_RECORD_DEF, "" },
  76. { "boot-size", DHO_BOOT_SIZE, OPT_UINT16_TYPE, false, NO_RECORD_DEF, "" },
  77. { "merit-dump", DHO_MERIT_DUMP, OPT_STRING_TYPE, false, NO_RECORD_DEF, "" },
  78. { "domain-name", DHO_DOMAIN_NAME, OPT_STRING_TYPE, false, NO_RECORD_DEF, "" },
  79. { "swap-server", DHO_SWAP_SERVER, OPT_IPV4_ADDRESS_TYPE, false, NO_RECORD_DEF, "" },
  80. { "root-path", DHO_ROOT_PATH, OPT_STRING_TYPE, false, NO_RECORD_DEF, "" },
  81. { "extensions-path", DHO_EXTENSIONS_PATH, OPT_STRING_TYPE,
  82. false, NO_RECORD_DEF, "" },
  83. { "ip-forwarding", DHO_IP_FORWARDING, OPT_BOOLEAN_TYPE, false, NO_RECORD_DEF, "" },
  84. { "non-local-source-routing", DHO_NON_LOCAL_SOURCE_ROUTING,
  85. OPT_BOOLEAN_TYPE, false, NO_RECORD_DEF, "" },
  86. { "policy-filter", DHO_POLICY_FILTER, OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" },
  87. { "max-dgram-reassembly", DHO_MAX_DGRAM_REASSEMBLY,
  88. OPT_UINT16_TYPE, false, NO_RECORD_DEF, "" },
  89. { "default-ip-ttl", DHO_DEFAULT_IP_TTL, OPT_UINT8_TYPE, false, NO_RECORD_DEF, "" },
  90. { "path-mtu-aging-timeout", DHO_PATH_MTU_AGING_TIMEOUT,
  91. OPT_UINT32_TYPE, false, NO_RECORD_DEF, "" },
  92. { "path-mtu-plateau-table", DHO_PATH_MTU_PLATEAU_TABLE,
  93. OPT_UINT16_TYPE, true, NO_RECORD_DEF, "" },
  94. { "interface-mtu", DHO_INTERFACE_MTU, OPT_UINT16_TYPE, false, NO_RECORD_DEF, "" },
  95. { "all-subnets-local", DHO_ALL_SUBNETS_LOCAL,
  96. OPT_BOOLEAN_TYPE, false, NO_RECORD_DEF, "" },
  97. { "broadcast-address", DHO_BROADCAST_ADDRESS,
  98. OPT_IPV4_ADDRESS_TYPE, false, NO_RECORD_DEF, "" },
  99. { "perform-mask-discovery", DHO_PERFORM_MASK_DISCOVERY,
  100. OPT_BOOLEAN_TYPE, false, NO_RECORD_DEF, "" },
  101. { "mask-supplier", DHO_MASK_SUPPLIER, OPT_BOOLEAN_TYPE, false, NO_RECORD_DEF, "" },
  102. { "router-discovery", DHO_ROUTER_DISCOVERY,
  103. OPT_BOOLEAN_TYPE, false, NO_RECORD_DEF, "" },
  104. { "router-solicitation-address", DHO_ROUTER_SOLICITATION_ADDRESS,
  105. OPT_IPV4_ADDRESS_TYPE, false, NO_RECORD_DEF, "" },
  106. { "static-routes", DHO_STATIC_ROUTES,
  107. OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" },
  108. { "trailer-encapsulation", DHO_TRAILER_ENCAPSULATION,
  109. OPT_BOOLEAN_TYPE, false, NO_RECORD_DEF, "" },
  110. { "arp-cache-timeout", DHO_ARP_CACHE_TIMEOUT,
  111. OPT_UINT32_TYPE, false, NO_RECORD_DEF, "" },
  112. { "ieee802-3-encapsulation", DHO_IEEE802_3_ENCAPSULATION,
  113. OPT_BOOLEAN_TYPE, false, NO_RECORD_DEF, "" },
  114. { "default-tcp-ttl", DHO_DEFAULT_TCP_TTL, OPT_UINT8_TYPE, false, NO_RECORD_DEF, "" },
  115. { "tcp-keepalive-internal", DHO_TCP_KEEPALIVE_INTERVAL,
  116. OPT_UINT32_TYPE, false, NO_RECORD_DEF, "" },
  117. { "tcp-keepalive-garbage", DHO_TCP_KEEPALIVE_GARBAGE,
  118. OPT_BOOLEAN_TYPE, false, NO_RECORD_DEF, "" },
  119. { "nis-domain", DHO_NIS_DOMAIN, OPT_STRING_TYPE, false, NO_RECORD_DEF, "" },
  120. { "nis-servers", DHO_NIS_SERVERS, OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" },
  121. { "ntp-servers", DHO_NTP_SERVERS, OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" },
  122. { "vendor-encapsulated-options", DHO_VENDOR_ENCAPSULATED_OPTIONS,
  123. OPT_EMPTY_TYPE, false, NO_RECORD_DEF, "vendor-encapsulated-options-space" },
  124. { "netbios-name-servers", DHO_NETBIOS_NAME_SERVERS,
  125. OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" },
  126. { "netbios-dd-server", DHO_NETBIOS_DD_SERVER,
  127. OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" },
  128. { "netbios-node-type", DHO_NETBIOS_NODE_TYPE,
  129. OPT_UINT8_TYPE, false, NO_RECORD_DEF, "" },
  130. { "netbios-scope", DHO_NETBIOS_SCOPE, OPT_STRING_TYPE, false, NO_RECORD_DEF, "" },
  131. { "font-servers", DHO_FONT_SERVERS, OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" },
  132. { "x-display-manager", DHO_X_DISPLAY_MANAGER,
  133. OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" },
  134. { "dhcp-requested-address", DHO_DHCP_REQUESTED_ADDRESS,
  135. OPT_IPV4_ADDRESS_TYPE, false, NO_RECORD_DEF, "" },
  136. { "dhcp-lease-time", DHO_DHCP_LEASE_TIME, OPT_UINT32_TYPE, false, NO_RECORD_DEF, "" },
  137. { "dhcp-option-overload", DHO_DHCP_OPTION_OVERLOAD,
  138. OPT_UINT8_TYPE, false, NO_RECORD_DEF, "" },
  139. { "dhcp-message-type", DHO_DHCP_MESSAGE_TYPE, OPT_UINT8_TYPE, false, NO_RECORD_DEF, "" },
  140. { "dhcp-server-identifier", DHO_DHCP_SERVER_IDENTIFIER,
  141. OPT_IPV4_ADDRESS_TYPE, false, NO_RECORD_DEF, "" },
  142. { "dhcp-parameter-request-list", DHO_DHCP_PARAMETER_REQUEST_LIST,
  143. OPT_UINT8_TYPE, true, NO_RECORD_DEF, "" },
  144. { "dhcp-message", DHO_DHCP_MESSAGE, OPT_STRING_TYPE, false, NO_RECORD_DEF, "" },
  145. { "dhcp-max-message-size", DHO_DHCP_MAX_MESSAGE_SIZE,
  146. OPT_UINT16_TYPE, false, NO_RECORD_DEF, "" },
  147. { "dhcp-renewal-time", DHO_DHCP_RENEWAL_TIME, OPT_UINT32_TYPE, false, NO_RECORD_DEF, "" },
  148. { "dhcp-rebinding-time", DHO_DHCP_REBINDING_TIME,
  149. OPT_UINT32_TYPE, false, NO_RECORD_DEF, "" },
  150. { "vendor-class-identifier", DHO_VENDOR_CLASS_IDENTIFIER,
  151. OPT_BINARY_TYPE, false, NO_RECORD_DEF, "" },
  152. { "dhcp-client-identifier", DHO_DHCP_CLIENT_IDENTIFIER,
  153. OPT_BINARY_TYPE, false, NO_RECORD_DEF, "" },
  154. { "nwip-domain-name", DHO_NWIP_DOMAIN_NAME, OPT_STRING_TYPE, false, NO_RECORD_DEF, "" },
  155. { "nwip-suboptions", DHO_NWIP_SUBOPTIONS, OPT_BINARY_TYPE, false, NO_RECORD_DEF, "" },
  156. { "tftp-server-name", DHO_TFTP_SERVER_NAME, OPT_STRING_TYPE, false,
  157. NO_RECORD_DEF, "" },
  158. { "boot-file-name", DHO_BOOT_FILE_NAME, OPT_STRING_TYPE, false,
  159. NO_RECORD_DEF, "" },
  160. { "user-class", DHO_USER_CLASS, OPT_BINARY_TYPE, false, NO_RECORD_DEF, "" },
  161. { "fqdn", DHO_FQDN, OPT_RECORD_TYPE, false, RECORD_DEF(FQDN_RECORDS), "" },
  162. { "dhcp-agent-options", DHO_DHCP_AGENT_OPTIONS,
  163. OPT_EMPTY_TYPE, false, NO_RECORD_DEF, "dhcp-agent-options-space" },
  164. // Unfortunatelly the AUTHENTICATE option contains a 64-bit
  165. // data field called 'replay-detection' that can't be added
  166. // as a record field to a custom option. Also, there is no
  167. // dedicated option class to handle it so we simply return
  168. // binary option type for now.
  169. // @todo implement a class to handle AUTH option.
  170. { "authenticate", DHO_AUTHENTICATE, OPT_BINARY_TYPE, false, NO_RECORD_DEF, "" },
  171. { "client-last-transaction-time", DHO_CLIENT_LAST_TRANSACTION_TIME,
  172. OPT_UINT32_TYPE, false, NO_RECORD_DEF, "" },
  173. { "associated-ip", DHO_ASSOCIATED_IP, OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" },
  174. { "subnet-selection", DHO_SUBNET_SELECTION,
  175. OPT_IPV4_ADDRESS_TYPE, false, NO_RECORD_DEF, "" },
  176. // The following options need a special encoding of data
  177. // being carried by them. Therefore, there is no way they can
  178. // be handled by OptionCustom. We may need to implement
  179. // dedicated classes to handle them. Until that happens
  180. // let's treat them as 'binary' options.
  181. { "domain-search", DHO_DOMAIN_SEARCH, OPT_BINARY_TYPE, false, NO_RECORD_DEF, "" },
  182. { "vivco-suboptions", DHO_VIVCO_SUBOPTIONS,
  183. OPT_BINARY_TYPE, false, NO_RECORD_DEF, "" },
  184. { "vivso-suboptions", DHO_VIVSO_SUBOPTIONS, OPT_BINARY_TYPE,
  185. false, NO_RECORD_DEF, "" }
  186. // @todo add definitions for all remaning options.
  187. };
  188. /// Number of option definitions defined.
  189. const int OPTION_DEF_PARAMS_SIZE4 =
  190. sizeof(OPTION_DEF_PARAMS4) / sizeof(OPTION_DEF_PARAMS4[0]);
  191. /// Start Definition of DHCPv6 options
  192. // client-fqdn
  193. RECORD_DECL(CLIENT_FQDN_RECORDS, OPT_UINT8_TYPE, OPT_FQDN_TYPE);
  194. // geoconf-civic
  195. RECORD_DECL(GEOCONF_CIVIC_RECORDS, OPT_UINT8_TYPE, OPT_UINT16_TYPE,
  196. OPT_BINARY_TYPE);
  197. // iaddr
  198. RECORD_DECL(IAADDR_RECORDS, OPT_IPV6_ADDRESS_TYPE, OPT_UINT32_TYPE,
  199. OPT_UINT32_TYPE);
  200. // ia-na
  201. RECORD_DECL(IA_NA_RECORDS, OPT_UINT32_TYPE, OPT_UINT32_TYPE, OPT_UINT32_TYPE);
  202. // ia-pd
  203. RECORD_DECL(IA_PD_RECORDS, OPT_UINT32_TYPE, OPT_UINT32_TYPE, OPT_UINT32_TYPE);
  204. // ia-prefix
  205. RECORD_DECL(IA_PREFIX_RECORDS, OPT_UINT32_TYPE, OPT_UINT32_TYPE,
  206. OPT_UINT8_TYPE, OPT_IPV6_ADDRESS_TYPE, OPT_BINARY_TYPE);
  207. // lq-query
  208. RECORD_DECL(LQ_QUERY_RECORDS, OPT_UINT8_TYPE, OPT_IPV6_ADDRESS_TYPE);
  209. // lq-relay-data
  210. RECORD_DECL(LQ_RELAY_DATA_RECORDS, OPT_IPV6_ADDRESS_TYPE, OPT_BINARY_TYPE);
  211. // remote-id
  212. RECORD_DECL(REMOTE_ID_RECORDS, OPT_UINT32_TYPE, OPT_BINARY_TYPE);
  213. // status-code
  214. RECORD_DECL(STATUS_CODE_RECORDS, OPT_UINT16_TYPE, OPT_STRING_TYPE);
  215. // vendor-class
  216. RECORD_DECL(VENDOR_CLASS_RECORDS, OPT_UINT32_TYPE, OPT_BINARY_TYPE);
  217. /// Standard DHCPv6 option definitions.
  218. ///
  219. /// @warning in this array, the initializers are provided for all
  220. /// OptionDefParams struct's members despite initializers for
  221. /// 'records' and 'record_size' could be ommited for entries for
  222. /// which 'type' does not equal to OPT_RECORD_TYPE. If initializers
  223. /// are ommitted the corresponding values should default to 0.
  224. /// This however does not work on Solaris (GCC) which issues a
  225. /// warning about lack of initializers for some struct members
  226. /// causing build to fail.
  227. const OptionDefParams OPTION_DEF_PARAMS6[] = {
  228. { "clientid", D6O_CLIENTID, OPT_BINARY_TYPE, false, NO_RECORD_DEF, "" },
  229. { "serverid", D6O_SERVERID, OPT_BINARY_TYPE, false, NO_RECORD_DEF, "" },
  230. { "ia-na", D6O_IA_NA, OPT_RECORD_TYPE, false, RECORD_DEF(IA_NA_RECORDS), "" },
  231. { "ia-ta", D6O_IA_TA, OPT_UINT32_TYPE, false, NO_RECORD_DEF, "" },
  232. { "iaaddr", D6O_IAADDR, OPT_RECORD_TYPE, false, RECORD_DEF(IAADDR_RECORDS), "" },
  233. { "oro", D6O_ORO, OPT_UINT16_TYPE, true, NO_RECORD_DEF, "" },
  234. { "preference", D6O_PREFERENCE, OPT_UINT8_TYPE, false, NO_RECORD_DEF, "" },
  235. { "elapsed-time", D6O_ELAPSED_TIME, OPT_UINT16_TYPE, false, NO_RECORD_DEF, "" },
  236. { "relay-msg", D6O_RELAY_MSG, OPT_BINARY_TYPE, false, NO_RECORD_DEF, "" },
  237. // Unfortunatelly the AUTH option contains a 64-bit data field
  238. // called 'replay-detection' that can't be added as a record
  239. // field to a custom option. Also, there is no dedicated
  240. // option class to handle it so we simply return binary
  241. // option type for now.
  242. // @todo implement a class to handle AUTH option.
  243. { "auth", D6O_AUTH, OPT_BINARY_TYPE, false, NO_RECORD_DEF, "" },
  244. { "unicast", D6O_UNICAST, OPT_IPV6_ADDRESS_TYPE, false, NO_RECORD_DEF, "" },
  245. { "status-code", D6O_STATUS_CODE, OPT_RECORD_TYPE, false,
  246. RECORD_DEF(STATUS_CODE_RECORDS), "" },
  247. { "rapid-commit", D6O_RAPID_COMMIT, OPT_EMPTY_TYPE, false, NO_RECORD_DEF, "" },
  248. { "user-class", D6O_USER_CLASS, OPT_BINARY_TYPE, false, NO_RECORD_DEF, "" },
  249. { "vendor-class", D6O_VENDOR_CLASS, OPT_RECORD_TYPE, false,
  250. RECORD_DEF(VENDOR_CLASS_RECORDS), "" },
  251. { "vendor-opts", D6O_VENDOR_OPTS, OPT_UINT32_TYPE, false,
  252. NO_RECORD_DEF, "vendor-opts-space" },
  253. { "interface-id", D6O_INTERFACE_ID, OPT_BINARY_TYPE, false, NO_RECORD_DEF, "" },
  254. { "reconf-msg", D6O_RECONF_MSG, OPT_UINT8_TYPE, false, NO_RECORD_DEF, "" },
  255. { "reconf-accept", D6O_RECONF_ACCEPT, OPT_EMPTY_TYPE, false,
  256. NO_RECORD_DEF, "" },
  257. { "sip-server-dns", D6O_SIP_SERVERS_DNS, OPT_FQDN_TYPE, true,
  258. NO_RECORD_DEF, "" },
  259. { "sip-server-addr", D6O_SIP_SERVERS_ADDR, OPT_IPV6_ADDRESS_TYPE, true,
  260. NO_RECORD_DEF, "" },
  261. { "dns-servers", D6O_NAME_SERVERS, OPT_IPV6_ADDRESS_TYPE, true,
  262. NO_RECORD_DEF, "" },
  263. { "domain-search", D6O_DOMAIN_SEARCH, OPT_FQDN_TYPE, true, NO_RECORD_DEF, "" },
  264. { "ia-pd", D6O_IA_PD, OPT_RECORD_TYPE, false, RECORD_DEF(IA_PD_RECORDS), "" },
  265. { "iaprefix", D6O_IAPREFIX, OPT_RECORD_TYPE, false,
  266. RECORD_DEF(IA_PREFIX_RECORDS), "" },
  267. { "nis-servers", D6O_NIS_SERVERS, OPT_IPV6_ADDRESS_TYPE, true,
  268. NO_RECORD_DEF, "" },
  269. { "nisp-servers", D6O_NISP_SERVERS, OPT_IPV6_ADDRESS_TYPE, true,
  270. NO_RECORD_DEF, "" },
  271. { "nis-domain-name", D6O_NIS_DOMAIN_NAME, OPT_FQDN_TYPE, true,
  272. NO_RECORD_DEF, "" },
  273. { "nisp-domain-name", D6O_NISP_DOMAIN_NAME, OPT_FQDN_TYPE, true,
  274. NO_RECORD_DEF, "" },
  275. { "sntp-servers", D6O_SNTP_SERVERS, OPT_IPV6_ADDRESS_TYPE, true,
  276. NO_RECORD_DEF, "" },
  277. { "information-refresh-time", D6O_INFORMATION_REFRESH_TIME,
  278. OPT_UINT32_TYPE, false, NO_RECORD_DEF, "" },
  279. { "bcmcs-server-dns", D6O_BCMCS_SERVER_D, OPT_FQDN_TYPE, true,
  280. NO_RECORD_DEF, "" },
  281. { "bcmcs-server-addr", D6O_BCMCS_SERVER_A, OPT_IPV6_ADDRESS_TYPE, true,
  282. NO_RECORD_DEF, "" },
  283. { "geoconf-civic", D6O_GEOCONF_CIVIC, OPT_RECORD_TYPE, false,
  284. RECORD_DEF(GEOCONF_CIVIC_RECORDS), "" },
  285. { "remote-id", D6O_REMOTE_ID, OPT_RECORD_TYPE, false,
  286. RECORD_DEF(REMOTE_ID_RECORDS), "" },
  287. { "subscriber-id", D6O_SUBSCRIBER_ID, OPT_BINARY_TYPE, false,
  288. NO_RECORD_DEF, "" },
  289. { "client-fqdn", D6O_CLIENT_FQDN, OPT_RECORD_TYPE, false,
  290. RECORD_DEF(CLIENT_FQDN_RECORDS), "" },
  291. { "pana-agent", D6O_PANA_AGENT, OPT_IPV6_ADDRESS_TYPE, true,
  292. NO_RECORD_DEF, "" },
  293. { "new-posix-timezone", D6O_NEW_POSIX_TIMEZONE, OPT_STRING_TYPE, false,
  294. NO_RECORD_DEF, "" },
  295. { "new-tzdb-timezone", D6O_NEW_TZDB_TIMEZONE, OPT_STRING_TYPE, false,
  296. NO_RECORD_DEF, "" },
  297. { "ero", D6O_ERO, OPT_UINT16_TYPE, true, NO_RECORD_DEF, "" },
  298. { "lq-query", D6O_LQ_QUERY, OPT_RECORD_TYPE, false,
  299. RECORD_DEF(LQ_QUERY_RECORDS), "" },
  300. { "client-data", D6O_CLIENT_DATA, OPT_EMPTY_TYPE, false, NO_RECORD_DEF, "" },
  301. { "clt-time", D6O_CLT_TIME, OPT_UINT32_TYPE, false, NO_RECORD_DEF, "" },
  302. { "lq-relay-data", D6O_LQ_RELAY_DATA, OPT_RECORD_TYPE, false,
  303. RECORD_DEF(LQ_RELAY_DATA_RECORDS), "" },
  304. { "lq-client-link", D6O_LQ_CLIENT_LINK, OPT_IPV6_ADDRESS_TYPE, true,
  305. NO_RECORD_DEF, "" }
  306. // @todo There is still a bunch of options for which we have to provide
  307. // definitions but we don't do it because they are not really
  308. // critical right now.
  309. };
  310. /// Number of option definitions defined.
  311. const int OPTION_DEF_PARAMS_SIZE6 =
  312. sizeof(OPTION_DEF_PARAMS6) / sizeof(OPTION_DEF_PARAMS6[0]);
  313. }; // anonymous namespace
  314. #endif // STD_OPTION_DEFS_H