diff options
author | Thomas Markwalder <tmark@isc.org> | 2024-11-19 21:23:08 +0100 |
---|---|---|
committer | Thomas Markwalder <tmark@isc.org> | 2024-12-16 16:15:09 +0100 |
commit | f414f9aa2d7d1743c2553445a828fdfdc13a1b3d (patch) | |
tree | 9caaba2c09c2268a859472cbd272133e7f7fa810 | |
parent | [#3691] bump version in configure.ac (diff) | |
download | kea-f414f9aa2d7d1743c2553445a828fdfdc13a1b3d.tar.xz kea-f414f9aa2d7d1743c2553445a828fdfdc13a1b3d.zip |
[#2819] kea-dhcp4 supports ddns-ttl, min, and max
Added support for ddns-ttl,ddns-ttl-min, and ddsn-ttl-max
to global,shared-network, and subnet for kea-dhcp4
Changes to be committed:
modified: doc/examples/kea4/all-keys.json
modified: src/bin/dhcp4/dhcp4_lexer.cc
modified: src/bin/dhcp4/dhcp4_lexer.ll
modified: src/bin/dhcp4/dhcp4_parser.cc
modified: src/bin/dhcp4/dhcp4_parser.h
modified: src/bin/dhcp4/dhcp4_parser.yy
modified: src/bin/dhcp4/json_config_parser.cc
modified: src/bin/dhcp4/tests/config_parser_unittest.cc
modified: src/bin/dhcp4/tests/fqdn_unittest.cc
modified: src/bin/dhcp4/tests/get_config_unittest.cc
modified: src/bin/dhcp6/json_config_parser.cc
modified: src/lib/dhcpsrv/cb_ctl_dhcp4.cc
modified: src/lib/dhcpsrv/cb_ctl_dhcp6.cc
modified: src/lib/dhcpsrv/cfg_globals.cc
modified: src/lib/dhcpsrv/cfg_globals.h
modified: src/lib/dhcpsrv/dhcpsrv_messages.cc
modified: src/lib/dhcpsrv/dhcpsrv_messages.h
modified: src/lib/dhcpsrv/dhcpsrv_messages.mes
modified: src/lib/dhcpsrv/ncr_generator.cc
modified: src/lib/dhcpsrv/ncr_generator.h
modified: src/lib/dhcpsrv/network.cc
modified: src/lib/dhcpsrv/network.h
modified: src/lib/dhcpsrv/parsers/base_network_parser.cc
modified: src/lib/dhcpsrv/parsers/simple_parser4.cc
modified: src/lib/dhcpsrv/parsers/simple_parser6.cc
modified: src/lib/dhcpsrv/srv_config.cc
modified: src/lib/dhcpsrv/srv_config.h
modified: src/lib/dhcpsrv/tests/dhcp_parsers_unittest.cc
modified: src/lib/dhcpsrv/tests/ncr_generator_unittest.cc
modified: src/lib/dhcpsrv/tests/network_unittest.cc
modified: src/lib/dhcpsrv/tests/shared_network_parser_unittest.cc
modified: src/lib/dhcpsrv/tests/srv_config_unittest.cc
modified: src/lib/util/str.cc
modified: src/lib/util/str.h
34 files changed, 6342 insertions, 4432 deletions
diff --git a/doc/examples/kea4/all-keys.json b/doc/examples/kea4/all-keys.json index 2bcab40a92..7b44101f0b 100644 --- a/doc/examples/kea4/all-keys.json +++ b/doc/examples/kea4/all-keys.json @@ -344,6 +344,17 @@ // to use for the DNS TTL. "ddns-ttl-percent": 0.75, + // When greater than 0 it will be used as the DNS TTL. Specified in seconds. + "ddns-ttl": 0, + + // When greater than 0 it used as the lower boundary for calculated DNS TTL values. + // Specified in seconds. + "ddns-ttl-min": 24000, + + // When greater than 0 it used as the upper boundary for calculated DNS TTL values. + // Specified in seconds. + "ddns-ttl-max": 64000, + // Time in seconds specifying how long a declined lease should be // excluded from DHCP assignments. The default value is 86400 (24 hours). "decline-probation-period": 86400, @@ -896,6 +907,15 @@ "ddns-ttl-percent": 0.65, // Shared-network level value. See description at the global level. + "ddns-ttl": 0, + + // Shared-network level value. See description at the global level. + "ddns-ttl-min": 10000, + + // Shared-network level value. See description at the global level. + "ddns-ttl-max": 20000, + + // Shared-network level value. See description at the global level. "hostname-char-replacement": "x", // Shared-network level value. See description at the global level. @@ -1036,6 +1056,15 @@ "ddns-ttl-percent": 0.55, // Subnet-level value. See description at the global level. + "ddns-ttl": 0, + + // Subnet-evel value. See description at the global level. + "ddns-ttl-min": 10000, + + // Subnet-level value. See description at the global level. + "ddns-ttl-max": 20000, + + // Subnet-level value. See description at the global level. "hostname-char-replacement": "x", // Subnet-level value. See description at the global level. diff --git a/src/bin/dhcp4/dhcp4_lexer.cc b/src/bin/dhcp4/dhcp4_lexer.cc index d002fc5b40..3e73a5846e 100644 --- a/src/bin/dhcp4/dhcp4_lexer.cc +++ b/src/bin/dhcp4/dhcp4_lexer.cc @@ -1,6 +1,6 @@ -#line 1 "dhcp4_lexer.cc" +#line 2 "dhcp4_lexer.cc" -#line 3 "dhcp4_lexer.cc" +#line 4 "dhcp4_lexer.cc" #define YY_INT_ALIGNED short int @@ -691,8 +691,8 @@ static void yynoreturn yy_fatal_error ( const char* msg ); /* %% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \ */\ (yy_c_buf_p) = yy_cp; /* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */ -#define YY_NUM_RULES 239 -#define YY_END_OF_BUFFER 240 +#define YY_NUM_RULES 242 +#define YY_END_OF_BUFFER 243 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -700,21 +700,21 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[2369] = +static const flex_int16_t yy_accept[2377] = { 0, - 232, 232, 0, 0, 0, 0, 0, 0, 0, 0, - 240, 238, 10, 11, 238, 1, 232, 229, 232, 232, - 238, 231, 230, 238, 238, 238, 238, 238, 225, 226, - 238, 238, 238, 227, 228, 5, 5, 5, 238, 238, - 238, 10, 11, 0, 0, 220, 0, 0, 0, 0, + 235, 235, 0, 0, 0, 0, 0, 0, 0, 0, + 243, 241, 10, 11, 241, 1, 235, 232, 235, 235, + 241, 234, 233, 241, 241, 241, 241, 241, 228, 229, + 241, 241, 241, 230, 231, 5, 5, 5, 241, 241, + 241, 10, 11, 0, 0, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 232, - 232, 0, 231, 232, 3, 2, 6, 0, 232, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 235, + 235, 0, 234, 235, 3, 2, 6, 0, 235, 0, 0, 0, 0, 0, 0, 4, 0, 0, 9, 0, - 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 223, 0, 0, 0, 0, + 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -724,21 +724,21 @@ static const flex_int16_t yy_accept[2369] = 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, - 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, + 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 237, 235, - 0, 234, 233, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 193, 0, 192, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 240, 238, + 0, 237, 236, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 196, 0, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -751,40 +751,40 @@ static const flex_int16_t yy_accept[2369] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, - 0, 0, 0, 0, 0, 236, 233, 0, 0, 0, - 0, 0, 0, 0, 194, 0, 0, 196, 0, 0, + 0, 0, 0, 0, 0, 239, 236, 0, 0, 0, + 0, 0, 0, 0, 197, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, - 0, 89, 0, 0, 0, 0, 0, 0, 129, 0, + 0, 0, 0, 0, 106, 0, 0, 0, 0, 0, + 0, 92, 0, 0, 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 38, 0, 0, 0, 162, 0, 0, 0, 0, + 0, 38, 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 93, 0, 0, 39, 0, 0, + 0, 0, 0, 0, 96, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 124, 0, 0, 35, 161, 0, 0, 36, 0, 0, + 127, 0, 0, 35, 164, 0, 0, 36, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 12, 198, 197, - 0, 0, 0, 0, 0, 139, 0, 0, 168, 0, + 0, 0, 0, 0, 0, 0, 0, 12, 201, 200, + 0, 0, 0, 0, 0, 142, 0, 0, 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, - 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 118, 0, + 0, 0, 0, 0, 0, 0, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 92, 0, 0, 0, 0, 169, - 0, 0, 0, 0, 140, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 135, 0, + 0, 0, 0, 0, 95, 0, 0, 0, 0, 172, + 0, 0, 0, 0, 143, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 176, 0, 7, 0, 0, - 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 179, 0, 7, 0, 0, + 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -792,176 +792,177 @@ static const flex_int16_t yy_accept[2369] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 171, 96, 0, 0, 0, 0, 0, 0, 0, + 0, 174, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 133, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 145, 110, 0, 0, 0, - 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 148, 113, 0, 0, 0, + 0, 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 118, 40, 94, 0, 0, 0, 0, 0, + 0, 0, 121, 40, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 83, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 180, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, - 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, + 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 119, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66, 0, 0, 0, 0, 0, 0, 0, 55, 0, + 0, 66, 0, 0, 0, 0, 0, 0, 0, 55, - 0, 0, 0, 131, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 181, 0, 0, 0, 170, 0, 0, 0, + 0, 0, 0, 0, 184, 0, 0, 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 185, 0, 0, 0, 183, 0, 0, 0, + 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 188, 0, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 172, 0, - 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 132, 0, 0, - 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 130, 0, 0, - 23, 0, 141, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 189, 0, 91, - - 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, - 144, 0, 0, 179, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, + 175, 0, 0, 0, 206, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, + 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 106, 107, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, - 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 133, 0, 0, 23, 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 192, 0, 94, 0, 0, 0, 0, 0, 89, + 0, 0, 0, 0, 147, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 109, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 207, 0, 0, 0, 87, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, - 0, 0, 0, 186, 0, 0, 184, 0, 0, 0, - 164, 166, 160, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, - 0, 195, 0, 0, 0, 0, 0, 0, 0, 123, + 0, 93, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, - - 0, 0, 0, 178, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 175, 0, 0, 0, 142, - 0, 15, 0, 0, 41, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 43, 62, 0, 0, 137, 0, - 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, - 95, 0, 0, 201, 0, 0, 0, 0, 0, 0, - 0, 206, 0, 109, 0, 0, 174, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, + 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 61, 0, 0, 0, 0, 0, 189, + 0, 0, 187, 0, 0, 0, 167, 169, 163, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, + 0, 0, 0, 0, 0, 0, 0, 198, 0, 0, + 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, + + 84, 0, 0, 0, 0, 0, 0, 156, 0, 0, + 0, 181, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 178, 0, 0, 0, 145, 0, 15, + 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 191, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 43, 62, 0, 0, 140, 0, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 54, 0, 98, 0, + 0, 204, 0, 0, 0, 0, 0, 0, 0, 209, + 0, 112, 0, 0, 177, 0, 216, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 173, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 125, 0, 0, 0, 44, - 0, 0, 0, 0, 0, 0, 167, 209, 0, 0, - 120, 31, 0, 0, 0, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - - 0, 204, 0, 182, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, - 28, 0, 0, 187, 0, 0, 0, 53, 0, 0, - 0, 218, 0, 0, 0, 112, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 165, 0, 0, 0, 0, 0, 0, - 0, 58, 0, 0, 0, 0, 0, 0, 108, 0, - 0, 0, 42, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 143, 0, 0, 0, 30, - - 0, 0, 0, 0, 0, 205, 0, 0, 0, 0, - 0, 154, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 21, 0, 0, 208, 0, - 85, 0, 0, 48, 0, 0, 0, 0, 202, 0, - 78, 0, 0, 200, 0, 32, 0, 0, 0, 0, - 0, 0, 0, 0, 82, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 151, 0, 0, - 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 51, 0, 49, 0, 0, 0, 0, + 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 128, 0, 0, 0, 44, 0, 0, + 0, 0, 0, 0, 170, 212, 0, 0, 123, 31, + 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 207, + 0, 185, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 29, 0, 0, 0, 0, 0, 28, 0, + 0, 190, 0, 0, 0, 53, 0, 0, 0, 221, + 0, 0, 0, 115, 114, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 168, 0, 0, 0, 0, 0, 0, 0, 58, + 0, 0, 0, 0, 0, 0, 111, 0, 0, 0, + 42, 162, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 45, 156, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, + 0, 0, 0, 146, 0, 0, 0, 30, 0, 0, + 0, 0, 0, 208, 0, 0, 0, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 190, 0, 0, 13, 0, 0, 0, 0, 0, 0, - 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 21, 0, 0, 211, 0, 88, 0, + 0, 48, 0, 0, 0, 0, 205, 0, 78, 0, + 0, 203, 0, 32, 0, 0, 0, 0, 0, 0, + 0, 0, 82, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 154, 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 177, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 150, 0, 60, - 59, 0, 20, 0, 0, 0, 0, 0, 0, 0, + 0, 51, 0, 49, 0, 0, 0, 0, 0, 45, + 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 193, 0, + 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, + 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 79, 0, 105, 0, 0, 0, 0, 0, 0, 0, + 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 153, 0, 60, 59, 0, + + 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, + 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 152, 0, + 0, 0, 0, 0, 0, 52, 0, 65, 0, 46, + 0, 103, 0, 0, 0, 0, 0, 0, 0, 222, + 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, + 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 149, 0, 0, 0, 0, 0, 0, 52, 0, 65, - 0, 46, 0, 100, 0, 0, 0, 0, 0, 0, - 0, 219, 0, 84, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, - 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, - - 0, 0, 0, 0, 0, 0, 217, 0, 0, 0, + 0, 0, 0, 0, 0, 81, 33, 0, 0, 0, + 74, 0, 0, 0, 0, 158, 0, 0, 0, 0, + 0, 0, 0, 214, 217, 0, 0, 124, 104, 0, + 0, 0, 0, 0, 0, 0, 80, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 81, 33, 0, - 0, 0, 74, 0, 0, 0, 0, 155, 0, 0, - 0, 0, 0, 0, 0, 211, 214, 0, 0, 121, - 101, 0, 0, 0, 0, 0, 0, 0, 80, 0, - 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 127, 147, 0, 0, 0, 0, 0, - 0, 152, 0, 0, 72, 0, 63, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, - - 0, 0, 0, 0, 0, 0, 146, 0, 0, 191, - 0, 216, 212, 0, 0, 0, 0, 0, 0, 0, + 0, 130, 150, 0, 0, 0, 0, 0, 0, 155, + 0, 0, 72, 0, 63, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 149, 0, 0, 194, 0, 219, + 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 71, 0, 0, 122, 0, 0, 0, 27, - 25, 0, 0, 0, 0, 76, 0, 0, 104, 0, - 0, 68, 0, 77, 0, 0, 215, 0, 0, 0, - 0, 0, 67, 0, 148, 26, 210, 0 + 71, 0, 0, 125, 0, 0, 0, 27, 25, 0, + 0, 0, 0, 76, 0, 0, 107, 0, 0, 68, + 0, 77, 0, 0, 218, 0, 0, 0, 0, 0, + 67, 0, 151, 26, 213, 0 } ; static const YY_CHAR yy_ec[256] = @@ -1008,91 +1009,91 @@ static const YY_CHAR yy_meta[77] = 1, 1, 1, 1, 1, 1 } ; -static const flex_int16_t yy_base[2377] = +static const flex_int16_t yy_base[2385] = { 0, 0, 75, 21, 28, 39, 47, 53, 61, 95, 103, - 2819, 2820, 31, 2815, 151, 0, 216, 2820, 223, 230, - 13, 237, 2820, 2795, 124, 17, 4, 34, 2820, 2820, - 23, 43, 64, 2820, 2820, 2820, 56, 2803, 2753, 0, - 2793, 106, 2810, 2, 274, 2820, 2749, 85, 90, 2755, + 2827, 2828, 31, 2823, 151, 0, 216, 2828, 223, 230, + 13, 237, 2828, 2803, 124, 17, 4, 34, 2828, 2828, + 23, 43, 64, 2828, 2828, 2828, 56, 2811, 2761, 0, + 2801, 106, 2818, 2, 274, 2828, 2757, 85, 90, 2763, 98, 77, 231, 235, 97, 200, 304, 229, 64, 300, - 218, 313, 219, 63, 257, 2757, 298, 67, 341, 242, - 210, 2740, 21, 333, 362, 343, 2759, 318, 0, 405, - 422, 436, 445, 450, 2820, 0, 2820, 464, 469, 228, - 232, 238, 260, 338, 319, 2820, 2756, 2800, 2820, 276, - - 2820, 442, 2787, 337, 250, 2753, 347, 17, 359, 2792, - 282, 372, 329, 364, 2796, 0, 506, 429, 2735, 2732, - 2732, 2735, 382, 2731, 345, 2739, 364, 2725, 2726, 2731, - 230, 2741, 2725, 2733, 2723, 2732, 425, 2738, 363, 79, - 430, 2718, 2774, 2778, 2721, 2714, 2770, 2707, 381, 2728, - 2728, 2722, 401, 2714, 2715, 2713, 2707, 429, 2718, 225, - 2703, 2702, 451, 2703, 340, 2715, 2696, 502, 433, 473, - 2717, 2714, 2715, 442, 2713, 2751, 2750, 473, 475, 2694, - 475, 2695, 490, 457, 2705, 2697, 2699, 0, 478, 505, - 513, 508, 508, 520, 2695, 2820, 2743, 525, 525, 2689, - - 511, 527, 544, 547, 2746, 550, 2745, 529, 2744, 2820, - 2820, 590, 2686, 560, 2699, 2691, 2689, 2677, 2688, 2692, - 2693, 2673, 2684, 2688, 2685, 2684, 518, 526, 2725, 2686, - 2667, 2664, 2672, 2667, 2677, 2677, 2668, 2664, 2676, 2676, - 2664, 2663, 2665, 2668, 2648, 2652, 2666, 2658, 2648, 2651, - 2665, 2820, 2650, 2659, 535, 2700, 2643, 2652, 2697, 2641, - 2651, 2654, 579, 2693, 2635, 2649, 2690, 558, 2632, 2646, - 2644, 2624, 2639, 531, 2636, 537, 2627, 2625, 2625, 2631, - 2622, 2620, 2682, 2635, 9, 2629, 539, 2636, 2631, 2614, - 2629, 2615, 2627, 2622, 2626, 2607, 2623, 2609, 2615, 2622, - - 439, 461, 2610, 2607, 2606, 581, 2605, 2600, 2614, 566, - 2613, 2659, 2592, 2614, 589, 387, 2594, 583, 2820, 2820, - 585, 2820, 2820, 2592, 563, 577, 592, 2643, 595, 2653, - 586, 597, 2820, 2652, 2820, 2646, 642, 2605, 581, 2582, - 574, 2603, 2642, 2599, 2582, 2599, 2638, 2595, 2578, 2584, - 2639, 2591, 2594, 2585, 2588, 2574, 2585, 2632, 2626, 2581, - 2578, 617, 2583, 2627, 2559, 2620, 2570, 2565, 2559, 2558, - 2560, 2563, 2613, 2567, 2611, 2554, 665, 666, 2568, 2553, - 2552, 2565, 2563, 2561, 2561, 2560, 2555, 2562, 2557, 2553, - 608, 2551, 2554, 2536, 2548, 2598, 581, 595, 2592, 2536, - - 2552, 2589, 2536, 2535, 2528, 2543, 2534, 2541, 2522, 2539, - 2534, 669, 2584, 2536, 2820, 2535, 618, 2526, 2524, 2536, - 617, 2511, 2512, 2525, 2515, 2507, 2568, 2510, 2524, 629, - 2510, 2522, 2521, 2520, 2516, 2514, 2559, 2516, 2515, 2514, - 2513, 2496, 2504, 2557, 2513, 2493, 2554, 2820, 2553, 2492, - 2491, 678, 2504, 2502, 2501, 2820, 2820, 2501, 2490, 2482, - 647, 2539, 2543, 2542, 2820, 2541, 635, 2820, 664, 723, - 2497, 649, 2539, 2482, 2477, 2536, 2487, 2529, 2479, 2481, - 636, 2471, 2479, 2467, 2820, 2472, 2465, 2477, 2480, 2467, - 2466, 2820, 652, 2468, 2465, 645, 2463, 2457, 2820, 2513, - - 2472, 2469, 2454, 2471, 2467, 2465, 2465, 2459, 693, 2449, - 2503, 2820, 2447, 2463, 2500, 2820, 2454, 2503, 2456, 2454, - 2452, 2453, 2437, 2446, 2491, 2439, 2438, 2433, 2432, 2486, - 2427, 648, 2446, 2420, 2427, 2443, 2480, 2820, 2427, 2423, - 702, 2421, 2476, 2429, 2428, 2422, 2414, 2414, 2413, 2427, - 2427, 2415, 2411, 2409, 2820, 2418, 2468, 2820, 2462, 2404, - 2403, 2408, 2463, 2416, 2410, 2404, 2413, 2458, 2452, 2396, - 2391, 2449, 2410, 2385, 2391, 694, 2405, 2398, 2402, 2385, - 2446, 2440, 2383, 2383, 2437, 2379, 2380, 2379, 2377, 2394, - 2820, 2390, 2430, 2820, 2820, 2378, 2376, 2820, 655, 2427, - - 2431, 2425, 2382, 2366, 2383, 2426, 715, 2820, 2820, 2820, - 704, 689, 688, 2363, 724, 2820, 2362, 2372, 2820, 2371, - 695, 2378, 2358, 2368, 2371, 2412, 2354, 711, 2353, 2363, - 2408, 2350, 2357, 2350, 2352, 2361, 2343, 2343, 2358, 2357, - 2341, 667, 2355, 2354, 2354, 2336, 2341, 2385, 2339, 2346, - 2340, 2388, 2329, 2329, 2343, 2343, 2341, 2341, 2820, 2326, - 2338, 2330, 2336, 2327, 2335, 2333, 2820, 2319, 2373, 2334, - 2316, 2328, 2320, 612, 2311, 2310, 2304, 2309, 2324, 2321, - 2322, 2301, 2311, 2317, 2363, 2308, 2299, 2300, 2302, 2297, - 2310, 2302, 2301, 691, 2349, 2297, 753, 2347, 2289, 2345, - - 2289, 2292, 2285, 2300, 2820, 2283, 2297, 2292, 2288, 2820, - 2336, 2285, 2292, 2333, 2820, 2275, 2289, 2292, 2277, 2272, - 2327, 2326, 2270, 2324, 2281, 2265, 2321, 2320, 2820, 2281, - 2261, 2275, 2274, 752, 2275, 2274, 2271, 2255, 2311, 2268, - 58, 246, 285, 324, 364, 2820, 563, 2820, 594, 661, - 2820, 718, 713, 712, 723, 739, 702, 700, 722, 712, + 218, 313, 219, 63, 257, 2765, 298, 67, 341, 242, + 210, 2748, 21, 333, 362, 343, 2767, 318, 0, 405, + 422, 436, 445, 450, 2828, 0, 2828, 464, 469, 228, + 232, 238, 260, 338, 319, 2828, 2764, 2808, 2828, 276, + + 2828, 442, 2795, 337, 250, 2761, 347, 17, 359, 2800, + 282, 372, 329, 364, 2804, 0, 506, 429, 2743, 2740, + 2740, 2743, 382, 2739, 345, 2747, 364, 2733, 2734, 2739, + 230, 2749, 2733, 2741, 2731, 2740, 425, 2746, 363, 79, + 430, 2726, 2782, 2786, 2729, 2722, 2778, 2715, 381, 2736, + 2736, 2730, 401, 2722, 2723, 2721, 2715, 429, 2726, 225, + 2711, 2710, 451, 2711, 340, 2723, 2704, 502, 433, 473, + 2725, 2722, 2723, 442, 2721, 2759, 2758, 473, 475, 2702, + 475, 2703, 490, 457, 2713, 2705, 2707, 0, 478, 505, + 513, 508, 508, 520, 2703, 2828, 2751, 525, 525, 2697, + + 511, 527, 544, 547, 2754, 550, 2753, 529, 2752, 2828, + 2828, 590, 2694, 560, 2707, 2699, 2697, 2685, 2696, 2700, + 2701, 2681, 2692, 2696, 2693, 2692, 518, 526, 2733, 2694, + 2675, 2672, 2680, 2675, 2685, 2685, 2676, 2672, 2684, 2684, + 2672, 2671, 2673, 2676, 2656, 2660, 2674, 2666, 2656, 2659, + 2673, 2828, 2658, 2667, 535, 2708, 2651, 2660, 2705, 2649, + 2659, 2662, 579, 2701, 2643, 2657, 2698, 558, 2640, 2654, + 2652, 2632, 2647, 531, 2644, 537, 2635, 2633, 2633, 2639, + 2630, 2628, 2690, 2643, 9, 2637, 539, 2644, 2639, 2622, + 2637, 2623, 2635, 2630, 2634, 2615, 2631, 2617, 2623, 2630, + + 439, 461, 2618, 2615, 2614, 581, 2613, 2608, 2622, 566, + 2621, 2667, 2600, 2622, 589, 387, 2602, 583, 2828, 2828, + 585, 2828, 2828, 2600, 563, 577, 592, 2651, 595, 2661, + 586, 597, 2828, 2660, 2828, 2654, 642, 2613, 581, 2590, + 574, 2611, 2650, 2607, 2590, 2607, 2646, 2603, 2586, 2592, + 2647, 2599, 2602, 2593, 2596, 2582, 2593, 2640, 2634, 2589, + 2586, 617, 2591, 2635, 2567, 2628, 2578, 2573, 2567, 2566, + 2568, 2571, 2621, 2575, 2619, 2562, 665, 666, 2576, 2561, + 2560, 2573, 2571, 2569, 2569, 2568, 2563, 2570, 2565, 2561, + 608, 2559, 2562, 2544, 2556, 2606, 581, 595, 2600, 2544, + + 2560, 2597, 2544, 2543, 2536, 2551, 2542, 2549, 2530, 2547, + 2542, 669, 2592, 2544, 2828, 2543, 618, 2534, 2532, 2544, + 617, 2519, 2520, 2533, 2523, 2515, 2576, 2518, 2532, 629, + 2518, 2530, 2529, 2528, 2524, 2522, 2567, 2524, 2523, 2522, + 2521, 2504, 2512, 2565, 2521, 2501, 2562, 2828, 2561, 2500, + 2499, 678, 2512, 2510, 2509, 2828, 2828, 2509, 2498, 2490, + 647, 2547, 2551, 2550, 2828, 2549, 635, 2828, 664, 723, + 2505, 649, 2547, 2490, 2485, 2544, 2495, 2537, 2487, 2489, + 636, 2479, 2487, 2475, 2828, 2480, 2473, 2485, 2488, 2475, + 2474, 2828, 652, 2476, 2473, 645, 2471, 2465, 2828, 2521, + + 2480, 2477, 2462, 2479, 2475, 2473, 2473, 2467, 693, 2457, + 2511, 2828, 2455, 2471, 2508, 2828, 2462, 2511, 2464, 2462, + 2460, 2461, 2445, 2454, 2499, 2447, 2446, 2441, 2440, 2494, + 2435, 648, 2454, 2428, 2435, 2451, 2488, 2828, 2435, 2431, + 702, 2429, 2484, 2437, 2436, 2430, 2422, 2422, 2421, 2435, + 2435, 2423, 2419, 2417, 2828, 2426, 2476, 2828, 2470, 2412, + 2411, 2416, 2471, 2424, 2418, 2412, 2421, 2466, 2460, 2404, + 2399, 2457, 2418, 2393, 2399, 694, 2413, 2406, 2410, 2393, + 2454, 2448, 2391, 2391, 2445, 2387, 2388, 2387, 2385, 2402, + 2828, 2398, 2438, 2828, 2828, 2386, 2384, 2828, 655, 2435, + + 2439, 2433, 2390, 2374, 2391, 2434, 715, 2828, 2828, 2828, + 704, 689, 688, 2371, 724, 2828, 2370, 2380, 2828, 2379, + 695, 2386, 2366, 2376, 2379, 2420, 2362, 711, 2361, 2371, + 2416, 2358, 2365, 2358, 2360, 2369, 2351, 2351, 2366, 2365, + 2349, 667, 2363, 2362, 2362, 2344, 2349, 2393, 2347, 2354, + 2348, 2396, 2337, 2337, 2351, 2351, 2349, 2349, 2828, 2334, + 2346, 2338, 2344, 2335, 2343, 2341, 2828, 2327, 2381, 2342, + 2324, 2336, 2328, 612, 2319, 2318, 2312, 2317, 2332, 2329, + 2330, 2309, 2319, 2325, 2371, 2316, 2307, 2308, 2310, 2305, + 2318, 2310, 2309, 691, 2357, 2305, 753, 2355, 2297, 2353, + + 2297, 2300, 2293, 2308, 2828, 2291, 2305, 2300, 2296, 2828, + 2344, 2293, 2300, 2341, 2828, 2283, 2297, 2300, 2285, 2280, + 2335, 2334, 2278, 2332, 2289, 2273, 2329, 2328, 2828, 2289, + 2269, 2283, 2282, 752, 2283, 2282, 2279, 2263, 2319, 2276, + 58, 246, 285, 324, 364, 2828, 563, 2828, 594, 661, + 2828, 718, 713, 712, 723, 739, 702, 700, 722, 712, 721, 733, 727, 716, 712, 727, 723, 729, 782, 743, 789, 790, 747, 751, 787, 788, 743, 744, 745, 755, 760, 746, 749, 752, 761, 761, 745, 805, 755, 765, @@ -1100,218 +1101,219 @@ static const flex_int16_t yy_base[2377] = 778, 825, 780, 783, 778, 769, 784, 789, 790, 787, 789, 791, 790, 778, 792, 790, 798, 837, 796, 844, - 845, 792, 784, 794, 845, 801, 853, 2820, 803, 805, + 845, 792, 784, 794, 845, 801, 853, 2828, 803, 805, 801, 795, 811, 799, 809, 861, 857, 858, 818, 819, - 2820, 809, 810, 809, 822, 812, 825, 872, 873, 874, + 2828, 809, 810, 809, 822, 812, 825, 872, 873, 874, 808, 831, 822, 811, 817, 875, 836, 820, 832, 879, 823, 830, 882, 843, 838, 843, 841, 888, 827, 839, - 854, 849, 849, 839, 836, 2820, 904, 858, 859, 847, + 854, 849, 849, 839, 836, 2828, 904, 858, 859, 847, 861, 851, 855, 867, 852, 859, 863, 867, 868, 860, 874, 898, 890, 919, 920, 894, 867, 881, 884, 887, 884, 866, 873, 887, 935, 889, 874, 887, 888, 886, - 895, 2820, 2820, 891, 886, 901, 898, 884, 886, 905, - 902, 904, 893, 900, 902, 911, 953, 916, 955, 914, - 904, 902, 901, 912, 908, 900, 911, 922, 907, 908, - 914, 930, 969, 927, 922, 972, 2820, 933, 925, 936, - 934, 982, 921, 938, 924, 936, 945, 942, 929, 927, - 992, 946, 932, 938, 936, 2820, 2820, 946, 951, 956, - 944, 954, 956, 2820, 957, 944, 962, 949, 951, 944, - 961, 2820, 950, 968, 969, 1008, 956, 957, 954, 958, - 976, 1020, 2820, 2820, 2820, 963, 960, 976, 1024, 975, - - 965, 966, 962, 975, 986, 981, 1028, 983, 985, 978, - 980, 976, 982, 982, 984, 999, 982, 1044, 998, 1000, - 1004, 991, 982, 1003, 1006, 992, 991, 2820, 998, 999, - 1051, 1052, 1001, 1014, 1055, 1010, 1000, 1016, 1016, 1010, - 1018, 1005, 1036, 1046, 1034, 1042, 1054, 1071, 1017, 1031, - 1014, 1072, 1073, 1032, 1075, 2820, 1081, 1031, 1022, 1038, - 1042, 1086, 1033, 1032, 1027, 1028, 1040, 1035, 1031, 1040, - 1035, 1038, 1051, 1060, 1099, 1047, 1044, 1062, 1054, 1049, - 1110, 1064, 1065, 1056, 1114, 1071, 1060, 1063, 1071, 1073, - 1058, 1078, 1071, 1076, 1073, 1071, 1083, 1067, 1068, 2820, - - 1084, 1087, 1084, 1071, 1088, 1083, 1135, 1075, 1094, 2820, - 1093, 1096, 1082, 1077, 1095, 1138, 1093, 1089, 1086, 1142, - 1143, 1102, 1088, 1106, 1106, 1106, 1107, 1108, 1110, 1095, - 1110, 1108, 1098, 1099, 1115, 1102, 1119, 2820, 1117, 1119, - 1167, 1111, 2820, 1114, 1119, 1166, 1114, 1126, 1120, 1118, - 1115, 1121, 1131, 1179, 1120, 1121, 1121, 1183, 1124, 1136, - 1129, 2820, 1125, 1142, 1134, 1130, 1133, 1136, 1188, 1127, - 1148, 1135, 1136, 1137, 1138, 1144, 1152, 1143, 1148, 1158, - 1206, 1160, 1161, 1166, 1210, 1178, 1207, 1190, 1182, 1187, - 2820, 1170, 1155, 1167, 1163, 1177, 1160, 1160, 2820, 1163, - - 1162, 1225, 1165, 2820, 1176, 1166, 1186, 1185, 1176, 1187, - 1233, 1183, 1192, 1185, 1189, 1193, 1176, 1197, 1198, 1189, - 1247, 1191, 2820, 1244, 1188, 1191, 2820, 1209, 1191, 1192, - 1192, 1213, 1210, 1212, 1199, 1217, 1205, 1219, 1212, 1221, - 1201, 1216, 1223, 1208, 1269, 1212, 1266, 2820, 1272, 1273, - 1212, 1222, 1232, 1216, 1236, 1224, 1220, 1227, 1236, 1224, - 1231, 1232, 1244, 1288, 1232, 1290, 1231, 1230, 1234, 1248, - 1252, 1296, 1241, 1247, 1248, 1237, 1301, 1249, 1252, 1304, - 2820, 1242, 1259, 1252, 1243, 1262, 1250, 1260, 1256, 1251, - 1270, 1270, 2820, 1254, 1250, 1256, 2820, 1257, 1321, 1277, - - 1258, 1264, 1278, 1264, 1280, 1266, 1283, 1325, 1275, 1332, - 1333, 1283, 1288, 1282, 1280, 1291, 1290, 1274, 2820, 1279, - 1285, 1298, 2820, 1312, 1325, 1313, 1327, 1314, 1349, 1299, - 1287, 1309, 1304, 1304, 1308, 1309, 1357, 2820, 1297, 1297, - 1300, 1317, 1312, 1316, 1311, 2820, 1320, 1304, 1321, 1301, - 1322, 1312, 1312, 1372, 1322, 2820, 1335, 1335, 1376, 1320, - 1329, 1379, 1334, 1339, 1325, 1388, 1343, 1329, 1330, 1344, - 1342, 1339, 1335, 1353, 1354, 1355, 1338, 2820, 1395, 1347, - 2820, 1357, 2820, 1342, 1353, 1344, 1363, 1356, 1354, 1347, - 1359, 1406, 1367, 1356, 1363, 1364, 1370, 2820, 1363, 2820, - - 1418, 1368, 1357, 1370, 1422, 2820, 1361, 1367, 1368, 1379, - 2820, 1380, 1374, 2820, 1367, 1370, 1384, 1389, 1372, 1434, - 1388, 1375, 1394, 1381, 1386, 1440, 1436, 1386, 1443, 2820, - 1391, 1388, 1399, 1447, 1448, 1449, 1445, 1404, 1405, 1407, - 2820, 2820, 1399, 1394, 1451, 1397, 1413, 1459, 1398, 1410, - 1399, 1416, 1459, 1442, 1443, 1435, 1468, 2820, 1412, 1423, - 1416, 1425, 1416, 1427, 1429, 2820, 1476, 1410, 1421, 1436, - 1475, 1424, 1435, 1421, 1437, 1438, 1435, 1482, 1442, 1444, - 1433, 1443, 1451, 1438, 1435, 1498, 1494, 1449, 1496, 1502, - 1456, 2820, 1453, 1443, 1459, 1450, 1453, 1462, 1459, 1449, - - 1452, 1452, 1514, 1454, 1465, 1460, 1518, 1462, 1520, 1460, - 1465, 1524, 1520, 1458, 1473, 1466, 1469, 1482, 1483, 1481, - 1533, 2820, 1479, 1485, 1475, 2820, 1491, 1483, 1484, 1536, - 1480, 1496, 1544, 1545, 1486, 1496, 1548, 2820, 1493, 1550, - 1491, 1489, 1492, 2820, 1509, 1514, 2820, 1511, 1499, 1499, - 2820, 2820, 2820, 1504, 1514, 1497, 1517, 1518, 1504, 1506, - 1568, 1515, 2820, 1570, 1516, 1510, 1573, 1538, 1556, 1571, - 1558, 2820, 1521, 1580, 1534, 1582, 1529, 1579, 1585, 2820, - 1525, 1587, 1534, 1528, 1525, 1528, 1530, 1588, 1548, 1590, - 1540, 1552, 1555, 1552, 1546, 1550, 1544, 1551, 1541, 2820, - - 1549, 1564, 1549, 2820, 1551, 1551, 1609, 1554, 1611, 1570, - 1572, 1572, 1569, 1616, 1575, 2820, 1576, 1568, 1569, 2820, - 1570, 2820, 1580, 1573, 2820, 1579, 1584, 1585, 1582, 1629, - 1574, 1589, 1590, 1582, 2820, 1592, 1580, 1590, 1582, 1582, - 1583, 1584, 1641, 1647, 2820, 2820, 1643, 1587, 2820, 1588, - 2820, 1602, 1590, 1598, 1655, 1600, 1592, 1605, 1599, 1609, - 1602, 1606, 1622, 1615, 1621, 1611, 1669, 1619, 2820, 1628, - 2820, 1625, 1673, 2820, 1623, 1651, 1652, 1658, 1643, 1651, - 1680, 2820, 1681, 2820, 1636, 1621, 2820, 1684, 2820, 1685, - 1639, 1644, 1626, 1689, 1630, 1686, 1649, 1643, 1639, 1633, - - 1640, 1692, 1647, 1648, 1638, 1643, 1661, 1709, 1660, 1711, - 1661, 1659, 1709, 1670, 1670, 1712, 1657, 1662, 1660, 1722, - 1663, 1671, 1677, 1665, 1727, 1723, 1683, 1730, 1688, 1677, - 1671, 1734, 1673, 1674, 1688, 1738, 1692, 1683, 1693, 1742, - 1743, 1693, 1691, 2820, 1681, 1742, 1743, 1695, 1695, 1695, - 1690, 1691, 1709, 2820, 1700, 1706, 1711, 1698, 1699, 1761, - 1700, 1700, 1702, 1760, 1703, 2820, 1699, 1717, 1769, 2820, - 1724, 1738, 1752, 1751, 1740, 1742, 2820, 2820, 1776, 1726, - 2820, 2820, 1717, 1728, 1780, 2820, 1781, 1735, 1726, 1731, - 1729, 1782, 1737, 1742, 1728, 1731, 1747, 1736, 1734, 1748, - - 1735, 2820, 1737, 2820, 1742, 1760, 1747, 1756, 1802, 1746, - 1809, 1754, 1764, 1765, 2820, 1813, 1750, 1810, 1765, 1812, - 2820, 1760, 1819, 2820, 1759, 1774, 1762, 2820, 1772, 1773, - 1825, 2820, 1780, 1771, 1785, 2820, 2820, 1761, 1779, 1788, - 1770, 1788, 1777, 1830, 1779, 1775, 1780, 1839, 1778, 1779, - 1842, 1838, 1844, 2820, 1794, 1792, 1847, 1797, 1787, 1803, - 1796, 2820, 1852, 1830, 1854, 1836, 1851, 1857, 2820, 1803, - 1859, 1798, 2820, 2820, 1800, 1802, 1812, 1859, 1804, 1819, - 1806, 1868, 1822, 1808, 1815, 1815, 1873, 1827, 1828, 1820, - 1816, 1818, 1832, 1820, 1832, 2820, 1879, 1827, 1824, 2820, - - 1840, 1827, 1840, 1827, 1848, 2820, 1845, 1893, 1843, 1840, - 1841, 2820, 1897, 1855, 1854, 1853, 1846, 1851, 1852, 1850, - 1861, 1845, 1854, 1903, 1909, 2820, 1859, 1911, 2820, 1857, - 2820, 1856, 1852, 2820, 1859, 1916, 1918, 1914, 2820, 1915, - 2820, 1897, 1903, 2820, 1875, 2820, 1919, 1868, 1879, 1880, - 1865, 1866, 1874, 1931, 2820, 1876, 1928, 1929, 1881, 2820, - 1876, 1894, 1895, 1877, 1883, 1896, 1891, 1888, 1893, 1891, - 1946, 1887, 1903, 1951, 1896, 1893, 1893, 2820, 1908, 1909, - 1910, 2820, 1904, 1912, 1960, 1910, 1900, 1908, 1921, 1922, - 1903, 1904, 1911, 2820, 1913, 2820, 1927, 1924, 1916, 1968, - - 1926, 2820, 2820, 1930, 1956, 1957, 1955, 1918, 1918, 1927, - 1934, 1927, 1926, 1937, 1924, 2820, 1940, 1928, 1931, 1990, - 1927, 1946, 1939, 1989, 1950, 1943, 1942, 1951, 1953, 1957, - 2820, 1996, 1950, 2820, 1955, 1946, 2008, 1948, 2010, 2011, - 2007, 2013, 2820, 1952, 2010, 1969, 1956, 1964, 1975, 1962, - 1973, 1959, 1957, 1965, 1964, 1965, 1971, 1962, 2007, 2031, - 2013, 2033, 1983, 1972, 1985, 1975, 1992, 1991, 2035, 1976, - 1995, 1996, 2820, 2001, 1994, 2041, 2037, 2001, 1988, 2003, - 2051, 2005, 2008, 2003, 2008, 1997, 2008, 2820, 2060, 2820, - 2820, 2007, 2820, 2062, 2001, 2064, 2004, 2066, 2011, 2063, - - 2064, 2023, 2066, 2009, 2013, 2074, 2032, 2076, 2032, 2059, - 2820, 2055, 2820, 2025, 2019, 2016, 2078, 2041, 2034, 2030, - 2087, 2027, 2029, 2028, 2035, 2047, 2082, 2033, 2095, 2036, - 2820, 2041, 2051, 2053, 2055, 2038, 2046, 2820, 2052, 2820, - 2054, 2820, 2060, 2820, 2061, 2061, 2052, 2111, 2052, 2062, - 2047, 2820, 2060, 2820, 2062, 2093, 2099, 2071, 2069, 2121, - 2059, 2061, 2058, 2082, 2820, 2069, 2076, 2077, 2080, 2076, - 2131, 2071, 2820, 2128, 2072, 2080, 2089, 2075, 2091, 2090, - 2079, 2086, 2081, 2081, 2095, 2090, 2820, 2101, 2089, 2145, - 2093, 2105, 2133, 2154, 2155, 2099, 2820, 2099, 2111, 2159, - - 2105, 2107, 2105, 2106, 2164, 2122, 2820, 2115, 2102, 2117, - 2122, 2114, 2120, 2172, 2173, 2112, 2128, 2176, 2177, 2118, - 2123, 2119, 2135, 2118, 2130, 2124, 2186, 2820, 2820, 2131, - 2142, 2189, 2820, 2143, 2128, 2146, 2137, 2820, 2133, 2139, - 2153, 2149, 2142, 2137, 2143, 2820, 2820, 2201, 2202, 2820, - 2820, 2142, 2150, 2145, 2201, 2164, 2161, 2209, 2820, 2205, - 2168, 2820, 2212, 2151, 2214, 2154, 2155, 2168, 2167, 2168, - 2158, 2170, 2166, 2820, 2820, 2161, 2224, 2174, 2183, 2176, - 2223, 2820, 2174, 2168, 2820, 2180, 2820, 2227, 2186, 2234, - 2173, 2189, 2237, 2190, 2239, 2240, 2820, 2194, 2188, 2181, - - 2201, 2188, 2200, 2191, 2195, 2189, 2820, 2246, 2192, 2820, - 2202, 2820, 2820, 2193, 2201, 2251, 2208, 2201, 2213, 2260, - 2205, 2205, 2263, 2202, 2204, 2219, 2267, 2268, 2207, 2223, - 2208, 2225, 2820, 2273, 2217, 2820, 2224, 2276, 2217, 2820, - 2820, 2227, 2279, 2224, 2281, 2820, 2229, 2228, 2820, 2284, - 2230, 2820, 2224, 2820, 2224, 2241, 2820, 2242, 2290, 2233, - 2292, 2293, 2820, 2294, 2820, 2820, 2820, 2820, 2300, 2303, - 2306, 2307, 2309, 2312, 2315, 2318 + 895, 2828, 2828, 891, 886, 901, 898, 884, 886, 905, + 902, 904, 893, 900, 902, 911, 958, 916, 955, 914, + 904, 903, 902, 913, 909, 901, 912, 923, 908, 909, + 915, 931, 970, 928, 923, 973, 2828, 934, 926, 937, + 935, 983, 922, 939, 925, 937, 946, 943, 930, 928, + 993, 947, 933, 939, 937, 2828, 2828, 947, 952, 957, + 945, 955, 957, 2828, 958, 945, 963, 950, 952, 945, + 962, 2828, 951, 969, 970, 1009, 957, 958, 955, 959, + 977, 1021, 2828, 2828, 2828, 964, 961, 977, 1025, 976, + + 966, 967, 963, 976, 987, 982, 1029, 984, 986, 979, + 981, 977, 983, 983, 985, 1000, 983, 1045, 999, 1001, + 1005, 992, 983, 1004, 1007, 993, 992, 2828, 999, 1000, + 1052, 1053, 1002, 1015, 1056, 1011, 1001, 1017, 1017, 1011, + 1019, 1006, 1037, 1047, 1035, 1043, 1055, 1072, 1018, 1032, + 1015, 1073, 1074, 1033, 1076, 2828, 1082, 1032, 1023, 1039, + 1043, 1087, 1034, 1033, 1028, 1029, 1041, 1036, 1032, 1041, + 1036, 1039, 1052, 1061, 1100, 2828, 1051, 1045, 1063, 1056, + 1051, 1112, 1066, 1067, 1058, 1116, 1073, 1062, 1065, 1073, + 1075, 1060, 1080, 1073, 1078, 1075, 1073, 1085, 1069, 1070, + + 2828, 1086, 1089, 1086, 1073, 1090, 1085, 1137, 1077, 1096, + 2828, 1095, 1098, 1084, 1079, 1097, 1140, 1095, 1091, 1088, + 1144, 1145, 1104, 1090, 1108, 1108, 1108, 1109, 1110, 1112, + 1097, 1112, 1110, 1100, 1101, 1117, 1104, 1121, 2828, 1119, + 1121, 1169, 1113, 2828, 1116, 1121, 1168, 1116, 1128, 1122, + 1120, 1117, 1123, 1133, 1181, 1122, 1123, 1123, 1185, 1126, + 1138, 1131, 2828, 1127, 1144, 1136, 1132, 1135, 1138, 1190, + 1129, 1150, 1137, 1138, 1139, 1140, 1146, 1154, 1145, 1150, + 1160, 1208, 1162, 1163, 1168, 1212, 1180, 1209, 1192, 1184, + 1189, 2828, 1172, 1157, 1169, 1165, 1179, 1162, 1162, 2828, + + 1165, 1164, 1227, 1167, 2828, 1178, 1168, 1188, 1187, 1178, + 1189, 1235, 1185, 1194, 1187, 1191, 1195, 1178, 1203, 1200, + 1201, 1192, 1250, 1194, 2828, 1247, 1191, 1195, 2828, 1213, + 1195, 1196, 1196, 1217, 1214, 1216, 1203, 1221, 1209, 1223, + 1216, 1225, 1205, 1220, 1227, 1212, 1273, 1216, 1270, 2828, + 1276, 1277, 1216, 1226, 1236, 1220, 1240, 1228, 1224, 1231, + 1240, 1228, 1235, 1236, 1248, 1292, 1236, 1294, 1235, 1234, + 1238, 1252, 1256, 1300, 1245, 1251, 1252, 1241, 1305, 1253, + 1256, 1308, 2828, 1246, 1263, 1256, 1247, 1266, 1254, 1264, + 1260, 1255, 1274, 1274, 2828, 1258, 1254, 1260, 2828, 1261, + + 1325, 1281, 1262, 1268, 1282, 1268, 1284, 1270, 1287, 1329, + 1279, 1336, 1337, 1287, 1292, 1286, 1284, 1295, 1294, 1278, + 2828, 1283, 1289, 1302, 2828, 1316, 1329, 1317, 1331, 1318, + 1353, 1303, 1291, 1313, 1308, 1308, 1312, 1313, 1361, 2828, + 1301, 1301, 1304, 1321, 1316, 1320, 1315, 2828, 1324, 1308, + 1325, 1305, 1326, 1316, 1310, 1325, 1322, 1378, 1328, 2828, + 1341, 1341, 1382, 1326, 1335, 1385, 1340, 1345, 1331, 1394, + 1349, 1335, 1336, 1350, 1348, 1345, 1341, 1359, 1360, 1361, + 1344, 2828, 1401, 1353, 2828, 1363, 2828, 1348, 1359, 1350, + 1369, 1362, 1360, 1353, 1365, 1412, 1373, 1362, 1369, 1370, + + 1376, 2828, 1369, 2828, 1424, 1374, 1363, 1376, 1428, 2828, + 1367, 1373, 1374, 1385, 2828, 1386, 1380, 2828, 1373, 1376, + 1390, 1395, 1378, 1440, 1394, 1381, 1400, 1387, 1392, 1446, + 1442, 1392, 1449, 2828, 1397, 1394, 1405, 1453, 1454, 1455, + 1451, 1410, 1411, 1413, 2828, 2828, 1405, 1400, 1457, 1403, + 1419, 1465, 1404, 1416, 1405, 1422, 1465, 1448, 1449, 1441, + 1474, 2828, 1418, 1429, 1422, 1431, 1422, 1433, 1435, 2828, + 1482, 1416, 1427, 1442, 1481, 1430, 1441, 1427, 1443, 1444, + 1441, 1488, 1448, 1495, 1496, 1452, 1443, 1453, 1460, 1447, + 1443, 1506, 1502, 1457, 1504, 1510, 1464, 2828, 1461, 1451, + + 1467, 1458, 1461, 1470, 1467, 1457, 1460, 1460, 1522, 1462, + 1473, 1468, 1526, 1470, 1528, 1469, 1474, 1532, 1528, 1466, + 1481, 1474, 1477, 1490, 1491, 1489, 1541, 2828, 1487, 1493, + 1483, 2828, 1499, 1491, 1492, 1544, 1488, 1504, 1552, 1553, + 1494, 1504, 1556, 2828, 1501, 1558, 1499, 1497, 1500, 2828, + 1517, 1522, 2828, 1519, 1507, 1507, 2828, 2828, 2828, 1512, + 1522, 1505, 1525, 1526, 1512, 1514, 1576, 1523, 2828, 1578, + 1524, 1518, 1581, 1546, 1564, 1579, 1566, 2828, 1529, 1588, + 1542, 1590, 1537, 1587, 1593, 2828, 1533, 1595, 1542, 1536, + 1533, 1536, 1538, 1596, 1556, 1598, 1548, 1560, 1563, 2828, + + 2828, 1560, 1554, 1558, 1552, 1559, 1549, 2828, 1557, 1572, + 1557, 2828, 1559, 1559, 1617, 1562, 1619, 1578, 1580, 1580, + 1577, 1624, 1583, 2828, 1584, 1576, 1577, 2828, 1578, 2828, + 1588, 1581, 2828, 1587, 1592, 1593, 1590, 1637, 1582, 1597, + 1598, 1590, 2828, 1600, 1588, 1598, 1590, 1590, 1591, 1592, + 1649, 1655, 2828, 2828, 1651, 1595, 2828, 1596, 2828, 1610, + 1598, 1606, 1663, 1608, 1600, 1613, 1607, 1617, 1610, 1614, + 1630, 1623, 1629, 1619, 1677, 1627, 2828, 1636, 2828, 1633, + 1681, 2828, 1631, 1659, 1660, 1666, 1651, 1659, 1688, 2828, + 1689, 2828, 1644, 1629, 2828, 1692, 2828, 1693, 1647, 1652, + + 1634, 1697, 1638, 1694, 1657, 1651, 1647, 1641, 1648, 1700, + 1655, 1656, 1646, 1651, 1669, 1717, 1668, 1719, 1669, 1667, + 1717, 1678, 1678, 1720, 1665, 1670, 1668, 1730, 1671, 1679, + 1685, 1673, 1735, 1731, 1691, 1738, 1696, 1685, 1679, 1742, + 1681, 1682, 1696, 1746, 1700, 1691, 1701, 1750, 1751, 1701, + 1699, 2828, 1689, 1750, 1751, 1703, 1703, 1703, 1698, 1699, + 1717, 2828, 1708, 1714, 1719, 1706, 1707, 1769, 1708, 1708, + 1710, 1768, 1711, 2828, 1707, 1725, 1777, 2828, 1732, 1746, + 1760, 1759, 1748, 1750, 2828, 2828, 1784, 1734, 2828, 2828, + 1725, 1736, 1788, 2828, 1789, 1743, 1734, 1739, 1737, 1790, + + 1745, 1750, 1736, 1739, 1755, 1744, 1742, 1756, 1743, 2828, + 1745, 2828, 1750, 1768, 1755, 1764, 1810, 1754, 1817, 1762, + 1772, 1773, 2828, 1821, 1758, 1818, 1773, 1820, 2828, 1768, + 1827, 2828, 1767, 1782, 1770, 2828, 1780, 1781, 1833, 2828, + 1788, 1779, 1793, 2828, 2828, 1769, 1787, 1796, 1778, 1796, + 1785, 1838, 1787, 1783, 1788, 1847, 1786, 1787, 1850, 1846, + 1852, 2828, 1802, 1800, 1855, 1805, 1795, 1811, 1804, 2828, + 1860, 1838, 1862, 1844, 1859, 1865, 2828, 1811, 1867, 1806, + 2828, 2828, 1808, 1810, 1820, 1867, 1812, 1827, 1814, 1876, + 1830, 1816, 1823, 1823, 1881, 1835, 1836, 1828, 1824, 1826, + + 1840, 1828, 1840, 2828, 1887, 1835, 1832, 2828, 1848, 1835, + 1848, 1835, 1856, 2828, 1853, 1901, 1851, 1848, 1849, 2828, + 1905, 1863, 1862, 1861, 1854, 1859, 1860, 1858, 1869, 1853, + 1862, 1911, 1917, 2828, 1867, 1919, 2828, 1865, 2828, 1864, + 1860, 2828, 1867, 1924, 1926, 1922, 2828, 1923, 2828, 1905, + 1911, 2828, 1883, 2828, 1927, 1876, 1887, 1888, 1873, 1874, + 1882, 1939, 2828, 1884, 1936, 1937, 1889, 2828, 1884, 1902, + 1903, 1885, 1891, 1904, 1899, 1896, 1901, 1899, 1954, 1895, + 1911, 1959, 1904, 1901, 1901, 2828, 1916, 1917, 1918, 2828, + 1912, 1920, 1968, 1918, 1908, 1916, 1929, 1930, 1911, 1912, + + 1919, 2828, 1921, 2828, 1935, 1932, 1924, 1976, 1934, 2828, + 2828, 1938, 1964, 1965, 1963, 1926, 1926, 1935, 1942, 1935, + 1934, 1945, 1932, 2828, 1948, 1936, 1939, 1998, 1935, 1954, + 1947, 1997, 1958, 1951, 1950, 1959, 1961, 1965, 2828, 2004, + 1958, 2828, 1963, 1954, 2016, 1956, 2018, 2019, 2015, 2021, + 2828, 1960, 2018, 1977, 1964, 1972, 1983, 1970, 1981, 1967, + 1965, 1973, 1972, 1973, 1979, 1970, 2015, 2039, 2021, 2041, + 1991, 1980, 1993, 1983, 2000, 1999, 2043, 1984, 2003, 2004, + 2828, 2009, 2002, 2049, 2045, 2009, 1996, 2011, 2059, 2013, + 2016, 2011, 2016, 2005, 2016, 2828, 2068, 2828, 2828, 2015, + + 2828, 2070, 2009, 2072, 2012, 2074, 2019, 2071, 2072, 2031, + 2074, 2017, 2021, 2082, 2040, 2084, 2040, 2067, 2828, 2063, + 2828, 2033, 2027, 2024, 2086, 2049, 2042, 2038, 2095, 2035, + 2037, 2036, 2043, 2055, 2090, 2041, 2103, 2044, 2828, 2049, + 2059, 2061, 2063, 2046, 2054, 2828, 2060, 2828, 2062, 2828, + 2068, 2828, 2069, 2069, 2060, 2119, 2060, 2070, 2055, 2828, + 2068, 2828, 2070, 2101, 2107, 2079, 2077, 2129, 2067, 2069, + 2066, 2090, 2828, 2077, 2084, 2085, 2088, 2084, 2139, 2079, + 2828, 2136, 2080, 2088, 2097, 2083, 2099, 2098, 2087, 2094, + 2089, 2089, 2103, 2098, 2828, 2109, 2097, 2153, 2101, 2113, + + 2141, 2162, 2163, 2107, 2828, 2107, 2119, 2167, 2113, 2115, + 2113, 2114, 2172, 2130, 2828, 2123, 2110, 2125, 2130, 2122, + 2128, 2180, 2181, 2120, 2136, 2184, 2185, 2126, 2131, 2127, + 2143, 2126, 2138, 2132, 2194, 2828, 2828, 2139, 2150, 2197, + 2828, 2151, 2136, 2154, 2145, 2828, 2141, 2147, 2161, 2157, + 2150, 2145, 2151, 2828, 2828, 2209, 2210, 2828, 2828, 2150, + 2158, 2153, 2209, 2172, 2169, 2217, 2828, 2213, 2176, 2828, + 2220, 2159, 2222, 2162, 2163, 2176, 2175, 2176, 2166, 2178, + 2174, 2828, 2828, 2169, 2232, 2182, 2191, 2184, 2231, 2828, + 2182, 2176, 2828, 2188, 2828, 2235, 2194, 2242, 2181, 2197, + + 2245, 2198, 2247, 2248, 2828, 2202, 2196, 2189, 2209, 2196, + 2208, 2199, 2203, 2197, 2828, 2254, 2200, 2828, 2210, 2828, + 2828, 2201, 2209, 2259, 2216, 2209, 2221, 2268, 2213, 2213, + 2271, 2210, 2212, 2227, 2275, 2276, 2215, 2231, 2216, 2233, + 2828, 2281, 2225, 2828, 2232, 2284, 2225, 2828, 2828, 2235, + 2287, 2232, 2289, 2828, 2237, 2236, 2828, 2292, 2238, 2828, + 2232, 2828, 2232, 2249, 2828, 2250, 2298, 2241, 2300, 2301, + 2828, 2302, 2828, 2828, 2828, 2828, 2308, 2311, 2314, 2315, + 2317, 2320, 2323, 2326 } ; -static const flex_int16_t yy_def[2377] = +static const flex_int16_t yy_def[2385] = { 0, - 2369, 2369, 2370, 2370, 2369, 2369, 2369, 2369, 2369, 2369, - 2368, 2368, 2368, 2368, 2368, 2371, 2368, 2368, 2368, 2368, - 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, - 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2372, - 2368, 2368, 2368, 2373, 15, 2368, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 2374, 45, 45, 45, + 2377, 2377, 2378, 2378, 2377, 2377, 2377, 2377, 2377, 2377, + 2376, 2376, 2376, 2376, 2376, 2379, 2376, 2376, 2376, 2376, + 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, + 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2380, + 2376, 2376, 2376, 2381, 15, 2376, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 2382, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2371, 2368, - 2368, 2368, 2368, 2368, 2368, 2375, 2368, 2368, 2368, 2368, - 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2372, 2368, 2373, + 45, 45, 45, 45, 45, 45, 45, 45, 2379, 2376, + 2376, 2376, 2376, 2376, 2376, 2383, 2376, 2376, 2376, 2376, + 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2380, 2376, 2381, - 2368, 2368, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 2376, 45, 2374, 45, 45, 45, + 2376, 2376, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 2384, 45, 2382, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2375, 2368, 2368, - 2368, 2368, 2368, 2368, 2368, 2368, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 2383, 2376, 2376, + 2376, 2376, 2376, 2376, 2376, 2376, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2376, 2368, - 2368, 117, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 2384, 2376, + 2376, 117, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 2368, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2368, 2368, 2368, - 2368, 2368, 2368, 2368, 45, 45, 45, 45, 45, 45, - 45, 45, 2368, 45, 2368, 45, 117, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 2376, 2376, 2376, + 2376, 2376, 2376, 2376, 45, 45, 45, 45, 45, 45, + 45, 45, 2376, 45, 2376, 45, 117, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, @@ -1320,44 +1322,44 @@ static const flex_int16_t yy_def[2377] = 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 2368, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2368, 45, 45, - 45, 45, 45, 45, 45, 2368, 2368, 2368, 45, 45, - 45, 45, 45, 45, 2368, 45, 45, 2368, 45, 117, + 45, 45, 45, 45, 45, 45, 45, 2376, 45, 45, + 45, 45, 45, 45, 45, 2376, 2376, 2376, 45, 45, + 45, 45, 45, 45, 2376, 45, 45, 2376, 45, 117, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 2368, 45, 45, 45, 45, 45, - 45, 2368, 45, 45, 45, 45, 45, 45, 2368, 45, + 45, 45, 45, 45, 2376, 45, 45, 45, 45, 45, + 45, 2376, 45, 45, 45, 45, 45, 45, 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 2368, 45, 45, 45, 2368, 45, 45, 45, 45, + 45, 2376, 45, 45, 45, 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2368, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 2368, 45, 45, 2368, 45, 45, + 45, 45, 45, 45, 2376, 45, 45, 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 2368, 45, 45, 2368, 2368, 45, 45, 2368, 45, 45, + 2376, 45, 45, 2376, 2376, 45, 45, 2376, 45, 45, - 45, 45, 2368, 45, 45, 45, 45, 2368, 2368, 2368, - 45, 45, 45, 45, 45, 2368, 45, 45, 2368, 45, + 45, 45, 2376, 45, 45, 45, 45, 2376, 2376, 2376, + 45, 45, 45, 45, 45, 2376, 45, 45, 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2368, 45, - 45, 45, 45, 45, 45, 45, 2368, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 2376, 45, + 45, 45, 45, 45, 45, 45, 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 2368, 45, 45, 45, 45, 2368, - 45, 45, 45, 45, 2368, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2368, 45, + 45, 45, 45, 45, 2376, 45, 45, 45, 45, 2376, + 45, 45, 45, 45, 2376, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 2368, 45, 2368, 45, 45, - 2368, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 2376, 45, 2376, 45, 45, + 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, @@ -1365,185 +1367,186 @@ static const flex_int16_t yy_def[2377] = 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2368, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 2368, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 2368, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 2368, 2368, 45, 45, 45, 45, 45, 45, 45, + 45, 2376, 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 2368, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 2368, 2368, 45, 45, 45, - 45, 45, 45, 2368, 45, 45, 45, 45, 45, 45, - 45, 2368, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 2368, 2368, 2368, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 2376, 2376, 45, 45, 45, + 45, 45, 45, 2376, 45, 45, 45, 45, 45, 45, + 45, 2376, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 2376, 2376, 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2368, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 2368, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 2368, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 2368, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2368, 45, 45, - 45, 45, 2368, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 2376, 45, + 45, 45, 45, 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 2368, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 2368, 45, 45, 45, 45, 45, 45, 45, 2368, 45, + 45, 2376, 45, 45, 45, 45, 45, 45, 45, 2376, - 45, 45, 45, 2368, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 2368, 45, 45, 45, 2368, 45, 45, 45, + 45, 45, 45, 45, 2376, 45, 45, 45, 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2368, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 2368, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 2368, 45, 45, 45, 2368, 45, 45, 45, + 45, 45, 2376, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 2376, 45, 45, 45, 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2368, 45, - 45, 45, 2368, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2368, 45, 45, - 45, 45, 45, 45, 45, 2368, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 2368, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2368, 45, 45, - 2368, 45, 2368, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2368, 45, 2368, - - 45, 45, 45, 45, 45, 2368, 45, 45, 45, 45, - 2368, 45, 45, 2368, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 2368, + 2376, 45, 45, 45, 2376, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 2376, + 45, 45, 45, 45, 45, 45, 45, 2376, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 2368, 2368, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2368, 45, 45, - 45, 45, 45, 45, 45, 2368, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 2376, 45, 45, 2376, 45, 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 2368, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 2376, 45, 2376, 45, 45, 45, 45, 45, 2376, + 45, 45, 45, 45, 2376, 45, 45, 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 2376, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 2376, 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 2368, 45, 45, 45, 2368, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2368, 45, 45, - 45, 45, 45, 2368, 45, 45, 2368, 45, 45, 45, - 2368, 2368, 2368, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 2368, 45, 45, 45, 45, 45, 45, 45, - 45, 2368, 45, 45, 45, 45, 45, 45, 45, 2368, + 45, 2376, 45, 45, 45, 45, 45, 45, 45, 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 2368, - - 45, 45, 45, 2368, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 2368, 45, 45, 45, 2368, - 45, 2368, 45, 45, 2368, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 2368, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 2368, 2368, 45, 45, 2368, 45, - 2368, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2368, 45, - 2368, 45, 45, 2368, 45, 45, 45, 45, 45, 45, - 45, 2368, 45, 2368, 45, 45, 2368, 45, 2368, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 2376, 45, 45, + 45, 2376, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 2376, 45, 45, 45, 45, 45, 2376, + 45, 45, 2376, 45, 45, 45, 2376, 2376, 2376, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 2376, 45, + 45, 45, 45, 45, 45, 45, 45, 2376, 45, 45, + 45, 45, 45, 45, 45, 2376, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 2376, + + 2376, 45, 45, 45, 45, 45, 45, 2376, 45, 45, + 45, 2376, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 2376, 45, 45, 45, 2376, 45, 2376, + 45, 45, 2376, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 2376, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 2376, 2376, 45, 45, 2376, 45, 2376, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 2376, 45, 2376, 45, + 45, 2376, 45, 45, 45, 45, 45, 45, 45, 2376, + 45, 2376, 45, 45, 2376, 45, 2376, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 2368, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 2368, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 2368, 45, 45, 45, 2368, - 45, 45, 45, 45, 45, 45, 2368, 2368, 45, 45, - 2368, 2368, 45, 45, 45, 2368, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - - 45, 2368, 45, 2368, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 2368, 45, 45, 45, 45, 45, - 2368, 45, 45, 2368, 45, 45, 45, 2368, 45, 45, - 45, 2368, 45, 45, 45, 2368, 2368, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 2368, 45, 45, 45, 45, 45, 45, - 45, 2368, 45, 45, 45, 45, 45, 45, 2368, 45, - 45, 45, 2368, 2368, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 2368, 45, 45, 45, 2368, - - 45, 45, 45, 45, 45, 2368, 45, 45, 45, 45, - 45, 2368, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 2368, 45, 45, 2368, 45, - 2368, 45, 45, 2368, 45, 45, 45, 45, 2368, 45, - 2368, 45, 45, 2368, 45, 2368, 45, 45, 45, 45, - 45, 45, 45, 45, 2368, 45, 45, 45, 45, 2368, + 45, 2376, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 2376, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 2376, 45, 45, 45, 2376, 45, 45, + 45, 45, 45, 45, 2376, 2376, 45, 45, 2376, 2376, + 45, 45, 45, 2376, 45, 45, 45, 45, 45, 45, + + 45, 45, 45, 45, 45, 45, 45, 45, 45, 2376, + 45, 2376, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 2376, 45, 45, 45, 45, 45, 2376, 45, + 45, 2376, 45, 45, 45, 2376, 45, 45, 45, 2376, + 45, 45, 45, 2376, 2376, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 2376, 45, 45, 45, 45, 45, 45, 45, 2376, + 45, 45, 45, 45, 45, 45, 2376, 45, 45, 45, + 2376, 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2368, 45, 45, - 45, 2368, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 2368, 45, 2368, 45, 45, 45, 45, - 45, 2368, 2368, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 2368, 45, 45, 45, 45, + 45, 45, 45, 2376, 45, 45, 45, 2376, 45, 45, + 45, 45, 45, 2376, 45, 45, 45, 45, 45, 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 2368, 45, 45, 2368, 45, 45, 45, 45, 45, 45, - 45, 45, 2368, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 2376, 45, 45, 2376, 45, 2376, 45, + 45, 2376, 45, 45, 45, 45, 2376, 45, 2376, 45, + 45, 2376, 45, 2376, 45, 45, 45, 45, 45, 45, + 45, 45, 2376, 45, 45, 45, 45, 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 2376, 45, 45, 45, 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 2368, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2368, 45, 2368, - 2368, 45, 2368, 45, 45, 45, 45, 45, 45, 45, + 45, 2376, 45, 2376, 45, 45, 45, 45, 45, 2376, + 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 2376, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 2376, 45, + 45, 2376, 45, 45, 45, 45, 45, 45, 45, 45, + 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 2368, 45, 2368, 45, 45, 45, 45, 45, 45, 45, + 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 2376, 45, 2376, 2376, 45, + + 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 2376, 45, + 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 2376, 45, + 45, 45, 45, 45, 45, 2376, 45, 2376, 45, 2376, + 45, 2376, 45, 45, 45, 45, 45, 45, 45, 2376, + 45, 2376, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 2376, 45, 45, 45, 45, 45, 45, 45, + 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 2376, 45, 45, 45, 45, 45, + + 45, 45, 45, 45, 2376, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 2368, 45, 45, 45, 45, 45, 45, 2368, 45, 2368, - 45, 2368, 45, 2368, 45, 45, 45, 45, 45, 45, - 45, 2368, 45, 2368, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 2368, 45, 45, 45, 45, 45, - 45, 45, 2368, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 2368, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 2368, 45, 45, 45, - - 45, 45, 45, 45, 45, 45, 2368, 45, 45, 45, + 45, 45, 45, 45, 45, 2376, 2376, 45, 45, 45, + 2376, 45, 45, 45, 45, 2376, 45, 45, 45, 45, + 45, 45, 45, 2376, 2376, 45, 45, 2376, 2376, 45, + 45, 45, 45, 45, 45, 45, 2376, 45, 45, 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2368, 2368, 45, - 45, 45, 2368, 45, 45, 45, 45, 2368, 45, 45, - 45, 45, 45, 45, 45, 2368, 2368, 45, 45, 2368, - 2368, 45, 45, 45, 45, 45, 45, 45, 2368, 45, - 45, 2368, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 2368, 2368, 45, 45, 45, 45, 45, - 45, 2368, 45, 45, 2368, 45, 2368, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 2368, 45, 45, 45, - - 45, 45, 45, 45, 45, 45, 2368, 45, 45, 2368, - 45, 2368, 2368, 45, 45, 45, 45, 45, 45, 45, + 45, 2376, 2376, 45, 45, 45, 45, 45, 45, 2376, + 45, 45, 2376, 45, 2376, 45, 45, 45, 45, 45, + + 45, 45, 45, 45, 2376, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 2376, 45, 45, 2376, 45, 2376, + 2376, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 2368, 45, 45, 2368, 45, 45, 45, 2368, - 2368, 45, 45, 45, 45, 2368, 45, 45, 2368, 45, - 45, 2368, 45, 2368, 45, 45, 2368, 45, 45, 45, - 45, 45, 2368, 45, 2368, 2368, 2368, 0, 2368, 2368, - 2368, 2368, 2368, 2368, 2368, 2368 + 2376, 45, 45, 2376, 45, 45, 45, 2376, 2376, 45, + 45, 45, 45, 2376, 45, 45, 2376, 45, 45, 2376, + 45, 2376, 45, 45, 2376, 45, 45, 45, 45, 45, + 2376, 45, 2376, 2376, 2376, 0, 2376, 2376, 2376, 2376, + 2376, 2376, 2376, 2376 } ; -static const flex_int16_t yy_nxt[2897] = +static const flex_int16_t yy_nxt[2905] = { 0, - 2368, 13, 14, 13, 2368, 15, 16, 101, 17, 18, + 2376, 13, 14, 13, 2376, 15, 16, 101, 17, 18, 19, 20, 21, 22, 22, 22, 22, 22, 23, 24, - 85, 2368, 37, 14, 37, 86, 25, 26, 38, 37, - 14, 37, 42, 27, 42, 38, 2368, 2368, 28, 90, + 85, 2376, 37, 14, 37, 86, 25, 26, 38, 37, + 14, 37, 42, 27, 42, 38, 2376, 2376, 28, 90, 13, 14, 13, 91, 29, 90, 30, 102, 13, 14, 13, 202, 25, 31, 13, 14, 13, 42, 40, 42, 417, 32, 13, 14, 13, 90, 40, 33, 418, 167, @@ -1645,53 +1648,53 @@ static const flex_int16_t yy_nxt[2897] = 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1043, 1070, 1071, 1044, 1072, 1073, - 1047, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, + 1047, 1074, 1075, 1076, 1078, 1079, 1080, 1081, 1077, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, - 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1102, 1103, - 1104, 1105, 1101, 1106, 1107, 1108, 1109, 1110, 1111, 1112, + 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1103, + 1104, 1105, 1106, 1102, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, - 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1132, 1133, - 1134, 1131, 1135, 1136, 1137, 1138, 1140, 1141, 1142, 1143, - 1139, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, + 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1133, + 1134, 1135, 1132, 1136, 1137, 1138, 1139, 1141, 1142, 1143, + 1144, 1140, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, - 1183, 1184, 1185, 1186, 1187, 1188, 1191, 1189, 1192, 1193, - 1190, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, + 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1192, 1190, 1193, + 1194, 1191, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, - 1213, 1187, 1186, 1214, 1188, 1189, 1190, 1215, 1216, 1217, - 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, + 1213, 1214, 1188, 1187, 1215, 1189, 1190, 1191, 1216, 1217, + 1218, 1219, 1221, 1222, 1220, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, - 1248, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, + 1248, 1249, 1250, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, - 1309, 1249, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, - 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1327, 1326, - 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, + 1309, 1310, 1311, 1251, 1312, 1313, 1314, 1315, 1316, 1317, + 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, + 1329, 1328, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, - 1348, 1349, 1350, 1351, 1352, 1324, 1326, 1327, 1328, 1353, - 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, + 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1326, 1328, 1329, + 1330, 1355, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1356, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, - 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1383, 1385, - 1386, 1387, 1382, 1388, 1389, 1390, 1391, 1392, 1393, 1394, + 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, + 1384, 1385, 1387, 1389, 1390, 1391, 1386, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, - 1425, 1426, 1427, 1428, 1429, 1384, 1430, 1431, 1432, 1433, + 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1388, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, - 1454, 1455, 1457, 1456, 1458, 1459, 1460, 1461, 1462, 1463, + 1454, 1455, 1456, 1457, 1458, 1459, 1461, 1460, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, - 1474, 1475, 1476, 1477, 1478, 1479, 1454, 1480, 1453, 1456, - 1455, 1457, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, + 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, + 1458, 1484, 1457, 1460, 1459, 1461, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, @@ -1702,166 +1705,167 @@ static const flex_int16_t yy_nxt[2897] = 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, - 1579, 1580, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, - 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1569, 1570, 1597, + 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1588, 1589, + 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598, 1599, - 1598, 1571, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, + 1600, 1601, 1602, 1575, 1576, 1603, 1604, 1577, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, - 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1581, 1625, - 1626, 1627, 1628, 1630, 1631, 1632, 1633, 1634, 1635, 1636, - 1629, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, - 1646, 1647, 1648, 1649, 1650, 1651, 1653, 1654, 1655, 1656, - 1652, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, - 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1676, - 1677, 1678, 1681, 1675, 1680, 1682, 1683, 1684, 1685, 1686, - 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, - - 1697, 1698, 1699, 1700, 1701, 1679, 1677, 1702, 1676, 1703, - 1680, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, + 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, + 1627, 1628, 1629, 1630, 1587, 1631, 1632, 1633, 1634, 1635, + 1636, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1637, 1645, + 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, + 1656, 1657, 1658, 1659, 1661, 1662, 1663, 1664, 1660, 1665, + 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, + 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1684, 1685, 1686, + 1689, 1683, 1688, 1690, 1691, 1692, 1693, 1694, 1695, 1696, + + 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, + 1707, 1708, 1709, 1687, 1685, 1710, 1684, 1711, 1688, 1712, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, - 1723, 1724, 1725, 1679, 1726, 1727, 1728, 1729, 1730, 1731, - 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, - 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1752, 1749, 1753, - 1754, 1750, 1755, 1756, 1751, 1757, 1758, 1759, 1760, 1761, - 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, - 1772, 1773, 1775, 1774, 1776, 1777, 1778, 1779, 1780, 1781, - 1782, 1783, 1784, 1785, 1786, 1788, 1789, 1792, 1793, 1790, - - 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1772, 1773, 1774, - 1791, 1775, 1776, 1801, 1802, 1803, 1804, 1805, 1806, 1807, - 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1817, 1818, - 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, + 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, + 1733, 1687, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, + 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, + 1752, 1753, 1754, 1755, 1756, 1760, 1757, 1761, 1762, 1758, + 1763, 1764, 1759, 1765, 1766, 1767, 1768, 1769, 1770, 1771, + 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, + 1783, 1782, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, + + 1792, 1793, 1794, 1796, 1797, 1800, 1801, 1798, 1802, 1803, + 1804, 1805, 1806, 1807, 1808, 1780, 1781, 1782, 1799, 1783, + 1784, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, + 1818, 1819, 1820, 1821, 1822, 1823, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, - 1839, 1840, 1841, 1842, 1843, 1787, 1844, 1845, 1846, 1847, - 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, - 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1867, 1866, - 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1816, 1876, - 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, - - 1887, 1888, 1889, 1865, 1890, 1864, 1866, 1867, 1891, 1868, - 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, + 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, + 1849, 1850, 1851, 1795, 1852, 1853, 1854, 1855, 1856, 1857, + 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, + 1868, 1869, 1870, 1871, 1872, 1873, 1875, 1874, 1876, 1877, + 1878, 1879, 1880, 1881, 1882, 1883, 1824, 1884, 1885, 1886, + + 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, + 1897, 1873, 1898, 1872, 1874, 1875, 1899, 1876, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, - 1962, 1963, 1964, 1965, 1966, 1940, 1942, 1967, 1968, 1969, - 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, + 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, + 1972, 1973, 1974, 1948, 1950, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, - 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1999, 2000, - 2001, 2002, 1998, 2003, 2004, 2005, 2006, 2008, 2007, 2009, - 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, + 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, + 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, + 2006, 2011, 2012, 2013, 2014, 2016, 2015, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, - 2030, 2031, 2032, 2006, 2007, 2033, 2034, 2035, 2036, 2037, - 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, + 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, + 2040, 2014, 2015, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, - 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2059, 2060, 2085, - 2061, 2086, 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2094, + 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, + 2088, 2089, 2090, 2091, 2092, 2067, 2068, 2093, 2069, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, - 2106, 2107, 2105, 2108, 2109, 2110, 2111, 2112, 2113, 2114, - 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, + 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2114, 2115, + 2113, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, - 2135, 2136, 2110, 2112, 2137, 2138, 2139, 2140, 2141, 2142, - 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, + 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, + 2118, 2120, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2164, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, - 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2156, - 2182, 2157, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2190, - 2191, 2192, 2193, 2195, 2194, 2196, 2197, 2198, 2199, 2200, - 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, - 2211, 2212, 2213, 2214, 2215, 2216, 2217, 2218, 2219, 2193, - 2194, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, + 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, + 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2164, 2190, 2165, + 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, + 2201, 2203, 2202, 2204, 2205, 2206, 2207, 2208, 2209, 2210, + 2211, 2212, 2213, 2214, 2215, 2216, 2217, 2218, 2219, 2220, + 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2201, 2202, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2235, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, - 2249, 2250, 2251, 2252, 2227, 2253, 2254, 2255, 2256, 2257, - 2258, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, + 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2258, + 2259, 2260, 2235, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2284, 2285, 2286, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2301, 2302, 2303, 2304, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, - 2319, 2318, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, + 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2327, 2326, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2336, 2337, 2338, 2339, 2340, 2341, 2342, 2343, 2344, 2345, 2346, 2347, 2348, 2349, 2350, 2351, 2352, 2353, 2354, 2355, 2356, 2357, 2358, 2359, 2360, 2361, 2362, 2363, 2364, 2365, 2366, 2367, - 12, 12, 12, 36, 36, 36, 79, 98, 79, 100, - 100, 100, 115, 115, 115, 188, 883, 188, 209, 209, - 209, 882, 881, 880, 879, 878, 875, 874, 873, 872, - 871, 870, 869, 868, 867, 866, 865, 864, 863, 862, - 861, 860, 859, 858, 857, 856, 855, 854, 853, 852, - 851, 850, 849, 848, 847, 846, 845, 844, 840, 839, - 836, 835, 834, 833, 832, 831, 830, 829, 828, 827, - 826, 825, 824, 823, 822, 821, 820, 819, 818, 815, - 814, 813, 812, 811, 810, 809, 808, 807, 806, 805, - 804, 803, 802, 801, 800, 799, 798, 797, 796, 795, - - 794, 793, 792, 791, 790, 789, 788, 787, 784, 783, - 782, 781, 780, 779, 778, 777, 776, 775, 774, 773, - 772, 769, 768, 767, 766, 765, 764, 761, 760, 759, - 757, 751, 750, 749, 748, 747, 746, 745, 742, 741, - 740, 739, 738, 737, 736, 735, 734, 733, 732, 731, - 730, 729, 728, 727, 726, 725, 722, 721, 720, 719, - 718, 717, 716, 715, 714, 713, 712, 711, 710, 709, - 708, 707, 706, 705, 704, 703, 702, 701, 700, 699, - 698, 697, 696, 695, 694, 693, 692, 691, 689, 688, - 687, 686, 685, 684, 683, 680, 679, 678, 677, 676, - - 675, 674, 673, 672, 671, 670, 669, 668, 667, 666, - 665, 664, 663, 662, 661, 658, 657, 656, 655, 654, - 653, 652, 651, 650, 649, 648, 644, 643, 634, 633, - 632, 631, 630, 629, 628, 627, 626, 623, 622, 621, - 620, 619, 618, 617, 616, 614, 610, 609, 608, 607, - 605, 604, 603, 602, 601, 600, 597, 596, 595, 594, - 593, 592, 591, 590, 589, 588, 587, 586, 585, 584, - 583, 582, 581, 580, 579, 578, 575, 574, 573, 572, - 571, 570, 569, 568, 565, 564, 563, 560, 559, 558, - 554, 553, 552, 551, 550, 549, 548, 547, 546, 545, - - 544, 543, 542, 538, 537, 536, 535, 534, 530, 529, - 528, 527, 526, 525, 524, 523, 522, 521, 520, 519, - 511, 510, 509, 508, 507, 506, 505, 504, 503, 502, - 501, 500, 499, 498, 495, 494, 493, 492, 491, 490, - 489, 488, 487, 486, 485, 484, 483, 482, 481, 480, - 479, 478, 477, 476, 473, 471, 469, 468, 465, 463, - 458, 455, 450, 449, 448, 447, 445, 444, 443, 441, - 440, 439, 434, 433, 432, 431, 430, 429, 428, 427, - 426, 425, 424, 423, 422, 419, 416, 415, 414, 413, - 412, 411, 410, 409, 406, 403, 402, 401, 400, 399, - - 397, 396, 395, 394, 390, 389, 388, 387, 386, 385, - 384, 381, 380, 379, 378, 377, 376, 375, 374, 373, - 372, 371, 370, 369, 368, 367, 366, 365, 364, 363, - 362, 361, 360, 359, 358, 357, 351, 350, 349, 348, - 347, 346, 345, 344, 343, 342, 341, 340, 338, 210, - 335, 333, 328, 325, 324, 317, 316, 315, 311, 309, - 305, 304, 303, 300, 299, 298, 283, 282, 279, 274, - 273, 270, 267, 266, 265, 264, 261, 260, 259, 256, - 255, 254, 253, 252, 251, 250, 241, 238, 237, 236, - 235, 234, 231, 230, 229, 225, 222, 218, 217, 216, - - 215, 210, 204, 200, 197, 196, 195, 186, 166, 148, - 106, 103, 43, 99, 97, 96, 87, 43, 2368, 11, - 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, - 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, - 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, - 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, - 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, - 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, - 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, - 2368, 2368, 2368, 2368, 2368, 2368 - + 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 12, 12, + 12, 36, 36, 36, 79, 98, 79, 100, 100, 100, + 115, 115, 115, 188, 883, 188, 209, 209, 209, 882, + 881, 880, 879, 878, 875, 874, 873, 872, 871, 870, + 869, 868, 867, 866, 865, 864, 863, 862, 861, 860, + 859, 858, 857, 856, 855, 854, 853, 852, 851, 850, + 849, 848, 847, 846, 845, 844, 840, 839, 836, 835, + 834, 833, 832, 831, 830, 829, 828, 827, 826, 825, + 824, 823, 822, 821, 820, 819, 818, 815, 814, 813, + 812, 811, 810, 809, 808, 807, 806, 805, 804, 803, + + 802, 801, 800, 799, 798, 797, 796, 795, 794, 793, + 792, 791, 790, 789, 788, 787, 784, 783, 782, 781, + 780, 779, 778, 777, 776, 775, 774, 773, 772, 769, + 768, 767, 766, 765, 764, 761, 760, 759, 757, 751, + 750, 749, 748, 747, 746, 745, 742, 741, 740, 739, + 738, 737, 736, 735, 734, 733, 732, 731, 730, 729, + 728, 727, 726, 725, 722, 721, 720, 719, 718, 717, + 716, 715, 714, 713, 712, 711, 710, 709, 708, 707, + 706, 705, 704, 703, 702, 701, 700, 699, 698, 697, + 696, 695, 694, 693, 692, 691, 689, 688, 687, 686, + + 685, 684, 683, 680, 679, 678, 677, 676, 675, 674, + 673, 672, 671, 670, 669, 668, 667, 666, 665, 664, + 663, 662, 661, 658, 657, 656, 655, 654, 653, 652, + 651, 650, 649, 648, 644, 643, 634, 633, 632, 631, + 630, 629, 628, 627, 626, 623, 622, 621, 620, 619, + 618, 617, 616, 614, 610, 609, 608, 607, 605, 604, + 603, 602, 601, 600, 597, 596, 595, 594, 593, 592, + 591, 590, 589, 588, 587, 586, 585, 584, 583, 582, + 581, 580, 579, 578, 575, 574, 573, 572, 571, 570, + 569, 568, 565, 564, 563, 560, 559, 558, 554, 553, + + 552, 551, 550, 549, 548, 547, 546, 545, 544, 543, + 542, 538, 537, 536, 535, 534, 530, 529, 528, 527, + 526, 525, 524, 523, 522, 521, 520, 519, 511, 510, + 509, 508, 507, 506, 505, 504, 503, 502, 501, 500, + 499, 498, 495, 494, 493, 492, 491, 490, 489, 488, + 487, 486, 485, 484, 483, 482, 481, 480, 479, 478, + 477, 476, 473, 471, 469, 468, 465, 463, 458, 455, + 450, 449, 448, 447, 445, 444, 443, 441, 440, 439, + 434, 433, 432, 431, 430, 429, 428, 427, 426, 425, + 424, 423, 422, 419, 416, 415, 414, 413, 412, 411, + + 410, 409, 406, 403, 402, 401, 400, 399, 397, 396, + 395, 394, 390, 389, 388, 387, 386, 385, 384, 381, + 380, 379, 378, 377, 376, 375, 374, 373, 372, 371, + 370, 369, 368, 367, 366, 365, 364, 363, 362, 361, + 360, 359, 358, 357, 351, 350, 349, 348, 347, 346, + 345, 344, 343, 342, 341, 340, 338, 210, 335, 333, + 328, 325, 324, 317, 316, 315, 311, 309, 305, 304, + 303, 300, 299, 298, 283, 282, 279, 274, 273, 270, + 267, 266, 265, 264, 261, 260, 259, 256, 255, 254, + 253, 252, 251, 250, 241, 238, 237, 236, 235, 234, + + 231, 230, 229, 225, 222, 218, 217, 216, 215, 210, + 204, 200, 197, 196, 195, 186, 166, 148, 106, 103, + 43, 99, 97, 96, 87, 43, 2376, 11, 2376, 2376, + 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, + 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, + 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, + 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, + 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, + 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, + 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, + + 2376, 2376, 2376, 2376 } ; -static const flex_int16_t yy_chk[2897] = +static const flex_int16_t yy_chk[2905] = { 0, 0, 1, 1, 1, 0, 1, 1, 44, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -1968,220 +1972,221 @@ static const flex_int16_t yy_chk[2897] = 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 914, 915, 916, 917, 918, 919, 920, 892, 921, 922, 893, 923, 924, - 896, 925, 926, 927, 928, 929, 930, 931, 932, 933, - 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, - 944, 945, 946, 948, 949, 950, 951, 952, 953, 954, - 955, 956, 952, 957, 958, 959, 960, 961, 962, 963, - - 964, 965, 968, 969, 970, 971, 972, 973, 975, 976, - 977, 978, 979, 980, 981, 983, 984, 985, 986, 987, - 988, 985, 989, 990, 991, 992, 996, 997, 998, 999, - 992, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, - 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, - 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1029, - 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, - 1040, 1041, 1042, 1043, 1044, 1045, 1048, 1046, 1049, 1050, - 1047, 1051, 1052, 1053, 1054, 1055, 1057, 1058, 1059, 1060, - 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, - - 1071, 1044, 1043, 1072, 1045, 1046, 1047, 1073, 1074, 1075, - 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, - 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, - 1096, 1097, 1098, 1099, 1101, 1102, 1103, 1104, 1105, 1106, - 1107, 1108, 1109, 1111, 1112, 1113, 1114, 1115, 1116, 1117, - 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, - 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, - 1139, 1140, 1141, 1142, 1144, 1145, 1146, 1147, 1148, 1149, - 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, - 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, - - 1171, 1107, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, - 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1189, 1188, - 1190, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1200, 1201, - 1202, 1203, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, - 1213, 1214, 1215, 1216, 1217, 1186, 1188, 1189, 1190, 1218, - 1219, 1220, 1221, 1222, 1224, 1225, 1226, 1228, 1229, 1230, - 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, - 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1249, 1250, 1251, - 1252, 1253, 1249, 1254, 1255, 1256, 1257, 1258, 1259, 1260, - 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, - - 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, - 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, - 1292, 1294, 1295, 1296, 1298, 1250, 1299, 1300, 1301, 1302, - 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, - 1313, 1314, 1315, 1316, 1317, 1318, 1320, 1321, 1322, 1324, - 1325, 1326, 1328, 1327, 1329, 1330, 1331, 1332, 1333, 1334, - 1335, 1336, 1337, 1339, 1340, 1341, 1342, 1343, 1344, 1345, - 1347, 1348, 1349, 1350, 1351, 1352, 1325, 1353, 1324, 1327, - 1326, 1328, 1354, 1355, 1357, 1358, 1359, 1360, 1361, 1362, - 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, - - 1373, 1374, 1375, 1376, 1377, 1379, 1380, 1382, 1384, 1385, - 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, - 1396, 1397, 1399, 1401, 1402, 1403, 1404, 1405, 1407, 1408, - 1409, 1410, 1412, 1413, 1415, 1416, 1417, 1418, 1419, 1420, - 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1431, - 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1443, - 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, - 1454, 1455, 1456, 1457, 1459, 1460, 1461, 1462, 1463, 1464, - 1465, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, - 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1454, 1455, 1483, - - 1484, 1456, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, - 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, - 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1467, 1512, - 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1523, - 1515, 1524, 1525, 1527, 1528, 1529, 1530, 1531, 1532, 1533, - 1534, 1535, 1536, 1537, 1539, 1540, 1541, 1542, 1543, 1545, - 1540, 1545, 1546, 1548, 1549, 1550, 1554, 1555, 1556, 1557, - 1558, 1559, 1560, 1561, 1562, 1564, 1565, 1566, 1567, 1568, - 1569, 1570, 1573, 1567, 1571, 1574, 1575, 1576, 1577, 1578, - 1579, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, - - 1590, 1591, 1592, 1593, 1594, 1570, 1569, 1595, 1568, 1596, - 1571, 1597, 1598, 1599, 1601, 1602, 1603, 1605, 1606, 1607, - 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1617, 1618, - 1619, 1621, 1623, 1570, 1624, 1626, 1627, 1628, 1629, 1630, - 1631, 1632, 1633, 1634, 1636, 1637, 1638, 1639, 1640, 1641, - 1642, 1643, 1644, 1647, 1648, 1650, 1652, 1653, 1652, 1654, - 1655, 1652, 1656, 1657, 1652, 1658, 1659, 1660, 1661, 1662, - 1663, 1664, 1665, 1666, 1667, 1668, 1670, 1672, 1673, 1675, - 1676, 1677, 1679, 1678, 1680, 1681, 1683, 1685, 1686, 1688, - 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1698, 1699, 1697, - - 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1676, 1677, 1678, - 1697, 1679, 1680, 1707, 1708, 1709, 1710, 1711, 1712, 1713, - 1714, 1715, 1716, 1717, 1718, 1719, 1719, 1720, 1721, 1722, - 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, - 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, - 1743, 1745, 1746, 1747, 1748, 1694, 1749, 1750, 1751, 1752, - 1753, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, - 1764, 1765, 1767, 1768, 1769, 1771, 1772, 1773, 1775, 1774, - 1776, 1779, 1780, 1783, 1784, 1785, 1787, 1788, 1720, 1789, - 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, - - 1800, 1801, 1803, 1773, 1805, 1772, 1774, 1775, 1806, 1776, - 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1816, 1817, - 1818, 1819, 1820, 1822, 1823, 1825, 1826, 1827, 1829, 1830, - 1831, 1833, 1834, 1835, 1838, 1839, 1840, 1841, 1842, 1843, - 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, - 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1863, 1864, 1865, - 1866, 1867, 1868, 1870, 1871, 1872, 1875, 1876, 1877, 1878, - 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, - 1889, 1890, 1891, 1892, 1893, 1864, 1866, 1894, 1895, 1897, - 1898, 1899, 1901, 1902, 1903, 1904, 1905, 1907, 1908, 1909, - - 1910, 1911, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, - 1921, 1922, 1923, 1924, 1925, 1927, 1928, 1930, 1932, 1933, - 1935, 1936, 1930, 1937, 1938, 1940, 1942, 1945, 1943, 1947, - 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1956, 1957, 1958, - 1959, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, - 1970, 1971, 1972, 1942, 1943, 1973, 1974, 1975, 1976, 1977, - 1979, 1980, 1981, 1983, 1984, 1985, 1986, 1987, 1988, 1989, - 1990, 1991, 1992, 1993, 1995, 1997, 1998, 1999, 2000, 2001, - 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, - 2014, 2015, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, - - 2025, 2026, 2027, 2028, 2029, 2030, 2032, 2005, 2006, 2033, - 2007, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2044, - 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2052, 2053, 2054, - 2055, 2056, 2054, 2057, 2058, 2059, 2060, 2061, 2062, 2063, - 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2074, - 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, - 2085, 2086, 2059, 2061, 2087, 2089, 2092, 2094, 2095, 2096, - 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, - 2107, 2108, 2109, 2110, 2112, 2114, 2115, 2116, 2117, 2118, - 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, - - 2129, 2130, 2132, 2133, 2134, 2135, 2136, 2137, 2139, 2110, - 2141, 2112, 2143, 2145, 2146, 2147, 2148, 2149, 2150, 2151, - 2153, 2155, 2156, 2158, 2157, 2159, 2160, 2161, 2162, 2163, - 2164, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2174, 2175, - 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2156, - 2157, 2185, 2186, 2188, 2189, 2190, 2191, 2192, 2193, 2194, - 2195, 2196, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2205, - 2206, 2208, 2209, 2210, 2211, 2212, 2213, 2214, 2215, 2216, - 2217, 2218, 2219, 2220, 2193, 2221, 2222, 2223, 2224, 2225, - 2226, 2227, 2230, 2231, 2232, 2234, 2235, 2236, 2237, 2239, - - 2240, 2241, 2242, 2243, 2244, 2245, 2248, 2249, 2252, 2253, - 2254, 2255, 2256, 2257, 2258, 2260, 2261, 2263, 2264, 2265, - 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2276, 2277, - 2278, 2279, 2280, 2281, 2283, 2284, 2286, 2288, 2289, 2290, - 2291, 2292, 2293, 2294, 2295, 2296, 2298, 2299, 2300, 2301, - 2302, 2301, 2303, 2304, 2305, 2306, 2308, 2309, 2311, 2314, - 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, - 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2334, 2335, - 2337, 2338, 2339, 2342, 2343, 2344, 2345, 2347, 2348, 2350, - 2351, 2353, 2355, 2356, 2358, 2359, 2360, 2361, 2362, 2364, - - 2369, 2369, 2369, 2370, 2370, 2370, 2371, 2372, 2371, 2373, - 2373, 2373, 2374, 2374, 2374, 2375, 740, 2375, 2376, 2376, - 2376, 739, 738, 737, 736, 735, 733, 732, 731, 730, - 728, 727, 726, 725, 724, 723, 722, 721, 720, 719, - 718, 717, 716, 714, 713, 712, 711, 709, 708, 707, - 706, 704, 703, 702, 701, 700, 699, 698, 696, 695, - 693, 692, 691, 690, 689, 688, 687, 686, 685, 684, - 683, 682, 681, 680, 679, 678, 677, 676, 675, 673, - 672, 671, 670, 669, 668, 666, 665, 664, 663, 662, - 661, 660, 658, 657, 656, 655, 654, 653, 652, 651, - - 650, 649, 648, 647, 646, 645, 644, 643, 641, 640, - 639, 638, 637, 636, 635, 634, 633, 632, 631, 630, - 629, 627, 626, 625, 624, 623, 622, 620, 618, 617, - 614, 606, 605, 604, 603, 602, 601, 600, 597, 596, - 593, 592, 590, 589, 588, 587, 586, 585, 584, 583, - 582, 581, 580, 579, 578, 577, 575, 574, 573, 572, - 571, 570, 569, 568, 567, 566, 565, 564, 563, 562, - 561, 560, 559, 557, 556, 554, 553, 552, 551, 550, - 549, 548, 547, 546, 545, 544, 543, 542, 540, 539, - 537, 536, 535, 534, 533, 531, 530, 529, 528, 527, - - 526, 525, 524, 523, 522, 521, 520, 519, 518, 517, - 515, 514, 513, 511, 510, 508, 507, 506, 505, 504, - 503, 502, 501, 500, 498, 497, 495, 494, 491, 490, - 489, 488, 487, 486, 484, 483, 482, 480, 479, 478, - 477, 476, 475, 474, 473, 471, 466, 464, 463, 462, - 460, 459, 458, 455, 454, 453, 451, 450, 449, 447, - 446, 445, 444, 443, 442, 441, 440, 439, 438, 437, - 436, 435, 434, 433, 432, 431, 429, 428, 427, 426, - 425, 424, 423, 422, 420, 419, 418, 416, 414, 413, - 411, 410, 409, 408, 407, 406, 405, 404, 403, 402, - - 401, 400, 399, 396, 395, 394, 393, 392, 390, 389, - 388, 387, 386, 385, 384, 383, 382, 381, 380, 379, - 376, 375, 374, 373, 372, 371, 370, 369, 368, 367, - 366, 365, 364, 363, 361, 360, 359, 358, 357, 356, - 355, 354, 353, 352, 351, 350, 349, 348, 347, 346, - 345, 344, 343, 342, 340, 338, 336, 334, 330, 328, - 324, 317, 314, 313, 312, 311, 309, 308, 307, 305, - 304, 303, 300, 299, 298, 297, 296, 295, 294, 293, - 292, 291, 290, 289, 288, 286, 284, 283, 282, 281, - 280, 279, 278, 277, 275, 273, 272, 271, 270, 269, - - 267, 266, 265, 264, 262, 261, 260, 259, 258, 257, - 256, 254, 253, 251, 250, 249, 248, 247, 246, 245, - 244, 243, 242, 241, 240, 239, 238, 237, 236, 235, - 234, 233, 232, 231, 230, 229, 226, 225, 224, 223, - 222, 221, 220, 219, 218, 217, 216, 215, 213, 209, - 207, 205, 200, 197, 195, 187, 186, 185, 182, 180, - 177, 176, 175, 173, 172, 171, 167, 166, 164, 162, - 161, 159, 157, 156, 155, 154, 152, 151, 150, 148, - 147, 146, 145, 144, 143, 142, 138, 136, 135, 134, - 133, 132, 130, 129, 128, 126, 124, 122, 121, 120, - - 119, 115, 110, 106, 103, 98, 97, 77, 72, 66, - 50, 47, 43, 41, 39, 38, 24, 14, 11, 2368, - 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, - 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, - 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, - 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, - 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, - 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, - 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, 2368, - 2368, 2368, 2368, 2368, 2368, 2368 + 896, 925, 926, 927, 928, 929, 930, 931, 927, 932, + 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, + 943, 944, 945, 946, 948, 949, 950, 951, 952, 953, + 954, 955, 956, 952, 957, 958, 959, 960, 961, 962, + + 963, 964, 965, 968, 969, 970, 971, 972, 973, 975, + 976, 977, 978, 979, 980, 981, 983, 984, 985, 986, + 987, 988, 985, 989, 990, 991, 992, 996, 997, 998, + 999, 992, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, + 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, + 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, + 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, + 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1048, 1046, 1049, + 1050, 1047, 1051, 1052, 1053, 1054, 1055, 1057, 1058, 1059, + 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, + + 1070, 1071, 1044, 1043, 1072, 1045, 1046, 1047, 1073, 1074, + 1075, 1077, 1078, 1079, 1077, 1080, 1081, 1082, 1083, 1084, + 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, + 1095, 1096, 1097, 1098, 1099, 1100, 1102, 1103, 1104, 1105, + 1106, 1107, 1108, 1109, 1110, 1112, 1113, 1114, 1115, 1116, + 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, + 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, + 1137, 1138, 1140, 1141, 1142, 1143, 1145, 1146, 1147, 1148, + 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, + 1159, 1160, 1161, 1162, 1164, 1165, 1166, 1167, 1168, 1169, + + 1170, 1171, 1172, 1108, 1173, 1174, 1175, 1176, 1177, 1178, + 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, + 1190, 1189, 1191, 1193, 1194, 1195, 1196, 1197, 1198, 1199, + 1201, 1202, 1203, 1204, 1206, 1207, 1208, 1209, 1210, 1211, + 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1187, 1189, 1190, + 1191, 1219, 1220, 1221, 1222, 1223, 1224, 1226, 1227, 1219, + 1228, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, + 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, + 1249, 1251, 1252, 1253, 1254, 1255, 1251, 1256, 1257, 1258, + 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, + 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, + 1279, 1280, 1281, 1282, 1284, 1285, 1286, 1287, 1288, 1289, + 1290, 1291, 1292, 1293, 1294, 1296, 1297, 1298, 1300, 1252, + 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, + 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, + 1322, 1323, 1324, 1326, 1327, 1328, 1330, 1329, 1331, 1332, + 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1341, 1342, 1343, + 1344, 1345, 1346, 1347, 1349, 1350, 1351, 1352, 1353, 1354, + 1327, 1355, 1326, 1329, 1328, 1330, 1356, 1357, 1358, 1359, + 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, + + 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, + 1381, 1383, 1384, 1386, 1388, 1389, 1390, 1391, 1392, 1393, + 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1403, 1405, + 1406, 1407, 1408, 1409, 1411, 1412, 1413, 1414, 1416, 1417, + 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, + 1429, 1430, 1431, 1432, 1433, 1435, 1436, 1437, 1438, 1439, + 1440, 1441, 1442, 1443, 1444, 1447, 1448, 1449, 1450, 1451, + 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, + 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1471, 1472, 1473, + 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, + + 1484, 1485, 1486, 1458, 1459, 1487, 1488, 1460, 1489, 1490, + 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1499, 1500, 1501, + 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, + 1512, 1513, 1514, 1515, 1471, 1516, 1517, 1518, 1519, 1520, + 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1529, 1521, 1530, + 1531, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, + 1542, 1543, 1545, 1546, 1547, 1548, 1549, 1551, 1546, 1551, + 1552, 1554, 1555, 1556, 1560, 1561, 1562, 1563, 1564, 1565, + 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, + 1579, 1573, 1577, 1580, 1581, 1582, 1583, 1584, 1585, 1587, + + 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, + 1598, 1599, 1602, 1576, 1575, 1603, 1574, 1604, 1577, 1605, + 1606, 1607, 1609, 1610, 1611, 1613, 1614, 1615, 1616, 1617, + 1618, 1619, 1620, 1621, 1622, 1623, 1625, 1626, 1627, 1629, + 1631, 1576, 1632, 1634, 1635, 1636, 1637, 1638, 1639, 1640, + 1641, 1642, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, + 1652, 1655, 1656, 1658, 1660, 1661, 1660, 1662, 1663, 1660, + 1664, 1665, 1660, 1666, 1667, 1668, 1669, 1670, 1671, 1672, + 1673, 1674, 1675, 1676, 1678, 1680, 1681, 1683, 1684, 1685, + 1687, 1686, 1688, 1689, 1691, 1693, 1694, 1696, 1698, 1699, + + 1700, 1701, 1702, 1703, 1704, 1706, 1707, 1705, 1708, 1709, + 1710, 1711, 1712, 1713, 1714, 1684, 1685, 1686, 1705, 1687, + 1688, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, + 1724, 1725, 1726, 1727, 1727, 1728, 1729, 1730, 1731, 1732, + 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, + 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1753, + 1754, 1755, 1756, 1702, 1757, 1758, 1759, 1760, 1761, 1763, + 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, + 1775, 1776, 1777, 1779, 1780, 1781, 1783, 1782, 1784, 1787, + 1788, 1791, 1792, 1793, 1795, 1796, 1728, 1797, 1798, 1799, + + 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, + 1811, 1781, 1813, 1780, 1782, 1783, 1814, 1784, 1815, 1816, + 1817, 1818, 1819, 1820, 1821, 1822, 1824, 1825, 1826, 1827, + 1828, 1830, 1831, 1833, 1834, 1835, 1837, 1838, 1839, 1841, + 1842, 1843, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, + 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1863, 1864, + 1865, 1866, 1867, 1868, 1869, 1871, 1872, 1873, 1874, 1875, + 1876, 1878, 1879, 1880, 1883, 1884, 1885, 1886, 1887, 1888, + 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, + 1899, 1900, 1901, 1872, 1874, 1902, 1903, 1905, 1906, 1907, + + 1909, 1910, 1911, 1912, 1913, 1915, 1916, 1917, 1918, 1919, + 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, + 1931, 1932, 1933, 1935, 1936, 1938, 1940, 1941, 1943, 1944, + 1938, 1945, 1946, 1948, 1950, 1953, 1951, 1955, 1956, 1957, + 1958, 1959, 1960, 1961, 1962, 1964, 1965, 1966, 1967, 1969, + 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, + 1980, 1950, 1951, 1981, 1982, 1983, 1984, 1985, 1987, 1988, + 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, + 2000, 2001, 2003, 2005, 2006, 2007, 2008, 2009, 2012, 2013, + 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, + + 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, + 2035, 2036, 2037, 2038, 2040, 2013, 2014, 2041, 2015, 2043, + 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2052, 2053, 2054, + 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, + 2062, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, + 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2082, 2083, 2084, + 2085, 2086, 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2094, + 2067, 2069, 2095, 2097, 2100, 2102, 2103, 2104, 2105, 2106, + 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2114, 2115, 2116, + 2117, 2118, 2120, 2122, 2123, 2124, 2125, 2126, 2127, 2128, + + 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, + 2140, 2141, 2142, 2143, 2144, 2145, 2147, 2118, 2149, 2120, + 2151, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2161, 2163, + 2164, 2166, 2165, 2167, 2168, 2169, 2170, 2171, 2172, 2174, + 2175, 2176, 2177, 2178, 2179, 2180, 2182, 2183, 2184, 2185, + 2186, 2187, 2188, 2189, 2190, 2191, 2192, 2164, 2165, 2193, + 2194, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, + 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2213, 2214, 2216, + 2217, 2218, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, + 2227, 2228, 2201, 2229, 2230, 2231, 2232, 2233, 2234, 2235, + + 2238, 2239, 2240, 2242, 2243, 2244, 2245, 2247, 2248, 2249, + 2250, 2251, 2252, 2253, 2256, 2257, 2260, 2261, 2262, 2263, + 2264, 2265, 2266, 2268, 2269, 2271, 2272, 2273, 2274, 2275, + 2276, 2277, 2278, 2279, 2280, 2281, 2284, 2285, 2286, 2287, + 2288, 2289, 2291, 2292, 2294, 2296, 2297, 2298, 2299, 2300, + 2301, 2302, 2303, 2304, 2306, 2307, 2308, 2309, 2310, 2309, + 2311, 2312, 2313, 2314, 2316, 2317, 2319, 2322, 2323, 2324, + 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, + 2335, 2336, 2337, 2338, 2339, 2340, 2342, 2343, 2345, 2346, + 2347, 2350, 2351, 2352, 2353, 2355, 2356, 2358, 2359, 2361, + + 2363, 2364, 2366, 2367, 2368, 2369, 2370, 2372, 2377, 2377, + 2377, 2378, 2378, 2378, 2379, 2380, 2379, 2381, 2381, 2381, + 2382, 2382, 2382, 2383, 740, 2383, 2384, 2384, 2384, 739, + 738, 737, 736, 735, 733, 732, 731, 730, 728, 727, + 726, 725, 724, 723, 722, 721, 720, 719, 718, 717, + 716, 714, 713, 712, 711, 709, 708, 707, 706, 704, + 703, 702, 701, 700, 699, 698, 696, 695, 693, 692, + 691, 690, 689, 688, 687, 686, 685, 684, 683, 682, + 681, 680, 679, 678, 677, 676, 675, 673, 672, 671, + 670, 669, 668, 666, 665, 664, 663, 662, 661, 660, + + 658, 657, 656, 655, 654, 653, 652, 651, 650, 649, + 648, 647, 646, 645, 644, 643, 641, 640, 639, 638, + 637, 636, 635, 634, 633, 632, 631, 630, 629, 627, + 626, 625, 624, 623, 622, 620, 618, 617, 614, 606, + 605, 604, 603, 602, 601, 600, 597, 596, 593, 592, + 590, 589, 588, 587, 586, 585, 584, 583, 582, 581, + 580, 579, 578, 577, 575, 574, 573, 572, 571, 570, + 569, 568, 567, 566, 565, 564, 563, 562, 561, 560, + 559, 557, 556, 554, 553, 552, 551, 550, 549, 548, + 547, 546, 545, 544, 543, 542, 540, 539, 537, 536, + + 535, 534, 533, 531, 530, 529, 528, 527, 526, 525, + 524, 523, 522, 521, 520, 519, 518, 517, 515, 514, + 513, 511, 510, 508, 507, 506, 505, 504, 503, 502, + 501, 500, 498, 497, 495, 494, 491, 490, 489, 488, + 487, 486, 484, 483, 482, 480, 479, 478, 477, 476, + 475, 474, 473, 471, 466, 464, 463, 462, 460, 459, + 458, 455, 454, 453, 451, 450, 449, 447, 446, 445, + 444, 443, 442, 441, 440, 439, 438, 437, 436, 435, + 434, 433, 432, 431, 429, 428, 427, 426, 425, 424, + 423, 422, 420, 419, 418, 416, 414, 413, 411, 410, + + 409, 408, 407, 406, 405, 404, 403, 402, 401, 400, + 399, 396, 395, 394, 393, 392, 390, 389, 388, 387, + 386, 385, 384, 383, 382, 381, 380, 379, 376, 375, + 374, 373, 372, 371, 370, 369, 368, 367, 366, 365, + 364, 363, 361, 360, 359, 358, 357, 356, 355, 354, + 353, 352, 351, 350, 349, 348, 347, 346, 345, 344, + 343, 342, 340, 338, 336, 334, 330, 328, 324, 317, + 314, 313, 312, 311, 309, 308, 307, 305, 304, 303, + 300, 299, 298, 297, 296, 295, 294, 293, 292, 291, + 290, 289, 288, 286, 284, 283, 282, 281, 280, 279, + + 278, 277, 275, 273, 272, 271, 270, 269, 267, 266, + 265, 264, 262, 261, 260, 259, 258, 257, 256, 254, + 253, 251, 250, 249, 248, 247, 246, 245, 244, 243, + 242, 241, 240, 239, 238, 237, 236, 235, 234, 233, + 232, 231, 230, 229, 226, 225, 224, 223, 222, 221, + 220, 219, 218, 217, 216, 215, 213, 209, 207, 205, + 200, 197, 195, 187, 186, 185, 182, 180, 177, 176, + 175, 173, 172, 171, 167, 166, 164, 162, 161, 159, + 157, 156, 155, 154, 152, 151, 150, 148, 147, 146, + 145, 144, 143, 142, 138, 136, 135, 134, 133, 132, + + 130, 129, 128, 126, 124, 122, 121, 120, 119, 115, + 110, 106, 103, 98, 97, 77, 72, 66, 50, 47, + 43, 41, 39, 38, 24, 14, 11, 2376, 2376, 2376, + 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, + 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, + 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, + 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, + 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, + 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, + 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, + + 2376, 2376, 2376, 2376 } ; static yy_state_type yy_last_accepting_state; @@ -2190,7 +2195,7 @@ static char *yy_last_accepting_cpos; extern int yy_flex_debug; int yy_flex_debug = 1; -static const flex_int16_t yy_rule_linenum[239] = +static const flex_int16_t yy_rule_linenum[242] = { 0, 147, 149, 151, 156, 157, 162, 163, 164, 176, 178, 183, 189, 198, 207, 216, 225, 234, 243, 252, 262, @@ -2200,24 +2205,25 @@ static const flex_int16_t yy_rule_linenum[239] = 571, 582, 593, 602, 614, 626, 638, 649, 661, 673, 685, 696, 707, 716, 725, 734, 745, 754, 763, 774, 785, 796, 807, 818, 829, 840, 851, 862, 871, 880, - 889, 898, 909, 919, 930, 939, 949, 963, 980, 989, - 998, 1007, 1016, 1025, 1034, 1059, 1084, 1093, 1103, 1112, - - 1123, 1134, 1145, 1155, 1164, 1175, 1186, 1197, 1208, 1219, - 1228, 1237, 1246, 1255, 1264, 1273, 1282, 1291, 1300, 1309, - 1323, 1334, 1345, 1357, 1366, 1375, 1384, 1393, 1403, 1413, - 1423, 1433, 1443, 1453, 1462, 1472, 1481, 1490, 1499, 1508, - 1518, 1527, 1536, 1545, 1554, 1563, 1572, 1581, 1590, 1599, - 1608, 1617, 1626, 1635, 1644, 1653, 1662, 1671, 1680, 1689, - 1698, 1707, 1716, 1725, 1734, 1743, 1752, 1761, 1770, 1779, - 1788, 1797, 1806, 1815, 1824, 1833, 1842, 1851, 1860, 1869, - 1878, 1887, 1896, 1905, 1914, 1923, 1932, 1941, 1950, 1959, - 1970, 1981, 1991, 2001, 2011, 2021, 2031, 2041, 2051, 2061, - - 2071, 2080, 2089, 2098, 2107, 2118, 2129, 2142, 2155, 2168, - 2177, 2186, 2195, 2204, 2213, 2222, 2231, 2240, 2252, 2261, - 2362, 2378, 2427, 2435, 2450, 2451, 2452, 2453, 2454, 2455, - 2457, 2475, 2488, 2493, 2497, 2499, 2501, 2503 + 889, 898, 909, 920, 931, 942, 952, 963, 972, 982, + 996, 1013, 1022, 1031, 1040, 1049, 1058, 1067, 1092, 1117, + + 1126, 1136, 1145, 1156, 1167, 1178, 1188, 1197, 1208, 1219, + 1230, 1241, 1252, 1261, 1270, 1279, 1288, 1297, 1306, 1315, + 1324, 1333, 1342, 1356, 1367, 1378, 1390, 1399, 1408, 1417, + 1426, 1436, 1446, 1456, 1466, 1476, 1486, 1495, 1505, 1514, + 1523, 1532, 1541, 1551, 1560, 1569, 1578, 1587, 1596, 1605, + 1614, 1623, 1632, 1641, 1650, 1659, 1668, 1677, 1686, 1695, + 1704, 1713, 1722, 1731, 1740, 1749, 1758, 1767, 1776, 1785, + 1794, 1803, 1812, 1821, 1830, 1839, 1848, 1857, 1866, 1875, + 1884, 1893, 1902, 1911, 1920, 1929, 1938, 1947, 1956, 1965, + 1974, 1983, 1992, 2003, 2014, 2024, 2034, 2044, 2054, 2064, + + 2074, 2084, 2094, 2104, 2113, 2122, 2131, 2140, 2151, 2162, + 2175, 2188, 2201, 2210, 2219, 2228, 2237, 2246, 2255, 2264, + 2273, 2285, 2294, 2395, 2411, 2460, 2468, 2483, 2484, 2485, + 2486, 2487, 2488, 2490, 2508, 2521, 2526, 2530, 2532, 2534, + 2536 } ; /* The intent behind this definition is that it'll catch @@ -2272,7 +2278,7 @@ using namespace isc::dhcp; /* To avoid the call to exit... oops! */ #define YY_FATAL_ERROR(msg) isc::dhcp::Parser4Context::fatal(msg) -#line 2275 "dhcp4_lexer.cc" +#line 2282 "dhcp4_lexer.cc" /* noyywrap disables automatic rewinding for the next file to parse. Since we always parse only a single string, there's no need to do any wraps. And using yywrap requires linking with -lfl, which provides the default yywrap @@ -2298,8 +2304,8 @@ using namespace isc::dhcp; by moving it ahead by yyleng bytes. yyleng specifies the length of the currently matched token. */ #define YY_USER_ACTION driver.loc_.columns(yyleng); -#line 2301 "dhcp4_lexer.cc" -#line 2302 "dhcp4_lexer.cc" +#line 2308 "dhcp4_lexer.cc" +#line 2309 "dhcp4_lexer.cc" #define INITIAL 0 #define COMMENT 1 @@ -2627,7 +2633,7 @@ YY_DECL } -#line 2630 "dhcp4_lexer.cc" +#line 2637 "dhcp4_lexer.cc" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -2656,13 +2662,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 2369 ) + if ( yy_current_state >= 2377 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } - while ( yy_current_state != 2368 ); + while ( yy_current_state != 2376 ); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); @@ -2681,13 +2687,13 @@ do_action: /* This label is used only to access EOF actions. */ { if ( yy_act == 0 ) fprintf( stderr, "--scanner backing up\n" ); - else if ( yy_act < 239 ) + else if ( yy_act < 242 ) fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n", (long)yy_rule_linenum[yy_act], yytext ); - else if ( yy_act == 239 ) + else if ( yy_act == 242 ) fprintf( stderr, "--accepting default rule (\"%s\")\n", yytext ); - else if ( yy_act == 240 ) + else if ( yy_act == 243 ) fprintf( stderr, "--(end of buffer or a NUL)\n" ); else fprintf( stderr, "--EOF (start condition %d)\n", YY_START ); @@ -3730,6 +3736,48 @@ YY_RULE_SETUP { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: + case isc::dhcp::Parser4Context::SUBNET4: + case isc::dhcp::Parser4Context::SHARED_NETWORK: + return isc::dhcp::Dhcp4Parser::make_DDNS_TTL(driver.loc_); + default: + return isc::dhcp::Dhcp4Parser::make_STRING("ddns-ttl", driver.loc_); + } +} + YY_BREAK +case 84: +YY_RULE_SETUP +#line 920 "dhcp4_lexer.ll" +{ + switch(driver.ctx_) { + case isc::dhcp::Parser4Context::DHCP4: + case isc::dhcp::Parser4Context::SUBNET4: + case isc::dhcp::Parser4Context::SHARED_NETWORK: + return isc::dhcp::Dhcp4Parser::make_DDNS_TTL_MIN(driver.loc_); + default: + return isc::dhcp::Dhcp4Parser::make_STRING("ddns-ttl-min", driver.loc_); + } +} + YY_BREAK +case 85: +YY_RULE_SETUP +#line 931 "dhcp4_lexer.ll" +{ + switch(driver.ctx_) { + case isc::dhcp::Parser4Context::DHCP4: + case isc::dhcp::Parser4Context::SUBNET4: + case isc::dhcp::Parser4Context::SHARED_NETWORK: + return isc::dhcp::Dhcp4Parser::make_DDNS_TTL_MAX(driver.loc_); + default: + return isc::dhcp::Dhcp4Parser::make_STRING("ddns-ttl-max", driver.loc_); + } +} + YY_BREAK +case 86: +YY_RULE_SETUP +#line 942 "dhcp4_lexer.ll" +{ + switch(driver.ctx_) { + case isc::dhcp::Parser4Context::DHCP4: case isc::dhcp::Parser4Context::SHARED_NETWORK: return isc::dhcp::Dhcp4Parser::make_SUBNET4(driver.loc_); default: @@ -3737,9 +3785,9 @@ YY_RULE_SETUP } } YY_BREAK -case 84: +case 87: YY_RULE_SETUP -#line 919 "dhcp4_lexer.ll" +#line 952 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3751,9 +3799,9 @@ YY_RULE_SETUP } } YY_BREAK -case 85: +case 88: YY_RULE_SETUP -#line 930 "dhcp4_lexer.ll" +#line 963 "dhcp4_lexer.ll" { switch (driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3763,9 +3811,9 @@ YY_RULE_SETUP } } YY_BREAK -case 86: +case 89: YY_RULE_SETUP -#line 939 "dhcp4_lexer.ll" +#line 972 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3776,9 +3824,9 @@ YY_RULE_SETUP } } YY_BREAK -case 87: +case 90: YY_RULE_SETUP -#line 949 "dhcp4_lexer.ll" +#line 982 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3793,9 +3841,9 @@ YY_RULE_SETUP } } YY_BREAK -case 88: +case 91: YY_RULE_SETUP -#line 963 "dhcp4_lexer.ll" +#line 996 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LEASE_DATABASE: @@ -3813,9 +3861,9 @@ YY_RULE_SETUP } } YY_BREAK -case 89: +case 92: YY_RULE_SETUP -#line 980 "dhcp4_lexer.ll" +#line 1013 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OPTION_DATA: @@ -3825,9 +3873,9 @@ YY_RULE_SETUP } } YY_BREAK -case 90: +case 93: YY_RULE_SETUP -#line 989 "dhcp4_lexer.ll" +#line 1022 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OPTION_DATA: @@ -3837,9 +3885,9 @@ YY_RULE_SETUP } } YY_BREAK -case 91: +case 94: YY_RULE_SETUP -#line 998 "dhcp4_lexer.ll" +#line 1031 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OPTION_DATA: @@ -3849,9 +3897,9 @@ YY_RULE_SETUP } } YY_BREAK -case 92: +case 95: YY_RULE_SETUP -#line 1007 "dhcp4_lexer.ll" +#line 1040 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: @@ -3861,9 +3909,9 @@ YY_RULE_SETUP } } YY_BREAK -case 93: +case 96: YY_RULE_SETUP -#line 1016 "dhcp4_lexer.ll" +#line 1049 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::POOLS: @@ -3873,9 +3921,9 @@ YY_RULE_SETUP } } YY_BREAK -case 94: +case 97: YY_RULE_SETUP -#line 1025 "dhcp4_lexer.ll" +#line 1058 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::POOLS: @@ -3885,9 +3933,9 @@ YY_RULE_SETUP } } YY_BREAK -case 95: +case 98: YY_RULE_SETUP -#line 1034 "dhcp4_lexer.ll" +#line 1067 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3913,9 +3961,9 @@ YY_RULE_SETUP } } YY_BREAK -case 96: +case 99: YY_RULE_SETUP -#line 1059 "dhcp4_lexer.ll" +#line 1092 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3941,9 +3989,9 @@ YY_RULE_SETUP } } YY_BREAK -case 97: +case 100: YY_RULE_SETUP -#line 1084 "dhcp4_lexer.ll" +#line 1117 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: @@ -3953,9 +4001,9 @@ YY_RULE_SETUP } } YY_BREAK -case 98: +case 101: YY_RULE_SETUP -#line 1093 "dhcp4_lexer.ll" +#line 1126 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: @@ -3966,9 +4014,9 @@ YY_RULE_SETUP } } YY_BREAK -case 99: +case 102: YY_RULE_SETUP -#line 1103 "dhcp4_lexer.ll" +#line 1136 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: @@ -3978,9 +4026,9 @@ YY_RULE_SETUP } } YY_BREAK -case 100: +case 103: YY_RULE_SETUP -#line 1112 "dhcp4_lexer.ll" +#line 1145 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -3992,9 +4040,9 @@ YY_RULE_SETUP } } YY_BREAK -case 101: +case 104: YY_RULE_SETUP -#line 1123 "dhcp4_lexer.ll" +#line 1156 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -4006,9 +4054,9 @@ YY_RULE_SETUP } } YY_BREAK -case 102: +case 105: YY_RULE_SETUP -#line 1134 "dhcp4_lexer.ll" +#line 1167 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -4020,9 +4068,9 @@ YY_RULE_SETUP } } YY_BREAK -case 103: +case 106: YY_RULE_SETUP -#line 1145 "dhcp4_lexer.ll" +#line 1178 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OPTION_DEF: @@ -4033,9 +4081,9 @@ YY_RULE_SETUP } } YY_BREAK -case 104: +case 107: YY_RULE_SETUP -#line 1155 "dhcp4_lexer.ll" +#line 1188 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -4045,9 +4093,9 @@ YY_RULE_SETUP } } YY_BREAK -case 105: +case 108: YY_RULE_SETUP -#line 1164 "dhcp4_lexer.ll" +#line 1197 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -4059,9 +4107,9 @@ YY_RULE_SETUP } } YY_BREAK -case 106: +case 109: YY_RULE_SETUP -#line 1175 "dhcp4_lexer.ll" +#line 1208 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -4073,9 +4121,9 @@ YY_RULE_SETUP } } YY_BREAK -case 107: +case 110: YY_RULE_SETUP -#line 1186 "dhcp4_lexer.ll" +#line 1219 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -4087,9 +4135,9 @@ YY_RULE_SETUP } } YY_BREAK -case 108: +case 111: YY_RULE_SETUP -#line 1197 "dhcp4_lexer.ll" +#line 1230 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -4101,9 +4149,9 @@ YY_RULE_SETUP } } YY_BREAK -case 109: +case 112: YY_RULE_SETUP -#line 1208 "dhcp4_lexer.ll" +#line 1241 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -4115,9 +4163,9 @@ YY_RULE_SETUP } } YY_BREAK -case 110: +case 113: YY_RULE_SETUP -#line 1219 "dhcp4_lexer.ll" +#line 1252 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -4127,9 +4175,9 @@ YY_RULE_SETUP } } YY_BREAK -case 111: +case 114: YY_RULE_SETUP -#line 1228 "dhcp4_lexer.ll" +#line 1261 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LOGGERS: @@ -4139,9 +4187,9 @@ YY_RULE_SETUP } } YY_BREAK -case 112: +case 115: YY_RULE_SETUP -#line 1237 "dhcp4_lexer.ll" +#line 1270 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LOGGERS: @@ -4151,9 +4199,9 @@ YY_RULE_SETUP } } YY_BREAK -case 113: +case 116: YY_RULE_SETUP -#line 1246 "dhcp4_lexer.ll" +#line 1279 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OUTPUT_OPTIONS: @@ -4163,9 +4211,9 @@ YY_RULE_SETUP } } YY_BREAK -case 114: +case 117: YY_RULE_SETUP -#line 1255 "dhcp4_lexer.ll" +#line 1288 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LOGGERS: @@ -4175,9 +4223,9 @@ YY_RULE_SETUP } } YY_BREAK -case 115: +case 118: YY_RULE_SETUP -#line 1264 "dhcp4_lexer.ll" +#line 1297 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OUTPUT_OPTIONS: @@ -4187,9 +4235,9 @@ YY_RULE_SETUP } } YY_BREAK -case 116: +case 119: YY_RULE_SETUP -#line 1273 "dhcp4_lexer.ll" +#line 1306 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OUTPUT_OPTIONS: @@ -4199,9 +4247,9 @@ YY_RULE_SETUP } } YY_BREAK -case 117: +case 120: YY_RULE_SETUP -#line 1282 "dhcp4_lexer.ll" +#line 1315 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OUTPUT_OPTIONS: @@ -4211,9 +4259,9 @@ YY_RULE_SETUP } } YY_BREAK -case 118: +case 121: YY_RULE_SETUP -#line 1291 "dhcp4_lexer.ll" +#line 1324 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OUTPUT_OPTIONS: @@ -4223,9 +4271,9 @@ YY_RULE_SETUP } } YY_BREAK -case 119: +case 122: YY_RULE_SETUP -#line 1300 "dhcp4_lexer.ll" +#line 1333 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LOGGERS: @@ -4235,9 +4283,9 @@ YY_RULE_SETUP } } YY_BREAK -case 120: +case 123: YY_RULE_SETUP -#line 1309 "dhcp4_lexer.ll" +#line 1342 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -4252,9 +4300,9 @@ YY_RULE_SETUP } } YY_BREAK -case 121: +case 124: YY_RULE_SETUP -#line 1323 "dhcp4_lexer.ll" +#line 1356 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: @@ -4266,9 +4314,9 @@ YY_RULE_SETUP } } YY_BREAK -case 122: +case 125: YY_RULE_SETUP -#line 1334 "dhcp4_lexer.ll" +#line 1367 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: @@ -4280,9 +4328,9 @@ YY_RULE_SETUP } } YY_BREAK -case 123: +case 126: YY_RULE_SETUP -#line 1345 "dhcp4_lexer.ll" +#line 1378 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: @@ -4295,9 +4343,9 @@ YY_RULE_SETUP } } YY_BREAK -case 124: +case 127: YY_RULE_SETUP -#line 1357 "dhcp4_lexer.ll" +#line 1390 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::CLIENT_CLASSES: @@ -4307,9 +4355,9 @@ YY_RULE_SETUP } } YY_BREAK -case 125: +case 128: YY_RULE_SETUP -#line 1366 "dhcp4_lexer.ll" +#line 1399 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::CLIENT_CLASSES: @@ -4319,9 +4367,9 @@ YY_RULE_SETUP } } YY_BREAK -case 126: +case 129: YY_RULE_SETUP -#line 1375 "dhcp4_lexer.ll" +#line 1408 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::CLIENT_CLASSES: @@ -4331,9 +4379,9 @@ YY_RULE_SETUP } } YY_BREAK -case 127: +case 130: YY_RULE_SETUP -#line 1384 "dhcp4_lexer.ll" +#line 1417 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::CLIENT_CLASSES: @@ -4343,9 +4391,9 @@ YY_RULE_SETUP } } YY_BREAK -case 128: +case 131: YY_RULE_SETUP -#line 1393 "dhcp4_lexer.ll" +#line 1426 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -4356,9 +4404,9 @@ YY_RULE_SETUP } } YY_BREAK -case 129: +case 132: YY_RULE_SETUP -#line 1403 "dhcp4_lexer.ll" +#line 1436 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS: @@ -4369,9 +4417,9 @@ YY_RULE_SETUP } } YY_BREAK -case 130: +case 133: YY_RULE_SETUP -#line 1413 "dhcp4_lexer.ll" +#line 1446 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS: @@ -4382,9 +4430,9 @@ YY_RULE_SETUP } } YY_BREAK -case 131: +case 134: YY_RULE_SETUP -#line 1423 "dhcp4_lexer.ll" +#line 1456 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS: @@ -4395,9 +4443,9 @@ YY_RULE_SETUP } } YY_BREAK -case 132: +case 135: YY_RULE_SETUP -#line 1433 "dhcp4_lexer.ll" +#line 1466 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS: @@ -4408,9 +4456,9 @@ YY_RULE_SETUP } } YY_BREAK -case 133: +case 136: YY_RULE_SETUP -#line 1443 "dhcp4_lexer.ll" +#line 1476 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS: @@ -4421,9 +4469,9 @@ YY_RULE_SETUP } } YY_BREAK -case 134: +case 137: YY_RULE_SETUP -#line 1453 "dhcp4_lexer.ll" +#line 1486 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::RESERVATIONS: @@ -4433,9 +4481,9 @@ YY_RULE_SETUP } } YY_BREAK -case 135: +case 138: YY_RULE_SETUP -#line 1462 "dhcp4_lexer.ll" +#line 1495 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OPTION_DEF: @@ -4446,9 +4494,9 @@ YY_RULE_SETUP } } YY_BREAK -case 136: +case 139: YY_RULE_SETUP -#line 1472 "dhcp4_lexer.ll" +#line 1505 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OPTION_DATA: @@ -4458,9 +4506,9 @@ YY_RULE_SETUP } } YY_BREAK -case 137: +case 140: YY_RULE_SETUP -#line 1481 "dhcp4_lexer.ll" +#line 1514 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OPTION_DEF: @@ -4470,9 +4518,9 @@ YY_RULE_SETUP } } YY_BREAK -case 138: +case 141: YY_RULE_SETUP -#line 1490 "dhcp4_lexer.ll" +#line 1523 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OPTION_DEF: @@ -4482,9 +4530,9 @@ YY_RULE_SETUP } } YY_BREAK -case 139: +case 142: YY_RULE_SETUP -#line 1499 "dhcp4_lexer.ll" +#line 1532 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OPTION_DEF: @@ -4494,9 +4542,9 @@ YY_RULE_SETUP } } YY_BREAK -case 140: +case 143: YY_RULE_SETUP -#line 1508 "dhcp4_lexer.ll" +#line 1541 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: @@ -4507,9 +4555,9 @@ YY_RULE_SETUP } } YY_BREAK -case 141: +case 144: YY_RULE_SETUP -#line 1518 "dhcp4_lexer.ll" +#line 1551 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::RESERVATIONS: @@ -4519,9 +4567,9 @@ YY_RULE_SETUP } } YY_BREAK -case 142: +case 145: YY_RULE_SETUP -#line 1527 "dhcp4_lexer.ll" +#line 1560 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::RELAY: @@ -4531,9 +4579,9 @@ YY_RULE_SETUP } } YY_BREAK -case 143: +case 146: YY_RULE_SETUP -#line 1536 "dhcp4_lexer.ll" +#line 1569 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -4543,9 +4591,9 @@ YY_RULE_SETUP } } YY_BREAK -case 144: +case 147: YY_RULE_SETUP -#line 1545 "dhcp4_lexer.ll" +#line 1578 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::HOOKS_LIBRARIES: @@ -4555,9 +4603,9 @@ YY_RULE_SETUP } } YY_BREAK -case 145: +case 148: YY_RULE_SETUP -#line 1554 "dhcp4_lexer.ll" +#line 1587 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::HOOKS_LIBRARIES: @@ -4567,9 +4615,9 @@ YY_RULE_SETUP } } YY_BREAK -case 146: +case 149: YY_RULE_SETUP -#line 1563 "dhcp4_lexer.ll" +#line 1596 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -4579,9 +4627,9 @@ YY_RULE_SETUP } } YY_BREAK -case 147: +case 150: YY_RULE_SETUP -#line 1572 "dhcp4_lexer.ll" +#line 1605 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING: @@ -4591,9 +4639,9 @@ YY_RULE_SETUP } } YY_BREAK -case 148: +case 151: YY_RULE_SETUP -#line 1581 "dhcp4_lexer.ll" +#line 1614 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING: @@ -4603,9 +4651,9 @@ YY_RULE_SETUP } } YY_BREAK -case 149: +case 152: YY_RULE_SETUP -#line 1590 "dhcp4_lexer.ll" +#line 1623 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING: @@ -4615,9 +4663,9 @@ YY_RULE_SETUP } } YY_BREAK -case 150: +case 153: YY_RULE_SETUP -#line 1599 "dhcp4_lexer.ll" +#line 1632 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING: @@ -4627,9 +4675,9 @@ YY_RULE_SETUP } } YY_BREAK -case 151: +case 154: YY_RULE_SETUP -#line 1608 "dhcp4_lexer.ll" +#line 1641 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING: @@ -4639,9 +4687,9 @@ YY_RULE_SETUP } } YY_BREAK -case 152: +case 155: YY_RULE_SETUP -#line 1617 "dhcp4_lexer.ll" +#line 1650 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING: @@ -4651,9 +4699,9 @@ YY_RULE_SETUP } } YY_BREAK -case 153: +case 156: YY_RULE_SETUP -#line 1626 "dhcp4_lexer.ll" +#line 1659 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -4663,9 +4711,9 @@ YY_RULE_SETUP } } YY_BREAK -case 154: +case 157: YY_RULE_SETUP -#line 1635 "dhcp4_lexer.ll" +#line 1668 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -4675,9 +4723,9 @@ YY_RULE_SETUP } } YY_BREAK -case 155: +case 158: YY_RULE_SETUP -#line 1644 "dhcp4_lexer.ll" +#line 1677 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_MULTI_THREADING: @@ -4687,9 +4735,9 @@ YY_RULE_SETUP } } YY_BREAK -case 156: +case 159: YY_RULE_SETUP -#line 1653 "dhcp4_lexer.ll" +#line 1686 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_MULTI_THREADING: @@ -4699,9 +4747,9 @@ YY_RULE_SETUP } } YY_BREAK -case 157: +case 160: YY_RULE_SETUP -#line 1662 "dhcp4_lexer.ll" +#line 1695 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_MULTI_THREADING: @@ -4711,9 +4759,9 @@ YY_RULE_SETUP } } YY_BREAK -case 158: +case 161: YY_RULE_SETUP -#line 1671 "dhcp4_lexer.ll" +#line 1704 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -4723,9 +4771,9 @@ YY_RULE_SETUP } } YY_BREAK -case 159: +case 162: YY_RULE_SETUP -#line 1680 "dhcp4_lexer.ll" +#line 1713 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -4735,9 +4783,9 @@ YY_RULE_SETUP } } YY_BREAK -case 160: +case 163: YY_RULE_SETUP -#line 1689 "dhcp4_lexer.ll" +#line 1722 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::CONTROL_SOCKET: @@ -4747,9 +4795,9 @@ YY_RULE_SETUP } } YY_BREAK -case 161: +case 164: YY_RULE_SETUP -#line 1698 "dhcp4_lexer.ll" +#line 1731 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::CONTROL_SOCKET_TYPE: @@ -4759,9 +4807,9 @@ YY_RULE_SETUP } } YY_BREAK -case 162: +case 165: YY_RULE_SETUP -#line 1707 "dhcp4_lexer.ll" +#line 1740 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::CONTROL_SOCKET_TYPE: @@ -4771,9 +4819,9 @@ YY_RULE_SETUP } } YY_BREAK -case 163: +case 166: YY_RULE_SETUP -#line 1716 "dhcp4_lexer.ll" +#line 1749 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::CONTROL_SOCKET_TYPE: @@ -4783,9 +4831,9 @@ YY_RULE_SETUP } } YY_BREAK -case 164: +case 167: YY_RULE_SETUP -#line 1725 "dhcp4_lexer.ll" +#line 1758 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::CONTROL_SOCKET: @@ -4795,9 +4843,9 @@ YY_RULE_SETUP } } YY_BREAK -case 165: +case 168: YY_RULE_SETUP -#line 1734 "dhcp4_lexer.ll" +#line 1767 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::CONTROL_SOCKET: @@ -4807,9 +4855,9 @@ YY_RULE_SETUP } } YY_BREAK -case 166: +case 169: YY_RULE_SETUP -#line 1743 "dhcp4_lexer.ll" +#line 1776 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::CONTROL_SOCKET: @@ -4819,9 +4867,9 @@ YY_RULE_SETUP } } YY_BREAK -case 167: +case 170: YY_RULE_SETUP -#line 1752 "dhcp4_lexer.ll" +#line 1785 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::CONTROL_SOCKET: @@ -4831,9 +4879,9 @@ YY_RULE_SETUP } } YY_BREAK -case 168: +case 171: YY_RULE_SETUP -#line 1761 "dhcp4_lexer.ll" +#line 1794 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::AUTH_TYPE: @@ -4843,9 +4891,9 @@ YY_RULE_SETUP } } YY_BREAK -case 169: +case 172: YY_RULE_SETUP -#line 1770 "dhcp4_lexer.ll" +#line 1803 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::AUTHENTICATION: @@ -4855,9 +4903,9 @@ YY_RULE_SETUP } } YY_BREAK -case 170: +case 173: YY_RULE_SETUP -#line 1779 "dhcp4_lexer.ll" +#line 1812 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::AUTHENTICATION: @@ -4867,9 +4915,9 @@ YY_RULE_SETUP } } YY_BREAK -case 171: +case 174: YY_RULE_SETUP -#line 1788 "dhcp4_lexer.ll" +#line 1821 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::AUTHENTICATION: @@ -4879,9 +4927,9 @@ YY_RULE_SETUP } } YY_BREAK -case 172: +case 175: YY_RULE_SETUP -#line 1797 "dhcp4_lexer.ll" +#line 1830 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::CLIENTS: @@ -4891,9 +4939,9 @@ YY_RULE_SETUP } } YY_BREAK -case 173: +case 176: YY_RULE_SETUP -#line 1806 "dhcp4_lexer.ll" +#line 1839 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::CLIENTS: @@ -4903,9 +4951,9 @@ YY_RULE_SETUP } } YY_BREAK -case 174: +case 177: YY_RULE_SETUP -#line 1815 "dhcp4_lexer.ll" +#line 1848 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::CONTROL_SOCKET: @@ -4915,9 +4963,9 @@ YY_RULE_SETUP } } YY_BREAK -case 175: +case 178: YY_RULE_SETUP -#line 1824 "dhcp4_lexer.ll" +#line 1857 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::CONTROL_SOCKET: @@ -4927,9 +4975,9 @@ YY_RULE_SETUP } } YY_BREAK -case 176: +case 179: YY_RULE_SETUP -#line 1833 "dhcp4_lexer.ll" +#line 1866 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::HTTP_HEADERS: @@ -4939,9 +4987,9 @@ YY_RULE_SETUP } } YY_BREAK -case 177: +case 180: YY_RULE_SETUP -#line 1842 "dhcp4_lexer.ll" +#line 1875 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -4951,9 +4999,9 @@ YY_RULE_SETUP } } YY_BREAK -case 178: +case 181: YY_RULE_SETUP -#line 1851 "dhcp4_lexer.ll" +#line 1884 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_QUEUE_CONTROL: @@ -4963,9 +5011,9 @@ YY_RULE_SETUP } } YY_BREAK -case 179: +case 182: YY_RULE_SETUP -#line 1860 "dhcp4_lexer.ll" +#line 1893 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_QUEUE_CONTROL: @@ -4975,9 +5023,9 @@ YY_RULE_SETUP } } YY_BREAK -case 180: +case 183: YY_RULE_SETUP -#line 1869 "dhcp4_lexer.ll" +#line 1902 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_QUEUE_CONTROL: @@ -4987,9 +5035,9 @@ YY_RULE_SETUP } } YY_BREAK -case 181: +case 184: YY_RULE_SETUP -#line 1878 "dhcp4_lexer.ll" +#line 1911 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -4999,9 +5047,9 @@ YY_RULE_SETUP } } YY_BREAK -case 182: +case 185: YY_RULE_SETUP -#line 1887 "dhcp4_lexer.ll" +#line 1920 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_DDNS: @@ -5011,9 +5059,9 @@ YY_RULE_SETUP } } YY_BREAK -case 183: +case 186: YY_RULE_SETUP -#line 1896 "dhcp4_lexer.ll" +#line 1929 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_DDNS: @@ -5023,9 +5071,9 @@ YY_RULE_SETUP } } YY_BREAK -case 184: +case 187: YY_RULE_SETUP -#line 1905 "dhcp4_lexer.ll" +#line 1938 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_DDNS: @@ -5035,9 +5083,9 @@ YY_RULE_SETUP } } YY_BREAK -case 185: +case 188: YY_RULE_SETUP -#line 1914 "dhcp4_lexer.ll" +#line 1947 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_DDNS: @@ -5047,9 +5095,9 @@ YY_RULE_SETUP } } YY_BREAK -case 186: +case 189: YY_RULE_SETUP -#line 1923 "dhcp4_lexer.ll" +#line 1956 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_DDNS: @@ -5059,9 +5107,9 @@ YY_RULE_SETUP } } YY_BREAK -case 187: +case 190: YY_RULE_SETUP -#line 1932 "dhcp4_lexer.ll" +#line 1965 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_DDNS: @@ -5071,9 +5119,9 @@ YY_RULE_SETUP } } YY_BREAK -case 188: +case 191: YY_RULE_SETUP -#line 1941 "dhcp4_lexer.ll" +#line 1974 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_DDNS: @@ -5083,9 +5131,9 @@ YY_RULE_SETUP } } YY_BREAK -case 189: +case 192: YY_RULE_SETUP -#line 1950 "dhcp4_lexer.ll" +#line 1983 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP_DDNS: @@ -5095,9 +5143,9 @@ YY_RULE_SETUP } } YY_BREAK -case 190: +case 193: YY_RULE_SETUP -#line 1959 "dhcp4_lexer.ll" +#line 1992 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -5109,9 +5157,9 @@ YY_RULE_SETUP } } YY_BREAK -case 191: +case 194: YY_RULE_SETUP -#line 1970 "dhcp4_lexer.ll" +#line 2003 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -5123,9 +5171,9 @@ YY_RULE_SETUP } } YY_BREAK -case 192: +case 195: YY_RULE_SETUP -#line 1981 "dhcp4_lexer.ll" +#line 2014 "dhcp4_lexer.ll" { /* dhcp-ddns value keywords are case insensitive */ if (driver.ctx_ == isc::dhcp::Parser4Context::NCR_PROTOCOL) { @@ -5136,9 +5184,9 @@ YY_RULE_SETUP return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_); } YY_BREAK -case 193: +case 196: YY_RULE_SETUP -#line 1991 "dhcp4_lexer.ll" +#line 2024 "dhcp4_lexer.ll" { /* dhcp-ddns value keywords are case insensitive */ if (driver.ctx_ == isc::dhcp::Parser4Context::NCR_PROTOCOL) { @@ -5149,9 +5197,9 @@ YY_RULE_SETUP return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_); } YY_BREAK -case 194: +case 197: YY_RULE_SETUP -#line 2001 "dhcp4_lexer.ll" +#line 2034 "dhcp4_lexer.ll" { /* dhcp-ddns value keywords are case insensitive */ if (driver.ctx_ == isc::dhcp::Parser4Context::NCR_FORMAT) { @@ -5162,9 +5210,9 @@ YY_RULE_SETUP return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_); } YY_BREAK -case 195: +case 198: YY_RULE_SETUP -#line 2011 "dhcp4_lexer.ll" +#line 2044 "dhcp4_lexer.ll" { /* dhcp-ddns value keywords are case insensitive */ if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) { @@ -5175,9 +5223,9 @@ YY_RULE_SETUP return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_); } YY_BREAK -case 196: +case 199: YY_RULE_SETUP -#line 2021 "dhcp4_lexer.ll" +#line 2054 "dhcp4_lexer.ll" { /* dhcp-ddns value keywords are case insensitive */ if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) { @@ -5188,9 +5236,9 @@ YY_RULE_SETUP return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_); } YY_BREAK -case 197: +case 200: YY_RULE_SETUP -#line 2031 "dhcp4_lexer.ll" +#line 2064 "dhcp4_lexer.ll" { /* dhcp-ddns value keywords are case insensitive */ if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) { @@ -5201,9 +5249,9 @@ YY_RULE_SETUP return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_); } YY_BREAK -case 198: +case 201: YY_RULE_SETUP -#line 2041 "dhcp4_lexer.ll" +#line 2074 "dhcp4_lexer.ll" { /* dhcp-ddns value keywords are case insensitive */ if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) { @@ -5214,9 +5262,9 @@ YY_RULE_SETUP return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_); } YY_BREAK -case 199: +case 202: YY_RULE_SETUP -#line 2051 "dhcp4_lexer.ll" +#line 2084 "dhcp4_lexer.ll" { /* dhcp-ddns value keywords are case insensitive */ if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) { @@ -5227,9 +5275,9 @@ YY_RULE_SETUP return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_); } YY_BREAK -case 200: +case 203: YY_RULE_SETUP -#line 2061 "dhcp4_lexer.ll" +#line 2094 "dhcp4_lexer.ll" { /* dhcp-ddns value keywords are case insensitive */ if (driver.ctx_ == isc::dhcp::Parser4Context::REPLACE_CLIENT_NAME) { @@ -5240,9 +5288,9 @@ YY_RULE_SETUP return isc::dhcp::Dhcp4Parser::make_STRING(tmp, driver.loc_); } YY_BREAK -case 201: +case 204: YY_RULE_SETUP -#line 2071 "dhcp4_lexer.ll" +#line 2104 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: @@ -5252,9 +5300,9 @@ YY_RULE_SETUP } } YY_BREAK -case 202: +case 205: YY_RULE_SETUP -#line 2080 "dhcp4_lexer.ll" +#line 2113 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: @@ -5264,9 +5312,9 @@ YY_RULE_SETUP } } YY_BREAK -case 203: +case 206: YY_RULE_SETUP -#line 2089 "dhcp4_lexer.ll" +#line 2122 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: @@ -5276,9 +5324,9 @@ YY_RULE_SETUP } } YY_BREAK -case 204: +case 207: YY_RULE_SETUP -#line 2098 "dhcp4_lexer.ll" +#line 2131 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -5288,9 +5336,9 @@ YY_RULE_SETUP } } YY_BREAK -case 205: +case 208: YY_RULE_SETUP -#line 2107 "dhcp4_lexer.ll" +#line 2140 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -5302,9 +5350,9 @@ YY_RULE_SETUP } } YY_BREAK -case 206: +case 209: YY_RULE_SETUP -#line 2118 "dhcp4_lexer.ll" +#line 2151 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -5316,9 +5364,9 @@ YY_RULE_SETUP } } YY_BREAK -case 207: +case 210: YY_RULE_SETUP -#line 2129 "dhcp4_lexer.ll" +#line 2162 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -5332,9 +5380,9 @@ YY_RULE_SETUP } } YY_BREAK -case 208: +case 211: YY_RULE_SETUP -#line 2142 "dhcp4_lexer.ll" +#line 2175 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -5348,9 +5396,9 @@ YY_RULE_SETUP } } YY_BREAK -case 209: +case 212: YY_RULE_SETUP -#line 2155 "dhcp4_lexer.ll" +#line 2188 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -5364,9 +5412,9 @@ YY_RULE_SETUP } } YY_BREAK -case 210: +case 213: YY_RULE_SETUP -#line 2168 "dhcp4_lexer.ll" +#line 2201 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -5376,9 +5424,9 @@ YY_RULE_SETUP } } YY_BREAK -case 211: +case 214: YY_RULE_SETUP -#line 2177 "dhcp4_lexer.ll" +#line 2210 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -5388,9 +5436,9 @@ YY_RULE_SETUP } } YY_BREAK -case 212: +case 215: YY_RULE_SETUP -#line 2186 "dhcp4_lexer.ll" +#line 2219 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -5400,9 +5448,9 @@ YY_RULE_SETUP } } YY_BREAK -case 213: +case 216: YY_RULE_SETUP -#line 2195 "dhcp4_lexer.ll" +#line 2228 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -5412,9 +5460,9 @@ YY_RULE_SETUP } } YY_BREAK -case 214: +case 217: YY_RULE_SETUP -#line 2204 "dhcp4_lexer.ll" +#line 2237 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::COMPATIBILITY: @@ -5424,9 +5472,9 @@ YY_RULE_SETUP } } YY_BREAK -case 215: +case 218: YY_RULE_SETUP -#line 2213 "dhcp4_lexer.ll" +#line 2246 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::COMPATIBILITY: @@ -5436,9 +5484,9 @@ YY_RULE_SETUP } } YY_BREAK -case 216: +case 219: YY_RULE_SETUP -#line 2222 "dhcp4_lexer.ll" +#line 2255 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::COMPATIBILITY: @@ -5448,9 +5496,9 @@ YY_RULE_SETUP } } YY_BREAK -case 217: +case 220: YY_RULE_SETUP -#line 2231 "dhcp4_lexer.ll" +#line 2264 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::COMPATIBILITY: @@ -5460,9 +5508,9 @@ YY_RULE_SETUP } } YY_BREAK -case 218: +case 221: YY_RULE_SETUP -#line 2240 "dhcp4_lexer.ll" +#line 2273 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -5475,9 +5523,9 @@ YY_RULE_SETUP } } YY_BREAK -case 219: +case 222: YY_RULE_SETUP -#line 2252 "dhcp4_lexer.ll" +#line 2285 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -5487,9 +5535,9 @@ YY_RULE_SETUP } } YY_BREAK -case 220: +case 223: YY_RULE_SETUP -#line 2261 "dhcp4_lexer.ll" +#line 2294 "dhcp4_lexer.ll" { /* A string has been matched. It contains the actual string and single quotes. We need to get those quotes out of the way and just use its content, e.g. @@ -5591,10 +5639,10 @@ YY_RULE_SETUP return isc::dhcp::Dhcp4Parser::make_STRING(decoded, driver.loc_); } YY_BREAK -case 221: -/* rule 221 can match eol */ +case 224: +/* rule 224 can match eol */ YY_RULE_SETUP -#line 2362 "dhcp4_lexer.ll" +#line 2395 "dhcp4_lexer.ll" { /* Bad string with a forbidden control character inside */ std::string raw(yytext+1); @@ -5611,10 +5659,10 @@ YY_RULE_SETUP pos + 1); } YY_BREAK -case 222: -/* rule 222 can match eol */ +case 225: +/* rule 225 can match eol */ YY_RULE_SETUP -#line 2378 "dhcp4_lexer.ll" +#line 2411 "dhcp4_lexer.ll" { /* Bad string with a bad escape inside */ std::string raw(yytext+1); @@ -5664,9 +5712,9 @@ YY_RULE_SETUP pos); } YY_BREAK -case 223: +case 226: YY_RULE_SETUP -#line 2427 "dhcp4_lexer.ll" +#line 2460 "dhcp4_lexer.ll" { /* Bad string with an open escape at the end */ std::string raw(yytext+1); @@ -5675,9 +5723,9 @@ YY_RULE_SETUP raw.size() + 1); } YY_BREAK -case 224: +case 227: YY_RULE_SETUP -#line 2435 "dhcp4_lexer.ll" +#line 2468 "dhcp4_lexer.ll" { /* Bad string with an open unicode escape at the end */ std::string raw(yytext+1); @@ -5693,39 +5741,39 @@ YY_RULE_SETUP pos + 1); } YY_BREAK -case 225: +case 228: YY_RULE_SETUP -#line 2450 "dhcp4_lexer.ll" +#line 2483 "dhcp4_lexer.ll" { return isc::dhcp::Dhcp4Parser::make_LSQUARE_BRACKET(driver.loc_); } YY_BREAK -case 226: +case 229: YY_RULE_SETUP -#line 2451 "dhcp4_lexer.ll" +#line 2484 "dhcp4_lexer.ll" { return isc::dhcp::Dhcp4Parser::make_RSQUARE_BRACKET(driver.loc_); } YY_BREAK -case 227: +case 230: YY_RULE_SETUP -#line 2452 "dhcp4_lexer.ll" +#line 2485 "dhcp4_lexer.ll" { return isc::dhcp::Dhcp4Parser::make_LCURLY_BRACKET(driver.loc_); } YY_BREAK -case 228: +case 231: YY_RULE_SETUP -#line 2453 "dhcp4_lexer.ll" +#line 2486 "dhcp4_lexer.ll" { return isc::dhcp::Dhcp4Parser::make_RCURLY_BRACKET(driver.loc_); } YY_BREAK -case 229: +case 232: YY_RULE_SETUP -#line 2454 "dhcp4_lexer.ll" +#line 2487 "dhcp4_lexer.ll" { return isc::dhcp::Dhcp4Parser::make_COMMA(driver.loc_); } YY_BREAK -case 230: +case 233: YY_RULE_SETUP -#line 2455 "dhcp4_lexer.ll" +#line 2488 "dhcp4_lexer.ll" { return isc::dhcp::Dhcp4Parser::make_COLON(driver.loc_); } YY_BREAK -case 231: +case 234: YY_RULE_SETUP -#line 2457 "dhcp4_lexer.ll" +#line 2490 "dhcp4_lexer.ll" { /* An integer was found. */ std::string tmp(yytext); @@ -5744,9 +5792,9 @@ YY_RULE_SETUP return isc::dhcp::Dhcp4Parser::make_INTEGER(integer, driver.loc_); } YY_BREAK -case 232: +case 235: YY_RULE_SETUP -#line 2475 "dhcp4_lexer.ll" +#line 2508 "dhcp4_lexer.ll" { /* A floating point was found. */ std::string tmp(yytext); @@ -5760,43 +5808,43 @@ YY_RULE_SETUP return isc::dhcp::Dhcp4Parser::make_FLOAT(fp, driver.loc_); } YY_BREAK -case 233: +case 236: YY_RULE_SETUP -#line 2488 "dhcp4_lexer.ll" +#line 2521 "dhcp4_lexer.ll" { string tmp(yytext); return isc::dhcp::Dhcp4Parser::make_BOOLEAN(tmp == "true", driver.loc_); } YY_BREAK -case 234: +case 237: YY_RULE_SETUP -#line 2493 "dhcp4_lexer.ll" +#line 2526 "dhcp4_lexer.ll" { return isc::dhcp::Dhcp4Parser::make_NULL_TYPE(driver.loc_); } YY_BREAK -case 235: +case 238: YY_RULE_SETUP -#line 2497 "dhcp4_lexer.ll" +#line 2530 "dhcp4_lexer.ll" driver.error (driver.loc_, "JSON true reserved keyword is lower case only"); YY_BREAK -case 236: +case 239: YY_RULE_SETUP -#line 2499 "dhcp4_lexer.ll" +#line 2532 "dhcp4_lexer.ll" driver.error (driver.loc_, "JSON false reserved keyword is lower case only"); YY_BREAK -case 237: +case 240: YY_RULE_SETUP -#line 2501 "dhcp4_lexer.ll" +#line 2534 "dhcp4_lexer.ll" driver.error (driver.loc_, "JSON null reserved keyword is lower case only"); YY_BREAK -case 238: +case 241: YY_RULE_SETUP -#line 2503 "dhcp4_lexer.ll" +#line 2536 "dhcp4_lexer.ll" driver.error (driver.loc_, "Invalid character: " + std::string(yytext)); YY_BREAK case YY_STATE_EOF(INITIAL): -#line 2505 "dhcp4_lexer.ll" +#line 2538 "dhcp4_lexer.ll" { if (driver.states_.empty()) { return isc::dhcp::Dhcp4Parser::make_END(driver.loc_); @@ -5820,12 +5868,12 @@ case YY_STATE_EOF(INITIAL): BEGIN(DIR_EXIT); } YY_BREAK -case 239: +case 242: YY_RULE_SETUP -#line 2528 "dhcp4_lexer.ll" +#line 2561 "dhcp4_lexer.ll" ECHO; YY_BREAK -#line 5828 "dhcp4_lexer.cc" +#line 5877 "dhcp4_lexer.cc" case YY_END_OF_BUFFER: { @@ -6144,7 +6192,7 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 2369 ) + if ( yy_current_state >= 2377 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -6177,11 +6225,11 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 2369 ) + if ( yy_current_state >= 2377 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 2368); + yy_is_jam = (yy_current_state == 2376); return yy_is_jam ? 0 : yy_current_state; } @@ -6930,7 +6978,7 @@ void yyfree (void * ptr ) /* %ok-for-header */ -#line 2528 "dhcp4_lexer.ll" +#line 2561 "dhcp4_lexer.ll" using namespace isc::dhcp; diff --git a/src/bin/dhcp4/dhcp4_lexer.ll b/src/bin/dhcp4/dhcp4_lexer.ll index 4ead586811..6173394989 100644 --- a/src/bin/dhcp4/dhcp4_lexer.ll +++ b/src/bin/dhcp4/dhcp4_lexer.ll @@ -905,6 +905,39 @@ ControlCharacterFill [^"\\]|\\["\\/bfnrtu] } } +\"ddns-ttl\" { + switch(driver.ctx_) { + case isc::dhcp::Parser4Context::DHCP4: + case isc::dhcp::Parser4Context::SUBNET4: + case isc::dhcp::Parser4Context::SHARED_NETWORK: + return isc::dhcp::Dhcp4Parser::make_DDNS_TTL(driver.loc_); + default: + return isc::dhcp::Dhcp4Parser::make_STRING("ddns-ttl", driver.loc_); + } +} + +\"ddns-ttl-min\" { + switch(driver.ctx_) { + case isc::dhcp::Parser4Context::DHCP4: + case isc::dhcp::Parser4Context::SUBNET4: + case isc::dhcp::Parser4Context::SHARED_NETWORK: + return isc::dhcp::Dhcp4Parser::make_DDNS_TTL_MIN(driver.loc_); + default: + return isc::dhcp::Dhcp4Parser::make_STRING("ddns-ttl-min", driver.loc_); + } +} + +\"ddns-ttl-max\" { + switch(driver.ctx_) { + case isc::dhcp::Parser4Context::DHCP4: + case isc::dhcp::Parser4Context::SUBNET4: + case isc::dhcp::Parser4Context::SHARED_NETWORK: + return isc::dhcp::Dhcp4Parser::make_DDNS_TTL_MAX(driver.loc_); + default: + return isc::dhcp::Dhcp4Parser::make_STRING("ddns-ttl-max", driver.loc_); + } +} + \"subnet4\" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: diff --git a/src/bin/dhcp4/dhcp4_parser.cc b/src/bin/dhcp4/dhcp4_parser.cc index 990e3193c0..62a38af100 100644 --- a/src/bin/dhcp4/dhcp4_parser.cc +++ b/src/bin/dhcp4/dhcp4_parser.cc @@ -411,85 +411,85 @@ namespace isc { namespace dhcp { switch (yykind) { case symbol_kind::S_STRING: // "constant string" -#line 317 "dhcp4_parser.yy" +#line 320 "dhcp4_parser.yy" { yyoutput << yysym.value.template as < std::string > (); } #line 417 "dhcp4_parser.cc" break; case symbol_kind::S_INTEGER: // "integer" -#line 317 "dhcp4_parser.yy" +#line 320 "dhcp4_parser.yy" { yyoutput << yysym.value.template as < int64_t > (); } #line 423 "dhcp4_parser.cc" break; case symbol_kind::S_FLOAT: // "floating point" -#line 317 "dhcp4_parser.yy" +#line 320 "dhcp4_parser.yy" { yyoutput << yysym.value.template as < double > (); } #line 429 "dhcp4_parser.cc" break; case symbol_kind::S_BOOLEAN: // "boolean" -#line 317 "dhcp4_parser.yy" +#line 320 "dhcp4_parser.yy" { yyoutput << yysym.value.template as < bool > (); } #line 435 "dhcp4_parser.cc" break; case symbol_kind::S_value: // value -#line 317 "dhcp4_parser.yy" +#line 320 "dhcp4_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 441 "dhcp4_parser.cc" break; case symbol_kind::S_map_value: // map_value -#line 317 "dhcp4_parser.yy" +#line 320 "dhcp4_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 447 "dhcp4_parser.cc" break; case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value -#line 317 "dhcp4_parser.yy" +#line 320 "dhcp4_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 453 "dhcp4_parser.cc" break; case symbol_kind::S_ddns_conflict_resolution_mode_value: // ddns_conflict_resolution_mode_value -#line 317 "dhcp4_parser.yy" +#line 320 "dhcp4_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 459 "dhcp4_parser.cc" break; case symbol_kind::S_socket_type: // socket_type -#line 317 "dhcp4_parser.yy" +#line 320 "dhcp4_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 465 "dhcp4_parser.cc" break; case symbol_kind::S_outbound_interface_value: // outbound_interface_value -#line 317 "dhcp4_parser.yy" +#line 320 "dhcp4_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 471 "dhcp4_parser.cc" break; case symbol_kind::S_on_fail_mode: // on_fail_mode -#line 317 "dhcp4_parser.yy" +#line 320 "dhcp4_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 477 "dhcp4_parser.cc" break; case symbol_kind::S_control_socket_type_value: // control_socket_type_value -#line 317 "dhcp4_parser.yy" +#line 320 "dhcp4_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 483 "dhcp4_parser.cc" break; case symbol_kind::S_auth_type_value: // auth_type_value -#line 317 "dhcp4_parser.yy" +#line 320 "dhcp4_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 489 "dhcp4_parser.cc" break; case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value -#line 317 "dhcp4_parser.yy" +#line 320 "dhcp4_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 495 "dhcp4_parser.cc" break; @@ -771,127 +771,127 @@ namespace isc { namespace dhcp { switch (yyn) { case 2: // $@1: %empty -#line 326 "dhcp4_parser.yy" +#line 329 "dhcp4_parser.yy" { ctx.ctx_ = ctx.NO_KEYWORD; } #line 777 "dhcp4_parser.cc" break; case 4: // $@2: %empty -#line 327 "dhcp4_parser.yy" +#line 330 "dhcp4_parser.yy" { ctx.ctx_ = ctx.CONFIG; } #line 783 "dhcp4_parser.cc" break; case 6: // $@3: %empty -#line 328 "dhcp4_parser.yy" +#line 331 "dhcp4_parser.yy" { ctx.ctx_ = ctx.DHCP4; } #line 789 "dhcp4_parser.cc" break; case 8: // $@4: %empty -#line 329 "dhcp4_parser.yy" +#line 332 "dhcp4_parser.yy" { ctx.ctx_ = ctx.INTERFACES_CONFIG; } #line 795 "dhcp4_parser.cc" break; case 10: // $@5: %empty -#line 330 "dhcp4_parser.yy" +#line 333 "dhcp4_parser.yy" { ctx.ctx_ = ctx.SUBNET4; } #line 801 "dhcp4_parser.cc" break; case 12: // $@6: %empty -#line 331 "dhcp4_parser.yy" +#line 334 "dhcp4_parser.yy" { ctx.ctx_ = ctx.POOLS; } #line 807 "dhcp4_parser.cc" break; case 14: // $@7: %empty -#line 332 "dhcp4_parser.yy" +#line 335 "dhcp4_parser.yy" { ctx.ctx_ = ctx.RESERVATIONS; } #line 813 "dhcp4_parser.cc" break; case 16: // $@8: %empty -#line 333 "dhcp4_parser.yy" +#line 336 "dhcp4_parser.yy" { ctx.ctx_ = ctx.DHCP4; } #line 819 "dhcp4_parser.cc" break; case 18: // $@9: %empty -#line 334 "dhcp4_parser.yy" +#line 337 "dhcp4_parser.yy" { ctx.ctx_ = ctx.OPTION_DEF; } #line 825 "dhcp4_parser.cc" break; case 20: // $@10: %empty -#line 335 "dhcp4_parser.yy" +#line 338 "dhcp4_parser.yy" { ctx.ctx_ = ctx.OPTION_DATA; } #line 831 "dhcp4_parser.cc" break; case 22: // $@11: %empty -#line 336 "dhcp4_parser.yy" +#line 339 "dhcp4_parser.yy" { ctx.ctx_ = ctx.HOOKS_LIBRARIES; } #line 837 "dhcp4_parser.cc" break; case 24: // $@12: %empty -#line 337 "dhcp4_parser.yy" +#line 340 "dhcp4_parser.yy" { ctx.ctx_ = ctx.DHCP_DDNS; } #line 843 "dhcp4_parser.cc" break; case 26: // $@13: %empty -#line 338 "dhcp4_parser.yy" +#line 341 "dhcp4_parser.yy" { ctx.ctx_ = ctx.CONFIG_CONTROL; } #line 849 "dhcp4_parser.cc" break; case 28: // value: "integer" -#line 346 "dhcp4_parser.yy" +#line 349 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); } #line 855 "dhcp4_parser.cc" break; case 29: // value: "floating point" -#line 347 "dhcp4_parser.yy" +#line 350 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); } #line 861 "dhcp4_parser.cc" break; case 30: // value: "boolean" -#line 348 "dhcp4_parser.yy" +#line 351 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); } #line 867 "dhcp4_parser.cc" break; case 31: // value: "constant string" -#line 349 "dhcp4_parser.yy" +#line 352 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); } #line 873 "dhcp4_parser.cc" break; case 32: // value: "null" -#line 350 "dhcp4_parser.yy" +#line 353 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); } #line 879 "dhcp4_parser.cc" break; case 33: // value: map2 -#line 351 "dhcp4_parser.yy" +#line 354 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } #line 885 "dhcp4_parser.cc" break; case 34: // value: list_generic -#line 352 "dhcp4_parser.yy" +#line 355 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } #line 891 "dhcp4_parser.cc" break; case 35: // sub_json: value -#line 355 "dhcp4_parser.yy" +#line 358 "dhcp4_parser.yy" { // Push back the JSON value on the stack ctx.stack_.push_back(yystack_[0].value.as < ElementPtr > ()); @@ -900,7 +900,7 @@ namespace isc { namespace dhcp { break; case 36: // $@14: %empty -#line 360 "dhcp4_parser.yy" +#line 363 "dhcp4_parser.yy" { // This code is executed when we're about to start parsing // the content of the map @@ -911,7 +911,7 @@ namespace isc { namespace dhcp { break; case 37: // map2: "{" $@14 map_content "}" -#line 365 "dhcp4_parser.yy" +#line 368 "dhcp4_parser.yy" { // map parsing completed. If we ever want to do any wrap up // (maybe some sanity checking), this would be the best place @@ -921,13 +921,13 @@ namespace isc { namespace dhcp { break; case 38: // map_value: map2 -#line 371 "dhcp4_parser.yy" +#line 374 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } #line 927 "dhcp4_parser.cc" break; case 41: // not_empty_map: "constant string" ":" value -#line 378 "dhcp4_parser.yy" +#line 381 "dhcp4_parser.yy" { // map containing a single entry ctx.unique(yystack_[2].value.as < std::string > (), ctx.loc2pos(yystack_[2].location)); @@ -937,7 +937,7 @@ namespace isc { namespace dhcp { break; case 42: // not_empty_map: not_empty_map "," "constant string" ":" value -#line 383 "dhcp4_parser.yy" +#line 386 "dhcp4_parser.yy" { // map consisting of a shorter map followed by // comma and string:value @@ -948,7 +948,7 @@ namespace isc { namespace dhcp { break; case 43: // not_empty_map: not_empty_map "," -#line 389 "dhcp4_parser.yy" +#line 392 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } @@ -956,7 +956,7 @@ namespace isc { namespace dhcp { break; case 44: // $@15: %empty -#line 394 "dhcp4_parser.yy" +#line 397 "dhcp4_parser.yy" { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(l); @@ -965,7 +965,7 @@ namespace isc { namespace dhcp { break; case 45: // list_generic: "[" $@15 list_content "]" -#line 397 "dhcp4_parser.yy" +#line 400 "dhcp4_parser.yy" { // list parsing complete. Put any sanity checking here } @@ -973,7 +973,7 @@ namespace isc { namespace dhcp { break; case 48: // not_empty_list: value -#line 405 "dhcp4_parser.yy" +#line 408 "dhcp4_parser.yy" { // List consisting of a single element. ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ()); @@ -982,7 +982,7 @@ namespace isc { namespace dhcp { break; case 49: // not_empty_list: not_empty_list "," value -#line 409 "dhcp4_parser.yy" +#line 412 "dhcp4_parser.yy" { // List ending with , and a value. ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ()); @@ -991,7 +991,7 @@ namespace isc { namespace dhcp { break; case 50: // not_empty_list: not_empty_list "," -#line 413 "dhcp4_parser.yy" +#line 416 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } @@ -999,7 +999,7 @@ namespace isc { namespace dhcp { break; case 51: // $@16: %empty -#line 419 "dhcp4_parser.yy" +#line 422 "dhcp4_parser.yy" { // List parsing about to start } @@ -1007,7 +1007,7 @@ namespace isc { namespace dhcp { break; case 52: // list_strings: "[" $@16 list_strings_content "]" -#line 421 "dhcp4_parser.yy" +#line 424 "dhcp4_parser.yy" { // list parsing complete. Put any sanity checking here //ctx.stack_.pop_back(); @@ -1016,7 +1016,7 @@ namespace isc { namespace dhcp { break; case 55: // not_empty_list_strings: "constant string" -#line 430 "dhcp4_parser.yy" +#line 433 "dhcp4_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(s); @@ -1025,7 +1025,7 @@ namespace isc { namespace dhcp { break; case 56: // not_empty_list_strings: not_empty_list_strings "," "constant string" -#line 434 "dhcp4_parser.yy" +#line 437 "dhcp4_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(s); @@ -1034,7 +1034,7 @@ namespace isc { namespace dhcp { break; case 57: // not_empty_list_strings: not_empty_list_strings "," -#line 438 "dhcp4_parser.yy" +#line 441 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } @@ -1042,7 +1042,7 @@ namespace isc { namespace dhcp { break; case 58: // unknown_map_entry: "constant string" ":" -#line 448 "dhcp4_parser.yy" +#line 451 "dhcp4_parser.yy" { const std::string& where = ctx.contextName(); const std::string& keyword = yystack_[1].value.as < std::string > (); @@ -1053,7 +1053,7 @@ namespace isc { namespace dhcp { break; case 59: // $@17: %empty -#line 457 "dhcp4_parser.yy" +#line 460 "dhcp4_parser.yy" { // This code is executed when we're about to start parsing // the content of the map @@ -1064,7 +1064,7 @@ namespace isc { namespace dhcp { break; case 60: // syntax_map: "{" $@17 global_object "}" -#line 462 "dhcp4_parser.yy" +#line 465 "dhcp4_parser.yy" { // map parsing completed. If we ever want to do any wrap up // (maybe some sanity checking), this would be the best place @@ -1077,7 +1077,7 @@ namespace isc { namespace dhcp { break; case 61: // $@18: %empty -#line 472 "dhcp4_parser.yy" +#line 475 "dhcp4_parser.yy" { // This code is executed when we're about to start parsing // the content of the map @@ -1092,7 +1092,7 @@ namespace isc { namespace dhcp { break; case 62: // global_object: "Dhcp4" $@18 ":" "{" global_params "}" -#line 481 "dhcp4_parser.yy" +#line 484 "dhcp4_parser.yy" { // No global parameter is required ctx.stack_.pop_back(); @@ -1102,7 +1102,7 @@ namespace isc { namespace dhcp { break; case 64: // global_object_comma: global_object "," -#line 489 "dhcp4_parser.yy" +#line 492 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } @@ -1110,7 +1110,7 @@ namespace isc { namespace dhcp { break; case 65: // $@19: %empty -#line 495 "dhcp4_parser.yy" +#line 498 "dhcp4_parser.yy" { // Parse the Dhcp4 map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -1120,7 +1120,7 @@ namespace isc { namespace dhcp { break; case 66: // sub_dhcp4: "{" $@19 global_params "}" -#line 499 "dhcp4_parser.yy" +#line 502 "dhcp4_parser.yy" { // No global parameter is required // parsing completed @@ -1129,15 +1129,15 @@ namespace isc { namespace dhcp { break; case 69: // global_params: global_params "," -#line 506 "dhcp4_parser.yy" +#line 509 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 1137 "dhcp4_parser.cc" break; - case 139: // valid_lifetime: "valid-lifetime" ":" "integer" -#line 584 "dhcp4_parser.yy" + case 142: // valid_lifetime: "valid-lifetime" ":" "integer" +#line 590 "dhcp4_parser.yy" { ctx.unique("valid-lifetime", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -1146,8 +1146,8 @@ namespace isc { namespace dhcp { #line 1147 "dhcp4_parser.cc" break; - case 140: // min_valid_lifetime: "min-valid-lifetime" ":" "integer" -#line 590 "dhcp4_parser.yy" + case 143: // min_valid_lifetime: "min-valid-lifetime" ":" "integer" +#line 596 "dhcp4_parser.yy" { ctx.unique("min-valid-lifetime", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -1156,8 +1156,8 @@ namespace isc { namespace dhcp { #line 1157 "dhcp4_parser.cc" break; - case 141: // max_valid_lifetime: "max-valid-lifetime" ":" "integer" -#line 596 "dhcp4_parser.yy" + case 144: // max_valid_lifetime: "max-valid-lifetime" ":" "integer" +#line 602 "dhcp4_parser.yy" { ctx.unique("max-valid-lifetime", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -1166,8 +1166,8 @@ namespace isc { namespace dhcp { #line 1167 "dhcp4_parser.cc" break; - case 142: // renew_timer: "renew-timer" ":" "integer" -#line 602 "dhcp4_parser.yy" + case 145: // renew_timer: "renew-timer" ":" "integer" +#line 608 "dhcp4_parser.yy" { ctx.unique("renew-timer", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -1176,8 +1176,8 @@ namespace isc { namespace dhcp { #line 1177 "dhcp4_parser.cc" break; - case 143: // rebind_timer: "rebind-timer" ":" "integer" -#line 608 "dhcp4_parser.yy" + case 146: // rebind_timer: "rebind-timer" ":" "integer" +#line 614 "dhcp4_parser.yy" { ctx.unique("rebind-timer", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -1186,8 +1186,8 @@ namespace isc { namespace dhcp { #line 1187 "dhcp4_parser.cc" break; - case 144: // calculate_tee_times: "calculate-tee-times" ":" "boolean" -#line 614 "dhcp4_parser.yy" + case 147: // calculate_tee_times: "calculate-tee-times" ":" "boolean" +#line 620 "dhcp4_parser.yy" { ctx.unique("calculate-tee-times", ctx.loc2pos(yystack_[2].location)); ElementPtr ctt(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); @@ -1196,8 +1196,8 @@ namespace isc { namespace dhcp { #line 1197 "dhcp4_parser.cc" break; - case 145: // t1_percent: "t1-percent" ":" "floating point" -#line 620 "dhcp4_parser.yy" + case 148: // t1_percent: "t1-percent" ":" "floating point" +#line 626 "dhcp4_parser.yy" { ctx.unique("t1-percent", ctx.loc2pos(yystack_[2].location)); ElementPtr t1(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); @@ -1206,8 +1206,8 @@ namespace isc { namespace dhcp { #line 1207 "dhcp4_parser.cc" break; - case 146: // t2_percent: "t2-percent" ":" "floating point" -#line 626 "dhcp4_parser.yy" + case 149: // t2_percent: "t2-percent" ":" "floating point" +#line 632 "dhcp4_parser.yy" { ctx.unique("t2-percent", ctx.loc2pos(yystack_[2].location)); ElementPtr t2(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); @@ -1216,8 +1216,8 @@ namespace isc { namespace dhcp { #line 1217 "dhcp4_parser.cc" break; - case 147: // cache_threshold: "cache-threshold" ":" "floating point" -#line 632 "dhcp4_parser.yy" + case 150: // cache_threshold: "cache-threshold" ":" "floating point" +#line 638 "dhcp4_parser.yy" { ctx.unique("cache-threshold", ctx.loc2pos(yystack_[2].location)); ElementPtr ct(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); @@ -1226,8 +1226,8 @@ namespace isc { namespace dhcp { #line 1227 "dhcp4_parser.cc" break; - case 148: // cache_max_age: "cache-max-age" ":" "integer" -#line 638 "dhcp4_parser.yy" + case 151: // cache_max_age: "cache-max-age" ":" "integer" +#line 644 "dhcp4_parser.yy" { ctx.unique("cache-max-age", ctx.loc2pos(yystack_[2].location)); ElementPtr cm(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -1236,8 +1236,8 @@ namespace isc { namespace dhcp { #line 1237 "dhcp4_parser.cc" break; - case 149: // decline_probation_period: "decline-probation-period" ":" "integer" -#line 644 "dhcp4_parser.yy" + case 152: // decline_probation_period: "decline-probation-period" ":" "integer" +#line 650 "dhcp4_parser.yy" { ctx.unique("decline-probation-period", ctx.loc2pos(yystack_[2].location)); ElementPtr dpp(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -1246,8 +1246,8 @@ namespace isc { namespace dhcp { #line 1247 "dhcp4_parser.cc" break; - case 150: // $@20: %empty -#line 650 "dhcp4_parser.yy" + case 153: // $@20: %empty +#line 656 "dhcp4_parser.yy" { ctx.unique("server-tag", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); @@ -1255,8 +1255,8 @@ namespace isc { namespace dhcp { #line 1256 "dhcp4_parser.cc" break; - case 151: // server_tag: "server-tag" $@20 ":" "constant string" -#line 653 "dhcp4_parser.yy" + case 154: // server_tag: "server-tag" $@20 ":" "constant string" +#line 659 "dhcp4_parser.yy" { ElementPtr stag(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("server-tag", stag); @@ -1265,8 +1265,8 @@ namespace isc { namespace dhcp { #line 1266 "dhcp4_parser.cc" break; - case 152: // parked_packet_limit: "parked-packet-limit" ":" "integer" -#line 659 "dhcp4_parser.yy" + case 155: // parked_packet_limit: "parked-packet-limit" ":" "integer" +#line 665 "dhcp4_parser.yy" { ctx.unique("parked-packet-limit", ctx.loc2pos(yystack_[2].location)); ElementPtr ppl(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -1275,8 +1275,8 @@ namespace isc { namespace dhcp { #line 1276 "dhcp4_parser.cc" break; - case 153: // $@21: %empty -#line 665 "dhcp4_parser.yy" + case 156: // $@21: %empty +#line 671 "dhcp4_parser.yy" { ctx.unique("allocator", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); @@ -1284,8 +1284,8 @@ namespace isc { namespace dhcp { #line 1285 "dhcp4_parser.cc" break; - case 154: // allocator: "allocator" $@21 ":" "constant string" -#line 668 "dhcp4_parser.yy" + case 157: // allocator: "allocator" $@21 ":" "constant string" +#line 674 "dhcp4_parser.yy" { ElementPtr al(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("allocator", al); @@ -1294,8 +1294,8 @@ namespace isc { namespace dhcp { #line 1295 "dhcp4_parser.cc" break; - case 155: // echo_client_id: "echo-client-id" ":" "boolean" -#line 674 "dhcp4_parser.yy" + case 158: // echo_client_id: "echo-client-id" ":" "boolean" +#line 680 "dhcp4_parser.yy" { ctx.unique("echo-client-id", ctx.loc2pos(yystack_[2].location)); ElementPtr echo(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); @@ -1304,8 +1304,8 @@ namespace isc { namespace dhcp { #line 1305 "dhcp4_parser.cc" break; - case 156: // match_client_id: "match-client-id" ":" "boolean" -#line 680 "dhcp4_parser.yy" + case 159: // match_client_id: "match-client-id" ":" "boolean" +#line 686 "dhcp4_parser.yy" { ctx.unique("match-client-id", ctx.loc2pos(yystack_[2].location)); ElementPtr match(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); @@ -1314,8 +1314,8 @@ namespace isc { namespace dhcp { #line 1315 "dhcp4_parser.cc" break; - case 157: // authoritative: "authoritative" ":" "boolean" -#line 686 "dhcp4_parser.yy" + case 160: // authoritative: "authoritative" ":" "boolean" +#line 692 "dhcp4_parser.yy" { ctx.unique("authoritative", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); @@ -1324,8 +1324,8 @@ namespace isc { namespace dhcp { #line 1325 "dhcp4_parser.cc" break; - case 158: // ddns_send_updates: "ddns-send-updates" ":" "boolean" -#line 692 "dhcp4_parser.yy" + case 161: // ddns_send_updates: "ddns-send-updates" ":" "boolean" +#line 698 "dhcp4_parser.yy" { ctx.unique("ddns-send-updates", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); @@ -1334,8 +1334,8 @@ namespace isc { namespace dhcp { #line 1335 "dhcp4_parser.cc" break; - case 159: // ddns_override_no_update: "ddns-override-no-update" ":" "boolean" -#line 698 "dhcp4_parser.yy" + case 162: // ddns_override_no_update: "ddns-override-no-update" ":" "boolean" +#line 704 "dhcp4_parser.yy" { ctx.unique("ddns-override-no-update", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); @@ -1344,8 +1344,8 @@ namespace isc { namespace dhcp { #line 1345 "dhcp4_parser.cc" break; - case 160: // ddns_override_client_update: "ddns-override-client-update" ":" "boolean" -#line 704 "dhcp4_parser.yy" + case 163: // ddns_override_client_update: "ddns-override-client-update" ":" "boolean" +#line 710 "dhcp4_parser.yy" { ctx.unique("ddns-override-client-update", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); @@ -1354,8 +1354,8 @@ namespace isc { namespace dhcp { #line 1355 "dhcp4_parser.cc" break; - case 161: // $@22: %empty -#line 710 "dhcp4_parser.yy" + case 164: // $@22: %empty +#line 716 "dhcp4_parser.yy" { ctx.enter(ctx.REPLACE_CLIENT_NAME); ctx.unique("ddns-replace-client-name", ctx.loc2pos(yystack_[0].location)); @@ -1363,8 +1363,8 @@ namespace isc { namespace dhcp { #line 1364 "dhcp4_parser.cc" break; - case 162: // ddns_replace_client_name: "ddns-replace-client-name" $@22 ":" ddns_replace_client_name_value -#line 713 "dhcp4_parser.yy" + case 165: // ddns_replace_client_name: "ddns-replace-client-name" $@22 ":" ddns_replace_client_name_value +#line 719 "dhcp4_parser.yy" { ctx.stack_.back()->set("ddns-replace-client-name", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); @@ -1372,40 +1372,40 @@ namespace isc { namespace dhcp { #line 1373 "dhcp4_parser.cc" break; - case 163: // ddns_replace_client_name_value: "when-present" -#line 719 "dhcp4_parser.yy" + case 166: // ddns_replace_client_name_value: "when-present" +#line 725 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location))); } #line 1381 "dhcp4_parser.cc" break; - case 164: // ddns_replace_client_name_value: "never" -#line 722 "dhcp4_parser.yy" + case 167: // ddns_replace_client_name_value: "never" +#line 728 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location))); } #line 1389 "dhcp4_parser.cc" break; - case 165: // ddns_replace_client_name_value: "always" -#line 725 "dhcp4_parser.yy" + case 168: // ddns_replace_client_name_value: "always" +#line 731 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location))); } #line 1397 "dhcp4_parser.cc" break; - case 166: // ddns_replace_client_name_value: "when-not-present" -#line 728 "dhcp4_parser.yy" + case 169: // ddns_replace_client_name_value: "when-not-present" +#line 734 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location))); } #line 1405 "dhcp4_parser.cc" break; - case 167: // ddns_replace_client_name_value: "boolean" -#line 731 "dhcp4_parser.yy" + case 170: // ddns_replace_client_name_value: "boolean" +#line 737 "dhcp4_parser.yy" { error(yystack_[0].location, "boolean values for the ddns-replace-client-name are " "no longer supported"); @@ -1413,8 +1413,8 @@ namespace isc { namespace dhcp { #line 1414 "dhcp4_parser.cc" break; - case 168: // $@23: %empty -#line 737 "dhcp4_parser.yy" + case 171: // $@23: %empty +#line 743 "dhcp4_parser.yy" { ctx.unique("ddns-generated-prefix", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); @@ -1422,8 +1422,8 @@ namespace isc { namespace dhcp { #line 1423 "dhcp4_parser.cc" break; - case 169: // ddns_generated_prefix: "ddns-generated-prefix" $@23 ":" "constant string" -#line 740 "dhcp4_parser.yy" + case 172: // ddns_generated_prefix: "ddns-generated-prefix" $@23 ":" "constant string" +#line 746 "dhcp4_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ddns-generated-prefix", s); @@ -1432,8 +1432,8 @@ namespace isc { namespace dhcp { #line 1433 "dhcp4_parser.cc" break; - case 170: // $@24: %empty -#line 746 "dhcp4_parser.yy" + case 173: // $@24: %empty +#line 752 "dhcp4_parser.yy" { ctx.unique("ddns-qualifying-suffix", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); @@ -1441,8 +1441,8 @@ namespace isc { namespace dhcp { #line 1442 "dhcp4_parser.cc" break; - case 171: // ddns_qualifying_suffix: "ddns-qualifying-suffix" $@24 ":" "constant string" -#line 749 "dhcp4_parser.yy" + case 174: // ddns_qualifying_suffix: "ddns-qualifying-suffix" $@24 ":" "constant string" +#line 755 "dhcp4_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ddns-qualifying-suffix", s); @@ -1451,8 +1451,8 @@ namespace isc { namespace dhcp { #line 1452 "dhcp4_parser.cc" break; - case 172: // ddns_update_on_renew: "ddns-update-on-renew" ":" "boolean" -#line 755 "dhcp4_parser.yy" + case 175: // ddns_update_on_renew: "ddns-update-on-renew" ":" "boolean" +#line 761 "dhcp4_parser.yy" { ctx.unique("ddns-update-on-renew", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); @@ -1461,8 +1461,8 @@ namespace isc { namespace dhcp { #line 1462 "dhcp4_parser.cc" break; - case 173: // ddns_use_conflict_resolution: "ddns-use-conflict-resolution" ":" "boolean" -#line 764 "dhcp4_parser.yy" + case 176: // ddns_use_conflict_resolution: "ddns-use-conflict-resolution" ":" "boolean" +#line 770 "dhcp4_parser.yy" { ctx.unique("ddns-use-conflict-resolution", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); @@ -1475,8 +1475,8 @@ namespace isc { namespace dhcp { #line 1476 "dhcp4_parser.cc" break; - case 174: // $@25: %empty -#line 774 "dhcp4_parser.yy" + case 177: // $@25: %empty +#line 780 "dhcp4_parser.yy" { ctx.unique("ddns-conflict-resolution-mode", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.DDNS_CONFLICT_RESOLUTION_MODE); @@ -1484,8 +1484,8 @@ namespace isc { namespace dhcp { #line 1485 "dhcp4_parser.cc" break; - case 175: // ddns_conflict_resolution_mode: "ddns-conflict-resolution-mode" $@25 ":" ddns_conflict_resolution_mode_value -#line 777 "dhcp4_parser.yy" + case 178: // ddns_conflict_resolution_mode: "ddns-conflict-resolution-mode" $@25 ":" ddns_conflict_resolution_mode_value +#line 783 "dhcp4_parser.yy" { ctx.stack_.back()->set("ddns-conflict-resolution-mode", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); @@ -1493,40 +1493,40 @@ namespace isc { namespace dhcp { #line 1494 "dhcp4_parser.cc" break; - case 176: // ddns_conflict_resolution_mode_value: "check-with-dhcid" -#line 783 "dhcp4_parser.yy" + case 179: // ddns_conflict_resolution_mode_value: "check-with-dhcid" +#line 789 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("check-with-dhcid", ctx.loc2pos(yystack_[0].location))); } #line 1502 "dhcp4_parser.cc" break; - case 177: // ddns_conflict_resolution_mode_value: "no-check-with-dhcid" -#line 786 "dhcp4_parser.yy" + case 180: // ddns_conflict_resolution_mode_value: "no-check-with-dhcid" +#line 792 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("no-check-with-dhcid", ctx.loc2pos(yystack_[0].location))); } #line 1510 "dhcp4_parser.cc" break; - case 178: // ddns_conflict_resolution_mode_value: "check-exists-with-dhcid" -#line 789 "dhcp4_parser.yy" + case 181: // ddns_conflict_resolution_mode_value: "check-exists-with-dhcid" +#line 795 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("check-exists-with-dhcid", ctx.loc2pos(yystack_[0].location))); } #line 1518 "dhcp4_parser.cc" break; - case 179: // ddns_conflict_resolution_mode_value: "no-check-without-dhcid" -#line 792 "dhcp4_parser.yy" + case 182: // ddns_conflict_resolution_mode_value: "no-check-without-dhcid" +#line 798 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("no-check-without-dhcid", ctx.loc2pos(yystack_[0].location))); } #line 1526 "dhcp4_parser.cc" break; - case 180: // ddns_ttl_percent: "ddns-ttl-percent" ":" "floating point" -#line 797 "dhcp4_parser.yy" + case 183: // ddns_ttl_percent: "ddns-ttl-percent" ":" "floating point" +#line 803 "dhcp4_parser.yy" { ctx.unique("ddns-ttl-percent", ctx.loc2pos(yystack_[2].location)); ElementPtr ttl(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); @@ -1535,126 +1535,156 @@ namespace isc { namespace dhcp { #line 1536 "dhcp4_parser.cc" break; - case 181: // $@26: %empty -#line 803 "dhcp4_parser.yy" + case 184: // ddns_ttl: "ddns-ttl" ":" "integer" +#line 809 "dhcp4_parser.yy" + { + ctx.unique("ddns-ttl", ctx.loc2pos(yystack_[2].location)); + ElementPtr ttl(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("ddns-ttl", ttl); +} +#line 1546 "dhcp4_parser.cc" + break; + + case 185: // ddns_ttl_min: "ddns-ttl-min" ":" "integer" +#line 815 "dhcp4_parser.yy" + { + ctx.unique("ddns-ttl-min", ctx.loc2pos(yystack_[2].location)); + ElementPtr ttl(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("ddns-ttl-min", ttl); +} +#line 1556 "dhcp4_parser.cc" + break; + + case 186: // ddns_ttl_max: "ddns-ttl-mix" ":" "integer" +#line 821 "dhcp4_parser.yy" + { + ctx.unique("ddns-ttl-max", ctx.loc2pos(yystack_[2].location)); + ElementPtr ttl(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("ddns-ttl-max", ttl); +} +#line 1566 "dhcp4_parser.cc" + break; + + case 187: // $@26: %empty +#line 827 "dhcp4_parser.yy" { ctx.unique("hostname-char-set", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 1545 "dhcp4_parser.cc" +#line 1575 "dhcp4_parser.cc" break; - case 182: // hostname_char_set: "hostname-char-set" $@26 ":" "constant string" -#line 806 "dhcp4_parser.yy" + case 188: // hostname_char_set: "hostname-char-set" $@26 ":" "constant string" +#line 830 "dhcp4_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hostname-char-set", s); ctx.leave(); } -#line 1555 "dhcp4_parser.cc" +#line 1585 "dhcp4_parser.cc" break; - case 183: // $@27: %empty -#line 812 "dhcp4_parser.yy" + case 189: // $@27: %empty +#line 836 "dhcp4_parser.yy" { ctx.unique("hostname-char-replacement", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 1564 "dhcp4_parser.cc" +#line 1594 "dhcp4_parser.cc" break; - case 184: // hostname_char_replacement: "hostname-char-replacement" $@27 ":" "constant string" -#line 815 "dhcp4_parser.yy" + case 190: // hostname_char_replacement: "hostname-char-replacement" $@27 ":" "constant string" +#line 839 "dhcp4_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hostname-char-replacement", s); ctx.leave(); } -#line 1574 "dhcp4_parser.cc" +#line 1604 "dhcp4_parser.cc" break; - case 185: // store_extended_info: "store-extended-info" ":" "boolean" -#line 821 "dhcp4_parser.yy" + case 191: // store_extended_info: "store-extended-info" ":" "boolean" +#line 845 "dhcp4_parser.yy" { ctx.unique("store-extended-info", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("store-extended-info", b); } -#line 1584 "dhcp4_parser.cc" +#line 1614 "dhcp4_parser.cc" break; - case 186: // statistic_default_sample_count: "statistic-default-sample-count" ":" "integer" -#line 827 "dhcp4_parser.yy" + case 192: // statistic_default_sample_count: "statistic-default-sample-count" ":" "integer" +#line 851 "dhcp4_parser.yy" { ctx.unique("statistic-default-sample-count", ctx.loc2pos(yystack_[2].location)); ElementPtr count(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("statistic-default-sample-count", count); } -#line 1594 "dhcp4_parser.cc" +#line 1624 "dhcp4_parser.cc" break; - case 187: // statistic_default_sample_age: "statistic-default-sample-age" ":" "integer" -#line 833 "dhcp4_parser.yy" + case 193: // statistic_default_sample_age: "statistic-default-sample-age" ":" "integer" +#line 857 "dhcp4_parser.yy" { ctx.unique("statistic-default-sample-age", ctx.loc2pos(yystack_[2].location)); ElementPtr age(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("statistic-default-sample-age", age); } -#line 1604 "dhcp4_parser.cc" +#line 1634 "dhcp4_parser.cc" break; - case 188: // early_global_reservations_lookup: "early-global-reservations-lookup" ":" "boolean" -#line 839 "dhcp4_parser.yy" + case 194: // early_global_reservations_lookup: "early-global-reservations-lookup" ":" "boolean" +#line 863 "dhcp4_parser.yy" { ctx.unique("early-global-reservations-lookup", ctx.loc2pos(yystack_[2].location)); ElementPtr early(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("early-global-reservations-lookup", early); } -#line 1614 "dhcp4_parser.cc" +#line 1644 "dhcp4_parser.cc" break; - case 189: // ip_reservations_unique: "ip-reservations-unique" ":" "boolean" -#line 845 "dhcp4_parser.yy" + case 195: // ip_reservations_unique: "ip-reservations-unique" ":" "boolean" +#line 869 "dhcp4_parser.yy" { ctx.unique("ip-reservations-unique", ctx.loc2pos(yystack_[2].location)); ElementPtr unique(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ip-reservations-unique", unique); } -#line 1624 "dhcp4_parser.cc" +#line 1654 "dhcp4_parser.cc" break; - case 190: // reservations_lookup_first: "reservations-lookup-first" ":" "boolean" -#line 851 "dhcp4_parser.yy" + case 196: // reservations_lookup_first: "reservations-lookup-first" ":" "boolean" +#line 875 "dhcp4_parser.yy" { ctx.unique("reservations-lookup-first", ctx.loc2pos(yystack_[2].location)); ElementPtr first(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("reservations-lookup-first", first); } -#line 1634 "dhcp4_parser.cc" +#line 1664 "dhcp4_parser.cc" break; - case 191: // offer_lifetime: "offer-lifetime" ":" "integer" -#line 857 "dhcp4_parser.yy" + case 197: // offer_lifetime: "offer-lifetime" ":" "integer" +#line 881 "dhcp4_parser.yy" { ctx.unique("offer-lifetime", ctx.loc2pos(yystack_[2].location)); ElementPtr offer_lifetime(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("offer-lifetime", offer_lifetime); } -#line 1644 "dhcp4_parser.cc" +#line 1674 "dhcp4_parser.cc" break; - case 192: // stash_agent_options: "stash-agent-options" ":" "boolean" -#line 863 "dhcp4_parser.yy" + case 198: // stash_agent_options: "stash-agent-options" ":" "boolean" +#line 887 "dhcp4_parser.yy" { ctx.unique("stash-agent-options", ctx.loc2pos(yystack_[2].location)); ElementPtr stash(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("stash-agent-options", stash); } -#line 1654 "dhcp4_parser.cc" +#line 1684 "dhcp4_parser.cc" break; - case 193: // $@28: %empty -#line 869 "dhcp4_parser.yy" + case 199: // $@28: %empty +#line 893 "dhcp4_parser.yy" { ctx.unique("interfaces-config", ctx.loc2pos(yystack_[0].location)); ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -1662,48 +1692,48 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(i); ctx.enter(ctx.INTERFACES_CONFIG); } -#line 1666 "dhcp4_parser.cc" +#line 1696 "dhcp4_parser.cc" break; - case 194: // interfaces_config: "interfaces-config" $@28 ":" "{" interfaces_config_params "}" -#line 875 "dhcp4_parser.yy" + case 200: // interfaces_config: "interfaces-config" $@28 ":" "{" interfaces_config_params "}" +#line 899 "dhcp4_parser.yy" { // No interfaces config param is required ctx.stack_.pop_back(); ctx.leave(); } -#line 1676 "dhcp4_parser.cc" +#line 1706 "dhcp4_parser.cc" break; - case 197: // interfaces_config_params: interfaces_config_params "," -#line 883 "dhcp4_parser.yy" + case 203: // interfaces_config_params: interfaces_config_params "," +#line 907 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 1684 "dhcp4_parser.cc" +#line 1714 "dhcp4_parser.cc" break; - case 208: // $@29: %empty -#line 900 "dhcp4_parser.yy" + case 214: // $@29: %empty +#line 924 "dhcp4_parser.yy" { // Parse the interfaces-config map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 1694 "dhcp4_parser.cc" +#line 1724 "dhcp4_parser.cc" break; - case 209: // sub_interfaces4: "{" $@29 interfaces_config_params "}" -#line 904 "dhcp4_parser.yy" + case 215: // sub_interfaces4: "{" $@29 interfaces_config_params "}" +#line 928 "dhcp4_parser.yy" { // No interfaces config param is required // parsing completed } -#line 1703 "dhcp4_parser.cc" +#line 1733 "dhcp4_parser.cc" break; - case 210: // $@30: %empty -#line 909 "dhcp4_parser.yy" + case 216: // $@30: %empty +#line 933 "dhcp4_parser.yy" { ctx.unique("interfaces", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -1711,124 +1741,124 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.NO_KEYWORD); } -#line 1715 "dhcp4_parser.cc" +#line 1745 "dhcp4_parser.cc" break; - case 211: // interfaces_list: "interfaces" $@30 ":" list_strings -#line 915 "dhcp4_parser.yy" + case 217: // interfaces_list: "interfaces" $@30 ":" list_strings +#line 939 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 1724 "dhcp4_parser.cc" +#line 1754 "dhcp4_parser.cc" break; - case 212: // $@31: %empty -#line 920 "dhcp4_parser.yy" + case 218: // $@31: %empty +#line 944 "dhcp4_parser.yy" { ctx.unique("dhcp-socket-type", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.DHCP_SOCKET_TYPE); } -#line 1733 "dhcp4_parser.cc" +#line 1763 "dhcp4_parser.cc" break; - case 213: // dhcp_socket_type: "dhcp-socket-type" $@31 ":" socket_type -#line 923 "dhcp4_parser.yy" + case 219: // dhcp_socket_type: "dhcp-socket-type" $@31 ":" socket_type +#line 947 "dhcp4_parser.yy" { ctx.stack_.back()->set("dhcp-socket-type", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 1742 "dhcp4_parser.cc" +#line 1772 "dhcp4_parser.cc" break; - case 214: // socket_type: "raw" -#line 928 "dhcp4_parser.yy" + case 220: // socket_type: "raw" +#line 952 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("raw", ctx.loc2pos(yystack_[0].location))); } -#line 1748 "dhcp4_parser.cc" +#line 1778 "dhcp4_parser.cc" break; - case 215: // socket_type: "udp" -#line 929 "dhcp4_parser.yy" + case 221: // socket_type: "udp" +#line 953 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("udp", ctx.loc2pos(yystack_[0].location))); } -#line 1754 "dhcp4_parser.cc" +#line 1784 "dhcp4_parser.cc" break; - case 216: // $@32: %empty -#line 932 "dhcp4_parser.yy" + case 222: // $@32: %empty +#line 956 "dhcp4_parser.yy" { ctx.unique("outbound-interface", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.OUTBOUND_INTERFACE); } -#line 1763 "dhcp4_parser.cc" +#line 1793 "dhcp4_parser.cc" break; - case 217: // outbound_interface: "outbound-interface" $@32 ":" outbound_interface_value -#line 935 "dhcp4_parser.yy" + case 223: // outbound_interface: "outbound-interface" $@32 ":" outbound_interface_value +#line 959 "dhcp4_parser.yy" { ctx.stack_.back()->set("outbound-interface", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 1772 "dhcp4_parser.cc" +#line 1802 "dhcp4_parser.cc" break; - case 218: // outbound_interface_value: "same-as-inbound" -#line 940 "dhcp4_parser.yy" + case 224: // outbound_interface_value: "same-as-inbound" +#line 964 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("same-as-inbound", ctx.loc2pos(yystack_[0].location))); } -#line 1780 "dhcp4_parser.cc" +#line 1810 "dhcp4_parser.cc" break; - case 219: // outbound_interface_value: "use-routing" -#line 942 "dhcp4_parser.yy" + case 225: // outbound_interface_value: "use-routing" +#line 966 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("use-routing", ctx.loc2pos(yystack_[0].location))); } -#line 1788 "dhcp4_parser.cc" +#line 1818 "dhcp4_parser.cc" break; - case 220: // re_detect: "re-detect" ":" "boolean" -#line 946 "dhcp4_parser.yy" + case 226: // re_detect: "re-detect" ":" "boolean" +#line 970 "dhcp4_parser.yy" { ctx.unique("re-detect", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("re-detect", b); } -#line 1798 "dhcp4_parser.cc" +#line 1828 "dhcp4_parser.cc" break; - case 221: // service_sockets_require_all: "service-sockets-require-all" ":" "boolean" -#line 952 "dhcp4_parser.yy" + case 227: // service_sockets_require_all: "service-sockets-require-all" ":" "boolean" +#line 976 "dhcp4_parser.yy" { ctx.unique("service-sockets-require-all", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("service-sockets-require-all", b); } -#line 1808 "dhcp4_parser.cc" +#line 1838 "dhcp4_parser.cc" break; - case 222: // service_sockets_retry_wait_time: "service-sockets-retry-wait-time" ":" "integer" -#line 958 "dhcp4_parser.yy" + case 228: // service_sockets_retry_wait_time: "service-sockets-retry-wait-time" ":" "integer" +#line 982 "dhcp4_parser.yy" { ctx.unique("service-sockets-retry-wait-time", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("service-sockets-retry-wait-time", n); } -#line 1818 "dhcp4_parser.cc" +#line 1848 "dhcp4_parser.cc" break; - case 223: // service_sockets_max_retries: "service-sockets-max-retries" ":" "integer" -#line 964 "dhcp4_parser.yy" + case 229: // service_sockets_max_retries: "service-sockets-max-retries" ":" "integer" +#line 988 "dhcp4_parser.yy" { ctx.unique("service-sockets-max-retries", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("service-sockets-max-retries", n); } -#line 1828 "dhcp4_parser.cc" +#line 1858 "dhcp4_parser.cc" break; - case 224: // $@33: %empty -#line 970 "dhcp4_parser.yy" + case 230: // $@33: %empty +#line 994 "dhcp4_parser.yy" { ctx.unique("lease-database", ctx.loc2pos(yystack_[0].location)); ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -1836,22 +1866,22 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(i); ctx.enter(ctx.LEASE_DATABASE); } -#line 1840 "dhcp4_parser.cc" +#line 1870 "dhcp4_parser.cc" break; - case 225: // lease_database: "lease-database" $@33 ":" "{" database_map_params "}" -#line 976 "dhcp4_parser.yy" + case 231: // lease_database: "lease-database" $@33 ":" "{" database_map_params "}" +#line 1000 "dhcp4_parser.yy" { // The type parameter is required ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); ctx.leave(); } -#line 1851 "dhcp4_parser.cc" +#line 1881 "dhcp4_parser.cc" break; - case 226: // $@34: %empty -#line 983 "dhcp4_parser.yy" + case 232: // $@34: %empty +#line 1007 "dhcp4_parser.yy" { ctx.unique("sanity-checks", ctx.loc2pos(yystack_[0].location)); ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -1859,37 +1889,37 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(m); ctx.enter(ctx.SANITY_CHECKS); } -#line 1863 "dhcp4_parser.cc" +#line 1893 "dhcp4_parser.cc" break; - case 227: // sanity_checks: "sanity-checks" $@34 ":" "{" sanity_checks_params "}" -#line 989 "dhcp4_parser.yy" + case 233: // sanity_checks: "sanity-checks" $@34 ":" "{" sanity_checks_params "}" +#line 1013 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 1872 "dhcp4_parser.cc" +#line 1902 "dhcp4_parser.cc" break; - case 230: // sanity_checks_params: sanity_checks_params "," -#line 996 "dhcp4_parser.yy" + case 236: // sanity_checks_params: sanity_checks_params "," +#line 1020 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 1880 "dhcp4_parser.cc" +#line 1910 "dhcp4_parser.cc" break; - case 233: // $@35: %empty -#line 1005 "dhcp4_parser.yy" + case 239: // $@35: %empty +#line 1029 "dhcp4_parser.yy" { ctx.unique("lease-checks", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 1889 "dhcp4_parser.cc" +#line 1919 "dhcp4_parser.cc" break; - case 234: // lease_checks: "lease-checks" $@35 ":" "constant string" -#line 1008 "dhcp4_parser.yy" + case 240: // lease_checks: "lease-checks" $@35 ":" "constant string" +#line 1032 "dhcp4_parser.yy" { if ( (string(yystack_[0].value.as < std::string > ()) == "none") || @@ -1905,20 +1935,20 @@ namespace isc { namespace dhcp { ", supported values are: none, warn, fix, fix-del, del"); } } -#line 1909 "dhcp4_parser.cc" +#line 1939 "dhcp4_parser.cc" break; - case 235: // $@36: %empty -#line 1024 "dhcp4_parser.yy" + case 241: // $@36: %empty +#line 1048 "dhcp4_parser.yy" { ctx.unique("extended-info-checks", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 1918 "dhcp4_parser.cc" +#line 1948 "dhcp4_parser.cc" break; - case 236: // extended_info_checks: "extended-info-checks" $@36 ":" "constant string" -#line 1027 "dhcp4_parser.yy" + case 242: // extended_info_checks: "extended-info-checks" $@36 ":" "constant string" +#line 1051 "dhcp4_parser.yy" { if ( (string(yystack_[0].value.as < std::string > ()) == "none") || @@ -1933,11 +1963,11 @@ namespace isc { namespace dhcp { ", supported values are: none, fix, strict, pedantic"); } } -#line 1937 "dhcp4_parser.cc" +#line 1967 "dhcp4_parser.cc" break; - case 237: // $@37: %empty -#line 1042 "dhcp4_parser.yy" + case 243: // $@37: %empty +#line 1066 "dhcp4_parser.yy" { ctx.unique("hosts-database", ctx.loc2pos(yystack_[0].location)); ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -1945,22 +1975,22 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(i); ctx.enter(ctx.HOSTS_DATABASE); } -#line 1949 "dhcp4_parser.cc" +#line 1979 "dhcp4_parser.cc" break; - case 238: // hosts_database: "hosts-database" $@37 ":" "{" database_map_params "}" -#line 1048 "dhcp4_parser.yy" + case 244: // hosts_database: "hosts-database" $@37 ":" "{" database_map_params "}" +#line 1072 "dhcp4_parser.yy" { // The type parameter is required ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); ctx.leave(); } -#line 1960 "dhcp4_parser.cc" +#line 1990 "dhcp4_parser.cc" break; - case 239: // $@38: %empty -#line 1055 "dhcp4_parser.yy" + case 245: // $@38: %empty +#line 1079 "dhcp4_parser.yy" { ctx.unique("hosts-databases", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -1968,383 +1998,383 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.HOSTS_DATABASE); } -#line 1972 "dhcp4_parser.cc" +#line 2002 "dhcp4_parser.cc" break; - case 240: // hosts_databases: "hosts-databases" $@38 ":" "[" database_list "]" -#line 1061 "dhcp4_parser.yy" + case 246: // hosts_databases: "hosts-databases" $@38 ":" "[" database_list "]" +#line 1085 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 1981 "dhcp4_parser.cc" +#line 2011 "dhcp4_parser.cc" break; - case 245: // not_empty_database_list: not_empty_database_list "," -#line 1072 "dhcp4_parser.yy" + case 251: // not_empty_database_list: not_empty_database_list "," +#line 1096 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 1989 "dhcp4_parser.cc" +#line 2019 "dhcp4_parser.cc" break; - case 246: // $@39: %empty -#line 1077 "dhcp4_parser.yy" + case 252: // $@39: %empty +#line 1101 "dhcp4_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 1999 "dhcp4_parser.cc" +#line 2029 "dhcp4_parser.cc" break; - case 247: // database: "{" $@39 database_map_params "}" -#line 1081 "dhcp4_parser.yy" + case 253: // database: "{" $@39 database_map_params "}" +#line 1105 "dhcp4_parser.yy" { // The type parameter is required ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 2009 "dhcp4_parser.cc" +#line 2039 "dhcp4_parser.cc" break; - case 250: // database_map_params: database_map_params "," -#line 1089 "dhcp4_parser.yy" + case 256: // database_map_params: database_map_params "," +#line 1113 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2017 "dhcp4_parser.cc" +#line 2047 "dhcp4_parser.cc" break; - case 274: // $@40: %empty -#line 1119 "dhcp4_parser.yy" + case 280: // $@40: %empty +#line 1143 "dhcp4_parser.yy" { ctx.unique("type", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2026 "dhcp4_parser.cc" +#line 2056 "dhcp4_parser.cc" break; - case 275: // database_type: "type" $@40 ":" "constant string" -#line 1122 "dhcp4_parser.yy" + case 281: // database_type: "type" $@40 ":" "constant string" +#line 1146 "dhcp4_parser.yy" { ElementPtr db_type(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("type", db_type); ctx.leave(); } -#line 2036 "dhcp4_parser.cc" +#line 2066 "dhcp4_parser.cc" break; - case 276: // $@41: %empty -#line 1128 "dhcp4_parser.yy" + case 282: // $@41: %empty +#line 1152 "dhcp4_parser.yy" { ctx.unique("user", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2045 "dhcp4_parser.cc" +#line 2075 "dhcp4_parser.cc" break; - case 277: // user: "user" $@41 ":" "constant string" -#line 1131 "dhcp4_parser.yy" + case 283: // user: "user" $@41 ":" "constant string" +#line 1155 "dhcp4_parser.yy" { ElementPtr user(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("user", user); ctx.leave(); } -#line 2055 "dhcp4_parser.cc" +#line 2085 "dhcp4_parser.cc" break; - case 278: // $@42: %empty -#line 1137 "dhcp4_parser.yy" + case 284: // $@42: %empty +#line 1161 "dhcp4_parser.yy" { ctx.unique("password", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2064 "dhcp4_parser.cc" +#line 2094 "dhcp4_parser.cc" break; - case 279: // password: "password" $@42 ":" "constant string" -#line 1140 "dhcp4_parser.yy" + case 285: // password: "password" $@42 ":" "constant string" +#line 1164 "dhcp4_parser.yy" { ElementPtr pwd(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("password", pwd); ctx.leave(); } -#line 2074 "dhcp4_parser.cc" +#line 2104 "dhcp4_parser.cc" break; - case 280: // $@43: %empty -#line 1146 "dhcp4_parser.yy" + case 286: // $@43: %empty +#line 1170 "dhcp4_parser.yy" { ctx.unique("host", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2083 "dhcp4_parser.cc" +#line 2113 "dhcp4_parser.cc" break; - case 281: // host: "host" $@43 ":" "constant string" -#line 1149 "dhcp4_parser.yy" + case 287: // host: "host" $@43 ":" "constant string" +#line 1173 "dhcp4_parser.yy" { ElementPtr h(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("host", h); ctx.leave(); } -#line 2093 "dhcp4_parser.cc" +#line 2123 "dhcp4_parser.cc" break; - case 282: // port: "port" ":" "integer" -#line 1155 "dhcp4_parser.yy" + case 288: // port: "port" ":" "integer" +#line 1179 "dhcp4_parser.yy" { ctx.unique("port", ctx.loc2pos(yystack_[2].location)); ElementPtr p(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("port", p); } -#line 2103 "dhcp4_parser.cc" +#line 2133 "dhcp4_parser.cc" break; - case 283: // $@44: %empty -#line 1161 "dhcp4_parser.yy" + case 289: // $@44: %empty +#line 1185 "dhcp4_parser.yy" { ctx.unique("name", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2112 "dhcp4_parser.cc" +#line 2142 "dhcp4_parser.cc" break; - case 284: // name: "name" $@44 ":" "constant string" -#line 1164 "dhcp4_parser.yy" + case 290: // name: "name" $@44 ":" "constant string" +#line 1188 "dhcp4_parser.yy" { ElementPtr name(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("name", name); ctx.leave(); } -#line 2122 "dhcp4_parser.cc" +#line 2152 "dhcp4_parser.cc" break; - case 285: // persist: "persist" ":" "boolean" -#line 1170 "dhcp4_parser.yy" + case 291: // persist: "persist" ":" "boolean" +#line 1194 "dhcp4_parser.yy" { ctx.unique("persist", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("persist", n); } -#line 2132 "dhcp4_parser.cc" +#line 2162 "dhcp4_parser.cc" break; - case 286: // lfc_interval: "lfc-interval" ":" "integer" -#line 1176 "dhcp4_parser.yy" + case 292: // lfc_interval: "lfc-interval" ":" "integer" +#line 1200 "dhcp4_parser.yy" { ctx.unique("lfc-interval", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("lfc-interval", n); } -#line 2142 "dhcp4_parser.cc" +#line 2172 "dhcp4_parser.cc" break; - case 287: // readonly: "readonly" ":" "boolean" -#line 1182 "dhcp4_parser.yy" + case 293: // readonly: "readonly" ":" "boolean" +#line 1206 "dhcp4_parser.yy" { ctx.unique("readonly", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("readonly", n); } -#line 2152 "dhcp4_parser.cc" +#line 2182 "dhcp4_parser.cc" break; - case 288: // connect_timeout: "connect-timeout" ":" "integer" -#line 1188 "dhcp4_parser.yy" + case 294: // connect_timeout: "connect-timeout" ":" "integer" +#line 1212 "dhcp4_parser.yy" { ctx.unique("connect-timeout", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("connect-timeout", n); } -#line 2162 "dhcp4_parser.cc" +#line 2192 "dhcp4_parser.cc" break; - case 289: // read_timeout: "read-timeout" ":" "integer" -#line 1194 "dhcp4_parser.yy" + case 295: // read_timeout: "read-timeout" ":" "integer" +#line 1218 "dhcp4_parser.yy" { ctx.unique("read-timeout", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("read-timeout", n); } -#line 2172 "dhcp4_parser.cc" +#line 2202 "dhcp4_parser.cc" break; - case 290: // write_timeout: "write-timeout" ":" "integer" -#line 1200 "dhcp4_parser.yy" + case 296: // write_timeout: "write-timeout" ":" "integer" +#line 1224 "dhcp4_parser.yy" { ctx.unique("write-timeout", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("write-timeout", n); } -#line 2182 "dhcp4_parser.cc" +#line 2212 "dhcp4_parser.cc" break; - case 291: // tcp_user_timeout: "tcp-user-timeout" ":" "integer" -#line 1206 "dhcp4_parser.yy" + case 297: // tcp_user_timeout: "tcp-user-timeout" ":" "integer" +#line 1230 "dhcp4_parser.yy" { ctx.unique("tcp-user-timeout", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("tcp-user-timeout", n); } -#line 2192 "dhcp4_parser.cc" +#line 2222 "dhcp4_parser.cc" break; - case 292: // max_reconnect_tries: "max-reconnect-tries" ":" "integer" -#line 1212 "dhcp4_parser.yy" + case 298: // max_reconnect_tries: "max-reconnect-tries" ":" "integer" +#line 1236 "dhcp4_parser.yy" { ctx.unique("max-reconnect-tries", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-reconnect-tries", n); } -#line 2202 "dhcp4_parser.cc" +#line 2232 "dhcp4_parser.cc" break; - case 293: // reconnect_wait_time: "reconnect-wait-time" ":" "integer" -#line 1218 "dhcp4_parser.yy" + case 299: // reconnect_wait_time: "reconnect-wait-time" ":" "integer" +#line 1242 "dhcp4_parser.yy" { ctx.unique("reconnect-wait-time", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("reconnect-wait-time", n); } -#line 2212 "dhcp4_parser.cc" +#line 2242 "dhcp4_parser.cc" break; - case 294: // $@45: %empty -#line 1224 "dhcp4_parser.yy" + case 300: // $@45: %empty +#line 1248 "dhcp4_parser.yy" { ctx.unique("on-fail", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.DATABASE_ON_FAIL); } -#line 2221 "dhcp4_parser.cc" +#line 2251 "dhcp4_parser.cc" break; - case 295: // on_fail: "on-fail" $@45 ":" on_fail_mode -#line 1227 "dhcp4_parser.yy" + case 301: // on_fail: "on-fail" $@45 ":" on_fail_mode +#line 1251 "dhcp4_parser.yy" { ctx.stack_.back()->set("on-fail", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 2230 "dhcp4_parser.cc" +#line 2260 "dhcp4_parser.cc" break; - case 296: // on_fail_mode: "stop-retry-exit" -#line 1232 "dhcp4_parser.yy" + case 302: // on_fail_mode: "stop-retry-exit" +#line 1256 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("stop-retry-exit", ctx.loc2pos(yystack_[0].location))); } -#line 2236 "dhcp4_parser.cc" +#line 2266 "dhcp4_parser.cc" break; - case 297: // on_fail_mode: "serve-retry-exit" -#line 1233 "dhcp4_parser.yy" + case 303: // on_fail_mode: "serve-retry-exit" +#line 1257 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("serve-retry-exit", ctx.loc2pos(yystack_[0].location))); } -#line 2242 "dhcp4_parser.cc" +#line 2272 "dhcp4_parser.cc" break; - case 298: // on_fail_mode: "serve-retry-continue" -#line 1234 "dhcp4_parser.yy" + case 304: // on_fail_mode: "serve-retry-continue" +#line 1258 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("serve-retry-continue", ctx.loc2pos(yystack_[0].location))); } -#line 2248 "dhcp4_parser.cc" +#line 2278 "dhcp4_parser.cc" break; - case 299: // retry_on_startup: "retry-on-startup" ":" "boolean" -#line 1237 "dhcp4_parser.yy" + case 305: // retry_on_startup: "retry-on-startup" ":" "boolean" +#line 1261 "dhcp4_parser.yy" { ctx.unique("retry-on-startup", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("retry-on-startup", n); } -#line 2258 "dhcp4_parser.cc" +#line 2288 "dhcp4_parser.cc" break; - case 300: // max_row_errors: "max-row-errors" ":" "integer" -#line 1243 "dhcp4_parser.yy" + case 306: // max_row_errors: "max-row-errors" ":" "integer" +#line 1267 "dhcp4_parser.yy" { ctx.unique("max-row-errors", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-row-errors", n); } -#line 2268 "dhcp4_parser.cc" +#line 2298 "dhcp4_parser.cc" break; - case 301: // $@46: %empty -#line 1249 "dhcp4_parser.yy" + case 307: // $@46: %empty +#line 1273 "dhcp4_parser.yy" { ctx.unique("trust-anchor", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2277 "dhcp4_parser.cc" +#line 2307 "dhcp4_parser.cc" break; - case 302: // trust_anchor: "trust-anchor" $@46 ":" "constant string" -#line 1252 "dhcp4_parser.yy" + case 308: // trust_anchor: "trust-anchor" $@46 ":" "constant string" +#line 1276 "dhcp4_parser.yy" { ElementPtr ca(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("trust-anchor", ca); ctx.leave(); } -#line 2287 "dhcp4_parser.cc" +#line 2317 "dhcp4_parser.cc" break; - case 303: // $@47: %empty -#line 1258 "dhcp4_parser.yy" + case 309: // $@47: %empty +#line 1282 "dhcp4_parser.yy" { ctx.unique("cert-file", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2296 "dhcp4_parser.cc" +#line 2326 "dhcp4_parser.cc" break; - case 304: // cert_file: "cert-file" $@47 ":" "constant string" -#line 1261 "dhcp4_parser.yy" + case 310: // cert_file: "cert-file" $@47 ":" "constant string" +#line 1285 "dhcp4_parser.yy" { ElementPtr cert(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("cert-file", cert); ctx.leave(); } -#line 2306 "dhcp4_parser.cc" +#line 2336 "dhcp4_parser.cc" break; - case 305: // $@48: %empty -#line 1267 "dhcp4_parser.yy" + case 311: // $@48: %empty +#line 1291 "dhcp4_parser.yy" { ctx.unique("key-file", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2315 "dhcp4_parser.cc" +#line 2345 "dhcp4_parser.cc" break; - case 306: // key_file: "key-file" $@48 ":" "constant string" -#line 1270 "dhcp4_parser.yy" + case 312: // key_file: "key-file" $@48 ":" "constant string" +#line 1294 "dhcp4_parser.yy" { ElementPtr key(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("key-file", key); ctx.leave(); } -#line 2325 "dhcp4_parser.cc" +#line 2355 "dhcp4_parser.cc" break; - case 307: // $@49: %empty -#line 1276 "dhcp4_parser.yy" + case 313: // $@49: %empty +#line 1300 "dhcp4_parser.yy" { ctx.unique("cipher-list", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2334 "dhcp4_parser.cc" +#line 2364 "dhcp4_parser.cc" break; - case 308: // cipher_list: "cipher-list" $@49 ":" "constant string" -#line 1279 "dhcp4_parser.yy" + case 314: // cipher_list: "cipher-list" $@49 ":" "constant string" +#line 1303 "dhcp4_parser.yy" { ElementPtr cl(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("cipher-list", cl); ctx.leave(); } -#line 2344 "dhcp4_parser.cc" +#line 2374 "dhcp4_parser.cc" break; - case 309: // $@50: %empty -#line 1285 "dhcp4_parser.yy" + case 315: // $@50: %empty +#line 1309 "dhcp4_parser.yy" { ctx.unique("host-reservation-identifiers", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -2352,73 +2382,73 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.HOST_RESERVATION_IDENTIFIERS); } -#line 2356 "dhcp4_parser.cc" +#line 2386 "dhcp4_parser.cc" break; - case 310: // host_reservation_identifiers: "host-reservation-identifiers" $@50 ":" "[" host_reservation_identifiers_list "]" -#line 1291 "dhcp4_parser.yy" + case 316: // host_reservation_identifiers: "host-reservation-identifiers" $@50 ":" "[" host_reservation_identifiers_list "]" +#line 1315 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 2365 "dhcp4_parser.cc" +#line 2395 "dhcp4_parser.cc" break; - case 313: // host_reservation_identifiers_list: host_reservation_identifiers_list "," -#line 1298 "dhcp4_parser.yy" + case 319: // host_reservation_identifiers_list: host_reservation_identifiers_list "," +#line 1322 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2373 "dhcp4_parser.cc" +#line 2403 "dhcp4_parser.cc" break; - case 319: // duid_id: "duid" -#line 1310 "dhcp4_parser.yy" + case 325: // duid_id: "duid" +#line 1334 "dhcp4_parser.yy" { ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(duid); } -#line 2382 "dhcp4_parser.cc" +#line 2412 "dhcp4_parser.cc" break; - case 320: // hw_address_id: "hw-address" -#line 1315 "dhcp4_parser.yy" + case 326: // hw_address_id: "hw-address" +#line 1339 "dhcp4_parser.yy" { ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(hwaddr); } -#line 2391 "dhcp4_parser.cc" +#line 2421 "dhcp4_parser.cc" break; - case 321: // circuit_id: "circuit-id" -#line 1320 "dhcp4_parser.yy" + case 327: // circuit_id: "circuit-id" +#line 1344 "dhcp4_parser.yy" { ElementPtr circuit(new StringElement("circuit-id", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(circuit); } -#line 2400 "dhcp4_parser.cc" +#line 2430 "dhcp4_parser.cc" break; - case 322: // client_id: "client-id" -#line 1325 "dhcp4_parser.yy" + case 328: // client_id: "client-id" +#line 1349 "dhcp4_parser.yy" { ElementPtr client(new StringElement("client-id", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(client); } -#line 2409 "dhcp4_parser.cc" +#line 2439 "dhcp4_parser.cc" break; - case 323: // flex_id: "flex-id" -#line 1330 "dhcp4_parser.yy" + case 329: // flex_id: "flex-id" +#line 1354 "dhcp4_parser.yy" { ElementPtr flex_id(new StringElement("flex-id", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(flex_id); } -#line 2418 "dhcp4_parser.cc" +#line 2448 "dhcp4_parser.cc" break; - case 324: // $@51: %empty -#line 1337 "dhcp4_parser.yy" + case 330: // $@51: %empty +#line 1361 "dhcp4_parser.yy" { ctx.unique("multi-threading", ctx.loc2pos(yystack_[0].location)); ElementPtr mt(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -2426,60 +2456,60 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(mt); ctx.enter(ctx.DHCP_MULTI_THREADING); } -#line 2430 "dhcp4_parser.cc" +#line 2460 "dhcp4_parser.cc" break; - case 325: // dhcp_multi_threading: "multi-threading" $@51 ":" "{" multi_threading_params "}" -#line 1343 "dhcp4_parser.yy" + case 331: // dhcp_multi_threading: "multi-threading" $@51 ":" "{" multi_threading_params "}" +#line 1367 "dhcp4_parser.yy" { // The enable parameter is required. ctx.require("enable-multi-threading", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); ctx.leave(); } -#line 2441 "dhcp4_parser.cc" +#line 2471 "dhcp4_parser.cc" break; - case 328: // multi_threading_params: multi_threading_params "," -#line 1352 "dhcp4_parser.yy" + case 334: // multi_threading_params: multi_threading_params "," +#line 1376 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2449 "dhcp4_parser.cc" +#line 2479 "dhcp4_parser.cc" break; - case 335: // enable_multi_threading: "enable-multi-threading" ":" "boolean" -#line 1365 "dhcp4_parser.yy" + case 341: // enable_multi_threading: "enable-multi-threading" ":" "boolean" +#line 1389 "dhcp4_parser.yy" { ctx.unique("enable-multi-threading", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("enable-multi-threading", b); } -#line 2459 "dhcp4_parser.cc" +#line 2489 "dhcp4_parser.cc" break; - case 336: // thread_pool_size: "thread-pool-size" ":" "integer" -#line 1371 "dhcp4_parser.yy" + case 342: // thread_pool_size: "thread-pool-size" ":" "integer" +#line 1395 "dhcp4_parser.yy" { ctx.unique("thread-pool-size", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("thread-pool-size", prf); } -#line 2469 "dhcp4_parser.cc" +#line 2499 "dhcp4_parser.cc" break; - case 337: // packet_queue_size: "packet-queue-size" ":" "integer" -#line 1377 "dhcp4_parser.yy" + case 343: // packet_queue_size: "packet-queue-size" ":" "integer" +#line 1401 "dhcp4_parser.yy" { ctx.unique("packet-queue-size", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("packet-queue-size", prf); } -#line 2479 "dhcp4_parser.cc" +#line 2509 "dhcp4_parser.cc" break; - case 338: // $@52: %empty -#line 1383 "dhcp4_parser.yy" + case 344: // $@52: %empty +#line 1407 "dhcp4_parser.yy" { ctx.unique("hooks-libraries", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -2487,113 +2517,113 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.HOOKS_LIBRARIES); } -#line 2491 "dhcp4_parser.cc" +#line 2521 "dhcp4_parser.cc" break; - case 339: // hooks_libraries: "hooks-libraries" $@52 ":" "[" hooks_libraries_list "]" -#line 1389 "dhcp4_parser.yy" + case 345: // hooks_libraries: "hooks-libraries" $@52 ":" "[" hooks_libraries_list "]" +#line 1413 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 2500 "dhcp4_parser.cc" +#line 2530 "dhcp4_parser.cc" break; - case 344: // not_empty_hooks_libraries_list: not_empty_hooks_libraries_list "," -#line 1400 "dhcp4_parser.yy" + case 350: // not_empty_hooks_libraries_list: not_empty_hooks_libraries_list "," +#line 1424 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2508 "dhcp4_parser.cc" +#line 2538 "dhcp4_parser.cc" break; - case 345: // $@53: %empty -#line 1405 "dhcp4_parser.yy" + case 351: // $@53: %empty +#line 1429 "dhcp4_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 2518 "dhcp4_parser.cc" +#line 2548 "dhcp4_parser.cc" break; - case 346: // hooks_library: "{" $@53 hooks_params "}" -#line 1409 "dhcp4_parser.yy" + case 352: // hooks_library: "{" $@53 hooks_params "}" +#line 1433 "dhcp4_parser.yy" { // The library hooks parameter is required ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 2528 "dhcp4_parser.cc" +#line 2558 "dhcp4_parser.cc" break; - case 347: // $@54: %empty -#line 1415 "dhcp4_parser.yy" + case 353: // $@54: %empty +#line 1439 "dhcp4_parser.yy" { // Parse the hooks-libraries list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 2538 "dhcp4_parser.cc" +#line 2568 "dhcp4_parser.cc" break; - case 348: // sub_hooks_library: "{" $@54 hooks_params "}" -#line 1419 "dhcp4_parser.yy" + case 354: // sub_hooks_library: "{" $@54 hooks_params "}" +#line 1443 "dhcp4_parser.yy" { // The library hooks parameter is required ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 2548 "dhcp4_parser.cc" +#line 2578 "dhcp4_parser.cc" break; - case 351: // hooks_params: hooks_params "," -#line 1427 "dhcp4_parser.yy" + case 357: // hooks_params: hooks_params "," +#line 1451 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2556 "dhcp4_parser.cc" +#line 2586 "dhcp4_parser.cc" break; - case 355: // $@55: %empty -#line 1437 "dhcp4_parser.yy" + case 361: // $@55: %empty +#line 1461 "dhcp4_parser.yy" { ctx.unique("library", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2565 "dhcp4_parser.cc" +#line 2595 "dhcp4_parser.cc" break; - case 356: // library: "library" $@55 ":" "constant string" -#line 1440 "dhcp4_parser.yy" + case 362: // library: "library" $@55 ":" "constant string" +#line 1464 "dhcp4_parser.yy" { ElementPtr lib(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("library", lib); ctx.leave(); } -#line 2575 "dhcp4_parser.cc" +#line 2605 "dhcp4_parser.cc" break; - case 357: // $@56: %empty -#line 1446 "dhcp4_parser.yy" + case 363: // $@56: %empty +#line 1470 "dhcp4_parser.yy" { ctx.unique("parameters", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2584 "dhcp4_parser.cc" +#line 2614 "dhcp4_parser.cc" break; - case 358: // parameters: "parameters" $@56 ":" map_value -#line 1449 "dhcp4_parser.yy" + case 364: // parameters: "parameters" $@56 ":" map_value +#line 1473 "dhcp4_parser.yy" { ctx.stack_.back()->set("parameters", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 2593 "dhcp4_parser.cc" +#line 2623 "dhcp4_parser.cc" break; - case 359: // $@57: %empty -#line 1455 "dhcp4_parser.yy" + case 365: // $@57: %empty +#line 1479 "dhcp4_parser.yy" { ctx.unique("expired-leases-processing", ctx.loc2pos(yystack_[0].location)); ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -2601,89 +2631,89 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(m); ctx.enter(ctx.EXPIRED_LEASES_PROCESSING); } -#line 2605 "dhcp4_parser.cc" +#line 2635 "dhcp4_parser.cc" break; - case 360: // expired_leases_processing: "expired-leases-processing" $@57 ":" "{" expired_leases_params "}" -#line 1461 "dhcp4_parser.yy" + case 366: // expired_leases_processing: "expired-leases-processing" $@57 ":" "{" expired_leases_params "}" +#line 1485 "dhcp4_parser.yy" { // No expired lease parameter is required ctx.stack_.pop_back(); ctx.leave(); } -#line 2615 "dhcp4_parser.cc" +#line 2645 "dhcp4_parser.cc" break; - case 363: // expired_leases_params: expired_leases_params "," -#line 1469 "dhcp4_parser.yy" + case 369: // expired_leases_params: expired_leases_params "," +#line 1493 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2623 "dhcp4_parser.cc" +#line 2653 "dhcp4_parser.cc" break; - case 370: // reclaim_timer_wait_time: "reclaim-timer-wait-time" ":" "integer" -#line 1482 "dhcp4_parser.yy" + case 376: // reclaim_timer_wait_time: "reclaim-timer-wait-time" ":" "integer" +#line 1506 "dhcp4_parser.yy" { ctx.unique("reclaim-timer-wait-time", ctx.loc2pos(yystack_[2].location)); ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("reclaim-timer-wait-time", value); } -#line 2633 "dhcp4_parser.cc" +#line 2663 "dhcp4_parser.cc" break; - case 371: // flush_reclaimed_timer_wait_time: "flush-reclaimed-timer-wait-time" ":" "integer" -#line 1488 "dhcp4_parser.yy" + case 377: // flush_reclaimed_timer_wait_time: "flush-reclaimed-timer-wait-time" ":" "integer" +#line 1512 "dhcp4_parser.yy" { ctx.unique("flush-reclaimed-timer-wait-time", ctx.loc2pos(yystack_[2].location)); ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("flush-reclaimed-timer-wait-time", value); } -#line 2643 "dhcp4_parser.cc" +#line 2673 "dhcp4_parser.cc" break; - case 372: // hold_reclaimed_time: "hold-reclaimed-time" ":" "integer" -#line 1494 "dhcp4_parser.yy" + case 378: // hold_reclaimed_time: "hold-reclaimed-time" ":" "integer" +#line 1518 "dhcp4_parser.yy" { ctx.unique("hold-reclaimed-time", ctx.loc2pos(yystack_[2].location)); ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hold-reclaimed-time", value); } -#line 2653 "dhcp4_parser.cc" +#line 2683 "dhcp4_parser.cc" break; - case 373: // max_reclaim_leases: "max-reclaim-leases" ":" "integer" -#line 1500 "dhcp4_parser.yy" + case 379: // max_reclaim_leases: "max-reclaim-leases" ":" "integer" +#line 1524 "dhcp4_parser.yy" { ctx.unique("max-reclaim-leases", ctx.loc2pos(yystack_[2].location)); ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-reclaim-leases", value); } -#line 2663 "dhcp4_parser.cc" +#line 2693 "dhcp4_parser.cc" break; - case 374: // max_reclaim_time: "max-reclaim-time" ":" "integer" -#line 1506 "dhcp4_parser.yy" + case 380: // max_reclaim_time: "max-reclaim-time" ":" "integer" +#line 1530 "dhcp4_parser.yy" { ctx.unique("max-reclaim-time", ctx.loc2pos(yystack_[2].location)); ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-reclaim-time", value); } -#line 2673 "dhcp4_parser.cc" +#line 2703 "dhcp4_parser.cc" break; - case 375: // unwarned_reclaim_cycles: "unwarned-reclaim-cycles" ":" "integer" -#line 1512 "dhcp4_parser.yy" + case 381: // unwarned_reclaim_cycles: "unwarned-reclaim-cycles" ":" "integer" +#line 1536 "dhcp4_parser.yy" { ctx.unique("unwarned-reclaim-cycles", ctx.loc2pos(yystack_[2].location)); ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("unwarned-reclaim-cycles", value); } -#line 2683 "dhcp4_parser.cc" +#line 2713 "dhcp4_parser.cc" break; - case 376: // $@58: %empty -#line 1521 "dhcp4_parser.yy" + case 382: // $@58: %empty +#line 1545 "dhcp4_parser.yy" { ctx.unique("subnet4", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -2691,38 +2721,38 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.SUBNET4); } -#line 2695 "dhcp4_parser.cc" +#line 2725 "dhcp4_parser.cc" break; - case 377: // subnet4_list: "subnet4" $@58 ":" "[" subnet4_list_content "]" -#line 1527 "dhcp4_parser.yy" + case 383: // subnet4_list: "subnet4" $@58 ":" "[" subnet4_list_content "]" +#line 1551 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 2704 "dhcp4_parser.cc" +#line 2734 "dhcp4_parser.cc" break; - case 382: // not_empty_subnet4_list: not_empty_subnet4_list "," -#line 1541 "dhcp4_parser.yy" + case 388: // not_empty_subnet4_list: not_empty_subnet4_list "," +#line 1565 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2712 "dhcp4_parser.cc" +#line 2742 "dhcp4_parser.cc" break; - case 383: // $@59: %empty -#line 1550 "dhcp4_parser.yy" + case 389: // $@59: %empty +#line 1574 "dhcp4_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 2722 "dhcp4_parser.cc" +#line 2752 "dhcp4_parser.cc" break; - case 384: // subnet4: "{" $@59 subnet4_params "}" -#line 1554 "dhcp4_parser.yy" + case 390: // subnet4: "{" $@59 subnet4_params "}" +#line 1578 "dhcp4_parser.yy" { // Once we reached this place, the subnet parsing is now complete. // If we want to, we can implement default values here. @@ -2744,153 +2774,153 @@ namespace isc { namespace dhcp { ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 2748 "dhcp4_parser.cc" +#line 2778 "dhcp4_parser.cc" break; - case 385: // $@60: %empty -#line 1576 "dhcp4_parser.yy" + case 391: // $@60: %empty +#line 1600 "dhcp4_parser.yy" { // Parse the subnet4 list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 2758 "dhcp4_parser.cc" +#line 2788 "dhcp4_parser.cc" break; - case 386: // sub_subnet4: "{" $@60 subnet4_params "}" -#line 1580 "dhcp4_parser.yy" + case 392: // sub_subnet4: "{" $@60 subnet4_params "}" +#line 1604 "dhcp4_parser.yy" { // The subnet subnet4 parameter is required ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 2768 "dhcp4_parser.cc" +#line 2798 "dhcp4_parser.cc" break; - case 389: // subnet4_params: subnet4_params "," -#line 1589 "dhcp4_parser.yy" + case 395: // subnet4_params: subnet4_params "," +#line 1613 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2776 "dhcp4_parser.cc" +#line 2806 "dhcp4_parser.cc" break; - case 440: // $@61: %empty -#line 1647 "dhcp4_parser.yy" + case 449: // $@61: %empty +#line 1674 "dhcp4_parser.yy" { ctx.unique("subnet", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2785 "dhcp4_parser.cc" +#line 2815 "dhcp4_parser.cc" break; - case 441: // subnet: "subnet" $@61 ":" "constant string" -#line 1650 "dhcp4_parser.yy" + case 450: // subnet: "subnet" $@61 ":" "constant string" +#line 1677 "dhcp4_parser.yy" { ElementPtr subnet(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("subnet", subnet); ctx.leave(); } -#line 2795 "dhcp4_parser.cc" +#line 2825 "dhcp4_parser.cc" break; - case 442: // $@62: %empty -#line 1656 "dhcp4_parser.yy" + case 451: // $@62: %empty +#line 1683 "dhcp4_parser.yy" { ctx.unique("4o6-interface", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2804 "dhcp4_parser.cc" +#line 2834 "dhcp4_parser.cc" break; - case 443: // subnet_4o6_interface: "4o6-interface" $@62 ":" "constant string" -#line 1659 "dhcp4_parser.yy" + case 452: // subnet_4o6_interface: "4o6-interface" $@62 ":" "constant string" +#line 1686 "dhcp4_parser.yy" { ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("4o6-interface", iface); ctx.leave(); } -#line 2814 "dhcp4_parser.cc" +#line 2844 "dhcp4_parser.cc" break; - case 444: // $@63: %empty -#line 1665 "dhcp4_parser.yy" + case 453: // $@63: %empty +#line 1692 "dhcp4_parser.yy" { ctx.unique("4o6-interface-id", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2823 "dhcp4_parser.cc" +#line 2853 "dhcp4_parser.cc" break; - case 445: // subnet_4o6_interface_id: "4o6-interface-id" $@63 ":" "constant string" -#line 1668 "dhcp4_parser.yy" + case 454: // subnet_4o6_interface_id: "4o6-interface-id" $@63 ":" "constant string" +#line 1695 "dhcp4_parser.yy" { ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("4o6-interface-id", iface); ctx.leave(); } -#line 2833 "dhcp4_parser.cc" +#line 2863 "dhcp4_parser.cc" break; - case 446: // $@64: %empty -#line 1674 "dhcp4_parser.yy" + case 455: // $@64: %empty +#line 1701 "dhcp4_parser.yy" { ctx.unique("4o6-subnet", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2842 "dhcp4_parser.cc" +#line 2872 "dhcp4_parser.cc" break; - case 447: // subnet_4o6_subnet: "4o6-subnet" $@64 ":" "constant string" -#line 1677 "dhcp4_parser.yy" + case 456: // subnet_4o6_subnet: "4o6-subnet" $@64 ":" "constant string" +#line 1704 "dhcp4_parser.yy" { ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("4o6-subnet", iface); ctx.leave(); } -#line 2852 "dhcp4_parser.cc" +#line 2882 "dhcp4_parser.cc" break; - case 448: // $@65: %empty -#line 1683 "dhcp4_parser.yy" + case 457: // $@65: %empty +#line 1710 "dhcp4_parser.yy" { ctx.unique("interface", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2861 "dhcp4_parser.cc" +#line 2891 "dhcp4_parser.cc" break; - case 449: // interface: "interface" $@65 ":" "constant string" -#line 1686 "dhcp4_parser.yy" + case 458: // interface: "interface" $@65 ":" "constant string" +#line 1713 "dhcp4_parser.yy" { ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("interface", iface); ctx.leave(); } -#line 2871 "dhcp4_parser.cc" +#line 2901 "dhcp4_parser.cc" break; - case 450: // $@66: %empty -#line 1692 "dhcp4_parser.yy" + case 459: // $@66: %empty +#line 1719 "dhcp4_parser.yy" { ctx.unique("client-class", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2880 "dhcp4_parser.cc" +#line 2910 "dhcp4_parser.cc" break; - case 451: // client_class: "client-class" $@66 ":" "constant string" -#line 1695 "dhcp4_parser.yy" + case 460: // client_class: "client-class" $@66 ":" "constant string" +#line 1722 "dhcp4_parser.yy" { ElementPtr cls(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("client-class", cls); ctx.leave(); } -#line 2890 "dhcp4_parser.cc" +#line 2920 "dhcp4_parser.cc" break; - case 452: // $@67: %empty -#line 1702 "dhcp4_parser.yy" + case 461: // $@67: %empty +#line 1729 "dhcp4_parser.yy" { ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location)); ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -2898,20 +2928,20 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(c); ctx.enter(ctx.NO_KEYWORD); } -#line 2902 "dhcp4_parser.cc" +#line 2932 "dhcp4_parser.cc" break; - case 453: // network_client_classes: "client-classes" $@67 ":" list_strings -#line 1708 "dhcp4_parser.yy" + case 462: // network_client_classes: "client-classes" $@67 ":" list_strings +#line 1735 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 2911 "dhcp4_parser.cc" +#line 2941 "dhcp4_parser.cc" break; - case 454: // $@68: %empty -#line 1714 "dhcp4_parser.yy" + case 463: // $@68: %empty +#line 1741 "dhcp4_parser.yy" { ctx.unique("require-client-classes", ctx.loc2pos(yystack_[0].location)); ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -2919,20 +2949,20 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(c); ctx.enter(ctx.NO_KEYWORD); } -#line 2923 "dhcp4_parser.cc" +#line 2953 "dhcp4_parser.cc" break; - case 455: // require_client_classes: "require-client-classes" $@68 ":" list_strings -#line 1720 "dhcp4_parser.yy" + case 464: // require_client_classes: "require-client-classes" $@68 ":" list_strings +#line 1747 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 2932 "dhcp4_parser.cc" +#line 2962 "dhcp4_parser.cc" break; - case 456: // $@69: %empty -#line 1725 "dhcp4_parser.yy" + case 465: // $@69: %empty +#line 1752 "dhcp4_parser.yy" { ctx.unique("evaluate-additional-classes", ctx.loc2pos(yystack_[0].location)); ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -2940,60 +2970,60 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(c); ctx.enter(ctx.NO_KEYWORD); } -#line 2944 "dhcp4_parser.cc" +#line 2974 "dhcp4_parser.cc" break; - case 457: // evaluate_additional_classes: "evaluate-additional-classes" $@69 ":" list_strings -#line 1731 "dhcp4_parser.yy" + case 466: // evaluate_additional_classes: "evaluate-additional-classes" $@69 ":" list_strings +#line 1758 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 2953 "dhcp4_parser.cc" +#line 2983 "dhcp4_parser.cc" break; - case 458: // reservations_global: "reservations-global" ":" "boolean" -#line 1736 "dhcp4_parser.yy" + case 467: // reservations_global: "reservations-global" ":" "boolean" +#line 1763 "dhcp4_parser.yy" { ctx.unique("reservations-global", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("reservations-global", b); } -#line 2963 "dhcp4_parser.cc" +#line 2993 "dhcp4_parser.cc" break; - case 459: // reservations_in_subnet: "reservations-in-subnet" ":" "boolean" -#line 1742 "dhcp4_parser.yy" + case 468: // reservations_in_subnet: "reservations-in-subnet" ":" "boolean" +#line 1769 "dhcp4_parser.yy" { ctx.unique("reservations-in-subnet", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("reservations-in-subnet", b); } -#line 2973 "dhcp4_parser.cc" +#line 3003 "dhcp4_parser.cc" break; - case 460: // reservations_out_of_pool: "reservations-out-of-pool" ":" "boolean" -#line 1748 "dhcp4_parser.yy" + case 469: // reservations_out_of_pool: "reservations-out-of-pool" ":" "boolean" +#line 1775 "dhcp4_parser.yy" { ctx.unique("reservations-out-of-pool", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("reservations-out-of-pool", b); } -#line 2983 "dhcp4_parser.cc" +#line 3013 "dhcp4_parser.cc" break; - case 461: // id: "id" ":" "integer" -#line 1754 "dhcp4_parser.yy" + case 470: // id: "id" ":" "integer" +#line 1781 "dhcp4_parser.yy" { ctx.unique("id", ctx.loc2pos(yystack_[2].location)); ElementPtr id(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("id", id); } -#line 2993 "dhcp4_parser.cc" +#line 3023 "dhcp4_parser.cc" break; - case 462: // $@70: %empty -#line 1762 "dhcp4_parser.yy" + case 471: // $@70: %empty +#line 1789 "dhcp4_parser.yy" { ctx.unique("shared-networks", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3001,54 +3031,54 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.SHARED_NETWORK); } -#line 3005 "dhcp4_parser.cc" +#line 3035 "dhcp4_parser.cc" break; - case 463: // shared_networks: "shared-networks" $@70 ":" "[" shared_networks_content "]" -#line 1768 "dhcp4_parser.yy" + case 472: // shared_networks: "shared-networks" $@70 ":" "[" shared_networks_content "]" +#line 1795 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3014 "dhcp4_parser.cc" +#line 3044 "dhcp4_parser.cc" break; - case 468: // shared_networks_list: shared_networks_list "," -#line 1781 "dhcp4_parser.yy" + case 477: // shared_networks_list: shared_networks_list "," +#line 1808 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3022 "dhcp4_parser.cc" +#line 3052 "dhcp4_parser.cc" break; - case 469: // $@71: %empty -#line 1786 "dhcp4_parser.yy" + case 478: // $@71: %empty +#line 1813 "dhcp4_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 3032 "dhcp4_parser.cc" +#line 3062 "dhcp4_parser.cc" break; - case 470: // shared_network: "{" $@71 shared_network_params "}" -#line 1790 "dhcp4_parser.yy" + case 479: // shared_network: "{" $@71 shared_network_params "}" +#line 1817 "dhcp4_parser.yy" { ctx.stack_.pop_back(); } -#line 3040 "dhcp4_parser.cc" +#line 3070 "dhcp4_parser.cc" break; - case 473: // shared_network_params: shared_network_params "," -#line 1796 "dhcp4_parser.yy" + case 482: // shared_network_params: shared_network_params "," +#line 1823 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3048 "dhcp4_parser.cc" +#line 3078 "dhcp4_parser.cc" break; - case 519: // $@72: %empty -#line 1852 "dhcp4_parser.yy" + case 531: // $@72: %empty +#line 1882 "dhcp4_parser.yy" { ctx.unique("option-def", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3056,55 +3086,55 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.OPTION_DEF); } -#line 3060 "dhcp4_parser.cc" +#line 3090 "dhcp4_parser.cc" break; - case 520: // option_def_list: "option-def" $@72 ":" "[" option_def_list_content "]" -#line 1858 "dhcp4_parser.yy" + case 532: // option_def_list: "option-def" $@72 ":" "[" option_def_list_content "]" +#line 1888 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3069 "dhcp4_parser.cc" +#line 3099 "dhcp4_parser.cc" break; - case 521: // $@73: %empty -#line 1866 "dhcp4_parser.yy" + case 533: // $@73: %empty +#line 1896 "dhcp4_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 3078 "dhcp4_parser.cc" +#line 3108 "dhcp4_parser.cc" break; - case 522: // sub_option_def_list: "{" $@73 option_def_list "}" -#line 1869 "dhcp4_parser.yy" + case 534: // sub_option_def_list: "{" $@73 option_def_list "}" +#line 1899 "dhcp4_parser.yy" { // parsing completed } -#line 3086 "dhcp4_parser.cc" +#line 3116 "dhcp4_parser.cc" break; - case 527: // not_empty_option_def_list: not_empty_option_def_list "," -#line 1881 "dhcp4_parser.yy" + case 539: // not_empty_option_def_list: not_empty_option_def_list "," +#line 1911 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3094 "dhcp4_parser.cc" +#line 3124 "dhcp4_parser.cc" break; - case 528: // $@74: %empty -#line 1888 "dhcp4_parser.yy" + case 540: // $@74: %empty +#line 1918 "dhcp4_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 3104 "dhcp4_parser.cc" +#line 3134 "dhcp4_parser.cc" break; - case 529: // option_def_entry: "{" $@74 option_def_params "}" -#line 1892 "dhcp4_parser.yy" + case 541: // option_def_entry: "{" $@74 option_def_params "}" +#line 1922 "dhcp4_parser.yy" { // The name, code and type option def parameters are required. ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); @@ -3112,21 +3142,21 @@ namespace isc { namespace dhcp { ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 3116 "dhcp4_parser.cc" +#line 3146 "dhcp4_parser.cc" break; - case 530: // $@75: %empty -#line 1903 "dhcp4_parser.yy" + case 542: // $@75: %empty +#line 1933 "dhcp4_parser.yy" { // Parse the option-def list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 3126 "dhcp4_parser.cc" +#line 3156 "dhcp4_parser.cc" break; - case 531: // sub_option_def: "{" $@75 option_def_params "}" -#line 1907 "dhcp4_parser.yy" + case 543: // sub_option_def: "{" $@75 option_def_params "}" +#line 1937 "dhcp4_parser.yy" { // The name, code and type option def parameters are required. ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); @@ -3134,115 +3164,115 @@ namespace isc { namespace dhcp { ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 3138 "dhcp4_parser.cc" +#line 3168 "dhcp4_parser.cc" break; - case 536: // not_empty_option_def_params: not_empty_option_def_params "," -#line 1923 "dhcp4_parser.yy" + case 548: // not_empty_option_def_params: not_empty_option_def_params "," +#line 1953 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3146 "dhcp4_parser.cc" +#line 3176 "dhcp4_parser.cc" break; - case 548: // code: "code" ":" "integer" -#line 1942 "dhcp4_parser.yy" + case 560: // code: "code" ":" "integer" +#line 1972 "dhcp4_parser.yy" { ctx.unique("code", ctx.loc2pos(yystack_[2].location)); ElementPtr code(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("code", code); } -#line 3156 "dhcp4_parser.cc" +#line 3186 "dhcp4_parser.cc" break; - case 550: // $@76: %empty -#line 1950 "dhcp4_parser.yy" + case 562: // $@76: %empty +#line 1980 "dhcp4_parser.yy" { ctx.unique("type", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3165 "dhcp4_parser.cc" +#line 3195 "dhcp4_parser.cc" break; - case 551: // option_def_type: "type" $@76 ":" "constant string" -#line 1953 "dhcp4_parser.yy" + case 563: // option_def_type: "type" $@76 ":" "constant string" +#line 1983 "dhcp4_parser.yy" { ElementPtr prf(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("type", prf); ctx.leave(); } -#line 3175 "dhcp4_parser.cc" +#line 3205 "dhcp4_parser.cc" break; - case 552: // $@77: %empty -#line 1959 "dhcp4_parser.yy" + case 564: // $@77: %empty +#line 1989 "dhcp4_parser.yy" { ctx.unique("record-types", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3184 "dhcp4_parser.cc" +#line 3214 "dhcp4_parser.cc" break; - case 553: // option_def_record_types: "record-types" $@77 ":" "constant string" -#line 1962 "dhcp4_parser.yy" + case 565: // option_def_record_types: "record-types" $@77 ":" "constant string" +#line 1992 "dhcp4_parser.yy" { ElementPtr rtypes(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("record-types", rtypes); ctx.leave(); } -#line 3194 "dhcp4_parser.cc" +#line 3224 "dhcp4_parser.cc" break; - case 554: // $@78: %empty -#line 1968 "dhcp4_parser.yy" + case 566: // $@78: %empty +#line 1998 "dhcp4_parser.yy" { ctx.unique("space", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3203 "dhcp4_parser.cc" +#line 3233 "dhcp4_parser.cc" break; - case 555: // space: "space" $@78 ":" "constant string" -#line 1971 "dhcp4_parser.yy" + case 567: // space: "space" $@78 ":" "constant string" +#line 2001 "dhcp4_parser.yy" { ElementPtr space(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("space", space); ctx.leave(); } -#line 3213 "dhcp4_parser.cc" +#line 3243 "dhcp4_parser.cc" break; - case 557: // $@79: %empty -#line 1979 "dhcp4_parser.yy" + case 569: // $@79: %empty +#line 2009 "dhcp4_parser.yy" { ctx.unique("encapsulate", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3222 "dhcp4_parser.cc" +#line 3252 "dhcp4_parser.cc" break; - case 558: // option_def_encapsulate: "encapsulate" $@79 ":" "constant string" -#line 1982 "dhcp4_parser.yy" + case 570: // option_def_encapsulate: "encapsulate" $@79 ":" "constant string" +#line 2012 "dhcp4_parser.yy" { ElementPtr encap(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("encapsulate", encap); ctx.leave(); } -#line 3232 "dhcp4_parser.cc" +#line 3262 "dhcp4_parser.cc" break; - case 559: // option_def_array: "array" ":" "boolean" -#line 1988 "dhcp4_parser.yy" + case 571: // option_def_array: "array" ":" "boolean" +#line 2018 "dhcp4_parser.yy" { ctx.unique("array", ctx.loc2pos(yystack_[2].location)); ElementPtr array(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("array", array); } -#line 3242 "dhcp4_parser.cc" +#line 3272 "dhcp4_parser.cc" break; - case 560: // $@80: %empty -#line 1998 "dhcp4_parser.yy" + case 572: // $@80: %empty +#line 2028 "dhcp4_parser.yy" { ctx.unique("option-data", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3250,123 +3280,123 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.OPTION_DATA); } -#line 3254 "dhcp4_parser.cc" +#line 3284 "dhcp4_parser.cc" break; - case 561: // option_data_list: "option-data" $@80 ":" "[" option_data_list_content "]" -#line 2004 "dhcp4_parser.yy" + case 573: // option_data_list: "option-data" $@80 ":" "[" option_data_list_content "]" +#line 2034 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3263 "dhcp4_parser.cc" +#line 3293 "dhcp4_parser.cc" break; - case 566: // not_empty_option_data_list: not_empty_option_data_list "," -#line 2019 "dhcp4_parser.yy" + case 578: // not_empty_option_data_list: not_empty_option_data_list "," +#line 2049 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3271 "dhcp4_parser.cc" +#line 3301 "dhcp4_parser.cc" break; - case 567: // $@81: %empty -#line 2026 "dhcp4_parser.yy" + case 579: // $@81: %empty +#line 2056 "dhcp4_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 3281 "dhcp4_parser.cc" +#line 3311 "dhcp4_parser.cc" break; - case 568: // option_data_entry: "{" $@81 option_data_params "}" -#line 2030 "dhcp4_parser.yy" + case 580: // option_data_entry: "{" $@81 option_data_params "}" +#line 2060 "dhcp4_parser.yy" { /// @todo: the code or name parameters are required. ctx.stack_.pop_back(); } -#line 3290 "dhcp4_parser.cc" +#line 3320 "dhcp4_parser.cc" break; - case 569: // $@82: %empty -#line 2038 "dhcp4_parser.yy" + case 581: // $@82: %empty +#line 2068 "dhcp4_parser.yy" { // Parse the option-data list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 3300 "dhcp4_parser.cc" +#line 3330 "dhcp4_parser.cc" break; - case 570: // sub_option_data: "{" $@82 option_data_params "}" -#line 2042 "dhcp4_parser.yy" + case 582: // sub_option_data: "{" $@82 option_data_params "}" +#line 2072 "dhcp4_parser.yy" { /// @todo: the code or name parameters are required. // parsing completed } -#line 3309 "dhcp4_parser.cc" +#line 3339 "dhcp4_parser.cc" break; - case 575: // not_empty_option_data_params: not_empty_option_data_params "," -#line 2058 "dhcp4_parser.yy" + case 587: // not_empty_option_data_params: not_empty_option_data_params "," +#line 2088 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3317 "dhcp4_parser.cc" +#line 3347 "dhcp4_parser.cc" break; - case 588: // $@83: %empty -#line 2080 "dhcp4_parser.yy" + case 600: // $@83: %empty +#line 2110 "dhcp4_parser.yy" { ctx.unique("data", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3326 "dhcp4_parser.cc" +#line 3356 "dhcp4_parser.cc" break; - case 589: // option_data_data: "data" $@83 ":" "constant string" -#line 2083 "dhcp4_parser.yy" + case 601: // option_data_data: "data" $@83 ":" "constant string" +#line 2113 "dhcp4_parser.yy" { ElementPtr data(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("data", data); ctx.leave(); } -#line 3336 "dhcp4_parser.cc" +#line 3366 "dhcp4_parser.cc" break; - case 592: // option_data_csv_format: "csv-format" ":" "boolean" -#line 2093 "dhcp4_parser.yy" + case 604: // option_data_csv_format: "csv-format" ":" "boolean" +#line 2123 "dhcp4_parser.yy" { ctx.unique("csv-format", ctx.loc2pos(yystack_[2].location)); ElementPtr csv(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("csv-format", csv); } -#line 3346 "dhcp4_parser.cc" +#line 3376 "dhcp4_parser.cc" break; - case 593: // option_data_always_send: "always-send" ":" "boolean" -#line 2099 "dhcp4_parser.yy" + case 605: // option_data_always_send: "always-send" ":" "boolean" +#line 2129 "dhcp4_parser.yy" { ctx.unique("always-send", ctx.loc2pos(yystack_[2].location)); ElementPtr persist(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("always-send", persist); } -#line 3356 "dhcp4_parser.cc" +#line 3386 "dhcp4_parser.cc" break; - case 594: // option_data_never_send: "never-send" ":" "boolean" -#line 2105 "dhcp4_parser.yy" + case 606: // option_data_never_send: "never-send" ":" "boolean" +#line 2135 "dhcp4_parser.yy" { ctx.unique("never-send", ctx.loc2pos(yystack_[2].location)); ElementPtr cancel(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("never-send", cancel); } -#line 3366 "dhcp4_parser.cc" +#line 3396 "dhcp4_parser.cc" break; - case 595: // $@84: %empty -#line 2111 "dhcp4_parser.yy" + case 607: // $@84: %empty +#line 2141 "dhcp4_parser.yy" { ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location)); ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3374,20 +3404,20 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(c); ctx.enter(ctx.NO_KEYWORD); } -#line 3378 "dhcp4_parser.cc" +#line 3408 "dhcp4_parser.cc" break; - case 596: // option_data_client_classes: "client-classes" $@84 ":" list_strings -#line 2117 "dhcp4_parser.yy" + case 608: // option_data_client_classes: "client-classes" $@84 ":" list_strings +#line 2147 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3387 "dhcp4_parser.cc" +#line 3417 "dhcp4_parser.cc" break; - case 597: // $@85: %empty -#line 2125 "dhcp4_parser.yy" + case 609: // $@85: %empty +#line 2155 "dhcp4_parser.yy" { ctx.unique("pools", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3395,113 +3425,113 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.POOLS); } -#line 3399 "dhcp4_parser.cc" +#line 3429 "dhcp4_parser.cc" break; - case 598: // pools_list: "pools" $@85 ":" "[" pools_list_content "]" -#line 2131 "dhcp4_parser.yy" + case 610: // pools_list: "pools" $@85 ":" "[" pools_list_content "]" +#line 2161 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3408 "dhcp4_parser.cc" +#line 3438 "dhcp4_parser.cc" break; - case 603: // not_empty_pools_list: not_empty_pools_list "," -#line 2144 "dhcp4_parser.yy" + case 615: // not_empty_pools_list: not_empty_pools_list "," +#line 2174 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3416 "dhcp4_parser.cc" +#line 3446 "dhcp4_parser.cc" break; - case 604: // $@86: %empty -#line 2149 "dhcp4_parser.yy" + case 616: // $@86: %empty +#line 2179 "dhcp4_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 3426 "dhcp4_parser.cc" +#line 3456 "dhcp4_parser.cc" break; - case 605: // pool_list_entry: "{" $@86 pool_params "}" -#line 2153 "dhcp4_parser.yy" + case 617: // pool_list_entry: "{" $@86 pool_params "}" +#line 2183 "dhcp4_parser.yy" { // The pool parameter is required. ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 3436 "dhcp4_parser.cc" +#line 3466 "dhcp4_parser.cc" break; - case 606: // $@87: %empty -#line 2159 "dhcp4_parser.yy" + case 618: // $@87: %empty +#line 2189 "dhcp4_parser.yy" { // Parse the pool list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 3446 "dhcp4_parser.cc" +#line 3476 "dhcp4_parser.cc" break; - case 607: // sub_pool4: "{" $@87 pool_params "}" -#line 2163 "dhcp4_parser.yy" + case 619: // sub_pool4: "{" $@87 pool_params "}" +#line 2193 "dhcp4_parser.yy" { // The pool parameter is required. ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 3456 "dhcp4_parser.cc" +#line 3486 "dhcp4_parser.cc" break; - case 610: // pool_params: pool_params "," -#line 2171 "dhcp4_parser.yy" + case 622: // pool_params: pool_params "," +#line 2201 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3464 "dhcp4_parser.cc" +#line 3494 "dhcp4_parser.cc" break; - case 621: // $@88: %empty -#line 2188 "dhcp4_parser.yy" + case 633: // $@88: %empty +#line 2218 "dhcp4_parser.yy" { ctx.unique("pool", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3473 "dhcp4_parser.cc" +#line 3503 "dhcp4_parser.cc" break; - case 622: // pool_entry: "pool" $@88 ":" "constant string" -#line 2191 "dhcp4_parser.yy" + case 634: // pool_entry: "pool" $@88 ":" "constant string" +#line 2221 "dhcp4_parser.yy" { ElementPtr pool(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("pool", pool); ctx.leave(); } -#line 3483 "dhcp4_parser.cc" +#line 3513 "dhcp4_parser.cc" break; - case 623: // pool_id: "pool-id" ":" "integer" -#line 2197 "dhcp4_parser.yy" + case 635: // pool_id: "pool-id" ":" "integer" +#line 2227 "dhcp4_parser.yy" { ctx.unique("pool-id", ctx.loc2pos(yystack_[2].location)); ElementPtr id(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("pool-id", id); } -#line 3493 "dhcp4_parser.cc" +#line 3523 "dhcp4_parser.cc" break; - case 624: // $@89: %empty -#line 2203 "dhcp4_parser.yy" + case 636: // $@89: %empty +#line 2233 "dhcp4_parser.yy" { ctx.enter(ctx.NO_KEYWORD); } -#line 3501 "dhcp4_parser.cc" +#line 3531 "dhcp4_parser.cc" break; - case 625: // user_context: "user-context" $@89 ":" map_value -#line 2205 "dhcp4_parser.yy" + case 637: // user_context: "user-context" $@89 ":" map_value +#line 2235 "dhcp4_parser.yy" { ElementPtr parent = ctx.stack_.back(); ElementPtr user_context = yystack_[0].value.as < ElementPtr > (); @@ -3524,19 +3554,19 @@ namespace isc { namespace dhcp { parent->set("user-context", user_context); ctx.leave(); } -#line 3528 "dhcp4_parser.cc" +#line 3558 "dhcp4_parser.cc" break; - case 626: // $@90: %empty -#line 2228 "dhcp4_parser.yy" + case 638: // $@90: %empty +#line 2258 "dhcp4_parser.yy" { ctx.enter(ctx.NO_KEYWORD); } -#line 3536 "dhcp4_parser.cc" +#line 3566 "dhcp4_parser.cc" break; - case 627: // comment: "comment" $@90 ":" "constant string" -#line 2230 "dhcp4_parser.yy" + case 639: // comment: "comment" $@90 ":" "constant string" +#line 2260 "dhcp4_parser.yy" { ElementPtr parent = ctx.stack_.back(); ElementPtr user_context(new MapElement(ctx.loc2pos(yystack_[3].location))); @@ -3561,11 +3591,11 @@ namespace isc { namespace dhcp { parent->set("user-context", user_context); ctx.leave(); } -#line 3565 "dhcp4_parser.cc" +#line 3595 "dhcp4_parser.cc" break; - case 628: // $@91: %empty -#line 2258 "dhcp4_parser.yy" + case 640: // $@91: %empty +#line 2288 "dhcp4_parser.yy" { ctx.unique("reservations", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3573,264 +3603,264 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.RESERVATIONS); } -#line 3577 "dhcp4_parser.cc" +#line 3607 "dhcp4_parser.cc" break; - case 629: // reservations: "reservations" $@91 ":" "[" reservations_list "]" -#line 2264 "dhcp4_parser.yy" + case 641: // reservations: "reservations" $@91 ":" "[" reservations_list "]" +#line 2294 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3586 "dhcp4_parser.cc" +#line 3616 "dhcp4_parser.cc" break; - case 634: // not_empty_reservations_list: not_empty_reservations_list "," -#line 2275 "dhcp4_parser.yy" + case 646: // not_empty_reservations_list: not_empty_reservations_list "," +#line 2305 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3594 "dhcp4_parser.cc" +#line 3624 "dhcp4_parser.cc" break; - case 635: // $@92: %empty -#line 2280 "dhcp4_parser.yy" + case 647: // $@92: %empty +#line 2310 "dhcp4_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 3604 "dhcp4_parser.cc" +#line 3634 "dhcp4_parser.cc" break; - case 636: // reservation: "{" $@92 reservation_params "}" -#line 2284 "dhcp4_parser.yy" + case 648: // reservation: "{" $@92 reservation_params "}" +#line 2314 "dhcp4_parser.yy" { /// @todo: an identifier parameter is required. ctx.stack_.pop_back(); } -#line 3613 "dhcp4_parser.cc" +#line 3643 "dhcp4_parser.cc" break; - case 637: // $@93: %empty -#line 2289 "dhcp4_parser.yy" + case 649: // $@93: %empty +#line 2319 "dhcp4_parser.yy" { // Parse the reservations list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 3623 "dhcp4_parser.cc" +#line 3653 "dhcp4_parser.cc" break; - case 638: // sub_reservation: "{" $@93 reservation_params "}" -#line 2293 "dhcp4_parser.yy" + case 650: // sub_reservation: "{" $@93 reservation_params "}" +#line 2323 "dhcp4_parser.yy" { /// @todo: an identifier parameter is required. // parsing completed } -#line 3632 "dhcp4_parser.cc" +#line 3662 "dhcp4_parser.cc" break; - case 643: // not_empty_reservation_params: not_empty_reservation_params "," -#line 2304 "dhcp4_parser.yy" + case 655: // not_empty_reservation_params: not_empty_reservation_params "," +#line 2334 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3640 "dhcp4_parser.cc" +#line 3670 "dhcp4_parser.cc" break; - case 659: // $@94: %empty -#line 2327 "dhcp4_parser.yy" + case 671: // $@94: %empty +#line 2357 "dhcp4_parser.yy" { ctx.unique("next-server", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3649 "dhcp4_parser.cc" +#line 3679 "dhcp4_parser.cc" break; - case 660: // next_server: "next-server" $@94 ":" "constant string" -#line 2330 "dhcp4_parser.yy" + case 672: // next_server: "next-server" $@94 ":" "constant string" +#line 2360 "dhcp4_parser.yy" { ElementPtr next_server(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("next-server", next_server); ctx.leave(); } -#line 3659 "dhcp4_parser.cc" +#line 3689 "dhcp4_parser.cc" break; - case 661: // $@95: %empty -#line 2336 "dhcp4_parser.yy" + case 673: // $@95: %empty +#line 2366 "dhcp4_parser.yy" { ctx.unique("server-hostname", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3668 "dhcp4_parser.cc" +#line 3698 "dhcp4_parser.cc" break; - case 662: // server_hostname: "server-hostname" $@95 ":" "constant string" -#line 2339 "dhcp4_parser.yy" + case 674: // server_hostname: "server-hostname" $@95 ":" "constant string" +#line 2369 "dhcp4_parser.yy" { ElementPtr srv(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("server-hostname", srv); ctx.leave(); } -#line 3678 "dhcp4_parser.cc" +#line 3708 "dhcp4_parser.cc" break; - case 663: // $@96: %empty -#line 2345 "dhcp4_parser.yy" + case 675: // $@96: %empty +#line 2375 "dhcp4_parser.yy" { ctx.unique("boot-file-name", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3687 "dhcp4_parser.cc" +#line 3717 "dhcp4_parser.cc" break; - case 664: // boot_file_name: "boot-file-name" $@96 ":" "constant string" -#line 2348 "dhcp4_parser.yy" + case 676: // boot_file_name: "boot-file-name" $@96 ":" "constant string" +#line 2378 "dhcp4_parser.yy" { ElementPtr bootfile(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("boot-file-name", bootfile); ctx.leave(); } -#line 3697 "dhcp4_parser.cc" +#line 3727 "dhcp4_parser.cc" break; - case 665: // $@97: %empty -#line 2354 "dhcp4_parser.yy" + case 677: // $@97: %empty +#line 2384 "dhcp4_parser.yy" { ctx.unique("ip-address", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3706 "dhcp4_parser.cc" +#line 3736 "dhcp4_parser.cc" break; - case 666: // ip_address: "ip-address" $@97 ":" "constant string" -#line 2357 "dhcp4_parser.yy" + case 678: // ip_address: "ip-address" $@97 ":" "constant string" +#line 2387 "dhcp4_parser.yy" { ElementPtr addr(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ip-address", addr); ctx.leave(); } -#line 3716 "dhcp4_parser.cc" +#line 3746 "dhcp4_parser.cc" break; - case 667: // $@98: %empty -#line 2363 "dhcp4_parser.yy" + case 679: // $@98: %empty +#line 2393 "dhcp4_parser.yy" { ctx.unique("duid", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3725 "dhcp4_parser.cc" +#line 3755 "dhcp4_parser.cc" break; - case 668: // duid: "duid" $@98 ":" "constant string" -#line 2366 "dhcp4_parser.yy" + case 680: // duid: "duid" $@98 ":" "constant string" +#line 2396 "dhcp4_parser.yy" { ElementPtr d(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("duid", d); ctx.leave(); } -#line 3735 "dhcp4_parser.cc" +#line 3765 "dhcp4_parser.cc" break; - case 669: // $@99: %empty -#line 2372 "dhcp4_parser.yy" + case 681: // $@99: %empty +#line 2402 "dhcp4_parser.yy" { ctx.unique("hw-address", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3744 "dhcp4_parser.cc" +#line 3774 "dhcp4_parser.cc" break; - case 670: // hw_address: "hw-address" $@99 ":" "constant string" -#line 2375 "dhcp4_parser.yy" + case 682: // hw_address: "hw-address" $@99 ":" "constant string" +#line 2405 "dhcp4_parser.yy" { ElementPtr hw(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hw-address", hw); ctx.leave(); } -#line 3754 "dhcp4_parser.cc" +#line 3784 "dhcp4_parser.cc" break; - case 671: // $@100: %empty -#line 2381 "dhcp4_parser.yy" + case 683: // $@100: %empty +#line 2411 "dhcp4_parser.yy" { ctx.unique("client-id", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3763 "dhcp4_parser.cc" +#line 3793 "dhcp4_parser.cc" break; - case 672: // client_id_value: "client-id" $@100 ":" "constant string" -#line 2384 "dhcp4_parser.yy" + case 684: // client_id_value: "client-id" $@100 ":" "constant string" +#line 2414 "dhcp4_parser.yy" { ElementPtr hw(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("client-id", hw); ctx.leave(); } -#line 3773 "dhcp4_parser.cc" +#line 3803 "dhcp4_parser.cc" break; - case 673: // $@101: %empty -#line 2390 "dhcp4_parser.yy" + case 685: // $@101: %empty +#line 2420 "dhcp4_parser.yy" { ctx.unique("circuit-id", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3782 "dhcp4_parser.cc" +#line 3812 "dhcp4_parser.cc" break; - case 674: // circuit_id_value: "circuit-id" $@101 ":" "constant string" -#line 2393 "dhcp4_parser.yy" + case 686: // circuit_id_value: "circuit-id" $@101 ":" "constant string" +#line 2423 "dhcp4_parser.yy" { ElementPtr hw(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("circuit-id", hw); ctx.leave(); } -#line 3792 "dhcp4_parser.cc" +#line 3822 "dhcp4_parser.cc" break; - case 675: // $@102: %empty -#line 2399 "dhcp4_parser.yy" + case 687: // $@102: %empty +#line 2429 "dhcp4_parser.yy" { ctx.unique("flex-id", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3801 "dhcp4_parser.cc" +#line 3831 "dhcp4_parser.cc" break; - case 676: // flex_id_value: "flex-id" $@102 ":" "constant string" -#line 2402 "dhcp4_parser.yy" + case 688: // flex_id_value: "flex-id" $@102 ":" "constant string" +#line 2432 "dhcp4_parser.yy" { ElementPtr hw(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("flex-id", hw); ctx.leave(); } -#line 3811 "dhcp4_parser.cc" +#line 3841 "dhcp4_parser.cc" break; - case 677: // $@103: %empty -#line 2408 "dhcp4_parser.yy" + case 689: // $@103: %empty +#line 2438 "dhcp4_parser.yy" { ctx.unique("hostname", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3820 "dhcp4_parser.cc" +#line 3850 "dhcp4_parser.cc" break; - case 678: // hostname: "hostname" $@103 ":" "constant string" -#line 2411 "dhcp4_parser.yy" + case 690: // hostname: "hostname" $@103 ":" "constant string" +#line 2441 "dhcp4_parser.yy" { ElementPtr host(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hostname", host); ctx.leave(); } -#line 3830 "dhcp4_parser.cc" +#line 3860 "dhcp4_parser.cc" break; - case 679: // $@104: %empty -#line 2417 "dhcp4_parser.yy" + case 691: // $@104: %empty +#line 2447 "dhcp4_parser.yy" { ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location)); ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3838,20 +3868,20 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(c); ctx.enter(ctx.NO_KEYWORD); } -#line 3842 "dhcp4_parser.cc" +#line 3872 "dhcp4_parser.cc" break; - case 680: // reservation_client_classes: "client-classes" $@104 ":" list_strings -#line 2423 "dhcp4_parser.yy" + case 692: // reservation_client_classes: "client-classes" $@104 ":" list_strings +#line 2453 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3851 "dhcp4_parser.cc" +#line 3881 "dhcp4_parser.cc" break; - case 681: // $@105: %empty -#line 2431 "dhcp4_parser.yy" + case 693: // $@105: %empty +#line 2461 "dhcp4_parser.yy" { ctx.unique("relay", ctx.loc2pos(yystack_[0].location)); ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -3859,20 +3889,20 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(m); ctx.enter(ctx.RELAY); } -#line 3863 "dhcp4_parser.cc" +#line 3893 "dhcp4_parser.cc" break; - case 682: // relay: "relay" $@105 ":" "{" relay_map "}" -#line 2437 "dhcp4_parser.yy" + case 694: // relay: "relay" $@105 ":" "{" relay_map "}" +#line 2467 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3872 "dhcp4_parser.cc" +#line 3902 "dhcp4_parser.cc" break; - case 684: // $@106: %empty -#line 2445 "dhcp4_parser.yy" + case 696: // $@106: %empty +#line 2475 "dhcp4_parser.yy" { ctx.unique("ip-addresses", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3880,20 +3910,20 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.NO_KEYWORD); } -#line 3884 "dhcp4_parser.cc" +#line 3914 "dhcp4_parser.cc" break; - case 685: // ip_addresses: "ip-addresses" $@106 ":" list_strings -#line 2451 "dhcp4_parser.yy" + case 697: // ip_addresses: "ip-addresses" $@106 ":" list_strings +#line 2481 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3893 "dhcp4_parser.cc" +#line 3923 "dhcp4_parser.cc" break; - case 686: // $@107: %empty -#line 2459 "dhcp4_parser.yy" + case 698: // $@107: %empty +#line 2489 "dhcp4_parser.yy" { ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3901,124 +3931,124 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.CLIENT_CLASSES); } -#line 3905 "dhcp4_parser.cc" +#line 3935 "dhcp4_parser.cc" break; - case 687: // client_classes: "client-classes" $@107 ":" "[" client_classes_list "]" -#line 2465 "dhcp4_parser.yy" + case 699: // client_classes: "client-classes" $@107 ":" "[" client_classes_list "]" +#line 2495 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3914 "dhcp4_parser.cc" +#line 3944 "dhcp4_parser.cc" break; - case 690: // client_classes_list: client_classes_list "," -#line 2472 "dhcp4_parser.yy" + case 702: // client_classes_list: client_classes_list "," +#line 2502 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3922 "dhcp4_parser.cc" +#line 3952 "dhcp4_parser.cc" break; - case 691: // $@108: %empty -#line 2477 "dhcp4_parser.yy" + case 703: // $@108: %empty +#line 2507 "dhcp4_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 3932 "dhcp4_parser.cc" +#line 3962 "dhcp4_parser.cc" break; - case 692: // client_class_entry: "{" $@108 client_class_params "}" -#line 2481 "dhcp4_parser.yy" + case 704: // client_class_entry: "{" $@108 client_class_params "}" +#line 2511 "dhcp4_parser.yy" { // The name client class parameter is required. ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 3942 "dhcp4_parser.cc" +#line 3972 "dhcp4_parser.cc" break; - case 697: // not_empty_client_class_params: not_empty_client_class_params "," -#line 2493 "dhcp4_parser.yy" + case 709: // not_empty_client_class_params: not_empty_client_class_params "," +#line 2523 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3950 "dhcp4_parser.cc" +#line 3980 "dhcp4_parser.cc" break; - case 716: // $@109: %empty -#line 2519 "dhcp4_parser.yy" + case 728: // $@109: %empty +#line 2549 "dhcp4_parser.yy" { ctx.unique("test", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3959 "dhcp4_parser.cc" +#line 3989 "dhcp4_parser.cc" break; - case 717: // client_class_test: "test" $@109 ":" "constant string" -#line 2522 "dhcp4_parser.yy" + case 729: // client_class_test: "test" $@109 ":" "constant string" +#line 2552 "dhcp4_parser.yy" { ElementPtr test(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("test", test); ctx.leave(); } -#line 3969 "dhcp4_parser.cc" +#line 3999 "dhcp4_parser.cc" break; - case 718: // $@110: %empty -#line 2528 "dhcp4_parser.yy" + case 730: // $@110: %empty +#line 2558 "dhcp4_parser.yy" { ctx.unique("template-test", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3978 "dhcp4_parser.cc" +#line 4008 "dhcp4_parser.cc" break; - case 719: // client_class_template_test: "template-test" $@110 ":" "constant string" -#line 2531 "dhcp4_parser.yy" + case 731: // client_class_template_test: "template-test" $@110 ":" "constant string" +#line 2561 "dhcp4_parser.yy" { ElementPtr template_test(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("template-test", template_test); ctx.leave(); } -#line 3988 "dhcp4_parser.cc" +#line 4018 "dhcp4_parser.cc" break; - case 720: // only_if_required: "only-if-required" ":" "boolean" -#line 2538 "dhcp4_parser.yy" + case 732: // only_if_required: "only-if-required" ":" "boolean" +#line 2568 "dhcp4_parser.yy" { ctx.unique("only-if-required", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("only-if-required", b); } -#line 3998 "dhcp4_parser.cc" +#line 4028 "dhcp4_parser.cc" break; - case 721: // only_in_additional_list: "only-in-additional-list" ":" "boolean" -#line 2544 "dhcp4_parser.yy" + case 733: // only_in_additional_list: "only-in-additional-list" ":" "boolean" +#line 2574 "dhcp4_parser.yy" { ctx.unique("only-in-additional-list", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("only-in-additional-list", b); } -#line 4008 "dhcp4_parser.cc" +#line 4038 "dhcp4_parser.cc" break; - case 722: // dhcp4o6_port: "dhcp4o6-port" ":" "integer" -#line 2552 "dhcp4_parser.yy" + case 734: // dhcp4o6_port: "dhcp4o6-port" ":" "integer" +#line 2582 "dhcp4_parser.yy" { ctx.unique("dhcp4o6-port", ctx.loc2pos(yystack_[2].location)); ElementPtr time(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("dhcp4o6-port", time); } -#line 4018 "dhcp4_parser.cc" +#line 4048 "dhcp4_parser.cc" break; - case 723: // $@111: %empty -#line 2560 "dhcp4_parser.yy" + case 735: // $@111: %empty +#line 2590 "dhcp4_parser.yy" { ctx.unique("control-socket", ctx.loc2pos(yystack_[0].location)); ctx.unique("control-sockets", ctx.loc2pos(yystack_[0].location)); @@ -4027,20 +4057,20 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(m); ctx.enter(ctx.CONTROL_SOCKET); } -#line 4031 "dhcp4_parser.cc" +#line 4061 "dhcp4_parser.cc" break; - case 724: // control_socket: "control-socket" $@111 ":" "{" control_socket_params "}" -#line 2567 "dhcp4_parser.yy" + case 736: // control_socket: "control-socket" $@111 ":" "{" control_socket_params "}" +#line 2597 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 4040 "dhcp4_parser.cc" +#line 4070 "dhcp4_parser.cc" break; - case 725: // $@112: %empty -#line 2572 "dhcp4_parser.yy" + case 737: // $@112: %empty +#line 2602 "dhcp4_parser.yy" { ctx.unique("control-sockets", ctx.loc2pos(yystack_[0].location)); ctx.unique("control-socket", ctx.loc2pos(yystack_[0].location)); @@ -4049,150 +4079,150 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.CONTROL_SOCKET); } -#line 4053 "dhcp4_parser.cc" +#line 4083 "dhcp4_parser.cc" break; - case 726: // control_sockets: "control-sockets" $@112 ":" "[" control_socket_list "]" -#line 2579 "dhcp4_parser.yy" + case 738: // control_sockets: "control-sockets" $@112 ":" "[" control_socket_list "]" +#line 2609 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 4062 "dhcp4_parser.cc" +#line 4092 "dhcp4_parser.cc" break; - case 731: // not_empty_control_socket_list: not_empty_control_socket_list "," -#line 2590 "dhcp4_parser.yy" + case 743: // not_empty_control_socket_list: not_empty_control_socket_list "," +#line 2620 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4070 "dhcp4_parser.cc" +#line 4100 "dhcp4_parser.cc" break; - case 732: // $@113: %empty -#line 2595 "dhcp4_parser.yy" + case 744: // $@113: %empty +#line 2625 "dhcp4_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 4080 "dhcp4_parser.cc" +#line 4110 "dhcp4_parser.cc" break; - case 733: // control_socket_entry: "{" $@113 control_socket_params "}" -#line 2599 "dhcp4_parser.yy" + case 745: // control_socket_entry: "{" $@113 control_socket_params "}" +#line 2629 "dhcp4_parser.yy" { ctx.stack_.pop_back(); } -#line 4088 "dhcp4_parser.cc" +#line 4118 "dhcp4_parser.cc" break; - case 736: // control_socket_params: control_socket_params "," -#line 2605 "dhcp4_parser.yy" + case 748: // control_socket_params: control_socket_params "," +#line 2635 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4096 "dhcp4_parser.cc" +#line 4126 "dhcp4_parser.cc" break; - case 750: // $@114: %empty -#line 2625 "dhcp4_parser.yy" + case 762: // $@114: %empty +#line 2655 "dhcp4_parser.yy" { ctx.unique("socket-type", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.CONTROL_SOCKET_TYPE); } -#line 4105 "dhcp4_parser.cc" +#line 4135 "dhcp4_parser.cc" break; - case 751: // control_socket_type: "socket-type" $@114 ":" control_socket_type_value -#line 2628 "dhcp4_parser.yy" + case 763: // control_socket_type: "socket-type" $@114 ":" control_socket_type_value +#line 2658 "dhcp4_parser.yy" { ctx.stack_.back()->set("socket-type", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 4114 "dhcp4_parser.cc" +#line 4144 "dhcp4_parser.cc" break; - case 752: // control_socket_type_value: "unix" -#line 2634 "dhcp4_parser.yy" + case 764: // control_socket_type_value: "unix" +#line 2664 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("unix", ctx.loc2pos(yystack_[0].location))); } -#line 4120 "dhcp4_parser.cc" +#line 4150 "dhcp4_parser.cc" break; - case 753: // control_socket_type_value: "http" -#line 2635 "dhcp4_parser.yy" + case 765: // control_socket_type_value: "http" +#line 2665 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("http", ctx.loc2pos(yystack_[0].location))); } -#line 4126 "dhcp4_parser.cc" +#line 4156 "dhcp4_parser.cc" break; - case 754: // control_socket_type_value: "https" -#line 2636 "dhcp4_parser.yy" + case 766: // control_socket_type_value: "https" +#line 2666 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("https", ctx.loc2pos(yystack_[0].location))); } -#line 4132 "dhcp4_parser.cc" +#line 4162 "dhcp4_parser.cc" break; - case 755: // $@115: %empty -#line 2639 "dhcp4_parser.yy" + case 767: // $@115: %empty +#line 2669 "dhcp4_parser.yy" { ctx.unique("socket-name", ctx.loc2pos(yystack_[0].location)); ctx.unique("socket-address", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4142 "dhcp4_parser.cc" +#line 4172 "dhcp4_parser.cc" break; - case 756: // control_socket_name: "socket-name" $@115 ":" "constant string" -#line 2643 "dhcp4_parser.yy" + case 768: // control_socket_name: "socket-name" $@115 ":" "constant string" +#line 2673 "dhcp4_parser.yy" { ElementPtr name(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("socket-name", name); ctx.leave(); } -#line 4152 "dhcp4_parser.cc" +#line 4182 "dhcp4_parser.cc" break; - case 757: // $@116: %empty -#line 2649 "dhcp4_parser.yy" + case 769: // $@116: %empty +#line 2679 "dhcp4_parser.yy" { ctx.unique("socket-address", ctx.loc2pos(yystack_[0].location)); ctx.unique("socket-name", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4162 "dhcp4_parser.cc" +#line 4192 "dhcp4_parser.cc" break; - case 758: // control_socket_address: "socket-address" $@116 ":" "constant string" -#line 2653 "dhcp4_parser.yy" + case 770: // control_socket_address: "socket-address" $@116 ":" "constant string" +#line 2683 "dhcp4_parser.yy" { ElementPtr address(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("socket-address", address); ctx.leave(); } -#line 4172 "dhcp4_parser.cc" +#line 4202 "dhcp4_parser.cc" break; - case 759: // control_socket_port: "socket-port" ":" "integer" -#line 2659 "dhcp4_parser.yy" + case 771: // control_socket_port: "socket-port" ":" "integer" +#line 2689 "dhcp4_parser.yy" { ctx.unique("socket-port", ctx.loc2pos(yystack_[2].location)); ElementPtr port(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("socket-port", port); } -#line 4182 "dhcp4_parser.cc" +#line 4212 "dhcp4_parser.cc" break; - case 760: // cert_required: "cert-required" ":" "boolean" -#line 2665 "dhcp4_parser.yy" + case 772: // cert_required: "cert-required" ":" "boolean" +#line 2695 "dhcp4_parser.yy" { ctx.unique("cert-required", ctx.loc2pos(yystack_[2].location)); ElementPtr req(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("cert-required", req); } -#line 4192 "dhcp4_parser.cc" +#line 4222 "dhcp4_parser.cc" break; - case 761: // $@117: %empty -#line 2671 "dhcp4_parser.yy" + case 773: // $@117: %empty +#line 2701 "dhcp4_parser.yy" { ctx.unique("http-headers", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -4200,73 +4230,73 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.HTTP_HEADERS); } -#line 4204 "dhcp4_parser.cc" +#line 4234 "dhcp4_parser.cc" break; - case 762: // http_headers: "http-headers" $@117 ":" "[" http_header_list "]" -#line 2677 "dhcp4_parser.yy" + case 774: // http_headers: "http-headers" $@117 ":" "[" http_header_list "]" +#line 2707 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 4213 "dhcp4_parser.cc" +#line 4243 "dhcp4_parser.cc" break; - case 767: // not_empty_http_header_list: not_empty_http_header_list "," -#line 2688 "dhcp4_parser.yy" + case 779: // not_empty_http_header_list: not_empty_http_header_list "," +#line 2718 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4221 "dhcp4_parser.cc" +#line 4251 "dhcp4_parser.cc" break; - case 768: // $@118: %empty -#line 2693 "dhcp4_parser.yy" + case 780: // $@118: %empty +#line 2723 "dhcp4_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 4231 "dhcp4_parser.cc" +#line 4261 "dhcp4_parser.cc" break; - case 769: // http_header: "{" $@118 http_header_params "}" -#line 2697 "dhcp4_parser.yy" + case 781: // http_header: "{" $@118 http_header_params "}" +#line 2727 "dhcp4_parser.yy" { ctx.stack_.pop_back(); } -#line 4239 "dhcp4_parser.cc" +#line 4269 "dhcp4_parser.cc" break; - case 772: // http_header_params: http_header_params "," -#line 2703 "dhcp4_parser.yy" + case 784: // http_header_params: http_header_params "," +#line 2733 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4247 "dhcp4_parser.cc" +#line 4277 "dhcp4_parser.cc" break; - case 778: // $@119: %empty -#line 2715 "dhcp4_parser.yy" + case 790: // $@119: %empty +#line 2745 "dhcp4_parser.yy" { ctx.unique("value", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4256 "dhcp4_parser.cc" +#line 4286 "dhcp4_parser.cc" break; - case 779: // header_value: "value" $@119 ":" "constant string" -#line 2718 "dhcp4_parser.yy" + case 791: // header_value: "value" $@119 ":" "constant string" +#line 2748 "dhcp4_parser.yy" { ElementPtr value(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("value", value); ctx.leave(); } -#line 4266 "dhcp4_parser.cc" +#line 4296 "dhcp4_parser.cc" break; - case 780: // $@120: %empty -#line 2726 "dhcp4_parser.yy" + case 792: // $@120: %empty +#line 2756 "dhcp4_parser.yy" { ctx.unique("authentication", ctx.loc2pos(yystack_[0].location)); ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -4274,92 +4304,92 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(m); ctx.enter(ctx.AUTHENTICATION); } -#line 4278 "dhcp4_parser.cc" +#line 4308 "dhcp4_parser.cc" break; - case 781: // authentication: "authentication" $@120 ":" "{" auth_params "}" -#line 2732 "dhcp4_parser.yy" + case 793: // authentication: "authentication" $@120 ":" "{" auth_params "}" +#line 2762 "dhcp4_parser.yy" { // The type parameter is required ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); ctx.leave(); } -#line 4289 "dhcp4_parser.cc" +#line 4319 "dhcp4_parser.cc" break; - case 784: // auth_params: auth_params "," -#line 2741 "dhcp4_parser.yy" + case 796: // auth_params: auth_params "," +#line 2771 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4297 "dhcp4_parser.cc" +#line 4327 "dhcp4_parser.cc" break; - case 792: // $@121: %empty -#line 2755 "dhcp4_parser.yy" + case 804: // $@121: %empty +#line 2785 "dhcp4_parser.yy" { ctx.unique("type", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.AUTH_TYPE); } -#line 4306 "dhcp4_parser.cc" +#line 4336 "dhcp4_parser.cc" break; - case 793: // auth_type: "type" $@121 ":" auth_type_value -#line 2758 "dhcp4_parser.yy" + case 805: // auth_type: "type" $@121 ":" auth_type_value +#line 2788 "dhcp4_parser.yy" { ctx.stack_.back()->set("type", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 4315 "dhcp4_parser.cc" +#line 4345 "dhcp4_parser.cc" break; - case 794: // auth_type_value: "basic" -#line 2763 "dhcp4_parser.yy" + case 806: // auth_type_value: "basic" +#line 2793 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("basic", ctx.loc2pos(yystack_[0].location))); } -#line 4321 "dhcp4_parser.cc" +#line 4351 "dhcp4_parser.cc" break; - case 795: // $@122: %empty -#line 2766 "dhcp4_parser.yy" + case 807: // $@122: %empty +#line 2796 "dhcp4_parser.yy" { ctx.unique("realm", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4330 "dhcp4_parser.cc" +#line 4360 "dhcp4_parser.cc" break; - case 796: // realm: "realm" $@122 ":" "constant string" -#line 2769 "dhcp4_parser.yy" + case 808: // realm: "realm" $@122 ":" "constant string" +#line 2799 "dhcp4_parser.yy" { ElementPtr realm(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("realm", realm); ctx.leave(); } -#line 4340 "dhcp4_parser.cc" +#line 4370 "dhcp4_parser.cc" break; - case 797: // $@123: %empty -#line 2775 "dhcp4_parser.yy" + case 809: // $@123: %empty +#line 2805 "dhcp4_parser.yy" { ctx.unique("directory", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4349 "dhcp4_parser.cc" +#line 4379 "dhcp4_parser.cc" break; - case 798: // directory: "directory" $@123 ":" "constant string" -#line 2778 "dhcp4_parser.yy" + case 810: // directory: "directory" $@123 ":" "constant string" +#line 2808 "dhcp4_parser.yy" { ElementPtr directory(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("directory", directory); ctx.leave(); } -#line 4359 "dhcp4_parser.cc" +#line 4389 "dhcp4_parser.cc" break; - case 799: // $@124: %empty -#line 2784 "dhcp4_parser.yy" + case 811: // $@124: %empty +#line 2814 "dhcp4_parser.yy" { ctx.unique("clients", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -4367,92 +4397,92 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.CLIENTS); } -#line 4371 "dhcp4_parser.cc" +#line 4401 "dhcp4_parser.cc" break; - case 800: // clients: "clients" $@124 ":" "[" clients_list "]" -#line 2790 "dhcp4_parser.yy" + case 812: // clients: "clients" $@124 ":" "[" clients_list "]" +#line 2820 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 4380 "dhcp4_parser.cc" +#line 4410 "dhcp4_parser.cc" break; - case 805: // not_empty_clients_list: not_empty_clients_list "," -#line 2801 "dhcp4_parser.yy" + case 817: // not_empty_clients_list: not_empty_clients_list "," +#line 2831 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4388 "dhcp4_parser.cc" +#line 4418 "dhcp4_parser.cc" break; - case 806: // $@125: %empty -#line 2806 "dhcp4_parser.yy" + case 818: // $@125: %empty +#line 2836 "dhcp4_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 4398 "dhcp4_parser.cc" +#line 4428 "dhcp4_parser.cc" break; - case 807: // basic_auth: "{" $@125 clients_params "}" -#line 2810 "dhcp4_parser.yy" + case 819: // basic_auth: "{" $@125 clients_params "}" +#line 2840 "dhcp4_parser.yy" { ctx.stack_.pop_back(); } -#line 4406 "dhcp4_parser.cc" +#line 4436 "dhcp4_parser.cc" break; - case 810: // clients_params: clients_params "," -#line 2816 "dhcp4_parser.yy" + case 822: // clients_params: clients_params "," +#line 2846 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4414 "dhcp4_parser.cc" +#line 4444 "dhcp4_parser.cc" break; - case 818: // $@126: %empty -#line 2830 "dhcp4_parser.yy" + case 830: // $@126: %empty +#line 2860 "dhcp4_parser.yy" { ctx.unique("user-file", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4423 "dhcp4_parser.cc" +#line 4453 "dhcp4_parser.cc" break; - case 819: // user_file: "user-file" $@126 ":" "constant string" -#line 2833 "dhcp4_parser.yy" + case 831: // user_file: "user-file" $@126 ":" "constant string" +#line 2863 "dhcp4_parser.yy" { ElementPtr user(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("user-file", user); ctx.leave(); } -#line 4433 "dhcp4_parser.cc" +#line 4463 "dhcp4_parser.cc" break; - case 820: // $@127: %empty -#line 2839 "dhcp4_parser.yy" + case 832: // $@127: %empty +#line 2869 "dhcp4_parser.yy" { ctx.unique("password-file", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4442 "dhcp4_parser.cc" +#line 4472 "dhcp4_parser.cc" break; - case 821: // password_file: "password-file" $@127 ":" "constant string" -#line 2842 "dhcp4_parser.yy" + case 833: // password_file: "password-file" $@127 ":" "constant string" +#line 2872 "dhcp4_parser.yy" { ElementPtr password(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("password-file", password); ctx.leave(); } -#line 4452 "dhcp4_parser.cc" +#line 4482 "dhcp4_parser.cc" break; - case 822: // $@128: %empty -#line 2850 "dhcp4_parser.yy" + case 834: // $@128: %empty +#line 2880 "dhcp4_parser.yy" { ctx.unique("dhcp-queue-control", ctx.loc2pos(yystack_[0].location)); ElementPtr qc(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -4460,87 +4490,87 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(qc); ctx.enter(ctx.DHCP_QUEUE_CONTROL); } -#line 4464 "dhcp4_parser.cc" +#line 4494 "dhcp4_parser.cc" break; - case 823: // dhcp_queue_control: "dhcp-queue-control" $@128 ":" "{" queue_control_params "}" -#line 2856 "dhcp4_parser.yy" + case 835: // dhcp_queue_control: "dhcp-queue-control" $@128 ":" "{" queue_control_params "}" +#line 2886 "dhcp4_parser.yy" { // The enable queue parameter is required. ctx.require("enable-queue", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); ctx.leave(); } -#line 4475 "dhcp4_parser.cc" +#line 4505 "dhcp4_parser.cc" break; - case 826: // queue_control_params: queue_control_params "," -#line 2865 "dhcp4_parser.yy" + case 838: // queue_control_params: queue_control_params "," +#line 2895 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4483 "dhcp4_parser.cc" +#line 4513 "dhcp4_parser.cc" break; - case 833: // enable_queue: "enable-queue" ":" "boolean" -#line 2878 "dhcp4_parser.yy" + case 845: // enable_queue: "enable-queue" ":" "boolean" +#line 2908 "dhcp4_parser.yy" { ctx.unique("enable-queue", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("enable-queue", b); } -#line 4493 "dhcp4_parser.cc" +#line 4523 "dhcp4_parser.cc" break; - case 834: // $@129: %empty -#line 2884 "dhcp4_parser.yy" + case 846: // $@129: %empty +#line 2914 "dhcp4_parser.yy" { ctx.unique("queue-type", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4502 "dhcp4_parser.cc" +#line 4532 "dhcp4_parser.cc" break; - case 835: // queue_type: "queue-type" $@129 ":" "constant string" -#line 2887 "dhcp4_parser.yy" + case 847: // queue_type: "queue-type" $@129 ":" "constant string" +#line 2917 "dhcp4_parser.yy" { ElementPtr qt(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("queue-type", qt); ctx.leave(); } -#line 4512 "dhcp4_parser.cc" +#line 4542 "dhcp4_parser.cc" break; - case 836: // capacity: "capacity" ":" "integer" -#line 2893 "dhcp4_parser.yy" + case 848: // capacity: "capacity" ":" "integer" +#line 2923 "dhcp4_parser.yy" { ctx.unique("capacity", ctx.loc2pos(yystack_[2].location)); ElementPtr c(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("capacity", c); } -#line 4522 "dhcp4_parser.cc" +#line 4552 "dhcp4_parser.cc" break; - case 837: // $@130: %empty -#line 2899 "dhcp4_parser.yy" + case 849: // $@130: %empty +#line 2929 "dhcp4_parser.yy" { ctx.unique(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4531 "dhcp4_parser.cc" +#line 4561 "dhcp4_parser.cc" break; - case 838: // arbitrary_map_entry: "constant string" $@130 ":" value -#line 2902 "dhcp4_parser.yy" + case 850: // arbitrary_map_entry: "constant string" $@130 ":" value +#line 2932 "dhcp4_parser.yy" { ctx.stack_.back()->set(yystack_[3].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 4540 "dhcp4_parser.cc" +#line 4570 "dhcp4_parser.cc" break; - case 839: // $@131: %empty -#line 2909 "dhcp4_parser.yy" + case 851: // $@131: %empty +#line 2939 "dhcp4_parser.yy" { ctx.unique("dhcp-ddns", ctx.loc2pos(yystack_[0].location)); ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -4548,177 +4578,177 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(m); ctx.enter(ctx.DHCP_DDNS); } -#line 4552 "dhcp4_parser.cc" +#line 4582 "dhcp4_parser.cc" break; - case 840: // dhcp_ddns: "dhcp-ddns" $@131 ":" "{" dhcp_ddns_params "}" -#line 2915 "dhcp4_parser.yy" + case 852: // dhcp_ddns: "dhcp-ddns" $@131 ":" "{" dhcp_ddns_params "}" +#line 2945 "dhcp4_parser.yy" { // The enable updates DHCP DDNS parameter is required. ctx.require("enable-updates", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); ctx.leave(); } -#line 4563 "dhcp4_parser.cc" +#line 4593 "dhcp4_parser.cc" break; - case 841: // $@132: %empty -#line 2922 "dhcp4_parser.yy" + case 853: // $@132: %empty +#line 2952 "dhcp4_parser.yy" { // Parse the dhcp-ddns map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 4573 "dhcp4_parser.cc" +#line 4603 "dhcp4_parser.cc" break; - case 842: // sub_dhcp_ddns: "{" $@132 dhcp_ddns_params "}" -#line 2926 "dhcp4_parser.yy" + case 854: // sub_dhcp_ddns: "{" $@132 dhcp_ddns_params "}" +#line 2956 "dhcp4_parser.yy" { // The enable updates DHCP DDNS parameter is required. ctx.require("enable-updates", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 4583 "dhcp4_parser.cc" +#line 4613 "dhcp4_parser.cc" break; - case 845: // dhcp_ddns_params: dhcp_ddns_params "," -#line 2934 "dhcp4_parser.yy" + case 857: // dhcp_ddns_params: dhcp_ddns_params "," +#line 2964 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4591 "dhcp4_parser.cc" +#line 4621 "dhcp4_parser.cc" break; - case 857: // enable_updates: "enable-updates" ":" "boolean" -#line 2952 "dhcp4_parser.yy" + case 869: // enable_updates: "enable-updates" ":" "boolean" +#line 2982 "dhcp4_parser.yy" { ctx.unique("enable-updates", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("enable-updates", b); } -#line 4601 "dhcp4_parser.cc" +#line 4631 "dhcp4_parser.cc" break; - case 858: // $@133: %empty -#line 2958 "dhcp4_parser.yy" + case 870: // $@133: %empty +#line 2988 "dhcp4_parser.yy" { ctx.unique("server-ip", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4610 "dhcp4_parser.cc" +#line 4640 "dhcp4_parser.cc" break; - case 859: // server_ip: "server-ip" $@133 ":" "constant string" -#line 2961 "dhcp4_parser.yy" + case 871: // server_ip: "server-ip" $@133 ":" "constant string" +#line 2991 "dhcp4_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("server-ip", s); ctx.leave(); } -#line 4620 "dhcp4_parser.cc" +#line 4650 "dhcp4_parser.cc" break; - case 860: // server_port: "server-port" ":" "integer" -#line 2967 "dhcp4_parser.yy" + case 872: // server_port: "server-port" ":" "integer" +#line 2997 "dhcp4_parser.yy" { ctx.unique("server-port", ctx.loc2pos(yystack_[2].location)); ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("server-port", i); } -#line 4630 "dhcp4_parser.cc" +#line 4660 "dhcp4_parser.cc" break; - case 861: // $@134: %empty -#line 2973 "dhcp4_parser.yy" + case 873: // $@134: %empty +#line 3003 "dhcp4_parser.yy" { ctx.unique("sender-ip", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4639 "dhcp4_parser.cc" +#line 4669 "dhcp4_parser.cc" break; - case 862: // sender_ip: "sender-ip" $@134 ":" "constant string" -#line 2976 "dhcp4_parser.yy" + case 874: // sender_ip: "sender-ip" $@134 ":" "constant string" +#line 3006 "dhcp4_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("sender-ip", s); ctx.leave(); } -#line 4649 "dhcp4_parser.cc" +#line 4679 "dhcp4_parser.cc" break; - case 863: // sender_port: "sender-port" ":" "integer" -#line 2982 "dhcp4_parser.yy" + case 875: // sender_port: "sender-port" ":" "integer" +#line 3012 "dhcp4_parser.yy" { ctx.unique("sender-port", ctx.loc2pos(yystack_[2].location)); ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("sender-port", i); } -#line 4659 "dhcp4_parser.cc" +#line 4689 "dhcp4_parser.cc" break; - case 864: // max_queue_size: "max-queue-size" ":" "integer" -#line 2988 "dhcp4_parser.yy" + case 876: // max_queue_size: "max-queue-size" ":" "integer" +#line 3018 "dhcp4_parser.yy" { ctx.unique("max-queue-size", ctx.loc2pos(yystack_[2].location)); ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-queue-size", i); } -#line 4669 "dhcp4_parser.cc" +#line 4699 "dhcp4_parser.cc" break; - case 865: // $@135: %empty -#line 2994 "dhcp4_parser.yy" + case 877: // $@135: %empty +#line 3024 "dhcp4_parser.yy" { ctx.unique("ncr-protocol", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NCR_PROTOCOL); } -#line 4678 "dhcp4_parser.cc" +#line 4708 "dhcp4_parser.cc" break; - case 866: // ncr_protocol: "ncr-protocol" $@135 ":" ncr_protocol_value -#line 2997 "dhcp4_parser.yy" + case 878: // ncr_protocol: "ncr-protocol" $@135 ":" ncr_protocol_value +#line 3027 "dhcp4_parser.yy" { ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 4687 "dhcp4_parser.cc" +#line 4717 "dhcp4_parser.cc" break; - case 867: // ncr_protocol_value: "udp" -#line 3003 "dhcp4_parser.yy" + case 879: // ncr_protocol_value: "udp" +#line 3033 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); } -#line 4693 "dhcp4_parser.cc" +#line 4723 "dhcp4_parser.cc" break; - case 868: // ncr_protocol_value: "tcp" -#line 3004 "dhcp4_parser.yy" + case 880: // ncr_protocol_value: "tcp" +#line 3034 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); } -#line 4699 "dhcp4_parser.cc" +#line 4729 "dhcp4_parser.cc" break; - case 869: // $@136: %empty -#line 3007 "dhcp4_parser.yy" + case 881: // $@136: %empty +#line 3037 "dhcp4_parser.yy" { ctx.unique("ncr-format", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NCR_FORMAT); } -#line 4708 "dhcp4_parser.cc" +#line 4738 "dhcp4_parser.cc" break; - case 870: // ncr_format: "ncr-format" $@136 ":" "JSON" -#line 3010 "dhcp4_parser.yy" + case 882: // ncr_format: "ncr-format" $@136 ":" "JSON" +#line 3040 "dhcp4_parser.yy" { ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ncr-format", json); ctx.leave(); } -#line 4718 "dhcp4_parser.cc" +#line 4748 "dhcp4_parser.cc" break; - case 871: // $@137: %empty -#line 3018 "dhcp4_parser.yy" + case 883: // $@137: %empty +#line 3048 "dhcp4_parser.yy" { ctx.unique("config-control", ctx.loc2pos(yystack_[0].location)); ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -4726,48 +4756,48 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(i); ctx.enter(ctx.CONFIG_CONTROL); } -#line 4730 "dhcp4_parser.cc" +#line 4760 "dhcp4_parser.cc" break; - case 872: // config_control: "config-control" $@137 ":" "{" config_control_params "}" -#line 3024 "dhcp4_parser.yy" + case 884: // config_control: "config-control" $@137 ":" "{" config_control_params "}" +#line 3054 "dhcp4_parser.yy" { // No config control params are required ctx.stack_.pop_back(); ctx.leave(); } -#line 4740 "dhcp4_parser.cc" +#line 4770 "dhcp4_parser.cc" break; - case 873: // $@138: %empty -#line 3030 "dhcp4_parser.yy" + case 885: // $@138: %empty +#line 3060 "dhcp4_parser.yy" { // Parse the config-control map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 4750 "dhcp4_parser.cc" +#line 4780 "dhcp4_parser.cc" break; - case 874: // sub_config_control: "{" $@138 config_control_params "}" -#line 3034 "dhcp4_parser.yy" + case 886: // sub_config_control: "{" $@138 config_control_params "}" +#line 3064 "dhcp4_parser.yy" { // No config_control params are required // parsing completed } -#line 4759 "dhcp4_parser.cc" +#line 4789 "dhcp4_parser.cc" break; - case 877: // config_control_params: config_control_params "," -#line 3042 "dhcp4_parser.yy" + case 889: // config_control_params: config_control_params "," +#line 3072 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4767 "dhcp4_parser.cc" +#line 4797 "dhcp4_parser.cc" break; - case 880: // $@139: %empty -#line 3052 "dhcp4_parser.yy" + case 892: // $@139: %empty +#line 3082 "dhcp4_parser.yy" { ctx.unique("config-databases", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -4775,30 +4805,30 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.CONFIG_DATABASE); } -#line 4779 "dhcp4_parser.cc" +#line 4809 "dhcp4_parser.cc" break; - case 881: // config_databases: "config-databases" $@139 ":" "[" database_list "]" -#line 3058 "dhcp4_parser.yy" + case 893: // config_databases: "config-databases" $@139 ":" "[" database_list "]" +#line 3088 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 4788 "dhcp4_parser.cc" +#line 4818 "dhcp4_parser.cc" break; - case 882: // config_fetch_wait_time: "config-fetch-wait-time" ":" "integer" -#line 3063 "dhcp4_parser.yy" + case 894: // config_fetch_wait_time: "config-fetch-wait-time" ":" "integer" +#line 3093 "dhcp4_parser.yy" { ctx.unique("config-fetch-wait-time", ctx.loc2pos(yystack_[2].location)); ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("config-fetch-wait-time", value); } -#line 4798 "dhcp4_parser.cc" +#line 4828 "dhcp4_parser.cc" break; - case 883: // $@140: %empty -#line 3071 "dhcp4_parser.yy" + case 895: // $@140: %empty +#line 3101 "dhcp4_parser.yy" { ctx.unique("loggers", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -4806,83 +4836,83 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.LOGGERS); } -#line 4810 "dhcp4_parser.cc" +#line 4840 "dhcp4_parser.cc" break; - case 884: // loggers: "loggers" $@140 ":" "[" loggers_entries "]" -#line 3077 "dhcp4_parser.yy" + case 896: // loggers: "loggers" $@140 ":" "[" loggers_entries "]" +#line 3107 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 4819 "dhcp4_parser.cc" +#line 4849 "dhcp4_parser.cc" break; - case 887: // loggers_entries: loggers_entries "," -#line 3086 "dhcp4_parser.yy" + case 899: // loggers_entries: loggers_entries "," +#line 3116 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4827 "dhcp4_parser.cc" +#line 4857 "dhcp4_parser.cc" break; - case 888: // $@141: %empty -#line 3092 "dhcp4_parser.yy" + case 900: // $@141: %empty +#line 3122 "dhcp4_parser.yy" { ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(l); ctx.stack_.push_back(l); } -#line 4837 "dhcp4_parser.cc" +#line 4867 "dhcp4_parser.cc" break; - case 889: // logger_entry: "{" $@141 logger_params "}" -#line 3096 "dhcp4_parser.yy" + case 901: // logger_entry: "{" $@141 logger_params "}" +#line 3126 "dhcp4_parser.yy" { ctx.stack_.pop_back(); } -#line 4845 "dhcp4_parser.cc" +#line 4875 "dhcp4_parser.cc" break; - case 892: // logger_params: logger_params "," -#line 3102 "dhcp4_parser.yy" + case 904: // logger_params: logger_params "," +#line 3132 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4853 "dhcp4_parser.cc" +#line 4883 "dhcp4_parser.cc" break; - case 900: // debuglevel: "debuglevel" ":" "integer" -#line 3116 "dhcp4_parser.yy" + case 912: // debuglevel: "debuglevel" ":" "integer" +#line 3146 "dhcp4_parser.yy" { ctx.unique("debuglevel", ctx.loc2pos(yystack_[2].location)); ElementPtr dl(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("debuglevel", dl); } -#line 4863 "dhcp4_parser.cc" +#line 4893 "dhcp4_parser.cc" break; - case 901: // $@142: %empty -#line 3122 "dhcp4_parser.yy" + case 913: // $@142: %empty +#line 3152 "dhcp4_parser.yy" { ctx.unique("severity", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4872 "dhcp4_parser.cc" +#line 4902 "dhcp4_parser.cc" break; - case 902: // severity: "severity" $@142 ":" "constant string" -#line 3125 "dhcp4_parser.yy" + case 914: // severity: "severity" $@142 ":" "constant string" +#line 3155 "dhcp4_parser.yy" { ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("severity", sev); ctx.leave(); } -#line 4882 "dhcp4_parser.cc" +#line 4912 "dhcp4_parser.cc" break; - case 903: // $@143: %empty -#line 3131 "dhcp4_parser.yy" + case 915: // $@143: %empty +#line 3161 "dhcp4_parser.yy" { ctx.unique("output-options", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -4890,122 +4920,122 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.OUTPUT_OPTIONS); } -#line 4894 "dhcp4_parser.cc" +#line 4924 "dhcp4_parser.cc" break; - case 904: // output_options_list: "output-options" $@143 ":" "[" output_options_list_content "]" -#line 3137 "dhcp4_parser.yy" + case 916: // output_options_list: "output-options" $@143 ":" "[" output_options_list_content "]" +#line 3167 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 4903 "dhcp4_parser.cc" +#line 4933 "dhcp4_parser.cc" break; - case 907: // output_options_list_content: output_options_list_content "," -#line 3144 "dhcp4_parser.yy" + case 919: // output_options_list_content: output_options_list_content "," +#line 3174 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4911 "dhcp4_parser.cc" +#line 4941 "dhcp4_parser.cc" break; - case 908: // $@144: %empty -#line 3149 "dhcp4_parser.yy" + case 920: // $@144: %empty +#line 3179 "dhcp4_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 4921 "dhcp4_parser.cc" +#line 4951 "dhcp4_parser.cc" break; - case 909: // output_entry: "{" $@144 output_params_list "}" -#line 3153 "dhcp4_parser.yy" + case 921: // output_entry: "{" $@144 output_params_list "}" +#line 3183 "dhcp4_parser.yy" { ctx.stack_.pop_back(); } -#line 4929 "dhcp4_parser.cc" +#line 4959 "dhcp4_parser.cc" break; - case 912: // output_params_list: output_params_list "," -#line 3159 "dhcp4_parser.yy" + case 924: // output_params_list: output_params_list "," +#line 3189 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4937 "dhcp4_parser.cc" +#line 4967 "dhcp4_parser.cc" break; - case 918: // $@145: %empty -#line 3171 "dhcp4_parser.yy" + case 930: // $@145: %empty +#line 3201 "dhcp4_parser.yy" { ctx.unique("output", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4946 "dhcp4_parser.cc" +#line 4976 "dhcp4_parser.cc" break; - case 919: // output: "output" $@145 ":" "constant string" -#line 3174 "dhcp4_parser.yy" + case 931: // output: "output" $@145 ":" "constant string" +#line 3204 "dhcp4_parser.yy" { ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("output", sev); ctx.leave(); } -#line 4956 "dhcp4_parser.cc" +#line 4986 "dhcp4_parser.cc" break; - case 920: // flush: "flush" ":" "boolean" -#line 3180 "dhcp4_parser.yy" + case 932: // flush: "flush" ":" "boolean" +#line 3210 "dhcp4_parser.yy" { ctx.unique("flush", ctx.loc2pos(yystack_[2].location)); ElementPtr flush(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("flush", flush); } -#line 4966 "dhcp4_parser.cc" +#line 4996 "dhcp4_parser.cc" break; - case 921: // maxsize: "maxsize" ":" "integer" -#line 3186 "dhcp4_parser.yy" + case 933: // maxsize: "maxsize" ":" "integer" +#line 3216 "dhcp4_parser.yy" { ctx.unique("maxsize", ctx.loc2pos(yystack_[2].location)); ElementPtr maxsize(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("maxsize", maxsize); } -#line 4976 "dhcp4_parser.cc" +#line 5006 "dhcp4_parser.cc" break; - case 922: // maxver: "maxver" ":" "integer" -#line 3192 "dhcp4_parser.yy" + case 934: // maxver: "maxver" ":" "integer" +#line 3222 "dhcp4_parser.yy" { ctx.unique("maxver", ctx.loc2pos(yystack_[2].location)); ElementPtr maxver(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("maxver", maxver); } -#line 4986 "dhcp4_parser.cc" +#line 5016 "dhcp4_parser.cc" break; - case 923: // $@146: %empty -#line 3198 "dhcp4_parser.yy" + case 935: // $@146: %empty +#line 3228 "dhcp4_parser.yy" { ctx.unique("pattern", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4995 "dhcp4_parser.cc" +#line 5025 "dhcp4_parser.cc" break; - case 924: // pattern: "pattern" $@146 ":" "constant string" -#line 3201 "dhcp4_parser.yy" + case 936: // pattern: "pattern" $@146 ":" "constant string" +#line 3231 "dhcp4_parser.yy" { ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("pattern", sev); ctx.leave(); } -#line 5005 "dhcp4_parser.cc" +#line 5035 "dhcp4_parser.cc" break; - case 925: // $@147: %empty -#line 3207 "dhcp4_parser.yy" + case 937: // $@147: %empty +#line 3237 "dhcp4_parser.yy" { ctx.unique("compatibility", ctx.loc2pos(yystack_[0].location)); ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -5013,68 +5043,68 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(i); ctx.enter(ctx.COMPATIBILITY); } -#line 5017 "dhcp4_parser.cc" +#line 5047 "dhcp4_parser.cc" break; - case 926: // compatibility: "compatibility" $@147 ":" "{" compatibility_params "}" -#line 3213 "dhcp4_parser.yy" + case 938: // compatibility: "compatibility" $@147 ":" "{" compatibility_params "}" +#line 3243 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 5026 "dhcp4_parser.cc" +#line 5056 "dhcp4_parser.cc" break; - case 929: // compatibility_params: compatibility_params "," -#line 3220 "dhcp4_parser.yy" + case 941: // compatibility_params: compatibility_params "," +#line 3250 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 5034 "dhcp4_parser.cc" +#line 5064 "dhcp4_parser.cc" break; - case 935: // lenient_option_parsing: "lenient-option-parsing" ":" "boolean" -#line 3232 "dhcp4_parser.yy" + case 947: // lenient_option_parsing: "lenient-option-parsing" ":" "boolean" +#line 3262 "dhcp4_parser.yy" { ctx.unique("lenient-option-parsing", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("lenient-option-parsing", b); } -#line 5044 "dhcp4_parser.cc" +#line 5074 "dhcp4_parser.cc" break; - case 936: // ignore_dhcp_server_identifier: "ignore-dhcp-server-identifier" ":" "boolean" -#line 3238 "dhcp4_parser.yy" + case 948: // ignore_dhcp_server_identifier: "ignore-dhcp-server-identifier" ":" "boolean" +#line 3268 "dhcp4_parser.yy" { ctx.unique("ignore-dhcp-server-identifier", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ignore-dhcp-server-identifier", b); } -#line 5054 "dhcp4_parser.cc" +#line 5084 "dhcp4_parser.cc" break; - case 937: // ignore_rai_link_selection: "ignore-rai-link-selection" ":" "boolean" -#line 3244 "dhcp4_parser.yy" + case 949: // ignore_rai_link_selection: "ignore-rai-link-selection" ":" "boolean" +#line 3274 "dhcp4_parser.yy" { ctx.unique("ignore-rai-link-selection", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ignore-rai-link-selection", b); } -#line 5064 "dhcp4_parser.cc" +#line 5094 "dhcp4_parser.cc" break; - case 938: // exclude_first_last_24: "exclude-first-last-24" ":" "boolean" -#line 3250 "dhcp4_parser.yy" + case 950: // exclude_first_last_24: "exclude-first-last-24" ":" "boolean" +#line 3280 "dhcp4_parser.yy" { ctx.unique("exclude-first-last-24", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("exclude-first-last-24", b); } -#line 5074 "dhcp4_parser.cc" +#line 5104 "dhcp4_parser.cc" break; -#line 5078 "dhcp4_parser.cc" +#line 5108 "dhcp4_parser.cc" default: break; @@ -5426,157 +5456,159 @@ namespace isc { namespace dhcp { } - const short Dhcp4Parser::yypact_ninf_ = -1369; + const short Dhcp4Parser::yypact_ninf_ = -1393; const signed char Dhcp4Parser::yytable_ninf_ = -1; const short Dhcp4Parser::yypact_[] = { - 632, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - -1369, -1369, -1369, -1369, 36, 39, 47, 83, 98, 100, - 104, 123, 129, 133, 140, 142, 160, 168, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - -1369, -1369, -1369, -1369, 39, -170, 68, 166, 72, 698, - 285, 288, -31, 112, 337, -93, 516, 252, -1369, 95, - 78, 117, 176, 80, -1369, 50, -1369, -1369, -1369, -1369, - 206, 253, 257, -1369, -1369, -1369, 299, 310, -1369, -1369, - -1369, 313, 321, 325, 341, 353, 363, 375, 376, 382, - 390, 391, -1369, 413, 416, 424, 425, 426, -1369, -1369, - -1369, 441, 444, 446, 449, -1369, -1369, -1369, 450, -1369, - -1369, -1369, -1369, -1369, 451, 453, 454, -1369, -1369, -1369, - -1369, -1369, 455, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - 457, 458, 460, -1369, -1369, 461, -1369, 52, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - 462, 464, 465, 466, -1369, 90, -1369, -1369, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - -1369, -1369, 467, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, -1369, 96, -1369, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - -1369, 469, -1369, -1369, -1369, -1369, -1369, -1369, 111, -1369, - -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, -1369, 210, 472, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - 468, -1369, -1369, 473, -1369, -1369, -1369, 475, -1369, -1369, - 476, 477, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, 479, 481, 483, -1369, -1369, - -1369, -1369, -1369, 485, 478, -1369, -1369, -1369, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, 119, - -1369, -1369, -1369, 487, -1369, 490, -1369, 492, 496, -1369, - -1369, -1369, -1369, -1369, 121, -1369, -1369, -1369, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, 499, 134, -1369, -1369, -1369, - -1369, 39, 39, -1369, 279, 503, -1369, -1369, 505, 506, - 510, 290, 291, 292, 520, 521, 522, 301, 297, 526, - 528, 530, 308, 312, 314, 316, 319, 311, 322, 323, - 324, 326, 327, 545, 328, 329, 336, 338, 340, 546, - 555, 558, 342, 345, 347, 349, 563, 565, 573, 352, - 578, 579, 581, 583, 584, 360, 361, 365, 589, 593, - 594, 596, 597, 374, 599, 604, 606, 609, 611, 612, - 614, 396, 398, 402, 616, 617, -1369, 166, -1369, 619, - 629, 630, 408, 409, 412, 414, 72, -1369, 637, 639, - 640, 641, 642, 643, 420, 645, 647, 649, 650, 651, - 698, -1369, 652, 445, 285, -1369, 670, 678, 679, 680, - 681, 682, 688, 689, -1369, 288, -1369, 690, 692, 480, - 701, 702, 703, 486, -1369, 112, 705, 488, 489, 491, - 711, -1369, 337, 713, 716, 157, -1369, 493, 720, 497, - 722, 507, 508, 723, 733, 516, -1369, 738, 517, 252, - -1369, -1369, -1369, 740, 739, 743, 744, 745, -1369, -1369, - -1369, 527, 529, 532, -1369, -1369, 746, 748, 742, -1369, - -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - 547, -1369, -1369, -1369, -1369, -1369, -124, 548, 559, -1369, - -1369, -1369, -1369, 767, 768, 785, -1369, 566, 183, 787, - 788, 567, -1369, -1369, -1369, 791, 792, 793, 794, 798, - -1369, 799, 800, 795, 801, 802, 574, 598, -1369, -1369, - -1369, 806, 813, -1369, 819, 320, 339, -1369, -1369, -1369, - -1369, -1369, 600, 602, 605, 821, 607, 608, -1369, 819, - 819, 819, 610, 824, -1369, 613, -1369, -1369, 819, 615, - 633, 634, 635, 636, 638, 644, -1369, 646, 648, -1369, - 653, 654, 655, -1369, -1369, 656, -1369, -1369, -1369, 819, - -1369, 657, 788, -1369, -1369, 658, -1369, 659, -1369, -1369, - 4, 669, -1369, 828, -1369, -1369, 39, 166, 252, 72, - 343, -1369, -1369, -1369, 618, 618, 829, -1369, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, -1369, 832, 834, 836, -1369, - -1369, -1369, -1369, -1369, -1369, 837, -1369, -1369, -1369, 170, - 857, 859, 860, 201, 229, 575, 861, -6, 516, -1369, - -1369, 862, -95, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - -1369, -1369, -1369, -1369, 863, -1369, -1369, -1369, -1369, -1369, - -1369, 731, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, -1369, 829, -1369, 136, 152, - 154, -1369, -1369, 156, -1369, -1369, -1369, -1369, -1369, -1369, - -1369, 870, 872, 873, 874, 875, 883, 884, 885, 886, - 887, -1369, 888, 891, -1369, -1369, -1369, -1369, -1369, 162, - -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - -1369, -1369, -1369, 171, -1369, 890, 894, -1369, -1369, 892, - 896, -1369, -1369, 895, 897, -1369, -1369, 898, 899, -1369, - -1369, 900, 902, -1369, -1369, -1369, -1369, -1369, -1369, 86, - -1369, -1369, -1369, -1369, -1369, -1369, -1369, 182, -1369, -1369, - 901, 905, -1369, -1369, 903, 907, -1369, 908, 909, 910, - 911, 912, 913, 173, -1369, -1369, -1369, -1369, -1369, -1369, - -1369, 914, 915, 916, -1369, 204, -1369, -1369, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, 917, -1369, 918, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, 208, -1369, -1369, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, 920, 921, -1369, 919, -1369, - 923, -1369, -1369, -1369, 307, -1369, -1369, -1369, -1369, -1369, - 332, -1369, 188, -1369, 924, 925, 926, 927, -1369, 350, - -1369, -1369, -1369, -1369, -1369, 676, -1369, 928, 929, -1369, - -1369, 930, -1369, 931, -1369, -1369, -1369, 932, 935, 343, - -1369, 936, 937, 938, 939, 683, 714, 707, 715, 718, - 719, 721, 724, 725, 726, 944, 727, 728, 946, 947, - 951, 954, 618, -1369, -1369, 618, -1369, 829, 698, -1369, - 832, 112, -1369, 834, 337, -1369, 836, 1354, -1369, 837, - 170, -1369, 262, 857, -1369, 288, -1369, 859, -93, -1369, - 860, 732, 734, 735, 737, 741, 749, 201, -1369, 729, - 755, 757, 229, -1369, 962, 969, 972, 758, 984, 761, - 988, 575, -1369, 575, -1369, 861, 769, 999, 781, 1008, - -6, -1369, -1369, 75, 862, -1369, 784, 796, 803, 816, - -95, -1369, -1369, 1011, 1019, 285, -1369, 863, 1021, -1369, - -1369, 706, 805, -1369, 820, 822, 827, 835, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, 218, -1369, - -1369, 840, 868, 906, 922, -1369, 366, -1369, 379, -1369, - 1047, -1369, 1048, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - -1369, -1369, 389, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, 1060, 1085, -1369, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - 1115, 1125, -1369, -1369, -1369, -1369, -1369, -1369, -1369, 1122, - -1369, 393, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - -1369, -1369, -1369, -1369, 244, 933, 934, -1369, 1128, -1369, - 1127, -1369, 404, -1369, -1369, 940, -1369, 39, -1369, -1369, - 1133, -1369, -1369, -1369, -1369, -1369, 410, -1369, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, 941, 411, - -1369, 819, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - 1354, -1369, 1134, 1135, 942, 943, -1369, 262, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, -1369, 114, 1136, -1369, -1369, - -1369, 1137, 948, 1138, 75, -1369, -1369, -1369, -1369, -1369, - 950, 952, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - -1369, -1369, 435, -1369, -1369, -1369, -1369, -1369, -1369, 1139, - 1141, -1369, 1142, -1369, 953, -1369, -1369, -1369, 1144, 1146, - 1147, 1148, 114, -1369, -49, -1369, 1136, 1149, -1369, 973, - 955, 956, 1150, -1369, -1369, -1369, -1369, -1369, -1369, 436, - -1369, -1369, -1369, -1369, 214, -1369, -1369, -1369, -1369, -1369, - 1151, 1153, -49, -1369, 17, 1149, -1369, -1369, 1140, 1156, - -1369, 957, -1369, -1369, 1158, 1159, 1160, -1369, 438, -1369, - -1369, -1369, -1369, -1369, -1369, -1369, 141, -1369, 1151, -1369, - 1161, 945, 958, 959, 1165, 17, -1369, -1369, -1369, -1369, - -1369, -1369, -1369, -1369, 439, -1369, -1369, -1369, -1369, 961, - -1369, -1369, -1369, 963, -1369, 1166, 1167, 141, -1369, -1369, - -1369, 964, 965, -1369, -1369, -1369 + 664, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, 57, 39, 83, 123, 129, 133, + 140, 142, 153, 169, 175, 199, 201, 211, -1393, -1393, + -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, 39, -147, 95, 166, 72, 713, + 536, 581, -2, 238, 558, -96, 574, 68, -1393, 105, + 190, 225, 252, 255, -1393, 46, -1393, -1393, -1393, -1393, + 308, 309, 321, -1393, -1393, -1393, 325, 342, -1393, -1393, + -1393, 359, 369, 376, 379, 390, 413, 424, 425, 427, + 442, 443, -1393, 465, 466, 469, 479, 481, -1393, -1393, + -1393, 484, 485, 487, 488, 489, 491, 492, -1393, -1393, + -1393, 495, -1393, -1393, -1393, -1393, -1393, 497, 499, 502, + -1393, -1393, -1393, -1393, -1393, 504, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, 508, 511, 514, -1393, -1393, 515, -1393, + 52, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, -1393, -1393, 517, 518, 520, 522, + -1393, 111, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, 523, -1393, + -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, -1393, 118, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + 528, -1393, -1393, -1393, -1393, -1393, -1393, 119, -1393, -1393, + -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, -1393, 271, 388, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, 525, + -1393, -1393, 530, -1393, -1393, -1393, 532, -1393, -1393, 529, + 535, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, 537, 538, 540, -1393, -1393, -1393, + -1393, -1393, 531, 543, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, 121, -1393, + -1393, -1393, 544, -1393, 550, -1393, 552, 555, -1393, -1393, + -1393, -1393, -1393, 134, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, 557, 136, -1393, -1393, -1393, -1393, + 39, 39, -1393, 132, 559, -1393, -1393, 560, 561, 562, + 329, 334, 335, 565, 567, 570, 347, 343, 575, 576, + 577, 351, 356, 357, 360, 361, 362, 365, 367, 368, + 363, 371, 585, 372, 374, 377, 389, 392, 603, 605, + 608, 394, 397, 401, 404, 406, 407, 410, 616, 636, + 641, 416, 644, 645, 646, 647, 662, 435, 438, 440, + 670, 674, 675, 676, 677, 451, 679, 681, 682, 683, + 684, 685, 689, 461, 462, 463, 693, 696, -1393, 166, + -1393, 697, 700, 701, 475, 476, 480, 482, 72, -1393, + 708, 710, 711, 712, 720, 723, 500, 726, 728, 729, + 730, 731, 713, -1393, 732, 507, 536, -1393, 735, 736, + 737, 738, 745, 746, 747, 748, -1393, 581, -1393, 749, + 750, 524, 752, 753, 763, 541, -1393, 238, 764, 554, + 556, 579, 765, -1393, 558, 766, 767, 139, -1393, 580, + 786, 583, 804, 584, 586, 806, 812, 574, -1393, 814, + 588, 68, -1393, -1393, -1393, 816, 818, 819, 820, 822, + -1393, -1393, -1393, 593, 594, 612, -1393, -1393, 831, 836, + 839, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, 615, -1393, -1393, -1393, -1393, -1393, -127, 617, + 619, -1393, -1393, -1393, -1393, -1393, -1393, -1393, 845, 846, + 847, -1393, 623, 345, 849, 848, 642, -1393, -1393, -1393, + 868, 869, 889, 890, 891, -1393, 892, 893, 896, 895, + 897, 666, 667, -1393, -1393, -1393, 898, 899, -1393, 900, + 250, 285, -1393, -1393, -1393, -1393, -1393, 678, 680, 686, + 902, 687, 688, -1393, 900, 900, 900, 690, 906, -1393, + 691, -1393, -1393, 900, 692, 694, 695, 698, 699, 702, + 703, -1393, 704, 705, -1393, 706, 707, 709, -1393, -1393, + 714, -1393, -1393, -1393, 900, -1393, 715, 848, -1393, -1393, + 716, -1393, 717, -1393, -1393, 18, 722, -1393, 904, -1393, + -1393, 39, 166, 68, 72, 326, -1393, -1393, -1393, 817, + 817, 912, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, 916, 919, 920, -1393, -1393, -1393, -1393, -1393, -1393, + 923, -1393, -1393, -1393, 237, 924, 931, 933, 248, 200, + 47, 934, 230, 574, -1393, -1393, 935, -98, -1393, -1393, + -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, 941, + -1393, -1393, -1393, -1393, -1393, -1393, 805, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, 912, -1393, 154, 164, 167, -1393, -1393, 171, -1393, + -1393, -1393, -1393, -1393, -1393, -1393, 946, 947, 948, 949, + 950, 951, 952, 953, 954, 955, -1393, 956, 957, -1393, + -1393, -1393, -1393, -1393, 180, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, 204, -1393, + 958, 959, -1393, -1393, 960, 962, -1393, -1393, 961, 965, + -1393, -1393, 963, 967, -1393, -1393, 966, 968, -1393, -1393, + -1393, -1393, -1393, -1393, 55, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, 86, -1393, -1393, 969, 970, -1393, -1393, 971, + 975, -1393, 976, 977, 980, 984, 987, 988, 214, -1393, + -1393, -1393, -1393, -1393, -1393, -1393, 994, 996, 997, -1393, + 217, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + 999, -1393, 1002, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + 218, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + 1001, 1011, -1393, 1014, -1393, 1020, -1393, -1393, -1393, 256, + -1393, -1393, -1393, -1393, -1393, 273, -1393, 98, -1393, 1023, + 1025, 1028, 1033, -1393, 279, -1393, -1393, -1393, -1393, -1393, + 733, -1393, 1034, 1038, -1393, -1393, 1040, -1393, 1055, -1393, + -1393, -1393, 1058, 1060, 326, -1393, 1065, 1066, 1067, 1073, + 743, 871, 851, 877, 907, 917, 922, 926, 927, 928, + 1075, 929, 930, 1146, 1151, 1156, 1159, 817, -1393, -1393, + 817, -1393, 912, 713, -1393, 916, 238, -1393, 919, 558, + -1393, 920, 354, -1393, 923, 237, -1393, 275, 924, -1393, + 581, -1393, 931, -96, -1393, 933, 936, 937, 938, 939, + 940, 942, 248, -1393, 932, 943, 944, 200, -1393, 1160, + 1162, 1168, 945, 1173, 964, 1174, 47, -1393, 47, -1393, + 934, 972, 1175, 973, 1176, 230, -1393, -1393, -52, 935, + -1393, 974, 978, 979, 981, -98, -1393, -1393, 1177, 1179, + 536, -1393, 941, 1180, -1393, -1393, 983, 985, -1393, 986, + 989, 990, 991, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, 358, -1393, -1393, 992, 993, 995, 998, + -1393, 290, -1393, 291, -1393, 1178, -1393, 1181, -1393, -1393, + -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + 292, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, 1183, 1184, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, 1182, 1188, + -1393, -1393, -1393, -1393, -1393, -1393, -1393, 1185, -1393, 312, + -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, 302, 1000, 1003, -1393, 1187, -1393, 1190, -1393, + 316, -1393, -1393, 1004, -1393, 39, -1393, -1393, 1194, -1393, + -1393, -1393, -1393, -1393, 320, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, -1393, -1393, 1006, 387, -1393, 900, + -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, 354, -1393, + 1195, 1196, 1007, 1008, -1393, 275, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, 179, 1199, -1393, -1393, -1393, 1197, + 1012, 1198, -52, -1393, -1393, -1393, -1393, -1393, 1009, 1016, + -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + 400, -1393, -1393, -1393, -1393, -1393, -1393, 1186, 1200, -1393, + 1203, -1393, 1018, -1393, -1393, -1393, 1205, 1206, 1213, 1214, + 179, -1393, -19, -1393, 1199, 1217, -1393, 1015, 1019, 1021, + 1221, -1393, -1393, -1393, -1393, -1393, -1393, 445, -1393, -1393, + -1393, -1393, 188, -1393, -1393, -1393, -1393, -1393, 1220, 1225, + -19, -1393, -24, 1217, -1393, -1393, 1226, 1234, -1393, 1022, + -1393, -1393, 1240, 1249, 1252, -1393, 446, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, 186, -1393, 1220, -1393, 1254, 1027, + 1031, 1032, 1260, -24, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, 456, -1393, -1393, -1393, -1393, 1035, -1393, -1393, + -1393, 1037, -1393, 1264, 1267, 186, -1393, -1393, -1393, 1044, + 1045, -1393, -1393, -1393 }; const short @@ -5586,828 +5618,808 @@ namespace isc { namespace dhcp { 20, 22, 24, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 44, 36, 32, 31, 28, 29, 30, 35, 3, 33, 34, - 59, 5, 65, 7, 208, 9, 385, 11, 606, 13, - 637, 15, 521, 17, 530, 19, 569, 21, 347, 23, - 841, 25, 873, 27, 46, 39, 0, 0, 0, 0, - 0, 639, 0, 532, 571, 0, 0, 0, 48, 0, - 47, 0, 0, 40, 61, 0, 63, 871, 193, 226, - 0, 0, 0, 659, 661, 663, 0, 0, 224, 237, - 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 150, 0, 0, 0, 0, 0, 161, 168, - 170, 0, 0, 0, 0, 376, 519, 560, 0, 153, - 174, 462, 624, 626, 0, 0, 0, 309, 686, 628, - 338, 359, 0, 324, 723, 725, 822, 839, 181, 183, - 0, 0, 0, 883, 925, 0, 138, 0, 67, 70, - 71, 72, 73, 74, 108, 109, 110, 111, 112, 75, - 104, 134, 135, 93, 94, 95, 116, 117, 118, 119, - 120, 121, 122, 123, 124, 125, 114, 115, 126, 127, - 128, 130, 131, 132, 136, 137, 78, 79, 101, 80, - 81, 82, 129, 86, 87, 76, 105, 106, 107, 77, - 84, 85, 99, 100, 102, 96, 97, 98, 83, 88, - 89, 90, 91, 92, 103, 113, 133, 210, 212, 216, - 0, 0, 0, 0, 207, 0, 195, 198, 199, 200, - 201, 202, 203, 204, 205, 206, 442, 444, 446, 597, - 440, 448, 0, 452, 454, 456, 450, 681, 439, 390, - 391, 392, 393, 394, 419, 420, 421, 422, 423, 437, - 409, 410, 424, 425, 426, 427, 428, 429, 430, 431, - 432, 433, 434, 435, 436, 438, 0, 387, 397, 414, - 415, 416, 398, 400, 401, 402, 403, 405, 406, 407, - 399, 395, 396, 417, 418, 404, 411, 412, 413, 408, - 621, 0, 620, 614, 615, 616, 617, 613, 0, 608, - 611, 612, 618, 619, 679, 665, 667, 669, 673, 671, - 677, 675, 658, 652, 656, 657, 0, 640, 641, 653, - 654, 655, 649, 644, 650, 646, 647, 648, 651, 645, - 0, 550, 283, 0, 554, 552, 557, 0, 546, 547, - 0, 533, 534, 537, 549, 538, 539, 540, 556, 541, - 542, 543, 544, 545, 588, 0, 0, 0, 595, 586, - 587, 590, 591, 0, 572, 573, 576, 577, 578, 579, - 580, 581, 582, 585, 583, 584, 355, 357, 352, 0, - 349, 353, 354, 0, 858, 0, 861, 0, 0, 865, - 869, 856, 854, 855, 0, 843, 846, 847, 848, 849, - 850, 851, 852, 853, 880, 0, 0, 875, 878, 879, - 45, 50, 0, 37, 43, 0, 64, 60, 0, 0, + 59, 5, 65, 7, 214, 9, 391, 11, 618, 13, + 649, 15, 533, 17, 542, 19, 581, 21, 353, 23, + 853, 25, 885, 27, 46, 39, 0, 0, 0, 0, + 0, 651, 0, 544, 583, 0, 0, 0, 48, 0, + 47, 0, 0, 40, 61, 0, 63, 883, 199, 232, + 0, 0, 0, 671, 673, 675, 0, 0, 230, 243, + 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 153, 0, 0, 0, 0, 0, 164, 171, + 173, 0, 0, 0, 0, 0, 0, 0, 382, 531, + 572, 0, 156, 177, 471, 636, 638, 0, 0, 0, + 315, 698, 640, 344, 365, 0, 330, 735, 737, 834, + 851, 187, 189, 0, 0, 0, 895, 937, 0, 141, + 0, 67, 70, 71, 72, 73, 74, 108, 109, 110, + 111, 112, 75, 104, 137, 138, 93, 94, 95, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 114, 115, 129, 130, 131, 133, 134, 135, + 139, 140, 78, 79, 101, 80, 81, 82, 132, 86, + 87, 76, 105, 106, 107, 77, 84, 85, 99, 100, + 102, 96, 97, 98, 83, 88, 89, 90, 91, 92, + 103, 113, 136, 216, 218, 222, 0, 0, 0, 0, + 213, 0, 201, 204, 205, 206, 207, 208, 209, 210, + 211, 212, 451, 453, 455, 609, 449, 457, 0, 461, + 463, 465, 459, 693, 448, 396, 397, 398, 399, 400, + 425, 426, 427, 428, 429, 446, 415, 416, 430, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 447, 0, 393, 403, 420, 421, + 422, 404, 406, 407, 408, 409, 411, 412, 413, 405, + 401, 402, 423, 424, 410, 417, 418, 419, 414, 633, + 0, 632, 626, 627, 628, 629, 625, 0, 620, 623, + 624, 630, 631, 691, 677, 679, 681, 685, 683, 689, + 687, 670, 664, 668, 669, 0, 652, 653, 665, 666, + 667, 661, 656, 662, 658, 659, 660, 663, 657, 0, + 562, 289, 0, 566, 564, 569, 0, 558, 559, 0, + 545, 546, 549, 561, 550, 551, 552, 568, 553, 554, + 555, 556, 557, 600, 0, 0, 0, 607, 598, 599, + 602, 603, 0, 584, 585, 588, 589, 590, 591, 592, + 593, 594, 597, 595, 596, 361, 363, 358, 0, 355, + 359, 360, 0, 870, 0, 873, 0, 0, 877, 881, + 868, 866, 867, 0, 855, 858, 859, 860, 861, 862, + 863, 864, 865, 892, 0, 0, 887, 890, 891, 45, + 50, 0, 37, 43, 0, 64, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 58, 69, 66, 0, - 0, 0, 0, 0, 0, 0, 197, 209, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 58, 69, + 66, 0, 0, 0, 0, 0, 0, 0, 203, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 389, 386, 0, 0, 610, 607, 0, 0, 0, 0, - 0, 0, 0, 0, 638, 643, 522, 0, 0, 0, - 0, 0, 0, 0, 531, 536, 0, 0, 0, 0, - 0, 570, 575, 0, 0, 351, 348, 0, 0, 0, - 0, 0, 0, 0, 0, 845, 842, 0, 0, 877, - 874, 49, 41, 0, 0, 0, 0, 0, 155, 156, - 157, 0, 0, 0, 191, 192, 0, 0, 0, 139, - 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, - 0, 186, 187, 158, 159, 160, 0, 0, 0, 172, - 173, 180, 185, 0, 0, 0, 152, 0, 0, 0, - 0, 0, 458, 459, 460, 0, 0, 0, 0, 0, - 722, 0, 0, 0, 0, 0, 0, 0, 188, 189, - 190, 0, 0, 68, 0, 0, 0, 220, 221, 222, - 223, 196, 0, 0, 0, 0, 0, 0, 461, 0, - 0, 0, 0, 0, 388, 0, 623, 609, 0, 0, - 0, 0, 0, 0, 0, 0, 642, 0, 0, 548, - 0, 0, 0, 559, 535, 0, 592, 593, 594, 0, - 574, 0, 0, 350, 857, 0, 860, 0, 863, 864, - 0, 0, 844, 0, 882, 876, 0, 0, 0, 0, - 0, 660, 662, 664, 0, 0, 241, 151, 163, 164, - 165, 166, 167, 162, 169, 171, 378, 523, 562, 154, - 176, 177, 178, 179, 175, 464, 38, 625, 627, 0, - 0, 630, 340, 0, 0, 0, 727, 0, 0, 182, - 184, 0, 0, 51, 211, 214, 215, 213, 218, 219, - 217, 443, 445, 447, 599, 441, 449, 453, 455, 457, - 451, 0, 622, 680, 666, 668, 670, 674, 672, 678, - 676, 551, 284, 555, 553, 558, 589, 596, 356, 358, - 859, 862, 867, 868, 866, 870, 241, 42, 0, 0, - 0, 233, 235, 0, 228, 231, 232, 274, 276, 278, - 280, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 294, 0, 0, 301, 303, 305, 307, 273, 0, - 248, 251, 252, 253, 254, 255, 256, 257, 258, 259, - 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, - 270, 271, 272, 0, 246, 0, 242, 243, 383, 0, - 379, 380, 528, 0, 524, 525, 567, 0, 563, 564, - 469, 0, 465, 466, 319, 320, 321, 322, 323, 0, - 311, 314, 315, 316, 317, 318, 691, 0, 688, 635, - 0, 631, 632, 345, 0, 341, 342, 0, 0, 0, - 0, 0, 0, 0, 361, 364, 365, 366, 367, 368, - 369, 0, 0, 0, 334, 0, 326, 329, 330, 331, - 332, 333, 750, 755, 757, 0, 780, 0, 761, 749, - 742, 743, 744, 747, 748, 0, 734, 737, 738, 739, - 740, 745, 746, 741, 732, 0, 728, 729, 0, 834, - 0, 837, 830, 831, 0, 824, 827, 828, 829, 832, - 0, 888, 0, 885, 0, 0, 0, 0, 934, 0, - 927, 930, 931, 932, 933, 53, 604, 0, 600, 601, - 684, 0, 683, 0, 62, 872, 194, 0, 0, 230, - 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 395, 392, 0, 0, 622, 619, 0, 0, + 0, 0, 0, 0, 0, 0, 650, 655, 534, 0, + 0, 0, 0, 0, 0, 0, 543, 548, 0, 0, + 0, 0, 0, 582, 587, 0, 0, 357, 354, 0, + 0, 0, 0, 0, 0, 0, 0, 857, 854, 0, + 0, 889, 886, 49, 41, 0, 0, 0, 0, 0, + 158, 159, 160, 0, 0, 0, 197, 198, 0, 0, + 0, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 0, 192, 193, 161, 162, 163, 0, 0, + 0, 175, 176, 183, 184, 185, 186, 191, 0, 0, + 0, 155, 0, 0, 0, 0, 0, 467, 468, 469, + 0, 0, 0, 0, 0, 734, 0, 0, 0, 0, + 0, 0, 0, 194, 195, 196, 0, 0, 68, 0, + 0, 0, 226, 227, 228, 229, 202, 0, 0, 0, + 0, 0, 0, 470, 0, 0, 0, 0, 0, 394, + 0, 635, 621, 0, 0, 0, 0, 0, 0, 0, + 0, 654, 0, 0, 560, 0, 0, 0, 571, 547, + 0, 604, 605, 606, 0, 586, 0, 0, 356, 869, + 0, 872, 0, 875, 876, 0, 0, 856, 0, 894, + 888, 0, 0, 0, 0, 0, 672, 674, 676, 0, + 0, 247, 154, 166, 167, 168, 169, 170, 165, 172, + 174, 384, 535, 574, 157, 179, 180, 181, 182, 178, + 473, 38, 637, 639, 0, 0, 642, 346, 0, 0, + 0, 739, 0, 0, 188, 190, 0, 0, 51, 217, + 220, 221, 219, 224, 225, 223, 452, 454, 456, 611, + 450, 458, 462, 464, 466, 460, 0, 634, 692, 678, + 680, 682, 686, 684, 690, 688, 563, 290, 567, 565, + 570, 601, 608, 362, 364, 871, 874, 879, 880, 878, + 882, 247, 42, 0, 0, 0, 239, 241, 0, 234, + 237, 238, 280, 282, 284, 286, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 300, 0, 0, 307, + 309, 311, 313, 279, 0, 254, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 0, 252, + 0, 248, 249, 389, 0, 385, 386, 540, 0, 536, + 537, 579, 0, 575, 576, 478, 0, 474, 475, 325, + 326, 327, 328, 329, 0, 317, 320, 321, 322, 323, + 324, 703, 0, 700, 647, 0, 643, 644, 351, 0, + 347, 348, 0, 0, 0, 0, 0, 0, 0, 367, + 370, 371, 372, 373, 374, 375, 0, 0, 0, 340, + 0, 332, 335, 336, 337, 338, 339, 762, 767, 769, + 0, 792, 0, 773, 761, 754, 755, 756, 759, 760, + 0, 746, 749, 750, 751, 752, 757, 758, 753, 744, + 0, 740, 741, 0, 846, 0, 849, 842, 843, 0, + 836, 839, 840, 841, 844, 0, 900, 0, 897, 0, + 0, 0, 0, 946, 0, 939, 942, 943, 944, 945, + 53, 616, 0, 612, 613, 696, 0, 695, 0, 62, + 884, 200, 0, 0, 236, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 250, 225, 238, 0, 240, 245, 0, 377, - 382, 532, 520, 527, 571, 561, 566, 0, 463, 468, - 313, 310, 693, 690, 687, 639, 629, 634, 0, 339, - 344, 0, 0, 0, 0, 0, 0, 363, 360, 0, - 0, 0, 328, 325, 0, 0, 0, 0, 0, 0, - 0, 736, 724, 0, 726, 731, 0, 0, 0, 0, - 826, 823, 840, 0, 887, 884, 0, 0, 0, 0, - 929, 926, 55, 0, 54, 0, 598, 603, 0, 682, - 881, 0, 0, 229, 0, 0, 0, 0, 282, 285, - 286, 287, 288, 289, 290, 291, 292, 293, 0, 299, - 300, 0, 0, 0, 0, 249, 0, 244, 0, 381, - 0, 526, 0, 565, 518, 493, 494, 495, 477, 478, - 498, 499, 500, 501, 502, 516, 480, 481, 503, 504, - 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, - 515, 517, 474, 475, 476, 489, 490, 491, 492, 486, - 487, 488, 0, 471, 479, 496, 497, 482, 483, 484, - 485, 467, 312, 716, 718, 0, 0, 710, 711, 712, - 713, 714, 715, 703, 704, 708, 709, 705, 706, 707, - 0, 694, 695, 698, 699, 700, 701, 702, 689, 0, - 633, 0, 343, 370, 371, 372, 373, 374, 375, 362, - 335, 336, 337, 327, 0, 0, 0, 759, 0, 760, - 0, 735, 0, 730, 833, 0, 836, 0, 825, 903, - 0, 901, 899, 893, 897, 898, 0, 890, 895, 896, - 894, 886, 935, 936, 937, 938, 928, 52, 57, 0, - 602, 0, 234, 236, 275, 277, 279, 281, 296, 297, - 298, 295, 302, 304, 306, 308, 247, 384, 529, 568, - 473, 470, 0, 0, 0, 0, 692, 697, 636, 346, - 752, 753, 754, 751, 756, 758, 0, 763, 733, 835, - 838, 0, 0, 0, 892, 889, 56, 605, 685, 472, - 0, 0, 720, 721, 696, 792, 795, 797, 799, 791, - 790, 789, 0, 782, 785, 786, 787, 788, 768, 0, - 764, 765, 0, 900, 0, 891, 717, 719, 0, 0, - 0, 0, 784, 781, 0, 762, 767, 0, 902, 0, - 0, 0, 0, 783, 778, 777, 773, 775, 776, 0, - 770, 774, 766, 908, 0, 905, 794, 793, 796, 798, - 801, 0, 772, 769, 0, 907, 904, 806, 0, 802, - 803, 0, 771, 918, 0, 0, 0, 923, 0, 910, - 913, 914, 915, 916, 917, 906, 0, 800, 805, 779, - 0, 0, 0, 0, 0, 912, 909, 818, 820, 817, - 811, 813, 815, 816, 0, 808, 812, 814, 804, 0, - 920, 921, 922, 0, 911, 0, 0, 810, 807, 919, - 924, 0, 0, 809, 819, 821 + 0, 0, 0, 0, 0, 0, 0, 256, 231, 244, + 0, 246, 251, 0, 383, 388, 544, 532, 539, 583, + 573, 578, 0, 472, 477, 319, 316, 705, 702, 699, + 651, 641, 646, 0, 345, 350, 0, 0, 0, 0, + 0, 0, 369, 366, 0, 0, 0, 334, 331, 0, + 0, 0, 0, 0, 0, 0, 748, 736, 0, 738, + 743, 0, 0, 0, 0, 838, 835, 852, 0, 899, + 896, 0, 0, 0, 0, 941, 938, 55, 0, 54, + 0, 610, 615, 0, 694, 893, 0, 0, 235, 0, + 0, 0, 0, 288, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 0, 305, 306, 0, 0, 0, 0, + 255, 0, 250, 0, 387, 0, 538, 0, 577, 530, + 502, 503, 504, 486, 487, 507, 508, 509, 510, 511, + 528, 489, 490, 512, 513, 514, 515, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 526, 527, 529, + 483, 484, 485, 498, 499, 500, 501, 495, 496, 497, + 0, 480, 488, 505, 506, 491, 492, 493, 494, 476, + 318, 728, 730, 0, 0, 722, 723, 724, 725, 726, + 727, 715, 716, 720, 721, 717, 718, 719, 0, 706, + 707, 710, 711, 712, 713, 714, 701, 0, 645, 0, + 349, 376, 377, 378, 379, 380, 381, 368, 341, 342, + 343, 333, 0, 0, 0, 771, 0, 772, 0, 747, + 0, 742, 845, 0, 848, 0, 837, 915, 0, 913, + 911, 905, 909, 910, 0, 902, 907, 908, 906, 898, + 947, 948, 949, 950, 940, 52, 57, 0, 614, 0, + 240, 242, 281, 283, 285, 287, 302, 303, 304, 301, + 308, 310, 312, 314, 253, 390, 541, 580, 482, 479, + 0, 0, 0, 0, 704, 709, 648, 352, 764, 765, + 766, 763, 768, 770, 0, 775, 745, 847, 850, 0, + 0, 0, 904, 901, 56, 617, 697, 481, 0, 0, + 732, 733, 708, 804, 807, 809, 811, 803, 802, 801, + 0, 794, 797, 798, 799, 800, 780, 0, 776, 777, + 0, 912, 0, 903, 729, 731, 0, 0, 0, 0, + 796, 793, 0, 774, 779, 0, 914, 0, 0, 0, + 0, 795, 790, 789, 785, 787, 788, 0, 782, 786, + 778, 920, 0, 917, 806, 805, 808, 810, 813, 0, + 784, 781, 0, 919, 916, 818, 0, 814, 815, 0, + 783, 930, 0, 0, 0, 935, 0, 922, 925, 926, + 927, 928, 929, 918, 0, 812, 817, 791, 0, 0, + 0, 0, 0, 924, 921, 830, 832, 829, 823, 825, + 827, 828, 0, 820, 824, 826, 816, 0, 932, 933, + 934, 0, 923, 0, 0, 822, 819, 931, 936, 0, + 0, 821, 831, 833 }; const short Dhcp4Parser::yypgoto_[] = { - -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, -59, -1369, -599, -1369, 452, - -1369, -1369, -1369, -1369, -1369, -1369, -636, -1369, -1369, -1369, - -67, -1369, -1369, -1369, -1369, -1369, -1369, -1369, 482, 667, + -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, -1393, -59, -1393, -614, -1393, 564, + -1393, -1393, -1393, -1393, -1393, -1393, -651, -1393, -1393, -1393, + -67, -1393, -1393, -1393, -1393, -1393, -1393, -1393, 545, 757, 16, 31, 33, -26, -13, 13, 41, 44, 51, 54, - -1369, -1369, -1369, -1369, 56, -1369, -1369, 59, 62, 64, - 66, 69, 74, -1369, -1369, 76, -1369, 77, -1369, 79, - 81, 82, -1369, -1369, 84, 87, -1369, 89, -1369, 92, - -1369, -1369, -1369, -1369, -1369, 43, -1369, -1369, -1369, 434, - 665, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - 186, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, 383, - -1369, 167, -1369, -709, 174, -1369, -1369, -1368, -1369, -1347, - -1369, -1369, -1369, -1369, -63, -1369, -1369, -1369, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - -741, -1369, -740, -1369, -737, -1369, -1369, -1369, -1369, -1369, - -1369, 153, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - 135, -1369, -1369, -1369, -1369, -1369, -1369, -1369, 145, -1369, - -1369, -1369, 150, 660, -1369, -1369, -1369, -1369, -1369, -1369, - -1369, 143, -1369, -1369, -1369, -1369, -1369, -1369, -1020, -1369, - -1369, -1369, 172, -1369, -1369, -1369, 175, 671, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, -1369, -1018, -1369, -29, -1369, - -18, -1369, 5, -1369, 71, -1369, 94, 97, 99, -1369, - -1369, -1369, -1369, -1369, 165, -1369, -1369, -75, -60, -1369, - -1369, -1369, -1369, -1369, 177, -1369, -1369, -1369, 178, -1369, - 661, -1369, -34, -1369, -1369, -1369, -1369, -1369, -27, -1369, - -1369, -1369, -1369, -1369, -32, -1369, -1369, -1369, 179, -1369, - -1369, -1369, 180, -1369, 664, -1369, -1369, -1369, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, 109, - -1369, -1369, -1369, 113, 673, -1369, -1369, -1369, -44, -1369, - 3, -1369, -56, -1369, -1369, -1369, 164, -1369, -1369, -1369, - 185, -1369, 674, -48, -1369, -7, -1369, 15, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, -1017, -1369, -1369, -1369, -1369, - -1369, -1369, -1369, 169, -1369, -1369, -1369, -69, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - -1369, -1369, 146, -1369, 149, 163, -1369, -1369, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -123, - -1369, -1369, -144, -1369, -1369, -1369, -1369, -1369, -111, -1369, - -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - -165, -1369, -1369, -192, -1369, -1369, -1369, -1369, -1369, -1369, - -1369, 158, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - -1369, -1369, 484, 672, -1369, -1369, -1369, -1369, -1369, -1369, - -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - -1369, 531, 666, -1369, -1369, -1369, -1369, -1369, -1369, 181, - -1369, -1369, -64, -1369, -1369, -1369, -1369, -1369, -1369, -131, - -1369, -1369, -159, -1369, -1369, -1369, -1369, -1369, -1369, -1369, - -1369, -1369, -1369, 184, -1369, -1369, -1369, -1369 + -1393, -1393, -1393, -1393, 56, -1393, -1393, 59, 62, 64, + 66, 69, 74, -1393, -1393, 76, -1393, 77, -1393, 79, + 81, 82, -1393, -1393, 84, 87, 89, 92, 94, -1393, + 97, -1393, 99, -1393, -1393, -1393, -1393, -1393, 43, -1393, + -1393, -1393, 548, 751, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, 269, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, 467, -1393, 242, -1393, -724, 249, -1393, -1393, + -1392, -1393, -1386, -1393, -1393, -1393, -1393, -63, -1393, -1393, + -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, -756, -1393, -755, -1393, -752, -1393, -1393, + -1393, -1393, -1393, -1393, 232, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, 212, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, 227, -1393, -1393, -1393, 231, 719, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, 228, -1393, -1393, -1393, -1393, -1393, + -1393, -1035, -1393, -1393, -1393, 245, -1393, -1393, -1393, 254, + 760, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1033, + -1393, -29, -1393, -18, -1393, 5, -1393, 71, -1393, 100, + 102, 104, -1393, -1393, -1393, -1393, -1393, 251, -1393, -1393, + 6, -60, -1393, -1393, -1393, -1393, -1393, 258, -1393, -1393, + -1393, 261, -1393, 742, -1393, -34, -1393, -1393, -1393, -1393, + -1393, -27, -1393, -1393, -1393, -1393, -1393, -32, -1393, -1393, + -1393, 259, -1393, -1393, -1393, 263, -1393, 741, -1393, -1393, + -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, 207, -1393, -1393, -1393, 216, 776, -1393, -1393, + -1393, -44, -1393, 3, -1393, -56, -1393, -1393, -1393, 262, + -1393, -1393, -1393, 268, -1393, 773, -48, -1393, -7, -1393, + 15, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1032, -1393, + -1393, -1393, -1393, -1393, -1393, -1393, 274, -1393, -1393, -1393, + 28, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, -1393, 244, -1393, 247, 257, -1393, + -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, -20, -1393, -1393, -53, -1393, -1393, -1393, -1393, + -1393, -15, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, -76, -1393, -1393, -95, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, 260, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, -1393, 578, 769, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, 620, 768, -1393, -1393, -1393, -1393, + -1393, -1393, 267, -1393, -1393, 36, -1393, -1393, -1393, -1393, + -1393, -1393, -25, -1393, -1393, -62, -1393, -1393, -1393, -1393, + -1393, -1393, -1393, -1393, -1393, -1393, 266, -1393, -1393, -1393, + -1393 }; const short Dhcp4Parser::yydefgoto_[] = { 0, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 36, 37, 38, 65, 747, - 82, 83, 39, 64, 79, 80, 764, 985, 1093, 1094, - 838, 41, 66, 85, 435, 86, 43, 67, 157, 158, - 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, - 169, 170, 463, 171, 172, 480, 173, 174, 175, 176, - 177, 178, 179, 469, 733, 180, 470, 181, 471, 182, - 183, 184, 481, 744, 185, 186, 499, 187, 500, 188, - 189, 190, 191, 192, 193, 194, 195, 196, 439, 235, - 236, 45, 68, 237, 509, 238, 510, 767, 239, 511, - 770, 240, 241, 242, 243, 197, 449, 198, 440, 813, - 814, 815, 997, 816, 998, 199, 450, 200, 451, 865, - 866, 867, 1025, 839, 840, 841, 1001, 842, 1002, 843, - 1003, 844, 1004, 845, 846, 548, 847, 848, 849, 850, - 851, 852, 853, 854, 855, 856, 1015, 1271, 857, 858, - 859, 1018, 860, 1019, 861, 1020, 862, 1021, 201, 488, - 889, 890, 891, 892, 893, 894, 895, 202, 494, 925, - 926, 927, 928, 929, 203, 491, 904, 905, 906, 1048, - 59, 75, 399, 400, 401, 563, 402, 564, 204, 492, - 913, 914, 915, 916, 917, 918, 919, 920, 205, 476, - 869, 870, 871, 1028, 47, 69, 286, 287, 288, 522, - 289, 518, 290, 519, 291, 520, 292, 523, 293, 528, - 294, 525, 295, 526, 296, 527, 206, 207, 208, 300, - 209, 482, 881, 882, 883, 1037, 1172, 1173, 210, 477, - 53, 72, 873, 874, 875, 1031, 55, 73, 360, 361, - 362, 363, 364, 365, 366, 547, 367, 551, 368, 550, - 369, 370, 552, 371, 211, 478, 877, 878, 879, 1034, - 57, 74, 383, 384, 385, 386, 387, 556, 388, 389, - 390, 391, 392, 393, 560, 302, 521, 987, 988, 989, - 1095, 49, 70, 318, 319, 320, 532, 321, 212, 483, - 213, 484, 214, 490, 900, 901, 902, 1045, 51, 71, - 336, 337, 338, 215, 444, 216, 445, 217, 446, 342, - 537, 343, 538, 344, 539, 345, 541, 346, 540, 347, - 543, 348, 542, 349, 536, 309, 529, 991, 992, 1098, - 218, 489, 897, 898, 1042, 1200, 1201, 1202, 1203, 1204, - 1282, 1205, 1283, 1206, 1207, 219, 220, 495, 221, 496, - 955, 956, 957, 1073, 945, 946, 947, 1064, 1293, 948, - 1065, 949, 1066, 950, 951, 952, 1070, 1329, 1330, 1331, - 1344, 1359, 1360, 1361, 1371, 953, 1068, 1322, 1323, 1324, - 1338, 1367, 1325, 1339, 1326, 1340, 1327, 1341, 1378, 1379, - 1380, 1396, 1414, 1415, 1416, 1425, 1417, 1426, 222, 497, - 964, 965, 966, 967, 1077, 968, 969, 1079, 223, 498, - 61, 76, 414, 415, 416, 417, 568, 418, 419, 570, - 420, 421, 422, 573, 804, 423, 574, 224, 438, 63, - 77, 426, 427, 428, 577, 429, 225, 504, 972, 973, - 1083, 1246, 1247, 1248, 1249, 1303, 1250, 1301, 1364, 1365, - 1374, 1388, 1389, 1390, 1400, 1391, 1392, 1393, 1394, 1404, - 226, 505, 979, 980, 981, 982, 983, 984 + 23, 24, 25, 26, 27, 36, 37, 38, 65, 762, + 82, 83, 39, 64, 79, 80, 779, 1000, 1108, 1109, + 853, 41, 66, 85, 444, 86, 43, 67, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, + 172, 173, 472, 174, 175, 492, 176, 177, 178, 179, + 180, 181, 182, 478, 748, 183, 479, 184, 480, 185, + 186, 187, 493, 759, 188, 189, 190, 191, 192, 511, + 193, 512, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 448, 241, 242, 45, 68, 243, 521, 244, 522, + 782, 245, 523, 785, 246, 247, 248, 249, 203, 458, + 204, 449, 828, 829, 830, 1012, 831, 1013, 205, 459, + 206, 460, 880, 881, 882, 1040, 854, 855, 856, 1016, + 857, 1017, 858, 1018, 859, 1019, 860, 861, 560, 862, + 863, 864, 865, 866, 867, 868, 869, 870, 871, 1030, + 1289, 872, 873, 874, 1033, 875, 1034, 876, 1035, 877, + 1036, 207, 500, 904, 905, 906, 907, 908, 909, 910, + 208, 506, 940, 941, 942, 943, 944, 209, 503, 919, + 920, 921, 1063, 59, 75, 408, 409, 410, 575, 411, + 576, 210, 504, 928, 929, 930, 931, 932, 933, 934, + 935, 211, 488, 884, 885, 886, 1043, 47, 69, 295, + 296, 297, 534, 298, 530, 299, 531, 300, 532, 301, + 535, 302, 540, 303, 537, 304, 538, 305, 539, 212, + 213, 214, 309, 215, 494, 896, 897, 898, 1052, 1190, + 1191, 216, 489, 53, 72, 888, 889, 890, 1046, 55, + 73, 369, 370, 371, 372, 373, 374, 375, 559, 376, + 563, 377, 562, 378, 379, 564, 380, 217, 490, 892, + 893, 894, 1049, 57, 74, 392, 393, 394, 395, 396, + 568, 397, 398, 399, 400, 401, 402, 572, 311, 533, + 1002, 1003, 1004, 1110, 49, 70, 327, 328, 329, 544, + 330, 218, 495, 219, 496, 220, 502, 915, 916, 917, + 1060, 51, 71, 345, 346, 347, 221, 453, 222, 454, + 223, 455, 351, 549, 352, 550, 353, 551, 354, 553, + 355, 552, 356, 555, 357, 554, 358, 548, 318, 541, + 1006, 1007, 1113, 224, 501, 912, 913, 1057, 1218, 1219, + 1220, 1221, 1222, 1300, 1223, 1301, 1224, 1225, 225, 226, + 507, 227, 508, 970, 971, 972, 1088, 960, 961, 962, + 1079, 1311, 963, 1080, 964, 1081, 965, 966, 967, 1085, + 1347, 1348, 1349, 1362, 1377, 1378, 1379, 1389, 968, 1083, + 1340, 1341, 1342, 1356, 1385, 1343, 1357, 1344, 1358, 1345, + 1359, 1396, 1397, 1398, 1414, 1432, 1433, 1434, 1443, 1435, + 1444, 228, 509, 979, 980, 981, 982, 1092, 983, 984, + 1094, 229, 510, 61, 76, 423, 424, 425, 426, 580, + 427, 428, 582, 429, 430, 431, 585, 819, 432, 586, + 230, 447, 63, 77, 435, 436, 437, 589, 438, 231, + 516, 987, 988, 1098, 1264, 1265, 1266, 1267, 1321, 1268, + 1319, 1382, 1383, 1392, 1406, 1407, 1408, 1418, 1409, 1410, + 1411, 1412, 1422, 232, 517, 994, 995, 996, 997, 998, + 999 }; const short Dhcp4Parser::yytable_[] = { - 156, 234, 258, 312, 332, 78, 358, 379, 398, 411, - 359, 380, 350, 305, 940, 941, 863, 1163, 942, 1164, - 1180, 306, 802, 339, 244, 303, 322, 334, 1410, 372, - 394, 746, 412, 777, 778, 779, 28, 301, 317, 333, - 381, 313, 783, 262, 29, 352, 30, 382, 31, 1411, - 396, 397, 314, 436, 40, 507, 263, 81, 437, 1410, - 508, 126, 307, 797, 340, 132, 133, 728, 729, 730, - 731, 245, 304, 323, 335, 315, 373, 395, 84, 413, - 1411, 431, 264, 434, 308, 259, 341, 227, 228, 1040, - 42, 229, 1041, 516, 230, 231, 232, 233, 517, 530, - 260, 430, 261, 746, 531, 44, 732, 46, 132, 133, - 265, 48, 285, 266, 534, 974, 975, 976, 977, 535, - 267, 432, 565, 268, 575, 269, 1354, 566, 270, 576, - 50, 271, 155, 272, 155, 273, 52, 579, 274, 507, - 54, 316, 580, 275, 994, 276, 277, 56, 278, 58, - 279, 280, 351, 281, 1315, 579, 282, 516, 283, 999, - 995, 284, 996, 297, 1000, 1022, 298, 60, 299, 352, - 1023, 958, 959, 960, 1022, 62, 1057, 87, 155, 1024, - 88, 1058, 818, 819, 433, 1043, 132, 133, 1044, 132, - 133, 1084, 89, 803, 1085, 90, 91, 92, 93, 94, - 95, 96, 97, 98, 99, 100, 352, 1062, 353, 354, - 441, 1071, 1063, 355, 356, 357, 1072, 1375, 544, 1383, - 1376, 961, 1384, 1385, 1386, 1387, 132, 133, 132, 133, + 159, 240, 264, 321, 341, 78, 367, 388, 407, 420, + 368, 389, 359, 314, 955, 956, 878, 1181, 957, 1182, + 1198, 315, 1428, 348, 250, 312, 331, 343, 1429, 381, + 403, 761, 421, 792, 793, 794, 817, 310, 326, 342, + 390, 322, 798, 268, 29, 361, 30, 391, 31, 445, + 405, 406, 323, 1428, 446, 519, 269, 28, 1055, 1429, + 520, 1056, 316, 812, 349, 135, 136, 743, 744, 745, + 746, 251, 313, 332, 344, 324, 382, 404, 361, 422, + 433, 434, 270, 81, 317, 265, 350, 233, 234, 1058, + 40, 235, 1059, 129, 236, 237, 238, 239, 135, 136, + 266, 1099, 267, 761, 1100, 84, 747, 849, 850, 851, + 271, 439, 294, 272, 528, 989, 990, 991, 992, 529, + 273, 542, 546, 274, 577, 275, 543, 547, 276, 578, + 42, 277, 158, 278, 158, 279, 44, 587, 280, 591, + 46, 325, 588, 281, 592, 282, 283, 48, 284, 50, + 285, 286, 1257, 287, 1258, 1259, 288, 519, 289, 1372, + 52, 290, 1009, 291, 135, 136, 292, 591, 293, 306, + 528, 307, 1010, 308, 1014, 1011, 54, 87, 158, 1015, + 88, 1401, 56, 1037, 1402, 1403, 1404, 1405, 1038, 135, + 136, 1393, 89, 440, 1394, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 58, 1037, 60, 947, + 818, 158, 1039, 948, 949, 950, 951, 1072, 62, 1333, + 1077, 1086, 1073, 952, 953, 1078, 1087, 833, 834, 441, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, - 121, 122, 123, 124, 125, 132, 133, 442, 126, 127, - 1163, 443, 1164, 1180, 424, 425, 32, 33, 34, 35, - 128, 129, 130, 1268, 1269, 1270, 1239, 131, 1240, 1241, - 132, 133, 1316, 1317, 1318, 134, 135, 136, 137, 138, - 740, 741, 742, 743, 93, 94, 95, 96, 139, 155, - 396, 397, 155, 447, 884, 885, 886, 887, 140, 888, - 1080, 141, 1407, 1408, 448, 1081, 1126, 452, 142, 143, - 93, 94, 95, 144, 145, 453, 101, 102, 103, 454, - 940, 941, 940, 941, 942, 575, 942, 765, 766, 155, - 1082, 155, 146, 132, 133, 455, 147, 907, 908, 909, - 910, 911, 912, 1090, 126, 127, 352, 456, 1091, 768, - 769, 148, 149, 150, 151, 152, 153, 457, 155, 1022, - 811, 812, 581, 582, 1276, 154, 132, 133, 127, 458, - 459, 127, 530, 921, 922, 923, 460, 1277, 1183, 1184, - 1185, 1186, 1280, 155, 461, 462, 565, 1281, 310, 132, - 133, 1289, 132, 133, 1290, 1291, 1292, 1071, 253, 254, - 255, 324, 1298, 1304, 534, 256, 311, 464, 1305, 1307, - 465, 325, 326, 327, 328, 329, 330, 331, 466, 467, - 468, 352, 374, 353, 354, 375, 376, 377, 1342, 1372, - 156, 1405, 1427, 1343, 1373, 472, 1406, 1428, 473, 234, - 474, 132, 133, 475, 479, 485, 155, 486, 487, 493, - 378, 501, 502, 258, 503, 506, 512, 312, 513, 514, - 515, 524, 244, 533, 305, 545, 546, 549, 332, 553, - 555, 562, 306, 557, 554, 558, 303, 559, 358, 155, - 322, 567, 359, 561, 569, 379, 571, 339, 301, 380, - 572, 334, 317, 578, 262, 313, 583, 584, 411, 585, - 586, 372, 155, 333, 587, 155, 314, 263, 394, 245, - 588, 589, 590, 307, 591, 592, 593, 595, 381, 594, - 596, 412, 597, 304, 598, 382, 599, 323, 340, 315, - 600, 604, 601, 264, 602, 308, 259, 603, 335, 610, - 616, 605, 606, 607, 608, 609, 611, 612, 373, 617, - 341, 260, 618, 261, 155, 395, 613, 623, 614, 624, - 615, 265, 619, 285, 266, 620, 621, 625, 413, 622, - 626, 267, 627, 628, 268, 629, 269, 630, 631, 270, - 632, 633, 271, 635, 272, 634, 273, 636, 637, 274, - 638, 639, 640, 641, 275, 316, 276, 277, 642, 278, - 643, 279, 280, 644, 281, 645, 646, 282, 647, 283, - 651, 652, 284, 654, 297, 1308, 648, 298, 649, 299, - 132, 133, 650, 655, 656, 834, 835, 836, 657, 658, - 659, 662, 660, 663, 664, 665, 666, 667, 668, 669, - 156, 670, 234, 671, 672, 673, 675, 807, 817, 818, - 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, - 829, 830, 831, 676, 678, 244, 832, 833, 834, 835, - 836, 837, 679, 680, 681, 682, 683, 924, 939, 132, - 133, 411, 684, 685, 687, 978, 688, 403, 404, 405, - 406, 407, 408, 409, 410, 690, 691, 692, 689, 695, - 930, 943, 352, 962, 412, 699, 693, 701, 696, 697, - 702, 698, 245, 704, 705, 706, 707, 710, 91, 92, - 93, 94, 95, 96, 932, 708, 709, 711, 933, 934, - 935, 936, 713, 155, 716, 714, 717, 726, 937, 938, - 718, 719, 720, 724, 721, 725, 722, 931, 944, 723, - 963, 413, 101, 102, 103, 104, 105, 106, 107, 108, - 109, 110, 736, 737, 727, 734, 115, 116, 117, 118, - 119, 120, 121, 122, 123, 124, 735, 246, 247, 248, - 738, 127, 745, 739, 748, 30, 749, 750, 751, 752, - 756, 759, 155, 129, 130, 753, 754, 755, 757, 758, - 249, 761, 132, 133, 250, 251, 252, 134, 135, 136, - 762, 253, 254, 255, 763, 760, 774, 771, 256, 772, - 139, 781, 773, 806, 775, 776, 864, 780, 257, 868, - 782, 872, 784, 876, 880, 155, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 805, - 785, 786, 787, 788, 896, 789, 899, 903, 954, 971, - 986, 790, 990, 791, 1005, 792, 1006, 1007, 1008, 1009, - 793, 794, 795, 796, 798, 800, 801, 1010, 1011, 1012, - 1013, 1014, 1016, 148, 149, 1017, 1026, 1027, 1029, 1030, - 1033, 1032, 1036, 1092, 1035, 1039, 1038, 1046, 1047, 1049, - 1050, 1108, 1051, 1052, 1053, 1054, 1055, 1056, 1059, 1060, - 1061, 1067, 1069, 1076, 1075, 155, 1074, 1078, 1086, 1087, - 1088, 1089, 1097, 1262, 1096, 1110, 1101, 1100, 1099, 1102, - 1104, 1105, 1106, 1107, 1109, 1111, 1112, 1113, 1118, 1114, - 1121, 1122, 1115, 1116, 1117, 1123, 1120, 1119, 1124, 1220, - 1213, 258, 1214, 1215, 358, 1216, 1224, 379, 359, 1217, - 1134, 380, 305, 1225, 1162, 1187, 1226, 1218, 332, 1192, - 306, 398, 1193, 1221, 303, 1222, 1227, 372, 1228, 1177, - 394, 1229, 1230, 1175, 1197, 924, 301, 339, 1195, 1234, - 381, 334, 262, 1235, 939, 1174, 939, 382, 1165, 1236, - 1194, 1138, 1237, 333, 1252, 263, 1242, 1257, 930, 1166, - 1243, 307, 1258, 978, 1139, 1261, 1253, 943, 312, 943, - 1178, 304, 1263, 1254, 373, 1198, 962, 395, 340, 1244, - 1176, 264, 1167, 308, 259, 1196, 1255, 1264, 335, 1265, - 1140, 322, 1179, 1135, 1266, 1278, 1279, 1199, 1188, 260, - 341, 261, 1267, 317, 1284, 931, 313, 1272, 1136, 265, - 1137, 285, 266, 1189, 944, 1190, 944, 314, 1141, 267, - 1161, 1142, 268, 963, 269, 1191, 1245, 270, 1143, 1285, - 271, 1144, 272, 1145, 273, 1273, 1146, 274, 323, 1147, - 315, 1148, 275, 1149, 276, 277, 1150, 278, 1168, 279, - 280, 1151, 281, 1152, 1153, 282, 1154, 283, 1155, 1156, - 284, 1157, 297, 1286, 1158, 298, 1159, 299, 1287, 1160, - 1288, 1169, 1297, 1274, 1170, 1296, 1171, 1302, 1310, 1311, - 1366, 1332, 1334, 1328, 1346, 1345, 1397, 1347, 1349, 1275, - 1350, 1351, 1352, 810, 799, 1370, 1363, 1381, 1377, 1398, - 1294, 1295, 1401, 1402, 1403, 1419, 316, 1299, 1306, 1423, - 1431, 1432, 1312, 1313, 653, 1420, 1333, 1336, 1300, 1337, - 1348, 661, 1368, 1369, 1399, 1103, 1421, 1422, 1429, 993, - 1430, 1434, 1435, 1182, 1127, 1212, 1125, 1223, 1211, 808, - 1219, 674, 1129, 1128, 1181, 1309, 1260, 677, 1259, 1130, - 1131, 1210, 1208, 1134, 1132, 1133, 694, 1162, 1314, 686, - 1187, 1233, 1232, 1362, 1192, 703, 700, 1193, 1382, 1319, - 1209, 1353, 1177, 1418, 1231, 1433, 1175, 1242, 1238, 1197, - 1335, 1243, 970, 1195, 1395, 715, 1424, 712, 1174, 809, - 0, 1165, 1320, 0, 1138, 1194, 0, 0, 0, 0, - 1244, 0, 1166, 0, 0, 1251, 0, 1139, 0, 0, - 0, 0, 0, 1178, 1256, 1319, 0, 1355, 0, 0, - 1198, 1356, 0, 1176, 0, 1167, 0, 0, 0, 0, - 1196, 0, 0, 1140, 0, 1179, 1135, 0, 1320, 1321, - 1357, 0, 1199, 1188, 0, 1355, 0, 1245, 0, 1356, - 0, 1136, 0, 1137, 0, 0, 0, 0, 1189, 0, - 1190, 1141, 0, 1161, 1142, 0, 0, 0, 1357, 1409, - 1191, 1143, 0, 0, 1144, 0, 1145, 0, 0, 1146, - 0, 0, 1147, 0, 1148, 1321, 1149, 1358, 0, 1150, - 0, 1168, 1412, 0, 1151, 0, 1152, 1153, 0, 1154, - 1409, 1155, 1156, 0, 1157, 0, 0, 1158, 0, 1159, - 0, 0, 1160, 0, 1169, 1358, 0, 1170, 0, 1171, - 0, 0, 0, 1412, 91, 92, 93, 94, 95, 96, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1413, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 0, 0, - 1413, 0, 115, 116, 117, 118, 119, 120, 121, 122, - 123, 124, 125, 0, 0, 0, 0, 127, 352, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 129, - 130, 0, 0, 0, 0, 0, 0, 0, 132, 133, - 0, 251, 0, 134, 135, 136, 0, 253, 254, 255, - 0, 0, 0, 0, 256, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 257, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 121, 122, 123, 124, 125, 126, 127, 128, 443, 1095, + 442, 129, 130, 1181, 1096, 1182, 1198, 780, 781, 32, + 33, 34, 35, 131, 132, 133, 587, 158, 360, 556, + 134, 1097, 1105, 135, 136, 405, 406, 1106, 137, 138, + 139, 140, 141, 1037, 542, 1298, 135, 136, 1294, 1295, + 1299, 142, 158, 135, 136, 783, 784, 93, 94, 95, + 96, 143, 450, 451, 144, 577, 1141, 135, 136, 1086, + 1307, 145, 146, 1322, 1316, 452, 147, 148, 1323, 456, + 955, 956, 955, 956, 957, 361, 957, 362, 363, 101, + 102, 103, 364, 365, 366, 149, 457, 135, 136, 150, + 1334, 1335, 1336, 826, 827, 135, 136, 936, 937, 938, + 1425, 1426, 595, 461, 151, 152, 153, 154, 155, 156, + 129, 130, 361, 462, 899, 900, 901, 902, 157, 903, + 463, 593, 594, 464, 91, 92, 93, 94, 95, 96, + 546, 557, 135, 136, 465, 1325, 158, 922, 923, 924, + 925, 926, 927, 1360, 1201, 1202, 1203, 1204, 1361, 158, + 973, 974, 975, 1286, 1287, 1288, 158, 466, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 467, 468, + 158, 469, 115, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 126, 127, 128, 470, 471, 1390, 1423, + 130, 361, 159, 1391, 1424, 755, 756, 757, 758, 1445, + 976, 240, 132, 133, 1446, 1308, 1309, 1310, 158, 473, + 474, 135, 136, 475, 257, 264, 137, 138, 139, 321, + 259, 260, 261, 476, 250, 477, 314, 262, 481, 482, + 341, 483, 484, 485, 315, 486, 487, 263, 312, 491, + 367, 497, 331, 498, 368, 158, 499, 388, 505, 348, + 310, 389, 513, 343, 326, 514, 268, 322, 515, 518, + 420, 524, 525, 381, 526, 342, 527, 536, 323, 269, + 403, 251, 545, 558, 561, 316, 565, 566, 567, 573, + 390, 569, 570, 421, 571, 313, 574, 391, 579, 332, + 349, 324, 151, 152, 581, 270, 583, 317, 265, 584, + 344, 590, 600, 596, 597, 598, 599, 601, 602, 603, + 382, 604, 350, 266, 605, 267, 607, 404, 606, 608, + 609, 610, 611, 271, 158, 294, 272, 612, 613, 622, + 422, 614, 615, 273, 620, 616, 274, 617, 275, 618, + 619, 276, 621, 623, 277, 624, 278, 628, 279, 629, + 625, 280, 630, 93, 94, 95, 281, 325, 282, 283, + 638, 284, 626, 285, 286, 627, 287, 631, 1326, 288, + 632, 289, 130, 633, 290, 634, 291, 635, 636, 292, + 639, 293, 306, 637, 307, 640, 308, 641, 642, 643, + 644, 645, 319, 135, 136, 361, 383, 362, 363, 384, + 385, 386, 259, 260, 261, 159, 646, 240, 647, 262, + 320, 648, 822, 649, 650, 135, 136, 130, 651, 652, + 653, 654, 655, 656, 387, 657, 658, 659, 660, 661, + 250, 135, 136, 662, 663, 664, 665, 666, 135, 136, + 667, 669, 939, 954, 670, 671, 420, 333, 672, 673, + 993, 674, 677, 675, 678, 679, 680, 334, 335, 336, + 337, 338, 339, 340, 681, 945, 958, 682, 977, 421, + 684, 683, 685, 686, 687, 688, 690, 251, 691, 693, + 694, 695, 696, 91, 92, 93, 94, 95, 96, 697, + 698, 699, 700, 702, 703, 704, 705, 706, 412, 413, + 414, 415, 416, 417, 418, 419, 158, 707, 710, 714, + 716, 717, 946, 959, 708, 978, 422, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 711, 158, 712, + 720, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 158, 252, 253, 254, 722, 130, + 725, 158, 713, 719, 721, 723, 726, 724, 728, 729, + 731, 132, 133, 736, 737, 732, 733, 734, 255, 735, + 135, 136, 256, 257, 258, 137, 138, 139, 739, 259, + 260, 261, 738, 740, 741, 742, 262, 749, 142, 750, + 751, 752, 753, 754, 760, 30, 263, 832, 833, 834, + 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 763, 764, 765, 847, 848, 849, 850, 851, + 852, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 766, 767, 774, 775, 768, 769, + 770, 771, 772, 776, 773, 778, 777, 789, 786, 821, + 787, 151, 152, 796, 361, 820, 788, 790, 791, 879, + 795, 797, 799, 883, 800, 801, 887, 891, 802, 803, + 895, 911, 804, 805, 806, 807, 808, 809, 914, 810, + 918, 969, 986, 158, 811, 813, 815, 816, 1001, 1005, + 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, + 1031, 1032, 1042, 1107, 1041, 1045, 1044, 1047, 1048, 1050, + 1051, 1054, 1053, 1062, 1123, 1061, 264, 1064, 1065, 367, + 1066, 1067, 388, 368, 1068, 1149, 389, 314, 1069, 1180, + 1205, 1070, 1071, 341, 1210, 315, 407, 1211, 1074, 312, + 1075, 1076, 381, 1082, 1195, 403, 1084, 1089, 1193, 1215, + 939, 310, 348, 1213, 1090, 390, 343, 268, 1091, 954, + 1192, 954, 391, 1183, 1093, 1212, 1153, 1101, 342, 1102, + 269, 1260, 1103, 945, 1184, 1261, 316, 1104, 993, 1154, + 1111, 1112, 958, 321, 958, 1196, 313, 158, 1114, 382, + 1216, 977, 404, 349, 1262, 1194, 270, 1185, 317, 265, + 1214, 1115, 1116, 344, 1117, 1155, 331, 1197, 1150, 1119, + 1120, 1121, 1217, 1206, 266, 350, 267, 1122, 326, 1133, + 946, 322, 1125, 1151, 271, 1152, 294, 272, 1207, 959, + 1208, 959, 323, 1156, 273, 1179, 1157, 274, 978, 275, + 1209, 1263, 276, 1158, 1124, 277, 1159, 278, 1160, 279, + 1126, 1161, 280, 332, 1162, 324, 1163, 281, 1164, 282, + 283, 1165, 284, 1186, 285, 286, 1166, 287, 1167, 1168, + 288, 1169, 289, 1170, 1171, 290, 1172, 291, 1127, 1173, + 292, 1174, 293, 306, 1175, 307, 1176, 308, 1128, 1177, + 1136, 1178, 1187, 1129, 1188, 1137, 1189, 1130, 1131, 1132, + 1138, 1135, 1134, 1139, 1242, 1238, 1243, 1231, 1232, 1233, + 1234, 1235, 1244, 1236, 1239, 1240, 1245, 1246, 1248, 1253, + 1255, 325, 1276, 1275, 1279, 1384, 1296, 1302, 1303, 1297, + 1304, 1305, 1363, 1306, 1314, 1315, 1318, 1247, 1320, 1328, + 1329, 1350, 1352, 1364, 1254, 1252, 1346, 1270, 1365, 1367, + 1368, 1271, 1272, 1280, 1273, 1281, 1282, 1369, 1370, 1283, + 1284, 1285, 1290, 1291, 1381, 1292, 1388, 1395, 1293, 1399, + 1312, 1149, 1415, 1313, 1317, 1180, 1324, 1416, 1205, 1354, + 1330, 1331, 1210, 1351, 1419, 1211, 1355, 1337, 1366, 1386, + 1195, 1387, 1417, 1420, 1193, 1260, 1421, 1215, 1437, 1261, + 1438, 1213, 1439, 1440, 1441, 1447, 1192, 1448, 1449, 1183, + 1338, 1450, 1153, 1212, 1452, 1453, 668, 823, 1262, 676, + 1184, 814, 825, 1118, 1142, 1154, 1140, 1200, 1008, 1241, + 1144, 1196, 1230, 1337, 1229, 1373, 718, 1143, 1216, 1374, + 1237, 1194, 689, 1185, 1327, 1199, 1146, 1145, 1214, 709, + 1148, 1155, 1147, 1197, 1150, 715, 1338, 1339, 1375, 1278, + 1217, 1206, 692, 1373, 1228, 1263, 1277, 1374, 1227, 1151, + 701, 1152, 1226, 1332, 1251, 1250, 1207, 1400, 1208, 1156, + 1436, 1179, 1157, 1249, 1380, 1371, 1375, 1427, 1209, 1158, + 1451, 985, 1159, 824, 1160, 1256, 727, 1161, 1353, 730, + 1162, 1442, 1163, 1339, 1164, 1376, 1269, 1165, 1413, 1186, + 1430, 1274, 1166, 0, 1167, 1168, 0, 1169, 1427, 1170, + 1171, 0, 1172, 0, 0, 1173, 0, 1174, 0, 0, + 1175, 0, 1176, 1376, 0, 1177, 0, 1178, 1187, 0, + 1188, 1430, 1189, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 148, - 149, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 155 + 0, 0, 0, 0, 0, 0, 0, 0, 1431 }; const short Dhcp4Parser::yycheck_[] = { 67, 68, 69, 70, 71, 64, 73, 74, 75, 76, - 73, 74, 72, 69, 755, 755, 725, 1037, 755, 1037, - 1037, 69, 18, 71, 68, 69, 70, 71, 1396, 73, - 74, 630, 76, 669, 670, 671, 0, 69, 70, 71, - 74, 70, 678, 69, 5, 94, 7, 74, 9, 1396, - 143, 144, 70, 3, 7, 3, 69, 227, 8, 1427, - 8, 92, 69, 699, 71, 114, 115, 191, 192, 193, - 194, 68, 69, 70, 71, 70, 73, 74, 10, 76, - 1427, 3, 69, 3, 69, 69, 71, 15, 16, 3, - 7, 19, 6, 3, 22, 23, 24, 25, 8, 3, - 69, 6, 69, 702, 8, 7, 230, 7, 114, 115, - 69, 7, 69, 69, 3, 210, 211, 212, 213, 8, - 69, 4, 3, 69, 3, 69, 175, 8, 69, 8, - 7, 69, 227, 69, 227, 69, 7, 3, 69, 3, + 73, 74, 72, 69, 770, 770, 740, 1052, 770, 1052, + 1052, 69, 1414, 71, 68, 69, 70, 71, 1414, 73, + 74, 645, 76, 684, 685, 686, 18, 69, 70, 71, + 74, 70, 693, 69, 5, 97, 7, 74, 9, 3, + 146, 147, 70, 1445, 8, 3, 69, 0, 3, 1445, + 8, 6, 69, 714, 71, 117, 118, 194, 195, 196, + 197, 68, 69, 70, 71, 70, 73, 74, 97, 76, + 12, 13, 69, 230, 69, 69, 71, 15, 16, 3, + 7, 19, 6, 95, 22, 23, 24, 25, 117, 118, + 69, 3, 69, 717, 6, 10, 233, 60, 61, 62, + 69, 6, 69, 69, 3, 213, 214, 215, 216, 8, + 69, 3, 3, 69, 3, 69, 8, 8, 69, 8, + 7, 69, 230, 69, 230, 69, 7, 3, 69, 3, 7, 70, 8, 69, 8, 69, 69, 7, 69, 7, - 69, 69, 40, 69, 40, 3, 69, 3, 69, 3, - 8, 69, 8, 69, 8, 3, 69, 7, 69, 94, - 8, 177, 178, 179, 3, 7, 3, 11, 227, 8, - 14, 8, 41, 42, 8, 3, 114, 115, 6, 114, - 115, 3, 26, 189, 6, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 94, 3, 96, 97, - 4, 3, 8, 101, 102, 103, 8, 3, 8, 202, - 6, 227, 205, 206, 207, 208, 114, 115, 114, 115, + 69, 69, 204, 69, 206, 207, 69, 3, 69, 178, + 7, 69, 8, 69, 117, 118, 69, 3, 69, 69, + 3, 69, 8, 69, 3, 8, 7, 11, 230, 8, + 14, 205, 7, 3, 208, 209, 210, 211, 8, 117, + 118, 3, 26, 3, 6, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 7, 3, 7, 162, + 192, 230, 8, 166, 167, 168, 169, 3, 7, 40, + 3, 3, 8, 176, 177, 8, 8, 41, 42, 4, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, - 84, 85, 86, 87, 88, 114, 115, 4, 92, 93, - 1280, 4, 1280, 1280, 12, 13, 227, 228, 229, 230, - 104, 105, 106, 55, 56, 57, 201, 111, 203, 204, - 114, 115, 168, 169, 170, 119, 120, 121, 122, 123, - 107, 108, 109, 110, 32, 33, 34, 35, 132, 227, - 143, 144, 227, 4, 134, 135, 136, 137, 142, 139, - 3, 145, 171, 172, 4, 8, 1025, 4, 152, 153, - 32, 33, 34, 157, 158, 4, 64, 65, 66, 4, - 1071, 1071, 1073, 1073, 1071, 3, 1073, 17, 18, 227, - 8, 227, 176, 114, 115, 4, 180, 146, 147, 148, - 149, 150, 151, 3, 92, 93, 94, 4, 8, 20, - 21, 195, 196, 197, 198, 199, 200, 4, 227, 3, - 27, 28, 431, 432, 8, 209, 114, 115, 93, 4, - 4, 93, 3, 154, 155, 156, 4, 8, 126, 127, - 128, 129, 3, 227, 4, 4, 3, 8, 113, 114, - 115, 8, 114, 115, 160, 161, 162, 3, 123, 124, - 125, 123, 8, 3, 3, 130, 131, 4, 8, 8, - 4, 133, 134, 135, 136, 137, 138, 139, 4, 4, - 4, 94, 95, 96, 97, 98, 99, 100, 3, 3, - 507, 3, 3, 8, 8, 4, 8, 8, 4, 516, - 4, 114, 115, 4, 4, 4, 227, 4, 4, 4, - 123, 4, 4, 530, 4, 4, 4, 534, 4, 4, - 4, 4, 516, 4, 530, 3, 8, 4, 545, 4, - 3, 3, 530, 4, 8, 4, 530, 4, 555, 227, - 534, 4, 555, 8, 4, 562, 4, 545, 530, 562, - 4, 545, 534, 4, 530, 534, 227, 4, 575, 4, - 4, 555, 227, 545, 4, 227, 534, 530, 562, 516, - 230, 230, 230, 530, 4, 4, 4, 230, 562, 228, - 4, 575, 4, 530, 4, 562, 228, 534, 545, 534, - 228, 230, 228, 530, 228, 530, 530, 228, 545, 4, - 4, 229, 229, 229, 228, 228, 228, 228, 555, 4, - 545, 530, 4, 530, 227, 562, 230, 4, 230, 4, - 230, 530, 230, 530, 530, 230, 229, 4, 575, 230, - 228, 530, 4, 4, 530, 4, 530, 4, 4, 530, - 230, 230, 530, 4, 530, 230, 530, 4, 4, 530, - 4, 4, 228, 4, 530, 534, 530, 530, 4, 530, - 4, 530, 530, 4, 530, 4, 4, 530, 4, 530, - 4, 4, 530, 4, 530, 1261, 230, 530, 230, 530, - 114, 115, 230, 4, 4, 60, 61, 62, 230, 230, - 228, 4, 228, 4, 4, 4, 4, 4, 228, 4, - 717, 4, 719, 4, 4, 4, 4, 716, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 228, 4, 719, 58, 59, 60, 61, - 62, 63, 4, 4, 4, 4, 4, 754, 755, 114, - 115, 758, 4, 4, 4, 762, 4, 181, 182, 183, - 184, 185, 186, 187, 188, 4, 4, 4, 228, 4, - 754, 755, 94, 757, 758, 4, 230, 4, 230, 230, - 4, 230, 719, 230, 4, 228, 4, 4, 30, 31, - 32, 33, 34, 35, 159, 228, 228, 4, 163, 164, - 165, 166, 4, 227, 4, 228, 7, 5, 173, 174, - 7, 7, 7, 7, 227, 7, 227, 754, 755, 227, - 757, 758, 64, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 5, 5, 227, 227, 78, 79, 80, 81, - 82, 83, 84, 85, 86, 87, 227, 89, 90, 91, - 5, 93, 5, 227, 227, 7, 5, 5, 5, 5, - 5, 227, 227, 105, 106, 7, 7, 7, 7, 7, - 112, 5, 114, 115, 116, 117, 118, 119, 120, 121, - 7, 123, 124, 125, 5, 227, 5, 227, 130, 227, - 132, 7, 227, 5, 227, 227, 7, 227, 140, 7, - 227, 7, 227, 7, 7, 227, 214, 215, 216, 217, - 218, 219, 220, 221, 222, 223, 224, 225, 226, 190, - 227, 227, 227, 227, 7, 227, 7, 7, 7, 7, - 7, 227, 141, 227, 4, 227, 4, 4, 4, 4, - 227, 227, 227, 227, 227, 227, 227, 4, 4, 4, - 4, 4, 4, 195, 196, 4, 6, 3, 6, 3, - 3, 6, 3, 227, 6, 3, 6, 6, 3, 6, - 3, 228, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 3, 227, 6, 4, 4, 4, - 4, 4, 3, 227, 6, 228, 4, 6, 8, 4, - 4, 4, 4, 4, 230, 230, 228, 228, 4, 228, - 4, 4, 228, 228, 228, 4, 228, 230, 4, 230, - 228, 1028, 228, 228, 1031, 228, 4, 1034, 1031, 228, - 1037, 1034, 1028, 4, 1037, 1042, 4, 228, 1045, 1042, - 1028, 1048, 1042, 228, 1028, 228, 228, 1031, 4, 1037, - 1034, 230, 4, 1037, 1042, 1062, 1028, 1045, 1042, 230, - 1034, 1045, 1028, 4, 1071, 1037, 1073, 1034, 1037, 228, - 1042, 1037, 4, 1045, 230, 1028, 1083, 6, 1062, 1037, - 1083, 1028, 3, 1090, 1037, 4, 230, 1071, 1095, 1073, - 1037, 1028, 227, 230, 1031, 1042, 1080, 1034, 1045, 1083, - 1037, 1028, 1037, 1028, 1028, 1042, 230, 227, 1045, 227, - 1037, 1095, 1037, 1037, 227, 8, 8, 1042, 1042, 1028, - 1045, 1028, 227, 1095, 4, 1062, 1095, 227, 1037, 1028, - 1037, 1028, 1028, 1042, 1071, 1042, 1073, 1095, 1037, 1028, - 1037, 1037, 1028, 1080, 1028, 1042, 1083, 1028, 1037, 4, - 1028, 1037, 1028, 1037, 1028, 227, 1037, 1028, 1095, 1037, - 1095, 1037, 1028, 1037, 1028, 1028, 1037, 1028, 1037, 1028, - 1028, 1037, 1028, 1037, 1037, 1028, 1037, 1028, 1037, 1037, - 1028, 1037, 1028, 8, 1037, 1028, 1037, 1028, 3, 1037, - 8, 1037, 5, 227, 1037, 7, 1037, 4, 4, 4, - 167, 4, 4, 7, 3, 6, 6, 5, 4, 227, - 4, 4, 4, 719, 702, 5, 7, 4, 7, 3, - 227, 227, 4, 4, 4, 4, 1095, 227, 227, 4, - 4, 4, 230, 230, 507, 230, 228, 227, 1237, 227, - 227, 516, 227, 227, 227, 999, 228, 228, 227, 806, - 227, 227, 227, 1040, 1027, 1050, 1022, 1062, 1048, 717, - 1057, 530, 1030, 1028, 1039, 1280, 1097, 534, 1095, 1031, - 1033, 1047, 1043, 1280, 1034, 1036, 555, 1280, 1287, 545, - 1287, 1075, 1073, 1346, 1287, 565, 562, 1287, 1372, 1296, - 1045, 1342, 1280, 1398, 1071, 1427, 1280, 1304, 1080, 1287, - 1304, 1304, 758, 1287, 1375, 579, 1405, 575, 1280, 718, - -1, 1280, 1296, -1, 1280, 1287, -1, -1, -1, -1, - 1304, -1, 1280, -1, -1, 1084, -1, 1280, -1, -1, - -1, -1, -1, 1280, 1090, 1342, -1, 1344, -1, -1, - 1287, 1344, -1, 1280, -1, 1280, -1, -1, -1, -1, - 1287, -1, -1, 1280, -1, 1280, 1280, -1, 1342, 1296, - 1344, -1, 1287, 1287, -1, 1372, -1, 1304, -1, 1372, - -1, 1280, -1, 1280, -1, -1, -1, -1, 1287, -1, - 1287, 1280, -1, 1280, 1280, -1, -1, -1, 1372, 1396, - 1287, 1280, -1, -1, 1280, -1, 1280, -1, -1, 1280, - -1, -1, 1280, -1, 1280, 1342, 1280, 1344, -1, 1280, - -1, 1280, 1396, -1, 1280, -1, 1280, 1280, -1, 1280, - 1427, 1280, 1280, -1, 1280, -1, -1, 1280, -1, 1280, - -1, -1, 1280, -1, 1280, 1372, -1, 1280, -1, 1280, - -1, -1, -1, 1427, 30, 31, 32, 33, 34, 35, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 1396, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 64, 65, - 66, 67, 68, 69, 70, 71, 72, 73, -1, -1, - 1427, -1, 78, 79, 80, 81, 82, 83, 84, 85, - 86, 87, 88, -1, -1, -1, -1, 93, 94, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 105, - 106, -1, -1, -1, -1, -1, -1, -1, 114, 115, - -1, 117, -1, 119, 120, 121, -1, 123, 124, 125, - -1, -1, -1, -1, 130, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 140, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 195, - 196, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 84, 85, 86, 87, 88, 89, 90, 91, 3, 3, + 8, 95, 96, 1298, 8, 1298, 1298, 17, 18, 230, + 231, 232, 233, 107, 108, 109, 3, 230, 40, 8, + 114, 8, 3, 117, 118, 146, 147, 8, 122, 123, + 124, 125, 126, 3, 3, 3, 117, 118, 8, 8, + 8, 135, 230, 117, 118, 20, 21, 32, 33, 34, + 35, 145, 4, 4, 148, 3, 1040, 117, 118, 3, + 8, 155, 156, 3, 8, 4, 160, 161, 8, 4, + 1086, 1086, 1088, 1088, 1086, 97, 1088, 99, 100, 64, + 65, 66, 104, 105, 106, 179, 4, 117, 118, 183, + 171, 172, 173, 27, 28, 117, 118, 157, 158, 159, + 174, 175, 230, 4, 198, 199, 200, 201, 202, 203, + 95, 96, 97, 4, 137, 138, 139, 140, 212, 142, + 4, 440, 441, 4, 30, 31, 32, 33, 34, 35, + 3, 3, 117, 118, 4, 8, 230, 149, 150, 151, + 152, 153, 154, 3, 129, 130, 131, 132, 8, 230, + 180, 181, 182, 55, 56, 57, 230, 4, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 4, 4, + 230, 4, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 4, 4, 3, 3, + 96, 97, 519, 8, 8, 110, 111, 112, 113, 3, + 230, 528, 108, 109, 8, 163, 164, 165, 230, 4, + 4, 117, 118, 4, 120, 542, 122, 123, 124, 546, + 126, 127, 128, 4, 528, 4, 542, 133, 4, 4, + 557, 4, 4, 4, 542, 4, 4, 143, 542, 4, + 567, 4, 546, 4, 567, 230, 4, 574, 4, 557, + 542, 574, 4, 557, 546, 4, 542, 546, 4, 4, + 587, 4, 4, 567, 4, 557, 4, 4, 546, 542, + 574, 528, 4, 8, 4, 542, 4, 8, 3, 8, + 574, 4, 4, 587, 4, 542, 3, 574, 4, 546, + 557, 546, 198, 199, 4, 542, 4, 542, 542, 4, + 557, 4, 233, 4, 4, 4, 4, 233, 233, 4, + 567, 4, 557, 542, 4, 542, 233, 574, 231, 4, + 4, 4, 231, 542, 230, 542, 542, 231, 231, 4, + 587, 231, 231, 542, 231, 233, 542, 232, 542, 232, + 232, 542, 231, 231, 542, 231, 542, 4, 542, 4, + 233, 542, 4, 32, 33, 34, 542, 546, 542, 542, + 4, 542, 233, 542, 542, 233, 542, 233, 1279, 542, + 233, 542, 96, 232, 542, 231, 542, 231, 231, 542, + 4, 542, 542, 233, 542, 4, 542, 231, 4, 4, + 4, 4, 116, 117, 118, 97, 98, 99, 100, 101, + 102, 103, 126, 127, 128, 732, 4, 734, 233, 133, + 134, 233, 731, 233, 4, 117, 118, 96, 4, 4, + 4, 4, 231, 4, 126, 4, 4, 4, 4, 4, + 734, 117, 118, 4, 233, 233, 233, 4, 117, 118, + 4, 4, 769, 770, 4, 4, 773, 126, 233, 233, + 777, 231, 4, 231, 4, 4, 4, 136, 137, 138, + 139, 140, 141, 142, 4, 769, 770, 4, 772, 773, + 4, 231, 4, 4, 4, 4, 4, 734, 231, 4, + 4, 4, 4, 30, 31, 32, 33, 34, 35, 4, + 4, 4, 4, 4, 4, 231, 4, 4, 184, 185, + 186, 187, 188, 189, 190, 191, 230, 4, 4, 4, + 4, 4, 769, 770, 233, 772, 773, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 233, 230, 233, + 4, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 230, 92, 93, 94, 4, 96, + 4, 230, 233, 233, 231, 231, 4, 231, 4, 231, + 4, 108, 109, 230, 230, 7, 7, 7, 115, 7, + 117, 118, 119, 120, 121, 122, 123, 124, 7, 126, + 127, 128, 230, 7, 5, 230, 133, 230, 135, 230, + 5, 5, 5, 230, 5, 7, 143, 40, 41, 42, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 230, 5, 5, 58, 59, 60, 61, 62, + 63, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 5, 5, 230, 230, 7, 7, + 7, 5, 7, 5, 7, 5, 7, 5, 230, 5, + 230, 198, 199, 7, 97, 193, 230, 230, 230, 7, + 230, 230, 230, 7, 230, 230, 7, 7, 230, 230, + 7, 7, 230, 230, 230, 230, 230, 230, 7, 230, + 7, 7, 7, 230, 230, 230, 230, 230, 7, 144, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 3, 230, 6, 3, 6, 6, 3, 6, + 3, 3, 6, 3, 231, 6, 1043, 6, 3, 1046, + 4, 4, 1049, 1046, 4, 1052, 1049, 1043, 4, 1052, + 1057, 4, 4, 1060, 1057, 1043, 1063, 1057, 4, 1043, + 4, 4, 1046, 4, 1052, 1049, 4, 6, 1052, 1057, + 1077, 1043, 1060, 1057, 3, 1049, 1060, 1043, 4, 1086, + 1052, 1088, 1049, 1052, 4, 1057, 1052, 4, 1060, 4, + 1043, 1098, 4, 1077, 1052, 1098, 1043, 4, 1105, 1052, + 6, 3, 1086, 1110, 1088, 1052, 1043, 230, 8, 1046, + 1057, 1095, 1049, 1060, 1098, 1052, 1043, 1052, 1043, 1043, + 1057, 6, 4, 1060, 4, 1052, 1110, 1052, 1052, 4, + 4, 4, 1057, 1057, 1043, 1060, 1043, 4, 1110, 4, + 1077, 1110, 231, 1052, 1043, 1052, 1043, 1043, 1057, 1086, + 1057, 1088, 1110, 1052, 1043, 1052, 1052, 1043, 1095, 1043, + 1057, 1098, 1043, 1052, 233, 1043, 1052, 1043, 1052, 1043, + 233, 1052, 1043, 1110, 1052, 1110, 1052, 1043, 1052, 1043, + 1043, 1052, 1043, 1052, 1043, 1043, 1052, 1043, 1052, 1052, + 1043, 1052, 1043, 1052, 1052, 1043, 1052, 1043, 231, 1052, + 1043, 1052, 1043, 1043, 1052, 1043, 1052, 1043, 231, 1052, + 4, 1052, 1052, 231, 1052, 4, 1052, 231, 231, 231, + 4, 231, 233, 4, 4, 233, 4, 231, 231, 231, + 231, 231, 4, 231, 231, 231, 231, 4, 4, 4, + 4, 1110, 3, 6, 4, 170, 8, 4, 4, 8, + 8, 3, 6, 8, 7, 5, 1255, 233, 4, 4, + 4, 4, 4, 3, 231, 233, 7, 233, 5, 4, + 4, 233, 233, 230, 233, 230, 230, 4, 4, 230, + 230, 230, 230, 230, 7, 230, 5, 7, 230, 4, + 230, 1298, 6, 230, 230, 1298, 230, 3, 1305, 230, + 233, 233, 1305, 231, 4, 1305, 230, 1314, 230, 230, + 1298, 230, 230, 4, 1298, 1322, 4, 1305, 4, 1322, + 233, 1305, 231, 231, 4, 230, 1298, 230, 4, 1298, + 1314, 4, 1298, 1305, 230, 230, 519, 732, 1322, 528, + 1298, 717, 734, 1014, 1042, 1298, 1037, 1055, 821, 1077, + 1045, 1298, 1065, 1360, 1063, 1362, 577, 1043, 1305, 1362, + 1072, 1298, 542, 1298, 1298, 1054, 1048, 1046, 1305, 567, + 1051, 1298, 1049, 1298, 1298, 574, 1360, 1314, 1362, 1112, + 1305, 1305, 546, 1390, 1062, 1322, 1110, 1390, 1060, 1298, + 557, 1298, 1058, 1305, 1090, 1088, 1305, 1390, 1305, 1298, + 1416, 1298, 1298, 1086, 1364, 1360, 1390, 1414, 1305, 1298, + 1445, 773, 1298, 733, 1298, 1095, 587, 1298, 1322, 591, + 1298, 1423, 1298, 1360, 1298, 1362, 1099, 1298, 1393, 1298, + 1414, 1105, 1298, -1, 1298, 1298, -1, 1298, 1445, 1298, + 1298, -1, 1298, -1, -1, 1298, -1, 1298, -1, -1, + 1298, -1, 1298, 1390, -1, 1298, -1, 1298, 1298, -1, + 1298, 1445, 1298, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 1414, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 227 + -1, -1, -1, -1, -1, -1, -1, -1, 1445 }; const short Dhcp4Parser::yystos_[] = { - 0, 214, 215, 216, 217, 218, 219, 220, 221, 222, - 223, 224, 225, 226, 232, 233, 234, 235, 236, 237, - 238, 239, 240, 241, 242, 243, 244, 245, 0, 5, - 7, 9, 227, 228, 229, 230, 246, 247, 248, 253, - 7, 262, 7, 267, 7, 322, 7, 435, 7, 522, - 7, 539, 7, 471, 7, 477, 7, 501, 7, 411, - 7, 651, 7, 670, 254, 249, 263, 268, 323, 436, - 523, 540, 472, 478, 502, 412, 652, 671, 246, 255, - 256, 227, 251, 252, 10, 264, 266, 11, 14, 26, + 0, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 0, 5, + 7, 9, 230, 231, 232, 233, 249, 250, 251, 256, + 7, 265, 7, 270, 7, 328, 7, 441, 7, 528, + 7, 545, 7, 477, 7, 483, 7, 507, 7, 417, + 7, 657, 7, 676, 257, 252, 266, 271, 329, 442, + 529, 546, 478, 484, 508, 418, 658, 677, 249, 258, + 259, 230, 254, 255, 10, 267, 269, 11, 14, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, 84, 85, 86, 87, 88, 92, 93, 104, 105, - 106, 111, 114, 115, 119, 120, 121, 122, 123, 132, - 142, 145, 152, 153, 157, 158, 176, 180, 195, 196, - 197, 198, 199, 200, 209, 227, 261, 269, 270, 271, + 83, 84, 85, 86, 87, 88, 89, 90, 91, 95, + 96, 107, 108, 109, 114, 117, 118, 122, 123, 124, + 125, 126, 135, 145, 148, 155, 156, 160, 161, 179, + 183, 198, 199, 200, 201, 202, 203, 212, 230, 264, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, - 282, 284, 285, 287, 288, 289, 290, 291, 292, 293, - 296, 298, 300, 301, 302, 305, 306, 308, 310, 311, - 312, 313, 314, 315, 316, 317, 318, 336, 338, 346, - 348, 389, 398, 405, 419, 429, 457, 458, 459, 461, - 469, 495, 529, 531, 533, 544, 546, 548, 571, 586, - 587, 589, 639, 649, 668, 677, 701, 15, 16, 19, - 22, 23, 24, 25, 261, 320, 321, 324, 326, 329, - 332, 333, 334, 335, 529, 531, 89, 90, 91, 112, - 116, 117, 118, 123, 124, 125, 130, 140, 261, 271, - 272, 273, 274, 275, 276, 277, 278, 279, 280, 285, - 288, 289, 290, 291, 292, 293, 296, 298, 300, 301, - 302, 305, 306, 308, 310, 316, 437, 438, 439, 441, - 443, 445, 447, 449, 451, 453, 455, 457, 458, 459, - 460, 495, 516, 529, 531, 533, 544, 546, 548, 566, - 113, 131, 261, 449, 451, 453, 455, 495, 524, 525, - 526, 528, 529, 531, 123, 133, 134, 135, 136, 137, - 138, 139, 261, 495, 529, 531, 541, 542, 543, 544, - 546, 548, 550, 552, 554, 556, 558, 560, 562, 564, - 469, 40, 94, 96, 97, 101, 102, 103, 261, 365, - 479, 480, 481, 482, 483, 484, 485, 487, 489, 491, - 492, 494, 529, 531, 95, 98, 99, 100, 123, 261, - 365, 483, 489, 503, 504, 505, 506, 507, 509, 510, - 511, 512, 513, 514, 529, 531, 143, 144, 261, 413, - 414, 415, 417, 181, 182, 183, 184, 185, 186, 187, - 188, 261, 529, 531, 653, 654, 655, 656, 658, 659, - 661, 662, 663, 666, 12, 13, 672, 673, 674, 676, - 6, 3, 4, 8, 3, 265, 3, 8, 669, 319, - 339, 4, 4, 4, 545, 547, 549, 4, 4, 337, - 347, 349, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 283, 4, 4, 4, 4, 4, 294, - 297, 299, 4, 4, 4, 4, 430, 470, 496, 4, - 286, 303, 462, 530, 532, 4, 4, 4, 390, 572, - 534, 406, 420, 4, 399, 588, 590, 640, 650, 307, - 309, 4, 4, 4, 678, 702, 4, 3, 8, 325, - 327, 330, 4, 4, 4, 4, 3, 8, 442, 444, - 446, 517, 440, 448, 4, 452, 454, 456, 450, 567, - 3, 8, 527, 4, 3, 8, 565, 551, 553, 555, - 559, 557, 563, 561, 8, 3, 8, 486, 366, 4, - 490, 488, 493, 4, 8, 3, 508, 4, 4, 4, - 515, 8, 3, 416, 418, 3, 8, 4, 657, 4, - 660, 4, 4, 664, 667, 3, 8, 675, 4, 3, - 8, 246, 246, 227, 4, 4, 4, 4, 230, 230, - 230, 4, 4, 4, 228, 230, 4, 4, 4, 228, - 228, 228, 228, 228, 230, 229, 229, 229, 228, 228, - 4, 228, 228, 230, 230, 230, 4, 4, 4, 230, - 230, 229, 230, 4, 4, 4, 228, 4, 4, 4, - 4, 4, 230, 230, 230, 4, 4, 4, 4, 4, - 228, 4, 4, 4, 4, 4, 4, 4, 230, 230, - 230, 4, 4, 270, 4, 4, 4, 230, 230, 228, - 228, 321, 4, 4, 4, 4, 4, 4, 228, 4, - 4, 4, 4, 4, 438, 4, 228, 525, 4, 4, - 4, 4, 4, 4, 4, 4, 543, 4, 4, 228, - 4, 4, 4, 230, 481, 4, 230, 230, 230, 4, - 505, 4, 4, 414, 230, 4, 228, 4, 228, 228, - 4, 4, 654, 4, 228, 673, 4, 7, 7, 7, - 7, 227, 227, 227, 7, 7, 5, 227, 191, 192, - 193, 194, 230, 295, 227, 227, 5, 5, 5, 227, - 107, 108, 109, 110, 304, 5, 248, 250, 227, 5, - 5, 5, 5, 7, 7, 7, 5, 7, 7, 227, - 227, 5, 7, 5, 257, 17, 18, 328, 20, 21, - 331, 227, 227, 227, 5, 227, 227, 257, 257, 257, - 227, 7, 227, 257, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 257, 227, 250, - 227, 227, 18, 189, 665, 190, 5, 246, 269, 672, - 320, 27, 28, 340, 341, 342, 344, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 58, 59, 60, 61, 62, 63, 261, 354, - 355, 356, 358, 360, 362, 364, 365, 367, 368, 369, - 370, 371, 372, 373, 374, 375, 376, 379, 380, 381, - 383, 385, 387, 354, 7, 350, 351, 352, 7, 431, - 432, 433, 7, 473, 474, 475, 7, 497, 498, 499, - 7, 463, 464, 465, 134, 135, 136, 137, 139, 391, - 392, 393, 394, 395, 396, 397, 7, 573, 574, 7, - 535, 536, 537, 7, 407, 408, 409, 146, 147, 148, - 149, 150, 151, 421, 422, 423, 424, 425, 426, 427, - 428, 154, 155, 156, 261, 400, 401, 402, 403, 404, - 529, 531, 159, 163, 164, 165, 166, 173, 174, 261, - 381, 383, 385, 529, 531, 595, 596, 597, 600, 602, - 604, 605, 606, 616, 7, 591, 592, 593, 177, 178, - 179, 227, 529, 531, 641, 642, 643, 644, 646, 647, - 653, 7, 679, 680, 210, 211, 212, 213, 261, 703, - 704, 705, 706, 707, 708, 258, 7, 518, 519, 520, - 141, 568, 569, 350, 8, 8, 8, 343, 345, 3, - 8, 357, 359, 361, 363, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 377, 4, 4, 382, 384, - 386, 388, 3, 8, 8, 353, 6, 3, 434, 6, - 3, 476, 6, 3, 500, 6, 3, 466, 6, 3, - 3, 6, 575, 3, 6, 538, 6, 3, 410, 6, - 3, 4, 4, 4, 4, 4, 4, 3, 8, 4, - 4, 4, 3, 8, 598, 601, 603, 4, 617, 4, - 607, 3, 8, 594, 6, 3, 4, 645, 4, 648, - 3, 8, 8, 681, 3, 6, 4, 4, 4, 4, - 3, 8, 227, 259, 260, 521, 6, 3, 570, 8, - 6, 4, 4, 341, 4, 4, 4, 4, 228, 230, - 228, 230, 228, 228, 228, 228, 228, 228, 4, 230, - 228, 4, 4, 4, 4, 355, 354, 352, 437, 433, - 479, 475, 503, 499, 261, 271, 272, 273, 274, 275, - 276, 277, 278, 279, 280, 285, 288, 289, 290, 291, - 292, 293, 296, 298, 300, 301, 302, 305, 306, 308, - 310, 316, 365, 429, 447, 449, 451, 453, 455, 457, - 458, 459, 467, 468, 495, 529, 531, 544, 546, 548, - 566, 465, 392, 126, 127, 128, 129, 261, 271, 272, - 273, 316, 365, 469, 495, 529, 531, 544, 546, 548, - 576, 577, 578, 579, 580, 582, 584, 585, 574, 541, - 537, 413, 409, 228, 228, 228, 228, 228, 228, 422, - 230, 228, 228, 401, 4, 4, 4, 228, 4, 230, - 4, 596, 595, 593, 230, 4, 228, 4, 642, 201, - 203, 204, 261, 365, 529, 531, 682, 683, 684, 685, - 687, 680, 230, 230, 230, 230, 704, 6, 3, 524, - 520, 4, 227, 227, 227, 227, 227, 227, 55, 56, - 57, 378, 227, 227, 227, 227, 8, 8, 8, 8, - 3, 8, 581, 583, 4, 4, 8, 3, 8, 8, - 160, 161, 162, 599, 227, 227, 7, 5, 8, 227, - 246, 688, 4, 686, 3, 8, 227, 8, 257, 468, - 4, 4, 230, 230, 578, 40, 168, 169, 170, 261, - 529, 531, 618, 619, 620, 623, 625, 627, 7, 608, - 609, 610, 4, 228, 4, 683, 227, 227, 621, 624, - 626, 628, 3, 8, 611, 6, 3, 5, 227, 4, - 4, 4, 4, 619, 175, 261, 365, 529, 531, 612, - 613, 614, 610, 7, 689, 690, 167, 622, 227, 227, - 5, 615, 3, 8, 691, 3, 6, 7, 629, 630, - 631, 4, 613, 202, 205, 206, 207, 208, 692, 693, - 694, 696, 697, 698, 699, 690, 632, 6, 3, 227, - 695, 4, 4, 4, 700, 3, 8, 171, 172, 261, - 358, 360, 529, 531, 633, 634, 635, 637, 631, 4, - 230, 228, 228, 4, 693, 636, 638, 3, 8, 227, - 227, 4, 4, 634, 227, 227 + 282, 283, 284, 285, 287, 288, 290, 291, 292, 293, + 294, 295, 296, 299, 301, 303, 304, 305, 308, 309, + 310, 311, 312, 314, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 342, 344, 352, 354, 395, 404, 411, + 425, 435, 463, 464, 465, 467, 475, 501, 535, 537, + 539, 550, 552, 554, 577, 592, 593, 595, 645, 655, + 674, 683, 707, 15, 16, 19, 22, 23, 24, 25, + 264, 326, 327, 330, 332, 335, 338, 339, 340, 341, + 535, 537, 92, 93, 94, 115, 119, 120, 121, 126, + 127, 128, 133, 143, 264, 274, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 288, 291, 292, 293, 294, + 295, 296, 299, 301, 303, 304, 305, 308, 309, 310, + 311, 312, 314, 316, 322, 443, 444, 445, 447, 449, + 451, 453, 455, 457, 459, 461, 463, 464, 465, 466, + 501, 522, 535, 537, 539, 550, 552, 554, 572, 116, + 134, 264, 455, 457, 459, 461, 501, 530, 531, 532, + 534, 535, 537, 126, 136, 137, 138, 139, 140, 141, + 142, 264, 501, 535, 537, 547, 548, 549, 550, 552, + 554, 556, 558, 560, 562, 564, 566, 568, 570, 475, + 40, 97, 99, 100, 104, 105, 106, 264, 371, 485, + 486, 487, 488, 489, 490, 491, 493, 495, 497, 498, + 500, 535, 537, 98, 101, 102, 103, 126, 264, 371, + 489, 495, 509, 510, 511, 512, 513, 515, 516, 517, + 518, 519, 520, 535, 537, 146, 147, 264, 419, 420, + 421, 423, 184, 185, 186, 187, 188, 189, 190, 191, + 264, 535, 537, 659, 660, 661, 662, 664, 665, 667, + 668, 669, 672, 12, 13, 678, 679, 680, 682, 6, + 3, 4, 8, 3, 268, 3, 8, 675, 325, 345, + 4, 4, 4, 551, 553, 555, 4, 4, 343, 353, + 355, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 286, 4, 4, 4, 4, 4, 297, 300, + 302, 4, 4, 4, 4, 4, 4, 4, 436, 476, + 502, 4, 289, 306, 468, 536, 538, 4, 4, 4, + 396, 578, 540, 412, 426, 4, 405, 594, 596, 646, + 656, 313, 315, 4, 4, 4, 684, 708, 4, 3, + 8, 331, 333, 336, 4, 4, 4, 4, 3, 8, + 448, 450, 452, 523, 446, 454, 4, 458, 460, 462, + 456, 573, 3, 8, 533, 4, 3, 8, 571, 557, + 559, 561, 565, 563, 569, 567, 8, 3, 8, 492, + 372, 4, 496, 494, 499, 4, 8, 3, 514, 4, + 4, 4, 521, 8, 3, 422, 424, 3, 8, 4, + 663, 4, 666, 4, 4, 670, 673, 3, 8, 681, + 4, 3, 8, 249, 249, 230, 4, 4, 4, 4, + 233, 233, 233, 4, 4, 4, 231, 233, 4, 4, + 4, 231, 231, 231, 231, 231, 233, 232, 232, 232, + 231, 231, 4, 231, 231, 233, 233, 233, 4, 4, + 4, 233, 233, 232, 231, 231, 231, 233, 4, 4, + 4, 231, 4, 4, 4, 4, 4, 233, 233, 233, + 4, 4, 4, 4, 4, 231, 4, 4, 4, 4, + 4, 4, 4, 233, 233, 233, 4, 4, 273, 4, + 4, 4, 233, 233, 231, 231, 327, 4, 4, 4, + 4, 4, 4, 231, 4, 4, 4, 4, 4, 444, + 4, 231, 531, 4, 4, 4, 4, 4, 4, 4, + 4, 549, 4, 4, 231, 4, 4, 4, 233, 487, + 4, 233, 233, 233, 4, 511, 4, 4, 420, 233, + 4, 231, 4, 231, 231, 4, 4, 660, 4, 231, + 679, 4, 7, 7, 7, 7, 230, 230, 230, 7, + 7, 5, 230, 194, 195, 196, 197, 233, 298, 230, + 230, 5, 5, 5, 230, 110, 111, 112, 113, 307, + 5, 251, 253, 230, 5, 5, 5, 5, 7, 7, + 7, 5, 7, 7, 230, 230, 5, 7, 5, 260, + 17, 18, 334, 20, 21, 337, 230, 230, 230, 5, + 230, 230, 260, 260, 260, 230, 7, 230, 260, 230, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 260, 230, 253, 230, 230, 18, 192, 671, + 193, 5, 249, 272, 678, 326, 27, 28, 346, 347, + 348, 350, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 58, 59, 60, + 61, 62, 63, 264, 360, 361, 362, 364, 366, 368, + 370, 371, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 385, 386, 387, 389, 391, 393, 360, 7, + 356, 357, 358, 7, 437, 438, 439, 7, 479, 480, + 481, 7, 503, 504, 505, 7, 469, 470, 471, 137, + 138, 139, 140, 142, 397, 398, 399, 400, 401, 402, + 403, 7, 579, 580, 7, 541, 542, 543, 7, 413, + 414, 415, 149, 150, 151, 152, 153, 154, 427, 428, + 429, 430, 431, 432, 433, 434, 157, 158, 159, 264, + 406, 407, 408, 409, 410, 535, 537, 162, 166, 167, + 168, 169, 176, 177, 264, 387, 389, 391, 535, 537, + 601, 602, 603, 606, 608, 610, 611, 612, 622, 7, + 597, 598, 599, 180, 181, 182, 230, 535, 537, 647, + 648, 649, 650, 652, 653, 659, 7, 685, 686, 213, + 214, 215, 216, 264, 709, 710, 711, 712, 713, 714, + 261, 7, 524, 525, 526, 144, 574, 575, 356, 8, + 8, 8, 349, 351, 3, 8, 363, 365, 367, 369, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 383, 4, 4, 388, 390, 392, 394, 3, 8, 8, + 359, 6, 3, 440, 6, 3, 482, 6, 3, 506, + 6, 3, 472, 6, 3, 3, 6, 581, 3, 6, + 544, 6, 3, 416, 6, 3, 4, 4, 4, 4, + 4, 4, 3, 8, 4, 4, 4, 3, 8, 604, + 607, 609, 4, 623, 4, 613, 3, 8, 600, 6, + 3, 4, 651, 4, 654, 3, 8, 8, 687, 3, + 6, 4, 4, 4, 4, 3, 8, 230, 262, 263, + 527, 6, 3, 576, 8, 6, 4, 4, 347, 4, + 4, 4, 4, 231, 233, 231, 233, 231, 231, 231, + 231, 231, 231, 4, 233, 231, 4, 4, 4, 4, + 361, 360, 358, 443, 439, 485, 481, 509, 505, 264, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, + 288, 291, 292, 293, 294, 295, 296, 299, 301, 303, + 304, 305, 308, 309, 310, 311, 312, 314, 316, 322, + 371, 435, 453, 455, 457, 459, 461, 463, 464, 465, + 473, 474, 501, 535, 537, 550, 552, 554, 572, 471, + 398, 129, 130, 131, 132, 264, 274, 275, 276, 322, + 371, 475, 501, 535, 537, 550, 552, 554, 582, 583, + 584, 585, 586, 588, 590, 591, 580, 547, 543, 419, + 415, 231, 231, 231, 231, 231, 231, 428, 233, 231, + 231, 407, 4, 4, 4, 231, 4, 233, 4, 602, + 601, 599, 233, 4, 231, 4, 648, 204, 206, 207, + 264, 371, 535, 537, 688, 689, 690, 691, 693, 686, + 233, 233, 233, 233, 710, 6, 3, 530, 526, 4, + 230, 230, 230, 230, 230, 230, 55, 56, 57, 384, + 230, 230, 230, 230, 8, 8, 8, 8, 3, 8, + 587, 589, 4, 4, 8, 3, 8, 8, 163, 164, + 165, 605, 230, 230, 7, 5, 8, 230, 249, 694, + 4, 692, 3, 8, 230, 8, 260, 474, 4, 4, + 233, 233, 584, 40, 171, 172, 173, 264, 535, 537, + 624, 625, 626, 629, 631, 633, 7, 614, 615, 616, + 4, 231, 4, 689, 230, 230, 627, 630, 632, 634, + 3, 8, 617, 6, 3, 5, 230, 4, 4, 4, + 4, 625, 178, 264, 371, 535, 537, 618, 619, 620, + 616, 7, 695, 696, 170, 628, 230, 230, 5, 621, + 3, 8, 697, 3, 6, 7, 635, 636, 637, 4, + 619, 205, 208, 209, 210, 211, 698, 699, 700, 702, + 703, 704, 705, 696, 638, 6, 3, 230, 701, 4, + 4, 4, 706, 3, 8, 174, 175, 264, 364, 366, + 535, 537, 639, 640, 641, 643, 637, 4, 233, 231, + 231, 4, 699, 642, 644, 3, 8, 230, 230, 4, + 4, 640, 230, 230 }; const short Dhcp4Parser::yyr1_[] = { - 0, 231, 233, 232, 234, 232, 235, 232, 236, 232, - 237, 232, 238, 232, 239, 232, 240, 232, 241, 232, - 242, 232, 243, 232, 244, 232, 245, 232, 246, 246, - 246, 246, 246, 246, 246, 247, 249, 248, 250, 251, - 251, 252, 252, 252, 254, 253, 255, 255, 256, 256, - 256, 258, 257, 259, 259, 260, 260, 260, 261, 263, - 262, 265, 264, 264, 266, 268, 267, 269, 269, 269, - 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, - 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, - 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, - 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, - 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, - 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, - 270, 270, 270, 270, 270, 270, 270, 270, 270, 271, - 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, - 283, 282, 284, 286, 285, 287, 288, 289, 290, 291, - 292, 294, 293, 295, 295, 295, 295, 295, 297, 296, - 299, 298, 300, 301, 303, 302, 304, 304, 304, 304, - 305, 307, 306, 309, 308, 310, 311, 312, 313, 314, - 315, 316, 317, 319, 318, 320, 320, 320, 321, 321, - 321, 321, 321, 321, 321, 321, 321, 321, 323, 322, - 325, 324, 327, 326, 328, 328, 330, 329, 331, 331, - 332, 333, 334, 335, 337, 336, 339, 338, 340, 340, - 340, 341, 341, 343, 342, 345, 344, 347, 346, 349, - 348, 350, 350, 351, 351, 351, 353, 352, 354, 354, - 354, 355, 355, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 355, 355, 357, 356, 359, 358, 361, 360, - 363, 362, 364, 366, 365, 367, 368, 369, 370, 371, - 372, 373, 374, 375, 377, 376, 378, 378, 378, 379, - 380, 382, 381, 384, 383, 386, 385, 388, 387, 390, - 389, 391, 391, 391, 392, 392, 392, 392, 392, 393, - 394, 395, 396, 397, 399, 398, 400, 400, 400, 401, - 401, 401, 401, 401, 401, 402, 403, 404, 406, 405, - 407, 407, 408, 408, 408, 410, 409, 412, 411, 413, - 413, 413, 413, 414, 414, 416, 415, 418, 417, 420, - 419, 421, 421, 421, 422, 422, 422, 422, 422, 422, - 423, 424, 425, 426, 427, 428, 430, 429, 431, 431, - 432, 432, 432, 434, 433, 436, 435, 437, 437, 437, - 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, - 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, - 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, - 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, - 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, - 440, 439, 442, 441, 444, 443, 446, 445, 448, 447, - 450, 449, 452, 451, 454, 453, 456, 455, 457, 458, - 459, 460, 462, 461, 463, 463, 464, 464, 464, 466, - 465, 467, 467, 467, 468, 468, 468, 468, 468, 468, - 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, - 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, - 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, - 468, 468, 468, 468, 468, 468, 468, 468, 468, 470, - 469, 472, 471, 473, 473, 474, 474, 474, 476, 475, - 478, 477, 479, 479, 480, 480, 480, 481, 481, 481, - 481, 481, 481, 481, 481, 481, 481, 482, 483, 484, - 486, 485, 488, 487, 490, 489, 491, 493, 492, 494, - 496, 495, 497, 497, 498, 498, 498, 500, 499, 502, - 501, 503, 503, 504, 504, 504, 505, 505, 505, 505, - 505, 505, 505, 505, 505, 505, 505, 506, 508, 507, - 509, 510, 511, 512, 513, 515, 514, 517, 516, 518, - 518, 519, 519, 519, 521, 520, 523, 522, 524, 524, - 524, 525, 525, 525, 525, 525, 525, 525, 525, 525, - 525, 527, 526, 528, 530, 529, 532, 531, 534, 533, - 535, 535, 536, 536, 536, 538, 537, 540, 539, 541, - 541, 542, 542, 542, 543, 543, 543, 543, 543, 543, - 543, 543, 543, 543, 543, 543, 543, 543, 543, 545, - 544, 547, 546, 549, 548, 551, 550, 553, 552, 555, - 554, 557, 556, 559, 558, 561, 560, 563, 562, 565, - 564, 567, 566, 568, 570, 569, 572, 571, 573, 573, - 573, 575, 574, 576, 576, 577, 577, 577, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, - 578, 578, 578, 578, 578, 579, 581, 580, 583, 582, - 584, 585, 586, 588, 587, 590, 589, 591, 591, 592, - 592, 592, 594, 593, 595, 595, 595, 596, 596, 596, - 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, - 598, 597, 599, 599, 599, 601, 600, 603, 602, 604, - 605, 607, 606, 608, 608, 609, 609, 609, 611, 610, - 612, 612, 612, 613, 613, 613, 613, 613, 615, 614, + 0, 234, 236, 235, 237, 235, 238, 235, 239, 235, + 240, 235, 241, 235, 242, 235, 243, 235, 244, 235, + 245, 235, 246, 235, 247, 235, 248, 235, 249, 249, + 249, 249, 249, 249, 249, 250, 252, 251, 253, 254, + 254, 255, 255, 255, 257, 256, 258, 258, 259, 259, + 259, 261, 260, 262, 262, 263, 263, 263, 264, 266, + 265, 268, 267, 267, 269, 271, 270, 272, 272, 272, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 286, 285, 287, 289, 288, 290, 291, + 292, 293, 294, 295, 297, 296, 298, 298, 298, 298, + 298, 300, 299, 302, 301, 303, 304, 306, 305, 307, + 307, 307, 307, 308, 309, 310, 311, 313, 312, 315, + 314, 316, 317, 318, 319, 320, 321, 322, 323, 325, + 324, 326, 326, 326, 327, 327, 327, 327, 327, 327, + 327, 327, 327, 327, 329, 328, 331, 330, 333, 332, + 334, 334, 336, 335, 337, 337, 338, 339, 340, 341, + 343, 342, 345, 344, 346, 346, 346, 347, 347, 349, + 348, 351, 350, 353, 352, 355, 354, 356, 356, 357, + 357, 357, 359, 358, 360, 360, 360, 361, 361, 361, + 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, + 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, + 363, 362, 365, 364, 367, 366, 369, 368, 370, 372, + 371, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 383, 382, 384, 384, 384, 385, 386, 388, 387, 390, + 389, 392, 391, 394, 393, 396, 395, 397, 397, 397, + 398, 398, 398, 398, 398, 399, 400, 401, 402, 403, + 405, 404, 406, 406, 406, 407, 407, 407, 407, 407, + 407, 408, 409, 410, 412, 411, 413, 413, 414, 414, + 414, 416, 415, 418, 417, 419, 419, 419, 419, 420, + 420, 422, 421, 424, 423, 426, 425, 427, 427, 427, + 428, 428, 428, 428, 428, 428, 429, 430, 431, 432, + 433, 434, 436, 435, 437, 437, 438, 438, 438, 440, + 439, 442, 441, 443, 443, 443, 444, 444, 444, 444, + 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, + 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, + 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, + 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, + 444, 444, 444, 444, 444, 444, 444, 444, 444, 446, + 445, 448, 447, 450, 449, 452, 451, 454, 453, 456, + 455, 458, 457, 460, 459, 462, 461, 463, 464, 465, + 466, 468, 467, 469, 469, 470, 470, 470, 472, 471, + 473, 473, 473, 474, 474, 474, 474, 474, 474, 474, + 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, + 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, + 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, + 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, + 474, 476, 475, 478, 477, 479, 479, 480, 480, 480, + 482, 481, 484, 483, 485, 485, 486, 486, 486, 487, + 487, 487, 487, 487, 487, 487, 487, 487, 487, 488, + 489, 490, 492, 491, 494, 493, 496, 495, 497, 499, + 498, 500, 502, 501, 503, 503, 504, 504, 504, 506, + 505, 508, 507, 509, 509, 510, 510, 510, 511, 511, + 511, 511, 511, 511, 511, 511, 511, 511, 511, 512, + 514, 513, 515, 516, 517, 518, 519, 521, 520, 523, + 522, 524, 524, 525, 525, 525, 527, 526, 529, 528, + 530, 530, 530, 531, 531, 531, 531, 531, 531, 531, + 531, 531, 531, 533, 532, 534, 536, 535, 538, 537, + 540, 539, 541, 541, 542, 542, 542, 544, 543, 546, + 545, 547, 547, 548, 548, 548, 549, 549, 549, 549, + 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, + 549, 551, 550, 553, 552, 555, 554, 557, 556, 559, + 558, 561, 560, 563, 562, 565, 564, 567, 566, 569, + 568, 571, 570, 573, 572, 574, 576, 575, 578, 577, + 579, 579, 579, 581, 580, 582, 582, 583, 583, 583, + 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, + 584, 584, 584, 584, 584, 584, 584, 585, 587, 586, + 589, 588, 590, 591, 592, 594, 593, 596, 595, 597, + 597, 598, 598, 598, 600, 599, 601, 601, 601, 602, + 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, + 602, 602, 604, 603, 605, 605, 605, 607, 606, 609, + 608, 610, 611, 613, 612, 614, 614, 615, 615, 615, 617, 616, 618, 618, 618, 619, 619, 619, 619, 619, - 619, 619, 621, 620, 622, 624, 623, 626, 625, 628, - 627, 629, 629, 630, 630, 630, 632, 631, 633, 633, - 633, 634, 634, 634, 634, 634, 634, 634, 636, 635, - 638, 637, 640, 639, 641, 641, 641, 642, 642, 642, - 642, 642, 642, 643, 645, 644, 646, 648, 647, 650, - 649, 652, 651, 653, 653, 653, 654, 654, 654, 654, - 654, 654, 654, 654, 654, 654, 654, 655, 657, 656, - 658, 660, 659, 661, 662, 664, 663, 665, 665, 667, - 666, 669, 668, 671, 670, 672, 672, 672, 673, 673, - 675, 674, 676, 678, 677, 679, 679, 679, 681, 680, - 682, 682, 682, 683, 683, 683, 683, 683, 683, 683, - 684, 686, 685, 688, 687, 689, 689, 689, 691, 690, - 692, 692, 692, 693, 693, 693, 693, 693, 695, 694, - 696, 697, 698, 700, 699, 702, 701, 703, 703, 703, - 704, 704, 704, 704, 704, 705, 706, 707, 708 + 621, 620, 623, 622, 624, 624, 624, 625, 625, 625, + 625, 625, 625, 625, 627, 626, 628, 630, 629, 632, + 631, 634, 633, 635, 635, 636, 636, 636, 638, 637, + 639, 639, 639, 640, 640, 640, 640, 640, 640, 640, + 642, 641, 644, 643, 646, 645, 647, 647, 647, 648, + 648, 648, 648, 648, 648, 649, 651, 650, 652, 654, + 653, 656, 655, 658, 657, 659, 659, 659, 660, 660, + 660, 660, 660, 660, 660, 660, 660, 660, 660, 661, + 663, 662, 664, 666, 665, 667, 668, 670, 669, 671, + 671, 673, 672, 675, 674, 677, 676, 678, 678, 678, + 679, 679, 681, 680, 682, 684, 683, 685, 685, 685, + 687, 686, 688, 688, 688, 689, 689, 689, 689, 689, + 689, 689, 690, 692, 691, 694, 693, 695, 695, 695, + 697, 696, 698, 698, 698, 699, 699, 699, 699, 699, + 701, 700, 702, 703, 704, 706, 705, 708, 707, 709, + 709, 709, 710, 710, 710, 710, 710, 711, 712, 713, + 714 }; const signed char @@ -6426,87 +6438,89 @@ namespace isc { namespace dhcp { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 0, 4, 3, 0, 4, 3, 3, 3, 3, 3, - 3, 0, 4, 1, 1, 1, 1, 1, 0, 4, - 0, 4, 3, 3, 0, 4, 1, 1, 1, 1, - 3, 0, 4, 0, 4, 3, 3, 3, 3, 3, - 3, 3, 3, 0, 6, 1, 3, 2, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 0, 4, - 0, 4, 0, 4, 1, 1, 0, 4, 1, 1, - 3, 3, 3, 3, 0, 6, 0, 6, 1, 3, - 2, 1, 1, 0, 4, 0, 4, 0, 6, 0, - 6, 0, 1, 1, 3, 2, 0, 4, 1, 3, - 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 0, 4, 0, 4, 0, 4, - 0, 4, 3, 0, 4, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 0, 4, 1, 1, 1, 3, - 3, 0, 4, 0, 4, 0, 4, 0, 4, 0, - 6, 1, 3, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 0, 6, 1, 3, 2, 1, - 1, 1, 1, 1, 1, 3, 3, 3, 0, 6, - 0, 1, 1, 3, 2, 0, 4, 0, 4, 1, - 3, 2, 1, 1, 1, 0, 4, 0, 4, 0, + 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 0, 4, 3, 0, 4, 3, 3, + 3, 3, 3, 3, 0, 4, 1, 1, 1, 1, + 1, 0, 4, 0, 4, 3, 3, 0, 4, 1, + 1, 1, 1, 3, 3, 3, 3, 0, 4, 0, + 4, 3, 3, 3, 3, 3, 3, 3, 3, 0, 6, 1, 3, 2, 1, 1, 1, 1, 1, 1, - 3, 3, 3, 3, 3, 3, 0, 6, 0, 1, - 1, 3, 2, 0, 4, 0, 4, 1, 3, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 0, 4, 0, 4, 0, 4, + 1, 1, 0, 4, 1, 1, 3, 3, 3, 3, + 0, 6, 0, 6, 1, 3, 2, 1, 1, 0, + 4, 0, 4, 0, 6, 0, 6, 0, 1, 1, + 3, 2, 0, 4, 1, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 4, 0, 4, 0, 4, 0, 4, 3, 0, + 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 0, 4, 1, 1, 1, 3, 3, 0, 4, 0, + 4, 0, 4, 0, 4, 0, 6, 1, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, - 0, 4, 0, 4, 0, 4, 0, 4, 3, 3, + 0, 6, 1, 3, 2, 1, 1, 1, 1, 1, + 1, 3, 3, 3, 0, 6, 0, 1, 1, 3, + 2, 0, 4, 0, 4, 1, 3, 2, 1, 1, + 1, 0, 4, 0, 4, 0, 6, 1, 3, 2, + 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 0, 6, 0, 1, 1, 3, 2, 0, - 4, 1, 3, 2, 1, 1, 1, 1, 1, 1, + 4, 0, 4, 1, 3, 2, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, - 6, 0, 4, 0, 1, 1, 3, 2, 0, 4, - 0, 4, 0, 1, 1, 3, 2, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, - 0, 4, 0, 4, 0, 4, 1, 0, 4, 3, + 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, + 4, 0, 4, 0, 4, 0, 4, 3, 3, 3, + 3, 0, 6, 0, 1, 1, 3, 2, 0, 4, + 1, 3, 2, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 0, 6, 0, 4, 0, 1, 1, 3, 2, + 0, 4, 0, 4, 0, 1, 1, 3, 2, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 3, 1, 0, 4, 0, 4, 0, 4, 1, 0, + 4, 3, 0, 6, 0, 1, 1, 3, 2, 0, + 4, 0, 4, 0, 1, 1, 3, 2, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 4, 1, 1, 3, 3, 3, 0, 4, 0, + 6, 0, 1, 1, 3, 2, 0, 4, 0, 4, + 1, 3, 2, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 0, 4, 3, 0, 4, 0, 4, 0, 6, 0, 1, 1, 3, 2, 0, 4, 0, 4, 0, 1, 1, 3, 2, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 0, 4, - 1, 1, 3, 3, 3, 0, 4, 0, 6, 0, - 1, 1, 3, 2, 0, 4, 0, 4, 1, 3, - 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 0, 4, 3, 0, 4, 0, 4, 0, 6, - 0, 1, 1, 3, 2, 0, 4, 0, 4, 0, - 1, 1, 3, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, - 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, - 4, 0, 6, 1, 0, 4, 0, 6, 1, 3, - 2, 0, 4, 0, 1, 1, 3, 2, 1, 1, + 4, 0, 4, 0, 6, 1, 0, 4, 0, 6, + 1, 3, 2, 0, 4, 0, 1, 1, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 0, 4, 0, 4, - 3, 3, 3, 0, 6, 0, 6, 0, 1, 1, - 3, 2, 0, 4, 1, 3, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 0, 4, + 0, 4, 3, 3, 3, 0, 6, 0, 6, 0, + 1, 1, 3, 2, 0, 4, 1, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 0, 4, 1, 1, 1, 0, 4, 0, 4, 3, - 3, 0, 6, 0, 1, 1, 3, 2, 0, 4, - 1, 3, 2, 1, 1, 1, 1, 1, 0, 4, - 0, 6, 1, 3, 2, 1, 1, 1, 1, 1, - 1, 1, 0, 4, 1, 0, 4, 0, 4, 0, - 6, 0, 1, 1, 3, 2, 0, 4, 1, 3, - 2, 1, 1, 1, 1, 1, 1, 1, 0, 4, + 1, 1, 0, 4, 1, 1, 1, 0, 4, 0, + 4, 3, 3, 0, 6, 0, 1, 1, 3, 2, + 0, 4, 1, 3, 2, 1, 1, 1, 1, 1, 0, 4, 0, 6, 1, 3, 2, 1, 1, 1, - 1, 1, 1, 3, 0, 4, 3, 0, 4, 0, - 6, 0, 4, 1, 3, 2, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 3, 0, 4, - 3, 0, 4, 3, 3, 0, 4, 1, 1, 0, - 4, 0, 6, 0, 4, 1, 3, 2, 1, 1, - 0, 6, 3, 0, 6, 1, 3, 2, 0, 4, + 1, 1, 1, 1, 0, 4, 1, 0, 4, 0, + 4, 0, 6, 0, 1, 1, 3, 2, 0, 4, 1, 3, 2, 1, 1, 1, 1, 1, 1, 1, - 3, 0, 4, 0, 6, 1, 3, 2, 0, 4, - 1, 3, 2, 1, 1, 1, 1, 1, 0, 4, - 3, 3, 3, 0, 4, 0, 6, 1, 3, 2, - 1, 1, 1, 1, 1, 3, 3, 3, 3 + 0, 4, 0, 4, 0, 6, 1, 3, 2, 1, + 1, 1, 1, 1, 1, 3, 0, 4, 3, 0, + 4, 0, 6, 0, 4, 1, 3, 2, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, + 0, 4, 3, 0, 4, 3, 3, 0, 4, 1, + 1, 0, 4, 0, 6, 0, 4, 1, 3, 2, + 1, 1, 0, 6, 3, 0, 6, 1, 3, 2, + 0, 4, 1, 3, 2, 1, 1, 1, 1, 1, + 1, 1, 3, 0, 4, 0, 6, 1, 3, 2, + 0, 4, 1, 3, 2, 1, 1, 1, 1, 1, + 0, 4, 3, 3, 3, 0, 4, 0, 6, 1, + 3, 2, 1, 1, 1, 1, 1, 3, 3, 3, + 3 }; @@ -6545,7 +6559,8 @@ namespace isc { namespace dhcp { "\"ddns-override-client-update\"", "\"ddns-replace-client-name\"", "\"ddns-generated-prefix\"", "\"ddns-qualifying-suffix\"", "\"ddns-update-on-renew\"", "\"ddns-use-conflict-resolution\"", - "\"ddns-ttl-percent\"", "\"store-extended-info\"", "\"subnet4\"", + "\"ddns-ttl-percent\"", "\"ddns-ttl\"", "\"ddns-ttl-min\"", + "\"ddns-ttl-mix\"", "\"store-extended-info\"", "\"subnet4\"", "\"4o6-interface\"", "\"4o6-interface-id\"", "\"4o6-subnet\"", "\"option-def\"", "\"option-data\"", "\"name\"", "\"data\"", "\"code\"", "\"space\"", "\"csv-format\"", "\"always-send\"", "\"never-send\"", @@ -6609,20 +6624,20 @@ namespace isc { namespace dhcp { "ddns_generated_prefix", "$@23", "ddns_qualifying_suffix", "$@24", "ddns_update_on_renew", "ddns_use_conflict_resolution", "ddns_conflict_resolution_mode", "$@25", - "ddns_conflict_resolution_mode_value", "ddns_ttl_percent", - "hostname_char_set", "$@26", "hostname_char_replacement", "$@27", - "store_extended_info", "statistic_default_sample_count", - "statistic_default_sample_age", "early_global_reservations_lookup", - "ip_reservations_unique", "reservations_lookup_first", "offer_lifetime", - "stash_agent_options", "interfaces_config", "$@28", - "interfaces_config_params", "interfaces_config_param", "sub_interfaces4", - "$@29", "interfaces_list", "$@30", "dhcp_socket_type", "$@31", - "socket_type", "outbound_interface", "$@32", "outbound_interface_value", - "re_detect", "service_sockets_require_all", - "service_sockets_retry_wait_time", "service_sockets_max_retries", - "lease_database", "$@33", "sanity_checks", "$@34", - "sanity_checks_params", "sanity_checks_param", "lease_checks", "$@35", - "extended_info_checks", "$@36", "hosts_database", "$@37", + "ddns_conflict_resolution_mode_value", "ddns_ttl_percent", "ddns_ttl", + "ddns_ttl_min", "ddns_ttl_max", "hostname_char_set", "$@26", + "hostname_char_replacement", "$@27", "store_extended_info", + "statistic_default_sample_count", "statistic_default_sample_age", + "early_global_reservations_lookup", "ip_reservations_unique", + "reservations_lookup_first", "offer_lifetime", "stash_agent_options", + "interfaces_config", "$@28", "interfaces_config_params", + "interfaces_config_param", "sub_interfaces4", "$@29", "interfaces_list", + "$@30", "dhcp_socket_type", "$@31", "socket_type", "outbound_interface", + "$@32", "outbound_interface_value", "re_detect", + "service_sockets_require_all", "service_sockets_retry_wait_time", + "service_sockets_max_retries", "lease_database", "$@33", "sanity_checks", + "$@34", "sanity_checks_params", "sanity_checks_param", "lease_checks", + "$@35", "extended_info_checks", "$@36", "hosts_database", "$@37", "hosts_databases", "$@38", "database_list", "not_empty_database_list", "database", "$@39", "database_map_params", "database_map_param", "database_type", "$@40", "user", "$@41", "password", "$@42", "host", @@ -6722,100 +6737,102 @@ namespace isc { namespace dhcp { const short Dhcp4Parser::yyrline_[] = { - 0, 326, 326, 326, 327, 327, 328, 328, 329, 329, - 330, 330, 331, 331, 332, 332, 333, 333, 334, 334, - 335, 335, 336, 336, 337, 337, 338, 338, 346, 347, - 348, 349, 350, 351, 352, 355, 360, 360, 371, 374, - 375, 378, 383, 389, 394, 394, 401, 402, 405, 409, - 413, 419, 419, 426, 427, 430, 434, 438, 448, 457, - 457, 472, 472, 486, 489, 495, 495, 504, 505, 506, - 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, - 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, - 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, - 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, - 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, - 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, - 573, 574, 575, 576, 577, 578, 579, 580, 581, 584, - 590, 596, 602, 608, 614, 620, 626, 632, 638, 644, - 650, 650, 659, 665, 665, 674, 680, 686, 692, 698, - 704, 710, 710, 719, 722, 725, 728, 731, 737, 737, - 746, 746, 755, 764, 774, 774, 783, 786, 789, 792, - 797, 803, 803, 812, 812, 821, 827, 833, 839, 845, - 851, 857, 863, 869, 869, 881, 882, 883, 888, 889, - 890, 891, 892, 893, 894, 895, 896, 897, 900, 900, - 909, 909, 920, 920, 928, 929, 932, 932, 940, 942, - 946, 952, 958, 964, 970, 970, 983, 983, 994, 995, - 996, 1001, 1002, 1005, 1005, 1024, 1024, 1042, 1042, 1055, - 1055, 1066, 1067, 1070, 1071, 1072, 1077, 1077, 1087, 1088, - 1089, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, - 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, - 1113, 1114, 1115, 1116, 1119, 1119, 1128, 1128, 1137, 1137, - 1146, 1146, 1155, 1161, 1161, 1170, 1176, 1182, 1188, 1194, - 1200, 1206, 1212, 1218, 1224, 1224, 1232, 1233, 1234, 1237, - 1243, 1249, 1249, 1258, 1258, 1267, 1267, 1276, 1276, 1285, - 1285, 1296, 1297, 1298, 1303, 1304, 1305, 1306, 1307, 1310, - 1315, 1320, 1325, 1330, 1337, 1337, 1350, 1351, 1352, 1357, - 1358, 1359, 1360, 1361, 1362, 1365, 1371, 1377, 1383, 1383, - 1394, 1395, 1398, 1399, 1400, 1405, 1405, 1415, 1415, 1425, - 1426, 1427, 1430, 1433, 1434, 1437, 1437, 1446, 1446, 1455, - 1455, 1467, 1468, 1469, 1474, 1475, 1476, 1477, 1478, 1479, - 1482, 1488, 1494, 1500, 1506, 1512, 1521, 1521, 1535, 1536, - 1539, 1540, 1541, 1550, 1550, 1576, 1576, 1587, 1588, 1589, - 1595, 1596, 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604, - 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, - 1615, 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, - 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, - 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, - 1647, 1647, 1656, 1656, 1665, 1665, 1674, 1674, 1683, 1683, - 1692, 1692, 1702, 1702, 1714, 1714, 1725, 1725, 1736, 1742, - 1748, 1754, 1762, 1762, 1774, 1775, 1779, 1780, 1781, 1786, - 1786, 1794, 1795, 1796, 1801, 1802, 1803, 1804, 1805, 1806, - 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, - 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, - 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, - 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1852, - 1852, 1866, 1866, 1875, 1876, 1879, 1880, 1881, 1888, 1888, - 1903, 1903, 1917, 1918, 1921, 1922, 1923, 1928, 1929, 1930, - 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1940, 1942, 1948, - 1950, 1950, 1959, 1959, 1968, 1968, 1977, 1979, 1979, 1988, - 1998, 1998, 2011, 2012, 2017, 2018, 2019, 2026, 2026, 2038, - 2038, 2050, 2051, 2056, 2057, 2058, 2065, 2066, 2067, 2068, - 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2078, 2080, 2080, - 2089, 2091, 2093, 2099, 2105, 2111, 2111, 2125, 2125, 2138, - 2139, 2142, 2143, 2144, 2149, 2149, 2159, 2159, 2169, 2170, - 2171, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, - 2185, 2188, 2188, 2197, 2203, 2203, 2228, 2228, 2258, 2258, - 2269, 2270, 2273, 2274, 2275, 2280, 2280, 2289, 2289, 2298, - 2299, 2302, 2303, 2304, 2310, 2311, 2312, 2313, 2314, 2315, - 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2327, - 2327, 2336, 2336, 2345, 2345, 2354, 2354, 2363, 2363, 2372, - 2372, 2381, 2381, 2390, 2390, 2399, 2399, 2408, 2408, 2417, - 2417, 2431, 2431, 2442, 2445, 2445, 2459, 2459, 2470, 2471, - 2472, 2477, 2477, 2487, 2488, 2491, 2492, 2493, 2498, 2499, - 2500, 2501, 2502, 2503, 2504, 2505, 2506, 2507, 2508, 2509, - 2510, 2511, 2512, 2513, 2514, 2517, 2519, 2519, 2528, 2528, - 2538, 2544, 2552, 2560, 2560, 2572, 2572, 2584, 2585, 2588, - 2589, 2590, 2595, 2595, 2603, 2604, 2605, 2610, 2611, 2612, - 2613, 2614, 2615, 2616, 2617, 2618, 2619, 2620, 2621, 2622, - 2625, 2625, 2634, 2635, 2636, 2639, 2639, 2649, 2649, 2659, - 2665, 2671, 2671, 2682, 2683, 2686, 2687, 2688, 2693, 2693, - 2701, 2702, 2703, 2708, 2709, 2710, 2711, 2712, 2715, 2715, - 2726, 2726, 2739, 2740, 2741, 2746, 2747, 2748, 2749, 2750, - 2751, 2752, 2755, 2755, 2763, 2766, 2766, 2775, 2775, 2784, - 2784, 2795, 2796, 2799, 2800, 2801, 2806, 2806, 2814, 2815, - 2816, 2821, 2822, 2823, 2824, 2825, 2826, 2827, 2830, 2830, - 2839, 2839, 2850, 2850, 2863, 2864, 2865, 2870, 2871, 2872, - 2873, 2874, 2875, 2878, 2884, 2884, 2893, 2899, 2899, 2909, - 2909, 2922, 2922, 2932, 2933, 2934, 2939, 2940, 2941, 2942, - 2943, 2944, 2945, 2946, 2947, 2948, 2949, 2952, 2958, 2958, - 2967, 2973, 2973, 2982, 2988, 2994, 2994, 3003, 3004, 3007, - 3007, 3018, 3018, 3030, 3030, 3040, 3041, 3042, 3048, 3049, - 3052, 3052, 3063, 3071, 3071, 3084, 3085, 3086, 3092, 3092, - 3100, 3101, 3102, 3107, 3108, 3109, 3110, 3111, 3112, 3113, - 3116, 3122, 3122, 3131, 3131, 3142, 3143, 3144, 3149, 3149, - 3157, 3158, 3159, 3164, 3165, 3166, 3167, 3168, 3171, 3171, - 3180, 3186, 3192, 3198, 3198, 3207, 3207, 3218, 3219, 3220, - 3225, 3226, 3227, 3228, 3229, 3232, 3238, 3244, 3250 + 0, 329, 329, 329, 330, 330, 331, 331, 332, 332, + 333, 333, 334, 334, 335, 335, 336, 336, 337, 337, + 338, 338, 339, 339, 340, 340, 341, 341, 349, 350, + 351, 352, 353, 354, 355, 358, 363, 363, 374, 377, + 378, 381, 386, 392, 397, 397, 404, 405, 408, 412, + 416, 422, 422, 429, 430, 433, 437, 441, 451, 460, + 460, 475, 475, 489, 492, 498, 498, 507, 508, 509, + 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, + 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, + 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, + 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, + 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, + 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, + 586, 587, 590, 596, 602, 608, 614, 620, 626, 632, + 638, 644, 650, 656, 656, 665, 671, 671, 680, 686, + 692, 698, 704, 710, 716, 716, 725, 728, 731, 734, + 737, 743, 743, 752, 752, 761, 770, 780, 780, 789, + 792, 795, 798, 803, 809, 815, 821, 827, 827, 836, + 836, 845, 851, 857, 863, 869, 875, 881, 887, 893, + 893, 905, 906, 907, 912, 913, 914, 915, 916, 917, + 918, 919, 920, 921, 924, 924, 933, 933, 944, 944, + 952, 953, 956, 956, 964, 966, 970, 976, 982, 988, + 994, 994, 1007, 1007, 1018, 1019, 1020, 1025, 1026, 1029, + 1029, 1048, 1048, 1066, 1066, 1079, 1079, 1090, 1091, 1094, + 1095, 1096, 1101, 1101, 1111, 1112, 1113, 1118, 1119, 1120, + 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, + 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, + 1143, 1143, 1152, 1152, 1161, 1161, 1170, 1170, 1179, 1185, + 1185, 1194, 1200, 1206, 1212, 1218, 1224, 1230, 1236, 1242, + 1248, 1248, 1256, 1257, 1258, 1261, 1267, 1273, 1273, 1282, + 1282, 1291, 1291, 1300, 1300, 1309, 1309, 1320, 1321, 1322, + 1327, 1328, 1329, 1330, 1331, 1334, 1339, 1344, 1349, 1354, + 1361, 1361, 1374, 1375, 1376, 1381, 1382, 1383, 1384, 1385, + 1386, 1389, 1395, 1401, 1407, 1407, 1418, 1419, 1422, 1423, + 1424, 1429, 1429, 1439, 1439, 1449, 1450, 1451, 1454, 1457, + 1458, 1461, 1461, 1470, 1470, 1479, 1479, 1491, 1492, 1493, + 1498, 1499, 1500, 1501, 1502, 1503, 1506, 1512, 1518, 1524, + 1530, 1536, 1545, 1545, 1559, 1560, 1563, 1564, 1565, 1574, + 1574, 1600, 1600, 1611, 1612, 1613, 1619, 1620, 1621, 1622, + 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, + 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, + 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, + 1653, 1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, + 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1674, + 1674, 1683, 1683, 1692, 1692, 1701, 1701, 1710, 1710, 1719, + 1719, 1729, 1729, 1741, 1741, 1752, 1752, 1763, 1769, 1775, + 1781, 1789, 1789, 1801, 1802, 1806, 1807, 1808, 1813, 1813, + 1821, 1822, 1823, 1828, 1829, 1830, 1831, 1832, 1833, 1834, + 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, + 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, + 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, + 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, + 1875, 1882, 1882, 1896, 1896, 1905, 1906, 1909, 1910, 1911, + 1918, 1918, 1933, 1933, 1947, 1948, 1951, 1952, 1953, 1958, + 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1970, + 1972, 1978, 1980, 1980, 1989, 1989, 1998, 1998, 2007, 2009, + 2009, 2018, 2028, 2028, 2041, 2042, 2047, 2048, 2049, 2056, + 2056, 2068, 2068, 2080, 2081, 2086, 2087, 2088, 2095, 2096, + 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2108, + 2110, 2110, 2119, 2121, 2123, 2129, 2135, 2141, 2141, 2155, + 2155, 2168, 2169, 2172, 2173, 2174, 2179, 2179, 2189, 2189, + 2199, 2200, 2201, 2206, 2207, 2208, 2209, 2210, 2211, 2212, + 2213, 2214, 2215, 2218, 2218, 2227, 2233, 2233, 2258, 2258, + 2288, 2288, 2299, 2300, 2303, 2304, 2305, 2310, 2310, 2319, + 2319, 2328, 2329, 2332, 2333, 2334, 2340, 2341, 2342, 2343, + 2344, 2345, 2346, 2347, 2348, 2349, 2350, 2351, 2352, 2353, + 2354, 2357, 2357, 2366, 2366, 2375, 2375, 2384, 2384, 2393, + 2393, 2402, 2402, 2411, 2411, 2420, 2420, 2429, 2429, 2438, + 2438, 2447, 2447, 2461, 2461, 2472, 2475, 2475, 2489, 2489, + 2500, 2501, 2502, 2507, 2507, 2517, 2518, 2521, 2522, 2523, + 2528, 2529, 2530, 2531, 2532, 2533, 2534, 2535, 2536, 2537, + 2538, 2539, 2540, 2541, 2542, 2543, 2544, 2547, 2549, 2549, + 2558, 2558, 2568, 2574, 2582, 2590, 2590, 2602, 2602, 2614, + 2615, 2618, 2619, 2620, 2625, 2625, 2633, 2634, 2635, 2640, + 2641, 2642, 2643, 2644, 2645, 2646, 2647, 2648, 2649, 2650, + 2651, 2652, 2655, 2655, 2664, 2665, 2666, 2669, 2669, 2679, + 2679, 2689, 2695, 2701, 2701, 2712, 2713, 2716, 2717, 2718, + 2723, 2723, 2731, 2732, 2733, 2738, 2739, 2740, 2741, 2742, + 2745, 2745, 2756, 2756, 2769, 2770, 2771, 2776, 2777, 2778, + 2779, 2780, 2781, 2782, 2785, 2785, 2793, 2796, 2796, 2805, + 2805, 2814, 2814, 2825, 2826, 2829, 2830, 2831, 2836, 2836, + 2844, 2845, 2846, 2851, 2852, 2853, 2854, 2855, 2856, 2857, + 2860, 2860, 2869, 2869, 2880, 2880, 2893, 2894, 2895, 2900, + 2901, 2902, 2903, 2904, 2905, 2908, 2914, 2914, 2923, 2929, + 2929, 2939, 2939, 2952, 2952, 2962, 2963, 2964, 2969, 2970, + 2971, 2972, 2973, 2974, 2975, 2976, 2977, 2978, 2979, 2982, + 2988, 2988, 2997, 3003, 3003, 3012, 3018, 3024, 3024, 3033, + 3034, 3037, 3037, 3048, 3048, 3060, 3060, 3070, 3071, 3072, + 3078, 3079, 3082, 3082, 3093, 3101, 3101, 3114, 3115, 3116, + 3122, 3122, 3130, 3131, 3132, 3137, 3138, 3139, 3140, 3141, + 3142, 3143, 3146, 3152, 3152, 3161, 3161, 3172, 3173, 3174, + 3179, 3179, 3187, 3188, 3189, 3194, 3195, 3196, 3197, 3198, + 3201, 3201, 3210, 3216, 3222, 3228, 3228, 3237, 3237, 3248, + 3249, 3250, 3255, 3256, 3257, 3258, 3259, 3262, 3268, 3274, + 3280 }; void @@ -6848,9 +6865,9 @@ namespace isc { namespace dhcp { #line 14 "dhcp4_parser.yy" } } // isc::dhcp -#line 6852 "dhcp4_parser.cc" +#line 6869 "dhcp4_parser.cc" -#line 3256 "dhcp4_parser.yy" +#line 3286 "dhcp4_parser.yy" void diff --git a/src/bin/dhcp4/dhcp4_parser.h b/src/bin/dhcp4/dhcp4_parser.h index 21ec1d2134..97ecea2e63 100644 --- a/src/bin/dhcp4/dhcp4_parser.h +++ b/src/bin/dhcp4/dhcp4_parser.h @@ -584,150 +584,153 @@ namespace isc { namespace dhcp { TOKEN_DDNS_UPDATE_ON_RENEW = 339, // "ddns-update-on-renew" TOKEN_DDNS_USE_CONFLICT_RESOLUTION = 340, // "ddns-use-conflict-resolution" TOKEN_DDNS_TTL_PERCENT = 341, // "ddns-ttl-percent" - TOKEN_STORE_EXTENDED_INFO = 342, // "store-extended-info" - TOKEN_SUBNET4 = 343, // "subnet4" - TOKEN_SUBNET_4O6_INTERFACE = 344, // "4o6-interface" - TOKEN_SUBNET_4O6_INTERFACE_ID = 345, // "4o6-interface-id" - TOKEN_SUBNET_4O6_SUBNET = 346, // "4o6-subnet" - TOKEN_OPTION_DEF = 347, // "option-def" - TOKEN_OPTION_DATA = 348, // "option-data" - TOKEN_NAME = 349, // "name" - TOKEN_DATA = 350, // "data" - TOKEN_CODE = 351, // "code" - TOKEN_SPACE = 352, // "space" - TOKEN_CSV_FORMAT = 353, // "csv-format" - TOKEN_ALWAYS_SEND = 354, // "always-send" - TOKEN_NEVER_SEND = 355, // "never-send" - TOKEN_RECORD_TYPES = 356, // "record-types" - TOKEN_ENCAPSULATE = 357, // "encapsulate" - TOKEN_ARRAY = 358, // "array" - TOKEN_PARKED_PACKET_LIMIT = 359, // "parked-packet-limit" - TOKEN_ALLOCATOR = 360, // "allocator" - TOKEN_DDNS_CONFLICT_RESOLUTION_MODE = 361, // "ddns-conflict-resolution-mode" - TOKEN_CHECK_WITH_DHCID = 362, // "check-with-dhcid" - TOKEN_NO_CHECK_WITH_DHCID = 363, // "no-check-with-dhcid" - TOKEN_CHECK_EXISTS_WITH_DHCID = 364, // "check-exists-with-dhcid" - TOKEN_NO_CHECK_WITHOUT_DHCID = 365, // "no-check-without-dhcid" - TOKEN_SHARED_NETWORKS = 366, // "shared-networks" - TOKEN_POOLS = 367, // "pools" - TOKEN_POOL = 368, // "pool" - TOKEN_USER_CONTEXT = 369, // "user-context" - TOKEN_COMMENT = 370, // "comment" - TOKEN_SUBNET = 371, // "subnet" - TOKEN_INTERFACE = 372, // "interface" - TOKEN_ID = 373, // "id" - TOKEN_RESERVATIONS_GLOBAL = 374, // "reservations-global" - TOKEN_RESERVATIONS_IN_SUBNET = 375, // "reservations-in-subnet" - TOKEN_RESERVATIONS_OUT_OF_POOL = 376, // "reservations-out-of-pool" - TOKEN_HOST_RESERVATION_IDENTIFIERS = 377, // "host-reservation-identifiers" - TOKEN_CLIENT_CLASSES = 378, // "client-classes" - TOKEN_REQUIRE_CLIENT_CLASSES = 379, // "require-client-classes" - TOKEN_EVALUATE_ADDITIONAL_CLASSES = 380, // "evaluate-additional-classes" - TOKEN_TEST = 381, // "test" - TOKEN_TEMPLATE_TEST = 382, // "template-test" - TOKEN_ONLY_IF_REQUIRED = 383, // "only-if-required" - TOKEN_ONLY_IN_ADDITIONAL_LIST = 384, // "only-in-additional-list" - TOKEN_CLIENT_CLASS = 385, // "client-class" - TOKEN_POOL_ID = 386, // "pool-id" - TOKEN_RESERVATIONS = 387, // "reservations" - TOKEN_IP_ADDRESS = 388, // "ip-address" - TOKEN_DUID = 389, // "duid" - TOKEN_HW_ADDRESS = 390, // "hw-address" - TOKEN_CIRCUIT_ID = 391, // "circuit-id" - TOKEN_CLIENT_ID = 392, // "client-id" - TOKEN_HOSTNAME = 393, // "hostname" - TOKEN_FLEX_ID = 394, // "flex-id" - TOKEN_RELAY = 395, // "relay" - TOKEN_IP_ADDRESSES = 396, // "ip-addresses" - TOKEN_HOOKS_LIBRARIES = 397, // "hooks-libraries" - TOKEN_LIBRARY = 398, // "library" - TOKEN_PARAMETERS = 399, // "parameters" - TOKEN_EXPIRED_LEASES_PROCESSING = 400, // "expired-leases-processing" - TOKEN_RECLAIM_TIMER_WAIT_TIME = 401, // "reclaim-timer-wait-time" - TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 402, // "flush-reclaimed-timer-wait-time" - TOKEN_HOLD_RECLAIMED_TIME = 403, // "hold-reclaimed-time" - TOKEN_MAX_RECLAIM_LEASES = 404, // "max-reclaim-leases" - TOKEN_MAX_RECLAIM_TIME = 405, // "max-reclaim-time" - TOKEN_UNWARNED_RECLAIM_CYCLES = 406, // "unwarned-reclaim-cycles" - TOKEN_DHCP4O6_PORT = 407, // "dhcp4o6-port" - TOKEN_DHCP_MULTI_THREADING = 408, // "multi-threading" - TOKEN_ENABLE_MULTI_THREADING = 409, // "enable-multi-threading" - TOKEN_THREAD_POOL_SIZE = 410, // "thread-pool-size" - TOKEN_PACKET_QUEUE_SIZE = 411, // "packet-queue-size" - TOKEN_CONTROL_SOCKET = 412, // "control-socket" - TOKEN_CONTROL_SOCKETS = 413, // "control-sockets" - TOKEN_SOCKET_TYPE = 414, // "socket-type" - TOKEN_UNIX = 415, // "unix" - TOKEN_HTTP = 416, // "http" - TOKEN_HTTPS = 417, // "https" - TOKEN_SOCKET_NAME = 418, // "socket-name" - TOKEN_SOCKET_ADDRESS = 419, // "socket-address" - TOKEN_SOCKET_PORT = 420, // "socket-port" - TOKEN_AUTHENTICATION = 421, // "authentication" - TOKEN_BASIC = 422, // "basic" - TOKEN_REALM = 423, // "realm" - TOKEN_DIRECTORY = 424, // "directory" - TOKEN_CLIENTS = 425, // "clients" - TOKEN_USER_FILE = 426, // "user-file" - TOKEN_PASSWORD_FILE = 427, // "password-file" - TOKEN_CERT_REQUIRED = 428, // "cert-required" - TOKEN_HTTP_HEADERS = 429, // "http-headers" - TOKEN_VALUE = 430, // "value" - TOKEN_DHCP_QUEUE_CONTROL = 431, // "dhcp-queue-control" - TOKEN_ENABLE_QUEUE = 432, // "enable-queue" - TOKEN_QUEUE_TYPE = 433, // "queue-type" - TOKEN_CAPACITY = 434, // "capacity" - TOKEN_DHCP_DDNS = 435, // "dhcp-ddns" - TOKEN_ENABLE_UPDATES = 436, // "enable-updates" - TOKEN_SERVER_IP = 437, // "server-ip" - TOKEN_SERVER_PORT = 438, // "server-port" - TOKEN_SENDER_IP = 439, // "sender-ip" - TOKEN_SENDER_PORT = 440, // "sender-port" - TOKEN_MAX_QUEUE_SIZE = 441, // "max-queue-size" - TOKEN_NCR_PROTOCOL = 442, // "ncr-protocol" - TOKEN_NCR_FORMAT = 443, // "ncr-format" - TOKEN_TCP = 444, // "tcp" - TOKEN_JSON = 445, // "JSON" - TOKEN_WHEN_PRESENT = 446, // "when-present" - TOKEN_NEVER = 447, // "never" - TOKEN_ALWAYS = 448, // "always" - TOKEN_WHEN_NOT_PRESENT = 449, // "when-not-present" - TOKEN_HOSTNAME_CHAR_SET = 450, // "hostname-char-set" - TOKEN_HOSTNAME_CHAR_REPLACEMENT = 451, // "hostname-char-replacement" - TOKEN_EARLY_GLOBAL_RESERVATIONS_LOOKUP = 452, // "early-global-reservations-lookup" - TOKEN_IP_RESERVATIONS_UNIQUE = 453, // "ip-reservations-unique" - TOKEN_RESERVATIONS_LOOKUP_FIRST = 454, // "reservations-lookup-first" - TOKEN_LOGGERS = 455, // "loggers" - TOKEN_OUTPUT_OPTIONS = 456, // "output-options" - TOKEN_OUTPUT = 457, // "output" - TOKEN_DEBUGLEVEL = 458, // "debuglevel" - TOKEN_SEVERITY = 459, // "severity" - TOKEN_FLUSH = 460, // "flush" - TOKEN_MAXSIZE = 461, // "maxsize" - TOKEN_MAXVER = 462, // "maxver" - TOKEN_PATTERN = 463, // "pattern" - TOKEN_COMPATIBILITY = 464, // "compatibility" - TOKEN_LENIENT_OPTION_PARSING = 465, // "lenient-option-parsing" - TOKEN_IGNORE_DHCP_SERVER_ID = 466, // "ignore-dhcp-server-identifier" - TOKEN_IGNORE_RAI_LINK_SEL = 467, // "ignore-rai-link-selection" - TOKEN_EXCLUDE_FIRST_LAST_24 = 468, // "exclude-first-last-24" - TOKEN_TOPLEVEL_JSON = 469, // TOPLEVEL_JSON - TOKEN_TOPLEVEL_DHCP4 = 470, // TOPLEVEL_DHCP4 - TOKEN_SUB_DHCP4 = 471, // SUB_DHCP4 - TOKEN_SUB_INTERFACES4 = 472, // SUB_INTERFACES4 - TOKEN_SUB_SUBNET4 = 473, // SUB_SUBNET4 - TOKEN_SUB_POOL4 = 474, // SUB_POOL4 - TOKEN_SUB_RESERVATION = 475, // SUB_RESERVATION - TOKEN_SUB_OPTION_DEFS = 476, // SUB_OPTION_DEFS - TOKEN_SUB_OPTION_DEF = 477, // SUB_OPTION_DEF - TOKEN_SUB_OPTION_DATA = 478, // SUB_OPTION_DATA - TOKEN_SUB_HOOKS_LIBRARY = 479, // SUB_HOOKS_LIBRARY - TOKEN_SUB_DHCP_DDNS = 480, // SUB_DHCP_DDNS - TOKEN_SUB_CONFIG_CONTROL = 481, // SUB_CONFIG_CONTROL - TOKEN_STRING = 482, // "constant string" - TOKEN_INTEGER = 483, // "integer" - TOKEN_FLOAT = 484, // "floating point" - TOKEN_BOOLEAN = 485 // "boolean" + TOKEN_DDNS_TTL = 342, // "ddns-ttl" + TOKEN_DDNS_TTL_MIN = 343, // "ddns-ttl-min" + TOKEN_DDNS_TTL_MAX = 344, // "ddns-ttl-mix" + TOKEN_STORE_EXTENDED_INFO = 345, // "store-extended-info" + TOKEN_SUBNET4 = 346, // "subnet4" + TOKEN_SUBNET_4O6_INTERFACE = 347, // "4o6-interface" + TOKEN_SUBNET_4O6_INTERFACE_ID = 348, // "4o6-interface-id" + TOKEN_SUBNET_4O6_SUBNET = 349, // "4o6-subnet" + TOKEN_OPTION_DEF = 350, // "option-def" + TOKEN_OPTION_DATA = 351, // "option-data" + TOKEN_NAME = 352, // "name" + TOKEN_DATA = 353, // "data" + TOKEN_CODE = 354, // "code" + TOKEN_SPACE = 355, // "space" + TOKEN_CSV_FORMAT = 356, // "csv-format" + TOKEN_ALWAYS_SEND = 357, // "always-send" + TOKEN_NEVER_SEND = 358, // "never-send" + TOKEN_RECORD_TYPES = 359, // "record-types" + TOKEN_ENCAPSULATE = 360, // "encapsulate" + TOKEN_ARRAY = 361, // "array" + TOKEN_PARKED_PACKET_LIMIT = 362, // "parked-packet-limit" + TOKEN_ALLOCATOR = 363, // "allocator" + TOKEN_DDNS_CONFLICT_RESOLUTION_MODE = 364, // "ddns-conflict-resolution-mode" + TOKEN_CHECK_WITH_DHCID = 365, // "check-with-dhcid" + TOKEN_NO_CHECK_WITH_DHCID = 366, // "no-check-with-dhcid" + TOKEN_CHECK_EXISTS_WITH_DHCID = 367, // "check-exists-with-dhcid" + TOKEN_NO_CHECK_WITHOUT_DHCID = 368, // "no-check-without-dhcid" + TOKEN_SHARED_NETWORKS = 369, // "shared-networks" + TOKEN_POOLS = 370, // "pools" + TOKEN_POOL = 371, // "pool" + TOKEN_USER_CONTEXT = 372, // "user-context" + TOKEN_COMMENT = 373, // "comment" + TOKEN_SUBNET = 374, // "subnet" + TOKEN_INTERFACE = 375, // "interface" + TOKEN_ID = 376, // "id" + TOKEN_RESERVATIONS_GLOBAL = 377, // "reservations-global" + TOKEN_RESERVATIONS_IN_SUBNET = 378, // "reservations-in-subnet" + TOKEN_RESERVATIONS_OUT_OF_POOL = 379, // "reservations-out-of-pool" + TOKEN_HOST_RESERVATION_IDENTIFIERS = 380, // "host-reservation-identifiers" + TOKEN_CLIENT_CLASSES = 381, // "client-classes" + TOKEN_REQUIRE_CLIENT_CLASSES = 382, // "require-client-classes" + TOKEN_EVALUATE_ADDITIONAL_CLASSES = 383, // "evaluate-additional-classes" + TOKEN_TEST = 384, // "test" + TOKEN_TEMPLATE_TEST = 385, // "template-test" + TOKEN_ONLY_IF_REQUIRED = 386, // "only-if-required" + TOKEN_ONLY_IN_ADDITIONAL_LIST = 387, // "only-in-additional-list" + TOKEN_CLIENT_CLASS = 388, // "client-class" + TOKEN_POOL_ID = 389, // "pool-id" + TOKEN_RESERVATIONS = 390, // "reservations" + TOKEN_IP_ADDRESS = 391, // "ip-address" + TOKEN_DUID = 392, // "duid" + TOKEN_HW_ADDRESS = 393, // "hw-address" + TOKEN_CIRCUIT_ID = 394, // "circuit-id" + TOKEN_CLIENT_ID = 395, // "client-id" + TOKEN_HOSTNAME = 396, // "hostname" + TOKEN_FLEX_ID = 397, // "flex-id" + TOKEN_RELAY = 398, // "relay" + TOKEN_IP_ADDRESSES = 399, // "ip-addresses" + TOKEN_HOOKS_LIBRARIES = 400, // "hooks-libraries" + TOKEN_LIBRARY = 401, // "library" + TOKEN_PARAMETERS = 402, // "parameters" + TOKEN_EXPIRED_LEASES_PROCESSING = 403, // "expired-leases-processing" + TOKEN_RECLAIM_TIMER_WAIT_TIME = 404, // "reclaim-timer-wait-time" + TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 405, // "flush-reclaimed-timer-wait-time" + TOKEN_HOLD_RECLAIMED_TIME = 406, // "hold-reclaimed-time" + TOKEN_MAX_RECLAIM_LEASES = 407, // "max-reclaim-leases" + TOKEN_MAX_RECLAIM_TIME = 408, // "max-reclaim-time" + TOKEN_UNWARNED_RECLAIM_CYCLES = 409, // "unwarned-reclaim-cycles" + TOKEN_DHCP4O6_PORT = 410, // "dhcp4o6-port" + TOKEN_DHCP_MULTI_THREADING = 411, // "multi-threading" + TOKEN_ENABLE_MULTI_THREADING = 412, // "enable-multi-threading" + TOKEN_THREAD_POOL_SIZE = 413, // "thread-pool-size" + TOKEN_PACKET_QUEUE_SIZE = 414, // "packet-queue-size" + TOKEN_CONTROL_SOCKET = 415, // "control-socket" + TOKEN_CONTROL_SOCKETS = 416, // "control-sockets" + TOKEN_SOCKET_TYPE = 417, // "socket-type" + TOKEN_UNIX = 418, // "unix" + TOKEN_HTTP = 419, // "http" + TOKEN_HTTPS = 420, // "https" + TOKEN_SOCKET_NAME = 421, // "socket-name" + TOKEN_SOCKET_ADDRESS = 422, // "socket-address" + TOKEN_SOCKET_PORT = 423, // "socket-port" + TOKEN_AUTHENTICATION = 424, // "authentication" + TOKEN_BASIC = 425, // "basic" + TOKEN_REALM = 426, // "realm" + TOKEN_DIRECTORY = 427, // "directory" + TOKEN_CLIENTS = 428, // "clients" + TOKEN_USER_FILE = 429, // "user-file" + TOKEN_PASSWORD_FILE = 430, // "password-file" + TOKEN_CERT_REQUIRED = 431, // "cert-required" + TOKEN_HTTP_HEADERS = 432, // "http-headers" + TOKEN_VALUE = 433, // "value" + TOKEN_DHCP_QUEUE_CONTROL = 434, // "dhcp-queue-control" + TOKEN_ENABLE_QUEUE = 435, // "enable-queue" + TOKEN_QUEUE_TYPE = 436, // "queue-type" + TOKEN_CAPACITY = 437, // "capacity" + TOKEN_DHCP_DDNS = 438, // "dhcp-ddns" + TOKEN_ENABLE_UPDATES = 439, // "enable-updates" + TOKEN_SERVER_IP = 440, // "server-ip" + TOKEN_SERVER_PORT = 441, // "server-port" + TOKEN_SENDER_IP = 442, // "sender-ip" + TOKEN_SENDER_PORT = 443, // "sender-port" + TOKEN_MAX_QUEUE_SIZE = 444, // "max-queue-size" + TOKEN_NCR_PROTOCOL = 445, // "ncr-protocol" + TOKEN_NCR_FORMAT = 446, // "ncr-format" + TOKEN_TCP = 447, // "tcp" + TOKEN_JSON = 448, // "JSON" + TOKEN_WHEN_PRESENT = 449, // "when-present" + TOKEN_NEVER = 450, // "never" + TOKEN_ALWAYS = 451, // "always" + TOKEN_WHEN_NOT_PRESENT = 452, // "when-not-present" + TOKEN_HOSTNAME_CHAR_SET = 453, // "hostname-char-set" + TOKEN_HOSTNAME_CHAR_REPLACEMENT = 454, // "hostname-char-replacement" + TOKEN_EARLY_GLOBAL_RESERVATIONS_LOOKUP = 455, // "early-global-reservations-lookup" + TOKEN_IP_RESERVATIONS_UNIQUE = 456, // "ip-reservations-unique" + TOKEN_RESERVATIONS_LOOKUP_FIRST = 457, // "reservations-lookup-first" + TOKEN_LOGGERS = 458, // "loggers" + TOKEN_OUTPUT_OPTIONS = 459, // "output-options" + TOKEN_OUTPUT = 460, // "output" + TOKEN_DEBUGLEVEL = 461, // "debuglevel" + TOKEN_SEVERITY = 462, // "severity" + TOKEN_FLUSH = 463, // "flush" + TOKEN_MAXSIZE = 464, // "maxsize" + TOKEN_MAXVER = 465, // "maxver" + TOKEN_PATTERN = 466, // "pattern" + TOKEN_COMPATIBILITY = 467, // "compatibility" + TOKEN_LENIENT_OPTION_PARSING = 468, // "lenient-option-parsing" + TOKEN_IGNORE_DHCP_SERVER_ID = 469, // "ignore-dhcp-server-identifier" + TOKEN_IGNORE_RAI_LINK_SEL = 470, // "ignore-rai-link-selection" + TOKEN_EXCLUDE_FIRST_LAST_24 = 471, // "exclude-first-last-24" + TOKEN_TOPLEVEL_JSON = 472, // TOPLEVEL_JSON + TOKEN_TOPLEVEL_DHCP4 = 473, // TOPLEVEL_DHCP4 + TOKEN_SUB_DHCP4 = 474, // SUB_DHCP4 + TOKEN_SUB_INTERFACES4 = 475, // SUB_INTERFACES4 + TOKEN_SUB_SUBNET4 = 476, // SUB_SUBNET4 + TOKEN_SUB_POOL4 = 477, // SUB_POOL4 + TOKEN_SUB_RESERVATION = 478, // SUB_RESERVATION + TOKEN_SUB_OPTION_DEFS = 479, // SUB_OPTION_DEFS + TOKEN_SUB_OPTION_DEF = 480, // SUB_OPTION_DEF + TOKEN_SUB_OPTION_DATA = 481, // SUB_OPTION_DATA + TOKEN_SUB_HOOKS_LIBRARY = 482, // SUB_HOOKS_LIBRARY + TOKEN_SUB_DHCP_DDNS = 483, // SUB_DHCP_DDNS + TOKEN_SUB_CONFIG_CONTROL = 484, // SUB_CONFIG_CONTROL + TOKEN_STRING = 485, // "constant string" + TOKEN_INTEGER = 486, // "integer" + TOKEN_FLOAT = 487, // "floating point" + TOKEN_BOOLEAN = 488 // "boolean" }; /// Backward compatibility alias (Bison 3.6). typedef token_kind_type yytokentype; @@ -744,7 +747,7 @@ namespace isc { namespace dhcp { { enum symbol_kind_type { - YYNTOKENS = 231, ///< Number of tokens. + YYNTOKENS = 234, ///< Number of tokens. S_YYEMPTY = -2, S_YYEOF = 0, // "end of file" S_YYerror = 1, // error @@ -833,628 +836,634 @@ namespace isc { namespace dhcp { S_DDNS_UPDATE_ON_RENEW = 84, // "ddns-update-on-renew" S_DDNS_USE_CONFLICT_RESOLUTION = 85, // "ddns-use-conflict-resolution" S_DDNS_TTL_PERCENT = 86, // "ddns-ttl-percent" - S_STORE_EXTENDED_INFO = 87, // "store-extended-info" - S_SUBNET4 = 88, // "subnet4" - S_SUBNET_4O6_INTERFACE = 89, // "4o6-interface" - S_SUBNET_4O6_INTERFACE_ID = 90, // "4o6-interface-id" - S_SUBNET_4O6_SUBNET = 91, // "4o6-subnet" - S_OPTION_DEF = 92, // "option-def" - S_OPTION_DATA = 93, // "option-data" - S_NAME = 94, // "name" - S_DATA = 95, // "data" - S_CODE = 96, // "code" - S_SPACE = 97, // "space" - S_CSV_FORMAT = 98, // "csv-format" - S_ALWAYS_SEND = 99, // "always-send" - S_NEVER_SEND = 100, // "never-send" - S_RECORD_TYPES = 101, // "record-types" - S_ENCAPSULATE = 102, // "encapsulate" - S_ARRAY = 103, // "array" - S_PARKED_PACKET_LIMIT = 104, // "parked-packet-limit" - S_ALLOCATOR = 105, // "allocator" - S_DDNS_CONFLICT_RESOLUTION_MODE = 106, // "ddns-conflict-resolution-mode" - S_CHECK_WITH_DHCID = 107, // "check-with-dhcid" - S_NO_CHECK_WITH_DHCID = 108, // "no-check-with-dhcid" - S_CHECK_EXISTS_WITH_DHCID = 109, // "check-exists-with-dhcid" - S_NO_CHECK_WITHOUT_DHCID = 110, // "no-check-without-dhcid" - S_SHARED_NETWORKS = 111, // "shared-networks" - S_POOLS = 112, // "pools" - S_POOL = 113, // "pool" - S_USER_CONTEXT = 114, // "user-context" - S_COMMENT = 115, // "comment" - S_SUBNET = 116, // "subnet" - S_INTERFACE = 117, // "interface" - S_ID = 118, // "id" - S_RESERVATIONS_GLOBAL = 119, // "reservations-global" - S_RESERVATIONS_IN_SUBNET = 120, // "reservations-in-subnet" - S_RESERVATIONS_OUT_OF_POOL = 121, // "reservations-out-of-pool" - S_HOST_RESERVATION_IDENTIFIERS = 122, // "host-reservation-identifiers" - S_CLIENT_CLASSES = 123, // "client-classes" - S_REQUIRE_CLIENT_CLASSES = 124, // "require-client-classes" - S_EVALUATE_ADDITIONAL_CLASSES = 125, // "evaluate-additional-classes" - S_TEST = 126, // "test" - S_TEMPLATE_TEST = 127, // "template-test" - S_ONLY_IF_REQUIRED = 128, // "only-if-required" - S_ONLY_IN_ADDITIONAL_LIST = 129, // "only-in-additional-list" - S_CLIENT_CLASS = 130, // "client-class" - S_POOL_ID = 131, // "pool-id" - S_RESERVATIONS = 132, // "reservations" - S_IP_ADDRESS = 133, // "ip-address" - S_DUID = 134, // "duid" - S_HW_ADDRESS = 135, // "hw-address" - S_CIRCUIT_ID = 136, // "circuit-id" - S_CLIENT_ID = 137, // "client-id" - S_HOSTNAME = 138, // "hostname" - S_FLEX_ID = 139, // "flex-id" - S_RELAY = 140, // "relay" - S_IP_ADDRESSES = 141, // "ip-addresses" - S_HOOKS_LIBRARIES = 142, // "hooks-libraries" - S_LIBRARY = 143, // "library" - S_PARAMETERS = 144, // "parameters" - S_EXPIRED_LEASES_PROCESSING = 145, // "expired-leases-processing" - S_RECLAIM_TIMER_WAIT_TIME = 146, // "reclaim-timer-wait-time" - S_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 147, // "flush-reclaimed-timer-wait-time" - S_HOLD_RECLAIMED_TIME = 148, // "hold-reclaimed-time" - S_MAX_RECLAIM_LEASES = 149, // "max-reclaim-leases" - S_MAX_RECLAIM_TIME = 150, // "max-reclaim-time" - S_UNWARNED_RECLAIM_CYCLES = 151, // "unwarned-reclaim-cycles" - S_DHCP4O6_PORT = 152, // "dhcp4o6-port" - S_DHCP_MULTI_THREADING = 153, // "multi-threading" - S_ENABLE_MULTI_THREADING = 154, // "enable-multi-threading" - S_THREAD_POOL_SIZE = 155, // "thread-pool-size" - S_PACKET_QUEUE_SIZE = 156, // "packet-queue-size" - S_CONTROL_SOCKET = 157, // "control-socket" - S_CONTROL_SOCKETS = 158, // "control-sockets" - S_SOCKET_TYPE = 159, // "socket-type" - S_UNIX = 160, // "unix" - S_HTTP = 161, // "http" - S_HTTPS = 162, // "https" - S_SOCKET_NAME = 163, // "socket-name" - S_SOCKET_ADDRESS = 164, // "socket-address" - S_SOCKET_PORT = 165, // "socket-port" - S_AUTHENTICATION = 166, // "authentication" - S_BASIC = 167, // "basic" - S_REALM = 168, // "realm" - S_DIRECTORY = 169, // "directory" - S_CLIENTS = 170, // "clients" - S_USER_FILE = 171, // "user-file" - S_PASSWORD_FILE = 172, // "password-file" - S_CERT_REQUIRED = 173, // "cert-required" - S_HTTP_HEADERS = 174, // "http-headers" - S_VALUE = 175, // "value" - S_DHCP_QUEUE_CONTROL = 176, // "dhcp-queue-control" - S_ENABLE_QUEUE = 177, // "enable-queue" - S_QUEUE_TYPE = 178, // "queue-type" - S_CAPACITY = 179, // "capacity" - S_DHCP_DDNS = 180, // "dhcp-ddns" - S_ENABLE_UPDATES = 181, // "enable-updates" - S_SERVER_IP = 182, // "server-ip" - S_SERVER_PORT = 183, // "server-port" - S_SENDER_IP = 184, // "sender-ip" - S_SENDER_PORT = 185, // "sender-port" - S_MAX_QUEUE_SIZE = 186, // "max-queue-size" - S_NCR_PROTOCOL = 187, // "ncr-protocol" - S_NCR_FORMAT = 188, // "ncr-format" - S_TCP = 189, // "tcp" - S_JSON = 190, // "JSON" - S_WHEN_PRESENT = 191, // "when-present" - S_NEVER = 192, // "never" - S_ALWAYS = 193, // "always" - S_WHEN_NOT_PRESENT = 194, // "when-not-present" - S_HOSTNAME_CHAR_SET = 195, // "hostname-char-set" - S_HOSTNAME_CHAR_REPLACEMENT = 196, // "hostname-char-replacement" - S_EARLY_GLOBAL_RESERVATIONS_LOOKUP = 197, // "early-global-reservations-lookup" - S_IP_RESERVATIONS_UNIQUE = 198, // "ip-reservations-unique" - S_RESERVATIONS_LOOKUP_FIRST = 199, // "reservations-lookup-first" - S_LOGGERS = 200, // "loggers" - S_OUTPUT_OPTIONS = 201, // "output-options" - S_OUTPUT = 202, // "output" - S_DEBUGLEVEL = 203, // "debuglevel" - S_SEVERITY = 204, // "severity" - S_FLUSH = 205, // "flush" - S_MAXSIZE = 206, // "maxsize" - S_MAXVER = 207, // "maxver" - S_PATTERN = 208, // "pattern" - S_COMPATIBILITY = 209, // "compatibility" - S_LENIENT_OPTION_PARSING = 210, // "lenient-option-parsing" - S_IGNORE_DHCP_SERVER_ID = 211, // "ignore-dhcp-server-identifier" - S_IGNORE_RAI_LINK_SEL = 212, // "ignore-rai-link-selection" - S_EXCLUDE_FIRST_LAST_24 = 213, // "exclude-first-last-24" - S_TOPLEVEL_JSON = 214, // TOPLEVEL_JSON - S_TOPLEVEL_DHCP4 = 215, // TOPLEVEL_DHCP4 - S_SUB_DHCP4 = 216, // SUB_DHCP4 - S_SUB_INTERFACES4 = 217, // SUB_INTERFACES4 - S_SUB_SUBNET4 = 218, // SUB_SUBNET4 - S_SUB_POOL4 = 219, // SUB_POOL4 - S_SUB_RESERVATION = 220, // SUB_RESERVATION - S_SUB_OPTION_DEFS = 221, // SUB_OPTION_DEFS - S_SUB_OPTION_DEF = 222, // SUB_OPTION_DEF - S_SUB_OPTION_DATA = 223, // SUB_OPTION_DATA - S_SUB_HOOKS_LIBRARY = 224, // SUB_HOOKS_LIBRARY - S_SUB_DHCP_DDNS = 225, // SUB_DHCP_DDNS - S_SUB_CONFIG_CONTROL = 226, // SUB_CONFIG_CONTROL - S_STRING = 227, // "constant string" - S_INTEGER = 228, // "integer" - S_FLOAT = 229, // "floating point" - S_BOOLEAN = 230, // "boolean" - S_YYACCEPT = 231, // $accept - S_start = 232, // start - S_233_1 = 233, // $@1 - S_234_2 = 234, // $@2 - S_235_3 = 235, // $@3 - S_236_4 = 236, // $@4 - S_237_5 = 237, // $@5 - S_238_6 = 238, // $@6 - S_239_7 = 239, // $@7 - S_240_8 = 240, // $@8 - S_241_9 = 241, // $@9 - S_242_10 = 242, // $@10 - S_243_11 = 243, // $@11 - S_244_12 = 244, // $@12 - S_245_13 = 245, // $@13 - S_value = 246, // value - S_sub_json = 247, // sub_json - S_map2 = 248, // map2 - S_249_14 = 249, // $@14 - S_map_value = 250, // map_value - S_map_content = 251, // map_content - S_not_empty_map = 252, // not_empty_map - S_list_generic = 253, // list_generic - S_254_15 = 254, // $@15 - S_list_content = 255, // list_content - S_not_empty_list = 256, // not_empty_list - S_list_strings = 257, // list_strings - S_258_16 = 258, // $@16 - S_list_strings_content = 259, // list_strings_content - S_not_empty_list_strings = 260, // not_empty_list_strings - S_unknown_map_entry = 261, // unknown_map_entry - S_syntax_map = 262, // syntax_map - S_263_17 = 263, // $@17 - S_global_object = 264, // global_object - S_265_18 = 265, // $@18 - S_global_object_comma = 266, // global_object_comma - S_sub_dhcp4 = 267, // sub_dhcp4 - S_268_19 = 268, // $@19 - S_global_params = 269, // global_params - S_global_param = 270, // global_param - S_valid_lifetime = 271, // valid_lifetime - S_min_valid_lifetime = 272, // min_valid_lifetime - S_max_valid_lifetime = 273, // max_valid_lifetime - S_renew_timer = 274, // renew_timer - S_rebind_timer = 275, // rebind_timer - S_calculate_tee_times = 276, // calculate_tee_times - S_t1_percent = 277, // t1_percent - S_t2_percent = 278, // t2_percent - S_cache_threshold = 279, // cache_threshold - S_cache_max_age = 280, // cache_max_age - S_decline_probation_period = 281, // decline_probation_period - S_server_tag = 282, // server_tag - S_283_20 = 283, // $@20 - S_parked_packet_limit = 284, // parked_packet_limit - S_allocator = 285, // allocator - S_286_21 = 286, // $@21 - S_echo_client_id = 287, // echo_client_id - S_match_client_id = 288, // match_client_id - S_authoritative = 289, // authoritative - S_ddns_send_updates = 290, // ddns_send_updates - S_ddns_override_no_update = 291, // ddns_override_no_update - S_ddns_override_client_update = 292, // ddns_override_client_update - S_ddns_replace_client_name = 293, // ddns_replace_client_name - S_294_22 = 294, // $@22 - S_ddns_replace_client_name_value = 295, // ddns_replace_client_name_value - S_ddns_generated_prefix = 296, // ddns_generated_prefix - S_297_23 = 297, // $@23 - S_ddns_qualifying_suffix = 298, // ddns_qualifying_suffix - S_299_24 = 299, // $@24 - S_ddns_update_on_renew = 300, // ddns_update_on_renew - S_ddns_use_conflict_resolution = 301, // ddns_use_conflict_resolution - S_ddns_conflict_resolution_mode = 302, // ddns_conflict_resolution_mode - S_303_25 = 303, // $@25 - S_ddns_conflict_resolution_mode_value = 304, // ddns_conflict_resolution_mode_value - S_ddns_ttl_percent = 305, // ddns_ttl_percent - S_hostname_char_set = 306, // hostname_char_set - S_307_26 = 307, // $@26 - S_hostname_char_replacement = 308, // hostname_char_replacement - S_309_27 = 309, // $@27 - S_store_extended_info = 310, // store_extended_info - S_statistic_default_sample_count = 311, // statistic_default_sample_count - S_statistic_default_sample_age = 312, // statistic_default_sample_age - S_early_global_reservations_lookup = 313, // early_global_reservations_lookup - S_ip_reservations_unique = 314, // ip_reservations_unique - S_reservations_lookup_first = 315, // reservations_lookup_first - S_offer_lifetime = 316, // offer_lifetime - S_stash_agent_options = 317, // stash_agent_options - S_interfaces_config = 318, // interfaces_config - S_319_28 = 319, // $@28 - S_interfaces_config_params = 320, // interfaces_config_params - S_interfaces_config_param = 321, // interfaces_config_param - S_sub_interfaces4 = 322, // sub_interfaces4 - S_323_29 = 323, // $@29 - S_interfaces_list = 324, // interfaces_list - S_325_30 = 325, // $@30 - S_dhcp_socket_type = 326, // dhcp_socket_type - S_327_31 = 327, // $@31 - S_socket_type = 328, // socket_type - S_outbound_interface = 329, // outbound_interface - S_330_32 = 330, // $@32 - S_outbound_interface_value = 331, // outbound_interface_value - S_re_detect = 332, // re_detect - S_service_sockets_require_all = 333, // service_sockets_require_all - S_service_sockets_retry_wait_time = 334, // service_sockets_retry_wait_time - S_service_sockets_max_retries = 335, // service_sockets_max_retries - S_lease_database = 336, // lease_database - S_337_33 = 337, // $@33 - S_sanity_checks = 338, // sanity_checks - S_339_34 = 339, // $@34 - S_sanity_checks_params = 340, // sanity_checks_params - S_sanity_checks_param = 341, // sanity_checks_param - S_lease_checks = 342, // lease_checks - S_343_35 = 343, // $@35 - S_extended_info_checks = 344, // extended_info_checks - S_345_36 = 345, // $@36 - S_hosts_database = 346, // hosts_database - S_347_37 = 347, // $@37 - S_hosts_databases = 348, // hosts_databases - S_349_38 = 349, // $@38 - S_database_list = 350, // database_list - S_not_empty_database_list = 351, // not_empty_database_list - S_database = 352, // database - S_353_39 = 353, // $@39 - S_database_map_params = 354, // database_map_params - S_database_map_param = 355, // database_map_param - S_database_type = 356, // database_type - S_357_40 = 357, // $@40 - S_user = 358, // user - S_359_41 = 359, // $@41 - S_password = 360, // password - S_361_42 = 361, // $@42 - S_host = 362, // host - S_363_43 = 363, // $@43 - S_port = 364, // port - S_name = 365, // name - S_366_44 = 366, // $@44 - S_persist = 367, // persist - S_lfc_interval = 368, // lfc_interval - S_readonly = 369, // readonly - S_connect_timeout = 370, // connect_timeout - S_read_timeout = 371, // read_timeout - S_write_timeout = 372, // write_timeout - S_tcp_user_timeout = 373, // tcp_user_timeout - S_max_reconnect_tries = 374, // max_reconnect_tries - S_reconnect_wait_time = 375, // reconnect_wait_time - S_on_fail = 376, // on_fail - S_377_45 = 377, // $@45 - S_on_fail_mode = 378, // on_fail_mode - S_retry_on_startup = 379, // retry_on_startup - S_max_row_errors = 380, // max_row_errors - S_trust_anchor = 381, // trust_anchor - S_382_46 = 382, // $@46 - S_cert_file = 383, // cert_file - S_384_47 = 384, // $@47 - S_key_file = 385, // key_file - S_386_48 = 386, // $@48 - S_cipher_list = 387, // cipher_list - S_388_49 = 388, // $@49 - S_host_reservation_identifiers = 389, // host_reservation_identifiers - S_390_50 = 390, // $@50 - S_host_reservation_identifiers_list = 391, // host_reservation_identifiers_list - S_host_reservation_identifier = 392, // host_reservation_identifier - S_duid_id = 393, // duid_id - S_hw_address_id = 394, // hw_address_id - S_circuit_id = 395, // circuit_id - S_client_id = 396, // client_id - S_flex_id = 397, // flex_id - S_dhcp_multi_threading = 398, // dhcp_multi_threading - S_399_51 = 399, // $@51 - S_multi_threading_params = 400, // multi_threading_params - S_multi_threading_param = 401, // multi_threading_param - S_enable_multi_threading = 402, // enable_multi_threading - S_thread_pool_size = 403, // thread_pool_size - S_packet_queue_size = 404, // packet_queue_size - S_hooks_libraries = 405, // hooks_libraries - S_406_52 = 406, // $@52 - S_hooks_libraries_list = 407, // hooks_libraries_list - S_not_empty_hooks_libraries_list = 408, // not_empty_hooks_libraries_list - S_hooks_library = 409, // hooks_library - S_410_53 = 410, // $@53 - S_sub_hooks_library = 411, // sub_hooks_library - S_412_54 = 412, // $@54 - S_hooks_params = 413, // hooks_params - S_hooks_param = 414, // hooks_param - S_library = 415, // library - S_416_55 = 416, // $@55 - S_parameters = 417, // parameters - S_418_56 = 418, // $@56 - S_expired_leases_processing = 419, // expired_leases_processing - S_420_57 = 420, // $@57 - S_expired_leases_params = 421, // expired_leases_params - S_expired_leases_param = 422, // expired_leases_param - S_reclaim_timer_wait_time = 423, // reclaim_timer_wait_time - S_flush_reclaimed_timer_wait_time = 424, // flush_reclaimed_timer_wait_time - S_hold_reclaimed_time = 425, // hold_reclaimed_time - S_max_reclaim_leases = 426, // max_reclaim_leases - S_max_reclaim_time = 427, // max_reclaim_time - S_unwarned_reclaim_cycles = 428, // unwarned_reclaim_cycles - S_subnet4_list = 429, // subnet4_list - S_430_58 = 430, // $@58 - S_subnet4_list_content = 431, // subnet4_list_content - S_not_empty_subnet4_list = 432, // not_empty_subnet4_list - S_subnet4 = 433, // subnet4 - S_434_59 = 434, // $@59 - S_sub_subnet4 = 435, // sub_subnet4 - S_436_60 = 436, // $@60 - S_subnet4_params = 437, // subnet4_params - S_subnet4_param = 438, // subnet4_param - S_subnet = 439, // subnet - S_440_61 = 440, // $@61 - S_subnet_4o6_interface = 441, // subnet_4o6_interface - S_442_62 = 442, // $@62 - S_subnet_4o6_interface_id = 443, // subnet_4o6_interface_id - S_444_63 = 444, // $@63 - S_subnet_4o6_subnet = 445, // subnet_4o6_subnet - S_446_64 = 446, // $@64 - S_interface = 447, // interface - S_448_65 = 448, // $@65 - S_client_class = 449, // client_class - S_450_66 = 450, // $@66 - S_network_client_classes = 451, // network_client_classes - S_452_67 = 452, // $@67 - S_require_client_classes = 453, // require_client_classes - S_454_68 = 454, // $@68 - S_evaluate_additional_classes = 455, // evaluate_additional_classes - S_456_69 = 456, // $@69 - S_reservations_global = 457, // reservations_global - S_reservations_in_subnet = 458, // reservations_in_subnet - S_reservations_out_of_pool = 459, // reservations_out_of_pool - S_id = 460, // id - S_shared_networks = 461, // shared_networks - S_462_70 = 462, // $@70 - S_shared_networks_content = 463, // shared_networks_content - S_shared_networks_list = 464, // shared_networks_list - S_shared_network = 465, // shared_network - S_466_71 = 466, // $@71 - S_shared_network_params = 467, // shared_network_params - S_shared_network_param = 468, // shared_network_param - S_option_def_list = 469, // option_def_list - S_470_72 = 470, // $@72 - S_sub_option_def_list = 471, // sub_option_def_list - S_472_73 = 472, // $@73 - S_option_def_list_content = 473, // option_def_list_content - S_not_empty_option_def_list = 474, // not_empty_option_def_list - S_option_def_entry = 475, // option_def_entry - S_476_74 = 476, // $@74 - S_sub_option_def = 477, // sub_option_def - S_478_75 = 478, // $@75 - S_option_def_params = 479, // option_def_params - S_not_empty_option_def_params = 480, // not_empty_option_def_params - S_option_def_param = 481, // option_def_param - S_option_def_name = 482, // option_def_name - S_code = 483, // code - S_option_def_code = 484, // option_def_code - S_option_def_type = 485, // option_def_type - S_486_76 = 486, // $@76 - S_option_def_record_types = 487, // option_def_record_types - S_488_77 = 488, // $@77 - S_space = 489, // space - S_490_78 = 490, // $@78 - S_option_def_space = 491, // option_def_space - S_option_def_encapsulate = 492, // option_def_encapsulate - S_493_79 = 493, // $@79 - S_option_def_array = 494, // option_def_array - S_option_data_list = 495, // option_data_list - S_496_80 = 496, // $@80 - S_option_data_list_content = 497, // option_data_list_content - S_not_empty_option_data_list = 498, // not_empty_option_data_list - S_option_data_entry = 499, // option_data_entry - S_500_81 = 500, // $@81 - S_sub_option_data = 501, // sub_option_data - S_502_82 = 502, // $@82 - S_option_data_params = 503, // option_data_params - S_not_empty_option_data_params = 504, // not_empty_option_data_params - S_option_data_param = 505, // option_data_param - S_option_data_name = 506, // option_data_name - S_option_data_data = 507, // option_data_data - S_508_83 = 508, // $@83 - S_option_data_code = 509, // option_data_code - S_option_data_space = 510, // option_data_space - S_option_data_csv_format = 511, // option_data_csv_format - S_option_data_always_send = 512, // option_data_always_send - S_option_data_never_send = 513, // option_data_never_send - S_option_data_client_classes = 514, // option_data_client_classes - S_515_84 = 515, // $@84 - S_pools_list = 516, // pools_list - S_517_85 = 517, // $@85 - S_pools_list_content = 518, // pools_list_content - S_not_empty_pools_list = 519, // not_empty_pools_list - S_pool_list_entry = 520, // pool_list_entry - S_521_86 = 521, // $@86 - S_sub_pool4 = 522, // sub_pool4 - S_523_87 = 523, // $@87 - S_pool_params = 524, // pool_params - S_pool_param = 525, // pool_param - S_pool_entry = 526, // pool_entry - S_527_88 = 527, // $@88 - S_pool_id = 528, // pool_id - S_user_context = 529, // user_context - S_530_89 = 530, // $@89 - S_comment = 531, // comment - S_532_90 = 532, // $@90 - S_reservations = 533, // reservations - S_534_91 = 534, // $@91 - S_reservations_list = 535, // reservations_list - S_not_empty_reservations_list = 536, // not_empty_reservations_list - S_reservation = 537, // reservation - S_538_92 = 538, // $@92 - S_sub_reservation = 539, // sub_reservation - S_540_93 = 540, // $@93 - S_reservation_params = 541, // reservation_params - S_not_empty_reservation_params = 542, // not_empty_reservation_params - S_reservation_param = 543, // reservation_param - S_next_server = 544, // next_server - S_545_94 = 545, // $@94 - S_server_hostname = 546, // server_hostname - S_547_95 = 547, // $@95 - S_boot_file_name = 548, // boot_file_name - S_549_96 = 549, // $@96 - S_ip_address = 550, // ip_address - S_551_97 = 551, // $@97 - S_duid = 552, // duid - S_553_98 = 553, // $@98 - S_hw_address = 554, // hw_address - S_555_99 = 555, // $@99 - S_client_id_value = 556, // client_id_value - S_557_100 = 557, // $@100 - S_circuit_id_value = 558, // circuit_id_value - S_559_101 = 559, // $@101 - S_flex_id_value = 560, // flex_id_value - S_561_102 = 561, // $@102 - S_hostname = 562, // hostname - S_563_103 = 563, // $@103 - S_reservation_client_classes = 564, // reservation_client_classes - S_565_104 = 565, // $@104 - S_relay = 566, // relay - S_567_105 = 567, // $@105 - S_relay_map = 568, // relay_map - S_ip_addresses = 569, // ip_addresses - S_570_106 = 570, // $@106 - S_client_classes = 571, // client_classes - S_572_107 = 572, // $@107 - S_client_classes_list = 573, // client_classes_list - S_client_class_entry = 574, // client_class_entry - S_575_108 = 575, // $@108 - S_client_class_params = 576, // client_class_params - S_not_empty_client_class_params = 577, // not_empty_client_class_params - S_client_class_param = 578, // client_class_param - S_client_class_name = 579, // client_class_name - S_client_class_test = 580, // client_class_test - S_581_109 = 581, // $@109 - S_client_class_template_test = 582, // client_class_template_test - S_583_110 = 583, // $@110 - S_only_if_required = 584, // only_if_required - S_only_in_additional_list = 585, // only_in_additional_list - S_dhcp4o6_port = 586, // dhcp4o6_port - S_control_socket = 587, // control_socket - S_588_111 = 588, // $@111 - S_control_sockets = 589, // control_sockets - S_590_112 = 590, // $@112 - S_control_socket_list = 591, // control_socket_list - S_not_empty_control_socket_list = 592, // not_empty_control_socket_list - S_control_socket_entry = 593, // control_socket_entry - S_594_113 = 594, // $@113 - S_control_socket_params = 595, // control_socket_params - S_control_socket_param = 596, // control_socket_param - S_control_socket_type = 597, // control_socket_type - S_598_114 = 598, // $@114 - S_control_socket_type_value = 599, // control_socket_type_value - S_control_socket_name = 600, // control_socket_name - S_601_115 = 601, // $@115 - S_control_socket_address = 602, // control_socket_address - S_603_116 = 603, // $@116 - S_control_socket_port = 604, // control_socket_port - S_cert_required = 605, // cert_required - S_http_headers = 606, // http_headers - S_607_117 = 607, // $@117 - S_http_header_list = 608, // http_header_list - S_not_empty_http_header_list = 609, // not_empty_http_header_list - S_http_header = 610, // http_header - S_611_118 = 611, // $@118 - S_http_header_params = 612, // http_header_params - S_http_header_param = 613, // http_header_param - S_header_value = 614, // header_value - S_615_119 = 615, // $@119 - S_authentication = 616, // authentication - S_617_120 = 617, // $@120 - S_auth_params = 618, // auth_params - S_auth_param = 619, // auth_param - S_auth_type = 620, // auth_type - S_621_121 = 621, // $@121 - S_auth_type_value = 622, // auth_type_value - S_realm = 623, // realm - S_624_122 = 624, // $@122 - S_directory = 625, // directory - S_626_123 = 626, // $@123 - S_clients = 627, // clients - S_628_124 = 628, // $@124 - S_clients_list = 629, // clients_list - S_not_empty_clients_list = 630, // not_empty_clients_list - S_basic_auth = 631, // basic_auth - S_632_125 = 632, // $@125 - S_clients_params = 633, // clients_params - S_clients_param = 634, // clients_param - S_user_file = 635, // user_file - S_636_126 = 636, // $@126 - S_password_file = 637, // password_file - S_638_127 = 638, // $@127 - S_dhcp_queue_control = 639, // dhcp_queue_control - S_640_128 = 640, // $@128 - S_queue_control_params = 641, // queue_control_params - S_queue_control_param = 642, // queue_control_param - S_enable_queue = 643, // enable_queue - S_queue_type = 644, // queue_type - S_645_129 = 645, // $@129 - S_capacity = 646, // capacity - S_arbitrary_map_entry = 647, // arbitrary_map_entry - S_648_130 = 648, // $@130 - S_dhcp_ddns = 649, // dhcp_ddns - S_650_131 = 650, // $@131 - S_sub_dhcp_ddns = 651, // sub_dhcp_ddns - S_652_132 = 652, // $@132 - S_dhcp_ddns_params = 653, // dhcp_ddns_params - S_dhcp_ddns_param = 654, // dhcp_ddns_param - S_enable_updates = 655, // enable_updates - S_server_ip = 656, // server_ip - S_657_133 = 657, // $@133 - S_server_port = 658, // server_port - S_sender_ip = 659, // sender_ip - S_660_134 = 660, // $@134 - S_sender_port = 661, // sender_port - S_max_queue_size = 662, // max_queue_size - S_ncr_protocol = 663, // ncr_protocol - S_664_135 = 664, // $@135 - S_ncr_protocol_value = 665, // ncr_protocol_value - S_ncr_format = 666, // ncr_format - S_667_136 = 667, // $@136 - S_config_control = 668, // config_control - S_669_137 = 669, // $@137 - S_sub_config_control = 670, // sub_config_control - S_671_138 = 671, // $@138 - S_config_control_params = 672, // config_control_params - S_config_control_param = 673, // config_control_param - S_config_databases = 674, // config_databases - S_675_139 = 675, // $@139 - S_config_fetch_wait_time = 676, // config_fetch_wait_time - S_loggers = 677, // loggers - S_678_140 = 678, // $@140 - S_loggers_entries = 679, // loggers_entries - S_logger_entry = 680, // logger_entry - S_681_141 = 681, // $@141 - S_logger_params = 682, // logger_params - S_logger_param = 683, // logger_param - S_debuglevel = 684, // debuglevel - S_severity = 685, // severity - S_686_142 = 686, // $@142 - S_output_options_list = 687, // output_options_list - S_688_143 = 688, // $@143 - S_output_options_list_content = 689, // output_options_list_content - S_output_entry = 690, // output_entry - S_691_144 = 691, // $@144 - S_output_params_list = 692, // output_params_list - S_output_params = 693, // output_params - S_output = 694, // output - S_695_145 = 695, // $@145 - S_flush = 696, // flush - S_maxsize = 697, // maxsize - S_maxver = 698, // maxver - S_pattern = 699, // pattern - S_700_146 = 700, // $@146 - S_compatibility = 701, // compatibility - S_702_147 = 702, // $@147 - S_compatibility_params = 703, // compatibility_params - S_compatibility_param = 704, // compatibility_param - S_lenient_option_parsing = 705, // lenient_option_parsing - S_ignore_dhcp_server_identifier = 706, // ignore_dhcp_server_identifier - S_ignore_rai_link_selection = 707, // ignore_rai_link_selection - S_exclude_first_last_24 = 708 // exclude_first_last_24 + S_DDNS_TTL = 87, // "ddns-ttl" + S_DDNS_TTL_MIN = 88, // "ddns-ttl-min" + S_DDNS_TTL_MAX = 89, // "ddns-ttl-mix" + S_STORE_EXTENDED_INFO = 90, // "store-extended-info" + S_SUBNET4 = 91, // "subnet4" + S_SUBNET_4O6_INTERFACE = 92, // "4o6-interface" + S_SUBNET_4O6_INTERFACE_ID = 93, // "4o6-interface-id" + S_SUBNET_4O6_SUBNET = 94, // "4o6-subnet" + S_OPTION_DEF = 95, // "option-def" + S_OPTION_DATA = 96, // "option-data" + S_NAME = 97, // "name" + S_DATA = 98, // "data" + S_CODE = 99, // "code" + S_SPACE = 100, // "space" + S_CSV_FORMAT = 101, // "csv-format" + S_ALWAYS_SEND = 102, // "always-send" + S_NEVER_SEND = 103, // "never-send" + S_RECORD_TYPES = 104, // "record-types" + S_ENCAPSULATE = 105, // "encapsulate" + S_ARRAY = 106, // "array" + S_PARKED_PACKET_LIMIT = 107, // "parked-packet-limit" + S_ALLOCATOR = 108, // "allocator" + S_DDNS_CONFLICT_RESOLUTION_MODE = 109, // "ddns-conflict-resolution-mode" + S_CHECK_WITH_DHCID = 110, // "check-with-dhcid" + S_NO_CHECK_WITH_DHCID = 111, // "no-check-with-dhcid" + S_CHECK_EXISTS_WITH_DHCID = 112, // "check-exists-with-dhcid" + S_NO_CHECK_WITHOUT_DHCID = 113, // "no-check-without-dhcid" + S_SHARED_NETWORKS = 114, // "shared-networks" + S_POOLS = 115, // "pools" + S_POOL = 116, // "pool" + S_USER_CONTEXT = 117, // "user-context" + S_COMMENT = 118, // "comment" + S_SUBNET = 119, // "subnet" + S_INTERFACE = 120, // "interface" + S_ID = 121, // "id" + S_RESERVATIONS_GLOBAL = 122, // "reservations-global" + S_RESERVATIONS_IN_SUBNET = 123, // "reservations-in-subnet" + S_RESERVATIONS_OUT_OF_POOL = 124, // "reservations-out-of-pool" + S_HOST_RESERVATION_IDENTIFIERS = 125, // "host-reservation-identifiers" + S_CLIENT_CLASSES = 126, // "client-classes" + S_REQUIRE_CLIENT_CLASSES = 127, // "require-client-classes" + S_EVALUATE_ADDITIONAL_CLASSES = 128, // "evaluate-additional-classes" + S_TEST = 129, // "test" + S_TEMPLATE_TEST = 130, // "template-test" + S_ONLY_IF_REQUIRED = 131, // "only-if-required" + S_ONLY_IN_ADDITIONAL_LIST = 132, // "only-in-additional-list" + S_CLIENT_CLASS = 133, // "client-class" + S_POOL_ID = 134, // "pool-id" + S_RESERVATIONS = 135, // "reservations" + S_IP_ADDRESS = 136, // "ip-address" + S_DUID = 137, // "duid" + S_HW_ADDRESS = 138, // "hw-address" + S_CIRCUIT_ID = 139, // "circuit-id" + S_CLIENT_ID = 140, // "client-id" + S_HOSTNAME = 141, // "hostname" + S_FLEX_ID = 142, // "flex-id" + S_RELAY = 143, // "relay" + S_IP_ADDRESSES = 144, // "ip-addresses" + S_HOOKS_LIBRARIES = 145, // "hooks-libraries" + S_LIBRARY = 146, // "library" + S_PARAMETERS = 147, // "parameters" + S_EXPIRED_LEASES_PROCESSING = 148, // "expired-leases-processing" + S_RECLAIM_TIMER_WAIT_TIME = 149, // "reclaim-timer-wait-time" + S_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 150, // "flush-reclaimed-timer-wait-time" + S_HOLD_RECLAIMED_TIME = 151, // "hold-reclaimed-time" + S_MAX_RECLAIM_LEASES = 152, // "max-reclaim-leases" + S_MAX_RECLAIM_TIME = 153, // "max-reclaim-time" + S_UNWARNED_RECLAIM_CYCLES = 154, // "unwarned-reclaim-cycles" + S_DHCP4O6_PORT = 155, // "dhcp4o6-port" + S_DHCP_MULTI_THREADING = 156, // "multi-threading" + S_ENABLE_MULTI_THREADING = 157, // "enable-multi-threading" + S_THREAD_POOL_SIZE = 158, // "thread-pool-size" + S_PACKET_QUEUE_SIZE = 159, // "packet-queue-size" + S_CONTROL_SOCKET = 160, // "control-socket" + S_CONTROL_SOCKETS = 161, // "control-sockets" + S_SOCKET_TYPE = 162, // "socket-type" + S_UNIX = 163, // "unix" + S_HTTP = 164, // "http" + S_HTTPS = 165, // "https" + S_SOCKET_NAME = 166, // "socket-name" + S_SOCKET_ADDRESS = 167, // "socket-address" + S_SOCKET_PORT = 168, // "socket-port" + S_AUTHENTICATION = 169, // "authentication" + S_BASIC = 170, // "basic" + S_REALM = 171, // "realm" + S_DIRECTORY = 172, // "directory" + S_CLIENTS = 173, // "clients" + S_USER_FILE = 174, // "user-file" + S_PASSWORD_FILE = 175, // "password-file" + S_CERT_REQUIRED = 176, // "cert-required" + S_HTTP_HEADERS = 177, // "http-headers" + S_VALUE = 178, // "value" + S_DHCP_QUEUE_CONTROL = 179, // "dhcp-queue-control" + S_ENABLE_QUEUE = 180, // "enable-queue" + S_QUEUE_TYPE = 181, // "queue-type" + S_CAPACITY = 182, // "capacity" + S_DHCP_DDNS = 183, // "dhcp-ddns" + S_ENABLE_UPDATES = 184, // "enable-updates" + S_SERVER_IP = 185, // "server-ip" + S_SERVER_PORT = 186, // "server-port" + S_SENDER_IP = 187, // "sender-ip" + S_SENDER_PORT = 188, // "sender-port" + S_MAX_QUEUE_SIZE = 189, // "max-queue-size" + S_NCR_PROTOCOL = 190, // "ncr-protocol" + S_NCR_FORMAT = 191, // "ncr-format" + S_TCP = 192, // "tcp" + S_JSON = 193, // "JSON" + S_WHEN_PRESENT = 194, // "when-present" + S_NEVER = 195, // "never" + S_ALWAYS = 196, // "always" + S_WHEN_NOT_PRESENT = 197, // "when-not-present" + S_HOSTNAME_CHAR_SET = 198, // "hostname-char-set" + S_HOSTNAME_CHAR_REPLACEMENT = 199, // "hostname-char-replacement" + S_EARLY_GLOBAL_RESERVATIONS_LOOKUP = 200, // "early-global-reservations-lookup" + S_IP_RESERVATIONS_UNIQUE = 201, // "ip-reservations-unique" + S_RESERVATIONS_LOOKUP_FIRST = 202, // "reservations-lookup-first" + S_LOGGERS = 203, // "loggers" + S_OUTPUT_OPTIONS = 204, // "output-options" + S_OUTPUT = 205, // "output" + S_DEBUGLEVEL = 206, // "debuglevel" + S_SEVERITY = 207, // "severity" + S_FLUSH = 208, // "flush" + S_MAXSIZE = 209, // "maxsize" + S_MAXVER = 210, // "maxver" + S_PATTERN = 211, // "pattern" + S_COMPATIBILITY = 212, // "compatibility" + S_LENIENT_OPTION_PARSING = 213, // "lenient-option-parsing" + S_IGNORE_DHCP_SERVER_ID = 214, // "ignore-dhcp-server-identifier" + S_IGNORE_RAI_LINK_SEL = 215, // "ignore-rai-link-selection" + S_EXCLUDE_FIRST_LAST_24 = 216, // "exclude-first-last-24" + S_TOPLEVEL_JSON = 217, // TOPLEVEL_JSON + S_TOPLEVEL_DHCP4 = 218, // TOPLEVEL_DHCP4 + S_SUB_DHCP4 = 219, // SUB_DHCP4 + S_SUB_INTERFACES4 = 220, // SUB_INTERFACES4 + S_SUB_SUBNET4 = 221, // SUB_SUBNET4 + S_SUB_POOL4 = 222, // SUB_POOL4 + S_SUB_RESERVATION = 223, // SUB_RESERVATION + S_SUB_OPTION_DEFS = 224, // SUB_OPTION_DEFS + S_SUB_OPTION_DEF = 225, // SUB_OPTION_DEF + S_SUB_OPTION_DATA = 226, // SUB_OPTION_DATA + S_SUB_HOOKS_LIBRARY = 227, // SUB_HOOKS_LIBRARY + S_SUB_DHCP_DDNS = 228, // SUB_DHCP_DDNS + S_SUB_CONFIG_CONTROL = 229, // SUB_CONFIG_CONTROL + S_STRING = 230, // "constant string" + S_INTEGER = 231, // "integer" + S_FLOAT = 232, // "floating point" + S_BOOLEAN = 233, // "boolean" + S_YYACCEPT = 234, // $accept + S_start = 235, // start + S_236_1 = 236, // $@1 + S_237_2 = 237, // $@2 + S_238_3 = 238, // $@3 + S_239_4 = 239, // $@4 + S_240_5 = 240, // $@5 + S_241_6 = 241, // $@6 + S_242_7 = 242, // $@7 + S_243_8 = 243, // $@8 + S_244_9 = 244, // $@9 + S_245_10 = 245, // $@10 + S_246_11 = 246, // $@11 + S_247_12 = 247, // $@12 + S_248_13 = 248, // $@13 + S_value = 249, // value + S_sub_json = 250, // sub_json + S_map2 = 251, // map2 + S_252_14 = 252, // $@14 + S_map_value = 253, // map_value + S_map_content = 254, // map_content + S_not_empty_map = 255, // not_empty_map + S_list_generic = 256, // list_generic + S_257_15 = 257, // $@15 + S_list_content = 258, // list_content + S_not_empty_list = 259, // not_empty_list + S_list_strings = 260, // list_strings + S_261_16 = 261, // $@16 + S_list_strings_content = 262, // list_strings_content + S_not_empty_list_strings = 263, // not_empty_list_strings + S_unknown_map_entry = 264, // unknown_map_entry + S_syntax_map = 265, // syntax_map + S_266_17 = 266, // $@17 + S_global_object = 267, // global_object + S_268_18 = 268, // $@18 + S_global_object_comma = 269, // global_object_comma + S_sub_dhcp4 = 270, // sub_dhcp4 + S_271_19 = 271, // $@19 + S_global_params = 272, // global_params + S_global_param = 273, // global_param + S_valid_lifetime = 274, // valid_lifetime + S_min_valid_lifetime = 275, // min_valid_lifetime + S_max_valid_lifetime = 276, // max_valid_lifetime + S_renew_timer = 277, // renew_timer + S_rebind_timer = 278, // rebind_timer + S_calculate_tee_times = 279, // calculate_tee_times + S_t1_percent = 280, // t1_percent + S_t2_percent = 281, // t2_percent + S_cache_threshold = 282, // cache_threshold + S_cache_max_age = 283, // cache_max_age + S_decline_probation_period = 284, // decline_probation_period + S_server_tag = 285, // server_tag + S_286_20 = 286, // $@20 + S_parked_packet_limit = 287, // parked_packet_limit + S_allocator = 288, // allocator + S_289_21 = 289, // $@21 + S_echo_client_id = 290, // echo_client_id + S_match_client_id = 291, // match_client_id + S_authoritative = 292, // authoritative + S_ddns_send_updates = 293, // ddns_send_updates + S_ddns_override_no_update = 294, // ddns_override_no_update + S_ddns_override_client_update = 295, // ddns_override_client_update + S_ddns_replace_client_name = 296, // ddns_replace_client_name + S_297_22 = 297, // $@22 + S_ddns_replace_client_name_value = 298, // ddns_replace_client_name_value + S_ddns_generated_prefix = 299, // ddns_generated_prefix + S_300_23 = 300, // $@23 + S_ddns_qualifying_suffix = 301, // ddns_qualifying_suffix + S_302_24 = 302, // $@24 + S_ddns_update_on_renew = 303, // ddns_update_on_renew + S_ddns_use_conflict_resolution = 304, // ddns_use_conflict_resolution + S_ddns_conflict_resolution_mode = 305, // ddns_conflict_resolution_mode + S_306_25 = 306, // $@25 + S_ddns_conflict_resolution_mode_value = 307, // ddns_conflict_resolution_mode_value + S_ddns_ttl_percent = 308, // ddns_ttl_percent + S_ddns_ttl = 309, // ddns_ttl + S_ddns_ttl_min = 310, // ddns_ttl_min + S_ddns_ttl_max = 311, // ddns_ttl_max + S_hostname_char_set = 312, // hostname_char_set + S_313_26 = 313, // $@26 + S_hostname_char_replacement = 314, // hostname_char_replacement + S_315_27 = 315, // $@27 + S_store_extended_info = 316, // store_extended_info + S_statistic_default_sample_count = 317, // statistic_default_sample_count + S_statistic_default_sample_age = 318, // statistic_default_sample_age + S_early_global_reservations_lookup = 319, // early_global_reservations_lookup + S_ip_reservations_unique = 320, // ip_reservations_unique + S_reservations_lookup_first = 321, // reservations_lookup_first + S_offer_lifetime = 322, // offer_lifetime + S_stash_agent_options = 323, // stash_agent_options + S_interfaces_config = 324, // interfaces_config + S_325_28 = 325, // $@28 + S_interfaces_config_params = 326, // interfaces_config_params + S_interfaces_config_param = 327, // interfaces_config_param + S_sub_interfaces4 = 328, // sub_interfaces4 + S_329_29 = 329, // $@29 + S_interfaces_list = 330, // interfaces_list + S_331_30 = 331, // $@30 + S_dhcp_socket_type = 332, // dhcp_socket_type + S_333_31 = 333, // $@31 + S_socket_type = 334, // socket_type + S_outbound_interface = 335, // outbound_interface + S_336_32 = 336, // $@32 + S_outbound_interface_value = 337, // outbound_interface_value + S_re_detect = 338, // re_detect + S_service_sockets_require_all = 339, // service_sockets_require_all + S_service_sockets_retry_wait_time = 340, // service_sockets_retry_wait_time + S_service_sockets_max_retries = 341, // service_sockets_max_retries + S_lease_database = 342, // lease_database + S_343_33 = 343, // $@33 + S_sanity_checks = 344, // sanity_checks + S_345_34 = 345, // $@34 + S_sanity_checks_params = 346, // sanity_checks_params + S_sanity_checks_param = 347, // sanity_checks_param + S_lease_checks = 348, // lease_checks + S_349_35 = 349, // $@35 + S_extended_info_checks = 350, // extended_info_checks + S_351_36 = 351, // $@36 + S_hosts_database = 352, // hosts_database + S_353_37 = 353, // $@37 + S_hosts_databases = 354, // hosts_databases + S_355_38 = 355, // $@38 + S_database_list = 356, // database_list + S_not_empty_database_list = 357, // not_empty_database_list + S_database = 358, // database + S_359_39 = 359, // $@39 + S_database_map_params = 360, // database_map_params + S_database_map_param = 361, // database_map_param + S_database_type = 362, // database_type + S_363_40 = 363, // $@40 + S_user = 364, // user + S_365_41 = 365, // $@41 + S_password = 366, // password + S_367_42 = 367, // $@42 + S_host = 368, // host + S_369_43 = 369, // $@43 + S_port = 370, // port + S_name = 371, // name + S_372_44 = 372, // $@44 + S_persist = 373, // persist + S_lfc_interval = 374, // lfc_interval + S_readonly = 375, // readonly + S_connect_timeout = 376, // connect_timeout + S_read_timeout = 377, // read_timeout + S_write_timeout = 378, // write_timeout + S_tcp_user_timeout = 379, // tcp_user_timeout + S_max_reconnect_tries = 380, // max_reconnect_tries + S_reconnect_wait_time = 381, // reconnect_wait_time + S_on_fail = 382, // on_fail + S_383_45 = 383, // $@45 + S_on_fail_mode = 384, // on_fail_mode + S_retry_on_startup = 385, // retry_on_startup + S_max_row_errors = 386, // max_row_errors + S_trust_anchor = 387, // trust_anchor + S_388_46 = 388, // $@46 + S_cert_file = 389, // cert_file + S_390_47 = 390, // $@47 + S_key_file = 391, // key_file + S_392_48 = 392, // $@48 + S_cipher_list = 393, // cipher_list + S_394_49 = 394, // $@49 + S_host_reservation_identifiers = 395, // host_reservation_identifiers + S_396_50 = 396, // $@50 + S_host_reservation_identifiers_list = 397, // host_reservation_identifiers_list + S_host_reservation_identifier = 398, // host_reservation_identifier + S_duid_id = 399, // duid_id + S_hw_address_id = 400, // hw_address_id + S_circuit_id = 401, // circuit_id + S_client_id = 402, // client_id + S_flex_id = 403, // flex_id + S_dhcp_multi_threading = 404, // dhcp_multi_threading + S_405_51 = 405, // $@51 + S_multi_threading_params = 406, // multi_threading_params + S_multi_threading_param = 407, // multi_threading_param + S_enable_multi_threading = 408, // enable_multi_threading + S_thread_pool_size = 409, // thread_pool_size + S_packet_queue_size = 410, // packet_queue_size + S_hooks_libraries = 411, // hooks_libraries + S_412_52 = 412, // $@52 + S_hooks_libraries_list = 413, // hooks_libraries_list + S_not_empty_hooks_libraries_list = 414, // not_empty_hooks_libraries_list + S_hooks_library = 415, // hooks_library + S_416_53 = 416, // $@53 + S_sub_hooks_library = 417, // sub_hooks_library + S_418_54 = 418, // $@54 + S_hooks_params = 419, // hooks_params + S_hooks_param = 420, // hooks_param + S_library = 421, // library + S_422_55 = 422, // $@55 + S_parameters = 423, // parameters + S_424_56 = 424, // $@56 + S_expired_leases_processing = 425, // expired_leases_processing + S_426_57 = 426, // $@57 + S_expired_leases_params = 427, // expired_leases_params + S_expired_leases_param = 428, // expired_leases_param + S_reclaim_timer_wait_time = 429, // reclaim_timer_wait_time + S_flush_reclaimed_timer_wait_time = 430, // flush_reclaimed_timer_wait_time + S_hold_reclaimed_time = 431, // hold_reclaimed_time + S_max_reclaim_leases = 432, // max_reclaim_leases + S_max_reclaim_time = 433, // max_reclaim_time + S_unwarned_reclaim_cycles = 434, // unwarned_reclaim_cycles + S_subnet4_list = 435, // subnet4_list + S_436_58 = 436, // $@58 + S_subnet4_list_content = 437, // subnet4_list_content + S_not_empty_subnet4_list = 438, // not_empty_subnet4_list + S_subnet4 = 439, // subnet4 + S_440_59 = 440, // $@59 + S_sub_subnet4 = 441, // sub_subnet4 + S_442_60 = 442, // $@60 + S_subnet4_params = 443, // subnet4_params + S_subnet4_param = 444, // subnet4_param + S_subnet = 445, // subnet + S_446_61 = 446, // $@61 + S_subnet_4o6_interface = 447, // subnet_4o6_interface + S_448_62 = 448, // $@62 + S_subnet_4o6_interface_id = 449, // subnet_4o6_interface_id + S_450_63 = 450, // $@63 + S_subnet_4o6_subnet = 451, // subnet_4o6_subnet + S_452_64 = 452, // $@64 + S_interface = 453, // interface + S_454_65 = 454, // $@65 + S_client_class = 455, // client_class + S_456_66 = 456, // $@66 + S_network_client_classes = 457, // network_client_classes + S_458_67 = 458, // $@67 + S_require_client_classes = 459, // require_client_classes + S_460_68 = 460, // $@68 + S_evaluate_additional_classes = 461, // evaluate_additional_classes + S_462_69 = 462, // $@69 + S_reservations_global = 463, // reservations_global + S_reservations_in_subnet = 464, // reservations_in_subnet + S_reservations_out_of_pool = 465, // reservations_out_of_pool + S_id = 466, // id + S_shared_networks = 467, // shared_networks + S_468_70 = 468, // $@70 + S_shared_networks_content = 469, // shared_networks_content + S_shared_networks_list = 470, // shared_networks_list + S_shared_network = 471, // shared_network + S_472_71 = 472, // $@71 + S_shared_network_params = 473, // shared_network_params + S_shared_network_param = 474, // shared_network_param + S_option_def_list = 475, // option_def_list + S_476_72 = 476, // $@72 + S_sub_option_def_list = 477, // sub_option_def_list + S_478_73 = 478, // $@73 + S_option_def_list_content = 479, // option_def_list_content + S_not_empty_option_def_list = 480, // not_empty_option_def_list + S_option_def_entry = 481, // option_def_entry + S_482_74 = 482, // $@74 + S_sub_option_def = 483, // sub_option_def + S_484_75 = 484, // $@75 + S_option_def_params = 485, // option_def_params + S_not_empty_option_def_params = 486, // not_empty_option_def_params + S_option_def_param = 487, // option_def_param + S_option_def_name = 488, // option_def_name + S_code = 489, // code + S_option_def_code = 490, // option_def_code + S_option_def_type = 491, // option_def_type + S_492_76 = 492, // $@76 + S_option_def_record_types = 493, // option_def_record_types + S_494_77 = 494, // $@77 + S_space = 495, // space + S_496_78 = 496, // $@78 + S_option_def_space = 497, // option_def_space + S_option_def_encapsulate = 498, // option_def_encapsulate + S_499_79 = 499, // $@79 + S_option_def_array = 500, // option_def_array + S_option_data_list = 501, // option_data_list + S_502_80 = 502, // $@80 + S_option_data_list_content = 503, // option_data_list_content + S_not_empty_option_data_list = 504, // not_empty_option_data_list + S_option_data_entry = 505, // option_data_entry + S_506_81 = 506, // $@81 + S_sub_option_data = 507, // sub_option_data + S_508_82 = 508, // $@82 + S_option_data_params = 509, // option_data_params + S_not_empty_option_data_params = 510, // not_empty_option_data_params + S_option_data_param = 511, // option_data_param + S_option_data_name = 512, // option_data_name + S_option_data_data = 513, // option_data_data + S_514_83 = 514, // $@83 + S_option_data_code = 515, // option_data_code + S_option_data_space = 516, // option_data_space + S_option_data_csv_format = 517, // option_data_csv_format + S_option_data_always_send = 518, // option_data_always_send + S_option_data_never_send = 519, // option_data_never_send + S_option_data_client_classes = 520, // option_data_client_classes + S_521_84 = 521, // $@84 + S_pools_list = 522, // pools_list + S_523_85 = 523, // $@85 + S_pools_list_content = 524, // pools_list_content + S_not_empty_pools_list = 525, // not_empty_pools_list + S_pool_list_entry = 526, // pool_list_entry + S_527_86 = 527, // $@86 + S_sub_pool4 = 528, // sub_pool4 + S_529_87 = 529, // $@87 + S_pool_params = 530, // pool_params + S_pool_param = 531, // pool_param + S_pool_entry = 532, // pool_entry + S_533_88 = 533, // $@88 + S_pool_id = 534, // pool_id + S_user_context = 535, // user_context + S_536_89 = 536, // $@89 + S_comment = 537, // comment + S_538_90 = 538, // $@90 + S_reservations = 539, // reservations + S_540_91 = 540, // $@91 + S_reservations_list = 541, // reservations_list + S_not_empty_reservations_list = 542, // not_empty_reservations_list + S_reservation = 543, // reservation + S_544_92 = 544, // $@92 + S_sub_reservation = 545, // sub_reservation + S_546_93 = 546, // $@93 + S_reservation_params = 547, // reservation_params + S_not_empty_reservation_params = 548, // not_empty_reservation_params + S_reservation_param = 549, // reservation_param + S_next_server = 550, // next_server + S_551_94 = 551, // $@94 + S_server_hostname = 552, // server_hostname + S_553_95 = 553, // $@95 + S_boot_file_name = 554, // boot_file_name + S_555_96 = 555, // $@96 + S_ip_address = 556, // ip_address + S_557_97 = 557, // $@97 + S_duid = 558, // duid + S_559_98 = 559, // $@98 + S_hw_address = 560, // hw_address + S_561_99 = 561, // $@99 + S_client_id_value = 562, // client_id_value + S_563_100 = 563, // $@100 + S_circuit_id_value = 564, // circuit_id_value + S_565_101 = 565, // $@101 + S_flex_id_value = 566, // flex_id_value + S_567_102 = 567, // $@102 + S_hostname = 568, // hostname + S_569_103 = 569, // $@103 + S_reservation_client_classes = 570, // reservation_client_classes + S_571_104 = 571, // $@104 + S_relay = 572, // relay + S_573_105 = 573, // $@105 + S_relay_map = 574, // relay_map + S_ip_addresses = 575, // ip_addresses + S_576_106 = 576, // $@106 + S_client_classes = 577, // client_classes + S_578_107 = 578, // $@107 + S_client_classes_list = 579, // client_classes_list + S_client_class_entry = 580, // client_class_entry + S_581_108 = 581, // $@108 + S_client_class_params = 582, // client_class_params + S_not_empty_client_class_params = 583, // not_empty_client_class_params + S_client_class_param = 584, // client_class_param + S_client_class_name = 585, // client_class_name + S_client_class_test = 586, // client_class_test + S_587_109 = 587, // $@109 + S_client_class_template_test = 588, // client_class_template_test + S_589_110 = 589, // $@110 + S_only_if_required = 590, // only_if_required + S_only_in_additional_list = 591, // only_in_additional_list + S_dhcp4o6_port = 592, // dhcp4o6_port + S_control_socket = 593, // control_socket + S_594_111 = 594, // $@111 + S_control_sockets = 595, // control_sockets + S_596_112 = 596, // $@112 + S_control_socket_list = 597, // control_socket_list + S_not_empty_control_socket_list = 598, // not_empty_control_socket_list + S_control_socket_entry = 599, // control_socket_entry + S_600_113 = 600, // $@113 + S_control_socket_params = 601, // control_socket_params + S_control_socket_param = 602, // control_socket_param + S_control_socket_type = 603, // control_socket_type + S_604_114 = 604, // $@114 + S_control_socket_type_value = 605, // control_socket_type_value + S_control_socket_name = 606, // control_socket_name + S_607_115 = 607, // $@115 + S_control_socket_address = 608, // control_socket_address + S_609_116 = 609, // $@116 + S_control_socket_port = 610, // control_socket_port + S_cert_required = 611, // cert_required + S_http_headers = 612, // http_headers + S_613_117 = 613, // $@117 + S_http_header_list = 614, // http_header_list + S_not_empty_http_header_list = 615, // not_empty_http_header_list + S_http_header = 616, // http_header + S_617_118 = 617, // $@118 + S_http_header_params = 618, // http_header_params + S_http_header_param = 619, // http_header_param + S_header_value = 620, // header_value + S_621_119 = 621, // $@119 + S_authentication = 622, // authentication + S_623_120 = 623, // $@120 + S_auth_params = 624, // auth_params + S_auth_param = 625, // auth_param + S_auth_type = 626, // auth_type + S_627_121 = 627, // $@121 + S_auth_type_value = 628, // auth_type_value + S_realm = 629, // realm + S_630_122 = 630, // $@122 + S_directory = 631, // directory + S_632_123 = 632, // $@123 + S_clients = 633, // clients + S_634_124 = 634, // $@124 + S_clients_list = 635, // clients_list + S_not_empty_clients_list = 636, // not_empty_clients_list + S_basic_auth = 637, // basic_auth + S_638_125 = 638, // $@125 + S_clients_params = 639, // clients_params + S_clients_param = 640, // clients_param + S_user_file = 641, // user_file + S_642_126 = 642, // $@126 + S_password_file = 643, // password_file + S_644_127 = 644, // $@127 + S_dhcp_queue_control = 645, // dhcp_queue_control + S_646_128 = 646, // $@128 + S_queue_control_params = 647, // queue_control_params + S_queue_control_param = 648, // queue_control_param + S_enable_queue = 649, // enable_queue + S_queue_type = 650, // queue_type + S_651_129 = 651, // $@129 + S_capacity = 652, // capacity + S_arbitrary_map_entry = 653, // arbitrary_map_entry + S_654_130 = 654, // $@130 + S_dhcp_ddns = 655, // dhcp_ddns + S_656_131 = 656, // $@131 + S_sub_dhcp_ddns = 657, // sub_dhcp_ddns + S_658_132 = 658, // $@132 + S_dhcp_ddns_params = 659, // dhcp_ddns_params + S_dhcp_ddns_param = 660, // dhcp_ddns_param + S_enable_updates = 661, // enable_updates + S_server_ip = 662, // server_ip + S_663_133 = 663, // $@133 + S_server_port = 664, // server_port + S_sender_ip = 665, // sender_ip + S_666_134 = 666, // $@134 + S_sender_port = 667, // sender_port + S_max_queue_size = 668, // max_queue_size + S_ncr_protocol = 669, // ncr_protocol + S_670_135 = 670, // $@135 + S_ncr_protocol_value = 671, // ncr_protocol_value + S_ncr_format = 672, // ncr_format + S_673_136 = 673, // $@136 + S_config_control = 674, // config_control + S_675_137 = 675, // $@137 + S_sub_config_control = 676, // sub_config_control + S_677_138 = 677, // $@138 + S_config_control_params = 678, // config_control_params + S_config_control_param = 679, // config_control_param + S_config_databases = 680, // config_databases + S_681_139 = 681, // $@139 + S_config_fetch_wait_time = 682, // config_fetch_wait_time + S_loggers = 683, // loggers + S_684_140 = 684, // $@140 + S_loggers_entries = 685, // loggers_entries + S_logger_entry = 686, // logger_entry + S_687_141 = 687, // $@141 + S_logger_params = 688, // logger_params + S_logger_param = 689, // logger_param + S_debuglevel = 690, // debuglevel + S_severity = 691, // severity + S_692_142 = 692, // $@142 + S_output_options_list = 693, // output_options_list + S_694_143 = 694, // $@143 + S_output_options_list_content = 695, // output_options_list_content + S_output_entry = 696, // output_entry + S_697_144 = 697, // $@144 + S_output_params_list = 698, // output_params_list + S_output_params = 699, // output_params + S_output = 700, // output + S_701_145 = 701, // $@145 + S_flush = 702, // flush + S_maxsize = 703, // maxsize + S_maxver = 704, // maxver + S_pattern = 705, // pattern + S_706_146 = 706, // $@146 + S_compatibility = 707, // compatibility + S_708_147 = 708, // $@147 + S_compatibility_params = 709, // compatibility_params + S_compatibility_param = 710, // compatibility_param + S_lenient_option_parsing = 711, // lenient_option_parsing + S_ignore_dhcp_server_identifier = 712, // ignore_dhcp_server_identifier + S_ignore_rai_link_selection = 713, // ignore_rai_link_selection + S_exclude_first_last_24 = 714 // exclude_first_last_24 }; }; @@ -3171,6 +3180,51 @@ switch (yykind) #if 201103L <= YY_CPLUSPLUS static symbol_type + make_DDNS_TTL (location_type l) + { + return symbol_type (token::TOKEN_DDNS_TTL, std::move (l)); + } +#else + static + symbol_type + make_DDNS_TTL (const location_type& l) + { + return symbol_type (token::TOKEN_DDNS_TTL, l); + } +#endif +#if 201103L <= YY_CPLUSPLUS + static + symbol_type + make_DDNS_TTL_MIN (location_type l) + { + return symbol_type (token::TOKEN_DDNS_TTL_MIN, std::move (l)); + } +#else + static + symbol_type + make_DDNS_TTL_MIN (const location_type& l) + { + return symbol_type (token::TOKEN_DDNS_TTL_MIN, l); + } +#endif +#if 201103L <= YY_CPLUSPLUS + static + symbol_type + make_DDNS_TTL_MAX (location_type l) + { + return symbol_type (token::TOKEN_DDNS_TTL_MAX, std::move (l)); + } +#else + static + symbol_type + make_DDNS_TTL_MAX (const location_type& l) + { + return symbol_type (token::TOKEN_DDNS_TTL_MAX, l); + } +#endif +#if 201103L <= YY_CPLUSPLUS + static + symbol_type make_STORE_EXTENDED_INFO (location_type l) { return symbol_type (token::TOKEN_STORE_EXTENDED_INFO, std::move (l)); @@ -5658,8 +5712,8 @@ switch (yykind) /// Constants. enum { - yylast_ = 1581, ///< Last index in yytable_. - yynnts_ = 478, ///< Number of nonterminal symbols. + yylast_ = 1448, ///< Last index in yytable_. + yynnts_ = 481, ///< Number of nonterminal symbols. yyfinal_ = 28 ///< Termination state number. }; @@ -5727,10 +5781,10 @@ switch (yykind) 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230 + 225, 226, 227, 228, 229, 230, 231, 232, 233 }; // Last valid token kind. - const int code_max = 485; + const int code_max = 488; if (t <= 0) return symbol_kind::S_YYEOF; @@ -5905,7 +5959,7 @@ switch (yykind) #line 14 "dhcp4_parser.yy" } } // isc::dhcp -#line 5909 "dhcp4_parser.h" +#line 5963 "dhcp4_parser.h" diff --git a/src/bin/dhcp4/dhcp4_parser.yy b/src/bin/dhcp4/dhcp4_parser.yy index 1f7fe4273e..26c2df08f2 100644 --- a/src/bin/dhcp4/dhcp4_parser.yy +++ b/src/bin/dhcp4/dhcp4_parser.yy @@ -137,6 +137,9 @@ using namespace std; DDNS_UPDATE_ON_RENEW "ddns-update-on-renew" DDNS_USE_CONFLICT_RESOLUTION "ddns-use-conflict-resolution" DDNS_TTL_PERCENT "ddns-ttl-percent" + DDNS_TTL "ddns-ttl" + DDNS_TTL_MIN "ddns-ttl-min" + DDNS_TTL_MAX "ddns-ttl-mix" STORE_EXTENDED_INFO "store-extended-info" SUBNET4 "subnet4" SUBNET_4O6_INTERFACE "4o6-interface" @@ -566,6 +569,9 @@ global_param: valid_lifetime | ddns_use_conflict_resolution | ddns_conflict_resolution_mode | ddns_ttl_percent + | ddns_ttl + | ddns_ttl_min + | ddns_ttl_max | store_extended_info | statistic_default_sample_count | statistic_default_sample_age @@ -800,6 +806,24 @@ ddns_ttl_percent: DDNS_TTL_PERCENT COLON FLOAT { ctx.stack_.back()->set("ddns-ttl-percent", ttl); }; +ddns_ttl: DDNS_TTL COLON INTEGER { + ctx.unique("ddns-ttl", ctx.loc2pos(@1)); + ElementPtr ttl(new IntElement($3, ctx.loc2pos(@3))); + ctx.stack_.back()->set("ddns-ttl", ttl); +}; + +ddns_ttl_min: DDNS_TTL_MIN COLON INTEGER { + ctx.unique("ddns-ttl-min", ctx.loc2pos(@1)); + ElementPtr ttl(new IntElement($3, ctx.loc2pos(@3))); + ctx.stack_.back()->set("ddns-ttl-min", ttl); +}; + +ddns_ttl_max: DDNS_TTL_MAX COLON INTEGER { + ctx.unique("ddns-ttl-max", ctx.loc2pos(@1)); + ElementPtr ttl(new IntElement($3, ctx.loc2pos(@3))); + ctx.stack_.back()->set("ddns-ttl-max", ttl); +}; + hostname_char_set: HOSTNAME_CHAR_SET { ctx.unique("hostname-char-set", ctx.loc2pos(@1)); ctx.enter(ctx.NO_KEYWORD); @@ -1636,6 +1660,9 @@ subnet4_param: valid_lifetime | ddns_use_conflict_resolution | ddns_conflict_resolution_mode | ddns_ttl_percent + | ddns_ttl + | ddns_ttl_min + | ddns_ttl_max | hostname_char_set | hostname_char_replacement | store_extended_info @@ -1837,6 +1864,9 @@ shared_network_param: name | ddns_use_conflict_resolution | ddns_conflict_resolution_mode | ddns_ttl_percent + | ddns_ttl + | ddns_ttl_min + | ddns_ttl_max | hostname_char_set | hostname_char_replacement | store_extended_info diff --git a/src/bin/dhcp4/json_config_parser.cc b/src/bin/dhcp4/json_config_parser.cc index 5ec39ef115..46e10d4a64 100644 --- a/src/bin/dhcp4/json_config_parser.cc +++ b/src/bin/dhcp4/json_config_parser.cc @@ -195,6 +195,9 @@ public: /// Global lifetime sanity checks cfg->sanityChecksLifetime("valid-lifetime"); + /// Sanity check global ddns-ttl parameters + cfg->sanityChecksDdnsTtlParameters(); + /// Shared network sanity checks const SharedNetwork4Collection* networks = cfg->getCfgSharedNetworks4()->getAll(); if (networks) { @@ -673,7 +676,10 @@ processDhcp4Config(isc::data::ConstElementPtr config_set) { (config_pair.first == "parked-packet-limit") || (config_pair.first == "allocator") || (config_pair.first == "offer-lifetime") || - (config_pair.first == "stash-agent-options") ) { + (config_pair.first == "ddns-ttl") || + (config_pair.first == "ddns-ttl-min") || + (config_pair.first == "ddns-ttl-max") || + (config_pair.first == "stash-agent-options")) { CfgMgr::instance().getStagingCfg()->addConfiguredGlobal(config_pair.first, config_pair.second); continue; diff --git a/src/bin/dhcp4/tests/config_parser_unittest.cc b/src/bin/dhcp4/tests/config_parser_unittest.cc index 06d3eac287..5478fed8bd 100644 --- a/src/bin/dhcp4/tests/config_parser_unittest.cc +++ b/src/bin/dhcp4/tests/config_parser_unittest.cc @@ -8269,4 +8269,180 @@ TEST_F(Dhcp4ParserTest, deprecatedClientClassesCheck) { " and 'client-classes'. Use only the latter."); } +TEST_F(Dhcp4ParserTest, ddnsTtlPercent) { + string config = R"( + { + "ddns-ttl-percent": 0.75, + "valid-lifetime": 4000, + "shared-networks": [{ + "name": "net", + "ddns-ttl-percent": 0.50, + "subnet4": [{ + "id": 1, + "subnet": "10.0.2.0/24", + "ddns-ttl-percent": 0.25 + }], + }] + } + )"; + + ConstElementPtr json; + ASSERT_NO_THROW(json = parseDHCP4(config)); + extractConfig(config); + + ConstElementPtr status; + + EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json)); + // returned value should be 0 (success) + checkResult(status, 0); + + // Commit it so global inheritance works. + CfgMgr::instance().commit(); + + ConstSubnet4Ptr subnet = CfgMgr::instance().getCurrentCfg()-> + getCfgSubnets4()->selectSubnet(IOAddress("10.0.2.0")); + ASSERT_TRUE(subnet); + + EXPECT_FALSE(subnet->getDdnsTtlPercent(Network::Inheritance::NONE).unspecified()); + EXPECT_EQ(0.25, subnet->getDdnsTtlPercent(Network::Inheritance::NONE).get()); + + EXPECT_FALSE(subnet->getDdnsTtlPercent(Network::Inheritance::PARENT_NETWORK).unspecified()); + EXPECT_EQ(0.50, subnet->getDdnsTtlPercent(Network::Inheritance::PARENT_NETWORK).get()); + + EXPECT_FALSE(subnet->getDdnsTtlPercent(Network::Inheritance::GLOBAL).unspecified()); + EXPECT_EQ(0.75, subnet->getDdnsTtlPercent(Network::Inheritance::GLOBAL).get()); +} + +TEST_F(Dhcp4ParserTest, ddnsTtl) { + string config = R"( + { + "ddns-ttl": 750, + "valid-lifetime": 4000, + "shared-networks": [{ + "name": "net", + "ddns-ttl": 500, + "subnet4": [{ + "id": 1, + "subnet": "10.0.2.0/24", + "ddns-ttl": 250 + }], + }] + } + )"; + + ConstElementPtr json; + ASSERT_NO_THROW(json = parseDHCP4(config)); + extractConfig(config); + + ConstElementPtr status; + EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json)); + + // returned value should be 0 (success) + checkResult(status, 0); + + // Commit it so global inheritance works. + CfgMgr::instance().commit(); + + ConstSubnet4Ptr subnet = CfgMgr::instance().getCurrentCfg()-> + getCfgSubnets4()->selectSubnet(IOAddress("10.0.2.0")); + ASSERT_TRUE(subnet); + + EXPECT_FALSE(subnet->getDdnsTtl(Network::Inheritance::NONE).unspecified()); + EXPECT_EQ(250, subnet->getDdnsTtl(Network::Inheritance::NONE).get()); + + EXPECT_FALSE(subnet->getDdnsTtl(Network::Inheritance::PARENT_NETWORK).unspecified()); + EXPECT_EQ(500, subnet->getDdnsTtl(Network::Inheritance::PARENT_NETWORK).get()); + + EXPECT_FALSE(subnet->getDdnsTtl(Network::Inheritance::GLOBAL).unspecified()); + EXPECT_EQ(750, subnet->getDdnsTtl(Network::Inheritance::GLOBAL).get()); +} + +TEST_F(Dhcp4ParserTest, ddnsTtlMin) { + string config = R"( + { + "ddns-ttl-min": 750, + "valid-lifetime": 4000, + "shared-networks": [{ + "name": "net", + "ddns-ttl-min": 500, + "subnet4": [{ + "id": 1, + "subnet": "10.0.2.0/24", + "ddns-ttl-min": 250 + }], + }] + } + )"; + + ConstElementPtr json; + ASSERT_NO_THROW(json = parseDHCP4(config)); + extractConfig(config); + + ConstElementPtr status; + EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json)); + + // returned value should be 0 (success) + checkResult(status, 0); + + // Commit it so global inheritance works. + CfgMgr::instance().commit(); + + ConstSubnet4Ptr subnet = CfgMgr::instance().getCurrentCfg()-> + getCfgSubnets4()->selectSubnet(IOAddress("10.0.2.0")); + ASSERT_TRUE(subnet); + + EXPECT_FALSE(subnet->getDdnsTtlMin(Network::Inheritance::NONE).unspecified()); + EXPECT_EQ(250, subnet->getDdnsTtlMin(Network::Inheritance::NONE).get()); + + EXPECT_FALSE(subnet->getDdnsTtlMin(Network::Inheritance::PARENT_NETWORK).unspecified()); + EXPECT_EQ(500, subnet->getDdnsTtlMin(Network::Inheritance::PARENT_NETWORK).get()); + + EXPECT_FALSE(subnet->getDdnsTtlMin(Network::Inheritance::GLOBAL).unspecified()); + EXPECT_EQ(750, subnet->getDdnsTtlMin(Network::Inheritance::GLOBAL).get()); +} + +TEST_F(Dhcp4ParserTest, ddnsTtlMax) { + string config = R"( + { + "ddns-ttl-max": 750, + "valid-lifetime": 4000, + "shared-networks": [{ + "name": "net", + "ddns-ttl-max": 500, + "subnet4": [{ + "id": 1, + "subnet": "10.0.2.0/24", + "ddns-ttl-max": 250 + }], + }] + } + )"; + + ConstElementPtr json; + ASSERT_NO_THROW(json = parseDHCP4(config)); + extractConfig(config); + + ConstElementPtr status; + EXPECT_NO_THROW(status = Dhcpv4SrvTest::configure(*srv_, json)); + + // returned value should be 0 (success) + checkResult(status, 0); + + // Commit it so global inheritance works. + CfgMgr::instance().commit(); + + ConstSubnet4Ptr subnet = CfgMgr::instance().getCurrentCfg()-> + getCfgSubnets4()->selectSubnet(IOAddress("10.0.2.0")); + ASSERT_TRUE(subnet); + + EXPECT_FALSE(subnet->getDdnsTtlMax(Network::Inheritance::NONE).unspecified()); + EXPECT_EQ(250, subnet->getDdnsTtlMax(Network::Inheritance::NONE).get()); + + EXPECT_FALSE(subnet->getDdnsTtlMax(Network::Inheritance::PARENT_NETWORK).unspecified()); + EXPECT_EQ(500, subnet->getDdnsTtlMax(Network::Inheritance::PARENT_NETWORK).get()); + + EXPECT_FALSE(subnet->getDdnsTtlMax(Network::Inheritance::GLOBAL).unspecified()); + EXPECT_EQ(750, subnet->getDdnsTtlMax(Network::Inheritance::GLOBAL).get()); +} + } // namespace diff --git a/src/bin/dhcp4/tests/fqdn_unittest.cc b/src/bin/dhcp4/tests/fqdn_unittest.cc index b827505f41..92264ba16b 100644 --- a/src/bin/dhcp4/tests/fqdn_unittest.cc +++ b/src/bin/dhcp4/tests/fqdn_unittest.cc @@ -772,6 +772,100 @@ public: } + /// @brief Verifies that DDNS TTL parameters are used when specified. + /// + /// @param valid_flt lease life time + /// @param ddns_ttl_percent expected configured value for ddns-ttl-percent + /// @param ddns_ttl expected configured value for ddns-ttl + /// @param ddns_ttl_min expected configured value for ddns-ttl-min + /// @param ddns_ttl_max expected configured value for ddns-ttl-max + void testDdnsTtlParameters(uint32_t valid_lft, + Optional<double> ddns_ttl_percent = Optional<double>(), + Optional<uint32_t> ddns_ttl = Optional<uint32_t>(), + Optional<uint32_t> ddns_ttl_min = Optional<uint32_t>(), + Optional<uint32_t> ddns_ttl_max = Optional<uint32_t>()) { + + std::string config_header = R"( + { + "interfaces-config": { "interfaces": [ "*" ] }, + "subnet4": [ { + "subnet": "10.0.0.0/24", + "interface": "eth1", + "id": 1, + "pools": [ { "pool": "10.0.0.10-10.0.0.10" } ] + )"; + + std::string config_footer = R"( + }], + "ddns-qualifying-suffix": "example.com.", + "dhcp-ddns": { "enable-updates": true } + } + )"; + + std::stringstream oss; + oss << config_header; + + oss << ",\n \"valid-lifetime\":" << valid_lft; + + if (!ddns_ttl_percent.unspecified()) { + oss << ",\n, \"ddns-ttl-percent\" :" << util::str::dumpDouble(ddns_ttl_percent.get()); + } + + if (!ddns_ttl.unspecified()) { + oss << ",\n, \"ddns-ttl\" :" << ddns_ttl.get(); + } + + if (!ddns_ttl_min.unspecified()) { + oss << ",\n, \"ddns-ttl-min\" :" << ddns_ttl_min.get(); + } + + if (!ddns_ttl_max.unspecified()) { + oss << ",\n, \"ddns-ttl-max\" :" << ddns_ttl_max.get(); + } + + oss << "\n" << config_footer; + + // Load a configuration with D2 enabled and ddns-ttl* parameters. + ASSERT_NO_FATAL_FAILURE(configure(oss.str(), *srv_)); + ASSERT_TRUE(CfgMgr::instance().ddnsEnabled()); + + // Create a client and get a lease. + Dhcp4Client client1(srv_, Dhcp4Client::SELECTING); + client1.setIfaceName("eth1"); + client1.setIfaceIndex(ETH1_INDEX); + ASSERT_NO_THROW(client1.includeHostname("client1")); + + // Do the DORA. + ASSERT_NO_THROW(client1.doDORA()); + Pkt4Ptr resp = client1.getContext().response_; + ASSERT_TRUE(resp); + ASSERT_EQ(DHCPACK, static_cast<int>(resp->getType())); + + // Obtain the Hostname option sent in the response and make sure that the server + // has used the hostname reserved for this client. + OptionStringPtr hostname; + hostname = boost::dynamic_pointer_cast<OptionString>(resp->getOption(DHO_HOST_NAME)); + ASSERT_TRUE(hostname); + EXPECT_EQ("client1.example.com", hostname->getValue()); + + // Make sure the lease is in the database and hostname is correct. + Lease4Ptr lease = LeaseMgrFactory::instance().getLease4(IOAddress("10.0.0.10")); + ASSERT_TRUE(lease); + EXPECT_EQ("client1.example.com", lease->hostname_); + + // Verify that an NCR was generated correctly. + ASSERT_EQ(1, CfgMgr::instance().getD2ClientMgr().getQueueSize()); + verifyNameChangeRequest(isc::dhcp_ddns::CHG_ADD, true, true, + resp->getYiaddr().toText(), + "client1.example.com.", "", + time(NULL), lease->valid_lft_, true, + CHECK_WITH_DHCID, + ddns_ttl_percent, + ddns_ttl, + ddns_ttl_min, + ddns_ttl_max); + } + ///@brief Verify that NameChangeRequest holds valid values. /// /// Pulls the NCR from the top of the send queue and checks its content @@ -794,6 +888,10 @@ public: /// lease expiration time is conducted as greater than or equal to rather /// equal to CLTT plus lease ttl . /// @param exp_conflict_resolution_mode expected value of conflict resolution mode + /// @param ddns_ttl_percent expected configured value for ddns-ttl-percent + /// @param ddns_ttl expected configured value for ddns-ttl + /// @param ddns_ttl_min expected configured value for ddns-ttl-min + /// @param ddns_ttl_max expected configured value for ddns-ttl-max void verifyNameChangeRequest(const isc::dhcp_ddns::NameChangeType type, const bool reverse, const bool forward, const std::string& addr, @@ -804,7 +902,10 @@ public: const bool not_strict_expire_check = false, const ConflictResolutionMode exp_conflict_resolution_mode = CHECK_WITH_DHCID, - Optional<double> ttl_percent = Optional<double>()) { + Optional<double> ddns_ttl_percent = Optional<double>(), + Optional<uint32_t> ddns_ttl = Optional<uint32_t>(), + Optional<uint32_t> ddns_ttl_min = Optional<uint32_t>(), + Optional<uint32_t> ddns_ttl_max = Optional<uint32_t>()) { NameChangeRequestPtr ncr; ASSERT_NO_THROW(ncr = d2_mgr_.peekAt(0)); ASSERT_TRUE(ncr); @@ -825,7 +926,10 @@ public: // current time as cltt but the it may not check the lease expiration // time for equality but rather check that the lease expiration time // is not greater than the current time + lease lifetime. - uint32_t ttl = calculateDdnsTtl(valid_lft, ttl_percent); + + uint32_t ttl = calculateDdnsTtl(valid_lft, ddns_ttl_percent, + ddns_ttl, ddns_ttl_min, ddns_ttl_max); + if (not_strict_expire_check) { EXPECT_GE(cltt + ttl, ncr->getLeaseExpiresOn()); } else { @@ -2840,7 +2944,7 @@ TEST_F(NameDhcpv4SrvTest, withOfferLifetime) { } // Verifies the DNS TTL when ttl percent is specified -// than zero. +// greater than zero. TEST_F(NameDhcpv4SrvTest, withDdnsTtlPercent) { // Load a configuration with D2 enabled and ddns-ttl-percent ASSERT_NO_FATAL_FAILURE(configure(CONFIGS[12], *srv_)); @@ -2958,4 +3062,36 @@ TEST_F(NameDhcpv4SrvTest, checkExistsDHCIDConflictResolutionMode) { lease->cltt_, 100, false, CHECK_EXISTS_WITH_DHCID); } +// Verify the ddns-ttl-percent is used when specified. +TEST_F(NameDhcpv4SrvTest, ddnsTtlPercentTest) { + testDdnsTtlParameters(2100, 0.5); +} + +// Verify the ddns-ttl is used when specified. +TEST_F(NameDhcpv4SrvTest, ddnsTtlTest) { + testDdnsTtlParameters(2100, // valid lft + Optional<double>(), // percent + 999, // ttl + Optional<uint32_t>(), // min + Optional<uint32_t>()); // max +} + +// Verify the ddns-ttl-min is used when specified. +TEST_F(NameDhcpv4SrvTest, ddnsTtlMinTest) { + testDdnsTtlParameters(2100, // valid lft + Optional<double>(), // percent + Optional<uint32_t>(), // ttl + 800, // ttl-min + Optional<uint32_t>()); // ttl-max +} + +// Verify the ddns-ttl-max is used when specified. +TEST_F(NameDhcpv4SrvTest, ddnsTtlMaxTest) { + testDdnsTtlParameters(2100, // valid lft + Optional<double>(), // percent + Optional<uint32_t>(), // ttl + Optional<uint32_t>(), // ttl-min + 500); // ttl-max +} + } // end of anonymous namespace diff --git a/src/bin/dhcp4/tests/get_config_unittest.cc b/src/bin/dhcp4/tests/get_config_unittest.cc index 4ba98472f4..1e9a4256d3 100644 --- a/src/bin/dhcp4/tests/get_config_unittest.cc +++ b/src/bin/dhcp4/tests/get_config_unittest.cc @@ -68,6 +68,7 @@ namespace { ///@{ /// @brief extracted configurations const char* EXTRACTED_CONFIGS[] = { +/// put this after const char* EXTRACTED_CONFIGS[] = { // CONFIGURATION 0 "{\n" " \"interfaces-config\": {\n" @@ -2651,11 +2652,84 @@ const char* EXTRACTED_CONFIGS[] = { " }\n" " ],\n" " \"valid-lifetime\": 400\n" +" }\n", + // CONFIGURATION 83 +"{\n" +" \"ddns-ttl-percent\": 0.75,\n" +" \"shared-networks\": [\n" +" {\n" +" \"ddns-ttl-percent\": 0.5,\n" +" \"name\": \"net\",\n" +" \"subnet4\": [\n" +" {\n" +" \"ddns-ttl-percent\": 0.25,\n" +" \"id\": 1,\n" +" \"subnet\": \"10.0.2.0/24\"\n" +" }\n" +" ]\n" +" }\n" +" ],\n" +" \"valid-lifetime\": 4000\n" +" }\n", + // CONFIGURATION 84 +"{\n" +" \"ddns-ttl\": 750,\n" +" \"shared-networks\": [\n" +" {\n" +" \"ddns-ttl\": 500,\n" +" \"name\": \"net\",\n" +" \"subnet4\": [\n" +" {\n" +" \"ddns-ttl\": 250,\n" +" \"id\": 1,\n" +" \"subnet\": \"10.0.2.0/24\"\n" +" }\n" +" ]\n" +" }\n" +" ],\n" +" \"valid-lifetime\": 4000\n" +" }\n", + // CONFIGURATION 85 +"{\n" +" \"ddns-ttl-min\": 750,\n" +" \"shared-networks\": [\n" +" {\n" +" \"ddns-ttl-min\": 500,\n" +" \"name\": \"net\",\n" +" \"subnet4\": [\n" +" {\n" +" \"ddns-ttl-min\": 250,\n" +" \"id\": 1,\n" +" \"subnet\": \"10.0.2.0/24\"\n" +" }\n" +" ]\n" +" }\n" +" ],\n" +" \"valid-lifetime\": 4000\n" +" }\n", + // CONFIGURATION 86 +"{\n" +" \"ddns-ttl-max\": 750,\n" +" \"shared-networks\": [\n" +" {\n" +" \"ddns-ttl-max\": 500,\n" +" \"name\": \"net\",\n" +" \"subnet4\": [\n" +" {\n" +" \"ddns-ttl-max\": 250,\n" +" \"id\": 1,\n" +" \"subnet\": \"10.0.2.0/24\"\n" +" }\n" +" ]\n" +" }\n" +" ],\n" +" \"valid-lifetime\": 4000\n" " }\n" }; /// @brief unparsed configurations const char* UNPARSED_CONFIGS[] = { +///put this after const char* UNPARSED_CONFIGS[] = { // CONFIGURATION 0 "{\n" " \"allocator\": \"iterative\",\n" @@ -13546,6 +13620,506 @@ const char* UNPARSED_CONFIGS[] = { " \"t1-percent\": 0.5,\n" " \"t2-percent\": 0.875,\n" " \"valid-lifetime\": 400\n" +" }\n", + // CONFIGURATION 83 +"{\n" +" \"allocator\": \"iterative\",\n" +" \"authoritative\": false,\n" +" \"boot-file-name\": \"\",\n" +" \"calculate-tee-times\": false,\n" +" \"ddns-conflict-resolution-mode\": \"check-with-dhcid\",\n" +" \"ddns-generated-prefix\": \"myhost\",\n" +" \"ddns-override-client-update\": false,\n" +" \"ddns-override-no-update\": false,\n" +" \"ddns-qualifying-suffix\": \"\",\n" +" \"ddns-replace-client-name\": \"never\",\n" +" \"ddns-send-updates\": true,\n" +" \"ddns-ttl-percent\": 0.75,\n" +" \"ddns-update-on-renew\": false,\n" +" \"decline-probation-period\": 86400,\n" +" \"dhcp-ddns\": {\n" +" \"enable-updates\": false,\n" +" \"max-queue-size\": 1024,\n" +" \"ncr-format\": \"JSON\",\n" +" \"ncr-protocol\": \"UDP\",\n" +" \"sender-ip\": \"0.0.0.0\",\n" +" \"sender-port\": 0,\n" +" \"server-ip\": \"127.0.0.1\",\n" +" \"server-port\": 53001\n" +" },\n" +" \"dhcp-queue-control\": {\n" +" \"capacity\": 64,\n" +" \"enable-queue\": false,\n" +" \"queue-type\": \"kea-ring4\"\n" +" },\n" +" \"dhcp4o6-port\": 0,\n" +" \"early-global-reservations-lookup\": false,\n" +" \"echo-client-id\": true,\n" +" \"expired-leases-processing\": {\n" +" \"flush-reclaimed-timer-wait-time\": 25,\n" +" \"hold-reclaimed-time\": 3600,\n" +" \"max-reclaim-leases\": 100,\n" +" \"max-reclaim-time\": 250,\n" +" \"reclaim-timer-wait-time\": 10,\n" +" \"unwarned-reclaim-cycles\": 5\n" +" },\n" +" \"hooks-libraries\": [ ],\n" +" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n" +" \"hostname-char-replacement\": \"\",\n" +" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n" +" \"interfaces-config\": {\n" +" \"interfaces\": [ ],\n" +" \"re-detect\": false\n" +" },\n" +" \"ip-reservations-unique\": true,\n" +" \"lease-database\": {\n" +" \"type\": \"memfile\"\n" +" },\n" +" \"match-client-id\": true,\n" +" \"multi-threading\": {\n" +" \"enable-multi-threading\": true,\n" +" \"packet-queue-size\": 64,\n" +" \"thread-pool-size\": 0\n" +" },\n" +" \"next-server\": \"0.0.0.0\",\n" +" \"option-data\": [ ],\n" +" \"option-def\": [ ],\n" +" \"parked-packet-limit\": 256,\n" +" \"reservations-global\": false,\n" +" \"reservations-in-subnet\": true,\n" +" \"reservations-lookup-first\": false,\n" +" \"reservations-out-of-pool\": false,\n" +" \"sanity-checks\": {\n" +" \"extended-info-checks\": \"fix\",\n" +" \"lease-checks\": \"warn\"\n" +" },\n" +" \"server-hostname\": \"\",\n" +" \"server-tag\": \"\",\n" +" \"shared-networks\": [\n" +" {\n" +" \"allocator\": \"iterative\",\n" +" \"calculate-tee-times\": false,\n" +" \"ddns-ttl-percent\": 0.5,\n" +" \"max-valid-lifetime\": 4000,\n" +" \"min-valid-lifetime\": 4000,\n" +" \"name\": \"net\",\n" +" \"option-data\": [ ],\n" +" \"relay\": {\n" +" \"ip-addresses\": [ ]\n" +" },\n" +" \"store-extended-info\": false,\n" +" \"subnet4\": [\n" +" {\n" +" \"4o6-interface\": \"\",\n" +" \"4o6-interface-id\": \"\",\n" +" \"4o6-subnet\": \"\",\n" +" \"allocator\": \"iterative\",\n" +" \"calculate-tee-times\": false,\n" +" \"ddns-ttl-percent\": 0.25,\n" +" \"id\": 1,\n" +" \"max-valid-lifetime\": 4000,\n" +" \"min-valid-lifetime\": 4000,\n" +" \"option-data\": [ ],\n" +" \"pools\": [ ],\n" +" \"relay\": {\n" +" \"ip-addresses\": [ ]\n" +" },\n" +" \"reservations\": [ ],\n" +" \"store-extended-info\": false,\n" +" \"subnet\": \"10.0.2.0/24\",\n" +" \"t1-percent\": 0.5,\n" +" \"t2-percent\": 0.875,\n" +" \"valid-lifetime\": 4000\n" +" }\n" +" ],\n" +" \"t1-percent\": 0.5,\n" +" \"t2-percent\": 0.875,\n" +" \"valid-lifetime\": 4000\n" +" }\n" +" ],\n" +" \"stash-agent-options\": false,\n" +" \"statistic-default-sample-age\": 0,\n" +" \"statistic-default-sample-count\": 20,\n" +" \"store-extended-info\": false,\n" +" \"subnet4\": [ ],\n" +" \"t1-percent\": 0.5,\n" +" \"t2-percent\": 0.875,\n" +" \"valid-lifetime\": 4000\n" +" }\n", + // CONFIGURATION 84 +"{\n" +" \"allocator\": \"iterative\",\n" +" \"authoritative\": false,\n" +" \"boot-file-name\": \"\",\n" +" \"calculate-tee-times\": false,\n" +" \"ddns-conflict-resolution-mode\": \"check-with-dhcid\",\n" +" \"ddns-generated-prefix\": \"myhost\",\n" +" \"ddns-override-client-update\": false,\n" +" \"ddns-override-no-update\": false,\n" +" \"ddns-qualifying-suffix\": \"\",\n" +" \"ddns-replace-client-name\": \"never\",\n" +" \"ddns-send-updates\": true,\n" +" \"ddns-ttl\": 750,\n" +" \"ddns-update-on-renew\": false,\n" +" \"decline-probation-period\": 86400,\n" +" \"dhcp-ddns\": {\n" +" \"enable-updates\": false,\n" +" \"max-queue-size\": 1024,\n" +" \"ncr-format\": \"JSON\",\n" +" \"ncr-protocol\": \"UDP\",\n" +" \"sender-ip\": \"0.0.0.0\",\n" +" \"sender-port\": 0,\n" +" \"server-ip\": \"127.0.0.1\",\n" +" \"server-port\": 53001\n" +" },\n" +" \"dhcp-queue-control\": {\n" +" \"capacity\": 64,\n" +" \"enable-queue\": false,\n" +" \"queue-type\": \"kea-ring4\"\n" +" },\n" +" \"dhcp4o6-port\": 0,\n" +" \"early-global-reservations-lookup\": false,\n" +" \"echo-client-id\": true,\n" +" \"expired-leases-processing\": {\n" +" \"flush-reclaimed-timer-wait-time\": 25,\n" +" \"hold-reclaimed-time\": 3600,\n" +" \"max-reclaim-leases\": 100,\n" +" \"max-reclaim-time\": 250,\n" +" \"reclaim-timer-wait-time\": 10,\n" +" \"unwarned-reclaim-cycles\": 5\n" +" },\n" +" \"hooks-libraries\": [ ],\n" +" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n" +" \"hostname-char-replacement\": \"\",\n" +" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n" +" \"interfaces-config\": {\n" +" \"interfaces\": [ ],\n" +" \"re-detect\": false\n" +" },\n" +" \"ip-reservations-unique\": true,\n" +" \"lease-database\": {\n" +" \"type\": \"memfile\"\n" +" },\n" +" \"match-client-id\": true,\n" +" \"multi-threading\": {\n" +" \"enable-multi-threading\": true,\n" +" \"packet-queue-size\": 64,\n" +" \"thread-pool-size\": 0\n" +" },\n" +" \"next-server\": \"0.0.0.0\",\n" +" \"option-data\": [ ],\n" +" \"option-def\": [ ],\n" +" \"parked-packet-limit\": 256,\n" +" \"reservations-global\": false,\n" +" \"reservations-in-subnet\": true,\n" +" \"reservations-lookup-first\": false,\n" +" \"reservations-out-of-pool\": false,\n" +" \"sanity-checks\": {\n" +" \"extended-info-checks\": \"fix\",\n" +" \"lease-checks\": \"warn\"\n" +" },\n" +" \"server-hostname\": \"\",\n" +" \"server-tag\": \"\",\n" +" \"shared-networks\": [\n" +" {\n" +" \"allocator\": \"iterative\",\n" +" \"calculate-tee-times\": false,\n" +" \"ddns-ttl\": 500,\n" +" \"max-valid-lifetime\": 4000,\n" +" \"min-valid-lifetime\": 4000,\n" +" \"name\": \"net\",\n" +" \"option-data\": [ ],\n" +" \"relay\": {\n" +" \"ip-addresses\": [ ]\n" +" },\n" +" \"store-extended-info\": false,\n" +" \"subnet4\": [\n" +" {\n" +" \"4o6-interface\": \"\",\n" +" \"4o6-interface-id\": \"\",\n" +" \"4o6-subnet\": \"\",\n" +" \"allocator\": \"iterative\",\n" +" \"calculate-tee-times\": false,\n" +" \"ddns-ttl\": 250,\n" +" \"id\": 1,\n" +" \"max-valid-lifetime\": 4000,\n" +" \"min-valid-lifetime\": 4000,\n" +" \"option-data\": [ ],\n" +" \"pools\": [ ],\n" +" \"relay\": {\n" +" \"ip-addresses\": [ ]\n" +" },\n" +" \"reservations\": [ ],\n" +" \"store-extended-info\": false,\n" +" \"subnet\": \"10.0.2.0/24\",\n" +" \"t1-percent\": 0.5,\n" +" \"t2-percent\": 0.875,\n" +" \"valid-lifetime\": 4000\n" +" }\n" +" ],\n" +" \"t1-percent\": 0.5,\n" +" \"t2-percent\": 0.875,\n" +" \"valid-lifetime\": 4000\n" +" }\n" +" ],\n" +" \"stash-agent-options\": false,\n" +" \"statistic-default-sample-age\": 0,\n" +" \"statistic-default-sample-count\": 20,\n" +" \"store-extended-info\": false,\n" +" \"subnet4\": [ ],\n" +" \"t1-percent\": 0.5,\n" +" \"t2-percent\": 0.875,\n" +" \"valid-lifetime\": 4000\n" +" }\n", + // CONFIGURATION 85 +"{\n" +" \"allocator\": \"iterative\",\n" +" \"authoritative\": false,\n" +" \"boot-file-name\": \"\",\n" +" \"calculate-tee-times\": false,\n" +" \"ddns-conflict-resolution-mode\": \"check-with-dhcid\",\n" +" \"ddns-generated-prefix\": \"myhost\",\n" +" \"ddns-override-client-update\": false,\n" +" \"ddns-override-no-update\": false,\n" +" \"ddns-qualifying-suffix\": \"\",\n" +" \"ddns-replace-client-name\": \"never\",\n" +" \"ddns-send-updates\": true,\n" +" \"ddns-ttl-min\": 750,\n" +" \"ddns-update-on-renew\": false,\n" +" \"decline-probation-period\": 86400,\n" +" \"dhcp-ddns\": {\n" +" \"enable-updates\": false,\n" +" \"max-queue-size\": 1024,\n" +" \"ncr-format\": \"JSON\",\n" +" \"ncr-protocol\": \"UDP\",\n" +" \"sender-ip\": \"0.0.0.0\",\n" +" \"sender-port\": 0,\n" +" \"server-ip\": \"127.0.0.1\",\n" +" \"server-port\": 53001\n" +" },\n" +" \"dhcp-queue-control\": {\n" +" \"capacity\": 64,\n" +" \"enable-queue\": false,\n" +" \"queue-type\": \"kea-ring4\"\n" +" },\n" +" \"dhcp4o6-port\": 0,\n" +" \"early-global-reservations-lookup\": false,\n" +" \"echo-client-id\": true,\n" +" \"expired-leases-processing\": {\n" +" \"flush-reclaimed-timer-wait-time\": 25,\n" +" \"hold-reclaimed-time\": 3600,\n" +" \"max-reclaim-leases\": 100,\n" +" \"max-reclaim-time\": 250,\n" +" \"reclaim-timer-wait-time\": 10,\n" +" \"unwarned-reclaim-cycles\": 5\n" +" },\n" +" \"hooks-libraries\": [ ],\n" +" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n" +" \"hostname-char-replacement\": \"\",\n" +" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n" +" \"interfaces-config\": {\n" +" \"interfaces\": [ ],\n" +" \"re-detect\": false\n" +" },\n" +" \"ip-reservations-unique\": true,\n" +" \"lease-database\": {\n" +" \"type\": \"memfile\"\n" +" },\n" +" \"match-client-id\": true,\n" +" \"multi-threading\": {\n" +" \"enable-multi-threading\": true,\n" +" \"packet-queue-size\": 64,\n" +" \"thread-pool-size\": 0\n" +" },\n" +" \"next-server\": \"0.0.0.0\",\n" +" \"option-data\": [ ],\n" +" \"option-def\": [ ],\n" +" \"parked-packet-limit\": 256,\n" +" \"reservations-global\": false,\n" +" \"reservations-in-subnet\": true,\n" +" \"reservations-lookup-first\": false,\n" +" \"reservations-out-of-pool\": false,\n" +" \"sanity-checks\": {\n" +" \"extended-info-checks\": \"fix\",\n" +" \"lease-checks\": \"warn\"\n" +" },\n" +" \"server-hostname\": \"\",\n" +" \"server-tag\": \"\",\n" +" \"shared-networks\": [\n" +" {\n" +" \"allocator\": \"iterative\",\n" +" \"calculate-tee-times\": false,\n" +" \"ddns-ttl-min\": 500,\n" +" \"max-valid-lifetime\": 4000,\n" +" \"min-valid-lifetime\": 4000,\n" +" \"name\": \"net\",\n" +" \"option-data\": [ ],\n" +" \"relay\": {\n" +" \"ip-addresses\": [ ]\n" +" },\n" +" \"store-extended-info\": false,\n" +" \"subnet4\": [\n" +" {\n" +" \"4o6-interface\": \"\",\n" +" \"4o6-interface-id\": \"\",\n" +" \"4o6-subnet\": \"\",\n" +" \"allocator\": \"iterative\",\n" +" \"calculate-tee-times\": false,\n" +" \"ddns-ttl-min\": 250,\n" +" \"id\": 1,\n" +" \"max-valid-lifetime\": 4000,\n" +" \"min-valid-lifetime\": 4000,\n" +" \"option-data\": [ ],\n" +" \"pools\": [ ],\n" +" \"relay\": {\n" +" \"ip-addresses\": [ ]\n" +" },\n" +" \"reservations\": [ ],\n" +" \"store-extended-info\": false,\n" +" \"subnet\": \"10.0.2.0/24\",\n" +" \"t1-percent\": 0.5,\n" +" \"t2-percent\": 0.875,\n" +" \"valid-lifetime\": 4000\n" +" }\n" +" ],\n" +" \"t1-percent\": 0.5,\n" +" \"t2-percent\": 0.875,\n" +" \"valid-lifetime\": 4000\n" +" }\n" +" ],\n" +" \"stash-agent-options\": false,\n" +" \"statistic-default-sample-age\": 0,\n" +" \"statistic-default-sample-count\": 20,\n" +" \"store-extended-info\": false,\n" +" \"subnet4\": [ ],\n" +" \"t1-percent\": 0.5,\n" +" \"t2-percent\": 0.875,\n" +" \"valid-lifetime\": 4000\n" +" }\n", + // CONFIGURATION 86 +"{\n" +" \"allocator\": \"iterative\",\n" +" \"authoritative\": false,\n" +" \"boot-file-name\": \"\",\n" +" \"calculate-tee-times\": false,\n" +" \"ddns-conflict-resolution-mode\": \"check-with-dhcid\",\n" +" \"ddns-generated-prefix\": \"myhost\",\n" +" \"ddns-override-client-update\": false,\n" +" \"ddns-override-no-update\": false,\n" +" \"ddns-qualifying-suffix\": \"\",\n" +" \"ddns-replace-client-name\": \"never\",\n" +" \"ddns-send-updates\": true,\n" +" \"ddns-ttl-max\": 750,\n" +" \"ddns-update-on-renew\": false,\n" +" \"decline-probation-period\": 86400,\n" +" \"dhcp-ddns\": {\n" +" \"enable-updates\": false,\n" +" \"max-queue-size\": 1024,\n" +" \"ncr-format\": \"JSON\",\n" +" \"ncr-protocol\": \"UDP\",\n" +" \"sender-ip\": \"0.0.0.0\",\n" +" \"sender-port\": 0,\n" +" \"server-ip\": \"127.0.0.1\",\n" +" \"server-port\": 53001\n" +" },\n" +" \"dhcp-queue-control\": {\n" +" \"capacity\": 64,\n" +" \"enable-queue\": false,\n" +" \"queue-type\": \"kea-ring4\"\n" +" },\n" +" \"dhcp4o6-port\": 0,\n" +" \"early-global-reservations-lookup\": false,\n" +" \"echo-client-id\": true,\n" +" \"expired-leases-processing\": {\n" +" \"flush-reclaimed-timer-wait-time\": 25,\n" +" \"hold-reclaimed-time\": 3600,\n" +" \"max-reclaim-leases\": 100,\n" +" \"max-reclaim-time\": 250,\n" +" \"reclaim-timer-wait-time\": 10,\n" +" \"unwarned-reclaim-cycles\": 5\n" +" },\n" +" \"hooks-libraries\": [ ],\n" +" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\", \"circuit-id\", \"client-id\" ],\n" +" \"hostname-char-replacement\": \"\",\n" +" \"hostname-char-set\": \"[^A-Za-z0-9.-]\",\n" +" \"interfaces-config\": {\n" +" \"interfaces\": [ ],\n" +" \"re-detect\": false\n" +" },\n" +" \"ip-reservations-unique\": true,\n" +" \"lease-database\": {\n" +" \"type\": \"memfile\"\n" +" },\n" +" \"match-client-id\": true,\n" +" \"multi-threading\": {\n" +" \"enable-multi-threading\": true,\n" +" \"packet-queue-size\": 64,\n" +" \"thread-pool-size\": 0\n" +" },\n" +" \"next-server\": \"0.0.0.0\",\n" +" \"option-data\": [ ],\n" +" \"option-def\": [ ],\n" +" \"parked-packet-limit\": 256,\n" +" \"reservations-global\": false,\n" +" \"reservations-in-subnet\": true,\n" +" \"reservations-lookup-first\": false,\n" +" \"reservations-out-of-pool\": false,\n" +" \"sanity-checks\": {\n" +" \"extended-info-checks\": \"fix\",\n" +" \"lease-checks\": \"warn\"\n" +" },\n" +" \"server-hostname\": \"\",\n" +" \"server-tag\": \"\",\n" +" \"shared-networks\": [\n" +" {\n" +" \"allocator\": \"iterative\",\n" +" \"calculate-tee-times\": false,\n" +" \"ddns-ttl-max\": 500,\n" +" \"max-valid-lifetime\": 4000,\n" +" \"min-valid-lifetime\": 4000,\n" +" \"name\": \"net\",\n" +" \"option-data\": [ ],\n" +" \"relay\": {\n" +" \"ip-addresses\": [ ]\n" +" },\n" +" \"store-extended-info\": false,\n" +" \"subnet4\": [\n" +" {\n" +" \"4o6-interface\": \"\",\n" +" \"4o6-interface-id\": \"\",\n" +" \"4o6-subnet\": \"\",\n" +" \"allocator\": \"iterative\",\n" +" \"calculate-tee-times\": false,\n" +" \"ddns-ttl-max\": 250,\n" +" \"id\": 1,\n" +" \"max-valid-lifetime\": 4000,\n" +" \"min-valid-lifetime\": 4000,\n" +" \"option-data\": [ ],\n" +" \"pools\": [ ],\n" +" \"relay\": {\n" +" \"ip-addresses\": [ ]\n" +" },\n" +" \"reservations\": [ ],\n" +" \"store-extended-info\": false,\n" +" \"subnet\": \"10.0.2.0/24\",\n" +" \"t1-percent\": 0.5,\n" +" \"t2-percent\": 0.875,\n" +" \"valid-lifetime\": 4000\n" +" }\n" +" ],\n" +" \"t1-percent\": 0.5,\n" +" \"t2-percent\": 0.875,\n" +" \"valid-lifetime\": 4000\n" +" }\n" +" ],\n" +" \"stash-agent-options\": false,\n" +" \"statistic-default-sample-age\": 0,\n" +" \"statistic-default-sample-count\": 20,\n" +" \"store-extended-info\": false,\n" +" \"subnet4\": [ ],\n" +" \"t1-percent\": 0.5,\n" +" \"t2-percent\": 0.875,\n" +" \"valid-lifetime\": 4000\n" " }\n" }; diff --git a/src/bin/dhcp6/json_config_parser.cc b/src/bin/dhcp6/json_config_parser.cc index bed71a4cb0..b686dd41dd 100644 --- a/src/bin/dhcp6/json_config_parser.cc +++ b/src/bin/dhcp6/json_config_parser.cc @@ -284,6 +284,9 @@ public: cfg->sanityChecksLifetime("preferred-lifetime"); cfg->sanityChecksLifetime("valid-lifetime"); + /// Sanity check global ddns-ttl parameters + cfg->sanityChecksDdnsTtlParameters(); + /// Shared network sanity checks const SharedNetwork6Collection* networks = cfg->getCfgSharedNetworks6()->getAll(); if (networks) { diff --git a/src/lib/dhcpsrv/cb_ctl_dhcp4.cc b/src/lib/dhcpsrv/cb_ctl_dhcp4.cc index 5544bfd1b4..a24502cc43 100644 --- a/src/lib/dhcpsrv/cb_ctl_dhcp4.cc +++ b/src/lib/dhcpsrv/cb_ctl_dhcp4.cc @@ -86,6 +86,7 @@ CBControlDHCPv4::databaseConfigApply(const BackendSelector& backend_selector, // Sanity check it. external_cfg->sanityChecksLifetime("valid-lifetime"); + external_cfg->sanityChecksDdnsTtlParameters(); // Now that we successfully fetched the new global parameters, let's // remove existing ones and merge them into the current configuration. @@ -310,6 +311,7 @@ CBControlDHCPv4::databaseConfigApply(const BackendSelector& backend_selector, // ip-reservations-unique setting here. It will be applied when the // configuration is committed. external_cfg->sanityChecksLifetime(*staging_cfg, "valid-lifetime"); + external_cfg->sanityChecksDdnsTtlParameters(); CfgMgr::instance().mergeIntoStagingCfg(external_cfg->getSequence()); } else { @@ -331,6 +333,7 @@ CBControlDHCPv4::databaseConfigApply(const BackendSelector& backend_selector, } } external_cfg->sanityChecksLifetime(*current_cfg, "valid-lifetime"); + external_cfg->sanityChecksDdnsTtlParameters(); CfgMgr::instance().mergeIntoCurrentCfg(external_cfg->getSequence()); CfgMgr::instance().getCurrentCfg()->getCfgSubnets4()->initAllocatorsAfterConfigure(); } diff --git a/src/lib/dhcpsrv/cb_ctl_dhcp6.cc b/src/lib/dhcpsrv/cb_ctl_dhcp6.cc index 02901709f1..552c8553f2 100644 --- a/src/lib/dhcpsrv/cb_ctl_dhcp6.cc +++ b/src/lib/dhcpsrv/cb_ctl_dhcp6.cc @@ -85,6 +85,7 @@ CBControlDHCPv6::databaseConfigApply(const db::BackendSelector& backend_selector // Sanity check it. external_cfg->sanityChecksLifetime("preferred-lifetime"); external_cfg->sanityChecksLifetime("valid-lifetime"); + external_cfg->sanityChecksDdnsTtlParameters(); // Now that we successfully fetched the new global parameters, let's // remove existing ones and merge them into the current configuration. @@ -325,6 +326,7 @@ CBControlDHCPv6::databaseConfigApply(const db::BackendSelector& backend_selector auto const& cfg = CfgMgr::instance().getStagingCfg(); external_cfg->sanityChecksLifetime(*cfg, "preferred-lifetime"); external_cfg->sanityChecksLifetime(*cfg, "valid-lifetime"); + external_cfg->sanityChecksDdnsTtlParameters(); CfgMgr::instance().mergeIntoStagingCfg(external_cfg->getSequence()); } else { @@ -348,6 +350,7 @@ CBControlDHCPv6::databaseConfigApply(const db::BackendSelector& backend_selector auto const& cfg = CfgMgr::instance().getCurrentCfg(); external_cfg->sanityChecksLifetime(*cfg, "preferred-lifetime"); external_cfg->sanityChecksLifetime(*cfg, "valid-lifetime"); + external_cfg->sanityChecksDdnsTtlParameters(); CfgMgr::instance().mergeIntoCurrentCfg(external_cfg->getSequence()); CfgMgr::instance().getCurrentCfg()->getCfgSubnets6()->initAllocatorsAfterConfigure(); } diff --git a/src/lib/dhcpsrv/cfg_globals.cc b/src/lib/dhcpsrv/cfg_globals.cc index f1852cd637..f9c334eff9 100644 --- a/src/lib/dhcpsrv/cfg_globals.cc +++ b/src/lib/dhcpsrv/cfg_globals.cc @@ -57,6 +57,9 @@ CfgGlobals::nameToIndex = { { "multi-threading", MULTI_THREADING }, { "sanity-checks", SANITY_CHECKS }, { "dhcp-queue-control", DHCP_QUEUE_CONTROL }, + { "ddns-ttl", DDNS_TTL }, + { "ddns-ttl-min", DDNS_TTL_MIN }, + { "ddns-ttl-max", DDNS_TTL_MAX }, // DHCPv4 specific parameters. { "echo-client-id", ECHO_CLIENT_ID }, diff --git a/src/lib/dhcpsrv/cfg_globals.h b/src/lib/dhcpsrv/cfg_globals.h index 0923b48aa6..f0bccedef3 100644 --- a/src/lib/dhcpsrv/cfg_globals.h +++ b/src/lib/dhcpsrv/cfg_globals.h @@ -80,6 +80,9 @@ public: MULTI_THREADING, SANITY_CHECKS, DHCP_QUEUE_CONTROL, + DDNS_TTL, + DDNS_TTL_MIN, + DDNS_TTL_MAX, // DHCPv4 specific parameters. ECHO_CLIENT_ID, diff --git a/src/lib/dhcpsrv/dhcpsrv_messages.cc b/src/lib/dhcpsrv/dhcpsrv_messages.cc index 99c4c87ae8..a6d8f62d1c 100644 --- a/src/lib/dhcpsrv/dhcpsrv_messages.cc +++ b/src/lib/dhcpsrv/dhcpsrv_messages.cc @@ -49,7 +49,8 @@ extern const isc::log::MessageID DHCPSRV_CFGMGR_USE_UNICAST = "DHCPSRV_CFGMGR_US extern const isc::log::MessageID DHCPSRV_CLASS_WITH_ADDITIONAL_AND_LIFETIMES = "DHCPSRV_CLASS_WITH_ADDITIONAL_AND_LIFETIMES"; extern const isc::log::MessageID DHCPSRV_CLIENT_CLASS_DEPRECATED = "DHCPSRV_CLIENT_CLASS_DEPRECATED"; extern const isc::log::MessageID DHCPSRV_CLOSE_DB = "DHCPSRV_CLOSE_DB"; -extern const isc::log::MessageID DHCPSRV_DDNS_TTL_PERCENT_TOO_SMALL = "DHCPSRV_DDNS_TTL_PERCENT_TOO_SMALL"; +extern const isc::log::MessageID DHCPSRV_DDNS_TTL_TOO_LARGE = "DHCPSRV_DDNS_TTL_TOO_LARGE"; +extern const isc::log::MessageID DHCPSRV_DDNS_TTL_TOO_SMALL = "DHCPSRV_DDNS_TTL_TOO_SMALL"; extern const isc::log::MessageID DHCPSRV_DHCP4O6_RECEIVED_BAD_PACKET = "DHCPSRV_DHCP4O6_RECEIVED_BAD_PACKET"; extern const isc::log::MessageID DHCPSRV_DHCP_DDNS_ERROR_EXCEPTION = "DHCPSRV_DHCP_DDNS_ERROR_EXCEPTION"; extern const isc::log::MessageID DHCPSRV_DHCP_DDNS_HANDLER_NULL = "DHCPSRV_DHCP_DDNS_HANDLER_NULL"; @@ -220,7 +221,8 @@ const char* values[] = { "DHCPSRV_CLASS_WITH_ADDITIONAL_AND_LIFETIMES", "class: %1 has 'only-in-additional-list' true while specifying one or more lease life time values. Life time values will be ignored.", "DHCPSRV_CLIENT_CLASS_DEPRECATED", "The parameter 'client-class' is deprecated. Use 'client-classes' list parameter instead", "DHCPSRV_CLOSE_DB", "closing currently open %1 database", - "DHCPSRV_DDNS_TTL_PERCENT_TOO_SMALL", "ddns-ttl-percent %1 of lease lifetime %2 is too small, ignoring it", + "DHCPSRV_DDNS_TTL_TOO_LARGE", "%1 of lease life time %2 is %3, using maximum of %4 instead.", + "DHCPSRV_DDNS_TTL_TOO_SMALL", "%1 of lease life time %2 is %3, using minimum of %4 instead.", "DHCPSRV_DHCP4O6_RECEIVED_BAD_PACKET", "received bad DHCPv4o6 packet: %1", "DHCPSRV_DHCP_DDNS_ERROR_EXCEPTION", "error handler for DHCP_DDNS IO generated an expected exception: %1", "DHCPSRV_DHCP_DDNS_HANDLER_NULL", "error handler for DHCP_DDNS IO is not set.", diff --git a/src/lib/dhcpsrv/dhcpsrv_messages.h b/src/lib/dhcpsrv/dhcpsrv_messages.h index 1d35e947f9..956c97924b 100644 --- a/src/lib/dhcpsrv/dhcpsrv_messages.h +++ b/src/lib/dhcpsrv/dhcpsrv_messages.h @@ -50,7 +50,8 @@ extern const isc::log::MessageID DHCPSRV_CFGMGR_USE_UNICAST; extern const isc::log::MessageID DHCPSRV_CLASS_WITH_ADDITIONAL_AND_LIFETIMES; extern const isc::log::MessageID DHCPSRV_CLIENT_CLASS_DEPRECATED; extern const isc::log::MessageID DHCPSRV_CLOSE_DB; -extern const isc::log::MessageID DHCPSRV_DDNS_TTL_PERCENT_TOO_SMALL; +extern const isc::log::MessageID DHCPSRV_DDNS_TTL_TOO_LARGE; +extern const isc::log::MessageID DHCPSRV_DDNS_TTL_TOO_SMALL; extern const isc::log::MessageID DHCPSRV_DHCP4O6_RECEIVED_BAD_PACKET; extern const isc::log::MessageID DHCPSRV_DHCP_DDNS_ERROR_EXCEPTION; extern const isc::log::MessageID DHCPSRV_DHCP_DDNS_HANDLER_NULL; diff --git a/src/lib/dhcpsrv/dhcpsrv_messages.mes b/src/lib/dhcpsrv/dhcpsrv_messages.mes index fe79223afd..3329e13f60 100644 --- a/src/lib/dhcpsrv/dhcpsrv_messages.mes +++ b/src/lib/dhcpsrv/dhcpsrv_messages.mes @@ -267,14 +267,6 @@ the database access parameters are changed: in the latter case, the server closes the currently open database, and opens a database using the new parameters. -% DHCPSRV_DDNS_TTL_PERCENT_TOO_SMALL ddns-ttl-percent %1 of lease lifetime %2 is too small, ignoring it -Logged at debug log level 55. -A debug message issued when the DDNS TTL value calculated using the -ddns-ttl-percent is zero. Kea will ignore the value and calculate -the DDNS TTL as though ddsn-ttl-percent were not specified. The -value of ddns-ttl-percent and the lease lifetime are shown in -the message details. - % DHCPSRV_DHCP4O6_RECEIVED_BAD_PACKET received bad DHCPv4o6 packet: %1 A bad DHCPv4o6 packet was received. @@ -971,3 +963,20 @@ included in the message. % DHCPSRV_UNKNOWN_DB unknown database type: %1 The database access string specified a database type (given in the message) that is unknown to the software. This is a configuration error. + +% DHCPSRV_DDNS_TTL_TOO_SMALL %1 of lease life time %2 is %3, using minimum of %4 instead. +Logged at debug log level 55. +A debug message issued when the DDNS TTL value calculated using the +ddns-ttl-percent if specfieed or (0.33 if not) is too small. Kea will +ignore the value and is the minimum (ddns-ttl-min is specifed or 600 +seconds if not). The message details include the percentage, the lease +life time, the calculated TTL, and the value actually used. + +% DHCPSRV_DDNS_TTL_TOO_LARGE %1 of lease life time %2 is %3, using maximum of %4 instead. +Logged at debug log level 55. +A debug message issued when the DDNS TTL value calculated using the +ddns-ttl-percent if specfieed or (0.33 if not) is larger than the +the specified value of ddns-ttl-max. Kea will ignore the value and +use is the specified maxinimum instead. The message details include +the percentage, the lease life time, the calculated TTL, and the value +actually used. diff --git a/src/lib/dhcpsrv/ncr_generator.cc b/src/lib/dhcpsrv/ncr_generator.cc index c8a4a9c81a..36417f06c3 100644 --- a/src/lib/dhcpsrv/ncr_generator.cc +++ b/src/lib/dhcpsrv/ncr_generator.cc @@ -13,6 +13,7 @@ #include <dhcpsrv/ncr_generator.h> #include <stdint.h> #include <vector> +#include <util/str.h> using namespace isc; using namespace isc::dhcp; @@ -52,6 +53,9 @@ void queueNCRCommon(const NameChangeType& chg_type, const LeasePtrType& lease, ConflictResolutionMode conflict_resolution_mode = CHECK_WITH_DHCID; util::Optional<double> ddns_ttl_percent; + util::Optional<uint32_t> ddns_ttl; + util::Optional<uint32_t> ddns_ttl_min; + util::Optional<uint32_t> ddns_ttl_max; if (subnet) { auto mode = subnet->getDdnsConflictResolutionMode(); if (!mode.empty()) { @@ -59,6 +63,9 @@ void queueNCRCommon(const NameChangeType& chg_type, const LeasePtrType& lease, } ddns_ttl_percent = subnet->getDdnsTtlPercent(); + ddns_ttl = subnet->getDdnsTtl(); + ddns_ttl_min = subnet->getDdnsTtlMin(); + ddns_ttl_max = subnet->getDdnsTtlMax(); } try { @@ -68,7 +75,9 @@ void queueNCRCommon(const NameChangeType& chg_type, const LeasePtrType& lease, D2Dhcid dhcid = D2Dhcid(identifier, hostname_wire); // Calculate the TTL based on lease life time. - uint32_t ttl = calculateDdnsTtl(lease->valid_lft_, ddns_ttl_percent); + uint32_t ttl = calculateDdnsTtl(lease->valid_lft_, + ddns_ttl_percent, ddns_ttl, + ddns_ttl_min, ddns_ttl_max); // Create name change request. NameChangeRequestPtr ncr @@ -131,27 +140,50 @@ void queueNCR(const NameChangeType& chg_type, const Lease6Ptr& lease) { } } -uint32_t calculateDdnsTtl(uint32_t lease_lft, const util::Optional<double>& ddns_ttl_percent) { - // If we have a configured percentage use it to calculate TTL. - if (!ddns_ttl_percent.unspecified() && (ddns_ttl_percent.get() > 0.0)) { - uint32_t new_lft = static_cast<uint32_t>(round(ddns_ttl_percent.get() * lease_lft)); - if (new_lft > 0) { - return (new_lft); - } else { - LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL_DATA, - DHCPSRV_DDNS_TTL_PERCENT_TOO_SMALL) - .arg(ddns_ttl_percent.get()) - .arg(lease_lft); - } +uint32_t calculateDdnsTtl(uint32_t lease_lft, + const util::Optional<double>& ddns_ttl_percent, + const util::Optional<uint32_t>& ddns_ttl, + const util::Optional<uint32_t>& ddns_ttl_min, + const util::Optional<uint32_t>& ddns_ttl_max) { + // If we have an explicit value use it. + if (!ddns_ttl.unspecified() && ddns_ttl.get() > 0) { + return (ddns_ttl.get()); } - // Per RFC 4702 DDNS RR TTL should be given by: - // ((lease life time / 3) < 10 minutes) ? 10 minutes : (lease life time / 3) - if (lease_lft < 1800) { - return (600); + // Use specified percentage (if one) or 1/3 as called for in RFC 4702. + double ttl_percent = (ddns_ttl_percent.get() > 0.0 ? + ddns_ttl_percent.get() : 0.33333); + + // Calculate the ttl. + uint32_t ttl = static_cast<uint32_t>(round(ttl_percent * lease_lft)); + + // Adjust for minimum and maximum. + // If we have a custom mininum enforce it, otherwise per RFC 4702 it + // should not less than 600. + uint32_t ttl_min = (ddns_ttl_min.get() > 0) ? ddns_ttl_min.get() : 600; + if (ttl < ttl_min) { + LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL_DATA, + DHCPSRV_DDNS_TTL_TOO_SMALL) + .arg(util::str::dumpDouble(ttl_percent)) + .arg(lease_lft) + .arg(ttl) + .arg(ttl_min); + return (ttl_min); + } + + // If we have a maximum enforce it. + uint32_t ttl_max = ddns_ttl_max.get(); + if (ttl_max && ttl > ttl_max) { + LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL_DATA, + DHCPSRV_DDNS_TTL_TOO_LARGE) + .arg(util::str::dumpDouble(ttl_percent)) + .arg(lease_lft) + .arg(ttl) + .arg(ttl_max); + return (ttl_max); } - return (lease_lft / 3); + return (ttl); } } diff --git a/src/lib/dhcpsrv/ncr_generator.h b/src/lib/dhcpsrv/ncr_generator.h index 2011912a78..467d1ee21c 100644 --- a/src/lib/dhcpsrv/ncr_generator.h +++ b/src/lib/dhcpsrv/ncr_generator.h @@ -44,22 +44,38 @@ void queueNCR(const dhcp_ddns::NameChangeType& chg_type, const Lease6Ptr& lease) /// @brief Calculates TTL for a DNS resource record based on lease life time. /// -/// If the parameter, ddns_ttl_percent is greater than zero, it is used to calculate -/// the TTL directly: +/// The logic for calculating TTL is as follow: /// -/// TTL = (lease life time * ddns-ttl-percent) +/// If ddns-ttl is specified use it unconditionally. /// -/// Otherwise it is calculated as per RFC 4702 Section 5: +/// If ddns-ttl-percnet is specified use it otherwise use 1/3 as +/// called for by RFC 4702. /// -/// TTL = ((lease life time / 3) < 10 minutes) ? 10 minutes : (lease life time / 3) +/// Calculate the candidate TTL based on the deteremined percentage. +/// +/// If ddsn-ttl-min is specified used it otherwise use a minimum of +/// 600 per RFC 4702. If the TTL is less than the mininum return +/// the minimum. +/// +/// If ddsn-ttl-max is specified limit the ttl to that value otherwse +/// return the ttl. /// /// @param lease_life_time valid life time of the lease /// @param ddns_ttl_percent optional percentage to use in calculation +/// @param ddns_ttl optional percentage to use in calculation +/// @param ddns_ttl_min optional minium TTL to allow +/// @param ddns_ttl_max optional maximum TTL to allow /// /// @return the calculated TTL. uint32_t calculateDdnsTtl(uint32_t lease_life_time, const util::Optional<double>& ddns_ttl_percent - = util::Optional<double>()); + = util::Optional<double>(), + const util::Optional<uint32_t>& ddns_ttl + = util::Optional<uint32_t>(), + const util::Optional<uint32_t>& ddns_ttl_min + = util::Optional<uint32_t>(), + const util::Optional<uint32_t>& ddns_ttl_max + = util::Optional<uint32_t>()); } // end of isc::dhcp namespace } // end of isc namespace diff --git a/src/lib/dhcpsrv/network.cc b/src/lib/dhcpsrv/network.cc index 8ea291f6a4..6eb7822261 100644 --- a/src/lib/dhcpsrv/network.cc +++ b/src/lib/dhcpsrv/network.cc @@ -231,6 +231,18 @@ Network::toElement() const { map->set("ddns-ttl-percent", Element::create(ddns_ttl_percent_)); } + if (!ddns_ttl_.unspecified()) { + map->set("ddns-ttl", Element::create(ddns_ttl_)); + } + + if (!ddns_ttl_min_.unspecified()) { + map->set("ddns-ttl-min", Element::create(ddns_ttl_min_)); + } + + if (!ddns_ttl_max_.unspecified()) { + map->set("ddns-ttl-max", Element::create(ddns_ttl_max_)); + } + if (!hostname_char_set_.unspecified()) { map->set("hostname-char-set", Element::create(hostname_char_set_)); } diff --git a/src/lib/dhcpsrv/network.h b/src/lib/dhcpsrv/network.h index a460b677cf..8d4d94b49f 100644 --- a/src/lib/dhcpsrv/network.h +++ b/src/lib/dhcpsrv/network.h @@ -219,8 +219,9 @@ public: ddns_replace_client_name_mode_(), ddns_generated_prefix_(), ddns_qualifying_suffix_(), hostname_char_set_(), hostname_char_replacement_(), store_extended_info_(), cache_threshold_(), cache_max_age_(), ddns_update_on_renew_(), - ddns_conflict_resolution_mode_(), ddns_ttl_percent_(), allocator_type_(), - default_allocator_type_() { + ddns_conflict_resolution_mode_(), ddns_ttl_percent_(), + ddns_ttl_(), ddns_ttl_min_(), ddns_ttl_max_(), + allocator_type_(), default_allocator_type_() { } /// @brief Virtual destructor. @@ -682,6 +683,59 @@ public: ddns_ttl_percent_ = ddns_ttl_percent; } + + /// @brief Returns ddns-ttl + /// + /// @param inheritance inheritance mode to be used. + util::Optional<uint32_t> + getDdnsTtl(const Inheritance& inheritance = Inheritance::ALL) const { + return (getProperty<Network>(&Network::getDdnsTtl, + ddns_ttl_, inheritance, + CfgGlobals::DDNS_TTL)); + } + + /// @brief Sets new ddns-ttl + /// + /// @param ddns_ttl New value to use. + void setDdnsTtl(const util::Optional<uint32_t>& ddns_ttl) { + ddns_ttl_ = ddns_ttl; + } + + + /// @brief Returns ddns-ttl-min + /// + /// @param inheritance inheritance mode to be used. + util::Optional<uint32_t> + getDdnsTtlMin(const Inheritance& inheritance = Inheritance::ALL) const { + return (getProperty<Network>(&Network::getDdnsTtlMin, + ddns_ttl_min_, inheritance, + CfgGlobals::DDNS_TTL_MIN)); + } + + /// @brief Sets new ddns-ttl-min + /// + /// @param ddns_ttl_min New value to use. + void setDdnsTtlMin(const util::Optional<uint32_t>& ddns_ttl_min) { + ddns_ttl_min_ = ddns_ttl_min; + } + + /// @brief Returns ddns-ttl-max + /// + /// @param inheritance inheritance mode to be used. + util::Optional<uint32_t> + getDdnsTtlMax(const Inheritance& inheritance = Inheritance::ALL) const { + return (getProperty<Network>(&Network::getDdnsTtlMax, + ddns_ttl_max_, inheritance, + CfgGlobals::DDNS_TTL_MAX)); + } + + /// @brief Sets new ddns-ttl-max + /// + /// @param ddns_ttl_max New value to use. + void setDdnsTtlMax(const util::Optional<uint32_t>& ddns_ttl_max) { + ddns_ttl_max_ = ddns_ttl_max; + } + /// @brief Return the char set regexp used to sanitize client hostnames. util::Optional<std::string> getHostnameCharSet(const Inheritance& inheritance = Inheritance::ALL) const { @@ -1237,6 +1291,15 @@ protected: /// @brief Percentage of the lease lifetime to use for DNS TTL. util::Optional<double> ddns_ttl_percent_; + /// @brief Explicit value to use for DNS TTL. + util::Optional<uint32_t> ddns_ttl_; + + /// @brief Minimum value to use for DNS TTL. + util::Optional<uint32_t> ddns_ttl_min_; + + /// @brief Maximum value to use for DNS TTL. + util::Optional<uint32_t> ddns_ttl_max_; + /// @brief Allocator used for IP address allocations. util::Optional<std::string> allocator_type_; diff --git a/src/lib/dhcpsrv/parsers/base_network_parser.cc b/src/lib/dhcpsrv/parsers/base_network_parser.cc index 7cfad4b83e..4929a5ad36 100644 --- a/src/lib/dhcpsrv/parsers/base_network_parser.cc +++ b/src/lib/dhcpsrv/parsers/base_network_parser.cc @@ -197,10 +197,46 @@ BaseNetworkParser::parseDdnsParams(const data::ConstElementPtr& network_data, network->setDdnsUpdateOnRenew(getBoolean(network_data, "ddns-update-on-renew")); } + bool has_ddns_ttl = false; + uint32_t ddns_ttl = 0; + if (network_data->contains("ddns-ttl")) { + ddns_ttl = getInteger(network_data, "ddns-ttl"); + network->setDdnsTtl(ddns_ttl); + has_ddns_ttl = true; + } + if (network_data->contains("ddns-ttl-percent")) { + if (has_ddns_ttl) { + isc_throw(BadValue, "cannot specify both ddns-ttl-percent and ddns-ttl"); + } + network->setDdnsTtlPercent(getDouble(network_data, "ddns-ttl-percent")); } + uint32_t ddns_ttl_min = 0; + if (network_data->contains("ddns-ttl-min")) { + if (has_ddns_ttl) { + isc_throw(BadValue, "cannot specify both ddns-ttl-min and ddns-ttl"); + } + + ddns_ttl_min = getInteger(network_data, "ddns-ttl-min"); + network->setDdnsTtlMin(ddns_ttl_min); + } + + if (network_data->contains("ddns-ttl-max")) { + if (has_ddns_ttl) { + isc_throw(BadValue, "cannot specify both ddns-ttl-max and ddns-ttl"); + } + + uint32_t ddns_ttl_max = getInteger(network_data, "ddns-ttl-max"); + if (ddns_ttl_max < ddns_ttl_min) { + isc_throw(BadValue, "ddns-ttl-max: " << ddns_ttl_max + << " must be greater than ddns-ttl-min: " << ddns_ttl_min); + } + + network->setDdnsTtlMax(ddns_ttl_max); + } + // For backward compatibility, ddns-conflict-resolution-mode is optional. if (network_data->contains("ddns-conflict-resolution-mode")) { network->setDdnsConflictResolutionMode(getString(network_data, diff --git a/src/lib/dhcpsrv/parsers/simple_parser4.cc b/src/lib/dhcpsrv/parsers/simple_parser4.cc index b170be6fc5..bf0b003289 100644 --- a/src/lib/dhcpsrv/parsers/simple_parser4.cc +++ b/src/lib/dhcpsrv/parsers/simple_parser4.cc @@ -101,6 +101,9 @@ const SimpleKeywords SimpleParser4::GLOBAL4_PARAMETERS = { { "ddns-ttl-percent", Element::real }, { "ddns-conflict-resolution-mode", Element::string }, { "stash-agent-options", Element::boolean }, + { "ddns-ttl", Element::integer }, + { "ddns-ttl-min", Element::integer }, + { "ddns-ttl-max", Element::integer }, }; /// @brief This table defines default global values for DHCPv4 @@ -261,6 +264,9 @@ const SimpleKeywords SimpleParser4::SUBNET4_PARAMETERS = { { "offer-lifetime", Element::integer }, { "ddns-ttl-percent", Element::real }, { "ddns-conflict-resolution-mode", Element::string }, + { "ddns-ttl", Element::integer }, + { "ddns-ttl-min", Element::integer }, + { "ddns-ttl-max", Element::integer }, }; /// @brief This table defines default values for each IPv4 subnet. @@ -388,6 +394,9 @@ const SimpleKeywords SimpleParser4::SHARED_NETWORK4_PARAMETERS = { { "offer-lifetime", Element::integer }, { "ddns-ttl-percent", Element::real }, { "ddns-conflict-resolution-mode", Element::string }, + { "ddns-ttl", Element::integer }, + { "ddns-ttl-min", Element::integer }, + { "ddns-ttl-max", Element::integer }, }; /// @brief This table defines default values for interfaces for DHCPv4. diff --git a/src/lib/dhcpsrv/parsers/simple_parser6.cc b/src/lib/dhcpsrv/parsers/simple_parser6.cc index 701f66c631..ca8ca3a4a7 100644 --- a/src/lib/dhcpsrv/parsers/simple_parser6.cc +++ b/src/lib/dhcpsrv/parsers/simple_parser6.cc @@ -100,6 +100,9 @@ const SimpleKeywords SimpleParser6::GLOBAL6_PARAMETERS = { { "pd-allocator", Element::string }, { "ddns-ttl-percent", Element::real }, { "ddns-conflict-resolution-mode", Element::string }, + { "ddns-ttl", Element::integer }, + { "ddns-ttl-min", Element::integer }, + { "ddns-ttl-max", Element::integer }, }; /// @brief This table defines default global values for DHCPv6 @@ -253,6 +256,9 @@ const SimpleKeywords SimpleParser6::SUBNET6_PARAMETERS = { { "pd-allocator", Element::string }, { "ddns-ttl-percent", Element::real }, { "ddns-conflict-resolution-mode", Element::string }, + { "ddns-ttl", Element::integer }, + { "ddns-ttl-min", Element::integer }, + { "ddns-ttl-max", Element::integer }, }; /// @brief This table defines default values for each IPv6 subnet. @@ -401,6 +407,9 @@ const SimpleKeywords SimpleParser6::SHARED_NETWORK6_PARAMETERS = { { "pd-allocator", Element::string }, { "ddns-ttl-percent", Element::real }, { "ddns-conflict-resolution-mode", Element::string }, + { "ddns-ttl", Element::integer }, + { "ddns-ttl-min", Element::integer }, + { "ddns-ttl-max", Element::integer }, }; /// @brief This table defines default values for interfaces for DHCPv6. diff --git a/src/lib/dhcpsrv/srv_config.cc b/src/lib/dhcpsrv/srv_config.cc index 115d58550c..a984d7cbde 100644 --- a/src/lib/dhcpsrv/srv_config.cc +++ b/src/lib/dhcpsrv/srv_config.cc @@ -1057,6 +1057,42 @@ DdnsParams::getHostnameSanitizer() const { return (sanitizer); } +void +SrvConfig::sanityChecksDdnsTtlParameters() const { + // Need to check that global DDNS TTL values make sense + + // Get ddns-ttl first. If ddns-ttl is specified none of the others should be. + ConstElementPtr has_ddns_ttl = getConfiguredGlobal("ddns-ttl"); + + if (getConfiguredGlobal("ddns-ttl-percent")) { + if (has_ddns_ttl) { + isc_throw(BadValue, "cannot specify both ddns-ttl-percent and ddns-ttl"); + } + } + + ConstElementPtr has_ddns_ttl_min = getConfiguredGlobal("ddns-ttl-min"); + if (has_ddns_ttl_min && has_ddns_ttl) { + isc_throw(BadValue, "cannot specify both ddns-ttl-min and ddns-ttl"); + } + + ConstElementPtr has_ddns_ttl_max = getConfiguredGlobal("ddns-ttl-max"); + if (has_ddns_ttl_max) { + if (has_ddns_ttl) { + isc_throw(BadValue, "cannot specify both ddns-ttl-max and ddns-ttl"); + } + + if (has_ddns_ttl_min) { + // Have min and max, make sure the range is sane. + uint32_t ddns_ttl_min = has_ddns_ttl_min->intValue(); + uint32_t ddns_ttl_max = has_ddns_ttl_max->intValue(); + if (ddns_ttl_max < ddns_ttl_min) { + isc_throw(BadValue, "ddns-ttl-max: " << ddns_ttl_max + << " must be greater than ddns-ttl-min: " << ddns_ttl_min); + } + } + } +} + bool DdnsParams::getUpdateOnRenew() const { if (!subnet_) { @@ -1075,6 +1111,33 @@ DdnsParams::getTtlPercent() const { return (subnet_->getDdnsTtlPercent()); } +util::Optional<uint32_t> +DdnsParams::getTtl() const { + if (!subnet_) { + return (util::Optional<uint32_t>()); + } + + return (subnet_->getDdnsTtl()); +} + +util::Optional<uint32_t> +DdnsParams::getTtlMin() const { + if (!subnet_) { + return (util::Optional<uint32_t>()); + } + + return (subnet_->getDdnsTtlMin()); +} + +util::Optional<uint32_t> +DdnsParams::getTtlMax() const { + if (!subnet_) { + return (util::Optional<uint32_t>()); + } + + return (subnet_->getDdnsTtlMax()); +} + std::string DdnsParams::getConflictResolutionMode() const { if (!subnet_) { diff --git a/src/lib/dhcpsrv/srv_config.h b/src/lib/dhcpsrv/srv_config.h index be727052a2..33f846fefb 100644 --- a/src/lib/dhcpsrv/srv_config.h +++ b/src/lib/dhcpsrv/srv_config.h @@ -150,6 +150,30 @@ public: /// @return TTL percent as an Optional. util::Optional<double> getTtlPercent() const; + /// @brief Returns explicit TTL to use + /// + /// This value, if greater than zero, is used as the lifetime + /// passed to D2 in the NCR. + /// + /// @return TTL as an Optional. + util::Optional<uint32_t> getTtl() const; + + /// @brief Returns the minimum TTL to use + /// + /// This value, if greater than zero, is used as the lower boundary + /// for calculated TTLs. + /// + /// @return TTL minimum as an Optional. + util::Optional<uint32_t> getTtlMin() const; + + /// @brief Returns the maximum TTL to use + /// + /// This value, if greater than zero, is used as the upper boundary + /// for calculated TTLs. + /// + /// @return TTL maximum as an Optional. + util::Optional<uint32_t> getTtlMax() const; + /// @brief Returns the DDNS config resolution mode for kea-dhcp-ddns /// /// This value is communicated to D2 via the NCR. @@ -951,6 +975,16 @@ public: void sanityChecksLifetime(const SrvConfig& target_config, const std::string& name) const; + /// @brief Conducts sanity checks on global DDNS ttl parameters: + /// ddsn-ttl, ddsn-ttl-percent, ddns-ttl-min, ddns-ttl-max + /// + /// If ddns-ttl is specified none of the others can be + /// If ddns-ttl-min and ddsn-ttl-max are specified max cannot + /// be less than min. + /// + /// @throw Throws BadValue if any of the rules are violated. + void sanityChecksDdnsTtlParameters() const; + /// @brief Configures the server to allow or disallow specifying multiple /// hosts with the same IP address/subnet. /// diff --git a/src/lib/dhcpsrv/tests/dhcp_parsers_unittest.cc b/src/lib/dhcpsrv/tests/dhcp_parsers_unittest.cc index 4b46de77df..e8720bfeb0 100644 --- a/src/lib/dhcpsrv/tests/dhcp_parsers_unittest.cc +++ b/src/lib/dhcpsrv/tests/dhcp_parsers_unittest.cc @@ -72,6 +72,161 @@ public: void resetIfaceCfg() { CfgMgr::instance().clear(); } + + // Verifies valid permuatations of ddns-ttl-percent, ddns-ttl, + // ddns-ttl-min, and ddns-ttl-max values for SubnetX. + template<typename ParserType, typename NetworkPtrType> + void validDdnsTtlParmatersSubnet(int family) { + struct Scenario { + size_t line_no_; + std::string json_; + double ddns_ttl_percent_; + uint32_t ddns_ttl_; + uint32_t ddns_ttl_min_; + uint32_t ddns_ttl_max_; + }; + + std::list<Scenario> scenarios = { + { + __LINE__, + R"^({ + "id": 1, + "ddns-ttl": 100 + })^", + 0.0, 100, 0, 0 + },{ + __LINE__, + R"^({ + "id": 1, + "ddns-ttl-percent": 5.0 + })^", + 5.0, 0, 0, 0 + },{ + __LINE__, + R"^({ + "id": 1, + "ddns-ttl-min": 25 + })^", + 0.0, 0, 25, 0 + },{ + __LINE__, + R"^({ + "id": 1, + "ddns-ttl-max": 150 + })^", + 0.0, 0, 0, 150 + },{ + __LINE__, + R"^({ + "id": 1, + "ddns-ttl-min": 25, + "ddns-ttl-max": 150 + })^", + 0.0, 0, 25, 150 + },{ + __LINE__, + R"^({ + "id": 1, "subnet": "192.0.2.0/24", + "ddns-ttl-percent": 5.0, + "ddns-ttl-min": 25, + "ddns-ttl-max": 150 + })^", + 5.0, 0, 25, 150 + }}; + + ElementPtr subnet_elem = Element::create(family == AF_INET ? + "192.0.2.0/24" : "2001:db8::/64"); + for (const auto& scenario : scenarios) { + std::stringstream oss; + oss << "scenario at " << scenario.line_no_; + SCOPED_TRACE(oss.str()); + + // Parse configuration specified above. + ElementPtr config_element; + ASSERT_NO_THROW_LOG(config_element = Element::fromJSON(scenario.json_)); + config_element->set("subnet", subnet_elem); + + ParserType parser(family); + + NetworkPtrType subnet; + + ASSERT_NO_THROW_LOG(subnet = parser.parse(config_element)); + ASSERT_TRUE(subnet); + + EXPECT_EQ(subnet->getDdnsTtlPercent().unspecified(), (scenario.ddns_ttl_percent_ == 0.0)); + EXPECT_EQ(subnet->getDdnsTtlPercent(), scenario.ddns_ttl_percent_); + + EXPECT_EQ(subnet->getDdnsTtl().unspecified(), (scenario.ddns_ttl_ == 0)); + EXPECT_EQ(subnet->getDdnsTtl(), scenario.ddns_ttl_); + + EXPECT_EQ(subnet->getDdnsTtlMin().unspecified(), (scenario.ddns_ttl_min_ == 0)); + EXPECT_EQ(subnet->getDdnsTtlMin(), scenario.ddns_ttl_min_); + + EXPECT_EQ(subnet->getDdnsTtlMax().unspecified(), (scenario.ddns_ttl_max_ == 0)); + EXPECT_EQ(subnet->getDdnsTtlMax(), scenario.ddns_ttl_max_); + } + } + + // Verifies invalid permuatations of ddns-ttl-percent, ddns-ttl, + // ddns-ttl-min, and ddns-ttl-max values for SubnetX. + template<typename ParserType> + void invalidDdnsTtlParmatersSubnet(int family) { + struct Scenario { + size_t line_no_; + std::string json_; + std::string exp_message_; + }; + + std::list<Scenario> scenarios = { + { + __LINE__, + R"^({ + "id": 1, + "ddns-ttl-percent": 5.0, + "ddns-ttl": 100 + })^", + "subnet configuration failed: cannot specify both ddns-ttl-percent and ddns-ttl" + },{ + __LINE__, + R"^({ + "id": 1, + "ddns-ttl": 100, + "ddns-ttl-min": 25 + })^", + "subnet configuration failed: cannot specify both ddns-ttl-min and ddns-ttl" + },{ + __LINE__, + R"^({ + "id": 1, + "ddns-ttl": 100, + "ddns-ttl-max": 150 + })^", + "subnet configuration failed: cannot specify both ddns-ttl-max and ddns-ttl" + },{ + __LINE__, + R"^({ + "id": 1, + "ddns-ttl-min": 150, + "ddns-ttl-max": 25 + })^", + "subnet configuration failed: ddns-ttl-max: 25 must be greater than ddns-ttl-min: 150" + }}; + + ElementPtr subnet_elem = Element::create(family == AF_INET ? + "192.0.2.0/24" : "2001:db8::/64"); + for (const auto& scenario : scenarios) { + std::stringstream oss; + oss << "scenario at " << scenario.line_no_; + SCOPED_TRACE(oss.str()); + + // Parse configuration specified above. + ElementPtr config_element; + ASSERT_NO_THROW_LOG(config_element = Element::fromJSON(scenario.json_)); + config_element->set("subnet", subnet_elem); + ParserType parser(family); + ASSERT_THROW_MSG(parser.parse(config_element), DhcpConfigError, scenario.exp_message_); + } + } }; /// Verifies the code that parses mac sources and adds them to CfgMgr @@ -4115,4 +4270,28 @@ TEST_F(DhcpParserTest, deprecatedClientClassPool6) { " 'client-classes'. Use only the latter."); } +// Verifies valid permuatations of ddns-ttl-percent, ddns-ttl, +// ddns-ttl-min, and ddns-ttl-max values for Subnet4. +TEST_F(DhcpParserTest, validDdnsTtlParmatersSubnet4) { + validDdnsTtlParmatersSubnet<Subnet4ConfigParser, Subnet4Ptr>(AF_INET); +} + +// Verifies invalid permuatations of ddns-ttl-percent, ddns-ttl, +// ddns-ttl-min, and ddns-ttl-max values for Subnet4. +TEST_F(DhcpParserTest, invalidDdnsTtlParmatersSubnet4) { + invalidDdnsTtlParmatersSubnet<Subnet4ConfigParser>(AF_INET); +} + +// Verifies valid permuatations of ddns-ttl-percent, ddns-ttl, +// ddns-ttl-min, and ddns-ttl-max values for Subnet6. +TEST_F(DhcpParserTest, validDdnsTtlParmatersSubnet6) { + validDdnsTtlParmatersSubnet<Subnet6ConfigParser, Subnet6Ptr>(AF_INET6); +} + +// Verifies invalid permuatations of ddns-ttl-percent, ddns-ttl, +// ddns-ttl-min, and ddns-ttl-max values for Subnet6. +TEST_F(DhcpParserTest, invalidDdnsTtlParmatersSubnet6) { + invalidDdnsTtlParmatersSubnet<Subnet6ConfigParser>(AF_INET6); +} + } // Anonymous namespace diff --git a/src/lib/dhcpsrv/tests/ncr_generator_unittest.cc b/src/lib/dhcpsrv/tests/ncr_generator_unittest.cc index a9560bb484..da877d1765 100644 --- a/src/lib/dhcpsrv/tests/ncr_generator_unittest.cc +++ b/src/lib/dhcpsrv/tests/ncr_generator_unittest.cc @@ -234,14 +234,18 @@ public: void testNCR(const NameChangeType chg_type, const bool fwd, const bool rev, const std::string& fqdn, const std::string exp_dhcid, const ConflictResolutionMode exp_cr_mode = CHECK_WITH_DHCID, - const Optional<double> ttl_percent = Optional<double>()) { + const Optional<double> ddns_ttl_percent = Optional<double>(), + const Optional<uint32_t> ddns_ttl = Optional<uint32_t>(), + const Optional<uint32_t> ddns_ttl_min = Optional<uint32_t>(), + const Optional<uint32_t> ddns_ttl_max = Optional<uint32_t>()) { // Queue NCR. ASSERT_NO_FATAL_FAILURE(sendNCR(chg_type, fwd, rev, fqdn)); // Expecting one NCR be generated. ASSERT_EQ(1, d2_mgr_.getQueueSize()); // Calculate expected ttl. - uint32_t ttl = calculateDdnsTtl(lease_->valid_lft_, ttl_percent); + uint32_t ttl = calculateDdnsTtl(lease_->valid_lft_, ddns_ttl_percent, + ddns_ttl, ddns_ttl_min, ddns_ttl_max); // Check the details of the NCR. verifyNameChangeRequest(chg_type, rev, fwd, lease_->addr_.toText(), exp_dhcid, @@ -719,55 +723,83 @@ TEST_F(NCRGenerator4Test, conflictResolutionMode) { } } -// Verify that calculateDdnsTtl() produces the expected values. -TEST_F(NCRGenerator4Test, calculateDdnsTtl) { +// Verify that calculateDdnsTtl(), called by queueNcr() +// produces the expected values. Note there is no v6 +// version of this test as v4 and v6 use the same code. +TEST_F(NCRGenerator4Test, calculateDdnsTtlThroughQueueNcr) { + struct Scenario { + size_t line_no_; + uint32_t lease_lft_; + Optional<double> ddns_ttl_percent_; + Optional<uint32_t> ddns_ttl_; + Optional<uint32_t> ddns_ttl_min_; + Optional<uint32_t> ddns_ttl_max_; + uint32_t exp_ttl_; + }; - // A life time less than or equal to 1800 should yield a TTL of 600 seconds. - EXPECT_EQ(600, calculateDdnsTtl(100)); + Optional<double> no_percent; + Optional<uint32_t> no_ttl; + Optional<uint32_t> no_min; + Optional<uint32_t> no_max; - // A life time > 1800 should be 1/3 of the value. - EXPECT_EQ(601, calculateDdnsTtl(1803)); + std::list<Scenario> scenarios = { + // No modifiers, should be RFC % (i.e lft / 3) + { __LINE__, 2100, no_percent, no_ttl, no_min, no_max, 700 }, - // Now check permutations of values for ddns-ttl-percent. - util::Optional<double> ddns_ttl_percent; + // No modifiers, RFC % < RFC minium 600 + { __LINE__, 1500, no_percent, no_ttl, no_min, no_max, 600 }, - // Unspecified percent should result in normal per RFC calculation. - EXPECT_EQ(601, calculateDdnsTtl(1803, ddns_ttl_percent)); + // RFC % < specified minimum + { __LINE__, 2100, no_percent, no_ttl, 800, no_max, 800 }, - // A percentage of zero should be ignored. - ddns_ttl_percent = 0.0; - EXPECT_EQ(601, calculateDdnsTtl(1803, ddns_ttl_percent)); + // RFC % > specified maximum + { __LINE__, 2100, no_percent, no_ttl, no_min, 500, 500 }, - // A percentage that results in near zero should be ignored. - ddns_ttl_percent = 0.000005; - EXPECT_EQ(601, calculateDdnsTtl(1803, ddns_ttl_percent)); + // Explicit ttl + { __LINE__, 2100, no_percent, 900, no_min, no_max, 900 }, - // A large enough percentage should be used. - ddns_ttl_percent = 0.01; - EXPECT_EQ(18, calculateDdnsTtl(1803, ddns_ttl_percent)); + // Explicit ttl wins over specified percent + { __LINE__, 2100, 0.25, 900, no_min, no_max, 900 }, - // A large enough percentage should be used. - ddns_ttl_percent = 1.50; - EXPECT_EQ(2705, calculateDdnsTtl(1803, ddns_ttl_percent)); -} + // Explicit ttl wins over specified minumum + { __LINE__, 2100, no_percent, 900, 1000, no_max, 900 }, -// Verify that ddns-ttl-percent is used correctly by v4 queueNCR() -TEST_F(NCRGenerator4Test, withTtlPercent) { - { - SCOPED_TRACE("Ttl percent of 0"); - Optional<double> ttl_percent(0); - subnet_->setDdnsTtlPercent(ttl_percent); - testNCR(CHG_REMOVE, true, true, "MYHOST.example.com.", - "000001E356D43E5F0A496D65BCA24D982D646140813E3" - "B03AB370BFF46BFA309AE7BFD", CHECK_WITH_DHCID, ttl_percent); - } - { - SCOPED_TRACE("Ttl percent of 1.5"); - Optional<double> ttl_percent(1.5); - subnet_->setDdnsTtlPercent(ttl_percent); - testNCR(CHG_REMOVE, true, true, "MYHOST.example.com.", + // Explicit ttl wins over specified maxiumum + { __LINE__, 2100, no_percent, 900, no_min, 800, 900 }, + + // Specified percent > RFC minumum + { __LINE__, 2100, 0.5, no_ttl, no_min, no_max, 1050 }, + + // Specified percent < RFC minumum + { __LINE__, 2100, 0.25, no_ttl, no_min, no_max, 600 }, + + // Specified percent < specified minimum < RFC minimum + { __LINE__, 2100, 0.10, no_ttl, 300 , no_max, 300 }, + + // Specified percent > specified maximum + { __LINE__, 2100, 0.50, no_ttl, no_min, 800, 800 }, + + // Specified percent > lft + { __LINE__, 2100, 1.50, no_ttl, no_min, no_max, 3150 }, + }; + + for (const auto& scenario : scenarios) { + lease_->valid_lft_ = scenario.lease_lft_; + subnet_->setDdnsTtlPercent(scenario.ddns_ttl_percent_); + subnet_->setDdnsTtl(scenario.ddns_ttl_); + subnet_->setDdnsTtlMin(scenario.ddns_ttl_min_); + subnet_->setDdnsTtlMax(scenario.ddns_ttl_max_); + + std::stringstream oss; + oss << "scenario at: " << scenario.line_no_; + SCOPED_TRACE(oss.str()); + testNCR(CHG_ADD, true, true, "MYHOST.example.com.", "000001E356D43E5F0A496D65BCA24D982D646140813E3" - "B03AB370BFF46BFA309AE7BFD", CHECK_WITH_DHCID, ttl_percent); + "B03AB370BFF46BFA309AE7BFD", CHECK_WITH_DHCID, + scenario.ddns_ttl_percent_, + scenario.ddns_ttl_, + scenario.ddns_ttl_min_, + scenario.ddns_ttl_max_); } } diff --git a/src/lib/dhcpsrv/tests/network_unittest.cc b/src/lib/dhcpsrv/tests/network_unittest.cc index f0d2ac6801..7b4ac5ed4d 100644 --- a/src/lib/dhcpsrv/tests/network_unittest.cc +++ b/src/lib/dhcpsrv/tests/network_unittest.cc @@ -183,6 +183,9 @@ TEST_F(NetworkTest, inheritanceSupport4) { globals_->set("allocator", Element::create("random")); globals_->set("offer-lifetime", Element::create(45)); globals_->set("ddns-ttl-percent", Element::create(0.75)); + globals_->set("ddns-ttl", Element::create(400)); + globals_->set("ddns-ttl-min", Element::create(200)); + globals_->set("ddns-ttl-max", Element::create(600)); // For each parameter for which inheritance is supported run // the test that checks if the values are inherited properly. @@ -372,6 +375,24 @@ TEST_F(NetworkTest, inheritanceSupport4) { &Network::setDdnsTtlPercent, .33, .75); } + { + SCOPED_TRACE("ddns-ttl"); + testNetworkInheritance<TestNetwork4>(&Network::getDdnsTtl, + &Network::setDdnsTtl, + 300, 400); + } + { + SCOPED_TRACE("ddns-ttl-min"); + testNetworkInheritance<TestNetwork4>(&Network::getDdnsTtlMin, + &Network::setDdnsTtlMin, + 100, 200); + } + { + SCOPED_TRACE("ddns-ttl-max"); + testNetworkInheritance<TestNetwork4>(&Network::getDdnsTtlMax, + &Network::setDdnsTtlMax, + 500, 600); + } } // This test verifies that the inheritance is supported for DHCPv6 @@ -394,6 +415,9 @@ TEST_F(NetworkTest, inheritanceSupport6) { globals_->set("pd-allocator", Element::create("random")); globals_->set("ddns-ttl-percent", Element::create(0.55)); globals_->set("ddns-conflict-resolution-mode", Element::create("check-with-dhcid")); + globals_->set("ddns-ttl", Element::create(400)); + globals_->set("ddns-ttl-min", Element::create(200)); + globals_->set("ddns-ttl-max", Element::create(600)); // For each parameter for which inheritance is supported run // the test that checks if the values are inherited properly. @@ -502,6 +526,24 @@ TEST_F(NetworkTest, inheritanceSupport6) { &Network::setDdnsTtlPercent, .22, .55); } + { + SCOPED_TRACE("ddns-ttl"); + testNetworkInheritance<TestNetwork6>(&Network::getDdnsTtl, + &Network::setDdnsTtl, + 300, 400); + } + { + SCOPED_TRACE("ddns-ttl-min"); + testNetworkInheritance<TestNetwork6>(&Network::getDdnsTtlMin, + &Network::setDdnsTtlMin, + 100, 200); + } + { + SCOPED_TRACE("ddns-ttl-max"); + testNetworkInheritance<TestNetwork6>(&Network::getDdnsTtlMax, + &Network::setDdnsTtlMax, + 500, 600); + } // Interface-id requires special type of test. boost::shared_ptr<TestNetwork6> net_child(new TestNetwork6()); diff --git a/src/lib/dhcpsrv/tests/shared_network_parser_unittest.cc b/src/lib/dhcpsrv/tests/shared_network_parser_unittest.cc index 3eba3f573a..f384700d40 100644 --- a/src/lib/dhcpsrv/tests/shared_network_parser_unittest.cc +++ b/src/lib/dhcpsrv/tests/shared_network_parser_unittest.cc @@ -106,8 +106,155 @@ public: /// @param test_config JSON configuration text to parse /// @return A reference to the Network created if parsing is successful virtual Network& parseIntoNetwork(ConstElementPtr test_config) = 0; -}; + // Verifies valid permuatations of ddns-ttl-percent, ddns-ttl, + // ddns-ttl-min, and ddns-ttl-max values for SharedNetwork4. + template<typename NetworkTypePtr, typename ParserType> + void validDdnsTtlParmatersTest() { + struct Scenario { + size_t line_no_; + std::string json_; + double ddns_ttl_percent_; + uint32_t ddns_ttl_; + uint32_t ddns_ttl_min_; + uint32_t ddns_ttl_max_; + }; + + std::list<Scenario> scenarios = { + { + __LINE__, + R"^({ + "name": "one", + "ddns-ttl": 100 + })^", + 0.0, 100, 0, 0 + },{ + __LINE__, + R"^({ + "name": "one", + "ddns-ttl-percent": 5.0 + })^", + 5.0, 0, 0, 0 + },{ + __LINE__, + R"^({ + "name": "one", + "ddns-ttl-min": 25 + })^", + 0.0, 0, 25, 0 + },{ + __LINE__, + R"^({ + "name": "one", + "ddns-ttl-max": 150 + })^", + 0.0, 0, 0, 150 + },{ + __LINE__, + R"^({ + "name": "one", + "ddns-ttl-min": 25, + "ddns-ttl-max": 150 + })^", + 0.0, 0, 25, 150 + },{ + __LINE__, + R"^({ + "name": "one", + "ddns-ttl-percent": 5.0, + "ddns-ttl-min": 25, + "ddns-ttl-max": 150 + })^", + 5.0, 0, 25, 150 + }}; + + for (const auto& scenario : scenarios) { + std::stringstream oss; + oss << "scenario at " << scenario.line_no_; + SCOPED_TRACE(oss.str()); + + // Parse configuration specified above. + ElementPtr config_element; + ASSERT_NO_THROW_LOG(config_element = Element::fromJSON(scenario.json_)); + + ParserType parser; + NetworkTypePtr network; + + ASSERT_NO_THROW_LOG(network = parser.parse(config_element)); + ASSERT_TRUE(network); + + EXPECT_EQ(network->getDdnsTtlPercent().unspecified(), (scenario.ddns_ttl_percent_ == 0.0)); + EXPECT_EQ(network->getDdnsTtlPercent(), scenario.ddns_ttl_percent_); + + EXPECT_EQ(network->getDdnsTtl().unspecified(), (scenario.ddns_ttl_ == 0)); + EXPECT_EQ(network->getDdnsTtl(), scenario.ddns_ttl_); + + EXPECT_EQ(network->getDdnsTtlMin().unspecified(), (scenario.ddns_ttl_min_ == 0)); + EXPECT_EQ(network->getDdnsTtlMin(), scenario.ddns_ttl_min_); + + EXPECT_EQ(network->getDdnsTtlMax().unspecified(), (scenario.ddns_ttl_max_ == 0)); + EXPECT_EQ(network->getDdnsTtlMax(), scenario.ddns_ttl_max_); + } + } + + // Verifies invalid permuatations of ddns-ttl-percent, ddns-ttl, + // ddns-ttl-min, and ddns-ttl-max values for SharedNetwork. + template<typename ParserType> + void invalidDdnsTtlParmatersTest() { + struct Scenario { + size_t line_no_; + std::string json_; + std::string exp_message_; + }; + + std::list<Scenario> scenarios = { + { + __LINE__, + R"^({ + "name": "one", + "ddns-ttl-percent": 5.0, + "ddns-ttl": 100 + })^", + "cannot specify both ddns-ttl-percent and ddns-ttl (<string>:1:2)" + },{ + __LINE__, + R"^({ + "name": "one", + "ddns-ttl": 100, + "ddns-ttl-min": 25 + })^", + "cannot specify both ddns-ttl-min and ddns-ttl (<string>:1:2)" + },{ + __LINE__, + R"^({ + "name": "one", + "ddns-ttl": 100, + "ddns-ttl-max": 150 + })^", + "cannot specify both ddns-ttl-max and ddns-ttl (<string>:1:2)" + },{ + __LINE__, + R"^({ + "name": "one", + "ddns-ttl-min": 150, + "ddns-ttl-max": 25 + })^", + "ddns-ttl-max: 25 must be greater than ddns-ttl-min: 150 (<string>:1:2)" + }}; + + for (const auto& scenario : scenarios) { + std::stringstream oss; + oss << "scenario at " << scenario.line_no_; + SCOPED_TRACE(oss.str()); + + // Parse configuration specified above. + ElementPtr config_element; + ASSERT_NO_THROW_LOG(config_element = Element::fromJSON(scenario.json_)); + ParserType parser; + ASSERT_THROW_MSG(parser.parse(config_element), DhcpConfigError, scenario.exp_message_); + } + } +}; /// @brief Test fixture class for SharedNetwork4Parser class. class SharedNetwork4ParserTest : public SharedNetworkParserTest { @@ -1215,5 +1362,28 @@ TEST_F(SharedNetwork6ParserTest, deprecatedClientClass) { " (<string>:1:2)"); } +// Verifies valid permuatations of ddns-ttl-percent, ddns-ttl, +// ddns-ttl-min, and ddns-ttl-max values for SharedNetwork4. +TEST_F(SharedNetwork4ParserTest, validDdnsTtlParmaters4) { + validDdnsTtlParmatersTest<SharedNetwork4Ptr, SharedNetwork4Parser>(); +} + +// Verifies valid permuatations of ddns-ttl-percent, ddns-ttl, +// ddns-ttl-min, and ddns-ttl-max values for SharedNetwork6. +TEST_F(SharedNetwork6ParserTest, validDdnsTtlParmaters6) { + validDdnsTtlParmatersTest<SharedNetwork6Ptr, SharedNetwork6Parser>(); +} + +// Verifies invalid permuatations of ddns-ttl-percent, ddns-ttl, +// ddns-ttl-min, and ddns-ttl-max values for Subnet4. +TEST_F(SharedNetwork4ParserTest, invalidDdnsTtlParmaters4) { + invalidDdnsTtlParmatersTest<SharedNetwork4Parser>(); +} + +// Verifies invalid permuatations of ddns-ttl-percent, ddns-ttl, +// ddns-ttl-min, and ddns-ttl-max values for Subnet6. +TEST_F(SharedNetwork6ParserTest, invalidDdnsTtlParmaters6) { + invalidDdnsTtlParmatersTest<SharedNetwork6Parser>(); +} } // end of anonymous namespace diff --git a/src/lib/dhcpsrv/tests/srv_config_unittest.cc b/src/lib/dhcpsrv/tests/srv_config_unittest.cc index f3d6bb1107..531b8ce7fe 100644 --- a/src/lib/dhcpsrv/tests/srv_config_unittest.cc +++ b/src/lib/dhcpsrv/tests/srv_config_unittest.cc @@ -2214,4 +2214,73 @@ TEST_F(SrvConfigTest, sanityChecksLifetime) { } } +// Verifies that sanityChecksDdnsTtlParams works as expected. +TEST_F(SrvConfigTest, sanityChecksDdnsTtlParameters) { + { + SCOPED_TRACE("none"); + SrvConfig conf(32); + EXPECT_NO_THROW(conf.sanityChecksDdnsTtlParameters()); + } + + { + SCOPED_TRACE("ddns-ttl only"); + SrvConfig conf(32); + conf.addConfiguredGlobal("ddns-ttl", Element::create(200)); + EXPECT_NO_THROW(conf.sanityChecksDdnsTtlParameters()); + } + + { + SCOPED_TRACE("ddns-ttl and ddns-ttl-percent"); + SrvConfig conf(32); + conf.addConfiguredGlobal("ddns-ttl", Element::create(200)); + conf.addConfiguredGlobal("ddns-ttl-percent", Element::create(50.0)); + EXPECT_THROW_MSG(conf.sanityChecksDdnsTtlParameters(), isc::BadValue, + "cannot specify both ddns-ttl-percent and ddns-ttl"); + } + + { + SCOPED_TRACE("ddns-ttl and ddns-ttl-min"); + SrvConfig conf(32); + conf.addConfiguredGlobal("ddns-ttl", Element::create(200)); + conf.addConfiguredGlobal("ddns-ttl-min", Element::create(100)); + EXPECT_THROW_MSG(conf.sanityChecksDdnsTtlParameters(), isc::BadValue, + "cannot specify both ddns-ttl-min and ddns-ttl"); + } + + { + SCOPED_TRACE("ddns-ttl and ddns-ttl-max"); + SrvConfig conf(32); + conf.addConfiguredGlobal("ddns-ttl", Element::create(200)); + conf.addConfiguredGlobal("ddns-ttl-max", Element::create(100)); + EXPECT_THROW_MSG(conf.sanityChecksDdnsTtlParameters(), isc::BadValue, + "cannot specify both ddns-ttl-max and ddns-ttl"); + } + + { + SCOPED_TRACE("ddns-ttl-min < ddns-ttl-max"); + SrvConfig conf(32); + conf.addConfiguredGlobal("ddns-ttl-min", Element::create(25)); + conf.addConfiguredGlobal("ddns-ttl-max", Element::create(100)); + EXPECT_NO_THROW(conf.sanityChecksDdnsTtlParameters()); + } + + { + SCOPED_TRACE("ddns-ttl-min > ddns-ttl-max"); + SrvConfig conf(32); + conf.addConfiguredGlobal("ddns-ttl-min", Element::create(100)); + conf.addConfiguredGlobal("ddns-ttl-max", Element::create(25)); + EXPECT_THROW_MSG(conf.sanityChecksDdnsTtlParameters(), isc::BadValue, + "ddns-ttl-max: 25 must be greater than ddns-ttl-min: 100"); + } + + { + SCOPED_TRACE("ddsn-ttl-percent and ddns-ttl-min < ddns-ttl-max"); + SrvConfig conf(32); + conf.addConfiguredGlobal("ddns-ttl-percent", Element::create(50.0)); + conf.addConfiguredGlobal("ddns-ttl-min", Element::create(25)); + conf.addConfiguredGlobal("ddns-ttl-max", Element::create(100)); + EXPECT_NO_THROW(conf.sanityChecksDdnsTtlParameters()); + } +} + } // end of anonymous namespace diff --git a/src/lib/util/str.cc b/src/lib/util/str.cc index 093cd0580b..0bb7e8f67f 100644 --- a/src/lib/util/str.cc +++ b/src/lib/util/str.cc @@ -340,6 +340,13 @@ dumpAsHex(const uint8_t* data, size_t length) { return (output.str()); } +string +dumpDouble(double val, size_t precision) { + std::stringstream oss; + oss << setprecision(precision) << val; + return (oss.str()); +} + } // namespace str } // namespace util } // namespace isc diff --git a/src/lib/util/str.h b/src/lib/util/str.h index bd5587d717..c89294dc11 100644 --- a/src/lib/util/str.h +++ b/src/lib/util/str.h @@ -286,6 +286,13 @@ isPrintable(const std::vector<uint8_t>& content); std::string dumpAsHex(const uint8_t* data, size_t length); +/// @brief Converts a double to a string with given precision +/// +/// @param val double to convert +/// @param precision number of maxium number decimal places to output +/// @return string representaion of val +std::string dumpDouble(double val, size_t precision = 5); + } // namespace str } // namespace util } // namespace isc |