1 // Copyright (C) 2012-2021 Internet Systems Consortium, Inc. ("ISC") 2 // 3 // This Source Code Form is subject to the terms of the Mozilla Public 4 // License, v. 2.0. If a copy of the MPL was not distributed with this 5 // file, You can obtain one at http://mozilla.org/MPL/2.0/. 6 7 #ifndef STD_OPTION_DEFS_H 8 #define STD_OPTION_DEFS_H 9 10 #include <dhcp/option_data_types.h> 11 #include <dhcp/dhcp4.h> 12 #include <dhcp/dhcp6.h> 13 #include <dhcp/option_space.h> 14 15 /// @brief global std option spaces 16 #define DHCP4_OPTION_SPACE "dhcp4" 17 #define DHCP6_OPTION_SPACE "dhcp6" 18 #define ISC_V6_OPTION_SPACE "4o6" 19 #define MAPE_V6_OPTION_SPACE "s46-cont-mape-options" 20 #define MAPT_V6_OPTION_SPACE "s46-cont-mapt-options" 21 #define LW_V6_OPTION_SPACE "s46-cont-lw-options" 22 #define V4V6_RULE_OPTION_SPACE "s46-rule-options" 23 #define V4V6_BIND_OPTION_SPACE "s46-v4v6bind-options" 24 #define LAST_RESORT_V4_OPTION_SPACE "last-resort-v4" 25 26 /// @brief encapsulated option spaces 27 #define DHCP_AGENT_OPTION_SPACE "dhcp-agent-options-space" 28 #define VENDOR_ENCAPSULATED_OPTION_SPACE "vendor-encapsulated-options-space" 29 30 // NOTE: 31 // When adding a new space, make sure you also update 32 // src/lib/yang/adaptor_option.cc 33 34 namespace isc { 35 namespace dhcp { 36 37 namespace { 38 39 /// @brief Declare an array holding parameters used to create instance 40 /// of a definition for option comprising a record of data fields. 41 /// 42 /// @param name name of the array being declared. 43 #ifndef RECORD_DECL 44 #define RECORD_DECL(name, ...) const OptionDataType name[] = { __VA_ARGS__ } 45 #endif 46 47 /// @brief A pair of values: one pointing to the array holding types of 48 /// data fields belonging to the record, and size of this array. 49 /// 50 /// @param name name of the array holding data fields' types. 51 #ifndef RECORD_DEF 52 #define RECORD_DEF(name) name, sizeof(name) / sizeof(name[0]) 53 #endif 54 55 #ifndef NO_RECORD_DEF 56 #define NO_RECORD_DEF 0, 0 57 #endif 58 59 // SLP Directory Agent option. 60 RECORD_DECL(DIRECTORY_AGENT_RECORDS, OPT_BOOLEAN_TYPE, OPT_IPV4_ADDRESS_TYPE); 61 62 // SLP Service Scope option. 63 // 64 // The scope list is optional. 65 RECORD_DECL(SERVICE_SCOPE_RECORDS, OPT_BOOLEAN_TYPE, OPT_STRING_TYPE); 66 67 // fqdn option record fields. 68 // 69 // Note that the flags field indicates the type of domain 70 // name encoding. There is a choice between deprecated 71 // ASCII encoding and compressed encoding described in 72 // RFC 1035, section 3.1. The latter could be handled 73 // by OPT_FQDN_TYPE but we can't use it here because 74 // clients may request ASCII encoding. 75 RECORD_DECL(FQDN_RECORDS, OPT_UINT8_TYPE, OPT_UINT8_TYPE, OPT_UINT8_TYPE, 76 OPT_FQDN_TYPE); 77 78 // V-I Vendor Class record fields. 79 // 80 // Opaque data is represented here by the binary data field. 81 RECORD_DECL(VIVCO_RECORDS, OPT_UINT32_TYPE, OPT_BINARY_TYPE); 82 83 // RFC4578 (PXE) record fields 84 // 85 // Three 1 byte fields to describe a network interface: type, major and minor 86 RECORD_DECL(CLIENT_NDI_RECORDS, OPT_UINT8_TYPE, OPT_UINT8_TYPE, OPT_UINT8_TYPE); 87 // A client identifier: a 1 byte type field followed by opaque data depending on the type 88 RECORD_DECL(UUID_GUID_RECORDS, OPT_UINT8_TYPE, OPT_BINARY_TYPE); 89 90 // RFC6731 DHCPv4 Recursive DNS Server Selection option. 91 // 92 // Flag, two addresses and domain list 93 RECORD_DECL(V4_RDNSS_SELECT_RECORDS, OPT_UINT8_TYPE, OPT_IPV4_ADDRESS_TYPE, 94 OPT_IPV4_ADDRESS_TYPE, OPT_FQDN_TYPE); 95 96 // RFC7618 DHCPv4 Port Parameter option. 97 // 98 // PSID offset, PSID-len and PSID 99 RECORD_DECL(V4_PORTPARAMS_RECORDS, OPT_UINT8_TYPE, OPT_PSID_TYPE); 100 101 // RFC5969 DHCPv6 6RD option. 102 // 103 // two 8 bit lengthes, an IPv6 address and one or more IPv4 addresses 104 RECORD_DECL(OPT_6RD_RECORDS, OPT_UINT8_TYPE, OPT_UINT8_TYPE, 105 OPT_IPV6_ADDRESS_TYPE, OPT_IPV4_ADDRESS_TYPE); 106 107 /// @brief Definitions of standard DHCPv4 options. 108 const OptionDefParams STANDARD_V4_OPTION_DEFINITIONS[] = { 109 { "subnet-mask", DHO_SUBNET_MASK, DHCP4_OPTION_SPACE, 110 OPT_IPV4_ADDRESS_TYPE, false, NO_RECORD_DEF, "" }, 111 { "time-offset", DHO_TIME_OFFSET, DHCP4_OPTION_SPACE, OPT_INT32_TYPE, 112 false, NO_RECORD_DEF, "" }, 113 { "routers", DHO_ROUTERS, DHCP4_OPTION_SPACE, OPT_IPV4_ADDRESS_TYPE, true, 114 NO_RECORD_DEF, "" }, 115 { "time-servers", DHO_TIME_SERVERS, DHCP4_OPTION_SPACE, 116 OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" }, 117 { "name-servers", DHO_NAME_SERVERS, DHCP4_OPTION_SPACE, 118 OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" }, 119 { "domain-name-servers", DHO_DOMAIN_NAME_SERVERS, DHCP4_OPTION_SPACE, 120 OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" }, 121 { "log-servers", DHO_LOG_SERVERS, DHCP4_OPTION_SPACE, 122 OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" }, 123 { "cookie-servers", DHO_COOKIE_SERVERS, DHCP4_OPTION_SPACE, 124 OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" }, 125 { "lpr-servers", DHO_LPR_SERVERS, DHCP4_OPTION_SPACE, 126 OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" }, 127 { "impress-servers", DHO_IMPRESS_SERVERS, DHCP4_OPTION_SPACE, 128 OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" }, 129 { "resource-location-servers", DHO_RESOURCE_LOCATION_SERVERS, 130 DHCP4_OPTION_SPACE, OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" }, 131 { "host-name", DHO_HOST_NAME, DHCP4_OPTION_SPACE, OPT_STRING_TYPE, false, 132 NO_RECORD_DEF, "" }, 133 { "boot-size", DHO_BOOT_SIZE, DHCP4_OPTION_SPACE, OPT_UINT16_TYPE, false, 134 NO_RECORD_DEF, "" }, 135 { "merit-dump", DHO_MERIT_DUMP, DHCP4_OPTION_SPACE, OPT_STRING_TYPE, 136 false, NO_RECORD_DEF, "" }, 137 { "domain-name", DHO_DOMAIN_NAME, DHCP4_OPTION_SPACE, OPT_STRING_TYPE, 138 false, NO_RECORD_DEF, "" }, 139 { "swap-server", DHO_SWAP_SERVER, DHCP4_OPTION_SPACE, 140 OPT_IPV4_ADDRESS_TYPE, false, NO_RECORD_DEF, "" }, 141 { "root-path", DHO_ROOT_PATH, DHCP4_OPTION_SPACE, OPT_STRING_TYPE, false, 142 NO_RECORD_DEF, "" }, 143 { "extensions-path", DHO_EXTENSIONS_PATH, DHCP4_OPTION_SPACE, 144 OPT_STRING_TYPE, false, NO_RECORD_DEF, "" }, 145 { "ip-forwarding", DHO_IP_FORWARDING, DHCP4_OPTION_SPACE, OPT_BOOLEAN_TYPE, 146 false, NO_RECORD_DEF, "" }, 147 { "non-local-source-routing", DHO_NON_LOCAL_SOURCE_ROUTING, 148 DHCP4_OPTION_SPACE, OPT_BOOLEAN_TYPE, false, NO_RECORD_DEF, "" }, 149 { "policy-filter", DHO_POLICY_FILTER, DHCP4_OPTION_SPACE, 150 OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" }, 151 { "max-dgram-reassembly", DHO_MAX_DGRAM_REASSEMBLY, DHCP4_OPTION_SPACE, 152 OPT_UINT16_TYPE, false, NO_RECORD_DEF, "" }, 153 { "default-ip-ttl", DHO_DEFAULT_IP_TTL, DHCP4_OPTION_SPACE, OPT_UINT8_TYPE, 154 false, NO_RECORD_DEF, "" }, 155 { "path-mtu-aging-timeout", DHO_PATH_MTU_AGING_TIMEOUT, DHCP4_OPTION_SPACE, 156 OPT_UINT32_TYPE, false, NO_RECORD_DEF, "" }, 157 { "path-mtu-plateau-table", DHO_PATH_MTU_PLATEAU_TABLE, DHCP4_OPTION_SPACE, 158 OPT_UINT16_TYPE, true, NO_RECORD_DEF, "" }, 159 { "interface-mtu", DHO_INTERFACE_MTU, DHCP4_OPTION_SPACE, OPT_UINT16_TYPE, 160 false, NO_RECORD_DEF, "" }, 161 { "all-subnets-local", DHO_ALL_SUBNETS_LOCAL, DHCP4_OPTION_SPACE, 162 OPT_BOOLEAN_TYPE, false, NO_RECORD_DEF, "" }, 163 { "broadcast-address", DHO_BROADCAST_ADDRESS, DHCP4_OPTION_SPACE, 164 OPT_IPV4_ADDRESS_TYPE, false, NO_RECORD_DEF, "" }, 165 { "perform-mask-discovery", DHO_PERFORM_MASK_DISCOVERY, DHCP4_OPTION_SPACE, 166 OPT_BOOLEAN_TYPE, false, NO_RECORD_DEF, "" }, 167 { "mask-supplier", DHO_MASK_SUPPLIER, DHCP4_OPTION_SPACE, OPT_BOOLEAN_TYPE, 168 false, NO_RECORD_DEF, "" }, 169 { "router-discovery", DHO_ROUTER_DISCOVERY, DHCP4_OPTION_SPACE, 170 OPT_BOOLEAN_TYPE, false, NO_RECORD_DEF, "" }, 171 { "router-solicitation-address", DHO_ROUTER_SOLICITATION_ADDRESS, 172 DHCP4_OPTION_SPACE, OPT_IPV4_ADDRESS_TYPE, false, NO_RECORD_DEF, "" }, 173 { "static-routes", DHO_STATIC_ROUTES, DHCP4_OPTION_SPACE, 174 OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" }, 175 { "trailer-encapsulation", DHO_TRAILER_ENCAPSULATION, DHCP4_OPTION_SPACE, 176 OPT_BOOLEAN_TYPE, false, NO_RECORD_DEF, "" }, 177 { "arp-cache-timeout", DHO_ARP_CACHE_TIMEOUT, DHCP4_OPTION_SPACE, 178 OPT_UINT32_TYPE, false, NO_RECORD_DEF, "" }, 179 { "ieee802-3-encapsulation", DHO_IEEE802_3_ENCAPSULATION, 180 DHCP4_OPTION_SPACE, OPT_BOOLEAN_TYPE, false, NO_RECORD_DEF, "" }, 181 { "default-tcp-ttl", DHO_DEFAULT_TCP_TTL, DHCP4_OPTION_SPACE, 182 OPT_UINT8_TYPE, false, NO_RECORD_DEF, "" }, 183 { "tcp-keepalive-interval", DHO_TCP_KEEPALIVE_INTERVAL, DHCP4_OPTION_SPACE, 184 OPT_UINT32_TYPE, false, NO_RECORD_DEF, "" }, 185 { "tcp-keepalive-garbage", DHO_TCP_KEEPALIVE_GARBAGE, DHCP4_OPTION_SPACE, 186 OPT_BOOLEAN_TYPE, false, NO_RECORD_DEF, "" }, 187 { "nis-domain", DHO_NIS_DOMAIN, DHCP4_OPTION_SPACE, OPT_STRING_TYPE, false, 188 NO_RECORD_DEF, "" }, 189 { "nis-servers", DHO_NIS_SERVERS, DHCP4_OPTION_SPACE, 190 OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" }, 191 { "ntp-servers", DHO_NTP_SERVERS, DHCP4_OPTION_SPACE, 192 OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" }, 193 /// vendor-encapsulated-options (43) is deferred 194 { "netbios-name-servers", DHO_NETBIOS_NAME_SERVERS, DHCP4_OPTION_SPACE, 195 OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" }, 196 { "netbios-dd-server", DHO_NETBIOS_DD_SERVER, DHCP4_OPTION_SPACE, 197 OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" }, 198 { "netbios-node-type", DHO_NETBIOS_NODE_TYPE, DHCP4_OPTION_SPACE, 199 OPT_UINT8_TYPE, false, NO_RECORD_DEF, "" }, 200 { "netbios-scope", DHO_NETBIOS_SCOPE, DHCP4_OPTION_SPACE, OPT_STRING_TYPE, 201 false, NO_RECORD_DEF, "" }, 202 { "font-servers", DHO_FONT_SERVERS, DHCP4_OPTION_SPACE, 203 OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" }, 204 { "x-display-manager", DHO_X_DISPLAY_MANAGER, DHCP4_OPTION_SPACE, 205 OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" }, 206 { "dhcp-requested-address", DHO_DHCP_REQUESTED_ADDRESS, DHCP4_OPTION_SPACE, 207 OPT_IPV4_ADDRESS_TYPE, false, NO_RECORD_DEF, "" }, 208 { "dhcp-lease-time", DHO_DHCP_LEASE_TIME, DHCP4_OPTION_SPACE, 209 OPT_UINT32_TYPE, false, NO_RECORD_DEF, "" }, 210 { "dhcp-option-overload", DHO_DHCP_OPTION_OVERLOAD, DHCP4_OPTION_SPACE, 211 OPT_UINT8_TYPE, false, NO_RECORD_DEF, "" }, 212 { "dhcp-message-type", DHO_DHCP_MESSAGE_TYPE, DHCP4_OPTION_SPACE, 213 OPT_UINT8_TYPE, false, NO_RECORD_DEF, "" }, 214 { "dhcp-server-identifier", DHO_DHCP_SERVER_IDENTIFIER, DHCP4_OPTION_SPACE, 215 OPT_IPV4_ADDRESS_TYPE, false, NO_RECORD_DEF, "" }, 216 { "dhcp-parameter-request-list", DHO_DHCP_PARAMETER_REQUEST_LIST, 217 DHCP4_OPTION_SPACE, OPT_UINT8_TYPE, true, NO_RECORD_DEF, "" }, 218 { "dhcp-message", DHO_DHCP_MESSAGE, DHCP4_OPTION_SPACE, OPT_STRING_TYPE, 219 false, NO_RECORD_DEF, "" }, 220 { "dhcp-max-message-size", DHO_DHCP_MAX_MESSAGE_SIZE, DHCP4_OPTION_SPACE, 221 OPT_UINT16_TYPE, false, NO_RECORD_DEF, "" }, 222 { "dhcp-renewal-time", DHO_DHCP_RENEWAL_TIME, DHCP4_OPTION_SPACE, 223 OPT_UINT32_TYPE, false, NO_RECORD_DEF, "" }, 224 { "dhcp-rebinding-time", DHO_DHCP_REBINDING_TIME, DHCP4_OPTION_SPACE, 225 OPT_UINT32_TYPE, false, NO_RECORD_DEF, "" }, 226 { "vendor-class-identifier", DHO_VENDOR_CLASS_IDENTIFIER, 227 DHCP4_OPTION_SPACE, OPT_STRING_TYPE, false, NO_RECORD_DEF, "" }, 228 { "dhcp-client-identifier", DHO_DHCP_CLIENT_IDENTIFIER, DHCP4_OPTION_SPACE, 229 OPT_BINARY_TYPE, false, NO_RECORD_DEF, "" }, 230 { "nwip-domain-name", DHO_NWIP_DOMAIN_NAME, DHCP4_OPTION_SPACE, 231 OPT_STRING_TYPE, false, NO_RECORD_DEF, "" }, 232 { "nwip-suboptions", DHO_NWIP_SUBOPTIONS, DHCP4_OPTION_SPACE, 233 OPT_BINARY_TYPE, false, NO_RECORD_DEF, "" }, 234 { "nisplus-domain-name", DHO_NISP_DOMAIN_NAME, DHCP4_OPTION_SPACE, 235 OPT_STRING_TYPE, false, NO_RECORD_DEF, "" }, 236 { "nisplus-servers", DHO_NISP_SERVER_ADDR, DHCP4_OPTION_SPACE, 237 OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" }, 238 { "tftp-server-name", DHO_TFTP_SERVER_NAME, DHCP4_OPTION_SPACE, 239 OPT_STRING_TYPE, false, NO_RECORD_DEF, "" }, 240 { "boot-file-name", DHO_BOOT_FILE_NAME, DHCP4_OPTION_SPACE, 241 OPT_STRING_TYPE, false, NO_RECORD_DEF, "" }, 242 { "mobile-ip-home-agent", DHO_HOME_AGENT_ADDRS, DHCP4_OPTION_SPACE, 243 OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" }, 244 { "smtp-server", DHO_SMTP_SERVER, DHCP4_OPTION_SPACE, 245 OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" }, 246 { "pop-server", DHO_POP3_SERVER, DHCP4_OPTION_SPACE, OPT_IPV4_ADDRESS_TYPE, 247 true, NO_RECORD_DEF, "" }, 248 { "nntp-server", DHO_NNTP_SERVER, DHCP4_OPTION_SPACE, 249 OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" }, 250 { "www-server", DHO_WWW_SERVER, DHCP4_OPTION_SPACE, OPT_IPV4_ADDRESS_TYPE, 251 true, NO_RECORD_DEF, "" }, 252 { "finger-server", DHO_FINGER_SERVER, DHCP4_OPTION_SPACE, 253 OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" }, 254 { "irc-server", DHO_IRC_SERVER, DHCP4_OPTION_SPACE, OPT_IPV4_ADDRESS_TYPE, 255 true, NO_RECORD_DEF, "" }, 256 { "streettalk-server", DHO_STREETTALK_SERVER, DHCP4_OPTION_SPACE, 257 OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" }, 258 { "streettalk-directory-assistance-server", DHO_STDASERVER, 259 DHCP4_OPTION_SPACE, OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" }, 260 { "user-class", DHO_USER_CLASS, DHCP4_OPTION_SPACE, OPT_BINARY_TYPE, false, 261 NO_RECORD_DEF, "" }, 262 { "slp-directory-agent", DHO_DIRECTORY_AGENT, DHCP4_OPTION_SPACE, 263 OPT_RECORD_TYPE, true, RECORD_DEF(DIRECTORY_AGENT_RECORDS), "" }, 264 { "slp-service-scope", DHO_SERVICE_SCOPE, DHCP4_OPTION_SPACE, 265 OPT_RECORD_TYPE, false, RECORD_DEF(SERVICE_SCOPE_RECORDS), "" }, 266 { "fqdn", DHO_FQDN, DHCP4_OPTION_SPACE, OPT_RECORD_TYPE, false, 267 RECORD_DEF(FQDN_RECORDS), "" }, 268 { "dhcp-agent-options", DHO_DHCP_AGENT_OPTIONS, DHCP4_OPTION_SPACE, 269 OPT_EMPTY_TYPE, false, NO_RECORD_DEF, DHCP_AGENT_OPTION_SPACE }, 270 { "nds-servers", DHO_NDS_SERVERS, DHCP4_OPTION_SPACE, 271 OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" }, 272 { "nds-tree-name", DHO_NDS_TREE_NAME, DHCP4_OPTION_SPACE, OPT_STRING_TYPE, 273 false, NO_RECORD_DEF, "" }, 274 { "nds-context", DHO_NDS_CONTEXT, DHCP4_OPTION_SPACE, OPT_STRING_TYPE, 275 false, NO_RECORD_DEF, "" }, 276 { "bcms-controller-names", DHO_BCMCS_DOMAIN_NAME_LIST, DHCP4_OPTION_SPACE, 277 OPT_FQDN_TYPE, true, NO_RECORD_DEF, "" }, 278 { "bcms-controller-address", DHO_BCMCS_IPV4_ADDR, DHCP4_OPTION_SPACE, 279 OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" }, 280 // Unfortunately the AUTHENTICATE option contains a 64-bit 281 // data field called 'replay-detection' that can't be added 282 // as a record field to a custom option. Also, there is no 283 // dedicated option class to handle it so we simply return 284 // binary option type for now. 285 // @todo implement a class to handle AUTH option. 286 { "authenticate", DHO_AUTHENTICATE, DHCP4_OPTION_SPACE, OPT_BINARY_TYPE, 287 false, NO_RECORD_DEF, "" }, 288 { "client-last-transaction-time", DHO_CLIENT_LAST_TRANSACTION_TIME, 289 DHCP4_OPTION_SPACE, OPT_UINT32_TYPE, false, NO_RECORD_DEF, "" }, 290 { "associated-ip", DHO_ASSOCIATED_IP, DHCP4_OPTION_SPACE, 291 OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" }, 292 { "client-system", DHO_SYSTEM, DHCP4_OPTION_SPACE, OPT_UINT16_TYPE, true, 293 NO_RECORD_DEF, "" }, 294 { "client-ndi", DHO_NDI, DHCP4_OPTION_SPACE, OPT_RECORD_TYPE, false, 295 RECORD_DEF(CLIENT_NDI_RECORDS), "" }, 296 { "uuid-guid", DHO_UUID_GUID, DHCP4_OPTION_SPACE, OPT_RECORD_TYPE, false, 297 RECORD_DEF(UUID_GUID_RECORDS), "" }, 298 { "uap-servers", DHO_USER_AUTH, DHCP4_OPTION_SPACE, OPT_STRING_TYPE, false, 299 NO_RECORD_DEF, "" }, 300 { "geoconf-civic", DHO_GEOCONF_CIVIC, DHCP4_OPTION_SPACE, OPT_BINARY_TYPE, 301 false, NO_RECORD_DEF, "" }, 302 { "pcode", DHO_PCODE, DHCP4_OPTION_SPACE, OPT_STRING_TYPE, false, 303 NO_RECORD_DEF, "" }, 304 { "tcode", DHO_TCODE, DHCP4_OPTION_SPACE, OPT_STRING_TYPE, false, 305 NO_RECORD_DEF, "" }, 306 { "v6-only-preferred", DHO_V6_ONLY_PREFERRED, DHCP4_OPTION_SPACE, 307 OPT_UINT32_TYPE, false, NO_RECORD_DEF, "" }, 308 { "netinfo-server-address", DHO_NETINFO_ADDR, DHCP4_OPTION_SPACE, 309 OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" }, 310 { "netinfo-server-tag", DHO_NETINFO_TAG, DHCP4_OPTION_SPACE, 311 OPT_STRING_TYPE, false, NO_RECORD_DEF, "" }, 312 { "default-url", DHO_URL, DHCP4_OPTION_SPACE, OPT_STRING_TYPE, false, 313 NO_RECORD_DEF, "" }, 314 { "auto-config", DHO_AUTO_CONFIG, DHCP4_OPTION_SPACE, OPT_UINT8_TYPE, 315 false, NO_RECORD_DEF, "" }, 316 { "name-service-search", DHO_NAME_SERVICE_SEARCH, DHCP4_OPTION_SPACE, 317 OPT_UINT16_TYPE, true, NO_RECORD_DEF, "" }, 318 { "subnet-selection", DHO_SUBNET_SELECTION, DHCP4_OPTION_SPACE, 319 OPT_IPV4_ADDRESS_TYPE, false, NO_RECORD_DEF, "" }, 320 { "domain-search", DHO_DOMAIN_SEARCH, DHCP4_OPTION_SPACE, OPT_FQDN_TYPE, 321 true, NO_RECORD_DEF, "" }, 322 { "vivco-suboptions", DHO_VIVCO_SUBOPTIONS, DHCP4_OPTION_SPACE, 323 OPT_RECORD_TYPE, false, RECORD_DEF(VIVCO_RECORDS), "" }, 324 // Vendor-Identifying Vendor Specific Information option payload begins with a 325 // 32-bit log enterprise number, followed by a tuple of data-len/option-data. 326 // The format defined here includes 32-bit field holding enterprise number. 327 // This allows for specifying option-data information where the enterprise-id 328 // is represented by a uint32_t value. Previously we represented this option 329 // as a binary, but that would imply that enterprise number would have to be 330 // represented in binary format in the server configuration. That would be 331 // inconvenient and non-intuitive. 332 /// @todo We need to extend support for vendor options with ability to specify 333 /// multiple enterprise numbers for a single option. Perhaps it would be 334 /// ok to specify multiple instances of the "vivso-suboptions" which will be 335 /// combined in a single option by the server before responding to a client. 336 { "vivso-suboptions", DHO_VIVSO_SUBOPTIONS, DHCP4_OPTION_SPACE, 337 OPT_UINT32_TYPE, false, NO_RECORD_DEF, "" }, 338 { "pana-agent", DHO_PANA_AGENT, DHCP4_OPTION_SPACE, OPT_IPV4_ADDRESS_TYPE, 339 true, NO_RECORD_DEF, "" }, 340 { "v4-lost", DHO_V4_LOST, DHCP4_OPTION_SPACE, OPT_FQDN_TYPE, false, 341 NO_RECORD_DEF, "" }, 342 { "capwap-ac-v4", DHO_CAPWAP_AC_V4, DHCP4_OPTION_SPACE, 343 OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" }, 344 { "sip-ua-cs-domains", DHO_SIP_UA_CONF_SERVICE_DOMAINS, DHCP4_OPTION_SPACE, 345 OPT_FQDN_TYPE, true, NO_RECORD_DEF, "" }, 346 { "rdnss-selection", DHO_RDNSS_SELECT, DHCP4_OPTION_SPACE, OPT_RECORD_TYPE, 347 true, RECORD_DEF(V4_RDNSS_SELECT_RECORDS), "" }, 348 { "v4-portparams", DHO_V4_PORTPARAMS, DHCP4_OPTION_SPACE, OPT_RECORD_TYPE, 349 false, RECORD_DEF(V4_PORTPARAMS_RECORDS), "" }, 350 { "v4-captive-portal", DHO_V4_CAPTIVE_PORTAL, DHCP4_OPTION_SPACE, 351 OPT_STRING_TYPE, false, NO_RECORD_DEF, "" }, 352 { "option-6rd", DHO_6RD, DHCP4_OPTION_SPACE, OPT_RECORD_TYPE, true, 353 RECORD_DEF(OPT_6RD_RECORDS), "" }, 354 { "v4-access-domain", DHO_V4_ACCESS_DOMAIN, DHCP4_OPTION_SPACE, 355 OPT_FQDN_TYPE, false, NO_RECORD_DEF, "" } 356 357 // @todo add definitions for all remaining options. 358 }; 359 360 /// Number of option definitions defined. 361 const int STANDARD_V4_OPTION_DEFINITIONS_SIZE = 362 sizeof(STANDARD_V4_OPTION_DEFINITIONS) / 363 sizeof(STANDARD_V4_OPTION_DEFINITIONS[0]); 364 365 /// Last resort definitions (only option 43 for now, these definitions 366 /// are applied in deferred unpacking when none is found). 367 const OptionDefParams LAST_RESORT_V4_OPTION_DEFINITIONS[] = { 368 { "vendor-encapsulated-options", DHO_VENDOR_ENCAPSULATED_OPTIONS, 369 DHCP4_OPTION_SPACE, OPT_EMPTY_TYPE, false, NO_RECORD_DEF, 370 VENDOR_ENCAPSULATED_OPTION_SPACE } 371 }; 372 373 const int LAST_RESORT_V4_OPTION_DEFINITIONS_SIZE = 374 sizeof(LAST_RESORT_V4_OPTION_DEFINITIONS) / 375 sizeof(LAST_RESORT_V4_OPTION_DEFINITIONS[0]); 376 377 /// Start Definition of DHCPv6 options 378 379 // client-fqdn 380 RECORD_DECL(CLIENT_FQDN_RECORDS, OPT_UINT8_TYPE, OPT_FQDN_TYPE); 381 // geoconf-civic 382 RECORD_DECL(GEOCONF_CIVIC_RECORDS, OPT_UINT8_TYPE, OPT_UINT16_TYPE, 383 OPT_BINARY_TYPE); 384 // iaddr 385 RECORD_DECL(IAADDR_RECORDS, OPT_IPV6_ADDRESS_TYPE, OPT_UINT32_TYPE, 386 OPT_UINT32_TYPE); 387 // ia-na 388 RECORD_DECL(IA_NA_RECORDS, OPT_UINT32_TYPE, OPT_UINT32_TYPE, OPT_UINT32_TYPE); 389 // ia-pd 390 RECORD_DECL(IA_PD_RECORDS, OPT_UINT32_TYPE, OPT_UINT32_TYPE, OPT_UINT32_TYPE); 391 // ia-prefix 392 RECORD_DECL(IA_PREFIX_RECORDS, OPT_UINT32_TYPE, OPT_UINT32_TYPE, 393 OPT_UINT8_TYPE, OPT_IPV6_ADDRESS_TYPE); 394 // lq-query 395 RECORD_DECL(LQ_QUERY_RECORDS, OPT_UINT8_TYPE, OPT_IPV6_ADDRESS_TYPE); 396 // lq-relay-data 397 RECORD_DECL(LQ_RELAY_DATA_RECORDS, OPT_IPV6_ADDRESS_TYPE, OPT_BINARY_TYPE); 398 // remote-id 399 RECORD_DECL(REMOTE_ID_RECORDS, OPT_UINT32_TYPE, OPT_BINARY_TYPE); 400 // s46-rule 401 RECORD_DECL(S46_RULE, OPT_UINT8_TYPE, OPT_UINT8_TYPE, OPT_UINT8_TYPE, 402 OPT_IPV4_ADDRESS_TYPE, OPT_IPV6_PREFIX_TYPE); 403 // s46-v4v6bind 404 RECORD_DECL(S46_V4V6BIND, OPT_IPV4_ADDRESS_TYPE, OPT_IPV6_PREFIX_TYPE); 405 // s46-portparams 406 RECORD_DECL(S46_PORTPARAMS, OPT_UINT8_TYPE, OPT_PSID_TYPE); 407 // status-code 408 RECORD_DECL(STATUS_CODE_RECORDS, OPT_UINT16_TYPE, OPT_STRING_TYPE); 409 // vendor-class 410 RECORD_DECL(VENDOR_CLASS_RECORDS, OPT_UINT32_TYPE, OPT_BINARY_TYPE); 411 // rdnss-selection 412 RECORD_DECL(V6_RDNSS_SELECT_RECORDS, OPT_IPV6_ADDRESS_TYPE, OPT_UINT8_TYPE, 413 OPT_FQDN_TYPE); 414 // sedhcpv6 signature 415 RECORD_DECL(SIGNATURE_RECORDS, OPT_UINT8_TYPE, OPT_UINT8_TYPE, 416 OPT_BINARY_TYPE); 417 418 // RFC5970 (PXE) Class record fields 419 // 420 // Three 1 byte fileds to describe a network interface: type, major and minor 421 RECORD_DECL(CLIENT_NII_RECORDS, OPT_UINT8_TYPE, OPT_UINT8_TYPE, OPT_UINT8_TYPE); 422 423 /// Standard DHCPv6 option definitions. 424 /// 425 /// @warning in this array, the initializers are provided for all 426 /// OptionDefParams struct's members despite initializers for 427 /// 'records' and 'record_size' could be omitted for entries for 428 /// which 'type' does not equal to OPT_RECORD_TYPE. If initializers 429 /// are omitted the corresponding values should default to 0. 430 /// This however does not work on Solaris (GCC) which issues a 431 /// warning about lack of initializers for some struct members 432 /// causing build to fail. 433 const OptionDefParams STANDARD_V6_OPTION_DEFINITIONS[] = { 434 { "clientid", D6O_CLIENTID, DHCP6_OPTION_SPACE, OPT_BINARY_TYPE, false, 435 NO_RECORD_DEF, "" }, 436 { "serverid", D6O_SERVERID, DHCP6_OPTION_SPACE, OPT_BINARY_TYPE, false, 437 NO_RECORD_DEF, "" }, 438 { "ia-na", D6O_IA_NA, DHCP6_OPTION_SPACE, OPT_RECORD_TYPE, false, 439 RECORD_DEF(IA_NA_RECORDS), "" }, 440 { "ia-ta", D6O_IA_TA, DHCP6_OPTION_SPACE, OPT_UINT32_TYPE, false, 441 NO_RECORD_DEF, "" }, 442 { "iaaddr", D6O_IAADDR, DHCP6_OPTION_SPACE, OPT_RECORD_TYPE, false, 443 RECORD_DEF(IAADDR_RECORDS), "" }, 444 { "oro", D6O_ORO, DHCP6_OPTION_SPACE, OPT_UINT16_TYPE, true, NO_RECORD_DEF, 445 "" }, 446 { "preference", D6O_PREFERENCE, DHCP6_OPTION_SPACE, OPT_UINT8_TYPE, false, 447 NO_RECORD_DEF, "" }, 448 { "elapsed-time", D6O_ELAPSED_TIME, DHCP6_OPTION_SPACE, OPT_UINT16_TYPE, 449 false, NO_RECORD_DEF, "" }, 450 { "relay-msg", D6O_RELAY_MSG, DHCP6_OPTION_SPACE, OPT_BINARY_TYPE, false, 451 NO_RECORD_DEF, "" }, 452 // Unfortunately the AUTH option contains a 64-bit data field 453 // called 'replay-detection' that can't be added as a record 454 // field to a custom option. Also, there is no dedicated 455 // option class to handle it so we simply return binary 456 // option type for now. 457 // @todo implement a class to handle AUTH option. 458 { "auth", D6O_AUTH, DHCP6_OPTION_SPACE, OPT_BINARY_TYPE, false, 459 NO_RECORD_DEF, "" }, 460 { "unicast", D6O_UNICAST, DHCP6_OPTION_SPACE, OPT_IPV6_ADDRESS_TYPE, 461 false, NO_RECORD_DEF, "" }, 462 { "status-code", D6O_STATUS_CODE, DHCP6_OPTION_SPACE, OPT_RECORD_TYPE, 463 false, RECORD_DEF(STATUS_CODE_RECORDS), "" }, 464 { "rapid-commit", D6O_RAPID_COMMIT, DHCP6_OPTION_SPACE, OPT_EMPTY_TYPE, 465 false, NO_RECORD_DEF, "" }, 466 { "user-class", D6O_USER_CLASS, DHCP6_OPTION_SPACE, OPT_BINARY_TYPE, 467 false, NO_RECORD_DEF, "" }, 468 { "vendor-class", D6O_VENDOR_CLASS, DHCP6_OPTION_SPACE, OPT_RECORD_TYPE, 469 false, RECORD_DEF(VENDOR_CLASS_RECORDS), "" }, 470 { "vendor-opts", D6O_VENDOR_OPTS, DHCP6_OPTION_SPACE, OPT_UINT32_TYPE, 471 false, NO_RECORD_DEF, "" }, 472 { "interface-id", D6O_INTERFACE_ID, DHCP6_OPTION_SPACE, OPT_BINARY_TYPE, 473 false, NO_RECORD_DEF, "" }, 474 { "reconf-msg", D6O_RECONF_MSG, DHCP6_OPTION_SPACE, OPT_UINT8_TYPE, false, 475 NO_RECORD_DEF, "" }, 476 { "reconf-accept", D6O_RECONF_ACCEPT, DHCP6_OPTION_SPACE, OPT_EMPTY_TYPE, 477 false, NO_RECORD_DEF, "" }, 478 { "sip-server-dns", D6O_SIP_SERVERS_DNS, DHCP6_OPTION_SPACE, OPT_FQDN_TYPE, 479 true, NO_RECORD_DEF, "" }, 480 { "sip-server-addr", D6O_SIP_SERVERS_ADDR, DHCP6_OPTION_SPACE, 481 OPT_IPV6_ADDRESS_TYPE, true, NO_RECORD_DEF, "" }, 482 { "dns-servers", D6O_NAME_SERVERS, DHCP6_OPTION_SPACE, 483 OPT_IPV6_ADDRESS_TYPE, true, NO_RECORD_DEF, "" }, 484 { "domain-search", D6O_DOMAIN_SEARCH, DHCP6_OPTION_SPACE, OPT_FQDN_TYPE, 485 true, NO_RECORD_DEF, "" }, 486 { "ia-pd", D6O_IA_PD, DHCP6_OPTION_SPACE, OPT_RECORD_TYPE, false, 487 RECORD_DEF(IA_PD_RECORDS), "" }, 488 { "iaprefix", D6O_IAPREFIX, DHCP6_OPTION_SPACE, OPT_RECORD_TYPE, false, 489 RECORD_DEF(IA_PREFIX_RECORDS), "" }, 490 { "nis-servers", D6O_NIS_SERVERS, DHCP6_OPTION_SPACE, 491 OPT_IPV6_ADDRESS_TYPE, true, NO_RECORD_DEF, "" }, 492 { "nisp-servers", D6O_NISP_SERVERS, DHCP6_OPTION_SPACE, 493 OPT_IPV6_ADDRESS_TYPE, true, NO_RECORD_DEF, "" }, 494 { "nis-domain-name", D6O_NIS_DOMAIN_NAME, DHCP6_OPTION_SPACE, 495 OPT_FQDN_TYPE, true, NO_RECORD_DEF, "" }, 496 { "nisp-domain-name", D6O_NISP_DOMAIN_NAME, DHCP6_OPTION_SPACE, 497 OPT_FQDN_TYPE, true, NO_RECORD_DEF, "" }, 498 { "sntp-servers", D6O_SNTP_SERVERS, DHCP6_OPTION_SPACE, 499 OPT_IPV6_ADDRESS_TYPE, true, NO_RECORD_DEF, "" }, 500 { "information-refresh-time", D6O_INFORMATION_REFRESH_TIME, 501 DHCP6_OPTION_SPACE, OPT_UINT32_TYPE, false, NO_RECORD_DEF, "" }, 502 { "bcmcs-server-dns", D6O_BCMCS_SERVER_D, DHCP6_OPTION_SPACE, 503 OPT_FQDN_TYPE, true, NO_RECORD_DEF, "" }, 504 { "bcmcs-server-addr", D6O_BCMCS_SERVER_A, DHCP6_OPTION_SPACE, 505 OPT_IPV6_ADDRESS_TYPE, true, NO_RECORD_DEF, "" }, 506 { "geoconf-civic", D6O_GEOCONF_CIVIC, DHCP6_OPTION_SPACE, 507 OPT_RECORD_TYPE, false, RECORD_DEF(GEOCONF_CIVIC_RECORDS), "" }, 508 { "remote-id", D6O_REMOTE_ID, DHCP6_OPTION_SPACE, OPT_RECORD_TYPE, false, 509 RECORD_DEF(REMOTE_ID_RECORDS), "" }, 510 { "subscriber-id", D6O_SUBSCRIBER_ID, DHCP6_OPTION_SPACE, OPT_BINARY_TYPE, 511 false, NO_RECORD_DEF, "" }, 512 { "client-fqdn", D6O_CLIENT_FQDN, DHCP6_OPTION_SPACE, OPT_RECORD_TYPE, 513 false, RECORD_DEF(CLIENT_FQDN_RECORDS), "" }, 514 { "pana-agent", D6O_PANA_AGENT, DHCP6_OPTION_SPACE, OPT_IPV6_ADDRESS_TYPE, 515 true, NO_RECORD_DEF, "" }, 516 { "new-posix-timezone", D6O_NEW_POSIX_TIMEZONE, DHCP6_OPTION_SPACE, 517 OPT_STRING_TYPE, false, NO_RECORD_DEF, "" }, 518 { "new-tzdb-timezone", D6O_NEW_TZDB_TIMEZONE, DHCP6_OPTION_SPACE, 519 OPT_STRING_TYPE, false, NO_RECORD_DEF, "" }, 520 { "ero", D6O_ERO, DHCP6_OPTION_SPACE, OPT_UINT16_TYPE, true, 521 NO_RECORD_DEF, "" }, 522 { "lq-query", D6O_LQ_QUERY, DHCP6_OPTION_SPACE, OPT_RECORD_TYPE, false, 523 RECORD_DEF(LQ_QUERY_RECORDS), DHCP6_OPTION_SPACE }, 524 { "client-data", D6O_CLIENT_DATA, DHCP6_OPTION_SPACE, OPT_EMPTY_TYPE, 525 false, NO_RECORD_DEF, DHCP6_OPTION_SPACE }, 526 { "clt-time", D6O_CLT_TIME, DHCP6_OPTION_SPACE, OPT_UINT32_TYPE, false, 527 NO_RECORD_DEF, "" }, 528 { "lq-relay-data", D6O_LQ_RELAY_DATA, DHCP6_OPTION_SPACE, OPT_RECORD_TYPE, 529 false, RECORD_DEF(LQ_RELAY_DATA_RECORDS), "" }, 530 { "lq-client-link", D6O_LQ_CLIENT_LINK, DHCP6_OPTION_SPACE, 531 OPT_IPV6_ADDRESS_TYPE, true, NO_RECORD_DEF, "" }, 532 { "v6-lost", D6O_V6_LOST, DHCP6_OPTION_SPACE, OPT_FQDN_TYPE, false, 533 NO_RECORD_DEF, "" }, 534 { "capwap-ac-v6", D6O_CAPWAP_AC_V6, DHCP6_OPTION_SPACE, 535 OPT_IPV6_ADDRESS_TYPE, true, NO_RECORD_DEF, "" }, 536 { "relay-id", D6O_RELAY_ID, DHCP6_OPTION_SPACE, OPT_BINARY_TYPE, false, 537 NO_RECORD_DEF, "" }, 538 { "v6-access-domain", D6O_V6_ACCESS_DOMAIN, DHCP6_OPTION_SPACE, 539 OPT_FQDN_TYPE, false, NO_RECORD_DEF, "" }, 540 { "sip-ua-cs-list", D6O_SIP_UA_CS_LIST, DHCP6_OPTION_SPACE, 541 OPT_FQDN_TYPE, true, NO_RECORD_DEF, "" }, 542 { "bootfile-url", D6O_BOOTFILE_URL, DHCP6_OPTION_SPACE, OPT_STRING_TYPE, 543 false, NO_RECORD_DEF, "" }, 544 { "bootfile-param", D6O_BOOTFILE_PARAM, DHCP6_OPTION_SPACE, OPT_TUPLE_TYPE, 545 true, NO_RECORD_DEF, "" }, 546 { "client-arch-type", D6O_CLIENT_ARCH_TYPE, DHCP6_OPTION_SPACE, 547 OPT_UINT16_TYPE, true, NO_RECORD_DEF, "" }, 548 { "nii", D6O_NII, DHCP6_OPTION_SPACE, OPT_RECORD_TYPE, false, 549 RECORD_DEF(CLIENT_NII_RECORDS), "" }, 550 { "aftr-name", D6O_AFTR_NAME, DHCP6_OPTION_SPACE, OPT_FQDN_TYPE, false, 551 NO_RECORD_DEF, "" }, 552 { "erp-local-domain-name", D6O_ERP_LOCAL_DOMAIN_NAME, DHCP6_OPTION_SPACE 553 , OPT_FQDN_TYPE, false, NO_RECORD_DEF, "" }, 554 { "rsoo", D6O_RSOO, DHCP6_OPTION_SPACE, OPT_EMPTY_TYPE, false, 555 NO_RECORD_DEF, "rsoo-opts" }, 556 { "pd-exclude", D6O_PD_EXCLUDE, DHCP6_OPTION_SPACE, OPT_IPV6_PREFIX_TYPE, 557 false, NO_RECORD_DEF, "" }, 558 { "rdnss-selection", D6O_RDNSS_SELECTION, DHCP6_OPTION_SPACE, 559 OPT_RECORD_TYPE, true, RECORD_DEF(V6_RDNSS_SELECT_RECORDS), "" }, 560 { "client-linklayer-addr", D6O_CLIENT_LINKLAYER_ADDR, DHCP6_OPTION_SPACE, 561 OPT_BINARY_TYPE, false, NO_RECORD_DEF, "" }, 562 { "link-address", D6O_LINK_ADDRESS, DHCP6_OPTION_SPACE, 563 OPT_IPV6_ADDRESS_TYPE, false, NO_RECORD_DEF, "" }, 564 { "solmax-rt", D6O_SOL_MAX_RT, DHCP6_OPTION_SPACE, OPT_UINT32_TYPE, false, 565 NO_RECORD_DEF, "" }, 566 { "inf-max-rt", D6O_INF_MAX_RT, DHCP6_OPTION_SPACE, OPT_UINT32_TYPE, false, 567 NO_RECORD_DEF, "" }, 568 { "dhcpv4-message", D6O_DHCPV4_MSG, DHCP6_OPTION_SPACE, OPT_BINARY_TYPE, 569 false, NO_RECORD_DEF, "" }, 570 { "dhcp4o6-server-addr", D6O_DHCPV4_O_DHCPV6_SERVER, DHCP6_OPTION_SPACE, 571 OPT_IPV6_ADDRESS_TYPE, true, NO_RECORD_DEF, "" }, 572 { "v6-captive-portal", D6O_V6_CAPTIVE_PORTAL, DHCP6_OPTION_SPACE, 573 OPT_STRING_TYPE, false, NO_RECORD_DEF, "" }, 574 { "relay-source-port", D6O_RELAY_SOURCE_PORT, DHCP6_OPTION_SPACE, 575 OPT_UINT16_TYPE, false, NO_RECORD_DEF, "" }, 576 { "ipv6-address-andsf", D6O_IPV6_ADDRESS_ANDSF, DHCP6_OPTION_SPACE, 577 OPT_IPV6_ADDRESS_TYPE, true, NO_RECORD_DEF, "" }, 578 { "s46-cont-mape", D6O_S46_CONT_MAPE, DHCP6_OPTION_SPACE, OPT_EMPTY_TYPE, 579 false, NO_RECORD_DEF, MAPE_V6_OPTION_SPACE }, 580 { "s46-cont-mapt", D6O_S46_CONT_MAPT, DHCP6_OPTION_SPACE, OPT_EMPTY_TYPE, 581 false, NO_RECORD_DEF, MAPT_V6_OPTION_SPACE }, 582 { "s46-cont-lw", D6O_S46_CONT_LW, DHCP6_OPTION_SPACE, OPT_EMPTY_TYPE, 583 false, NO_RECORD_DEF, LW_V6_OPTION_SPACE } 584 585 // @todo There is still a bunch of options for which we have to provide 586 // definitions but we don't do it because they are not really 587 // critical right now. 588 }; 589 590 /// Number of option definitions defined. 591 const int STANDARD_V6_OPTION_DEFINITIONS_SIZE = 592 sizeof(STANDARD_V6_OPTION_DEFINITIONS) / 593 sizeof(STANDARD_V6_OPTION_DEFINITIONS[0]); 594 595 /// @brief Definitions of vendor-specific DHCPv6 options, defined by ISC. 596 /// 4o6-* options are used for inter-process communication. For details, see 597 /// https://gitlab.isc.org/isc-projects/kea/wikis/designs/dhcpv4o6-design 598 /// 599 /// @todo: As those options are defined by ISC, they do not belong in std_option_defs.h. 600 /// We need to move them to a separate file, e.g. isc_option_defs.h 601 const OptionDefParams ISC_V6_OPTION_DEFINITIONS[] = { 602 { "4o6-interface", ISC_V6_4O6_INTERFACE, ISC_V6_OPTION_SPACE, 603 OPT_STRING_TYPE, false, NO_RECORD_DEF, "" }, 604 { "4o6-source-address", ISC_V6_4O6_SRC_ADDRESS, ISC_V6_OPTION_SPACE, 605 OPT_IPV6_ADDRESS_TYPE, false, NO_RECORD_DEF, "" }, 606 { "4o6-source-port", ISC_V6_4O6_SRC_PORT, ISC_V6_OPTION_SPACE, 607 OPT_UINT16_TYPE, false, NO_RECORD_DEF, "" } 608 }; 609 610 const int ISC_V6_OPTION_DEFINITIONS_SIZE = 611 sizeof(ISC_V6_OPTION_DEFINITIONS) / 612 sizeof(ISC_V6_OPTION_DEFINITIONS[0]); 613 614 /// @brief MAPE option definitions 615 const OptionDefParams MAPE_V6_OPTION_DEFINITIONS[] = { 616 { "s46-br", D6O_S46_BR, MAPE_V6_OPTION_SPACE, OPT_IPV6_ADDRESS_TYPE, false, 617 NO_RECORD_DEF, "" }, 618 { "s46-rule", D6O_S46_RULE, MAPE_V6_OPTION_SPACE, OPT_RECORD_TYPE, false, 619 RECORD_DEF(S46_RULE), V4V6_RULE_OPTION_SPACE } 620 }; 621 622 const int MAPE_V6_OPTION_DEFINITIONS_SIZE = 623 sizeof(MAPE_V6_OPTION_DEFINITIONS) / 624 sizeof(MAPE_V6_OPTION_DEFINITIONS[0]); 625 626 /// @brief MAPT option definitions 627 const OptionDefParams MAPT_V6_OPTION_DEFINITIONS[] = { 628 { "s46-rule", D6O_S46_RULE, MAPT_V6_OPTION_SPACE, OPT_RECORD_TYPE, false, 629 RECORD_DEF(S46_RULE), V4V6_RULE_OPTION_SPACE }, 630 { "s46-dmr", D6O_S46_DMR, MAPT_V6_OPTION_SPACE, OPT_IPV6_PREFIX_TYPE, 631 false, NO_RECORD_DEF, "" } 632 }; 633 634 const int MAPT_V6_OPTION_DEFINITIONS_SIZE = 635 sizeof(MAPT_V6_OPTION_DEFINITIONS) / 636 sizeof(MAPT_V6_OPTION_DEFINITIONS[0]); 637 638 /// @brief LW option definitions 639 const OptionDefParams LW_V6_OPTION_DEFINITIONS[] = { 640 { "s46-br", D6O_S46_BR, LW_V6_OPTION_SPACE, OPT_IPV6_ADDRESS_TYPE, false, 641 NO_RECORD_DEF, "" }, 642 { "s46-v4v6bind", D6O_S46_V4V6BIND, LW_V6_OPTION_SPACE, OPT_RECORD_TYPE, 643 false, RECORD_DEF(S46_V4V6BIND), V4V6_BIND_OPTION_SPACE } 644 }; 645 646 const int LW_V6_OPTION_DEFINITIONS_SIZE = 647 sizeof(LW_V6_OPTION_DEFINITIONS) / 648 sizeof(LW_V6_OPTION_DEFINITIONS[0]); 649 650 /// @brief Rule option definitions 651 const OptionDefParams V4V6_RULE_OPTION_DEFINITIONS[] = { 652 { "s46-portparams", D6O_S46_PORTPARAMS, V4V6_RULE_OPTION_SPACE, 653 OPT_RECORD_TYPE, false, RECORD_DEF(S46_PORTPARAMS), "" } 654 }; 655 656 const int V4V6_RULE_OPTION_DEFINITIONS_SIZE = 657 sizeof(V4V6_RULE_OPTION_DEFINITIONS) / 658 sizeof(V4V6_RULE_OPTION_DEFINITIONS[0]); 659 660 /// @brief Bind option definitions 661 const OptionDefParams V4V6_BIND_OPTION_DEFINITIONS[] = { 662 { "s46-portparams", D6O_S46_PORTPARAMS, V4V6_BIND_OPTION_SPACE, 663 OPT_RECORD_TYPE, false, RECORD_DEF(S46_PORTPARAMS), "" } 664 }; 665 666 const int V4V6_BIND_OPTION_DEFINITIONS_SIZE = 667 sizeof(V4V6_BIND_OPTION_DEFINITIONS) / 668 sizeof(V4V6_BIND_OPTION_DEFINITIONS[0]); 669 670 } // namespace 671 672 } // namespace dhcp 673 } // namespace isc 674 675 #endif // STD_OPTION_DEFS_H 676