std_option_defs.h 17.5 KB
Newer Older
1
// Copyright (C) 2012-2015 Internet Systems Consortium, Inc. ("ISC")
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
//
// Permission to use, copy, modify, and/or distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
// copyright notice and this permission notice appear in all copies.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
// AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
// PERFORMANCE OF THIS SOFTWARE.

#ifndef STD_OPTION_DEFS_H
#define STD_OPTION_DEFS_H

#include <dhcp/option_data_types.h>
19 20
#include <dhcp/dhcp4.h>
#include <dhcp/dhcp6.h>
21

22 23 24
namespace isc {
namespace dhcp {

25 26 27 28 29 30 31 32
namespace {

/// @brief Declare an array holding parameters used to create instance
/// of a definition for option comprising a record of data fields.
///
/// @param name name of the array being declared.
/// @param types data types of fields that belong to the record.
#ifndef RECORD_DECL
33
#define RECORD_DECL(name, types...) const OptionDataType name[] = { types }
34 35 36 37 38 39 40 41 42 43
#endif

/// @brief A pair of values: one pointing to the array holding types of
/// data fields belonging to the record, and size of this array.
///
/// @param name name of the array holding data fields' types.
#ifndef RECORD_DEF
#define RECORD_DEF(name) name, sizeof(name) / sizeof(name[0])
#endif

44 45 46 47
#ifndef NO_RECORD_DEF
#define NO_RECORD_DEF 0, 0
#endif

48 49
/// @brief Parameters being used to make up an option definition.
struct OptionDefParams {
50 51 52 53 54 55
    const char* name;              // option name
    uint16_t code;                 // option code
    OptionDataType type;           // data type
    bool array;                    // is array
    const OptionDataType* records; // record fields
    size_t records_size;           // number of fields in a record
56 57
    const char* encapsulates;      // option space encapsulated by
                                   // the particular option.
58 59
};

60 61 62 63 64 65 66 67
// fqdn option record fields.
//
// Note that the flags field indicates the type of domain
// name encoding. There is a choice between deprecated
// ASCII encoding and compressed encoding described in
// RFC 1035, section 3.1. The latter could be handled
// by OPT_FQDN_TYPE but we can't use it here because
// clients may request ASCII encoding.
68 69
RECORD_DECL(FQDN_RECORDS, OPT_UINT8_TYPE, OPT_UINT8_TYPE, OPT_UINT8_TYPE,
            OPT_FQDN_TYPE);
70

71 72 73 74 75
// V-I Vendor Class record fields.
//
// Opaque data is represented here by the binary data field.
RECORD_DECL(VIVCO_RECORDS, OPT_UINT32_TYPE, OPT_BINARY_TYPE);

76
/// @brief Definitions of standard DHCPv4 options.
77
const OptionDefParams OPTION_DEF_PARAMS4[] = {
78
    { "subnet-mask", DHO_SUBNET_MASK, OPT_IPV4_ADDRESS_TYPE, false, NO_RECORD_DEF, "" },
79
    { "time-offset", DHO_TIME_OFFSET, OPT_INT32_TYPE, false, NO_RECORD_DEF, "" },
80 81
    { "routers", DHO_ROUTERS, OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" },
    { "time-servers", DHO_TIME_SERVERS, OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" },
82
    { "name-servers", DHO_NAME_SERVERS, OPT_IPV4_ADDRESS_TYPE,
83
      false, NO_RECORD_DEF, "" },
84
    { "domain-name-servers", DHO_DOMAIN_NAME_SERVERS,
85 86
      OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" },
    { "log-servers", DHO_LOG_SERVERS, OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" },
87
    { "cookie-servers", DHO_COOKIE_SERVERS, OPT_IPV4_ADDRESS_TYPE,
88 89 90
      true, NO_RECORD_DEF, "" },
    { "lpr-servers", DHO_LPR_SERVERS, OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" },
    { "impress-servers", DHO_IMPRESS_SERVERS, OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" },
91
    { "resource-location-servers", DHO_RESOURCE_LOCATION_SERVERS,
92 93 94 95
      OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" },
    { "host-name", DHO_HOST_NAME, OPT_STRING_TYPE, false, NO_RECORD_DEF, "" },
    { "boot-size", DHO_BOOT_SIZE, OPT_UINT16_TYPE, false, NO_RECORD_DEF, "" },
    { "merit-dump", DHO_MERIT_DUMP, OPT_STRING_TYPE, false, NO_RECORD_DEF, "" },
96
    { "domain-name", DHO_DOMAIN_NAME, OPT_STRING_TYPE, false, NO_RECORD_DEF, "" },
97 98
    { "swap-server", DHO_SWAP_SERVER, OPT_IPV4_ADDRESS_TYPE, false, NO_RECORD_DEF, "" },
    { "root-path", DHO_ROOT_PATH, OPT_STRING_TYPE, false, NO_RECORD_DEF, "" },
99
    { "extensions-path", DHO_EXTENSIONS_PATH, OPT_STRING_TYPE,
100 101
      false, NO_RECORD_DEF, "" },
    { "ip-forwarding", DHO_IP_FORWARDING, OPT_BOOLEAN_TYPE, false, NO_RECORD_DEF, "" },
102
    { "non-local-source-routing", DHO_NON_LOCAL_SOURCE_ROUTING,
103 104
      OPT_BOOLEAN_TYPE, false, NO_RECORD_DEF, "" },
    { "policy-filter", DHO_POLICY_FILTER, OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" },
105
    { "max-dgram-reassembly", DHO_MAX_DGRAM_REASSEMBLY,
106 107
      OPT_UINT16_TYPE, false, NO_RECORD_DEF, "" },
    { "default-ip-ttl", DHO_DEFAULT_IP_TTL, OPT_UINT8_TYPE, false, NO_RECORD_DEF, "" },
108
    { "path-mtu-aging-timeout", DHO_PATH_MTU_AGING_TIMEOUT,
109
      OPT_UINT32_TYPE, false, NO_RECORD_DEF, "" },
110
    { "path-mtu-plateau-table", DHO_PATH_MTU_PLATEAU_TABLE,
111 112
      OPT_UINT16_TYPE, true, NO_RECORD_DEF, "" },
    { "interface-mtu", DHO_INTERFACE_MTU, OPT_UINT16_TYPE, false, NO_RECORD_DEF, "" },
113
    { "all-subnets-local", DHO_ALL_SUBNETS_LOCAL,
114
      OPT_BOOLEAN_TYPE, false, NO_RECORD_DEF, "" },
115
    { "broadcast-address", DHO_BROADCAST_ADDRESS,
116
      OPT_IPV4_ADDRESS_TYPE, false, NO_RECORD_DEF, "" },
117
    { "perform-mask-discovery", DHO_PERFORM_MASK_DISCOVERY,
118 119
      OPT_BOOLEAN_TYPE, false, NO_RECORD_DEF, "" },
    { "mask-supplier", DHO_MASK_SUPPLIER, OPT_BOOLEAN_TYPE, false, NO_RECORD_DEF, "" },
120
    { "router-discovery", DHO_ROUTER_DISCOVERY,
121
      OPT_BOOLEAN_TYPE, false, NO_RECORD_DEF, "" },
122
    { "router-solicitation-address", DHO_ROUTER_SOLICITATION_ADDRESS,
123
      OPT_IPV4_ADDRESS_TYPE, false, NO_RECORD_DEF, "" },
124
    { "static-routes", DHO_STATIC_ROUTES,
125
      OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" },
126
    { "trailer-encapsulation", DHO_TRAILER_ENCAPSULATION,
127
      OPT_BOOLEAN_TYPE, false, NO_RECORD_DEF, "" },
128
    { "arp-cache-timeout", DHO_ARP_CACHE_TIMEOUT,
129
      OPT_UINT32_TYPE, false, NO_RECORD_DEF, "" },
130
    { "ieee802-3-encapsulation", DHO_IEEE802_3_ENCAPSULATION,
131 132
      OPT_BOOLEAN_TYPE, false, NO_RECORD_DEF, "" },
    { "default-tcp-ttl", DHO_DEFAULT_TCP_TTL, OPT_UINT8_TYPE, false, NO_RECORD_DEF, "" },
133
    { "tcp-keepalive-interval", DHO_TCP_KEEPALIVE_INTERVAL,
134
      OPT_UINT32_TYPE, false, NO_RECORD_DEF, "" },
135
    { "tcp-keepalive-garbage", DHO_TCP_KEEPALIVE_GARBAGE,
136 137 138 139
      OPT_BOOLEAN_TYPE, false, NO_RECORD_DEF, "" },
    { "nis-domain", DHO_NIS_DOMAIN, OPT_STRING_TYPE, false, NO_RECORD_DEF, "" },
    { "nis-servers", DHO_NIS_SERVERS, OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" },
    { "ntp-servers", DHO_NTP_SERVERS, OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" },
140
    { "vendor-encapsulated-options", DHO_VENDOR_ENCAPSULATED_OPTIONS,
141
      OPT_EMPTY_TYPE, false, NO_RECORD_DEF, "vendor-encapsulated-options-space" },
142
    { "netbios-name-servers", DHO_NETBIOS_NAME_SERVERS,
143
      OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" },
144
    { "netbios-dd-server", DHO_NETBIOS_DD_SERVER,
145
      OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" },
146
    { "netbios-node-type", DHO_NETBIOS_NODE_TYPE,
147 148 149
      OPT_UINT8_TYPE, false, NO_RECORD_DEF, "" },
    { "netbios-scope", DHO_NETBIOS_SCOPE, OPT_STRING_TYPE, false, NO_RECORD_DEF, "" },
    { "font-servers", DHO_FONT_SERVERS, OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" },
150
    { "x-display-manager", DHO_X_DISPLAY_MANAGER,
151
      OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" },
152
    { "dhcp-requested-address", DHO_DHCP_REQUESTED_ADDRESS,
153 154
      OPT_IPV4_ADDRESS_TYPE, false, NO_RECORD_DEF, "" },
    { "dhcp-lease-time", DHO_DHCP_LEASE_TIME, OPT_UINT32_TYPE, false, NO_RECORD_DEF, "" },
155
    { "dhcp-option-overload", DHO_DHCP_OPTION_OVERLOAD,
156 157
      OPT_UINT8_TYPE, false, NO_RECORD_DEF, "" },
    { "dhcp-message-type", DHO_DHCP_MESSAGE_TYPE, OPT_UINT8_TYPE, false, NO_RECORD_DEF, "" },
158
    { "dhcp-server-identifier", DHO_DHCP_SERVER_IDENTIFIER,
159
      OPT_IPV4_ADDRESS_TYPE, false, NO_RECORD_DEF, "" },
160
    { "dhcp-parameter-request-list", DHO_DHCP_PARAMETER_REQUEST_LIST,
161 162
      OPT_UINT8_TYPE, true, NO_RECORD_DEF, "" },
    { "dhcp-message", DHO_DHCP_MESSAGE, OPT_STRING_TYPE, false, NO_RECORD_DEF, "" },
163
    { "dhcp-max-message-size", DHO_DHCP_MAX_MESSAGE_SIZE,
164 165
      OPT_UINT16_TYPE, false, NO_RECORD_DEF, "" },
    { "dhcp-renewal-time", DHO_DHCP_RENEWAL_TIME, OPT_UINT32_TYPE, false, NO_RECORD_DEF, "" },
166
    { "dhcp-rebinding-time", DHO_DHCP_REBINDING_TIME,
167
      OPT_UINT32_TYPE, false, NO_RECORD_DEF, "" },
168
    { "vendor-class-identifier", DHO_VENDOR_CLASS_IDENTIFIER,
169
      OPT_STRING_TYPE, false, NO_RECORD_DEF, "" },
170
    { "dhcp-client-identifier", DHO_DHCP_CLIENT_IDENTIFIER,
171 172 173
      OPT_BINARY_TYPE, false, NO_RECORD_DEF, "" },
    { "nwip-domain-name", DHO_NWIP_DOMAIN_NAME, OPT_STRING_TYPE, false, NO_RECORD_DEF, "" },
    { "nwip-suboptions", DHO_NWIP_SUBOPTIONS, OPT_BINARY_TYPE, false, NO_RECORD_DEF, "" },
174 175 176 177
    { "tftp-server-name", DHO_TFTP_SERVER_NAME, OPT_STRING_TYPE, false,
      NO_RECORD_DEF, "" },
    { "boot-file-name", DHO_BOOT_FILE_NAME, OPT_STRING_TYPE, false,
      NO_RECORD_DEF, "" },
178 179
    { "user-class", DHO_USER_CLASS, OPT_BINARY_TYPE, false, NO_RECORD_DEF, "" },
    { "fqdn", DHO_FQDN, OPT_RECORD_TYPE, false, RECORD_DEF(FQDN_RECORDS), "" },
180
    { "dhcp-agent-options", DHO_DHCP_AGENT_OPTIONS,
181
      OPT_EMPTY_TYPE, false, NO_RECORD_DEF, "dhcp-agent-options-space" },
182 183 184 185 186 187
    // Unfortunatelly the AUTHENTICATE option contains a 64-bit
    // data field called 'replay-detection' that can't be added
    // as a record field to a custom option. Also, there is no
    // dedicated option class to handle it so we simply return
    // binary option type for now.
    // @todo implement a class to handle AUTH option.
188
    { "authenticate", DHO_AUTHENTICATE, OPT_BINARY_TYPE, false, NO_RECORD_DEF, "" },
189
    { "client-last-transaction-time", DHO_CLIENT_LAST_TRANSACTION_TIME,
190 191
      OPT_UINT32_TYPE, false, NO_RECORD_DEF, "" },
    { "associated-ip", DHO_ASSOCIATED_IP, OPT_IPV4_ADDRESS_TYPE, true, NO_RECORD_DEF, "" },
192
    { "subnet-selection", DHO_SUBNET_SELECTION,
193
      OPT_IPV4_ADDRESS_TYPE, false, NO_RECORD_DEF, "" },
194 195 196 197 198
    // The following options need a special encoding of data
    // being carried by them. Therefore, there is no way they can
    // be handled by OptionCustom. We may need to implement
    // dedicated classes to handle them. Until that happens
    // let's treat them as 'binary' options.
199
    { "domain-search", DHO_DOMAIN_SEARCH, OPT_BINARY_TYPE, false, NO_RECORD_DEF, "" },
200 201
    { "vivco-suboptions", DHO_VIVCO_SUBOPTIONS, OPT_RECORD_TYPE,
      false, RECORD_DEF(VIVCO_RECORDS), "" },
202
    { "vivso-suboptions", DHO_VIVSO_SUBOPTIONS, OPT_BINARY_TYPE,
203
      false, NO_RECORD_DEF, "" }
204 205 206 207 208 209 210 211 212 213 214

        // @todo add definitions for all remaning options.
};

/// Number of option definitions defined.
const int OPTION_DEF_PARAMS_SIZE4  =
    sizeof(OPTION_DEF_PARAMS4) / sizeof(OPTION_DEF_PARAMS4[0]);


/// Start Definition of DHCPv6 options

215
// client-fqdn
216
RECORD_DECL(CLIENT_FQDN_RECORDS, OPT_UINT8_TYPE, OPT_FQDN_TYPE);
217
// geoconf-civic
218
RECORD_DECL(GEOCONF_CIVIC_RECORDS, OPT_UINT8_TYPE, OPT_UINT16_TYPE,
219 220
            OPT_BINARY_TYPE);
// iaddr
221
RECORD_DECL(IAADDR_RECORDS, OPT_IPV6_ADDRESS_TYPE, OPT_UINT32_TYPE,
222 223
            OPT_UINT32_TYPE);
// ia-na
224
RECORD_DECL(IA_NA_RECORDS, OPT_UINT32_TYPE, OPT_UINT32_TYPE, OPT_UINT32_TYPE);
225
// ia-pd
226
RECORD_DECL(IA_PD_RECORDS, OPT_UINT32_TYPE, OPT_UINT32_TYPE, OPT_UINT32_TYPE);
227
// ia-prefix
228
RECORD_DECL(IA_PREFIX_RECORDS, OPT_UINT32_TYPE, OPT_UINT32_TYPE,
229
            OPT_UINT8_TYPE, OPT_IPV6_ADDRESS_TYPE);
230
// lq-query
231
RECORD_DECL(LQ_QUERY_RECORDS, OPT_UINT8_TYPE, OPT_IPV6_ADDRESS_TYPE);
232
// lq-relay-data
233
RECORD_DECL(LQ_RELAY_DATA_RECORDS, OPT_IPV6_ADDRESS_TYPE, OPT_BINARY_TYPE);
234
// remote-id
235
RECORD_DECL(REMOTE_ID_RECORDS, OPT_UINT32_TYPE, OPT_BINARY_TYPE);
236
// status-code
237
RECORD_DECL(STATUS_CODE_RECORDS, OPT_UINT16_TYPE, OPT_STRING_TYPE);
238
// vendor-class
239
RECORD_DECL(VENDOR_CLASS_RECORDS, OPT_UINT32_TYPE, OPT_BINARY_TYPE);
240

241
/// Standard DHCPv6 option definitions.
242 243 244 245 246 247 248 249 250
///
/// @warning in this array, the initializers are provided for all
/// OptionDefParams struct's members despite initializers for
/// 'records' and 'record_size' could be ommited for entries for
/// which 'type' does not equal to OPT_RECORD_TYPE. If initializers
/// are ommitted the corresponding values should default to 0.
/// This however does not work on Solaris (GCC) which issues a
/// warning about lack of initializers for some struct members
/// causing build to fail.
251
const OptionDefParams OPTION_DEF_PARAMS6[] = {
252 253 254 255 256 257 258 259 260
    { "clientid", D6O_CLIENTID, OPT_BINARY_TYPE, false, NO_RECORD_DEF, "" },
    { "serverid", D6O_SERVERID, OPT_BINARY_TYPE, false, NO_RECORD_DEF, "" },
    { "ia-na", D6O_IA_NA, OPT_RECORD_TYPE, false, RECORD_DEF(IA_NA_RECORDS), "" },
    { "ia-ta", D6O_IA_TA, OPT_UINT32_TYPE, false, NO_RECORD_DEF, "" },
    { "iaaddr", D6O_IAADDR, OPT_RECORD_TYPE, false, RECORD_DEF(IAADDR_RECORDS), "" },
    { "oro", D6O_ORO, OPT_UINT16_TYPE, true, NO_RECORD_DEF, "" },
    { "preference", D6O_PREFERENCE, OPT_UINT8_TYPE, false, NO_RECORD_DEF, "" },
    { "elapsed-time", D6O_ELAPSED_TIME, OPT_UINT16_TYPE, false, NO_RECORD_DEF, "" },
    { "relay-msg", D6O_RELAY_MSG, OPT_BINARY_TYPE, false, NO_RECORD_DEF, "" },
261 262 263 264 265 266
    // Unfortunatelly the AUTH option contains a 64-bit data field
    // called 'replay-detection' that can't be added as a record
    // field to a custom option. Also, there is no dedicated
    // option class to handle it so we simply return binary
    // option type for now.
    // @todo implement a class to handle AUTH option.
267 268
    { "auth", D6O_AUTH, OPT_BINARY_TYPE, false, NO_RECORD_DEF, "" },
    { "unicast", D6O_UNICAST, OPT_IPV6_ADDRESS_TYPE, false, NO_RECORD_DEF, "" },
269
    { "status-code", D6O_STATUS_CODE, OPT_RECORD_TYPE, false,
270 271 272
      RECORD_DEF(STATUS_CODE_RECORDS), "" },
    { "rapid-commit", D6O_RAPID_COMMIT, OPT_EMPTY_TYPE, false, NO_RECORD_DEF, "" },
    { "user-class", D6O_USER_CLASS, OPT_BINARY_TYPE, false, NO_RECORD_DEF, "" },
273
    { "vendor-class", D6O_VENDOR_CLASS, OPT_RECORD_TYPE, false,
274 275 276 277 278
      RECORD_DEF(VENDOR_CLASS_RECORDS), "" },
    { "vendor-opts", D6O_VENDOR_OPTS, OPT_UINT32_TYPE, false,
      NO_RECORD_DEF, "vendor-opts-space" },
    { "interface-id", D6O_INTERFACE_ID, OPT_BINARY_TYPE, false, NO_RECORD_DEF, "" },
    { "reconf-msg", D6O_RECONF_MSG, OPT_UINT8_TYPE, false, NO_RECORD_DEF, "" },
279
    { "reconf-accept", D6O_RECONF_ACCEPT, OPT_EMPTY_TYPE, false,
280
      NO_RECORD_DEF, "" },
281
    { "sip-server-dns", D6O_SIP_SERVERS_DNS, OPT_FQDN_TYPE, true,
282
      NO_RECORD_DEF, "" },
283
    { "sip-server-addr", D6O_SIP_SERVERS_ADDR, OPT_IPV6_ADDRESS_TYPE, true,
284
      NO_RECORD_DEF, "" },
285
    { "dns-servers", D6O_NAME_SERVERS, OPT_IPV6_ADDRESS_TYPE, true,
286 287 288
      NO_RECORD_DEF, "" },
    { "domain-search", D6O_DOMAIN_SEARCH, OPT_FQDN_TYPE, true, NO_RECORD_DEF, "" },
    { "ia-pd", D6O_IA_PD, OPT_RECORD_TYPE, false, RECORD_DEF(IA_PD_RECORDS), "" },
289
    { "iaprefix", D6O_IAPREFIX, OPT_RECORD_TYPE, false,
290
      RECORD_DEF(IA_PREFIX_RECORDS), "" },
291
    { "nis-servers", D6O_NIS_SERVERS, OPT_IPV6_ADDRESS_TYPE, true,
292
      NO_RECORD_DEF, "" },
293
    { "nisp-servers", D6O_NISP_SERVERS, OPT_IPV6_ADDRESS_TYPE, true,
294
      NO_RECORD_DEF, "" },
295
    { "nis-domain-name", D6O_NIS_DOMAIN_NAME, OPT_FQDN_TYPE, true,
296
      NO_RECORD_DEF, "" },
297
    { "nisp-domain-name", D6O_NISP_DOMAIN_NAME, OPT_FQDN_TYPE, true,
298
      NO_RECORD_DEF, "" },
299
    { "sntp-servers", D6O_SNTP_SERVERS, OPT_IPV6_ADDRESS_TYPE, true,
300
      NO_RECORD_DEF, "" },
301
    { "information-refresh-time", D6O_INFORMATION_REFRESH_TIME,
302
      OPT_UINT32_TYPE, false, NO_RECORD_DEF, "" },
303
    { "bcmcs-server-dns", D6O_BCMCS_SERVER_D, OPT_FQDN_TYPE, true,
304
      NO_RECORD_DEF, "" },
305
    { "bcmcs-server-addr", D6O_BCMCS_SERVER_A, OPT_IPV6_ADDRESS_TYPE, true,
306
      NO_RECORD_DEF, "" },
307
    { "geoconf-civic", D6O_GEOCONF_CIVIC, OPT_RECORD_TYPE, false,
308
      RECORD_DEF(GEOCONF_CIVIC_RECORDS), "" },
309
    { "remote-id", D6O_REMOTE_ID, OPT_RECORD_TYPE, false,
310
      RECORD_DEF(REMOTE_ID_RECORDS), "" },
311
    { "subscriber-id", D6O_SUBSCRIBER_ID, OPT_BINARY_TYPE, false,
312
      NO_RECORD_DEF, "" },
313
    { "client-fqdn", D6O_CLIENT_FQDN, OPT_RECORD_TYPE, false,
314
      RECORD_DEF(CLIENT_FQDN_RECORDS), "" },
315
    { "pana-agent", D6O_PANA_AGENT, OPT_IPV6_ADDRESS_TYPE, true,
316
      NO_RECORD_DEF, "" },
317
    { "new-posix-timezone", D6O_NEW_POSIX_TIMEZONE, OPT_STRING_TYPE, false,
318
      NO_RECORD_DEF, "" },
319
    { "new-tzdb-timezone", D6O_NEW_TZDB_TIMEZONE, OPT_STRING_TYPE, false,
320 321
      NO_RECORD_DEF, "" },
    { "ero", D6O_ERO, OPT_UINT16_TYPE, true, NO_RECORD_DEF, "" },
322
    { "lq-query", D6O_LQ_QUERY, OPT_RECORD_TYPE, false,
323 324 325
      RECORD_DEF(LQ_QUERY_RECORDS), "" },
    { "client-data", D6O_CLIENT_DATA, OPT_EMPTY_TYPE, false, NO_RECORD_DEF, "" },
    { "clt-time", D6O_CLT_TIME, OPT_UINT32_TYPE, false, NO_RECORD_DEF, "" },
326
    { "lq-relay-data", D6O_LQ_RELAY_DATA, OPT_RECORD_TYPE, false,
327
      RECORD_DEF(LQ_RELAY_DATA_RECORDS), "" },
328
    { "lq-client-link", D6O_LQ_CLIENT_LINK, OPT_IPV6_ADDRESS_TYPE, true,
329
      NO_RECORD_DEF, "" },
330
    { "rsoo", D6O_RSOO, OPT_EMPTY_TYPE, false, NO_RECORD_DEF, "dhcp4" },
331 332
    { "client-linklayer-addr", D6O_CLIENT_LINKLAYER_ADDR, OPT_BINARY_TYPE, false,
        NO_RECORD_DEF, "" }
333 334 335 336 337 338

    // @todo There is still a bunch of options for which we have to provide
    // definitions but we don't do it because they are not really
    // critical right now.
};

339
/// Number of option definitions defined.
340 341 342
const int OPTION_DEF_PARAMS_SIZE6  =
    sizeof(OPTION_DEF_PARAMS6) / sizeof(OPTION_DEF_PARAMS6[0]);

343 344 345 346
} // unnamed namespace

} // namespace dhcp
} // namespace isc
347 348

#endif // STD_OPTION_DEFS_H