diff --git a/doc/examples/kea6/all-keys.json b/doc/examples/kea6/all-keys.json index 07c9cade38..eaff53d4a1 100644 --- a/doc/examples/kea6/all-keys.json +++ b/doc/examples/kea6/all-keys.json @@ -11,6 +11,14 @@ { // Kea DHCPv6 server configuration begins here. "Dhcp6": { + // Global flag selecting an IP address allocation strategy for all + // subnets. + "allocator": "iterative", + + // Global flag selecting a delegated prefix allocation strategy + // for all subnets. + "pd-allocator": "random", + // Ordered list of client classes used by the DHCPv6 server. "client-classes": [ { @@ -650,6 +658,14 @@ // networks group subnets together. "shared-networks": [ { + // A flag selecting an IP address allocation strategy for all + // subnets in this shared network. + "allocator": "random", + + // A flag selecting a delegated prefix allocation strategy for + // all subnets in this shared network. + "pd-allocator": "iterative", + // Restricts this shared network to allow only clients // that belong to the particular client class. If an // empty string is provided, no restriction is applied. @@ -773,6 +789,14 @@ // List of IPv6 subnets belonging to this shared network. "subnet6": [ { + // A flag selecting an IP address allocation strategy for + // the subnet. + "allocator": "iterative", + + // A flag selecting a delegated prefix allocation strategy + // for the subnet. + "pd-allocator": "iterative", + // Restricts this subnet to allow only clients that belong // to the particular client class. If an empty string is // provided, no restriction is applied. diff --git a/src/bin/dhcp4/dhcp4_parser.cc b/src/bin/dhcp4/dhcp4_parser.cc index a961496a89..01d05fa235 100644 --- a/src/bin/dhcp4/dhcp4_parser.cc +++ b/src/bin/dhcp4/dhcp4_parser.cc @@ -1,4 +1,4 @@ -// A Bison parser, made by GNU Bison 3.7.6. +// A Bison parser, made by GNU Bison 3.8.2. // Skeleton implementation for Bison LALR(1) parsers in C++ @@ -160,9 +160,9 @@ namespace isc { namespace dhcp { Dhcp4Parser::syntax_error::~syntax_error () YY_NOEXCEPT YY_NOTHROW {} - /*---------------. - | symbol kinds. | - `---------------*/ + /*---------. + | symbol. | + `---------*/ @@ -507,7 +507,7 @@ namespace isc { namespace dhcp { } void - Dhcp4Parser::yypop_ (int n) + Dhcp4Parser::yypop_ (int n) YY_NOEXCEPT { yystack_.pop (n); } @@ -550,13 +550,13 @@ namespace isc { namespace dhcp { } bool - Dhcp4Parser::yy_pact_value_is_default_ (int yyvalue) + Dhcp4Parser::yy_pact_value_is_default_ (int yyvalue) YY_NOEXCEPT { return yyvalue == yypact_ninf_; } bool - Dhcp4Parser::yy_table_value_is_error_ (int yyvalue) + Dhcp4Parser::yy_table_value_is_error_ (int yyvalue) YY_NOEXCEPT { return yyvalue == yytable_ninf_; } @@ -4865,16 +4865,16 @@ namespace isc { namespace dhcp { // Actual number of expected tokens int yycount = 0; - int yyn = yypact_[+yyparser_.yystack_[0].state]; + const int yyn = yypact_[+yyparser_.yystack_[0].state]; if (!yy_pact_value_is_default_ (yyn)) { /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. In other words, skip the first -YYN actions for this state because they are default actions. */ - int yyxbegin = yyn < 0 ? -yyn : 0; + const int yyxbegin = yyn < 0 ? -yyn : 0; // Stay within bounds of both yycheck and yytname. - int yychecklim = yylast_ - yyn + 1; - int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; + const int yychecklim = yylast_ - yyn + 1; + const int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; for (int yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck_[yyx + yyn] == yyx && yyx != symbol_kind::S_YYerror && !yy_table_value_is_error_ (yytable_[yyx + yyn])) @@ -4895,6 +4895,9 @@ namespace isc { namespace dhcp { + + + int Dhcp4Parser::yy_syntax_error_arguments_ (const context& yyctx, symbol_kind_type yyarg[], int yyargn) const @@ -5141,9 +5144,9 @@ namespace isc { namespace dhcp { 199, 203, 0, 0, 0, 0, 194, 0, 182, 185, 186, 187, 188, 189, 190, 191, 192, 193, 420, 422, 424, 568, 418, 426, 0, 430, 428, 650, 417, 372, - 373, 374, 375, 376, 400, 401, 402, 403, 404, 415, + 373, 374, 375, 376, 400, 401, 402, 403, 404, 416, 390, 391, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 416, 0, 369, 379, 395, 396, 397, 380, + 413, 414, 415, 0, 369, 379, 395, 396, 397, 380, 382, 383, 386, 387, 388, 385, 381, 377, 378, 398, 399, 384, 392, 393, 394, 389, 589, 588, 584, 585, 583, 0, 579, 582, 586, 587, 648, 636, 638, 642, @@ -5224,9 +5227,9 @@ namespace isc { namespace dhcp { 216, 0, 0, 0, 0, 268, 271, 272, 273, 274, 275, 276, 0, 282, 0, 0, 0, 0, 236, 0, 231, 0, 363, 0, 502, 0, 541, 494, 472, 473, - 474, 457, 458, 477, 478, 479, 480, 481, 492, 460, + 474, 457, 458, 477, 478, 479, 480, 481, 493, 460, 461, 482, 483, 484, 485, 486, 487, 488, 489, 490, - 491, 493, 454, 455, 456, 470, 471, 467, 468, 469, + 491, 492, 454, 455, 456, 470, 471, 467, 468, 469, 466, 0, 451, 459, 475, 476, 462, 463, 464, 465, 447, 294, 682, 684, 0, 677, 678, 679, 680, 681, 670, 671, 675, 676, 672, 673, 674, 0, 662, 663, @@ -6265,7 +6268,7 @@ namespace isc { namespace dhcp { #line 14 "dhcp4_parser.yy" } } // isc::dhcp -#line 6269 "dhcp4_parser.cc" +#line 6272 "dhcp4_parser.cc" #line 2912 "dhcp4_parser.yy" diff --git a/src/bin/dhcp4/dhcp4_parser.h b/src/bin/dhcp4/dhcp4_parser.h index 01aaa7e262..cf31a6f40c 100644 --- a/src/bin/dhcp4/dhcp4_parser.h +++ b/src/bin/dhcp4/dhcp4_parser.h @@ -1,4 +1,4 @@ -// A Bison parser, made by GNU Bison 3.7.6. +// A Bison parser, made by GNU Bison 3.8.2. // Skeleton interface for Bison LALR(1) parsers in C++ @@ -133,12 +133,18 @@ using namespace std; # define YY_USE(E) /* empty */ #endif -#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ /* Suppress an incorrect diagnostic about yylval being uninitialized. */ -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ +#if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__ +# if __GNUC__ * 100 + __GNUC_MINOR__ < 407 +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") +# else +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") +# endif # define YY_IGNORE_MAYBE_UNINITIALIZED_END \ _Pragma ("GCC diagnostic pop") #else @@ -200,7 +206,7 @@ using namespace std; #line 14 "dhcp4_parser.yy" namespace isc { namespace dhcp { -#line 204 "dhcp4_parser.h" +#line 210 "dhcp4_parser.h" @@ -209,27 +215,32 @@ namespace isc { namespace dhcp { class Dhcp4Parser { public: -#ifndef PARSER4_STYPE +#ifdef PARSER4_STYPE +# ifdef __GNUC__ +# pragma GCC message "bison: do not #define PARSER4_STYPE in C++, use %define api.value.type" +# endif + typedef PARSER4_STYPE value_type; +#else /// A buffer to store and retrieve objects. /// /// Sort of a variant, but does not keep track of the nature /// of the stored data, since that knowledge is available /// via the current parser state. - class semantic_type + class value_type { public: /// Type of *this. - typedef semantic_type self_type; + typedef value_type self_type; /// Empty construction. - semantic_type () YY_NOEXCEPT - : yybuffer_ () + value_type () YY_NOEXCEPT + : yyraw_ () , yytypeid_ (YY_NULLPTR) {} /// Construct and fill. template - semantic_type (YY_RVREF (T) t) + value_type (YY_RVREF (T) t) : yytypeid_ (&typeid (T)) { PARSER4__ASSERT (sizeof (T) <= size); @@ -238,13 +249,13 @@ namespace isc { namespace dhcp { #if 201103L <= YY_CPLUSPLUS /// Non copyable. - semantic_type (const self_type&) = delete; + value_type (const self_type&) = delete; /// Non copyable. self_type& operator= (const self_type&) = delete; #endif /// Destruction, allowed only if empty. - ~semantic_type () YY_NOEXCEPT + ~value_type () YY_NOEXCEPT { PARSER4__ASSERT (!yytypeid_); } @@ -388,7 +399,7 @@ namespace isc { namespace dhcp { private: #if YY_CPLUSPLUS < 201103L /// Non copyable. - semantic_type (const self_type&); + value_type (const self_type&); /// Non copyable. self_type& operator= (const self_type&); #endif @@ -398,7 +409,7 @@ namespace isc { namespace dhcp { T* yyas_ () YY_NOEXCEPT { - void *yyp = yybuffer_.yyraw; + void *yyp = yyraw_; return static_cast (yyp); } @@ -407,7 +418,7 @@ namespace isc { namespace dhcp { const T* yyas_ () const YY_NOEXCEPT { - const void *yyp = yybuffer_.yyraw; + const void *yyp = yyraw_; return static_cast (yyp); } @@ -445,18 +456,19 @@ namespace isc { namespace dhcp { union { /// Strongest alignment constraints. - long double yyalign_me; + long double yyalign_me_; /// A buffer large enough to store any of the semantic values. - char yyraw[size]; - } yybuffer_; + char yyraw_[size]; + }; /// Whether the content is built: if defined, the name of the stored type. const std::type_info *yytypeid_; }; -#else - typedef PARSER4_STYPE semantic_type; #endif + /// Backward compatibility (Bison 3.8). + typedef value_type semantic_type; + /// Symbol locations. typedef location location_type; @@ -700,7 +712,7 @@ namespace isc { namespace dhcp { }; /// Token kind, as returned by yylex. - typedef token::yytokentype token_kind_type; + typedef token::token_kind_type token_kind_type; /// Backward compatibility alias (Bison 3.6). typedef token_kind_type token_type; @@ -1373,7 +1385,7 @@ namespace isc { namespace dhcp { typedef Base super_type; /// Default constructor. - basic_symbol () + basic_symbol () YY_NOEXCEPT : value () , location () {} @@ -1514,6 +1526,8 @@ namespace isc { namespace dhcp { clear (); } + + /// Destroy contents, and record that is empty. void clear () YY_NOEXCEPT { @@ -1581,7 +1595,7 @@ switch (yykind) void move (basic_symbol& s); /// The semantic value. - semantic_type value; + value_type value; /// The location. location_type location; @@ -1596,22 +1610,24 @@ switch (yykind) /// Type access provider for token (enum) based symbols. struct by_kind { - /// Default constructor. - by_kind (); - -#if 201103L <= YY_CPLUSPLUS - /// Move constructor. - by_kind (by_kind&& that); -#endif - - /// Copy constructor. - by_kind (const by_kind& that); - /// The symbol kind as needed by the constructor. typedef token_kind_type kind_type; + /// Default constructor. + by_kind () YY_NOEXCEPT; + +#if 201103L <= YY_CPLUSPLUS + /// Move constructor. + by_kind (by_kind&& that) YY_NOEXCEPT; +#endif + + /// Copy constructor. + by_kind (const by_kind& that) YY_NOEXCEPT; + /// Constructor from (external) token numbers. - by_kind (kind_type t); + by_kind (kind_type t) YY_NOEXCEPT; + + /// Record that this symbol is empty. void clear () YY_NOEXCEPT; @@ -1641,59 +1657,69 @@ switch (yykind) typedef basic_symbol super_type; /// Empty symbol. - symbol_type () {} + symbol_type () YY_NOEXCEPT {} /// Constructor for valueless symbols, and symbols from each type. #if 201103L <= YY_CPLUSPLUS symbol_type (int tok, location_type l) - : super_type(token_type (tok), std::move (l)) + : super_type (token_kind_type (tok), std::move (l)) #else symbol_type (int tok, const location_type& l) - : super_type(token_type (tok), l) + : super_type (token_kind_type (tok), l) #endif { +#if !defined _MSC_VER || defined __clang__ PARSER4__ASSERT (tok == token::TOKEN_END || (token::TOKEN_PARSER4_error <= tok && tok <= token::TOKEN_SUB_CONFIG_CONTROL)); +#endif } #if 201103L <= YY_CPLUSPLUS symbol_type (int tok, bool v, location_type l) - : super_type(token_type (tok), std::move (v), std::move (l)) + : super_type (token_kind_type (tok), std::move (v), std::move (l)) #else symbol_type (int tok, const bool& v, const location_type& l) - : super_type(token_type (tok), v, l) + : super_type (token_kind_type (tok), v, l) #endif { +#if !defined _MSC_VER || defined __clang__ PARSER4__ASSERT (tok == token::TOKEN_BOOLEAN); +#endif } #if 201103L <= YY_CPLUSPLUS symbol_type (int tok, double v, location_type l) - : super_type(token_type (tok), std::move (v), std::move (l)) + : super_type (token_kind_type (tok), std::move (v), std::move (l)) #else symbol_type (int tok, const double& v, const location_type& l) - : super_type(token_type (tok), v, l) + : super_type (token_kind_type (tok), v, l) #endif { +#if !defined _MSC_VER || defined __clang__ PARSER4__ASSERT (tok == token::TOKEN_FLOAT); +#endif } #if 201103L <= YY_CPLUSPLUS symbol_type (int tok, int64_t v, location_type l) - : super_type(token_type (tok), std::move (v), std::move (l)) + : super_type (token_kind_type (tok), std::move (v), std::move (l)) #else symbol_type (int tok, const int64_t& v, const location_type& l) - : super_type(token_type (tok), v, l) + : super_type (token_kind_type (tok), v, l) #endif { +#if !defined _MSC_VER || defined __clang__ PARSER4__ASSERT (tok == token::TOKEN_INTEGER); +#endif } #if 201103L <= YY_CPLUSPLUS symbol_type (int tok, std::string v, location_type l) - : super_type(token_type (tok), std::move (v), std::move (l)) + : super_type (token_kind_type (tok), std::move (v), std::move (l)) #else symbol_type (int tok, const std::string& v, const location_type& l) - : super_type(token_type (tok), v, l) + : super_type (token_kind_type (tok), v, l) #endif { +#if !defined _MSC_VER || defined __clang__ PARSER4__ASSERT (tok == token::TOKEN_STRING); +#endif } }; @@ -1742,7 +1768,7 @@ switch (yykind) /// YYSYMBOL. No bounds checking. static std::string symbol_name (symbol_kind_type yysymbol); - // Implementation of make_symbol for each symbol type. + // Implementation of make_symbol for each token kind. #if 201103L <= YY_CPLUSPLUS static symbol_type @@ -4939,19 +4965,19 @@ switch (yykind) /// Whether the given \c yypact_ value indicates a defaulted state. /// \param yyvalue the value to check - static bool yy_pact_value_is_default_ (int yyvalue); + static bool yy_pact_value_is_default_ (int yyvalue) YY_NOEXCEPT; /// Whether the given \c yytable_ value indicates a syntax error. /// \param yyvalue the value to check - static bool yy_table_value_is_error_ (int yyvalue); + static bool yy_table_value_is_error_ (int yyvalue) YY_NOEXCEPT; static const short yypact_ninf_; static const signed char yytable_ninf_; /// Convert a scanner token kind \a t to a symbol kind. /// In theory \a t should be a token_kind_type, but character literals - /// are valid, yet not members of the token_type enum. - static symbol_kind_type yytranslate_ (int t); + /// are valid, yet not members of the token_kind_type enum. + static symbol_kind_type yytranslate_ (int t) YY_NOEXCEPT; /// Convert the symbol name \a n to a form suitable for a diagnostic. static std::string yytnamerr_ (const char *yystr); @@ -4983,14 +5009,14 @@ switch (yykind) static const short yycheck_[]; - // YYSTOS[STATE-NUM] -- The (internal number of the) accessing - // symbol of state STATE-NUM. + // YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of + // state STATE-NUM. static const short yystos_[]; - // YYR1[YYN] -- Symbol number of symbol that rule YYN derives. + // YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. static const short yyr1_[]; - // YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. + // YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. static const signed char yyr2_[]; @@ -5089,7 +5115,7 @@ switch (yykind) typedef typename S::size_type size_type; typedef typename std::ptrdiff_t index_type; - stack (size_type n = 200) + stack (size_type n = 200) YY_NOEXCEPT : seq_ (n) {} @@ -5168,7 +5194,7 @@ switch (yykind) class slice { public: - slice (const stack& stack, index_type range) + slice (const stack& stack, index_type range) YY_NOEXCEPT : stack_ (stack) , range_ (range) {} @@ -5218,7 +5244,7 @@ switch (yykind) void yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym); /// Pop \a n symbols from the stack. - void yypop_ (int n = 1); + void yypop_ (int n = 1) YY_NOEXCEPT; /// Constants. enum @@ -5236,7 +5262,7 @@ switch (yykind) inline Dhcp4Parser::symbol_kind_type - Dhcp4Parser::yytranslate_ (int t) + Dhcp4Parser::yytranslate_ (int t) YY_NOEXCEPT { // YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to // TOKEN-NUM as returned by yylex. @@ -5298,7 +5324,7 @@ switch (yykind) if (t <= 0) return symbol_kind::S_YYEOF; else if (t <= code_max) - return YY_CAST (symbol_kind_type, translate_table[t]); + return static_cast (translate_table[t]); else return symbol_kind::S_YYUNDEF; } @@ -5348,6 +5374,7 @@ switch (yykind) + template Dhcp4Parser::symbol_kind_type Dhcp4Parser::basic_symbol::type_get () const YY_NOEXCEPT @@ -5355,6 +5382,7 @@ switch (yykind) return this->kind (); } + template bool Dhcp4Parser::basic_symbol::empty () const YY_NOEXCEPT @@ -5406,13 +5434,13 @@ switch (yykind) // by_kind. inline - Dhcp4Parser::by_kind::by_kind () + Dhcp4Parser::by_kind::by_kind () YY_NOEXCEPT : kind_ (symbol_kind::S_YYEMPTY) {} #if 201103L <= YY_CPLUSPLUS inline - Dhcp4Parser::by_kind::by_kind (by_kind&& that) + Dhcp4Parser::by_kind::by_kind (by_kind&& that) YY_NOEXCEPT : kind_ (that.kind_) { that.clear (); @@ -5420,15 +5448,17 @@ switch (yykind) #endif inline - Dhcp4Parser::by_kind::by_kind (const by_kind& that) + Dhcp4Parser::by_kind::by_kind (const by_kind& that) YY_NOEXCEPT : kind_ (that.kind_) {} inline - Dhcp4Parser::by_kind::by_kind (token_kind_type t) + Dhcp4Parser::by_kind::by_kind (token_kind_type t) YY_NOEXCEPT : kind_ (yytranslate_ (t)) {} + + inline void Dhcp4Parser::by_kind::clear () YY_NOEXCEPT @@ -5451,6 +5481,7 @@ switch (yykind) return kind_; } + inline Dhcp4Parser::symbol_kind_type Dhcp4Parser::by_kind::type_get () const YY_NOEXCEPT @@ -5458,9 +5489,10 @@ switch (yykind) return this->kind (); } + #line 14 "dhcp4_parser.yy" } } // isc::dhcp -#line 5464 "dhcp4_parser.h" +#line 5496 "dhcp4_parser.h" diff --git a/src/bin/dhcp4/dhcp4_parser.yy b/src/bin/dhcp4/dhcp4_parser.yy index 0f932c99db..9c6cd1a97b 100644 --- a/src/bin/dhcp4/dhcp4_parser.yy +++ b/src/bin/dhcp4/dhcp4_parser.yy @@ -1532,8 +1532,8 @@ subnet4_param: valid_lifetime | ddns_use_conflict_resolution | hostname_char_set | hostname_char_replacement - | allocator | store_extended_info + | allocator | unknown_map_entry ; @@ -1719,8 +1719,8 @@ shared_network_param: name | ddns_use_conflict_resolution | hostname_char_set | hostname_char_replacement - | allocator | store_extended_info + | allocator | unknown_map_entry ; diff --git a/src/bin/dhcp4/location.hh b/src/bin/dhcp4/location.hh index 3c542905df..860fbfa0c9 100644 --- a/src/bin/dhcp4/location.hh +++ b/src/bin/dhcp4/location.hh @@ -1,4 +1,4 @@ -// A Bison parser, made by GNU Bison 3.7.6. +// A Bison parser, made by GNU Bison 3.8.2. // Locations for Bison parsers in C++ diff --git a/src/bin/dhcp6/dhcp6_lexer.cc b/src/bin/dhcp6/dhcp6_lexer.cc index 4e34684fc4..f6dda5ae2e 100644 --- a/src/bin/dhcp6/dhcp6_lexer.cc +++ b/src/bin/dhcp6/dhcp6_lexer.cc @@ -328,6 +328,7 @@ typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; +typedef uint64_t flex_uint64_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; @@ -452,7 +453,7 @@ typedef size_t yy_size_t; #endif /* %if-not-reentrant */ -extern int yyleng; +extern yy_size_t yyleng; /* %endif */ /* %if-c-only */ @@ -505,7 +506,7 @@ struct yy_buffer_state /* Number of characters read into yy_ch_buf, not including EOB * characters. */ - int yy_n_chars; + yy_size_t yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to @@ -586,8 +587,8 @@ static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */ /* %not-for-header */ /* yy_hold_char holds the character lost when yytext is formed. */ static char yy_hold_char; -static int yy_n_chars; /* number of characters read into yy_ch_buf */ -int yyleng; +static yy_size_t yy_n_chars; /* number of characters read into yy_ch_buf */ +yy_size_t yyleng; /* Points to current character in buffer. */ static char *yy_c_buf_p = NULL; @@ -617,7 +618,7 @@ static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file ); YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size ); YY_BUFFER_STATE yy_scan_string ( const char *yy_str ); -YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len ); +YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, yy_size_t len ); /* %endif */ @@ -685,14 +686,14 @@ static void yynoreturn yy_fatal_error ( const char* msg ); #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ /* %% [2.0] code to fiddle yytext and yyleng for yymore() goes here \ */\ - yyleng = (int) (yy_cp - yy_bp); \ + yyleng = (yy_size_t) (yy_cp - yy_bp); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ /* %% [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 223 -#define YY_END_OF_BUFFER 224 +#define YY_NUM_RULES 225 +#define YY_END_OF_BUFFER 226 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -700,21 +701,21 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[2128] = +static const flex_int16_t yy_accept[2145] = { 0, - 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, - 224, 222, 10, 11, 222, 1, 216, 213, 216, 216, - 222, 215, 214, 222, 222, 222, 222, 222, 209, 210, - 222, 222, 222, 211, 212, 5, 5, 5, 222, 222, - 222, 10, 11, 0, 0, 204, 0, 0, 0, 0, + 218, 218, 0, 0, 0, 0, 0, 0, 0, 0, + 226, 224, 10, 11, 224, 1, 218, 215, 218, 218, + 224, 217, 216, 224, 224, 224, 224, 224, 211, 212, + 224, 224, 224, 213, 214, 5, 5, 5, 224, 224, + 224, 10, 11, 0, 0, 206, 0, 0, 0, 0, 0, 0, 0, 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, 216, 216, - 0, 215, 216, 3, 2, 6, 0, 216, 0, 0, - 0, 0, 0, 0, 4, 0, 0, 9, 0, 205, + 0, 0, 0, 0, 0, 0, 0, 1, 218, 218, + 0, 217, 218, 3, 2, 6, 0, 218, 0, 0, + 0, 0, 0, 0, 4, 0, 0, 9, 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -722,13 +723,13 @@ static const flex_int16_t yy_accept[2128] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, - 0, 0, 8, 0, 0, 173, 0, 0, 174, 0, + 0, 0, 8, 0, 0, 175, 0, 0, 176, 0, - 0, 0, 0, 0, 0, 0, 206, 208, 0, 0, + 0, 0, 0, 0, 0, 0, 208, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -736,206 +737,208 @@ static const flex_int16_t yy_accept[2128] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 221, 219, 0, 218, 217, - 0, 0, 0, 0, 0, 172, 0, 28, 0, 27, - 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 223, 221, 0, 220, 219, + 0, 0, 0, 0, 0, 174, 0, 28, 0, 27, + 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 123, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 220, 217, 0, 0, - 0, 0, 29, 0, 31, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, - 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, - 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 222, 219, + 0, 0, 0, 0, 29, 0, 31, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 132, 0, + 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, + 0, 0, 0, 0, 159, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 113, 0, 62, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 115, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 151, 0, 177, 0, 55, - 0, 59, 0, 0, 0, 0, 37, 34, 33, 0, - 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, + 0, 179, 0, 55, 0, 59, 0, 0, 0, 0, + 37, 34, 33, 0, 0, 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, - 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 144, 0, 0, 0, 0, 0, 0, 0, + 0, 178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 57, 0, 0, 32, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, + 0, 0, 0, 0, 0, 57, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, - 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 7, 35, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, - - 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, + 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 115, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, 170, 139, 0, 0, - 0, 0, 0, 0, 0, 143, 56, 0, 0, 0, - 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 145, 0, 63, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 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, - 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 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, 159, 0, 0, 0, 0, 0, 0, - 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 60, 107, 0, - 0, 0, 156, 0, 0, 0, 0, 54, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 147, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - - 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 198, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, - - 171, 14, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 158, 175, 0, 40, 0, 167, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 20, 0, 0, 0, 101, - 0, 0, 0, 0, 0, 169, 0, 58, 0, 109, - 0, 196, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, - 0, 0, 0, 0, 135, 136, 0, 0, 0, 0, - 0, 0, 0, 0, 105, 0, 0, 0, 76, 0, + 0, 0, 0, 143, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 164, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 131, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 102, 124, 0, 0, 0, 0, - - 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, - 0, 0, 0, 0, 0, 17, 0, 15, 0, 0, - 193, 192, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 30, 0, 0, 0, 150, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 186, 0, 0, 195, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 118, 0, 155, 0, 46, 0, 0, 64, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, - 0, 0, 0, 0, 0, 0, 0, 0, 120, 84, - - 0, 0, 163, 0, 0, 0, 0, 154, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, - 0, 114, 0, 0, 138, 0, 0, 0, 202, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 112, 0, 0, 0, 0, 178, 0, + 0, 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 45, 0, 0, 0, 0, 0, 0, 0, 152, - - 0, 0, 0, 0, 0, 0, 148, 51, 0, 0, - 0, 191, 38, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, - 48, 0, 0, 18, 0, 0, 0, 72, 0, 0, - 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, - 0, 137, 0, 0, 0, 65, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, - - 0, 0, 0, 0, 0, 168, 0, 0, 0, 50, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 100, 0, 68, 0, 0, 0, 36, 0, 52, - 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, 184, 0, 0, - 0, 0, 153, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 121, 0, 0, 0, 0, 0, - - 69, 0, 0, 0, 0, 189, 0, 0, 0, 0, - 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 25, 39, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 190, 0, 0, 13, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 183, 0, 82, 0, 81, 0, 21, 0, - 77, 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, 0, 0, 111, - 0, 0, 0, 182, 0, 0, 0, 0, 0, 71, - 0, 0, 87, 0, 66, 0, 23, 0, 127, 0, - 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, - 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, - 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, - 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 53, 0, 0, 95, 0, 0, 0, 0, - 188, 0, 0, 0, 0, 200, 203, 79, 78, 22, - 0, 132, 149, 128, 0, 0, 0, 0, 0, 0, - 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, - 0, 180, 0, 0, 0, 0, 0, 0, 185, 0, - 93, 0, 85, 0, 0, 0, 0, 0, 0, 129, - 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, - 26, 201, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, + 0, 0, 0, 0, 0, 172, 141, 0, 0, 0, + 0, 0, 0, 0, 145, 56, 0, 0, 0, 0, + 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 147, 0, 0, 63, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 199, 0, 0, 0, 0, 0, - 0, 0, 44, 42, 0, 0, 0, 97, 0, 0, - 133, 0, 89, 0, 0, 0, 0, 0, 0, 0, - 0, 88, 0, 181, 43, 199, 0 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, + 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 60, 0, + 109, 0, 0, 0, 158, 0, 0, 0, 0, 54, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 149, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, + 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 200, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 16, 0, 0, 173, 14, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 164, 0, 0, + 0, 0, 0, 0, 0, 0, 148, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 160, 177, 0, + 40, 0, 169, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, + + 0, 0, 0, 103, 0, 0, 0, 0, 0, 171, + 0, 0, 58, 0, 111, 0, 198, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 86, 0, 0, 0, 0, 0, 0, 0, 137, + 138, 0, 0, 0, 0, 0, 0, 0, 0, 107, + 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 133, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, + 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, + 0, 17, 0, 15, 0, 0, 195, 194, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, + 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 188, 0, 0, 197, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 120, 0, 157, + 0, 46, 0, 0, 64, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, + 0, 0, 89, 0, 0, 122, 84, 0, 0, 165, + 0, 0, 0, 0, 156, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 73, 0, 116, 0, + 0, 140, 0, 0, 0, 204, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 114, 0, 0, 0, 0, 180, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, + 0, 0, 0, 0, 0, 0, 154, 0, 0, 0, + 0, 0, 0, 150, 51, 0, 0, 0, 193, 38, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 49, 0, 0, 0, 48, 0, 0, + 18, 0, 0, 0, 72, 0, 0, 0, 0, 0, + 142, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 80, 0, 139, 0, + + 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 112, 0, 0, 0, 0, + 0, 0, 170, 0, 0, 0, 50, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 189, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, + 68, 0, 0, 0, 36, 0, 52, 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, 186, 0, 0, 0, 0, 155, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 123, 0, 0, 0, 0, 0, 69, 0, 0, + 0, 0, 191, 0, 0, 0, 0, 0, 0, 0, + 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 25, 39, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 192, 0, 0, + 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 196, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 185, + + 0, 82, 0, 81, 0, 21, 0, 77, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, + 184, 0, 0, 0, 0, 0, 71, 0, 0, 87, + 0, 66, 0, 23, 0, 129, 0, 0, 0, 0, + 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, + 0, 0, 98, 0, 0, 0, 0, 0, 47, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, + + 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, + 0, 0, 97, 0, 0, 0, 0, 190, 0, 0, + 0, 0, 202, 205, 79, 78, 22, 0, 134, 151, + 130, 0, 0, 0, 0, 0, 0, 0, 0, 93, + 0, 0, 0, 0, 0, 0, 0, 0, 182, 0, + 0, 0, 0, 0, 0, 187, 0, 95, 0, 85, + 0, 0, 0, 0, 0, 0, 131, 0, 0, 0, + 0, 0, 0, 0, 181, 0, 0, 26, 203, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 94, 0, 0, 0, 0, 44, + 42, 0, 0, 0, 99, 0, 0, 135, 0, 91, + 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, + 183, 43, 201, 0 } ; static const YY_CHAR yy_ec[256] = @@ -982,274 +985,276 @@ static const YY_CHAR yy_meta[74] = 1, 1, 1 } ; -static const flex_int16_t yy_base[2136] = +static const flex_int16_t yy_base[2153] = { 0, 0, 72, 21, 31, 43, 51, 54, 60, 91, 99, - 2516, 2517, 34, 2512, 145, 0, 207, 2517, 214, 221, - 13, 228, 2517, 2492, 118, 25, 2, 6, 2517, 2517, - 73, 11, 17, 2517, 2517, 2517, 104, 2500, 2453, 0, - 2490, 108, 2507, 24, 256, 2517, 67, 2456, 2476, 84, - 75, 2476, 88, 226, 91, 89, 284, 196, 206, 219, - 208, 235, 241, 60, 277, 2456, 279, 291, 253, 293, - 316, 2439, 282, 317, 356, 325, 2458, 0, 378, 385, - 406, 415, 422, 2517, 0, 2517, 429, 436, 218, 219, - 287, 311, 333, 320, 2517, 2455, 2496, 2517, 342, 2517, + 2533, 2534, 34, 2529, 145, 0, 207, 2534, 214, 221, + 13, 228, 2534, 2509, 118, 25, 2, 6, 2534, 2534, + 73, 11, 17, 2534, 2534, 2534, 104, 2517, 2470, 0, + 2507, 108, 2524, 24, 256, 2534, 67, 2473, 2493, 84, + 75, 2493, 88, 226, 91, 89, 284, 196, 206, 219, + 208, 235, 241, 60, 277, 2473, 279, 291, 253, 293, + 316, 2456, 282, 317, 356, 325, 2475, 0, 378, 385, + 406, 415, 422, 2534, 0, 2534, 429, 436, 218, 219, + 287, 311, 333, 320, 2534, 2472, 2513, 2534, 342, 2534, - 412, 340, 2453, 2494, 356, 10, 442, 349, 186, 396, - 312, 348, 2493, 0, 474, 401, 2435, 409, 2434, 2435, - 2441, 415, 2427, 2428, 2433, 436, 2443, 2426, 2435, 2425, - 439, 446, 290, 2428, 2426, 446, 2415, 2473, 455, 2418, - 2471, 2411, 422, 2432, 2432, 2426, 286, 2419, 2417, 2418, - 2410, 2415, 2409, 428, 2420, 403, 2405, 2404, 2418, 464, - 2456, 2403, 453, 2415, 361, 2403, 485, 2404, 467, 2416, - 2413, 2414, 490, 2412, 2447, 2446, 418, 2393, 2397, 448, - 2393, 2385, 2402, 2394, 0, 473, 484, 508, 502, 488, - 512, 2393, 2517, 517, 2388, 2517, 507, 516, 2517, 2442, + 412, 340, 2470, 2511, 356, 10, 442, 349, 186, 396, + 312, 348, 2510, 0, 474, 401, 2452, 409, 2451, 2452, + 2458, 415, 2444, 2445, 2450, 436, 2460, 2443, 2452, 2442, + 439, 446, 290, 2445, 2443, 446, 2432, 2490, 455, 2435, + 2488, 2428, 422, 2449, 2449, 2443, 286, 2436, 2434, 2435, + 2427, 2432, 2426, 428, 2437, 403, 2422, 2421, 2435, 464, + 2473, 2420, 453, 2432, 361, 2420, 485, 2421, 467, 2433, + 2430, 2431, 490, 2429, 2464, 2463, 418, 2410, 2414, 448, + 2410, 2402, 2419, 2411, 0, 473, 484, 508, 502, 488, + 512, 2410, 2534, 517, 2405, 2534, 507, 516, 2534, 2459, - 524, 2441, 526, 2440, 520, 2439, 2517, 2517, 566, 2438, - 531, 2397, 2389, 2393, 2394, 2374, 2385, 2387, 2386, 498, - 513, 2424, 2388, 2369, 2366, 2374, 2380, 2368, 2382, 2378, - 2369, 2378, 2378, 2373, 2365, 2367, 2370, 2350, 2354, 2367, - 2369, 2366, 2358, 2348, 2351, 2365, 2517, 2351, 2359, 80, - 2397, 2343, 2352, 2394, 2341, 2351, 2391, 544, 2350, 2389, - 2334, 2336, 2347, 2385, 538, 2389, 2343, 2323, 2338, 507, - 2328, 2334, 511, 2325, 2323, 2326, 2322, 2328, 2319, 2318, - 2331, 2324, 2314, 2325, 2329, 2328, 2322, 513, 2329, 2324, - 2316, 2306, 2321, 2316, 2320, 2301, 2317, 2303, 2309, 2316, + 524, 2458, 526, 2457, 520, 2456, 2534, 2534, 566, 512, + 531, 2415, 2407, 2411, 2412, 2392, 2403, 2405, 2404, 498, + 536, 2442, 2406, 2387, 2384, 2392, 2398, 2386, 2400, 2396, + 2387, 2396, 2396, 2391, 2383, 2385, 2388, 2368, 2372, 2385, + 2387, 2384, 2376, 2366, 2369, 2383, 2534, 2369, 2377, 80, + 2415, 2361, 2370, 2412, 2359, 2369, 2409, 497, 2368, 2407, + 2352, 2354, 2365, 2403, 528, 2407, 2361, 2341, 2356, 546, + 2346, 2352, 514, 2343, 2341, 527, 2341, 2347, 2338, 2337, + 2350, 2343, 2333, 2344, 2348, 2347, 2341, 508, 2348, 2343, + 2335, 2325, 2340, 2335, 2339, 2320, 2336, 2322, 2328, 2335, - 2298, 524, 2303, 2300, 2299, 2298, 2293, 2307, 2306, 559, - 2305, 2308, 2290, 2298, 568, 2517, 2517, 569, 2517, 2517, - 2285, 192, 2332, 570, 2343, 2517, 563, 2517, 2342, 2517, - 2336, 613, 2517, 562, 2276, 2295, 2278, 2295, 2331, 2291, - 2281, 2333, 2288, 2291, 2282, 2285, 2271, 2282, 289, 2321, - 2279, 2276, 2277, 588, 2281, 2321, 2256, 2268, 2263, 2260, - 2256, 2258, 2261, 2308, 2265, 2254, 2270, 2304, 2250, 636, - 2263, 2263, 2246, 2247, 2260, 2258, 2256, 2256, 2255, 2250, - 2257, 2252, 2237, 539, 2246, 2249, 2244, 543, 2243, 2239, - 2289, 573, 572, 2517, 2248, 2282, 2232, 2231, 2224, 2226, + 2317, 506, 2322, 2319, 2318, 2317, 2312, 2326, 2325, 558, + 2324, 2327, 2309, 2317, 559, 2534, 2534, 569, 2534, 2534, + 2304, 192, 2351, 570, 2362, 2534, 563, 2534, 2361, 2534, + 2355, 613, 2534, 2317, 562, 2294, 2313, 2296, 2313, 2349, + 2309, 2299, 2351, 2306, 2309, 2300, 2303, 2289, 2300, 289, + 2339, 2297, 2294, 2295, 588, 2299, 2339, 2274, 2286, 2281, + 2278, 2274, 2276, 2279, 2326, 2283, 2272, 2288, 2322, 2268, + 612, 2281, 2281, 2264, 2265, 2278, 2276, 2274, 2274, 2273, + 2268, 2275, 2270, 2255, 581, 2264, 2267, 2262, 539, 2261, + 2257, 2307, 560, 589, 2534, 2266, 2300, 2250, 2249, 2242, - 2238, 2229, 2236, 2217, 2234, 2223, 2228, 615, 2275, 2228, - 594, 2225, 2228, 2228, 2226, 2215, 2215, 2227, 586, 2202, - 2203, 2224, 2215, 2205, 2202, 2216, 596, 2202, 2214, 2213, - 2212, 2207, 2249, 2209, 2208, 2207, 2206, 2198, 2248, 2207, - 2246, 2186, 2244, 2186, 645, 2199, 2517, 2517, 2198, 589, - 2240, 2239, 2517, 2238, 2517, 623, 687, 607, 2237, 2231, - 2184, 2186, 2188, 2175, 2172, 2517, 2177, 2170, 2182, 2185, - 2172, 2171, 2517, 2181, 606, 2172, 2169, 2181, 603, 2166, - 2168, 2517, 2213, 2173, 2158, 2160, 2171, 2169, 2169, 2163, - 667, 2170, 2158, 2151, 2202, 2517, 2149, 2165, 2199, 2203, + 2244, 2256, 2247, 2254, 2235, 2252, 2244, 2240, 2245, 604, + 2292, 2245, 595, 2242, 2245, 2245, 2243, 2232, 2232, 2244, + 587, 2219, 2220, 2241, 2232, 2222, 2219, 2233, 597, 2219, + 2231, 2230, 2229, 2224, 2266, 2226, 2225, 2224, 2223, 2215, + 2265, 2224, 2263, 2203, 2261, 2203, 647, 2216, 2534, 2534, + 2215, 618, 2257, 2256, 2534, 2255, 2534, 633, 681, 2214, + 619, 2253, 2247, 2200, 2202, 2204, 2191, 2188, 2534, 2193, + 2186, 2198, 2201, 2188, 2187, 2534, 2197, 625, 2188, 2185, + 2197, 607, 2182, 2184, 2534, 2229, 2189, 2174, 2176, 2187, + 2185, 2185, 2179, 664, 2186, 2174, 2167, 2218, 2534, 2165, - 2159, 2153, 2155, 2156, 2140, 2149, 2191, 2142, 2141, 2136, - 2135, 2137, 2133, 2129, 617, 2148, 2122, 2129, 2134, 2127, - 2143, 2177, 2181, 2517, 2126, 2122, 2178, 2129, 2128, 2122, - 2129, 2114, 2124, 2112, 2126, 2126, 2114, 2110, 2112, 2107, - 2517, 2164, 2517, 2106, 2105, 2098, 2115, 2154, 2153, 2098, - 2103, 2112, 2106, 2100, 2109, 669, 2146, 2108, 2092, 2087, - 2083, 2089, 445, 2103, 2096, 2100, 2083, 2141, 2082, 2082, - 2133, 2078, 2079, 2078, 2094, 2517, 2090, 2517, 2127, 2517, - 2078, 2517, 2088, 2124, 2084, 2127, 2517, 2517, 2517, 621, - 653, 679, 2517, 618, 2086, 2066, 2076, 2118, 2117, 2062, + 2181, 2215, 2219, 2175, 2169, 2171, 2172, 2156, 2165, 2207, + 2158, 2157, 2152, 2151, 2153, 2149, 2145, 575, 2164, 2138, + 2145, 2150, 2143, 2159, 2193, 2197, 2534, 2142, 2138, 2194, + 2145, 2144, 2138, 2145, 2130, 2140, 2128, 2142, 2142, 2130, + 2126, 2131, 2127, 2122, 2534, 2179, 2534, 2121, 2120, 2113, + 2130, 2169, 2168, 2113, 2118, 2127, 2121, 2115, 2124, 667, + 2161, 2123, 2107, 2102, 2098, 2104, 623, 2118, 2111, 2115, + 2098, 2156, 2097, 2097, 2148, 2093, 2094, 2093, 2109, 2534, + 2105, 2534, 2142, 2534, 2093, 2534, 2103, 2139, 2099, 2142, + 2534, 2534, 2534, 624, 637, 2082, 668, 2534, 645, 2100, - 2072, 2114, 2059, 2066, 2059, 2067, 2070, 2052, 2052, 2067, - 2066, 625, 2065, 2064, 2048, 2063, 2045, 2092, 2059, 2056, - 2096, 2040, 2042, 2054, 2054, 2052, 2052, 2517, 2037, 2034, - 2092, 2047, 2039, 2045, 2036, 2044, 2517, 2029, 2040, 2044, - 2026, 2038, 2030, 512, 2021, 2020, 2014, 2019, 2016, 2031, - 2030, 2031, 2010, 2020, 2026, 2069, 2024, 2023, 2015, 2006, - 2517, 2007, 2009, 2517, 2011, 2016, 2055, 2054, 16, 2015, - 2052, 1997, 2050, 1997, 2000, 2001, 1992, 2517, 2006, 1992, - 681, 1984, 1988, 2004, 2001, 1993, 2038, 1990, 1997, 2035, - 2517, 1981, 1979, 1993, 1992, 1995, 2029, 2028, 1975, 2026, + 2080, 2090, 2132, 2131, 2076, 2086, 2128, 2073, 2080, 2073, + 2081, 2084, 2066, 2066, 2081, 2080, 629, 2079, 2078, 2062, + 2077, 2059, 2106, 2073, 2070, 2110, 2054, 2056, 2068, 2068, + 2066, 2066, 2534, 2051, 2048, 2106, 2061, 2053, 2059, 2050, + 2058, 2534, 2043, 2054, 2058, 2040, 2052, 2044, 632, 2035, + 2034, 2028, 2033, 2030, 2045, 2044, 2045, 2024, 2034, 2040, + 2083, 2038, 2037, 2029, 2020, 2534, 2021, 2023, 2534, 2025, + 2030, 2069, 2068, 16, 2029, 2066, 2011, 2064, 2011, 2014, + 2012, 2014, 2005, 2534, 2019, 2005, 705, 1997, 2001, 2017, + 2014, 2006, 2051, 2003, 2010, 2048, 2534, 1994, 1992, 2006, - 1986, 1970, 2023, 2022, 2517, 1967, 1981, 1980, 688, 1981, - 1980, 1962, 2015, 1979, 1974, 1963, 1965, 2517, 2517, 654, - 647, 1957, 1974, 1966, 1949, 71, 312, 512, 574, 627, - 646, 669, 685, 687, 641, 644, 649, 659, 675, 661, - 664, 675, 675, 659, 716, 678, 670, 680, 721, 690, - 683, 683, 685, 689, 695, 735, 698, 742, 700, 701, - 2517, 704, 699, 690, 705, 710, 707, 704, 711, 710, - 698, 712, 710, 718, 754, 716, 761, 762, 706, 719, - 705, 715, 762, 720, 770, 2517, 771, 727, 725, 727, - 723, 717, 777, 773, 736, 725, 2517, 727, 738, 727, + 2005, 2008, 2042, 2041, 1988, 2039, 1999, 1983, 2036, 2035, + 2534, 1980, 1994, 1993, 695, 1994, 1993, 1975, 2028, 1992, + 1987, 1976, 1974, 2534, 2534, 675, 675, 81, 305, 410, + 549, 539, 563, 609, 657, 667, 711, 671, 671, 710, + 712, 666, 663, 674, 684, 689, 675, 678, 689, 689, + 674, 731, 693, 685, 695, 735, 698, 691, 691, 693, + 697, 703, 743, 707, 752, 709, 710, 2534, 713, 708, + 699, 714, 719, 716, 713, 720, 719, 707, 721, 719, + 727, 763, 725, 770, 771, 715, 728, 714, 724, 771, + 729, 779, 2534, 780, 736, 734, 736, 732, 726, 786, - 740, 730, 743, 787, 730, 789, 732, 747, 2517, 741, - 735, 746, 731, 742, 755, 734, 740, 795, 759, 743, - 743, 756, 800, 801, 748, 766, 761, 766, 763, 807, - 749, 761, 762, 769, 760, 757, 2517, 823, 780, 781, - 782, 772, 775, 786, 777, 783, 827, 803, 790, 772, - 779, 793, 838, 795, 792, 790, 2517, 794, 789, 804, - 801, 787, 789, 808, 805, 806, 794, 801, 802, 811, - 815, 851, 813, 803, 816, 802, 802, 808, 864, 811, - 806, 807, 813, 829, 812, 866, 821, 868, 2517, 832, - 832, 825, 836, 834, 879, 821, 823, 838, 839, 827, + 782, 745, 734, 2534, 736, 747, 736, 749, 739, 752, + 796, 755, 740, 799, 742, 757, 2534, 751, 745, 756, + 741, 752, 765, 744, 750, 805, 769, 753, 753, 766, + 810, 811, 758, 776, 771, 776, 773, 817, 759, 771, + 772, 779, 770, 767, 2534, 833, 790, 791, 792, 782, + 785, 796, 787, 793, 837, 813, 787, 801, 783, 790, + 804, 849, 806, 803, 801, 2534, 805, 800, 815, 812, + 798, 800, 819, 816, 817, 805, 812, 813, 822, 826, + 862, 824, 814, 827, 814, 813, 819, 875, 822, 817, + 818, 824, 840, 823, 877, 832, 879, 2534, 843, 843, - 825, 887, 844, 830, 836, 834, 2517, 2517, 850, 849, - 850, 855, 843, 853, 855, 2517, 2517, 855, 857, 844, - 862, 849, 2517, 847, 865, 852, 852, 903, 850, 854, - 872, 913, 2517, 914, 2517, 859, 873, 873, 918, 866, - 865, 869, 863, 923, 876, 866, 867, 863, 873, 877, - 888, 889, 884, 886, 879, 881, 877, 894, 884, 899, - 882, 941, 898, 903, 880, 903, 889, 888, 2517, 895, - 897, 946, 898, 911, 949, 896, 911, 929, 937, 906, - 955, 917, 957, 2517, 963, 906, 925, 915, 914, 909, - 910, 922, 917, 913, 931, 917, 918, 928, 937, 973, + 836, 847, 845, 890, 832, 834, 849, 850, 838, 836, + 898, 855, 841, 847, 845, 2534, 2534, 861, 860, 861, + 866, 854, 864, 866, 2534, 2534, 866, 868, 855, 873, + 860, 2534, 858, 876, 863, 863, 914, 861, 865, 883, + 924, 2534, 885, 926, 2534, 871, 885, 885, 930, 878, + 877, 881, 875, 935, 888, 878, 879, 875, 885, 889, + 900, 901, 896, 898, 891, 893, 889, 906, 896, 911, + 894, 953, 910, 915, 892, 915, 901, 900, 2534, 907, + 909, 958, 910, 923, 961, 908, 923, 941, 949, 971, + 919, 968, 930, 970, 2534, 976, 919, 938, 928, 927, - 920, 938, 931, 926, 980, 986, 943, 934, 2517, 948, - 939, 947, 949, 934, 950, 940, 952, 949, 947, 994, - 960, 944, 945, 2517, 961, 964, 947, 949, 1007, 950, - 969, 2517, 968, 971, 958, 953, 971, 959, 1012, 970, - 966, 963, 1016, 965, 1018, 980, 966, 984, 983, 969, - 984, 976, 972, 990, 989, 976, 993, 2517, 2517, 985, - 1032, 985, 2517, 993, 996, 989, 1042, 2517, 992, 997, - 1041, 992, 993, 1005, 999, 1000, 998, 1009, 1054, 998, - 999, 1057, 1058, 1002, 1014, 1007, 2517, 1003, 1011, 1009, - 1061, 1003, 1024, 1010, 1011, 1012, 1018, 1026, 1017, 1031, + 922, 923, 935, 930, 926, 944, 930, 931, 941, 950, + 986, 933, 952, 944, 940, 993, 999, 956, 947, 2534, + 961, 952, 960, 962, 947, 963, 953, 965, 962, 960, + 1007, 973, 957, 958, 2534, 974, 977, 960, 962, 1020, + 963, 982, 2534, 981, 984, 971, 966, 984, 972, 1025, + 983, 979, 976, 1029, 978, 1031, 993, 979, 997, 996, + 982, 997, 989, 985, 1003, 1002, 989, 1006, 2534, 990, + 2534, 999, 1046, 999, 2534, 1007, 1010, 1003, 1057, 2534, + 1006, 1011, 1055, 1006, 1007, 1019, 1013, 1014, 1012, 1023, + 1068, 1012, 1013, 1071, 1072, 1016, 1028, 1021, 2534, 1017, - 1032, 1048, 1053, 1035, 1040, 1023, 1023, 2517, 1024, 1026, - 1037, 1027, 1047, 1046, 1037, 1048, 1091, 1033, 1053, 1046, - 1050, 1054, 1037, 1054, 1045, 1100, 1047, 1051, 2517, 1098, - 1047, 1067, 1049, 1049, 1070, 1067, 1107, 1056, 1074, 1062, - 1076, 1062, 1070, 1079, 1059, 1074, 1081, 1123, 1124, 2517, - 1077, 1126, 1127, 1069, 1079, 1089, 1073, 1093, 1076, 1078, - 1078, 1085, 1094, 1082, 1089, 1084, 1091, 1103, 1144, 1091, - 1090, 1107, 1148, 1098, 1102, 1100, 1098, 1093, 1154, 1105, - 1156, 1106, 1158, 1154, 1160, 1113, 2517, 1118, 1111, 1102, - 1121, 1115, 1110, 1120, 1121, 1117, 1130, 2517, 1114, 1110, + 1025, 1024, 1075, 1017, 1038, 1024, 1025, 1026, 1032, 1040, + 1031, 1045, 1046, 1062, 1067, 2534, 1049, 1054, 1037, 1037, + 2534, 1038, 1040, 1051, 1041, 1061, 1060, 1051, 1062, 1105, + 1047, 1067, 1060, 1064, 1068, 1051, 1068, 1059, 1114, 1061, + 1065, 2534, 1112, 1061, 1081, 1063, 1063, 1084, 1081, 1121, + 1070, 1088, 1076, 1090, 1076, 1084, 1093, 1073, 1088, 1095, + 1137, 1138, 2534, 1091, 1140, 1141, 1083, 1093, 1103, 1087, + 1107, 1090, 1092, 1092, 1099, 1108, 1096, 1103, 1098, 1105, + 1117, 1158, 1105, 1104, 1121, 1162, 1112, 1116, 1114, 1112, + 1107, 1168, 1119, 1116, 1171, 1121, 1173, 1169, 1175, 1128, - 2517, 2517, 1116, 1176, 1135, 1116, 1135, 1136, 1138, 1177, - 1130, 1184, 1185, 1142, 1136, 1134, 1145, 1127, 1132, 1171, - 1162, 1194, 1149, 1149, 1153, 1198, 1141, 1141, 1144, 1161, - 1156, 1160, 1155, 2517, 1152, 1148, 1165, 1145, 1166, 1156, - 1207, 1160, 2517, 1173, 1172, 1175, 1159, 1168, 1172, 1178, - 1164, 1224, 1177, 1182, 1169, 1183, 1181, 1173, 1179, 1175, - 1193, 1194, 1195, 2517, 2517, 1193, 2517, 1195, 2517, 1180, - 1191, 1182, 1201, 1194, 1192, 1244, 1201, 1198, 1242, 1206, - 1195, 1202, 1207, 1204, 1210, 2517, 1203, 1195, 1256, 2517, - 1257, 1204, 1211, 1255, 1217, 2517, 1218, 2517, 1215, 2517, + 2534, 1133, 1126, 1117, 1136, 1130, 1125, 1135, 1136, 1133, + 1145, 2534, 1129, 1125, 2534, 2534, 1131, 1191, 1150, 1131, + 1150, 1151, 1153, 1192, 1145, 1199, 1200, 1157, 1151, 1149, + 1160, 1142, 1147, 1186, 1177, 1209, 1164, 1164, 1168, 1213, + 1156, 1156, 1159, 1176, 1171, 1175, 1170, 2534, 1167, 1163, + 1180, 1160, 1181, 1171, 1222, 1175, 2534, 1188, 1187, 1190, + 1174, 1183, 1187, 1193, 1179, 1239, 1192, 1197, 1184, 1198, + 1196, 1188, 1194, 1190, 1208, 1209, 1210, 2534, 2534, 1208, + 2534, 1210, 2534, 1195, 1206, 1197, 1216, 1209, 1207, 1259, + 1216, 1213, 1257, 1221, 1210, 1217, 1222, 1219, 1225, 2534, - 1206, 2517, 1206, 1209, 1223, 1228, 1211, 1222, 1271, 1228, - 1229, 1269, 1225, 1276, 1272, 1278, 2517, 1229, 1226, 1281, - 1282, 1239, 1240, 1242, 2517, 2517, 1228, 1282, 1231, 1247, - 1231, 1243, 1262, 1293, 2517, 1250, 1241, 1252, 2517, 1297, - 1234, 1245, 1260, 1296, 1248, 1259, 1247, 1261, 1262, 1259, - 1303, 1266, 1256, 1266, 1272, 1260, 1260, 1315, 1311, 1312, - 1318, 1275, 2517, 1278, 1277, 1279, 1270, 1273, 1282, 1284, - 1281, 1271, 1274, 1274, 1333, 1280, 1335, 1282, 1337, 1280, - 1285, 1340, 2517, 1299, 1278, 1293, 1286, 1289, 1302, 1305, - 1304, 1302, 1351, 1305, 2517, 2517, 1301, 1311, 1296, 1352, + 1218, 1210, 1271, 2534, 1272, 1219, 1226, 1270, 1232, 2534, + 1233, 1221, 2534, 1231, 2534, 1222, 2534, 1222, 1225, 1239, + 1244, 1227, 1238, 1287, 1244, 1245, 1285, 1241, 1292, 1288, + 1294, 2534, 1245, 1242, 1297, 1298, 1255, 1256, 1258, 2534, + 2534, 1244, 1298, 1247, 1263, 1247, 1259, 1278, 1309, 2534, + 1266, 1257, 1268, 2534, 1313, 1250, 1261, 1276, 1312, 1264, + 1275, 1263, 1277, 1278, 1275, 1319, 1282, 1272, 1282, 1288, + 1276, 1276, 1331, 1327, 1328, 1334, 1291, 2534, 1294, 1293, + 1295, 1286, 1289, 1298, 1300, 1297, 1287, 1290, 1290, 1349, + 1296, 1351, 1298, 1353, 1296, 1301, 1356, 2534, 1315, 1294, - 1299, 1314, 1300, 1361, 1362, 1306, 1316, 1365, 1322, 2517, - 1314, 1315, 1317, 1370, 1313, 2517, 1330, 2517, 1329, 1319, - 2517, 2517, 1332, 1315, 1335, 1321, 1323, 1382, 1332, 1384, - 1333, 1365, 2517, 1387, 1337, 1384, 2517, 1332, 1391, 1341, - 1335, 1332, 1335, 1337, 1333, 1355, 1394, 1347, 1359, 1362, - 1350, 1353, 1346, 1406, 1354, 2517, 1351, 1351, 2517, 1353, - 1412, 1365, 1356, 1410, 1372, 1372, 1375, 1375, 1372, 1416, - 1378, 2517, 1370, 2517, 1371, 2517, 1381, 1373, 2517, 1422, - 1384, 1385, 1382, 1426, 1374, 1389, 1429, 1391, 1383, 2517, - 1380, 1380, 1386, 1385, 1383, 1437, 1399, 1399, 2517, 2517, + 1309, 1302, 1305, 1318, 1321, 1320, 1318, 1367, 1321, 2534, + 2534, 1317, 1327, 1312, 1368, 1315, 1375, 1331, 1317, 1378, + 1379, 1323, 1333, 1382, 1339, 2534, 1331, 1332, 1334, 1387, + 1330, 2534, 1347, 2534, 1346, 1336, 2534, 2534, 1349, 1332, + 1352, 1338, 1340, 1399, 1349, 1401, 1350, 1382, 2534, 1404, + 1354, 1401, 2534, 1349, 1408, 1358, 1352, 1349, 1352, 1354, + 1350, 1372, 1411, 1364, 1376, 1379, 1367, 1370, 1363, 1423, + 1371, 2534, 1368, 1368, 2534, 1370, 1429, 1382, 1373, 1427, + 1389, 1389, 1392, 1392, 1389, 1433, 1395, 2534, 1387, 2534, + 1388, 2534, 1398, 1390, 2534, 1439, 1401, 1402, 1399, 1443, - 1440, 1387, 2517, 1404, 1389, 1390, 1396, 2517, 1405, 1452, - 1400, 1392, 1398, 1408, 1420, 1413, 1419, 1463, 1416, 2517, - 1425, 2517, 1422, 1441, 2517, 1425, 1410, 1470, 2517, 1471, - 1428, 1433, 1415, 1475, 1476, 1472, 1436, 1433, 1429, 1422, - 1477, 1435, 1436, 2517, 1426, 1442, 1440, 1488, 2517, 1427, - 1486, 1450, 1450, 1447, 1491, 1439, 1444, 1442, 1501, 1457, - 1445, 1504, 1500, 1455, 1507, 1468, 1457, 1451, 1511, 1453, - 1462, 1455, 1469, 1472, 1517, 1459, 1476, 1472, 1470, 1463, - 1478, 1462, 1520, 1521, 1522, 1523, 1486, 1479, 1478, 1478, - 1473, 2517, 1481, 1487, 1478, 1479, 1478, 1480, 1535, 2517, + 1391, 1406, 1446, 1408, 1400, 2534, 1397, 1397, 1403, 1402, + 1400, 1454, 2534, 1416, 1416, 2534, 2534, 1457, 1404, 2534, + 1421, 1406, 1407, 1413, 2534, 1422, 1469, 1417, 1409, 1415, + 1425, 1437, 1430, 1436, 1480, 1433, 2534, 1442, 2534, 1439, + 1458, 2534, 1442, 1427, 1487, 2534, 1488, 1445, 1450, 1432, + 1492, 1493, 1489, 1453, 1450, 1446, 1439, 1494, 1452, 1453, + 2534, 1443, 1459, 1457, 1505, 2534, 1444, 1503, 1467, 1467, + 1464, 1508, 1456, 1461, 1459, 1518, 1474, 1462, 1521, 1517, + 1472, 1524, 1485, 1474, 1468, 1528, 1470, 1479, 1472, 1486, + 1489, 1534, 1476, 1493, 1489, 1487, 1480, 1495, 1479, 1537, - 1476, 1494, 1543, 1513, 1545, 1498, 2517, 2517, 1489, 1500, - 1549, 2517, 2517, 1495, 1500, 1498, 1548, 1506, 1511, 1499, - 1515, 1504, 1503, 1503, 1505, 2517, 1563, 1509, 1518, 1561, - 1504, 1510, 1570, 1518, 1529, 1530, 2517, 1575, 1528, 1572, - 2517, 1523, 1531, 2517, 1522, 1537, 1525, 2517, 1535, 1536, - 1537, 1586, 1544, 2517, 1583, 1549, 1525, 1543, 1544, 1545, - 1554, 1536, 1542, 1544, 1556, 1555, 1546, 1596, 1548, 1544, - 1545, 1546, 1601, 1607, 1557, 1609, 1562, 1567, 1560, 2517, - 1613, 2517, 1562, 1615, 1557, 2517, 1560, 1570, 1614, 1562, - 1577, 1564, 1579, 1565, 1572, 1572, 1583, 1584, 2517, 1578, + 1538, 1539, 1540, 1503, 1496, 1495, 1495, 1490, 2534, 1498, + 1504, 1495, 1496, 1495, 1497, 1552, 2534, 1493, 1511, 1560, + 1530, 1562, 1515, 2534, 2534, 1506, 1517, 1566, 2534, 2534, + 1512, 1517, 1515, 1565, 1523, 1528, 1516, 1532, 1521, 1520, + 1520, 1522, 2534, 1580, 1526, 1535, 1578, 1521, 1527, 1587, + 1535, 1546, 1547, 2534, 1592, 1545, 1589, 2534, 1540, 1548, + 2534, 1539, 1554, 1542, 2534, 1552, 1553, 1554, 1603, 1561, + 2534, 1600, 1566, 1542, 1560, 1561, 1562, 1571, 1553, 1559, + 1561, 1573, 1572, 1563, 1613, 1565, 1561, 1562, 1563, 1618, + 1624, 1574, 1626, 1579, 1584, 1577, 2534, 1630, 2534, 1579, - 1573, 1587, 1573, 1633, 1586, 2517, 1630, 1581, 1578, 2517, - 1592, 1579, 1600, 1596, 1598, 1643, 1596, 1593, 1601, 1595, - 2517, 1648, 1589, 1591, 1607, 1600, 1601, 1591, 1607, 1608, - 1602, 1618, 1608, 1660, 1620, 1604, 1613, 1659, 1617, 1666, - 1615, 2517, 1609, 2517, 1616, 1670, 1666, 2517, 1629, 2517, - 1669, 1631, 1632, 1617, 1618, 1626, 1680, 1628, 1677, 1678, - 1633, 1628, 1646, 1643, 1634, 1647, 1642, 2517, 1639, 1644, - 1642, 1694, 1695, 1643, 1640, 1654, 1641, 2517, 1656, 1657, - 1658, 1659, 2517, 1649, 1661, 1706, 1659, 1664, 1709, 1651, - 1659, 1653, 1661, 1674, 2517, 1675, 1656, 1657, 1664, 1666, + 1632, 1574, 2534, 1577, 1587, 1631, 1579, 1594, 1581, 1596, + 1582, 1589, 1589, 1600, 1601, 2534, 1595, 1590, 1604, 1590, + 1650, 1603, 2534, 1647, 1598, 1595, 2534, 1609, 1596, 1617, + 1613, 1615, 1660, 1613, 1610, 1618, 1612, 2534, 1665, 1606, + 1608, 1624, 1617, 1618, 1608, 1624, 1625, 1619, 1635, 1625, + 1677, 1637, 1621, 1630, 1676, 1634, 1683, 1632, 2534, 1626, + 2534, 1633, 1687, 1683, 2534, 1646, 2534, 1686, 1648, 1649, + 1634, 1635, 1643, 1697, 1645, 1694, 1695, 1650, 1645, 1663, + 1660, 1651, 1664, 1659, 2534, 1656, 1661, 1659, 1711, 1712, + 1660, 1657, 1671, 1658, 2534, 1673, 1674, 1675, 1676, 2534, - 2517, 1680, 1677, 1717, 1678, 2517, 1682, 1667, 1667, 1682, - 1675, 1674, 1685, 1672, 2517, 1688, 1676, 1679, 1735, 1675, - 1694, 1685, 1697, 1690, 1689, 1698, 1700, 1704, 2517, 2517, - 1697, 1688, 1688, 1748, 1691, 1750, 1692, 1752, 1710, 1754, - 2517, 1696, 1756, 2517, 1752, 1714, 1711, 1716, 1703, 1711, - 1722, 1709, 1720, 1706, 1704, 1712, 1711, 1716, 1708, 1773, - 1726, 1727, 1717, 1734, 1733, 1774, 1718, 1737, 1738, 2517, - 1743, 1736, 1785, 1742, 1729, 1744, 1789, 1746, 1749, 1736, - 1745, 1746, 2517, 1795, 2517, 1748, 2517, 1757, 2517, 1798, - 2517, 1740, 1800, 1747, 1802, 1745, 1804, 1752, 1801, 1802, + 1666, 1678, 1723, 1676, 1681, 1726, 1668, 1676, 1670, 1678, + 1691, 2534, 1692, 1673, 1674, 1681, 1683, 2534, 1697, 1694, + 1734, 1695, 2534, 1699, 1684, 1684, 1699, 1692, 1691, 1702, + 1689, 2534, 1705, 1693, 1696, 1752, 1692, 1711, 1702, 1714, + 1707, 1706, 1715, 1717, 1721, 2534, 2534, 1714, 1705, 1705, + 1765, 1708, 1767, 1709, 1769, 1727, 1771, 2534, 1713, 1773, + 2534, 1769, 1731, 1728, 1733, 1720, 1728, 1739, 1726, 1737, + 1723, 1721, 1729, 1728, 1733, 1725, 1790, 1743, 1744, 1734, + 1751, 1750, 1791, 1735, 1754, 1755, 2534, 1760, 1753, 1802, + 1759, 1746, 1761, 1806, 1763, 1766, 1753, 1762, 1763, 2534, - 1764, 1804, 1750, 1754, 1772, 1813, 1772, 2517, 1763, 1753, - 1812, 1778, 1771, 1767, 1821, 1764, 1766, 1765, 1772, 2517, - 1768, 1827, 1771, 2517, 1776, 1786, 1771, 1779, 1781, 2517, - 1782, 1776, 2517, 1788, 2517, 1784, 2517, 1794, 2517, 1795, - 1795, 1786, 1842, 1786, 1796, 1781, 1794, 2517, 1796, 1804, - 1849, 1790, 1792, 1789, 1813, 2517, 1800, 1807, 1808, 1811, - 1800, 2517, 1854, 1801, 1809, 1818, 1817, 1820, 1821, 1822, - 1815, 1810, 1811, 1811, 1823, 1818, 2517, 1829, 1817, 1870, - 1821, 1833, 1878, 2517, 1824, 1836, 1881, 1830, 1832, 1830, - 1831, 1886, 1839, 1826, 1841, 1846, 1891, 1892, 1893, 1894, + 1812, 2534, 1765, 2534, 1774, 2534, 1815, 2534, 1757, 1817, + 1764, 1819, 1762, 1821, 1769, 1818, 1819, 1781, 1821, 1767, + 1771, 1789, 1830, 1789, 2534, 1780, 1770, 1829, 1795, 1788, + 1784, 1838, 1781, 1783, 1782, 1789, 2534, 1785, 1844, 1788, + 2534, 1793, 1803, 1788, 1796, 1798, 2534, 1799, 1793, 2534, + 1805, 2534, 1801, 2534, 1811, 2534, 1812, 1812, 1803, 1859, + 1803, 1813, 1798, 1811, 2534, 1813, 1821, 1866, 1807, 1809, + 1806, 1830, 2534, 1817, 1824, 1825, 1828, 1817, 2534, 1871, + 1818, 1826, 1835, 1834, 1837, 1838, 1839, 1832, 1827, 1828, + 1828, 1840, 1835, 2534, 1846, 1834, 1887, 1838, 1850, 1895, - 1895, 1852, 1897, 1898, 1899, 1843, 1847, 1843, 1859, 1842, - 1854, 1848, 2517, 1864, 1908, 2517, 1865, 1850, 1868, 1859, - 2517, 1860, 1874, 1870, 1863, 2517, 2517, 2517, 2517, 2517, - 1917, 2517, 2517, 2517, 1860, 1868, 1863, 1916, 1882, 1879, - 1924, 1885, 2517, 1926, 1868, 1928, 1871, 1884, 1883, 1884, - 1874, 2517, 1875, 1935, 1888, 1897, 1890, 1934, 2517, 1881, - 2517, 1893, 2517, 1937, 1943, 1885, 1901, 1946, 1947, 2517, - 1904, 1898, 1891, 1911, 1908, 1900, 1904, 2517, 1951, 1900, - 2517, 2517, 1900, 1908, 1955, 1915, 1908, 1963, 1911, 1911, - 1907, 1909, 1968, 1969, 1911, 1927, 1912, 2517, 1973, 1920, + 2534, 1841, 1853, 1898, 1847, 1849, 1847, 1848, 1903, 1856, + 1843, 1858, 1863, 1908, 1909, 1910, 1911, 1912, 1869, 1914, + 1915, 1916, 1860, 1864, 1860, 1876, 1859, 1871, 1865, 2534, + 1881, 1925, 2534, 1882, 1867, 1885, 1876, 2534, 1877, 1891, + 1887, 1880, 2534, 2534, 2534, 2534, 2534, 1934, 2534, 2534, + 2534, 1877, 1885, 1880, 1933, 1899, 1896, 1941, 1902, 2534, + 1943, 1885, 1945, 1888, 1901, 1900, 1901, 1891, 2534, 1892, + 1952, 1905, 1914, 1907, 1951, 2534, 1898, 2534, 1910, 2534, + 1954, 1960, 1902, 1918, 1963, 1964, 2534, 1921, 1915, 1908, + 1928, 1925, 1917, 1921, 2534, 1968, 1917, 2534, 2534, 1917, - 1927, 1976, 2517, 2517, 1929, 1978, 1926, 2517, 1930, 1929, - 2517, 1930, 2517, 1924, 1924, 1941, 1942, 1987, 1933, 1989, - 1990, 2517, 1991, 2517, 2517, 2517, 2517, 1997, 2000, 2003, - 2004, 2006, 2009, 2012, 2015 + 1925, 1972, 1932, 1925, 1980, 1928, 1928, 1924, 1926, 1985, + 1986, 1928, 1944, 1929, 2534, 1990, 1937, 1944, 1993, 2534, + 2534, 1946, 1995, 1943, 2534, 1947, 1946, 2534, 1947, 2534, + 1941, 1941, 1958, 1959, 2004, 1950, 2006, 2007, 2534, 2008, + 2534, 2534, 2534, 2534, 2014, 2017, 2020, 2021, 2023, 2026, + 2029, 2032 } ; -static const flex_int16_t yy_def[2136] = +static const flex_int16_t yy_def[2153] = { 0, - 2128, 2128, 2129, 2129, 2128, 2128, 2128, 2128, 2128, 2128, - 2127, 2127, 2127, 2127, 2127, 2130, 2127, 2127, 2127, 2127, - 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, - 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2131, - 2127, 2127, 2127, 2132, 15, 2127, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 2133, 45, 45, 45, + 2145, 2145, 2146, 2146, 2145, 2145, 2145, 2145, 2145, 2145, + 2144, 2144, 2144, 2144, 2144, 2147, 2144, 2144, 2144, 2144, + 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, + 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2148, + 2144, 2144, 2144, 2149, 15, 2144, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 2150, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2130, 2127, 2127, - 2127, 2127, 2127, 2127, 2134, 2127, 2127, 2127, 2127, 2127, - 2127, 2127, 2127, 2127, 2127, 2127, 2131, 2127, 2132, 2127, + 45, 45, 45, 45, 45, 45, 45, 2147, 2144, 2144, + 2144, 2144, 2144, 2144, 2151, 2144, 2144, 2144, 2144, 2144, + 2144, 2144, 2144, 2144, 2144, 2144, 2148, 2144, 2149, 2144, - 2127, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 2135, 45, 2133, 45, 45, 45, 45, 45, + 2144, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 2152, 45, 2150, 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, 2134, 2127, 2127, 2127, 2127, 2127, - 2127, 2127, 2127, 45, 45, 2127, 45, 45, 2127, 45, + 45, 45, 45, 45, 2151, 2144, 2144, 2144, 2144, 2144, + 2144, 2144, 2144, 45, 45, 2144, 45, 45, 2144, 45, - 45, 45, 45, 45, 45, 2135, 2127, 2127, 115, 45, + 45, 45, 45, 45, 45, 2152, 2144, 2144, 115, 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, 2127, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 2144, 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, @@ -1257,227 +1262,229 @@ static const flex_int16_t yy_def[2136] = 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 2127, 2127, 2127, 2127, 2127, 2127, - 2127, 45, 45, 45, 45, 2127, 45, 2127, 45, 2127, - 45, 115, 2127, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 2144, 2144, 2144, 2144, 2144, 2144, + 2144, 45, 45, 45, 45, 2144, 45, 2144, 45, 2144, + 45, 115, 2144, 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, 2127, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 2144, 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, 2127, 2127, 2127, 45, - 45, 45, 2127, 45, 2127, 45, 115, 45, 45, 45, - 45, 45, 45, 45, 45, 2127, 45, 45, 45, 45, - 45, 45, 2127, 45, 45, 45, 45, 45, 45, 45, - 45, 2127, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 2127, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 2144, 2144, + 2144, 45, 45, 45, 2144, 45, 2144, 45, 115, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 2144, 45, + 45, 45, 45, 45, 45, 2144, 45, 45, 45, 45, + 45, 45, 45, 45, 2144, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 2144, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 2127, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 2144, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 2127, 45, 2127, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 2144, 45, 2144, 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, 2127, 45, 2127, 45, 2127, - 45, 2127, 45, 45, 2127, 45, 2127, 2127, 2127, 45, - 45, 45, 2127, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 2144, + 45, 2144, 45, 2144, 45, 2144, 45, 45, 2144, 45, + 2144, 2144, 2144, 45, 45, 45, 45, 2144, 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, 2127, 45, 45, - 45, 45, 45, 45, 45, 45, 2127, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 2144, 45, 45, 45, 45, 45, 45, 45, + 45, 2144, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 2127, 45, 45, 2127, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2127, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 2127, 45, 45, 45, 45, 45, 45, 45, 45, 45, - - 45, 45, 45, 45, 2127, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2127, 2127, 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, - 2127, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 2127, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 2127, 45, 45, 45, - - 45, 45, 45, 45, 45, 45, 45, 45, 2127, 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, 2127, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 2127, 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, 2127, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - - 45, 45, 45, 45, 45, 45, 2127, 2127, 45, 45, - 45, 45, 45, 45, 45, 2127, 2127, 45, 45, 45, - 45, 45, 2127, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 2127, 45, 2127, 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, 2127, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 2127, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - - 45, 45, 45, 45, 45, 45, 45, 45, 2127, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 2127, 45, 45, 45, 45, 45, 45, - 45, 2127, 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, 2127, 2127, 45, - 45, 45, 2127, 45, 45, 45, 45, 2127, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 2127, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - - 45, 45, 45, 45, 45, 45, 45, 2127, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2127, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 2127, - 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, 2127, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2127, 45, 45, - - 2127, 2127, 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, 2127, 45, 45, 45, 45, 45, 45, - 45, 45, 2127, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 2127, 2127, 45, 2127, 45, 2127, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 2127, 45, 45, 45, 2127, - 45, 45, 45, 45, 45, 2127, 45, 2127, 45, 2127, - - 45, 2127, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 2127, 45, 45, 45, - 45, 45, 45, 45, 2127, 2127, 45, 45, 45, 45, - 45, 45, 45, 45, 2127, 45, 45, 45, 2127, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 2127, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 2127, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 2127, 2127, 45, 45, 45, 45, - - 45, 45, 45, 45, 45, 45, 45, 45, 45, 2127, - 45, 45, 45, 45, 45, 2127, 45, 2127, 45, 45, - 2127, 2127, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 2127, 45, 45, 45, 2127, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 2127, 45, 45, 2127, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 2127, 45, 2127, 45, 2127, 45, 45, 2127, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 2127, - 45, 45, 45, 45, 45, 45, 45, 45, 2127, 2127, - - 45, 45, 2127, 45, 45, 45, 45, 2127, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 2127, - 45, 2127, 45, 45, 2127, 45, 45, 45, 2127, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 2127, 45, 45, 45, 45, 2127, 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, 2127, 45, 45, 45, 45, 45, 45, 45, 2127, - - 45, 45, 45, 45, 45, 45, 2127, 2127, 45, 45, - 45, 2127, 2127, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 2127, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 2127, 45, 45, 45, - 2127, 45, 45, 2127, 45, 45, 45, 2127, 45, 45, - 45, 45, 45, 2127, 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, 2127, - 45, 2127, 45, 45, 45, 2127, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2127, 45, - - 45, 45, 45, 45, 45, 2127, 45, 45, 45, 2127, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 2127, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 2127, 45, 2127, 45, 45, 45, 2127, 45, 2127, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2127, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2127, 45, 45, - 45, 45, 2127, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 2127, 45, 45, 45, 45, 45, - - 2127, 45, 45, 45, 45, 2127, 45, 45, 45, 45, - 45, 45, 45, 45, 2127, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2127, 2127, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 2127, 45, 45, 2127, 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, 2127, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 2127, 45, 2127, 45, 2127, 45, 2127, 45, - 2127, 45, 45, 45, 45, 45, 45, 45, 45, 45, - - 45, 45, 45, 45, 45, 45, 45, 2127, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 2127, - 45, 45, 45, 2127, 45, 45, 45, 45, 45, 2127, - 45, 45, 2127, 45, 2127, 45, 2127, 45, 2127, 45, - 45, 45, 45, 45, 45, 45, 45, 2127, 45, 45, - 45, 45, 45, 45, 45, 2127, 45, 45, 45, 45, - 45, 2127, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 2127, 45, 45, 45, - 45, 45, 45, 2127, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 2144, 45, 45, 2144, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 2144, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 2144, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 2127, 45, 45, 2127, 45, 45, 45, 45, - 2127, 45, 45, 45, 45, 2127, 2127, 2127, 2127, 2127, - 45, 2127, 2127, 2127, 45, 45, 45, 45, 45, 45, - 45, 45, 2127, 45, 45, 45, 45, 45, 45, 45, - 45, 2127, 45, 45, 45, 45, 45, 45, 2127, 45, - 2127, 45, 2127, 45, 45, 45, 45, 45, 45, 2127, - 45, 45, 45, 45, 45, 45, 45, 2127, 45, 45, - 2127, 2127, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2127, 45, 45, + 2144, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 2144, 2144, 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, 2144, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 2144, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 2127, 2127, 45, 45, 45, 2127, 45, 45, - 2127, 45, 2127, 45, 45, 45, 45, 45, 45, 45, - 45, 2127, 45, 2127, 2127, 2127, 0, 2127, 2127, 2127, - 2127, 2127, 2127, 2127, 2127 + 45, 45, 45, 2144, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 2144, 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, 2144, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 2144, 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, 2144, 45, 45, + + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 2144, 2144, 45, 45, 45, + 45, 45, 45, 45, 2144, 2144, 45, 45, 45, 45, + 45, 2144, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 2144, 45, 45, 2144, 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, 2144, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 2144, 45, 45, 45, 45, 45, + + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 2144, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 2144, 45, 45, 45, 45, 45, + 45, 45, 2144, 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, 2144, 45, + 2144, 45, 45, 45, 2144, 45, 45, 45, 45, 2144, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 2144, 45, + + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 2144, 45, 45, 45, 45, + 2144, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 2144, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 2144, 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, + + 2144, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 2144, 45, 45, 2144, 2144, 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, 2144, 45, 45, + 45, 45, 45, 45, 45, 45, 2144, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 2144, 2144, 45, + 2144, 45, 2144, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 2144, + + 45, 45, 45, 2144, 45, 45, 45, 45, 45, 2144, + 45, 45, 2144, 45, 2144, 45, 2144, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 2144, 45, 45, 45, 45, 45, 45, 45, 2144, + 2144, 45, 45, 45, 45, 45, 45, 45, 45, 2144, + 45, 45, 45, 2144, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 2144, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 2144, 45, 45, + + 45, 45, 45, 45, 45, 45, 45, 45, 45, 2144, + 2144, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 2144, 45, 45, 45, 45, + 45, 2144, 45, 2144, 45, 45, 2144, 2144, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 2144, 45, + 45, 45, 2144, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 2144, 45, 45, 2144, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 2144, 45, 2144, + 45, 2144, 45, 45, 2144, 45, 45, 45, 45, 45, + + 45, 45, 45, 45, 45, 2144, 45, 45, 45, 45, + 45, 45, 2144, 45, 45, 2144, 2144, 45, 45, 2144, + 45, 45, 45, 45, 2144, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 2144, 45, 2144, 45, + 45, 2144, 45, 45, 45, 2144, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 2144, 45, 45, 45, 45, 2144, 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, 2144, 45, + 45, 45, 45, 45, 45, 45, 2144, 45, 45, 45, + 45, 45, 45, 2144, 2144, 45, 45, 45, 2144, 2144, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 2144, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 2144, 45, 45, 45, 2144, 45, 45, + 2144, 45, 45, 45, 2144, 45, 45, 45, 45, 45, + 2144, 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, 2144, 45, 2144, 45, + + 45, 45, 2144, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 2144, 45, 45, 45, 45, + 45, 45, 2144, 45, 45, 45, 2144, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 2144, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 2144, 45, + 2144, 45, 45, 45, 2144, 45, 2144, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 2144, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 2144, 45, 45, 45, 45, 2144, + + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 2144, 45, 45, 45, 45, 45, 2144, 45, 45, + 45, 45, 2144, 45, 45, 45, 45, 45, 45, 45, + 45, 2144, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 2144, 2144, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 2144, 45, 45, + 2144, 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, 2144, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 2144, + + 45, 2144, 45, 2144, 45, 2144, 45, 2144, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 2144, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 2144, 45, 45, 45, + 2144, 45, 45, 45, 45, 45, 2144, 45, 45, 2144, + 45, 2144, 45, 2144, 45, 2144, 45, 45, 45, 45, + 45, 45, 45, 45, 2144, 45, 45, 45, 45, 45, + 45, 45, 2144, 45, 45, 45, 45, 45, 2144, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 2144, 45, 45, 45, 45, 45, 45, + + 2144, 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, 2144, + 45, 45, 2144, 45, 45, 45, 45, 2144, 45, 45, + 45, 45, 2144, 2144, 2144, 2144, 2144, 45, 2144, 2144, + 2144, 45, 45, 45, 45, 45, 45, 45, 45, 2144, + 45, 45, 45, 45, 45, 45, 45, 45, 2144, 45, + 45, 45, 45, 45, 45, 2144, 45, 2144, 45, 2144, + 45, 45, 45, 45, 45, 45, 2144, 45, 45, 45, + 45, 45, 45, 45, 2144, 45, 45, 2144, 2144, 45, + + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 2144, 45, 45, 45, 45, 2144, + 2144, 45, 45, 45, 2144, 45, 45, 2144, 45, 2144, + 45, 45, 45, 45, 45, 45, 45, 45, 2144, 45, + 2144, 2144, 2144, 0, 2144, 2144, 2144, 2144, 2144, 2144, + 2144, 2144 } ; -static const flex_int16_t yy_nxt[2591] = +static const flex_int16_t yy_nxt[2608] = { 0, - 2127, 13, 14, 13, 2127, 15, 16, 2127, 17, 18, + 2144, 13, 14, 13, 2144, 15, 16, 2144, 17, 18, 19, 20, 21, 22, 22, 22, 22, 22, 23, 24, - 84, 797, 37, 14, 37, 85, 25, 26, 38, 100, - 2127, 27, 37, 14, 37, 42, 28, 42, 38, 90, + 84, 804, 37, 14, 37, 85, 25, 26, 38, 100, + 2144, 27, 37, 14, 37, 42, 28, 42, 38, 90, 91, 29, 198, 30, 13, 14, 13, 89, 90, 25, 31, 91, 13, 14, 13, 13, 14, 13, 32, 40, - 798, 13, 14, 13, 33, 40, 101, 90, 91, 198, + 805, 13, 14, 13, 33, 40, 101, 90, 91, 198, 89, 34, 35, 13, 14, 13, 93, 15, 16, 94, 17, 18, 19, 20, 21, 22, 22, 22, 22, 22, 23, 24, 13, 14, 13, 89, 39, 102, 25, 26, 13, 14, 13, 27, 39, 42, 105, 42, 28, 42, 106, 42, 41, 29, 108, 30, 111, 112, 92, 136, - 41, 25, 31, 102, 137, 375, 87, 138, 87, 105, + 41, 25, 31, 102, 137, 376, 87, 138, 87, 105, 32, 88, 88, 88, 88, 88, 33, 108, 106, 111, - 853, 112, 376, 34, 35, 44, 44, 44, 45, 45, + 857, 112, 377, 34, 35, 44, 44, 44, 45, 45, 46, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 47, 45, 45, 48, 49, 50, 45, 51, 52, 53, 45, 45, 45, @@ -1487,13 +1494,13 @@ static const flex_int16_t yy_nxt[2591] = 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 56, 45, 45, 45, 45, 45, 79, 202, 80, 80, 80, 80, 80, 79, 102, 82, 82, 82, - 82, 82, 450, 81, 83, 83, 83, 83, 83, 79, + 82, 82, 452, 81, 83, 83, 83, 83, 83, 79, 81, 82, 82, 82, 82, 82, 202, 81, 186, 187, 109, 118, 116, 130, 81, 119, 81, 105, 117, 120, - 110, 450, 121, 81, 124, 122, 131, 125, 126, 123, + 110, 452, 121, 81, 124, 122, 131, 125, 126, 123, 81, 127, 128, 109, 186, 187, 132, 81, 45, 108, 105, 45, 45, 45, 129, 45, 45, 45, 110, 114, - 134, 133, 45, 45, 473, 45, 45, 135, 152, 474, + 134, 133, 45, 45, 476, 45, 45, 135, 152, 477, 153, 45, 154, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, @@ -1501,7 +1508,7 @@ static const flex_int16_t yy_nxt[2591] = 45, 167, 145, 257, 45, 140, 147, 141, 146, 238, 148, 186, 45, 155, 149, 204, 45, 100, 45, 115, 111, 156, 188, 157, 258, 239, 150, 188, 158, 159, - 151, 160, 168, 187, 161, 162, 169, 189, 854, 170, + 151, 160, 168, 187, 161, 162, 169, 189, 858, 170, 175, 176, 204, 111, 205, 163, 171, 172, 164, 194, 109, 173, 174, 182, 101, 191, 197, 201, 183, 190, 110, 83, 83, 83, 83, 83, 79, 205, 80, 80, @@ -1511,132 +1518,132 @@ static const flex_int16_t yy_nxt[2591] = 88, 88, 88, 88, 99, 181, 79, 81, 82, 82, 82, 82, 82, 203, 81, 83, 83, 83, 83, 83, 194, 81, 88, 88, 88, 88, 88, 199, 81, 88, - 88, 88, 88, 88, 99, 699, 213, 210, 99, 268, + 88, 88, 88, 88, 99, 859, 213, 210, 99, 268, 247, 203, 99, 219, 81, 214, 201, 252, 211, 215, 99, 81, 220, 221, 99, 306, 99, 99, 200, 208, 253, 307, 225, 226, 232, 203, 233, 209, 209, 209, 209, 209, 227, 235, 265, 285, 209, 209, 209, 209, - 209, 209, 242, 234, 248, 243, 236, 700, 315, 244, - 237, 272, 278, 310, 316, 279, 280, 398, 316, 209, + 209, 209, 242, 234, 248, 243, 236, 385, 315, 244, + 237, 272, 278, 310, 316, 279, 280, 333, 316, 209, 209, 209, 209, 209, 209, 295, 273, 274, 275, 296, 286, 287, 288, 297, 317, 301, 315, 315, 317, 322, 316, 289, 324, 290, 319, 291, 292, 325, 293, 302, - 327, 331, 329, 322, 384, 343, 402, 317, 344, 773, - 774, 320, 322, 345, 327, 318, 403, 399, 855, 418, - 324, 346, 419, 327, 325, 329, 334, 347, 331, 332, - 332, 332, 332, 332, 433, 329, 434, 393, 332, 332, - 332, 332, 332, 332, 447, 447, 452, 454, 479, 513, + 327, 331, 329, 322, 327, 344, 399, 317, 345, 403, + 386, 320, 322, 387, 420, 318, 435, 421, 436, 404, + 324, 334, 407, 327, 325, 329, 335, 394, 331, 332, + 332, 332, 332, 332, 329, 449, 346, 408, 332, 332, + 332, 332, 332, 332, 347, 449, 454, 456, 482, 523, - 514, 515, 450, 520, 480, 516, 454, 385, 329, 521, - 386, 332, 332, 332, 332, 332, 332, 447, 448, 452, - 541, 856, 442, 525, 586, 454, 457, 457, 457, 457, - 457, 458, 857, 526, 527, 457, 457, 457, 457, 457, - 457, 496, 586, 545, 554, 563, 497, 546, 555, 564, - 582, 616, 586, 720, 590, 583, 591, 607, 457, 457, - 457, 457, 457, 457, 617, 608, 652, 609, 610, 611, - 592, 612, 628, 848, 691, 723, 653, 629, 542, 692, - 720, 590, 724, 591, 719, 742, 809, 721, 743, 722, - 847, 810, 858, 837, 498, 862, 848, 863, 864, 499, + 348, 860, 452, 861, 483, 524, 400, 329, 449, 545, + 528, 332, 332, 332, 332, 332, 332, 499, 450, 454, + 529, 444, 500, 456, 657, 456, 459, 459, 459, 459, + 459, 461, 862, 705, 658, 459, 459, 459, 459, 459, + 459, 516, 517, 518, 549, 558, 567, 519, 550, 559, + 568, 530, 586, 590, 590, 621, 726, 587, 459, 459, + 459, 459, 459, 459, 594, 863, 595, 546, 622, 633, + 501, 727, 697, 725, 634, 502, 612, 698, 729, 780, + 781, 590, 597, 726, 613, 706, 614, 615, 616, 749, + 617, 594, 750, 595, 45, 45, 45, 45, 45, 727, - 45, 45, 45, 45, 45, 838, 865, 866, 867, 45, - 45, 45, 45, 45, 45, 721, 859, 860, 847, 861, - 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, - 811, 878, 45, 45, 45, 45, 45, 45, 879, 880, - 881, 884, 885, 886, 882, 887, 888, 889, 883, 890, - 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, + 845, 856, 730, 45, 45, 45, 45, 45, 45, 731, + 817, 855, 846, 864, 865, 818, 866, 867, 868, 869, + 871, 870, 872, 873, 856, 874, 45, 45, 45, 45, + 45, 45, 875, 876, 877, 878, 879, 880, 881, 855, + 882, 883, 884, 885, 886, 887, 888, 889, 890, 893, + 894, 895, 891, 896, 819, 897, 892, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, - 911, 912, 914, 915, 913, 916, 917, 918, 919, 920, - 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, + 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, + 921, 923, 924, 922, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, - 951, 952, 953, 954, 955, 957, 958, 961, 962, 963, - 964, 956, 966, 959, 967, 968, 965, 960, 969, 970, - 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, + 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 967, 968, 971, 972, 973, + 974, 966, 976, 969, 977, 978, 975, 970, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, - 1001, 1002, 1003, 1004, 1005, 1006, 979, 1007, 1008, 1009, - 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, - 1020, 1021, 1022, 1023, 1024, 1026, 1027, 1028, 1029, 1025, - 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, + 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, + 1011, 1012, 1013, 1014, 1015, 1016, 989, 1017, 1018, 1019, + 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, + 1030, 1031, 1032, 1033, 1034, 1035, 1037, 1038, 1039, 1040, - 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, - 1050, 1052, 1053, 1054, 1051, 1055, 1056, 1057, 1058, 1059, - 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, + 1036, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, + 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, + 1060, 1061, 1063, 1064, 1065, 1062, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, - 1080, 1081, 1082, 1084, 1085, 1086, 1087, 1088, 1089, 1090, - 1091, 1092, 1093, 1094, 1083, 1095, 1096, 1097, 1098, 1099, - 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, + 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, + 1090, 1091, 1092, 1093, 1094, 1096, 1097, 1098, 1099, 1100, + 1101, 1102, 1103, 1104, 1105, 1106, 1095, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, - 1120, 1121, 1122, 1123, 1124, 1125, 1103, 1126, 1127, 1102, - 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, + 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, + 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1115, 1138, - 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, - 1148, 1149, 1150, 1153, 1154, 1155, 1156, 1151, 1157, 1158, - 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, - 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1178, 1179, - 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1177, 1188, - 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, - 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, - 1152, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, - 1218, 1219, 1220, 1222, 1221, 1223, 1224, 1225, 1226, 1227, - 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, + 1139, 1114, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, + 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, + 1158, 1159, 1160, 1161, 1162, 1163, 1166, 1167, 1168, 1169, + 1164, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, + 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, + 1189, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, + 1200, 1190, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, + 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, + 1219, 1220, 1221, 1165, 1222, 1223, 1224, 1225, 1226, 1227, + 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1236, 1235, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, - 1220, 1221, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, - 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, - 1266, 1267, 1269, 1271, 1272, 1273, 1268, 1274, 1275, 1276, - 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, - 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, + 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, + 1258, 1259, 1260, 1261, 1234, 1235, 1262, 1263, 1264, 1265, + 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, + 1276, 1277, 1278, 1279, 1280, 1281, 1283, 1285, 1286, 1287, + 1282, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, - 1307, 1308, 1309, 1310, 1311, 1312, 1270, 1313, 1314, 1315, - 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, - 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, + 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, + 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, + 1284, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, - 1333, 1356, 1357, 1358, 1359, 1360, 1334, 1361, 1362, 1363, - 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, - 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, + 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, + 1366, 1367, 1368, 1369, 1370, 1348, 1371, 1372, 1373, 1374, + 1375, 1349, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, - 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, - 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, + 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, + 1424, 1425, 1426, 1427, 1428, 1429, 1431, 1432, 1433, 1434, - 1435, 1436, 1437, 1439, 1440, 1441, 1442, 1443, 1444, 1445, - 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, - 1456, 1457, 1458, 1459, 1460, 1432, 1461, 1462, 1463, 1464, - 1465, 1466, 1414, 1467, 1468, 1469, 1470, 1471, 1472, 1473, - 1474, 1475, 1476, 1477, 1478, 1479, 1438, 1480, 1481, 1482, - 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1483, 1491, 1492, - 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, - 1503, 1504, 1505, 1506, 1507, 1508, 1510, 1511, 1513, 1512, - 1509, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, - 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, + 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, + 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1455, + 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, + 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, + 1476, 1448, 1477, 1478, 1479, 1480, 1481, 1482, 1430, 1483, + 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, + 1494, 1495, 1454, 1496, 1497, 1498, 1500, 1501, 1502, 1503, + 1504, 1505, 1506, 1499, 1507, 1508, 1509, 1510, 1511, 1512, + 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, + 1523, 1524, 1525, 1527, 1528, 1530, 1529, 1526, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, - 1543, 1544, 1545, 1546, 1524, 1547, 1548, 1549, 1550, 1551, - 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, - 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571, + 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, + 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, + 1563, 1541, 1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, - 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1592, 1589, 1593, - 1594, 1590, 1595, 1596, 1591, 1597, 1598, 1599, 1600, 1601, - 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, - 1612, 1613, 1614, 1615, 1617, 1618, 1619, 1620, 1621, 1622, - 1623, 1624, 1625, 1626, 1616, 1627, 1628, 1629, 1630, 1604, + 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, + 1592, 1593, 1594, 1595, 1596, 1597, 1598, 1599, 1600, 1601, + 1602, 1603, 1604, 1605, 1609, 1606, 1610, 1611, 1607, 1612, + 1613, 1608, 1614, 1615, 1616, 1617, 1618, 1619, 1620, 1621, + 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, - 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1639, 1640, 1641, - 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, - 1652, 1653, 1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, + 1632, 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, + 1643, 1633, 1644, 1645, 1646, 1647, 1621, 1648, 1649, 1650, + 1651, 1652, 1653, 1654, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, - 1692, 1693, 1694, 1695, 1638, 1696, 1697, 1698, 1699, 1701, - 1702, 1703, 1704, 1700, 1705, 1706, 1707, 1681, 1708, 1709, - 1710, 1711, 1712, 1713, 1714, 1715, 1716, 1717, 1718, 1719, - 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, + 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, + 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, + 1712, 1655, 1713, 1714, 1715, 1716, 1718, 1719, 1720, 1721, + 1717, 1722, 1723, 1724, 1698, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, @@ -1645,9 +1652,9 @@ static const flex_int16_t yy_nxt[2591] = 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, - 1800, 1801, 1802, 1804, 1805, 1806, 1807, 1803, 1808, 1809, + 1800, 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, + 1821, 1822, 1823, 1824, 1820, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, @@ -1656,9 +1663,9 @@ static const flex_int16_t yy_nxt[2591] = 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, - 1900, 1901, 1902, 1903, 1905, 1906, 1904, 1907, 1908, 1909, + 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, + 1920, 1922, 1923, 1921, 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, @@ -1676,87 +1683,90 @@ static const flex_int16_t yy_nxt[2591] = 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, 2085, 2086, 2088, 2087, 2089, + 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, - 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, + 2100, 2101, 2102, 2103, 2105, 2104, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2114, 2115, 2116, 2117, 2118, 2119, - 2120, 2121, 2122, 2123, 2124, 2125, 2126, 12, 12, 12, + 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, - 36, 36, 36, 78, 97, 78, 99, 99, 99, 113, - 113, 113, 185, 852, 185, 206, 206, 206, 851, 850, - 849, 846, 845, 844, 843, 842, 841, 840, 839, 836, - 835, 834, 833, 832, 831, 830, 829, 828, 827, 826, - 825, 824, 823, 822, 821, 820, 819, 818, 817, 816, - 815, 814, 813, 812, 808, 807, 806, 805, 804, 803, - 802, 801, 800, 799, 796, 795, 794, 793, 792, 791, - 790, 789, 788, 787, 786, 785, 784, 783, 782, 781, - 780, 779, 778, 777, 776, 775, 772, 771, 770, 769, - 768, 767, 766, 765, 764, 763, 762, 761, 760, 759, + 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, + 2140, 2141, 2142, 2143, 12, 12, 12, 36, 36, 36, + 78, 97, 78, 99, 99, 99, 113, 113, 113, 185, + 854, 185, 206, 206, 206, 853, 852, 851, 850, 849, + 848, 847, 844, 843, 842, 841, 840, 839, 838, 837, + 836, 835, 834, 833, 832, 831, 830, 829, 828, 827, + 826, 825, 824, 823, 822, 821, 820, 816, 815, 814, + 813, 812, 811, 810, 809, 808, 807, 806, 803, 802, + 801, 800, 799, 798, 797, 796, 795, 794, 793, 792, + 791, 790, 789, 788, 787, 786, 785, 784, 783, 782, - 758, 757, 756, 755, 754, 753, 752, 751, 750, 749, - 748, 747, 746, 745, 744, 741, 740, 739, 738, 737, - 736, 735, 734, 733, 732, 731, 730, 729, 728, 727, - 726, 725, 719, 718, 717, 716, 715, 714, 713, 712, - 711, 710, 709, 708, 707, 706, 705, 704, 703, 702, - 701, 698, 697, 696, 695, 694, 693, 690, 689, 688, - 687, 686, 685, 684, 683, 682, 681, 680, 679, 678, - 677, 676, 675, 674, 673, 672, 671, 670, 669, 668, - 667, 666, 665, 664, 663, 662, 661, 660, 659, 658, - 657, 656, 655, 654, 651, 650, 649, 648, 647, 646, + 779, 778, 777, 776, 775, 774, 773, 772, 771, 770, + 769, 768, 767, 766, 765, 764, 763, 762, 761, 760, + 759, 758, 757, 756, 755, 754, 753, 752, 751, 748, + 747, 746, 745, 744, 743, 742, 741, 740, 739, 738, + 737, 736, 735, 734, 733, 732, 728, 725, 724, 723, + 722, 721, 720, 719, 718, 717, 716, 715, 714, 713, + 712, 711, 710, 709, 708, 707, 704, 703, 702, 701, + 700, 699, 696, 695, 694, 693, 692, 691, 690, 689, + 688, 687, 686, 685, 684, 683, 682, 681, 680, 679, + 678, 677, 676, 675, 674, 673, 672, 671, 670, 669, - 645, 644, 643, 642, 641, 640, 639, 638, 637, 636, - 635, 634, 633, 632, 631, 630, 627, 626, 625, 624, - 623, 622, 621, 620, 619, 618, 615, 614, 613, 606, - 605, 604, 603, 602, 601, 600, 599, 598, 597, 596, - 595, 594, 593, 589, 588, 587, 585, 584, 581, 580, - 579, 578, 577, 576, 575, 574, 573, 572, 571, 570, - 569, 568, 567, 566, 565, 562, 561, 560, 559, 558, - 557, 556, 553, 552, 551, 550, 549, 548, 547, 544, - 543, 540, 539, 538, 537, 536, 535, 534, 533, 532, - 531, 530, 529, 528, 524, 523, 522, 519, 518, 517, + 668, 667, 666, 665, 664, 663, 662, 661, 660, 659, + 656, 655, 654, 653, 652, 651, 650, 649, 648, 647, + 646, 645, 644, 643, 642, 641, 640, 639, 638, 637, + 636, 635, 632, 631, 630, 629, 628, 627, 626, 625, + 624, 623, 620, 619, 618, 611, 610, 609, 608, 607, + 606, 605, 604, 603, 602, 601, 600, 599, 598, 596, + 593, 592, 591, 589, 588, 585, 584, 583, 582, 581, + 580, 579, 578, 577, 576, 575, 574, 573, 572, 571, + 570, 569, 566, 565, 564, 563, 562, 561, 560, 557, + 556, 555, 554, 553, 552, 551, 548, 547, 544, 543, - 512, 511, 510, 509, 508, 507, 506, 505, 504, 503, - 502, 501, 500, 495, 494, 493, 492, 491, 490, 489, - 488, 487, 486, 485, 484, 483, 482, 481, 478, 477, - 476, 475, 472, 471, 470, 469, 468, 467, 466, 465, - 464, 463, 462, 461, 460, 459, 456, 455, 453, 451, - 449, 446, 445, 444, 443, 441, 440, 439, 438, 437, - 436, 435, 432, 431, 430, 429, 428, 427, 426, 425, - 424, 423, 422, 421, 420, 417, 416, 415, 414, 413, - 412, 411, 410, 409, 408, 407, 406, 405, 404, 401, - 400, 397, 396, 395, 394, 392, 391, 390, 389, 388, + 542, 541, 540, 539, 538, 537, 536, 535, 534, 533, + 532, 531, 527, 526, 525, 522, 521, 520, 515, 514, + 513, 512, 511, 510, 509, 508, 507, 506, 505, 504, + 503, 498, 497, 496, 495, 494, 493, 492, 491, 490, + 489, 488, 487, 486, 485, 484, 481, 480, 479, 478, + 475, 474, 473, 472, 471, 470, 469, 468, 467, 466, + 465, 464, 463, 462, 460, 458, 457, 455, 453, 451, + 448, 447, 446, 445, 443, 442, 441, 440, 439, 438, + 437, 434, 433, 432, 431, 430, 429, 428, 427, 426, + 425, 424, 423, 422, 419, 418, 417, 416, 415, 414, - 387, 383, 382, 381, 380, 379, 378, 377, 374, 373, - 372, 371, 370, 369, 368, 367, 366, 365, 364, 363, - 362, 361, 360, 359, 358, 357, 356, 355, 354, 353, - 352, 351, 350, 349, 348, 342, 341, 340, 339, 338, - 337, 336, 335, 333, 207, 330, 328, 326, 323, 321, - 314, 313, 312, 311, 309, 308, 305, 304, 303, 300, - 299, 298, 294, 284, 281, 277, 276, 271, 270, 269, - 266, 264, 263, 262, 261, 260, 259, 256, 255, 254, - 251, 250, 249, 246, 245, 241, 240, 231, 230, 229, - 228, 224, 223, 222, 218, 217, 216, 212, 207, 196, + 413, 412, 411, 410, 409, 406, 405, 402, 401, 398, + 397, 396, 395, 393, 392, 391, 390, 389, 388, 384, + 383, 382, 381, 380, 379, 378, 375, 374, 373, 372, + 371, 370, 369, 368, 367, 366, 365, 364, 363, 362, + 361, 360, 359, 358, 357, 356, 355, 354, 353, 352, + 351, 350, 349, 343, 342, 341, 340, 339, 338, 337, + 336, 207, 330, 328, 326, 323, 321, 314, 313, 312, + 311, 309, 308, 305, 304, 303, 300, 299, 298, 294, + 284, 281, 277, 276, 271, 270, 269, 266, 264, 263, + 262, 261, 260, 259, 256, 255, 254, 251, 250, 249, - 195, 193, 192, 184, 165, 142, 107, 104, 103, 43, - 98, 96, 95, 86, 43, 2127, 11, 2127, 2127, 2127, - 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, - 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, - 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, - 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, - 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, - 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, - 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127 + 246, 245, 241, 240, 231, 230, 229, 228, 224, 223, + 222, 218, 217, 216, 212, 207, 196, 195, 193, 192, + 184, 165, 142, 107, 104, 103, 43, 98, 96, 95, + 86, 43, 2144, 11, 2144, 2144, 2144, 2144, 2144, 2144, + 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, + 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, + 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, + 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, + 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, + 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, + + 2144, 2144, 2144, 2144, 2144, 2144, 2144 } ; -static const flex_int16_t yy_chk[2591] = +static const flex_int16_t yy_chk[2608] = { 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 21, 669, 3, 3, 3, 21, 1, 1, 3, 44, + 21, 674, 3, 3, 3, 21, 1, 1, 3, 44, 0, 1, 4, 4, 4, 13, 1, 13, 4, 27, 28, 1, 106, 1, 5, 5, 5, 26, 32, 1, 1, 33, 6, 6, 6, 7, 7, 7, 1, 7, - 669, 8, 8, 8, 1, 8, 44, 27, 28, 106, + 674, 8, 8, 8, 1, 8, 44, 27, 28, 106, 26, 1, 1, 2, 2, 2, 32, 2, 2, 33, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 9, 9, 9, 31, 5, 47, 2, 2, @@ -1765,7 +1775,7 @@ static const flex_int16_t yy_chk[2591] = 51, 42, 9, 2, 53, 2, 55, 56, 31, 64, 10, 2, 2, 47, 64, 250, 25, 64, 25, 50, 2, 25, 25, 25, 25, 25, 2, 53, 51, 55, - 726, 56, 250, 2, 2, 15, 15, 15, 15, 15, + 728, 56, 250, 2, 2, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, @@ -1781,7 +1791,7 @@ static const flex_int16_t yy_chk[2591] = 54, 322, 59, 19, 60, 59, 61, 60, 60, 59, 20, 60, 60, 54, 89, 90, 61, 22, 45, 69, 62, 45, 45, 45, 60, 45, 45, 45, 54, 57, - 63, 62, 45, 45, 349, 45, 57, 63, 69, 349, + 63, 62, 45, 45, 350, 45, 57, 63, 69, 350, 69, 45, 69, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, @@ -1789,7 +1799,7 @@ static const flex_int16_t yy_chk[2591] = 57, 73, 67, 147, 57, 65, 68, 65, 67, 133, 68, 92, 57, 70, 68, 111, 57, 99, 57, 57, 76, 70, 91, 70, 147, 133, 68, 94, 70, 70, - 68, 71, 74, 93, 71, 71, 74, 92, 727, 74, + 68, 71, 74, 93, 71, 71, 74, 92, 729, 74, 75, 75, 111, 76, 112, 71, 74, 74, 71, 102, 75, 74, 74, 76, 99, 94, 105, 108, 76, 93, 75, 79, 79, 79, 79, 79, 80, 112, 80, 80, @@ -1799,241 +1809,244 @@ static const flex_int16_t yy_chk[2591] = 81, 81, 81, 81, 101, 75, 82, 79, 82, 82, 82, 82, 82, 110, 80, 83, 83, 83, 83, 83, 116, 82, 87, 87, 87, 87, 87, 107, 83, 88, - 88, 88, 88, 88, 101, 563, 118, 116, 101, 156, + 88, 88, 88, 88, 101, 730, 118, 116, 101, 156, 139, 110, 101, 122, 82, 118, 154, 143, 116, 118, 101, 83, 122, 122, 101, 177, 101, 101, 107, 115, 143, 177, 126, 126, 131, 180, 131, 115, 115, 115, 115, 115, 126, 132, 154, 167, 115, 115, 115, 115, - 115, 115, 136, 131, 139, 136, 132, 563, 186, 136, - 132, 160, 163, 180, 187, 163, 163, 270, 190, 115, + 115, 115, 136, 131, 139, 136, 132, 258, 186, 136, + 132, 160, 163, 180, 187, 163, 163, 210, 190, 115, 115, 115, 115, 115, 115, 169, 160, 160, 160, 169, 167, 167, 167, 169, 188, 173, 186, 189, 191, 194, 187, 167, 197, 167, 190, 167, 167, 198, 167, 173, - 201, 205, 203, 211, 258, 220, 273, 188, 220, 644, - 644, 191, 194, 221, 265, 189, 273, 270, 728, 288, - 197, 221, 288, 201, 198, 203, 211, 221, 205, 209, - 209, 209, 209, 209, 302, 310, 302, 265, 209, 209, - 209, 209, 209, 209, 315, 318, 324, 327, 354, 384, + 201, 205, 203, 211, 265, 220, 270, 188, 220, 273, + 258, 191, 194, 258, 288, 189, 302, 288, 302, 273, + 197, 210, 276, 201, 198, 203, 211, 265, 205, 209, + 209, 209, 209, 209, 310, 315, 221, 276, 209, 209, + 209, 209, 209, 209, 221, 318, 324, 327, 355, 389, - 384, 384, 334, 388, 354, 384, 393, 258, 310, 388, - 258, 209, 209, 209, 209, 209, 209, 315, 318, 324, - 408, 729, 310, 392, 450, 327, 332, 332, 332, 332, - 332, 334, 730, 392, 393, 332, 332, 332, 332, 332, - 332, 370, 458, 411, 419, 427, 370, 411, 419, 427, - 445, 479, 450, 590, 456, 445, 456, 475, 332, 332, - 332, 332, 332, 332, 479, 475, 515, 475, 475, 475, - 458, 475, 491, 721, 556, 594, 515, 491, 408, 556, - 590, 456, 594, 456, 592, 612, 681, 591, 612, 592, - 720, 681, 731, 709, 370, 733, 721, 734, 735, 370, + 221, 731, 335, 732, 355, 389, 270, 310, 315, 410, + 393, 209, 209, 209, 209, 209, 209, 371, 318, 324, + 393, 310, 371, 394, 518, 327, 332, 332, 332, 332, + 332, 335, 733, 567, 518, 332, 332, 332, 332, 332, + 332, 385, 385, 385, 413, 421, 429, 385, 413, 421, + 429, 394, 447, 452, 461, 482, 594, 447, 332, 332, + 332, 332, 332, 332, 458, 734, 458, 410, 482, 494, + 371, 595, 560, 597, 494, 371, 478, 560, 597, 649, + 649, 452, 461, 594, 478, 567, 478, 478, 478, 617, + 478, 458, 617, 458, 459, 459, 459, 459, 459, 595, - 457, 457, 457, 457, 457, 709, 736, 737, 738, 457, - 457, 457, 457, 457, 457, 591, 732, 732, 720, 732, - 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, - 681, 749, 457, 457, 457, 457, 457, 457, 750, 751, - 752, 753, 754, 755, 752, 756, 757, 758, 752, 759, - 760, 762, 763, 764, 765, 766, 767, 768, 769, 770, - 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, - 781, 782, 783, 784, 782, 785, 787, 788, 789, 790, - 791, 792, 793, 794, 795, 796, 798, 799, 800, 801, - 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, + 715, 727, 599, 459, 459, 459, 459, 459, 459, 599, + 687, 726, 715, 735, 736, 687, 737, 738, 739, 739, + 740, 739, 741, 742, 727, 743, 459, 459, 459, 459, + 459, 459, 744, 745, 746, 747, 748, 749, 750, 726, + 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, + 761, 762, 759, 763, 687, 764, 759, 765, 766, 767, + 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 789, 792, 794, 795, 796, 797, 798, + 799, 800, 801, 802, 803, 805, 806, 807, 808, 809, - 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, - 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, - 833, 827, 834, 829, 835, 836, 833, 829, 838, 839, - 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, - 850, 851, 852, 853, 854, 855, 856, 858, 859, 860, - 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, - 871, 872, 873, 874, 875, 876, 848, 877, 878, 879, - 880, 881, 882, 883, 884, 885, 886, 887, 888, 890, - 891, 892, 893, 894, 895, 896, 897, 898, 899, 895, - 900, 901, 902, 903, 904, 905, 906, 909, 910, 911, + 810, 811, 812, 813, 814, 815, 816, 818, 819, 820, + 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, + 841, 835, 842, 837, 843, 844, 841, 837, 846, 847, + 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, + 858, 859, 860, 861, 862, 863, 864, 865, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, + 879, 880, 881, 882, 883, 884, 856, 885, 886, 887, + 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, + 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, - 912, 913, 914, 915, 918, 919, 920, 921, 922, 924, - 925, 926, 927, 928, 925, 929, 930, 931, 932, 934, - 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, - 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, - 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, - 966, 967, 968, 970, 958, 971, 972, 973, 974, 975, - 976, 977, 978, 979, 980, 981, 982, 983, 985, 986, - 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, - 997, 998, 999, 1000, 1001, 1002, 979, 1003, 1004, 978, - 1005, 1006, 1007, 1008, 1010, 1011, 1012, 1013, 1014, 1015, + 904, 909, 910, 911, 912, 913, 914, 915, 918, 919, + 920, 921, 922, 923, 924, 927, 928, 929, 930, 931, + 933, 934, 935, 936, 937, 934, 938, 939, 940, 941, + 943, 944, 946, 947, 948, 949, 950, 951, 952, 953, + 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, + 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, + 974, 975, 976, 977, 978, 980, 968, 981, 982, 983, + 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, + 994, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, + 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 989, 1013, - 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1025, 1026, - 1027, 1028, 1029, 1030, 1031, 1033, 1034, 1029, 1035, 1036, - 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, - 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, - 1057, 1060, 1061, 1062, 1064, 1065, 1066, 1067, 1054, 1069, - 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, - 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1088, 1089, 1090, - 1029, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, - 1100, 1101, 1102, 1104, 1103, 1105, 1106, 1107, 1109, 1110, - 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, + 1014, 988, 1015, 1016, 1017, 1018, 1019, 1021, 1022, 1023, + 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, + 1034, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1044, 1045, + 1040, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, + 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, + 1065, 1066, 1067, 1068, 1070, 1072, 1073, 1074, 1076, 1077, + 1078, 1065, 1079, 1081, 1082, 1083, 1084, 1085, 1086, 1087, + 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, + 1098, 1100, 1101, 1040, 1102, 1103, 1104, 1105, 1106, 1107, + 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1117, 1115, 1118, - 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1130, 1131, - 1102, 1103, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, - 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, - 1151, 1152, 1153, 1154, 1155, 1156, 1152, 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, 1188, 1189, 1190, - 1191, 1192, 1193, 1194, 1195, 1196, 1153, 1197, 1199, 1200, - 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, - 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, + 1119, 1120, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, + 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, + 1140, 1141, 1143, 1144, 1114, 1115, 1145, 1146, 1147, 1148, + 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, + 1159, 1160, 1161, 1162, 1164, 1165, 1166, 1167, 1168, 1169, + 1165, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, + 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, + 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, + 1199, 1200, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, + 1166, 1210, 1211, 1213, 1214, 1217, 1218, 1219, 1220, 1221, - 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, - 1233, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1244, - 1220, 1245, 1246, 1247, 1248, 1249, 1221, 1250, 1251, 1252, - 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, - 1263, 1266, 1268, 1270, 1271, 1272, 1273, 1274, 1275, 1276, - 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1287, - 1288, 1289, 1291, 1292, 1293, 1294, 1295, 1297, 1299, 1301, - 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, - 1313, 1314, 1315, 1316, 1318, 1319, 1320, 1321, 1322, 1323, - 1324, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1336, + 1222, 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, 1249, 1250, 1251, 1252, + 1253, 1254, 1255, 1256, 1258, 1234, 1259, 1260, 1261, 1262, + 1263, 1235, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, + 1272, 1273, 1274, 1275, 1276, 1277, 1280, 1282, 1284, 1285, + 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, + 1296, 1297, 1298, 1299, 1301, 1302, 1303, 1305, 1306, 1307, + 1308, 1309, 1311, 1312, 1314, 1316, 1318, 1319, 1320, 1321, + 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, - 1337, 1338, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, - 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, - 1358, 1359, 1360, 1361, 1362, 1333, 1364, 1365, 1366, 1367, - 1368, 1369, 1312, 1370, 1371, 1372, 1373, 1374, 1375, 1376, - 1377, 1378, 1379, 1380, 1381, 1382, 1340, 1384, 1385, 1386, - 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1386, 1394, 1397, - 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, - 1408, 1409, 1411, 1412, 1413, 1414, 1415, 1417, 1419, 1417, - 1414, 1420, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, - 1431, 1432, 1434, 1435, 1436, 1438, 1439, 1440, 1441, 1442, + 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1342, 1343, 1344, + 1345, 1346, 1347, 1348, 1349, 1351, 1352, 1353, 1355, 1356, + 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, + 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, + 1377, 1348, 1379, 1380, 1381, 1382, 1383, 1384, 1327, 1385, + 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, + 1396, 1397, 1355, 1399, 1400, 1401, 1402, 1403, 1404, 1405, + 1406, 1407, 1408, 1401, 1409, 1412, 1413, 1414, 1415, 1416, + 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1427, + 1428, 1429, 1430, 1431, 1433, 1435, 1433, 1430, 1436, 1439, - 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, - 1453, 1454, 1455, 1457, 1432, 1458, 1460, 1461, 1462, 1463, - 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1473, 1475, - 1477, 1478, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, - 1488, 1489, 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, - 1501, 1502, 1504, 1505, 1506, 1507, 1509, 1510, 1509, 1511, - 1512, 1509, 1513, 1514, 1509, 1515, 1516, 1517, 1518, 1519, - 1521, 1523, 1524, 1526, 1527, 1528, 1530, 1531, 1532, 1533, - 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, - 1545, 1546, 1547, 1548, 1537, 1550, 1551, 1552, 1553, 1524, + 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1450, + 1451, 1452, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, + 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, + 1473, 1448, 1474, 1476, 1477, 1478, 1479, 1480, 1481, 1482, + 1483, 1484, 1485, 1486, 1487, 1489, 1491, 1493, 1494, 1496, + 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1507, + 1508, 1509, 1510, 1511, 1512, 1514, 1515, 1518, 1519, 1521, + 1522, 1523, 1524, 1526, 1527, 1526, 1528, 1529, 1526, 1530, + 1531, 1526, 1532, 1533, 1534, 1535, 1536, 1538, 1540, 1541, + 1543, 1544, 1545, 1547, 1548, 1549, 1550, 1551, 1552, 1553, - 1554, 1555, 1556, 1557, 1558, 1558, 1559, 1560, 1561, 1562, - 1563, 1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1572, - 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, - 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1593, - 1594, 1595, 1596, 1597, 1598, 1599, 1601, 1602, 1603, 1604, - 1605, 1606, 1609, 1610, 1611, 1614, 1615, 1616, 1617, 1618, - 1619, 1620, 1621, 1622, 1559, 1623, 1624, 1625, 1627, 1628, - 1629, 1630, 1631, 1627, 1632, 1633, 1634, 1604, 1635, 1636, - 1638, 1639, 1640, 1642, 1643, 1645, 1646, 1647, 1649, 1650, - 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, + 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1562, 1563, 1564, + 1565, 1554, 1567, 1568, 1569, 1570, 1541, 1571, 1572, 1573, + 1574, 1575, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, + 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, + 1593, 1594, 1595, 1596, 1597, 1598, 1599, 1600, 1601, 1602, + 1603, 1604, 1605, 1606, 1607, 1608, 1610, 1611, 1612, 1613, + 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1626, + 1627, 1628, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, + 1639, 1576, 1640, 1641, 1642, 1644, 1645, 1646, 1647, 1648, + 1644, 1649, 1650, 1651, 1621, 1652, 1653, 1655, 1656, 1657, - 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, - 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1681, 1683, - 1684, 1685, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, - 1695, 1696, 1697, 1698, 1700, 1701, 1702, 1703, 1704, 1705, - 1707, 1708, 1709, 1711, 1712, 1713, 1714, 1715, 1716, 1717, - 1718, 1719, 1720, 1722, 1723, 1724, 1725, 1726, 1727, 1728, - 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, - 1739, 1740, 1741, 1743, 1745, 1746, 1747, 1741, 1749, 1751, - 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, - 1762, 1763, 1764, 1765, 1766, 1767, 1769, 1770, 1771, 1772, + 1659, 1660, 1662, 1663, 1664, 1666, 1667, 1668, 1669, 1670, + 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, + 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, + 1692, 1693, 1694, 1695, 1696, 1698, 1700, 1701, 1702, 1704, + 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713, 1714, + 1715, 1717, 1718, 1719, 1720, 1721, 1722, 1724, 1725, 1726, + 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, + 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, + 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, + 1760, 1762, 1763, 1764, 1758, 1766, 1768, 1769, 1770, 1771, - 1773, 1774, 1775, 1776, 1777, 1779, 1780, 1781, 1782, 1784, - 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, - 1796, 1797, 1798, 1799, 1800, 1802, 1803, 1804, 1805, 1807, - 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1816, 1817, 1818, - 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, - 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, - 1842, 1843, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, - 1853, 1854, 1855, 1856, 1857, 1858, 1856, 1859, 1860, 1861, - 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1871, 1872, - 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, + 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, + 1782, 1783, 1784, 1786, 1787, 1788, 1789, 1790, 1791, 1792, + 1793, 1794, 1796, 1797, 1798, 1799, 1801, 1802, 1803, 1804, + 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1813, 1814, 1815, + 1816, 1817, 1819, 1820, 1821, 1822, 1824, 1825, 1826, 1827, + 1828, 1829, 1830, 1831, 1833, 1834, 1835, 1836, 1837, 1838, + 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1848, 1849, 1850, + 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1859, 1860, 1862, + 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, + 1873, 1874, 1875, 1873, 1876, 1877, 1878, 1879, 1880, 1881, - 1884, 1886, 1888, 1890, 1892, 1893, 1894, 1895, 1896, 1897, - 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, - 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, - 1919, 1921, 1922, 1923, 1925, 1926, 1927, 1928, 1929, 1931, - 1932, 1934, 1936, 1938, 1940, 1941, 1942, 1943, 1944, 1945, - 1946, 1947, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1957, - 1958, 1959, 1960, 1961, 1963, 1964, 1965, 1966, 1967, 1968, - 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1978, 1979, - 1980, 1981, 1982, 1983, 1985, 1986, 1987, 1988, 1989, 1990, - 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, + 1882, 1883, 1884, 1885, 1886, 1888, 1889, 1890, 1891, 1892, + 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1901, 1903, 1905, + 1907, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, + 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1926, 1927, 1928, + 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1938, 1939, + 1940, 1942, 1943, 1944, 1945, 1946, 1948, 1949, 1951, 1953, + 1955, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1966, + 1967, 1968, 1969, 1970, 1971, 1972, 1974, 1975, 1976, 1977, + 1978, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, + 1989, 1990, 1991, 1992, 1993, 1995, 1996, 1997, 1998, 1999, - 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, - 2011, 2012, 2014, 2015, 2017, 2018, 2019, 2020, 2022, 2023, - 2024, 2025, 2031, 2035, 2036, 2037, 2038, 2039, 2040, 2041, - 2042, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, - 2054, 2055, 2056, 2057, 2058, 2060, 2062, 2064, 2065, 2066, - 2067, 2068, 2069, 2071, 2072, 2073, 2074, 2075, 2074, 2076, - 2077, 2079, 2080, 2083, 2084, 2085, 2086, 2087, 2088, 2089, - 2090, 2091, 2092, 2093, 2094, 2095, 2096, 2097, 2099, 2100, - 2101, 2102, 2105, 2106, 2107, 2109, 2110, 2112, 2114, 2115, - 2116, 2117, 2118, 2119, 2120, 2121, 2123, 2128, 2128, 2128, + 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, + 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, + 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2031, + 2032, 2034, 2035, 2036, 2037, 2039, 2040, 2041, 2042, 2048, + 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2061, 2062, + 2063, 2064, 2065, 2066, 2067, 2068, 2070, 2071, 2072, 2073, + 2074, 2075, 2077, 2079, 2081, 2082, 2083, 2084, 2085, 2086, + 2088, 2089, 2090, 2091, 2092, 2091, 2093, 2094, 2096, 2097, + 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, + 2110, 2111, 2112, 2113, 2114, 2116, 2117, 2118, 2119, 2122, - 2129, 2129, 2129, 2130, 2131, 2130, 2132, 2132, 2132, 2133, - 2133, 2133, 2134, 725, 2134, 2135, 2135, 2135, 724, 723, - 722, 717, 716, 715, 714, 713, 712, 711, 710, 708, - 707, 706, 704, 703, 702, 701, 700, 699, 698, 697, - 696, 695, 694, 693, 692, 690, 689, 688, 687, 686, - 685, 684, 683, 682, 680, 679, 677, 676, 675, 674, - 673, 672, 671, 670, 668, 667, 666, 665, 663, 662, - 660, 659, 658, 657, 656, 655, 654, 653, 652, 651, - 650, 649, 648, 647, 646, 645, 643, 642, 641, 640, - 639, 638, 636, 635, 634, 633, 632, 631, 630, 629, + 2123, 2124, 2126, 2127, 2129, 2131, 2132, 2133, 2134, 2135, + 2136, 2137, 2138, 2140, 2145, 2145, 2145, 2146, 2146, 2146, + 2147, 2148, 2147, 2149, 2149, 2149, 2150, 2150, 2150, 2151, + 723, 2151, 2152, 2152, 2152, 722, 721, 720, 719, 718, + 717, 716, 714, 713, 712, 710, 709, 708, 707, 706, + 705, 704, 703, 702, 701, 700, 699, 698, 696, 695, + 694, 693, 692, 691, 690, 689, 688, 686, 685, 683, + 682, 681, 680, 679, 678, 677, 676, 675, 673, 672, + 671, 670, 668, 667, 665, 664, 663, 662, 661, 660, + 659, 658, 657, 656, 655, 654, 653, 652, 651, 650, - 627, 626, 625, 624, 623, 622, 621, 620, 619, 618, - 617, 616, 615, 614, 613, 611, 610, 609, 608, 607, - 606, 605, 604, 603, 602, 601, 600, 599, 598, 597, - 596, 595, 586, 585, 584, 583, 581, 579, 577, 575, - 574, 573, 572, 571, 570, 569, 568, 567, 566, 565, - 564, 562, 561, 560, 559, 558, 557, 555, 554, 553, - 552, 551, 550, 549, 548, 547, 546, 545, 544, 542, - 540, 539, 538, 537, 536, 535, 534, 533, 532, 531, - 530, 529, 528, 527, 526, 525, 523, 522, 521, 520, - 519, 518, 517, 516, 514, 513, 512, 511, 510, 509, + 648, 647, 646, 645, 644, 643, 641, 640, 639, 638, + 637, 636, 635, 634, 632, 631, 630, 629, 628, 627, + 626, 625, 624, 623, 622, 621, 620, 619, 618, 616, + 615, 614, 613, 612, 611, 610, 609, 608, 607, 606, + 605, 604, 603, 602, 601, 600, 596, 590, 589, 588, + 587, 585, 583, 581, 579, 578, 577, 576, 575, 574, + 573, 572, 571, 570, 569, 568, 566, 565, 564, 563, + 562, 561, 559, 558, 557, 556, 555, 554, 553, 552, + 551, 550, 549, 548, 546, 544, 543, 542, 541, 540, + 539, 538, 537, 536, 535, 534, 533, 532, 531, 530, - 508, 507, 506, 505, 504, 503, 502, 501, 500, 499, - 498, 497, 495, 494, 493, 492, 490, 489, 488, 487, - 486, 485, 484, 483, 481, 480, 478, 477, 476, 474, - 472, 471, 470, 469, 468, 467, 465, 464, 463, 462, - 461, 460, 459, 454, 452, 451, 449, 446, 444, 443, - 442, 441, 440, 439, 438, 437, 436, 435, 434, 433, - 432, 431, 430, 429, 428, 426, 425, 424, 423, 422, - 421, 420, 418, 417, 416, 415, 414, 413, 412, 410, - 409, 407, 406, 405, 404, 403, 402, 401, 400, 399, - 398, 397, 396, 395, 391, 390, 389, 387, 386, 385, + 529, 528, 526, 525, 524, 523, 522, 521, 520, 519, + 517, 516, 515, 514, 513, 512, 511, 510, 509, 508, + 507, 506, 505, 504, 503, 502, 501, 500, 498, 497, + 496, 495, 493, 492, 491, 490, 489, 488, 487, 486, + 484, 483, 481, 480, 479, 477, 475, 474, 473, 472, + 471, 470, 468, 467, 466, 465, 464, 463, 462, 460, + 456, 454, 453, 451, 448, 446, 445, 444, 443, 442, + 441, 440, 439, 438, 437, 436, 435, 434, 433, 432, + 431, 430, 428, 427, 426, 425, 424, 423, 422, 420, + 419, 418, 417, 416, 415, 414, 412, 411, 409, 408, - 383, 382, 381, 380, 379, 378, 377, 376, 375, 374, - 373, 372, 371, 369, 368, 367, 366, 365, 364, 363, - 362, 361, 360, 359, 358, 357, 356, 355, 353, 352, - 351, 350, 348, 347, 346, 345, 344, 343, 342, 341, - 340, 339, 338, 337, 336, 335, 331, 329, 325, 323, - 321, 314, 313, 312, 311, 309, 308, 307, 306, 305, - 304, 303, 301, 300, 299, 298, 297, 296, 295, 294, - 293, 292, 291, 290, 289, 287, 286, 285, 284, 283, - 282, 281, 280, 279, 278, 277, 276, 275, 274, 272, - 271, 269, 268, 267, 266, 264, 263, 262, 261, 260, + 407, 406, 405, 404, 403, 402, 401, 400, 399, 398, + 397, 396, 392, 391, 390, 388, 387, 386, 384, 383, + 382, 381, 380, 379, 378, 377, 376, 375, 374, 373, + 372, 370, 369, 368, 367, 366, 365, 364, 363, 362, + 361, 360, 359, 358, 357, 356, 354, 353, 352, 351, + 349, 348, 347, 346, 345, 344, 343, 342, 341, 340, + 339, 338, 337, 336, 334, 331, 329, 325, 323, 321, + 314, 313, 312, 311, 309, 308, 307, 306, 305, 304, + 303, 301, 300, 299, 298, 297, 296, 295, 294, 293, + 292, 291, 290, 289, 287, 286, 285, 284, 283, 282, - 259, 257, 256, 255, 254, 253, 252, 251, 249, 248, - 246, 245, 244, 243, 242, 241, 240, 239, 238, 237, - 236, 235, 234, 233, 232, 231, 230, 229, 228, 227, - 226, 225, 224, 223, 222, 219, 218, 217, 216, 215, - 214, 213, 212, 210, 206, 204, 202, 200, 195, 192, - 184, 183, 182, 181, 179, 178, 176, 175, 174, 172, - 171, 170, 168, 166, 164, 162, 161, 159, 158, 157, - 155, 153, 152, 151, 150, 149, 148, 146, 145, 144, - 142, 141, 140, 138, 137, 135, 134, 130, 129, 128, - 127, 125, 124, 123, 121, 120, 119, 117, 113, 104, + 281, 280, 279, 278, 277, 275, 274, 272, 271, 269, + 268, 267, 266, 264, 263, 262, 261, 260, 259, 257, + 256, 255, 254, 253, 252, 251, 249, 248, 246, 245, + 244, 243, 242, 241, 240, 239, 238, 237, 236, 235, + 234, 233, 232, 231, 230, 229, 228, 227, 226, 225, + 224, 223, 222, 219, 218, 217, 216, 215, 214, 213, + 212, 206, 204, 202, 200, 195, 192, 184, 183, 182, + 181, 179, 178, 176, 175, 174, 172, 171, 170, 168, + 166, 164, 162, 161, 159, 158, 157, 155, 153, 152, + 151, 150, 149, 148, 146, 145, 144, 142, 141, 140, - 103, 97, 96, 77, 72, 66, 52, 49, 48, 43, - 41, 39, 38, 24, 14, 11, 2127, 2127, 2127, 2127, - 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, - 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, - 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, - 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, - 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, - 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, - 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127 + 138, 137, 135, 134, 130, 129, 128, 127, 125, 124, + 123, 121, 120, 119, 117, 113, 104, 103, 97, 96, + 77, 72, 66, 52, 49, 48, 43, 41, 39, 38, + 24, 14, 11, 2144, 2144, 2144, 2144, 2144, 2144, 2144, + 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, + 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, + 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, + 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, + 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, + 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, + + 2144, 2144, 2144, 2144, 2144, 2144, 2144 } ; static yy_state_type yy_last_accepting_state; @@ -2042,7 +2055,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[223] = +static const flex_int16_t yy_rule_linenum[225] = { 0, 148, 150, 152, 157, 158, 163, 164, 165, 177, 180, 185, 192, 201, 210, 219, 228, 237, 246, 255, 264, @@ -2052,23 +2065,23 @@ static const flex_int16_t yy_rule_linenum[223] = 558, 567, 576, 585, 594, 607, 616, 625, 634, 645, 656, 667, 678, 690, 701, 712, 723, 734, 743, 752, 761, 772, 781, 792, 803, 814, 825, 837, 849, 861, - 873, 885, 897, 908, 919, 928, 937, 946, 955, 964, - 975, 986, 997, 1008, 1019, 1030, 1041, 1053, 1063, 1074, + 873, 885, 897, 908, 919, 928, 937, 946, 957, 968, + 977, 986, 997, 1008, 1019, 1030, 1041, 1052, 1063, 1075, - 1083, 1092, 1107, 1123, 1132, 1141, 1150, 1159, 1168, 1177, - 1186, 1195, 1204, 1213, 1237, 1261, 1270, 1280, 1290, 1299, - 1309, 1320, 1329, 1338, 1347, 1356, 1365, 1376, 1387, 1398, - 1408, 1417, 1426, 1435, 1446, 1457, 1468, 1479, 1490, 1499, - 1508, 1517, 1526, 1535, 1544, 1553, 1562, 1571, 1581, 1593, - 1606, 1615, 1624, 1633, 1643, 1653, 1662, 1673, 1683, 1692, - 1702, 1712, 1721, 1730, 1739, 1748, 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, 2001, 2010, 2019, 2028, 2037, 2046, 2055, + 1085, 1096, 1105, 1114, 1129, 1145, 1154, 1163, 1172, 1181, + 1190, 1199, 1208, 1217, 1226, 1235, 1259, 1283, 1292, 1302, + 1312, 1321, 1331, 1342, 1351, 1360, 1369, 1378, 1387, 1398, + 1409, 1420, 1430, 1439, 1448, 1457, 1468, 1479, 1490, 1501, + 1512, 1521, 1530, 1539, 1548, 1557, 1566, 1575, 1584, 1593, + 1603, 1615, 1628, 1637, 1646, 1655, 1665, 1675, 1684, 1695, + 1705, 1714, 1724, 1734, 1743, 1752, 1761, 1770, 1780, 1789, + 1798, 1807, 1816, 1825, 1834, 1843, 1852, 1861, 1870, 1879, + 1888, 1897, 1906, 1915, 1924, 1933, 1942, 1951, 1960, 1969, + 1978, 1987, 1996, 2005, 2014, 2023, 2032, 2041, 2050, 2059, - 2064, 2073, 2082, 2091, 2192, 2208, 2257, 2265, 2280, 2281, - 2282, 2283, 2284, 2285, 2287, 2305, 2318, 2323, 2327, 2329, - 2331, 2333 + 2068, 2077, 2086, 2095, 2104, 2113, 2214, 2230, 2279, 2287, + 2302, 2303, 2304, 2305, 2306, 2307, 2309, 2327, 2340, 2345, + 2349, 2351, 2353, 2355 } ; /* The intent behind this definition is that it'll catch @@ -2122,7 +2135,7 @@ using namespace isc::dhcp; /* To avoid the call to exit... oops! */ #define YY_FATAL_ERROR(msg) isc::dhcp::Parser6Context::fatal(msg) -#line 2125 "dhcp6_lexer.cc" +#line 2138 "dhcp6_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 @@ -2148,8 +2161,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 2151 "dhcp6_lexer.cc" -#line 2152 "dhcp6_lexer.cc" +#line 2164 "dhcp6_lexer.cc" +#line 2165 "dhcp6_lexer.cc" #define INITIAL 0 #define COMMENT 1 @@ -2205,7 +2218,7 @@ FILE *yyget_out ( void ); void yyset_out ( FILE * _out_str ); - int yyget_leng ( void ); + yy_size_t yyget_leng ( void ); char *yyget_text ( void ); @@ -2292,7 +2305,7 @@ static int input ( void ); if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ { \ int c = '*'; \ - int n; \ + yy_size_t n; \ for ( n = 0; n < max_size && \ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ @@ -2479,7 +2492,7 @@ YY_DECL } -#line 2482 "dhcp6_lexer.cc" +#line 2495 "dhcp6_lexer.cc" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -2508,13 +2521,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 >= 2128 ) + if ( yy_current_state >= 2145 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } - while ( yy_current_state != 2127 ); + while ( yy_current_state != 2144 ); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); @@ -2533,13 +2546,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 < 223 ) + else if ( yy_act < 225 ) fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n", (long)yy_rule_linenum[yy_act], yytext ); - else if ( yy_act == 223 ) + else if ( yy_act == 225 ) fprintf( stderr, "--accepting default rule (\"%s\")\n", yytext ); - else if ( yy_act == 224 ) + else if ( yy_act == 226 ) fprintf( stderr, "--(end of buffer or a NUL)\n" ); else fprintf( stderr, "--EOF (start condition %d)\n", YY_START ); @@ -3628,6 +3641,34 @@ YY_RULE_SETUP case 88: YY_RULE_SETUP #line 946 "dhcp6_lexer.ll" +{ + switch(driver.ctx_) { + case isc::dhcp::Parser6Context::DHCP6: + case isc::dhcp::Parser6Context::SUBNET6: + case isc::dhcp::Parser6Context::SHARED_NETWORK: + return isc::dhcp::Dhcp6Parser::make_ALLOCATOR(driver.loc_); + default: + return isc::dhcp::Dhcp6Parser::make_STRING("allocator", driver.loc_); + } +} + YY_BREAK +case 89: +YY_RULE_SETUP +#line 957 "dhcp6_lexer.ll" +{ + switch(driver.ctx_) { + case isc::dhcp::Parser6Context::DHCP6: + case isc::dhcp::Parser6Context::SUBNET6: + case isc::dhcp::Parser6Context::SHARED_NETWORK: + return isc::dhcp::Dhcp6Parser::make_PD_ALLOCATOR(driver.loc_); + default: + return isc::dhcp::Dhcp6Parser::make_STRING("pd-allocator", driver.loc_); + } +} + YY_BREAK +case 90: +YY_RULE_SETUP +#line 968 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3637,9 +3678,9 @@ YY_RULE_SETUP } } YY_BREAK -case 89: +case 91: YY_RULE_SETUP -#line 955 "dhcp6_lexer.ll" +#line 977 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3649,34 +3690,6 @@ YY_RULE_SETUP } } YY_BREAK -case 90: -YY_RULE_SETUP -#line 964 "dhcp6_lexer.ll" -{ - switch(driver.ctx_) { - case isc::dhcp::Parser6Context::DHCP6: - case isc::dhcp::Parser6Context::SUBNET6: - case isc::dhcp::Parser6Context::SHARED_NETWORK: - return isc::dhcp::Dhcp6Parser::make_DDNS_SEND_UPDATES(driver.loc_); - default: - return isc::dhcp::Dhcp6Parser::make_STRING("ddns-send-updates", driver.loc_); - } -} - YY_BREAK -case 91: -YY_RULE_SETUP -#line 975 "dhcp6_lexer.ll" -{ - switch(driver.ctx_) { - case isc::dhcp::Parser6Context::DHCP6: - case isc::dhcp::Parser6Context::SUBNET6: - case isc::dhcp::Parser6Context::SHARED_NETWORK: - return isc::dhcp::Dhcp6Parser::make_DDNS_OVERRIDE_NO_UPDATE(driver.loc_); - default: - return isc::dhcp::Dhcp6Parser::make_STRING("ddns-override-no-update", driver.loc_); - } -} - YY_BREAK case 92: YY_RULE_SETUP #line 986 "dhcp6_lexer.ll" @@ -3685,9 +3698,9 @@ YY_RULE_SETUP case isc::dhcp::Parser6Context::DHCP6: case isc::dhcp::Parser6Context::SUBNET6: case isc::dhcp::Parser6Context::SHARED_NETWORK: - return isc::dhcp::Dhcp6Parser::make_DDNS_OVERRIDE_CLIENT_UPDATE(driver.loc_); + return isc::dhcp::Dhcp6Parser::make_DDNS_SEND_UPDATES(driver.loc_); default: - return isc::dhcp::Dhcp6Parser::make_STRING("ddns-override-client-update", driver.loc_); + return isc::dhcp::Dhcp6Parser::make_STRING("ddns-send-updates", driver.loc_); } } YY_BREAK @@ -3699,9 +3712,9 @@ YY_RULE_SETUP case isc::dhcp::Parser6Context::DHCP6: case isc::dhcp::Parser6Context::SUBNET6: case isc::dhcp::Parser6Context::SHARED_NETWORK: - return isc::dhcp::Dhcp6Parser::make_DDNS_REPLACE_CLIENT_NAME(driver.loc_); + return isc::dhcp::Dhcp6Parser::make_DDNS_OVERRIDE_NO_UPDATE(driver.loc_); default: - return isc::dhcp::Dhcp6Parser::make_STRING("ddns-replace-client-name", driver.loc_); + return isc::dhcp::Dhcp6Parser::make_STRING("ddns-override-no-update", driver.loc_); } } YY_BREAK @@ -3713,9 +3726,9 @@ YY_RULE_SETUP case isc::dhcp::Parser6Context::DHCP6: case isc::dhcp::Parser6Context::SUBNET6: case isc::dhcp::Parser6Context::SHARED_NETWORK: - return isc::dhcp::Dhcp6Parser::make_DDNS_GENERATED_PREFIX(driver.loc_); + return isc::dhcp::Dhcp6Parser::make_DDNS_OVERRIDE_CLIENT_UPDATE(driver.loc_); default: - return isc::dhcp::Dhcp6Parser::make_STRING("ddns-generated-prefix", driver.loc_); + return isc::dhcp::Dhcp6Parser::make_STRING("ddns-override-client-update", driver.loc_); } } YY_BREAK @@ -3727,9 +3740,9 @@ YY_RULE_SETUP case isc::dhcp::Parser6Context::DHCP6: case isc::dhcp::Parser6Context::SUBNET6: case isc::dhcp::Parser6Context::SHARED_NETWORK: - return isc::dhcp::Dhcp6Parser::make_DDNS_QUALIFYING_SUFFIX(driver.loc_); + return isc::dhcp::Dhcp6Parser::make_DDNS_REPLACE_CLIENT_NAME(driver.loc_); default: - return isc::dhcp::Dhcp6Parser::make_STRING("ddns-qualifying-suffix", driver.loc_); + return isc::dhcp::Dhcp6Parser::make_STRING("ddns-replace-client-name", driver.loc_); } } YY_BREAK @@ -3741,9 +3754,9 @@ YY_RULE_SETUP case isc::dhcp::Parser6Context::DHCP6: case isc::dhcp::Parser6Context::SUBNET6: case isc::dhcp::Parser6Context::SHARED_NETWORK: - return isc::dhcp::Dhcp6Parser::make_DDNS_UPDATE_ON_RENEW(driver.loc_); + return isc::dhcp::Dhcp6Parser::make_DDNS_GENERATED_PREFIX(driver.loc_); default: - return isc::dhcp::Dhcp6Parser::make_STRING("ddns-update-on-renew", driver.loc_); + return isc::dhcp::Dhcp6Parser::make_STRING("ddns-generated-prefix", driver.loc_); } } YY_BREAK @@ -3755,28 +3768,56 @@ YY_RULE_SETUP case isc::dhcp::Parser6Context::DHCP6: case isc::dhcp::Parser6Context::SUBNET6: case isc::dhcp::Parser6Context::SHARED_NETWORK: - return isc::dhcp::Dhcp6Parser::make_DDNS_USE_CONFLICT_RESOLUTION(driver.loc_); + return isc::dhcp::Dhcp6Parser::make_DDNS_QUALIFYING_SUFFIX(driver.loc_); default: - return isc::dhcp::Dhcp6Parser::make_STRING("ddns-use-conflict-resolution", driver.loc_); + return isc::dhcp::Dhcp6Parser::make_STRING("ddns-qualifying-suffix", driver.loc_); } } YY_BREAK case 98: YY_RULE_SETUP -#line 1053 "dhcp6_lexer.ll" +#line 1052 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: + case isc::dhcp::Parser6Context::SUBNET6: case isc::dhcp::Parser6Context::SHARED_NETWORK: - return isc::dhcp::Dhcp6Parser::make_SUBNET6(driver.loc_); + return isc::dhcp::Dhcp6Parser::make_DDNS_UPDATE_ON_RENEW(driver.loc_); default: - return isc::dhcp::Dhcp6Parser::make_STRING("subnet6", driver.loc_); + return isc::dhcp::Dhcp6Parser::make_STRING("ddns-update-on-renew", driver.loc_); } } YY_BREAK case 99: YY_RULE_SETUP #line 1063 "dhcp6_lexer.ll" +{ + switch(driver.ctx_) { + case isc::dhcp::Parser6Context::DHCP6: + case isc::dhcp::Parser6Context::SUBNET6: + case isc::dhcp::Parser6Context::SHARED_NETWORK: + return isc::dhcp::Dhcp6Parser::make_DDNS_USE_CONFLICT_RESOLUTION(driver.loc_); + default: + return isc::dhcp::Dhcp6Parser::make_STRING("ddns-use-conflict-resolution", driver.loc_); + } +} + YY_BREAK +case 100: +YY_RULE_SETUP +#line 1075 "dhcp6_lexer.ll" +{ + switch(driver.ctx_) { + case isc::dhcp::Parser6Context::DHCP6: + case isc::dhcp::Parser6Context::SHARED_NETWORK: + return isc::dhcp::Dhcp6Parser::make_SUBNET6(driver.loc_); + default: + return isc::dhcp::Dhcp6Parser::make_STRING("subnet6", driver.loc_); + } +} + YY_BREAK +case 101: +YY_RULE_SETUP +#line 1085 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3788,9 +3829,9 @@ YY_RULE_SETUP } } YY_BREAK -case 100: +case 102: YY_RULE_SETUP -#line 1074 "dhcp6_lexer.ll" +#line 1096 "dhcp6_lexer.ll" { switch (driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3800,9 +3841,9 @@ YY_RULE_SETUP } } YY_BREAK -case 101: +case 103: YY_RULE_SETUP -#line 1083 "dhcp6_lexer.ll" +#line 1105 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3812,9 +3853,9 @@ YY_RULE_SETUP } } YY_BREAK -case 102: +case 104: YY_RULE_SETUP -#line 1092 "dhcp6_lexer.ll" +#line 1114 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3830,9 +3871,9 @@ YY_RULE_SETUP } } YY_BREAK -case 103: +case 105: YY_RULE_SETUP -#line 1107 "dhcp6_lexer.ll" +#line 1129 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -3849,9 +3890,9 @@ YY_RULE_SETUP } } YY_BREAK -case 104: +case 106: YY_RULE_SETUP -#line 1123 "dhcp6_lexer.ll" +#line 1145 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DATA: @@ -3861,9 +3902,9 @@ YY_RULE_SETUP } } YY_BREAK -case 105: +case 107: YY_RULE_SETUP -#line 1132 "dhcp6_lexer.ll" +#line 1154 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DATA: @@ -3873,9 +3914,9 @@ YY_RULE_SETUP } } YY_BREAK -case 106: +case 108: YY_RULE_SETUP -#line 1141 "dhcp6_lexer.ll" +#line 1163 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -3885,9 +3926,9 @@ YY_RULE_SETUP } } YY_BREAK -case 107: +case 109: YY_RULE_SETUP -#line 1150 "dhcp6_lexer.ll" +#line 1172 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -3897,9 +3938,9 @@ YY_RULE_SETUP } } YY_BREAK -case 108: +case 110: YY_RULE_SETUP -#line 1159 "dhcp6_lexer.ll" +#line 1181 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::PD_POOLS: @@ -3909,9 +3950,9 @@ YY_RULE_SETUP } } YY_BREAK -case 109: +case 111: YY_RULE_SETUP -#line 1168 "dhcp6_lexer.ll" +#line 1190 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::PD_POOLS: @@ -3921,9 +3962,9 @@ YY_RULE_SETUP } } YY_BREAK -case 110: +case 112: YY_RULE_SETUP -#line 1177 "dhcp6_lexer.ll" +#line 1199 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::PD_POOLS: @@ -3933,9 +3974,9 @@ YY_RULE_SETUP } } YY_BREAK -case 111: +case 113: YY_RULE_SETUP -#line 1186 "dhcp6_lexer.ll" +#line 1208 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::PD_POOLS: @@ -3945,9 +3986,9 @@ YY_RULE_SETUP } } YY_BREAK -case 112: +case 114: YY_RULE_SETUP -#line 1195 "dhcp6_lexer.ll" +#line 1217 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::PD_POOLS: @@ -3957,9 +3998,9 @@ YY_RULE_SETUP } } YY_BREAK -case 113: +case 115: YY_RULE_SETUP -#line 1204 "dhcp6_lexer.ll" +#line 1226 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::POOLS: @@ -3969,9 +4010,9 @@ YY_RULE_SETUP } } YY_BREAK -case 114: +case 116: YY_RULE_SETUP -#line 1213 "dhcp6_lexer.ll" +#line 1235 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3996,9 +4037,9 @@ YY_RULE_SETUP } } YY_BREAK -case 115: +case 117: YY_RULE_SETUP -#line 1237 "dhcp6_lexer.ll" +#line 1259 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4023,9 +4064,9 @@ YY_RULE_SETUP } } YY_BREAK -case 116: +case 118: YY_RULE_SETUP -#line 1261 "dhcp6_lexer.ll" +#line 1283 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -4035,9 +4076,9 @@ YY_RULE_SETUP } } YY_BREAK -case 117: +case 119: YY_RULE_SETUP -#line 1270 "dhcp6_lexer.ll" +#line 1292 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -4048,9 +4089,9 @@ YY_RULE_SETUP } } YY_BREAK -case 118: +case 120: YY_RULE_SETUP -#line 1280 "dhcp6_lexer.ll" +#line 1302 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -4061,9 +4102,9 @@ YY_RULE_SETUP } } YY_BREAK -case 119: +case 121: YY_RULE_SETUP -#line 1290 "dhcp6_lexer.ll" +#line 1312 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -4073,9 +4114,9 @@ YY_RULE_SETUP } } YY_BREAK -case 120: +case 122: YY_RULE_SETUP -#line 1299 "dhcp6_lexer.ll" +#line 1321 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -4086,9 +4127,9 @@ YY_RULE_SETUP } } YY_BREAK -case 121: +case 123: YY_RULE_SETUP -#line 1309 "dhcp6_lexer.ll" +#line 1331 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4100,9 +4141,9 @@ YY_RULE_SETUP } } YY_BREAK -case 122: +case 124: YY_RULE_SETUP -#line 1320 "dhcp6_lexer.ll" +#line 1342 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RESERVATION_MODE: @@ -4112,9 +4153,9 @@ YY_RULE_SETUP } } YY_BREAK -case 123: +case 125: YY_RULE_SETUP -#line 1329 "dhcp6_lexer.ll" +#line 1351 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RESERVATION_MODE: @@ -4124,9 +4165,9 @@ YY_RULE_SETUP } } YY_BREAK -case 124: +case 126: YY_RULE_SETUP -#line 1338 "dhcp6_lexer.ll" +#line 1360 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RESERVATION_MODE: @@ -4136,9 +4177,9 @@ YY_RULE_SETUP } } YY_BREAK -case 125: +case 127: YY_RULE_SETUP -#line 1347 "dhcp6_lexer.ll" +#line 1369 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RESERVATION_MODE: @@ -4148,9 +4189,9 @@ YY_RULE_SETUP } } YY_BREAK -case 126: +case 128: YY_RULE_SETUP -#line 1356 "dhcp6_lexer.ll" +#line 1378 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RESERVATION_MODE: @@ -4160,34 +4201,6 @@ YY_RULE_SETUP } } YY_BREAK -case 127: -YY_RULE_SETUP -#line 1365 "dhcp6_lexer.ll" -{ - switch(driver.ctx_) { - case isc::dhcp::Parser6Context::DHCP6: - case isc::dhcp::Parser6Context::SUBNET6: - case isc::dhcp::Parser6Context::SHARED_NETWORK: - return isc::dhcp::Dhcp6Parser::make_RESERVATIONS_GLOBAL(driver.loc_); - default: - return isc::dhcp::Dhcp6Parser::make_STRING("reservations-global", driver.loc_); - } -} - YY_BREAK -case 128: -YY_RULE_SETUP -#line 1376 "dhcp6_lexer.ll" -{ - switch(driver.ctx_) { - case isc::dhcp::Parser6Context::DHCP6: - case isc::dhcp::Parser6Context::SUBNET6: - case isc::dhcp::Parser6Context::SHARED_NETWORK: - return isc::dhcp::Dhcp6Parser::make_RESERVATIONS_IN_SUBNET(driver.loc_); - default: - return isc::dhcp::Dhcp6Parser::make_STRING("reservations-in-subnet", driver.loc_); - } -} - YY_BREAK case 129: YY_RULE_SETUP #line 1387 "dhcp6_lexer.ll" @@ -4196,15 +4209,43 @@ YY_RULE_SETUP case isc::dhcp::Parser6Context::DHCP6: case isc::dhcp::Parser6Context::SUBNET6: case isc::dhcp::Parser6Context::SHARED_NETWORK: - return isc::dhcp::Dhcp6Parser::make_RESERVATIONS_OUT_OF_POOL(driver.loc_); + return isc::dhcp::Dhcp6Parser::make_RESERVATIONS_GLOBAL(driver.loc_); default: - return isc::dhcp::Dhcp6Parser::make_STRING("reservations-out-of-pool", driver.loc_); + return isc::dhcp::Dhcp6Parser::make_STRING("reservations-global", driver.loc_); } } YY_BREAK case 130: YY_RULE_SETUP #line 1398 "dhcp6_lexer.ll" +{ + switch(driver.ctx_) { + case isc::dhcp::Parser6Context::DHCP6: + case isc::dhcp::Parser6Context::SUBNET6: + case isc::dhcp::Parser6Context::SHARED_NETWORK: + return isc::dhcp::Dhcp6Parser::make_RESERVATIONS_IN_SUBNET(driver.loc_); + default: + return isc::dhcp::Dhcp6Parser::make_STRING("reservations-in-subnet", driver.loc_); + } +} + YY_BREAK +case 131: +YY_RULE_SETUP +#line 1409 "dhcp6_lexer.ll" +{ + switch(driver.ctx_) { + case isc::dhcp::Parser6Context::DHCP6: + case isc::dhcp::Parser6Context::SUBNET6: + case isc::dhcp::Parser6Context::SHARED_NETWORK: + return isc::dhcp::Dhcp6Parser::make_RESERVATIONS_OUT_OF_POOL(driver.loc_); + default: + return isc::dhcp::Dhcp6Parser::make_STRING("reservations-out-of-pool", driver.loc_); + } +} + YY_BREAK +case 132: +YY_RULE_SETUP +#line 1420 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DEF: @@ -4215,9 +4256,9 @@ YY_RULE_SETUP } } YY_BREAK -case 131: +case 133: YY_RULE_SETUP -#line 1408 "dhcp6_lexer.ll" +#line 1430 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4227,9 +4268,9 @@ YY_RULE_SETUP } } YY_BREAK -case 132: +case 134: YY_RULE_SETUP -#line 1417 "dhcp6_lexer.ll" +#line 1439 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4239,9 +4280,9 @@ YY_RULE_SETUP } } YY_BREAK -case 133: +case 135: YY_RULE_SETUP -#line 1426 "dhcp6_lexer.ll" +#line 1448 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4251,34 +4292,6 @@ YY_RULE_SETUP } } YY_BREAK -case 134: -YY_RULE_SETUP -#line 1435 "dhcp6_lexer.ll" -{ - switch(driver.ctx_) { - case isc::dhcp::Parser6Context::DHCP6: - case isc::dhcp::Parser6Context::SUBNET6: - case isc::dhcp::Parser6Context::SHARED_NETWORK: - return isc::dhcp::Dhcp6Parser::make_CALCULATE_TEE_TIMES(driver.loc_); - default: - return isc::dhcp::Dhcp6Parser::make_STRING("calculate-tee-times", driver.loc_); - } -} - YY_BREAK -case 135: -YY_RULE_SETUP -#line 1446 "dhcp6_lexer.ll" -{ - switch(driver.ctx_) { - case isc::dhcp::Parser6Context::DHCP6: - case isc::dhcp::Parser6Context::SUBNET6: - case isc::dhcp::Parser6Context::SHARED_NETWORK: - return isc::dhcp::Dhcp6Parser::make_T1_PERCENT(driver.loc_); - default: - return isc::dhcp::Dhcp6Parser::make_STRING("t1-percent", driver.loc_); - } -} - YY_BREAK case 136: YY_RULE_SETUP #line 1457 "dhcp6_lexer.ll" @@ -4287,9 +4300,9 @@ YY_RULE_SETUP case isc::dhcp::Parser6Context::DHCP6: case isc::dhcp::Parser6Context::SUBNET6: case isc::dhcp::Parser6Context::SHARED_NETWORK: - return isc::dhcp::Dhcp6Parser::make_T2_PERCENT(driver.loc_); + return isc::dhcp::Dhcp6Parser::make_CALCULATE_TEE_TIMES(driver.loc_); default: - return isc::dhcp::Dhcp6Parser::make_STRING("t2-percent", driver.loc_); + return isc::dhcp::Dhcp6Parser::make_STRING("calculate-tee-times", driver.loc_); } } YY_BREAK @@ -4301,9 +4314,9 @@ YY_RULE_SETUP case isc::dhcp::Parser6Context::DHCP6: case isc::dhcp::Parser6Context::SUBNET6: case isc::dhcp::Parser6Context::SHARED_NETWORK: - return isc::dhcp::Dhcp6Parser::make_CACHE_THRESHOLD(driver.loc_); + return isc::dhcp::Dhcp6Parser::make_T1_PERCENT(driver.loc_); default: - return isc::dhcp::Dhcp6Parser::make_STRING("cache-threshold", driver.loc_); + return isc::dhcp::Dhcp6Parser::make_STRING("t1-percent", driver.loc_); } } YY_BREAK @@ -4315,15 +4328,43 @@ YY_RULE_SETUP case isc::dhcp::Parser6Context::DHCP6: case isc::dhcp::Parser6Context::SUBNET6: case isc::dhcp::Parser6Context::SHARED_NETWORK: - return isc::dhcp::Dhcp6Parser::make_CACHE_MAX_AGE(driver.loc_); + return isc::dhcp::Dhcp6Parser::make_T2_PERCENT(driver.loc_); default: - return isc::dhcp::Dhcp6Parser::make_STRING("cache-max-age", driver.loc_); + return isc::dhcp::Dhcp6Parser::make_STRING("t2-percent", driver.loc_); } } YY_BREAK case 139: YY_RULE_SETUP #line 1490 "dhcp6_lexer.ll" +{ + switch(driver.ctx_) { + case isc::dhcp::Parser6Context::DHCP6: + case isc::dhcp::Parser6Context::SUBNET6: + case isc::dhcp::Parser6Context::SHARED_NETWORK: + return isc::dhcp::Dhcp6Parser::make_CACHE_THRESHOLD(driver.loc_); + default: + return isc::dhcp::Dhcp6Parser::make_STRING("cache-threshold", driver.loc_); + } +} + YY_BREAK +case 140: +YY_RULE_SETUP +#line 1501 "dhcp6_lexer.ll" +{ + switch(driver.ctx_) { + case isc::dhcp::Parser6Context::DHCP6: + case isc::dhcp::Parser6Context::SUBNET6: + case isc::dhcp::Parser6Context::SHARED_NETWORK: + return isc::dhcp::Dhcp6Parser::make_CACHE_MAX_AGE(driver.loc_); + default: + return isc::dhcp::Dhcp6Parser::make_STRING("cache-max-age", driver.loc_); + } +} + YY_BREAK +case 141: +YY_RULE_SETUP +#line 1512 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4333,9 +4374,9 @@ YY_RULE_SETUP } } YY_BREAK -case 140: +case 142: YY_RULE_SETUP -#line 1499 "dhcp6_lexer.ll" +#line 1521 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LOGGERS: @@ -4345,9 +4386,9 @@ YY_RULE_SETUP } } YY_BREAK -case 141: +case 143: YY_RULE_SETUP -#line 1508 "dhcp6_lexer.ll" +#line 1530 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OUTPUT_OPTIONS: @@ -4357,9 +4398,9 @@ YY_RULE_SETUP } } YY_BREAK -case 142: +case 144: YY_RULE_SETUP -#line 1517 "dhcp6_lexer.ll" +#line 1539 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OUTPUT_OPTIONS: @@ -4369,9 +4410,9 @@ YY_RULE_SETUP } } YY_BREAK -case 143: +case 145: YY_RULE_SETUP -#line 1526 "dhcp6_lexer.ll" +#line 1548 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OUTPUT_OPTIONS: @@ -4381,9 +4422,9 @@ YY_RULE_SETUP } } YY_BREAK -case 144: +case 146: YY_RULE_SETUP -#line 1535 "dhcp6_lexer.ll" +#line 1557 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OUTPUT_OPTIONS: @@ -4393,9 +4434,9 @@ YY_RULE_SETUP } } YY_BREAK -case 145: +case 147: YY_RULE_SETUP -#line 1544 "dhcp6_lexer.ll" +#line 1566 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OUTPUT_OPTIONS: @@ -4405,9 +4446,9 @@ YY_RULE_SETUP } } YY_BREAK -case 146: +case 148: YY_RULE_SETUP -#line 1553 "dhcp6_lexer.ll" +#line 1575 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LOGGERS: @@ -4417,9 +4458,9 @@ YY_RULE_SETUP } } YY_BREAK -case 147: +case 149: YY_RULE_SETUP -#line 1562 "dhcp6_lexer.ll" +#line 1584 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LOGGERS: @@ -4429,9 +4470,9 @@ YY_RULE_SETUP } } YY_BREAK -case 148: +case 150: YY_RULE_SETUP -#line 1571 "dhcp6_lexer.ll" +#line 1593 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4442,9 +4483,9 @@ YY_RULE_SETUP } } YY_BREAK -case 149: +case 151: YY_RULE_SETUP -#line 1581 "dhcp6_lexer.ll" +#line 1603 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -4457,9 +4498,9 @@ YY_RULE_SETUP } } YY_BREAK -case 150: +case 152: YY_RULE_SETUP -#line 1593 "dhcp6_lexer.ll" +#line 1615 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -4473,9 +4514,9 @@ YY_RULE_SETUP } } YY_BREAK -case 151: +case 153: YY_RULE_SETUP -#line 1606 "dhcp6_lexer.ll" +#line 1628 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::CLIENT_CLASSES: @@ -4485,9 +4526,9 @@ YY_RULE_SETUP } } YY_BREAK -case 152: +case 154: YY_RULE_SETUP -#line 1615 "dhcp6_lexer.ll" +#line 1637 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::CLIENT_CLASSES: @@ -4497,9 +4538,9 @@ YY_RULE_SETUP } } YY_BREAK -case 153: +case 155: YY_RULE_SETUP -#line 1624 "dhcp6_lexer.ll" +#line 1646 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::CLIENT_CLASSES: @@ -4509,9 +4550,9 @@ YY_RULE_SETUP } } YY_BREAK -case 154: +case 156: YY_RULE_SETUP -#line 1633 "dhcp6_lexer.ll" +#line 1655 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4522,9 +4563,9 @@ YY_RULE_SETUP } } YY_BREAK -case 155: +case 157: YY_RULE_SETUP -#line 1643 "dhcp6_lexer.ll" +#line 1665 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RESERVATIONS: @@ -4535,9 +4576,9 @@ YY_RULE_SETUP } } YY_BREAK -case 156: +case 158: YY_RULE_SETUP -#line 1653 "dhcp6_lexer.ll" +#line 1675 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RESERVATIONS: @@ -4547,9 +4588,9 @@ YY_RULE_SETUP } } YY_BREAK -case 157: +case 159: YY_RULE_SETUP -#line 1662 "dhcp6_lexer.ll" +#line 1684 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::MAC_SOURCES: @@ -4561,9 +4602,9 @@ YY_RULE_SETUP } } YY_BREAK -case 158: +case 160: YY_RULE_SETUP -#line 1673 "dhcp6_lexer.ll" +#line 1695 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::HOST_RESERVATION_IDENTIFIERS: @@ -4574,9 +4615,9 @@ YY_RULE_SETUP } } YY_BREAK -case 159: +case 161: YY_RULE_SETUP -#line 1683 "dhcp6_lexer.ll" +#line 1705 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RESERVATIONS: @@ -4586,9 +4627,9 @@ YY_RULE_SETUP } } YY_BREAK -case 160: +case 162: YY_RULE_SETUP -#line 1692 "dhcp6_lexer.ll" +#line 1714 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::HOST_RESERVATION_IDENTIFIERS: @@ -4599,9 +4640,9 @@ YY_RULE_SETUP } } YY_BREAK -case 161: +case 163: YY_RULE_SETUP -#line 1702 "dhcp6_lexer.ll" +#line 1724 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DEF: @@ -4612,9 +4653,9 @@ YY_RULE_SETUP } } YY_BREAK -case 162: +case 164: YY_RULE_SETUP -#line 1712 "dhcp6_lexer.ll" +#line 1734 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DATA: @@ -4624,9 +4665,9 @@ YY_RULE_SETUP } } YY_BREAK -case 163: +case 165: YY_RULE_SETUP -#line 1721 "dhcp6_lexer.ll" +#line 1743 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DEF: @@ -4636,9 +4677,9 @@ YY_RULE_SETUP } } YY_BREAK -case 164: +case 166: YY_RULE_SETUP -#line 1730 "dhcp6_lexer.ll" +#line 1752 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DEF: @@ -4648,9 +4689,9 @@ YY_RULE_SETUP } } YY_BREAK -case 165: +case 167: YY_RULE_SETUP -#line 1739 "dhcp6_lexer.ll" +#line 1761 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DEF: @@ -4660,9 +4701,9 @@ YY_RULE_SETUP } } YY_BREAK -case 166: +case 168: YY_RULE_SETUP -#line 1748 "dhcp6_lexer.ll" +#line 1770 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -4673,9 +4714,9 @@ YY_RULE_SETUP } } YY_BREAK -case 167: +case 169: YY_RULE_SETUP -#line 1758 "dhcp6_lexer.ll" +#line 1780 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RELAY: @@ -4685,9 +4726,9 @@ YY_RULE_SETUP } } YY_BREAK -case 168: +case 170: YY_RULE_SETUP -#line 1767 "dhcp6_lexer.ll" +#line 1789 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4697,9 +4738,9 @@ YY_RULE_SETUP } } YY_BREAK -case 169: +case 171: YY_RULE_SETUP -#line 1776 "dhcp6_lexer.ll" +#line 1798 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::HOOKS_LIBRARIES: @@ -4709,9 +4750,9 @@ YY_RULE_SETUP } } YY_BREAK -case 170: +case 172: YY_RULE_SETUP -#line 1785 "dhcp6_lexer.ll" +#line 1807 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::HOOKS_LIBRARIES: @@ -4721,9 +4762,9 @@ YY_RULE_SETUP } } YY_BREAK -case 171: +case 173: YY_RULE_SETUP -#line 1794 "dhcp6_lexer.ll" +#line 1816 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4733,9 +4774,9 @@ YY_RULE_SETUP } } YY_BREAK -case 172: +case 174: YY_RULE_SETUP -#line 1803 "dhcp6_lexer.ll" +#line 1825 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DUID_TYPE: @@ -4745,9 +4786,9 @@ YY_RULE_SETUP } } YY_BREAK -case 173: +case 175: YY_RULE_SETUP -#line 1812 "dhcp6_lexer.ll" +#line 1834 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DUID_TYPE: @@ -4757,9 +4798,9 @@ YY_RULE_SETUP } } YY_BREAK -case 174: +case 176: YY_RULE_SETUP -#line 1821 "dhcp6_lexer.ll" +#line 1843 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DUID_TYPE: @@ -4769,9 +4810,9 @@ YY_RULE_SETUP } } YY_BREAK -case 175: +case 177: YY_RULE_SETUP -#line 1830 "dhcp6_lexer.ll" +#line 1852 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SERVER_ID: @@ -4781,9 +4822,9 @@ YY_RULE_SETUP } } YY_BREAK -case 176: +case 178: YY_RULE_SETUP -#line 1839 "dhcp6_lexer.ll" +#line 1861 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SERVER_ID: @@ -4793,9 +4834,9 @@ YY_RULE_SETUP } } YY_BREAK -case 177: +case 179: YY_RULE_SETUP -#line 1848 "dhcp6_lexer.ll" +#line 1870 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SERVER_ID: @@ -4805,9 +4846,9 @@ YY_RULE_SETUP } } YY_BREAK -case 178: +case 180: YY_RULE_SETUP -#line 1857 "dhcp6_lexer.ll" +#line 1879 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SERVER_ID: @@ -4817,9 +4858,9 @@ YY_RULE_SETUP } } YY_BREAK -case 179: +case 181: YY_RULE_SETUP -#line 1866 "dhcp6_lexer.ll" +#line 1888 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4829,9 +4870,9 @@ YY_RULE_SETUP } } YY_BREAK -case 180: +case 182: YY_RULE_SETUP -#line 1875 "dhcp6_lexer.ll" +#line 1897 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING: @@ -4841,9 +4882,9 @@ YY_RULE_SETUP } } YY_BREAK -case 181: +case 183: YY_RULE_SETUP -#line 1884 "dhcp6_lexer.ll" +#line 1906 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING: @@ -4853,9 +4894,9 @@ YY_RULE_SETUP } } YY_BREAK -case 182: +case 184: YY_RULE_SETUP -#line 1893 "dhcp6_lexer.ll" +#line 1915 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING: @@ -4865,9 +4906,9 @@ YY_RULE_SETUP } } YY_BREAK -case 183: +case 185: YY_RULE_SETUP -#line 1902 "dhcp6_lexer.ll" +#line 1924 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING: @@ -4877,9 +4918,9 @@ YY_RULE_SETUP } } YY_BREAK -case 184: +case 186: YY_RULE_SETUP -#line 1911 "dhcp6_lexer.ll" +#line 1933 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING: @@ -4889,9 +4930,9 @@ YY_RULE_SETUP } } YY_BREAK -case 185: +case 187: YY_RULE_SETUP -#line 1920 "dhcp6_lexer.ll" +#line 1942 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING: @@ -4901,9 +4942,9 @@ YY_RULE_SETUP } } YY_BREAK -case 186: +case 188: YY_RULE_SETUP -#line 1929 "dhcp6_lexer.ll" +#line 1951 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4913,9 +4954,9 @@ YY_RULE_SETUP } } YY_BREAK -case 187: +case 189: YY_RULE_SETUP -#line 1938 "dhcp6_lexer.ll" +#line 1960 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4925,9 +4966,9 @@ YY_RULE_SETUP } } YY_BREAK -case 188: +case 190: YY_RULE_SETUP -#line 1947 "dhcp6_lexer.ll" +#line 1969 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP_MULTI_THREADING: @@ -4937,9 +4978,9 @@ YY_RULE_SETUP } } YY_BREAK -case 189: +case 191: YY_RULE_SETUP -#line 1956 "dhcp6_lexer.ll" +#line 1978 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP_MULTI_THREADING: @@ -4949,9 +4990,9 @@ YY_RULE_SETUP } } YY_BREAK -case 190: +case 192: YY_RULE_SETUP -#line 1965 "dhcp6_lexer.ll" +#line 1987 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP_MULTI_THREADING: @@ -4961,9 +5002,9 @@ YY_RULE_SETUP } } YY_BREAK -case 191: +case 193: YY_RULE_SETUP -#line 1974 "dhcp6_lexer.ll" +#line 1996 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4973,9 +5014,9 @@ YY_RULE_SETUP } } YY_BREAK -case 192: +case 194: YY_RULE_SETUP -#line 1983 "dhcp6_lexer.ll" +#line 2005 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::CONTROL_SOCKET: @@ -4985,9 +5026,9 @@ YY_RULE_SETUP } } YY_BREAK -case 193: +case 195: YY_RULE_SETUP -#line 1992 "dhcp6_lexer.ll" +#line 2014 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::CONTROL_SOCKET: @@ -4997,9 +5038,9 @@ YY_RULE_SETUP } } YY_BREAK -case 194: +case 196: YY_RULE_SETUP -#line 2001 "dhcp6_lexer.ll" +#line 2023 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -5009,9 +5050,9 @@ YY_RULE_SETUP } } YY_BREAK -case 195: +case 197: YY_RULE_SETUP -#line 2010 "dhcp6_lexer.ll" +#line 2032 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP_QUEUE_CONTROL: @@ -5021,9 +5062,9 @@ YY_RULE_SETUP } } YY_BREAK -case 196: +case 198: YY_RULE_SETUP -#line 2019 "dhcp6_lexer.ll" +#line 2041 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP_QUEUE_CONTROL: @@ -5033,9 +5074,9 @@ YY_RULE_SETUP } } YY_BREAK -case 197: +case 199: YY_RULE_SETUP -#line 2028 "dhcp6_lexer.ll" +#line 2050 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP_QUEUE_CONTROL: @@ -5045,9 +5086,9 @@ YY_RULE_SETUP } } YY_BREAK -case 198: +case 200: YY_RULE_SETUP -#line 2037 "dhcp6_lexer.ll" +#line 2059 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -5057,9 +5098,9 @@ YY_RULE_SETUP } } YY_BREAK -case 199: +case 201: YY_RULE_SETUP -#line 2046 "dhcp6_lexer.ll" +#line 2068 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -5069,9 +5110,9 @@ YY_RULE_SETUP } } YY_BREAK -case 200: +case 202: YY_RULE_SETUP -#line 2055 "dhcp6_lexer.ll" +#line 2077 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -5081,9 +5122,9 @@ YY_RULE_SETUP } } YY_BREAK -case 201: +case 203: YY_RULE_SETUP -#line 2064 "dhcp6_lexer.ll" +#line 2086 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -5093,9 +5134,9 @@ YY_RULE_SETUP } } YY_BREAK -case 202: +case 204: YY_RULE_SETUP -#line 2073 "dhcp6_lexer.ll" +#line 2095 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -5105,9 +5146,9 @@ YY_RULE_SETUP } } YY_BREAK -case 203: +case 205: YY_RULE_SETUP -#line 2082 "dhcp6_lexer.ll" +#line 2104 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::COMPATIBILITY: @@ -5117,9 +5158,9 @@ YY_RULE_SETUP } } YY_BREAK -case 204: +case 206: YY_RULE_SETUP -#line 2091 "dhcp6_lexer.ll" +#line 2113 "dhcp6_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. @@ -5221,10 +5262,10 @@ YY_RULE_SETUP return isc::dhcp::Dhcp6Parser::make_STRING(decoded, driver.loc_); } YY_BREAK -case 205: -/* rule 205 can match eol */ +case 207: +/* rule 207 can match eol */ YY_RULE_SETUP -#line 2192 "dhcp6_lexer.ll" +#line 2214 "dhcp6_lexer.ll" { /* Bad string with a forbidden control character inside */ std::string raw(yytext+1); @@ -5241,10 +5282,10 @@ YY_RULE_SETUP pos + 1); } YY_BREAK -case 206: -/* rule 206 can match eol */ +case 208: +/* rule 208 can match eol */ YY_RULE_SETUP -#line 2208 "dhcp6_lexer.ll" +#line 2230 "dhcp6_lexer.ll" { /* Bad string with a bad escape inside */ std::string raw(yytext+1); @@ -5294,9 +5335,9 @@ YY_RULE_SETUP pos); } YY_BREAK -case 207: +case 209: YY_RULE_SETUP -#line 2257 "dhcp6_lexer.ll" +#line 2279 "dhcp6_lexer.ll" { /* Bad string with an open escape at the end */ std::string raw(yytext+1); @@ -5305,9 +5346,9 @@ YY_RULE_SETUP raw.size() + 1); } YY_BREAK -case 208: +case 210: YY_RULE_SETUP -#line 2265 "dhcp6_lexer.ll" +#line 2287 "dhcp6_lexer.ll" { /* Bad string with an open unicode escape at the end */ std::string raw(yytext+1); @@ -5323,39 +5364,39 @@ YY_RULE_SETUP pos + 1); } YY_BREAK -case 209: -YY_RULE_SETUP -#line 2280 "dhcp6_lexer.ll" -{ return isc::dhcp::Dhcp6Parser::make_LSQUARE_BRACKET(driver.loc_); } - YY_BREAK -case 210: -YY_RULE_SETUP -#line 2281 "dhcp6_lexer.ll" -{ return isc::dhcp::Dhcp6Parser::make_RSQUARE_BRACKET(driver.loc_); } - YY_BREAK case 211: YY_RULE_SETUP -#line 2282 "dhcp6_lexer.ll" -{ return isc::dhcp::Dhcp6Parser::make_LCURLY_BRACKET(driver.loc_); } +#line 2302 "dhcp6_lexer.ll" +{ return isc::dhcp::Dhcp6Parser::make_LSQUARE_BRACKET(driver.loc_); } YY_BREAK case 212: YY_RULE_SETUP -#line 2283 "dhcp6_lexer.ll" -{ return isc::dhcp::Dhcp6Parser::make_RCURLY_BRACKET(driver.loc_); } +#line 2303 "dhcp6_lexer.ll" +{ return isc::dhcp::Dhcp6Parser::make_RSQUARE_BRACKET(driver.loc_); } YY_BREAK case 213: YY_RULE_SETUP -#line 2284 "dhcp6_lexer.ll" -{ return isc::dhcp::Dhcp6Parser::make_COMMA(driver.loc_); } +#line 2304 "dhcp6_lexer.ll" +{ return isc::dhcp::Dhcp6Parser::make_LCURLY_BRACKET(driver.loc_); } YY_BREAK case 214: YY_RULE_SETUP -#line 2285 "dhcp6_lexer.ll" -{ return isc::dhcp::Dhcp6Parser::make_COLON(driver.loc_); } +#line 2305 "dhcp6_lexer.ll" +{ return isc::dhcp::Dhcp6Parser::make_RCURLY_BRACKET(driver.loc_); } YY_BREAK case 215: YY_RULE_SETUP -#line 2287 "dhcp6_lexer.ll" +#line 2306 "dhcp6_lexer.ll" +{ return isc::dhcp::Dhcp6Parser::make_COMMA(driver.loc_); } + YY_BREAK +case 216: +YY_RULE_SETUP +#line 2307 "dhcp6_lexer.ll" +{ return isc::dhcp::Dhcp6Parser::make_COLON(driver.loc_); } + YY_BREAK +case 217: +YY_RULE_SETUP +#line 2309 "dhcp6_lexer.ll" { /* An integer was found. */ std::string tmp(yytext); @@ -5374,9 +5415,9 @@ YY_RULE_SETUP return isc::dhcp::Dhcp6Parser::make_INTEGER(integer, driver.loc_); } YY_BREAK -case 216: +case 218: YY_RULE_SETUP -#line 2305 "dhcp6_lexer.ll" +#line 2327 "dhcp6_lexer.ll" { /* A floating point was found. */ std::string tmp(yytext); @@ -5390,43 +5431,43 @@ YY_RULE_SETUP return isc::dhcp::Dhcp6Parser::make_FLOAT(fp, driver.loc_); } YY_BREAK -case 217: +case 219: YY_RULE_SETUP -#line 2318 "dhcp6_lexer.ll" +#line 2340 "dhcp6_lexer.ll" { string tmp(yytext); return isc::dhcp::Dhcp6Parser::make_BOOLEAN(tmp == "true", driver.loc_); } YY_BREAK -case 218: +case 220: YY_RULE_SETUP -#line 2323 "dhcp6_lexer.ll" +#line 2345 "dhcp6_lexer.ll" { return isc::dhcp::Dhcp6Parser::make_NULL_TYPE(driver.loc_); } YY_BREAK -case 219: -YY_RULE_SETUP -#line 2327 "dhcp6_lexer.ll" -driver.error (driver.loc_, "JSON true reserved keyword is lower case only"); - YY_BREAK -case 220: -YY_RULE_SETUP -#line 2329 "dhcp6_lexer.ll" -driver.error (driver.loc_, "JSON false reserved keyword is lower case only"); - YY_BREAK case 221: YY_RULE_SETUP -#line 2331 "dhcp6_lexer.ll" -driver.error (driver.loc_, "JSON null reserved keyword is lower case only"); +#line 2349 "dhcp6_lexer.ll" +driver.error (driver.loc_, "JSON true reserved keyword is lower case only"); YY_BREAK case 222: YY_RULE_SETUP -#line 2333 "dhcp6_lexer.ll" +#line 2351 "dhcp6_lexer.ll" +driver.error (driver.loc_, "JSON false reserved keyword is lower case only"); + YY_BREAK +case 223: +YY_RULE_SETUP +#line 2353 "dhcp6_lexer.ll" +driver.error (driver.loc_, "JSON null reserved keyword is lower case only"); + YY_BREAK +case 224: +YY_RULE_SETUP +#line 2355 "dhcp6_lexer.ll" driver.error (driver.loc_, "Invalid character: " + std::string(yytext)); YY_BREAK case YY_STATE_EOF(INITIAL): -#line 2335 "dhcp6_lexer.ll" +#line 2357 "dhcp6_lexer.ll" { if (driver.states_.empty()) { return isc::dhcp::Dhcp6Parser::make_END(driver.loc_); @@ -5450,12 +5491,12 @@ case YY_STATE_EOF(INITIAL): BEGIN(DIR_EXIT); } YY_BREAK -case 223: +case 225: YY_RULE_SETUP -#line 2358 "dhcp6_lexer.ll" +#line 2380 "dhcp6_lexer.ll" ECHO; YY_BREAK -#line 5458 "dhcp6_lexer.cc" +#line 5499 "dhcp6_lexer.cc" case YY_END_OF_BUFFER: { @@ -5657,7 +5698,7 @@ static int yy_get_next_buffer (void) else { - int num_to_read = + yy_size_t num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) @@ -5671,7 +5712,7 @@ static int yy_get_next_buffer (void) if ( b->yy_is_our_buffer ) { - int new_size = b->yy_buf_size * 2; + yy_size_t new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; @@ -5729,7 +5770,7 @@ static int yy_get_next_buffer (void) if (((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ - int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); + yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc( (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) @@ -5774,7 +5815,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 >= 2128 ) + if ( yy_current_state >= 2145 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -5807,11 +5848,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 >= 2128 ) + if ( yy_current_state >= 2145 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 2127); + yy_is_jam = (yy_current_state == 2144); return yy_is_jam ? 0 : yy_current_state; } @@ -5850,7 +5891,7 @@ static int yy_get_next_buffer (void) else { /* need more input */ - int offset = (int) ((yy_c_buf_p) - (yytext_ptr)); + yy_size_t offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) @@ -6293,12 +6334,12 @@ YY_BUFFER_STATE yy_scan_string (const char * yystr ) * * @return the newly allocated buffer state object. */ -YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, int _yybytes_len ) +YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, yy_size_t _yybytes_len ) { YY_BUFFER_STATE b; char *buf; yy_size_t n; - int i; + yy_size_t i; /* Get memory for full buffer, including space for trailing EOB's. */ n = (yy_size_t) (_yybytes_len + 2); @@ -6345,7 +6386,7 @@ static void yynoreturn yy_fatal_error (const char* msg ) do \ { \ /* Undo effects of setting up yytext. */ \ - int yyless_macro_arg = (n); \ + yy_size_t yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ yytext[yyleng] = (yy_hold_char); \ (yy_c_buf_p) = yytext + yyless_macro_arg; \ @@ -6389,7 +6430,7 @@ FILE *yyget_out (void) /** Get the length of the current token. * */ -int yyget_leng (void) +yy_size_t yyget_leng (void) { return yyleng; } @@ -6560,7 +6601,7 @@ void yyfree (void * ptr ) /* %ok-for-header */ -#line 2358 "dhcp6_lexer.ll" +#line 2380 "dhcp6_lexer.ll" using namespace isc::dhcp; diff --git a/src/bin/dhcp6/dhcp6_lexer.ll b/src/bin/dhcp6/dhcp6_lexer.ll index 6e6340a6fa..4b2b1933c6 100644 --- a/src/bin/dhcp6/dhcp6_lexer.ll +++ b/src/bin/dhcp6/dhcp6_lexer.ll @@ -942,6 +942,28 @@ ControlCharacterFill [^"\\]|\\["\\/bfnrtu] } } +\"allocator\" { + switch(driver.ctx_) { + case isc::dhcp::Parser6Context::DHCP6: + case isc::dhcp::Parser6Context::SUBNET6: + case isc::dhcp::Parser6Context::SHARED_NETWORK: + return isc::dhcp::Dhcp6Parser::make_ALLOCATOR(driver.loc_); + default: + return isc::dhcp::Dhcp6Parser::make_STRING("allocator", driver.loc_); + } +} + +\"pd-allocator\" { + switch(driver.ctx_) { + case isc::dhcp::Parser6Context::DHCP6: + case isc::dhcp::Parser6Context::SUBNET6: + case isc::dhcp::Parser6Context::SHARED_NETWORK: + return isc::dhcp::Dhcp6Parser::make_PD_ALLOCATOR(driver.loc_); + default: + return isc::dhcp::Dhcp6Parser::make_STRING("pd-allocator", driver.loc_); + } +} + \"statistic-default-sample-count\" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: diff --git a/src/bin/dhcp6/dhcp6_parser.cc b/src/bin/dhcp6/dhcp6_parser.cc index d7b2fb614e..45aad638f9 100644 --- a/src/bin/dhcp6/dhcp6_parser.cc +++ b/src/bin/dhcp6/dhcp6_parser.cc @@ -398,73 +398,73 @@ namespace isc { namespace dhcp { switch (yykind) { case symbol_kind::S_STRING: // "constant string" -#line 295 "dhcp6_parser.yy" +#line 297 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < std::string > (); } #line 404 "dhcp6_parser.cc" break; case symbol_kind::S_INTEGER: // "integer" -#line 295 "dhcp6_parser.yy" +#line 297 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < int64_t > (); } #line 410 "dhcp6_parser.cc" break; case symbol_kind::S_FLOAT: // "floating point" -#line 295 "dhcp6_parser.yy" +#line 297 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < double > (); } #line 416 "dhcp6_parser.cc" break; case symbol_kind::S_BOOLEAN: // "boolean" -#line 295 "dhcp6_parser.yy" +#line 297 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < bool > (); } #line 422 "dhcp6_parser.cc" break; case symbol_kind::S_value: // value -#line 295 "dhcp6_parser.yy" +#line 297 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 428 "dhcp6_parser.cc" break; case symbol_kind::S_map_value: // map_value -#line 295 "dhcp6_parser.yy" +#line 297 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 434 "dhcp6_parser.cc" break; case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value -#line 295 "dhcp6_parser.yy" +#line 297 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 440 "dhcp6_parser.cc" break; case symbol_kind::S_db_type: // db_type -#line 295 "dhcp6_parser.yy" +#line 297 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 446 "dhcp6_parser.cc" break; case symbol_kind::S_on_fail_mode: // on_fail_mode -#line 295 "dhcp6_parser.yy" +#line 297 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 452 "dhcp6_parser.cc" break; case symbol_kind::S_hr_mode: // hr_mode -#line 295 "dhcp6_parser.yy" +#line 297 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 458 "dhcp6_parser.cc" break; case symbol_kind::S_duid_type: // duid_type -#line 295 "dhcp6_parser.yy" +#line 297 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 464 "dhcp6_parser.cc" break; case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value -#line 295 "dhcp6_parser.yy" +#line 297 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 470 "dhcp6_parser.cc" break; @@ -744,133 +744,133 @@ namespace isc { namespace dhcp { switch (yyn) { case 2: // $@1: %empty -#line 304 "dhcp6_parser.yy" +#line 306 "dhcp6_parser.yy" { ctx.ctx_ = ctx.NO_KEYWORD; } #line 750 "dhcp6_parser.cc" break; case 4: // $@2: %empty -#line 305 "dhcp6_parser.yy" +#line 307 "dhcp6_parser.yy" { ctx.ctx_ = ctx.CONFIG; } #line 756 "dhcp6_parser.cc" break; case 6: // $@3: %empty -#line 306 "dhcp6_parser.yy" +#line 308 "dhcp6_parser.yy" { ctx.ctx_ = ctx.DHCP6; } #line 762 "dhcp6_parser.cc" break; case 8: // $@4: %empty -#line 307 "dhcp6_parser.yy" +#line 309 "dhcp6_parser.yy" { ctx.ctx_ = ctx.INTERFACES_CONFIG; } #line 768 "dhcp6_parser.cc" break; case 10: // $@5: %empty -#line 308 "dhcp6_parser.yy" +#line 310 "dhcp6_parser.yy" { ctx.ctx_ = ctx.SUBNET6; } #line 774 "dhcp6_parser.cc" break; case 12: // $@6: %empty -#line 309 "dhcp6_parser.yy" +#line 311 "dhcp6_parser.yy" { ctx.ctx_ = ctx.POOLS; } #line 780 "dhcp6_parser.cc" break; case 14: // $@7: %empty -#line 310 "dhcp6_parser.yy" +#line 312 "dhcp6_parser.yy" { ctx.ctx_ = ctx.PD_POOLS; } #line 786 "dhcp6_parser.cc" break; case 16: // $@8: %empty -#line 311 "dhcp6_parser.yy" +#line 313 "dhcp6_parser.yy" { ctx.ctx_ = ctx.RESERVATIONS; } #line 792 "dhcp6_parser.cc" break; case 18: // $@9: %empty -#line 312 "dhcp6_parser.yy" +#line 314 "dhcp6_parser.yy" { ctx.ctx_ = ctx.DHCP6; } #line 798 "dhcp6_parser.cc" break; case 20: // $@10: %empty -#line 313 "dhcp6_parser.yy" +#line 315 "dhcp6_parser.yy" { ctx.ctx_ = ctx.OPTION_DEF; } #line 804 "dhcp6_parser.cc" break; case 22: // $@11: %empty -#line 314 "dhcp6_parser.yy" +#line 316 "dhcp6_parser.yy" { ctx.ctx_ = ctx.OPTION_DATA; } #line 810 "dhcp6_parser.cc" break; case 24: // $@12: %empty -#line 315 "dhcp6_parser.yy" +#line 317 "dhcp6_parser.yy" { ctx.ctx_ = ctx.HOOKS_LIBRARIES; } #line 816 "dhcp6_parser.cc" break; case 26: // $@13: %empty -#line 316 "dhcp6_parser.yy" +#line 318 "dhcp6_parser.yy" { ctx.ctx_ = ctx.DHCP_DDNS; } #line 822 "dhcp6_parser.cc" break; case 28: // $@14: %empty -#line 317 "dhcp6_parser.yy" +#line 319 "dhcp6_parser.yy" { ctx.ctx_ = ctx.CONFIG_CONTROL; } #line 828 "dhcp6_parser.cc" break; case 30: // value: "integer" -#line 325 "dhcp6_parser.yy" +#line 327 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); } #line 834 "dhcp6_parser.cc" break; case 31: // value: "floating point" -#line 326 "dhcp6_parser.yy" +#line 328 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); } #line 840 "dhcp6_parser.cc" break; case 32: // value: "boolean" -#line 327 "dhcp6_parser.yy" +#line 329 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); } #line 846 "dhcp6_parser.cc" break; case 33: // value: "constant string" -#line 328 "dhcp6_parser.yy" +#line 330 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); } #line 852 "dhcp6_parser.cc" break; case 34: // value: "null" -#line 329 "dhcp6_parser.yy" +#line 331 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); } #line 858 "dhcp6_parser.cc" break; case 35: // value: map2 -#line 330 "dhcp6_parser.yy" +#line 332 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } #line 864 "dhcp6_parser.cc" break; case 36: // value: list_generic -#line 331 "dhcp6_parser.yy" +#line 333 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } #line 870 "dhcp6_parser.cc" break; case 37: // sub_json: value -#line 334 "dhcp6_parser.yy" +#line 336 "dhcp6_parser.yy" { // Push back the JSON value on the stack ctx.stack_.push_back(yystack_[0].value.as < ElementPtr > ()); @@ -879,7 +879,7 @@ namespace isc { namespace dhcp { break; case 38: // $@15: %empty -#line 339 "dhcp6_parser.yy" +#line 341 "dhcp6_parser.yy" { // This code is executed when we're about to start parsing // the content of the map @@ -890,7 +890,7 @@ namespace isc { namespace dhcp { break; case 39: // map2: "{" $@15 map_content "}" -#line 344 "dhcp6_parser.yy" +#line 346 "dhcp6_parser.yy" { // map parsing completed. If we ever want to do any wrap up // (maybe some sanity checking), this would be the best place @@ -900,13 +900,13 @@ namespace isc { namespace dhcp { break; case 40: // map_value: map2 -#line 350 "dhcp6_parser.yy" +#line 352 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } #line 906 "dhcp6_parser.cc" break; case 43: // not_empty_map: "constant string" ":" value -#line 357 "dhcp6_parser.yy" +#line 359 "dhcp6_parser.yy" { // map containing a single entry ctx.unique(yystack_[2].value.as < std::string > (), ctx.loc2pos(yystack_[2].location)); @@ -916,7 +916,7 @@ namespace isc { namespace dhcp { break; case 44: // not_empty_map: not_empty_map "," "constant string" ":" value -#line 362 "dhcp6_parser.yy" +#line 364 "dhcp6_parser.yy" { // map consisting of a shorter map followed by // comma and string:value @@ -927,7 +927,7 @@ namespace isc { namespace dhcp { break; case 45: // not_empty_map: not_empty_map "," -#line 368 "dhcp6_parser.yy" +#line 370 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } @@ -935,7 +935,7 @@ namespace isc { namespace dhcp { break; case 46: // $@16: %empty -#line 373 "dhcp6_parser.yy" +#line 375 "dhcp6_parser.yy" { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(l); @@ -944,7 +944,7 @@ namespace isc { namespace dhcp { break; case 47: // list_generic: "[" $@16 list_content "]" -#line 376 "dhcp6_parser.yy" +#line 378 "dhcp6_parser.yy" { // list parsing complete. Put any sanity checking here } @@ -952,7 +952,7 @@ namespace isc { namespace dhcp { break; case 50: // not_empty_list: value -#line 384 "dhcp6_parser.yy" +#line 386 "dhcp6_parser.yy" { // List consisting of a single element. ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ()); @@ -961,7 +961,7 @@ namespace isc { namespace dhcp { break; case 51: // not_empty_list: not_empty_list "," value -#line 388 "dhcp6_parser.yy" +#line 390 "dhcp6_parser.yy" { // List ending with , and a value. ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ()); @@ -970,7 +970,7 @@ namespace isc { namespace dhcp { break; case 52: // not_empty_list: not_empty_list "," -#line 392 "dhcp6_parser.yy" +#line 394 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } @@ -978,7 +978,7 @@ namespace isc { namespace dhcp { break; case 53: // $@17: %empty -#line 398 "dhcp6_parser.yy" +#line 400 "dhcp6_parser.yy" { // List parsing about to start } @@ -986,7 +986,7 @@ namespace isc { namespace dhcp { break; case 54: // list_strings: "[" $@17 list_strings_content "]" -#line 400 "dhcp6_parser.yy" +#line 402 "dhcp6_parser.yy" { // list parsing complete. Put any sanity checking here //ctx.stack_.pop_back(); @@ -995,7 +995,7 @@ namespace isc { namespace dhcp { break; case 57: // not_empty_list_strings: "constant string" -#line 409 "dhcp6_parser.yy" +#line 411 "dhcp6_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(s); @@ -1004,7 +1004,7 @@ namespace isc { namespace dhcp { break; case 58: // not_empty_list_strings: not_empty_list_strings "," "constant string" -#line 413 "dhcp6_parser.yy" +#line 415 "dhcp6_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(s); @@ -1013,7 +1013,7 @@ namespace isc { namespace dhcp { break; case 59: // not_empty_list_strings: not_empty_list_strings "," -#line 417 "dhcp6_parser.yy" +#line 419 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } @@ -1021,7 +1021,7 @@ namespace isc { namespace dhcp { break; case 60: // unknown_map_entry: "constant string" ":" -#line 427 "dhcp6_parser.yy" +#line 429 "dhcp6_parser.yy" { const std::string& where = ctx.contextName(); const std::string& keyword = yystack_[1].value.as < std::string > (); @@ -1032,7 +1032,7 @@ namespace isc { namespace dhcp { break; case 61: // $@18: %empty -#line 436 "dhcp6_parser.yy" +#line 438 "dhcp6_parser.yy" { // This code is executed when we're about to start parsing // the content of the map @@ -1043,7 +1043,7 @@ namespace isc { namespace dhcp { break; case 62: // syntax_map: "{" $@18 global_object "}" -#line 441 "dhcp6_parser.yy" +#line 443 "dhcp6_parser.yy" { // map parsing completed. If we ever want to do any wrap up // (maybe some sanity checking), this would be the best place @@ -1056,7 +1056,7 @@ namespace isc { namespace dhcp { break; case 63: // $@19: %empty -#line 451 "dhcp6_parser.yy" +#line 453 "dhcp6_parser.yy" { // This code is executed when we're about to start parsing // the content of the map @@ -1071,7 +1071,7 @@ namespace isc { namespace dhcp { break; case 64: // global_object: "Dhcp6" $@19 ":" "{" global_params "}" -#line 460 "dhcp6_parser.yy" +#line 462 "dhcp6_parser.yy" { // No global parameter is required ctx.stack_.pop_back(); @@ -1081,7 +1081,7 @@ namespace isc { namespace dhcp { break; case 66: // global_object_comma: global_object "," -#line 468 "dhcp6_parser.yy" +#line 470 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } @@ -1089,7 +1089,7 @@ namespace isc { namespace dhcp { break; case 67: // $@20: %empty -#line 474 "dhcp6_parser.yy" +#line 476 "dhcp6_parser.yy" { // Parse the Dhcp6 map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -1099,7 +1099,7 @@ namespace isc { namespace dhcp { break; case 68: // sub_dhcp6: "{" $@20 global_params "}" -#line 478 "dhcp6_parser.yy" +#line 480 "dhcp6_parser.yy" { // No global parameter is required // parsing completed @@ -1108,15 +1108,15 @@ namespace isc { namespace dhcp { break; case 71: // global_params: global_params "," -#line 485 "dhcp6_parser.yy" +#line 487 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 1116 "dhcp6_parser.cc" break; - case 137: // $@21: %empty -#line 559 "dhcp6_parser.yy" + case 139: // $@21: %empty +#line 563 "dhcp6_parser.yy" { ctx.unique("data-directory", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); @@ -1124,8 +1124,8 @@ namespace isc { namespace dhcp { #line 1125 "dhcp6_parser.cc" break; - case 138: // data_directory: "data-directory" $@21 ":" "constant string" -#line 562 "dhcp6_parser.yy" + case 140: // data_directory: "data-directory" $@21 ":" "constant string" +#line 566 "dhcp6_parser.yy" { ElementPtr datadir(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("data-directory", datadir); @@ -1134,8 +1134,8 @@ namespace isc { namespace dhcp { #line 1135 "dhcp6_parser.cc" break; - case 139: // preferred_lifetime: "preferred-lifetime" ":" "integer" -#line 568 "dhcp6_parser.yy" + case 141: // preferred_lifetime: "preferred-lifetime" ":" "integer" +#line 572 "dhcp6_parser.yy" { ctx.unique("preferred-lifetime", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -1144,8 +1144,8 @@ namespace isc { namespace dhcp { #line 1145 "dhcp6_parser.cc" break; - case 140: // min_preferred_lifetime: "min-preferred-lifetime" ":" "integer" -#line 574 "dhcp6_parser.yy" + case 142: // min_preferred_lifetime: "min-preferred-lifetime" ":" "integer" +#line 578 "dhcp6_parser.yy" { ctx.unique("min-preferred-lifetime", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -1154,8 +1154,8 @@ namespace isc { namespace dhcp { #line 1155 "dhcp6_parser.cc" break; - case 141: // max_preferred_lifetime: "max-preferred-lifetime" ":" "integer" -#line 580 "dhcp6_parser.yy" + case 143: // max_preferred_lifetime: "max-preferred-lifetime" ":" "integer" +#line 584 "dhcp6_parser.yy" { ctx.unique("max-preferred-lifetime", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -1164,8 +1164,8 @@ namespace isc { namespace dhcp { #line 1165 "dhcp6_parser.cc" break; - case 142: // valid_lifetime: "valid-lifetime" ":" "integer" -#line 586 "dhcp6_parser.yy" + case 144: // valid_lifetime: "valid-lifetime" ":" "integer" +#line 590 "dhcp6_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))); @@ -1174,8 +1174,8 @@ namespace isc { namespace dhcp { #line 1175 "dhcp6_parser.cc" break; - case 143: // min_valid_lifetime: "min-valid-lifetime" ":" "integer" -#line 592 "dhcp6_parser.yy" + case 145: // min_valid_lifetime: "min-valid-lifetime" ":" "integer" +#line 596 "dhcp6_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))); @@ -1184,8 +1184,8 @@ namespace isc { namespace dhcp { #line 1185 "dhcp6_parser.cc" break; - case 144: // max_valid_lifetime: "max-valid-lifetime" ":" "integer" -#line 598 "dhcp6_parser.yy" + case 146: // max_valid_lifetime: "max-valid-lifetime" ":" "integer" +#line 602 "dhcp6_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))); @@ -1194,8 +1194,8 @@ namespace isc { namespace dhcp { #line 1195 "dhcp6_parser.cc" break; - case 145: // renew_timer: "renew-timer" ":" "integer" -#line 604 "dhcp6_parser.yy" + case 147: // renew_timer: "renew-timer" ":" "integer" +#line 608 "dhcp6_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))); @@ -1204,8 +1204,8 @@ namespace isc { namespace dhcp { #line 1205 "dhcp6_parser.cc" break; - case 146: // rebind_timer: "rebind-timer" ":" "integer" -#line 610 "dhcp6_parser.yy" + case 148: // rebind_timer: "rebind-timer" ":" "integer" +#line 614 "dhcp6_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))); @@ -1214,8 +1214,8 @@ namespace isc { namespace dhcp { #line 1215 "dhcp6_parser.cc" break; - case 147: // calculate_tee_times: "calculate-tee-times" ":" "boolean" -#line 616 "dhcp6_parser.yy" + case 149: // calculate_tee_times: "calculate-tee-times" ":" "boolean" +#line 620 "dhcp6_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))); @@ -1224,8 +1224,8 @@ namespace isc { namespace dhcp { #line 1225 "dhcp6_parser.cc" break; - case 148: // t1_percent: "t1-percent" ":" "floating point" -#line 622 "dhcp6_parser.yy" + case 150: // t1_percent: "t1-percent" ":" "floating point" +#line 626 "dhcp6_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))); @@ -1234,8 +1234,8 @@ namespace isc { namespace dhcp { #line 1235 "dhcp6_parser.cc" break; - case 149: // t2_percent: "t2-percent" ":" "floating point" -#line 628 "dhcp6_parser.yy" + case 151: // t2_percent: "t2-percent" ":" "floating point" +#line 632 "dhcp6_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))); @@ -1244,8 +1244,8 @@ namespace isc { namespace dhcp { #line 1245 "dhcp6_parser.cc" break; - case 150: // cache_threshold: "cache-threshold" ":" "floating point" -#line 634 "dhcp6_parser.yy" + case 152: // cache_threshold: "cache-threshold" ":" "floating point" +#line 638 "dhcp6_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))); @@ -1254,8 +1254,8 @@ namespace isc { namespace dhcp { #line 1255 "dhcp6_parser.cc" break; - case 151: // cache_max_age: "cache-max-age" ":" "integer" -#line 640 "dhcp6_parser.yy" + case 153: // cache_max_age: "cache-max-age" ":" "integer" +#line 644 "dhcp6_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))); @@ -1264,8 +1264,8 @@ namespace isc { namespace dhcp { #line 1265 "dhcp6_parser.cc" break; - case 152: // decline_probation_period: "decline-probation-period" ":" "integer" -#line 646 "dhcp6_parser.yy" + case 154: // decline_probation_period: "decline-probation-period" ":" "integer" +#line 650 "dhcp6_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))); @@ -1274,8 +1274,8 @@ namespace isc { namespace dhcp { #line 1275 "dhcp6_parser.cc" break; - case 153: // ddns_send_updates: "ddns-send-updates" ":" "boolean" -#line 652 "dhcp6_parser.yy" + case 155: // ddns_send_updates: "ddns-send-updates" ":" "boolean" +#line 656 "dhcp6_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))); @@ -1284,8 +1284,8 @@ namespace isc { namespace dhcp { #line 1285 "dhcp6_parser.cc" break; - case 154: // ddns_override_no_update: "ddns-override-no-update" ":" "boolean" -#line 658 "dhcp6_parser.yy" + case 156: // ddns_override_no_update: "ddns-override-no-update" ":" "boolean" +#line 662 "dhcp6_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))); @@ -1294,8 +1294,8 @@ namespace isc { namespace dhcp { #line 1295 "dhcp6_parser.cc" break; - case 155: // ddns_override_client_update: "ddns-override-client-update" ":" "boolean" -#line 664 "dhcp6_parser.yy" + case 157: // ddns_override_client_update: "ddns-override-client-update" ":" "boolean" +#line 668 "dhcp6_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))); @@ -1304,8 +1304,8 @@ namespace isc { namespace dhcp { #line 1305 "dhcp6_parser.cc" break; - case 156: // $@22: %empty -#line 670 "dhcp6_parser.yy" + case 158: // $@22: %empty +#line 674 "dhcp6_parser.yy" { ctx.unique("ddns-replace-client-name", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.REPLACE_CLIENT_NAME); @@ -1313,8 +1313,8 @@ namespace isc { namespace dhcp { #line 1314 "dhcp6_parser.cc" break; - case 157: // ddns_replace_client_name: "ddns-replace-client-name" $@22 ":" ddns_replace_client_name_value -#line 673 "dhcp6_parser.yy" + case 159: // ddns_replace_client_name: "ddns-replace-client-name" $@22 ":" ddns_replace_client_name_value +#line 677 "dhcp6_parser.yy" { ctx.stack_.back()->set("ddns-replace-client-name", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); @@ -1322,40 +1322,40 @@ namespace isc { namespace dhcp { #line 1323 "dhcp6_parser.cc" break; - case 158: // ddns_replace_client_name_value: "when-present" -#line 679 "dhcp6_parser.yy" + case 160: // ddns_replace_client_name_value: "when-present" +#line 683 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location))); } #line 1331 "dhcp6_parser.cc" break; - case 159: // ddns_replace_client_name_value: "never" -#line 682 "dhcp6_parser.yy" + case 161: // ddns_replace_client_name_value: "never" +#line 686 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location))); } #line 1339 "dhcp6_parser.cc" break; - case 160: // ddns_replace_client_name_value: "always" -#line 685 "dhcp6_parser.yy" + case 162: // ddns_replace_client_name_value: "always" +#line 689 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location))); } #line 1347 "dhcp6_parser.cc" break; - case 161: // ddns_replace_client_name_value: "when-not-present" -#line 688 "dhcp6_parser.yy" + case 163: // ddns_replace_client_name_value: "when-not-present" +#line 692 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location))); } #line 1355 "dhcp6_parser.cc" break; - case 162: // ddns_replace_client_name_value: "boolean" -#line 691 "dhcp6_parser.yy" + case 164: // ddns_replace_client_name_value: "boolean" +#line 695 "dhcp6_parser.yy" { error(yystack_[0].location, "boolean values for the replace-client-name are " "no longer supported"); @@ -1363,8 +1363,8 @@ namespace isc { namespace dhcp { #line 1364 "dhcp6_parser.cc" break; - case 163: // $@23: %empty -#line 697 "dhcp6_parser.yy" + case 165: // $@23: %empty +#line 701 "dhcp6_parser.yy" { ctx.unique("ddns-generated-prefix", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); @@ -1372,8 +1372,8 @@ namespace isc { namespace dhcp { #line 1373 "dhcp6_parser.cc" break; - case 164: // ddns_generated_prefix: "ddns-generated-prefix" $@23 ":" "constant string" -#line 700 "dhcp6_parser.yy" + case 166: // ddns_generated_prefix: "ddns-generated-prefix" $@23 ":" "constant string" +#line 704 "dhcp6_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); @@ -1382,8 +1382,8 @@ namespace isc { namespace dhcp { #line 1383 "dhcp6_parser.cc" break; - case 165: // $@24: %empty -#line 706 "dhcp6_parser.yy" + case 167: // $@24: %empty +#line 710 "dhcp6_parser.yy" { ctx.unique("ddns-qualifying-suffix", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); @@ -1391,8 +1391,8 @@ namespace isc { namespace dhcp { #line 1392 "dhcp6_parser.cc" break; - case 166: // ddns_qualifying_suffix: "ddns-qualifying-suffix" $@24 ":" "constant string" -#line 709 "dhcp6_parser.yy" + case 168: // ddns_qualifying_suffix: "ddns-qualifying-suffix" $@24 ":" "constant string" +#line 713 "dhcp6_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); @@ -1401,8 +1401,8 @@ namespace isc { namespace dhcp { #line 1402 "dhcp6_parser.cc" break; - case 167: // ddns_update_on_renew: "ddns-update-on-renew" ":" "boolean" -#line 715 "dhcp6_parser.yy" + case 169: // ddns_update_on_renew: "ddns-update-on-renew" ":" "boolean" +#line 719 "dhcp6_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))); @@ -1411,8 +1411,8 @@ namespace isc { namespace dhcp { #line 1412 "dhcp6_parser.cc" break; - case 168: // ddns_use_conflict_resolution: "ddns-use-conflict-resolution" ":" "boolean" -#line 721 "dhcp6_parser.yy" + case 170: // ddns_use_conflict_resolution: "ddns-use-conflict-resolution" ":" "boolean" +#line 725 "dhcp6_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))); @@ -1421,8 +1421,8 @@ namespace isc { namespace dhcp { #line 1422 "dhcp6_parser.cc" break; - case 169: // $@25: %empty -#line 727 "dhcp6_parser.yy" + case 171: // $@25: %empty +#line 731 "dhcp6_parser.yy" { ctx.unique("hostname-char-set", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); @@ -1430,8 +1430,8 @@ namespace isc { namespace dhcp { #line 1431 "dhcp6_parser.cc" break; - case 170: // hostname_char_set: "hostname-char-set" $@25 ":" "constant string" -#line 730 "dhcp6_parser.yy" + case 172: // hostname_char_set: "hostname-char-set" $@25 ":" "constant string" +#line 734 "dhcp6_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); @@ -1440,8 +1440,8 @@ namespace isc { namespace dhcp { #line 1441 "dhcp6_parser.cc" break; - case 171: // $@26: %empty -#line 736 "dhcp6_parser.yy" + case 173: // $@26: %empty +#line 740 "dhcp6_parser.yy" { ctx.unique("hostname-char-replacement", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); @@ -1449,8 +1449,8 @@ namespace isc { namespace dhcp { #line 1450 "dhcp6_parser.cc" break; - case 172: // hostname_char_replacement: "hostname-char-replacement" $@26 ":" "constant string" -#line 739 "dhcp6_parser.yy" + case 174: // hostname_char_replacement: "hostname-char-replacement" $@26 ":" "constant string" +#line 743 "dhcp6_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); @@ -1459,8 +1459,8 @@ namespace isc { namespace dhcp { #line 1460 "dhcp6_parser.cc" break; - case 173: // store_extended_info: "store-extended-info" ":" "boolean" -#line 745 "dhcp6_parser.yy" + case 175: // store_extended_info: "store-extended-info" ":" "boolean" +#line 749 "dhcp6_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))); @@ -1469,8 +1469,8 @@ namespace isc { namespace dhcp { #line 1470 "dhcp6_parser.cc" break; - case 174: // statistic_default_sample_count: "statistic-default-sample-count" ":" "integer" -#line 751 "dhcp6_parser.yy" + case 176: // statistic_default_sample_count: "statistic-default-sample-count" ":" "integer" +#line 755 "dhcp6_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))); @@ -1479,8 +1479,8 @@ namespace isc { namespace dhcp { #line 1480 "dhcp6_parser.cc" break; - case 175: // statistic_default_sample_age: "statistic-default-sample-age" ":" "integer" -#line 757 "dhcp6_parser.yy" + case 177: // statistic_default_sample_age: "statistic-default-sample-age" ":" "integer" +#line 761 "dhcp6_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))); @@ -1489,8 +1489,8 @@ namespace isc { namespace dhcp { #line 1490 "dhcp6_parser.cc" break; - case 176: // $@27: %empty -#line 763 "dhcp6_parser.yy" + case 178: // $@27: %empty +#line 767 "dhcp6_parser.yy" { ctx.unique("server-tag", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); @@ -1498,8 +1498,8 @@ namespace isc { namespace dhcp { #line 1499 "dhcp6_parser.cc" break; - case 177: // server_tag: "server-tag" $@27 ":" "constant string" -#line 766 "dhcp6_parser.yy" + case 179: // server_tag: "server-tag" $@27 ":" "constant string" +#line 770 "dhcp6_parser.yy" { ElementPtr stag(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("server-tag", stag); @@ -1508,8 +1508,8 @@ namespace isc { namespace dhcp { #line 1509 "dhcp6_parser.cc" break; - case 178: // parked_packet_limit: "parked-packet-limit" ":" "integer" -#line 772 "dhcp6_parser.yy" + case 180: // parked_packet_limit: "parked-packet-limit" ":" "integer" +#line 776 "dhcp6_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))); @@ -1518,38 +1518,76 @@ namespace isc { namespace dhcp { #line 1519 "dhcp6_parser.cc" break; - case 179: // early_global_reservations_lookup: "early-global-reservations-lookup" ":" "boolean" -#line 778 "dhcp6_parser.yy" + case 181: // $@28: %empty +#line 782 "dhcp6_parser.yy" + { + ctx.unique("allocator", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 1528 "dhcp6_parser.cc" + break; + + case 182: // allocator: "allocator" $@28 ":" "constant string" +#line 785 "dhcp6_parser.yy" + { + ElementPtr al(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("allocator", al); + ctx.leave(); +} +#line 1538 "dhcp6_parser.cc" + break; + + case 183: // $@29: %empty +#line 791 "dhcp6_parser.yy" + { + ctx.unique("pd-allocator", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 1547 "dhcp6_parser.cc" + break; + + case 184: // pd_allocator: "pd-allocator" $@29 ":" "constant string" +#line 794 "dhcp6_parser.yy" + { + ElementPtr al(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("pd-allocator", al); + ctx.leave(); +} +#line 1557 "dhcp6_parser.cc" + break; + + case 185: // early_global_reservations_lookup: "early-global-reservations-lookup" ":" "boolean" +#line 800 "dhcp6_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 1529 "dhcp6_parser.cc" +#line 1567 "dhcp6_parser.cc" break; - case 180: // ip_reservations_unique: "ip-reservations-unique" ":" "boolean" -#line 784 "dhcp6_parser.yy" + case 186: // ip_reservations_unique: "ip-reservations-unique" ":" "boolean" +#line 806 "dhcp6_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 1539 "dhcp6_parser.cc" +#line 1577 "dhcp6_parser.cc" break; - case 181: // reservations_lookup_first: "reservations-lookup-first" ":" "boolean" -#line 790 "dhcp6_parser.yy" + case 187: // reservations_lookup_first: "reservations-lookup-first" ":" "boolean" +#line 812 "dhcp6_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 1549 "dhcp6_parser.cc" +#line 1587 "dhcp6_parser.cc" break; - case 182: // $@28: %empty -#line 796 "dhcp6_parser.yy" + case 188: // $@30: %empty +#line 818 "dhcp6_parser.yy" { ctx.unique("interfaces-config", ctx.loc2pos(yystack_[0].location)); ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -1557,48 +1595,48 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(i); ctx.enter(ctx.INTERFACES_CONFIG); } -#line 1561 "dhcp6_parser.cc" +#line 1599 "dhcp6_parser.cc" break; - case 183: // interfaces_config: "interfaces-config" $@28 ":" "{" interfaces_config_params "}" -#line 802 "dhcp6_parser.yy" + case 189: // interfaces_config: "interfaces-config" $@30 ":" "{" interfaces_config_params "}" +#line 824 "dhcp6_parser.yy" { // No interfaces config param is required ctx.stack_.pop_back(); ctx.leave(); } -#line 1571 "dhcp6_parser.cc" +#line 1609 "dhcp6_parser.cc" break; - case 184: // $@29: %empty -#line 808 "dhcp6_parser.yy" + case 190: // $@31: %empty +#line 830 "dhcp6_parser.yy" { // Parse the interfaces-config map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 1581 "dhcp6_parser.cc" +#line 1619 "dhcp6_parser.cc" break; - case 185: // sub_interfaces6: "{" $@29 interfaces_config_params "}" -#line 812 "dhcp6_parser.yy" + case 191: // sub_interfaces6: "{" $@31 interfaces_config_params "}" +#line 834 "dhcp6_parser.yy" { // No interfaces config param is required // parsing completed } -#line 1590 "dhcp6_parser.cc" +#line 1628 "dhcp6_parser.cc" break; - case 188: // interfaces_config_params: interfaces_config_params "," -#line 819 "dhcp6_parser.yy" + case 194: // interfaces_config_params: interfaces_config_params "," +#line 841 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 1598 "dhcp6_parser.cc" +#line 1636 "dhcp6_parser.cc" break; - case 197: // $@30: %empty -#line 834 "dhcp6_parser.yy" + case 203: // $@32: %empty +#line 856 "dhcp6_parser.yy" { ctx.unique("interfaces", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -1606,60 +1644,60 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.NO_KEYWORD); } -#line 1610 "dhcp6_parser.cc" +#line 1648 "dhcp6_parser.cc" break; - case 198: // interfaces_list: "interfaces" $@30 ":" list_strings -#line 840 "dhcp6_parser.yy" + case 204: // interfaces_list: "interfaces" $@32 ":" list_strings +#line 862 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 1619 "dhcp6_parser.cc" +#line 1657 "dhcp6_parser.cc" break; - case 199: // re_detect: "re-detect" ":" "boolean" -#line 845 "dhcp6_parser.yy" + case 205: // re_detect: "re-detect" ":" "boolean" +#line 867 "dhcp6_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 1629 "dhcp6_parser.cc" +#line 1667 "dhcp6_parser.cc" break; - case 200: // service_sockets_require_all: "service-sockets-require-all" ":" "boolean" -#line 851 "dhcp6_parser.yy" + case 206: // service_sockets_require_all: "service-sockets-require-all" ":" "boolean" +#line 873 "dhcp6_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 1639 "dhcp6_parser.cc" +#line 1677 "dhcp6_parser.cc" break; - case 201: // service_sockets_retry_wait_time: "service-sockets-retry-wait-time" ":" "integer" -#line 857 "dhcp6_parser.yy" + case 207: // service_sockets_retry_wait_time: "service-sockets-retry-wait-time" ":" "integer" +#line 879 "dhcp6_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 1649 "dhcp6_parser.cc" +#line 1687 "dhcp6_parser.cc" break; - case 202: // service_sockets_max_retries: "service-sockets-max-retries" ":" "integer" -#line 863 "dhcp6_parser.yy" + case 208: // service_sockets_max_retries: "service-sockets-max-retries" ":" "integer" +#line 885 "dhcp6_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 1659 "dhcp6_parser.cc" +#line 1697 "dhcp6_parser.cc" break; - case 203: // $@31: %empty -#line 869 "dhcp6_parser.yy" + case 209: // $@33: %empty +#line 891 "dhcp6_parser.yy" { ctx.unique("lease-database", ctx.loc2pos(yystack_[0].location)); ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -1667,22 +1705,22 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(i); ctx.enter(ctx.LEASE_DATABASE); } -#line 1671 "dhcp6_parser.cc" +#line 1709 "dhcp6_parser.cc" break; - case 204: // lease_database: "lease-database" $@31 ":" "{" database_map_params "}" -#line 875 "dhcp6_parser.yy" + case 210: // lease_database: "lease-database" $@33 ":" "{" database_map_params "}" +#line 897 "dhcp6_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 1682 "dhcp6_parser.cc" +#line 1720 "dhcp6_parser.cc" break; - case 205: // $@32: %empty -#line 882 "dhcp6_parser.yy" + case 211: // $@34: %empty +#line 904 "dhcp6_parser.yy" { ctx.unique("hosts-database", ctx.loc2pos(yystack_[0].location)); ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -1690,22 +1728,22 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(i); ctx.enter(ctx.HOSTS_DATABASE); } -#line 1694 "dhcp6_parser.cc" +#line 1732 "dhcp6_parser.cc" break; - case 206: // hosts_database: "hosts-database" $@32 ":" "{" database_map_params "}" -#line 888 "dhcp6_parser.yy" + case 212: // hosts_database: "hosts-database" $@34 ":" "{" database_map_params "}" +#line 910 "dhcp6_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 1705 "dhcp6_parser.cc" +#line 1743 "dhcp6_parser.cc" break; - case 207: // $@33: %empty -#line 895 "dhcp6_parser.yy" + case 213: // $@35: %empty +#line 917 "dhcp6_parser.yy" { ctx.unique("hosts-databases", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -1713,360 +1751,360 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.HOSTS_DATABASE); } -#line 1717 "dhcp6_parser.cc" +#line 1755 "dhcp6_parser.cc" break; - case 208: // hosts_databases: "hosts-databases" $@33 ":" "[" database_list "]" -#line 901 "dhcp6_parser.yy" + case 214: // hosts_databases: "hosts-databases" $@35 ":" "[" database_list "]" +#line 923 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 1726 "dhcp6_parser.cc" +#line 1764 "dhcp6_parser.cc" break; - case 213: // not_empty_database_list: not_empty_database_list "," -#line 912 "dhcp6_parser.yy" + case 219: // not_empty_database_list: not_empty_database_list "," +#line 934 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 1734 "dhcp6_parser.cc" +#line 1772 "dhcp6_parser.cc" break; - case 214: // $@34: %empty -#line 917 "dhcp6_parser.yy" + case 220: // $@36: %empty +#line 939 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 1744 "dhcp6_parser.cc" +#line 1782 "dhcp6_parser.cc" break; - case 215: // database: "{" $@34 database_map_params "}" -#line 921 "dhcp6_parser.yy" + case 221: // database: "{" $@36 database_map_params "}" +#line 943 "dhcp6_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 1754 "dhcp6_parser.cc" +#line 1792 "dhcp6_parser.cc" break; - case 218: // database_map_params: database_map_params "," -#line 929 "dhcp6_parser.yy" + case 224: // database_map_params: database_map_params "," +#line 951 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 1762 "dhcp6_parser.cc" +#line 1800 "dhcp6_parser.cc" break; - case 238: // $@35: %empty -#line 955 "dhcp6_parser.yy" + case 244: // $@37: %empty +#line 977 "dhcp6_parser.yy" { ctx.unique("type", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.DATABASE_TYPE); } -#line 1771 "dhcp6_parser.cc" +#line 1809 "dhcp6_parser.cc" break; - case 239: // database_type: "type" $@35 ":" db_type -#line 958 "dhcp6_parser.yy" + case 245: // database_type: "type" $@37 ":" db_type +#line 980 "dhcp6_parser.yy" { ctx.stack_.back()->set("type", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 1780 "dhcp6_parser.cc" +#line 1818 "dhcp6_parser.cc" break; - case 240: // db_type: "memfile" -#line 963 "dhcp6_parser.yy" + case 246: // db_type: "memfile" +#line 985 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("memfile", ctx.loc2pos(yystack_[0].location))); } -#line 1786 "dhcp6_parser.cc" +#line 1824 "dhcp6_parser.cc" break; - case 241: // db_type: "mysql" -#line 964 "dhcp6_parser.yy" + case 247: // db_type: "mysql" +#line 986 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("mysql", ctx.loc2pos(yystack_[0].location))); } -#line 1792 "dhcp6_parser.cc" +#line 1830 "dhcp6_parser.cc" break; - case 242: // db_type: "postgresql" -#line 965 "dhcp6_parser.yy" + case 248: // db_type: "postgresql" +#line 987 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("postgresql", ctx.loc2pos(yystack_[0].location))); } -#line 1798 "dhcp6_parser.cc" - break; - - case 243: // $@36: %empty -#line 968 "dhcp6_parser.yy" - { - ctx.unique("user", ctx.loc2pos(yystack_[0].location)); - ctx.enter(ctx.NO_KEYWORD); -} -#line 1807 "dhcp6_parser.cc" - break; - - case 244: // user: "user" $@36 ":" "constant string" -#line 971 "dhcp6_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 1817 "dhcp6_parser.cc" - break; - - case 245: // $@37: %empty -#line 977 "dhcp6_parser.yy" - { - ctx.unique("password", ctx.loc2pos(yystack_[0].location)); - ctx.enter(ctx.NO_KEYWORD); -} -#line 1826 "dhcp6_parser.cc" - break; - - case 246: // password: "password" $@37 ":" "constant string" -#line 980 "dhcp6_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 1836 "dhcp6_parser.cc" break; - case 247: // $@38: %empty -#line 986 "dhcp6_parser.yy" + case 249: // $@38: %empty +#line 990 "dhcp6_parser.yy" { - ctx.unique("host", ctx.loc2pos(yystack_[0].location)); + ctx.unique("user", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 1845 "dhcp6_parser.cc" break; - case 248: // host: "host" $@38 ":" "constant string" -#line 989 "dhcp6_parser.yy" + case 250: // user: "user" $@38 ":" "constant string" +#line 993 "dhcp6_parser.yy" { - ElementPtr h(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); - ctx.stack_.back()->set("host", h); + ElementPtr user(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("user", user); ctx.leave(); } #line 1855 "dhcp6_parser.cc" break; - case 249: // port: "port" ":" "integer" -#line 995 "dhcp6_parser.yy" + case 251: // $@39: %empty +#line 999 "dhcp6_parser.yy" + { + ctx.unique("password", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 1864 "dhcp6_parser.cc" + break; + + case 252: // password: "password" $@39 ":" "constant string" +#line 1002 "dhcp6_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 1874 "dhcp6_parser.cc" + break; + + case 253: // $@40: %empty +#line 1008 "dhcp6_parser.yy" + { + ctx.unique("host", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 1883 "dhcp6_parser.cc" + break; + + case 254: // host: "host" $@40 ":" "constant string" +#line 1011 "dhcp6_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 1893 "dhcp6_parser.cc" + break; + + case 255: // port: "port" ":" "integer" +#line 1017 "dhcp6_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 1865 "dhcp6_parser.cc" +#line 1903 "dhcp6_parser.cc" break; - case 250: // $@39: %empty -#line 1001 "dhcp6_parser.yy" + case 256: // $@41: %empty +#line 1023 "dhcp6_parser.yy" { ctx.unique("name", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 1874 "dhcp6_parser.cc" +#line 1912 "dhcp6_parser.cc" break; - case 251: // name: "name" $@39 ":" "constant string" -#line 1004 "dhcp6_parser.yy" + case 257: // name: "name" $@41 ":" "constant string" +#line 1026 "dhcp6_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 1884 "dhcp6_parser.cc" +#line 1922 "dhcp6_parser.cc" break; - case 252: // persist: "persist" ":" "boolean" -#line 1010 "dhcp6_parser.yy" + case 258: // persist: "persist" ":" "boolean" +#line 1032 "dhcp6_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 1894 "dhcp6_parser.cc" +#line 1932 "dhcp6_parser.cc" break; - case 253: // lfc_interval: "lfc-interval" ":" "integer" -#line 1016 "dhcp6_parser.yy" + case 259: // lfc_interval: "lfc-interval" ":" "integer" +#line 1038 "dhcp6_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 1904 "dhcp6_parser.cc" +#line 1942 "dhcp6_parser.cc" break; - case 254: // readonly: "readonly" ":" "boolean" -#line 1022 "dhcp6_parser.yy" + case 260: // readonly: "readonly" ":" "boolean" +#line 1044 "dhcp6_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 1914 "dhcp6_parser.cc" +#line 1952 "dhcp6_parser.cc" break; - case 255: // connect_timeout: "connect-timeout" ":" "integer" -#line 1028 "dhcp6_parser.yy" + case 261: // connect_timeout: "connect-timeout" ":" "integer" +#line 1050 "dhcp6_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 1924 "dhcp6_parser.cc" +#line 1962 "dhcp6_parser.cc" break; - case 256: // reconnect_wait_time: "reconnect-wait-time" ":" "integer" -#line 1034 "dhcp6_parser.yy" + case 262: // reconnect_wait_time: "reconnect-wait-time" ":" "integer" +#line 1056 "dhcp6_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 1934 "dhcp6_parser.cc" +#line 1972 "dhcp6_parser.cc" break; - case 257: // $@40: %empty -#line 1040 "dhcp6_parser.yy" + case 263: // $@42: %empty +#line 1062 "dhcp6_parser.yy" { ctx.unique("on-fail", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.DATABASE_ON_FAIL); } -#line 1943 "dhcp6_parser.cc" +#line 1981 "dhcp6_parser.cc" break; - case 258: // on_fail: "on-fail" $@40 ":" on_fail_mode -#line 1043 "dhcp6_parser.yy" + case 264: // on_fail: "on-fail" $@42 ":" on_fail_mode +#line 1065 "dhcp6_parser.yy" { ctx.stack_.back()->set("on-fail", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 1952 "dhcp6_parser.cc" +#line 1990 "dhcp6_parser.cc" break; - case 259: // on_fail_mode: "stop-retry-exit" -#line 1048 "dhcp6_parser.yy" + case 265: // on_fail_mode: "stop-retry-exit" +#line 1070 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("stop-retry-exit", ctx.loc2pos(yystack_[0].location))); } -#line 1958 "dhcp6_parser.cc" +#line 1996 "dhcp6_parser.cc" break; - case 260: // on_fail_mode: "serve-retry-exit" -#line 1049 "dhcp6_parser.yy" + case 266: // on_fail_mode: "serve-retry-exit" +#line 1071 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("serve-retry-exit", ctx.loc2pos(yystack_[0].location))); } -#line 1964 "dhcp6_parser.cc" +#line 2002 "dhcp6_parser.cc" break; - case 261: // on_fail_mode: "serve-retry-continue" -#line 1050 "dhcp6_parser.yy" + case 267: // on_fail_mode: "serve-retry-continue" +#line 1072 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("serve-retry-continue", ctx.loc2pos(yystack_[0].location))); } -#line 1970 "dhcp6_parser.cc" +#line 2008 "dhcp6_parser.cc" break; - case 262: // max_row_errors: "max-row-errors" ":" "integer" -#line 1053 "dhcp6_parser.yy" + case 268: // max_row_errors: "max-row-errors" ":" "integer" +#line 1075 "dhcp6_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 1980 "dhcp6_parser.cc" +#line 2018 "dhcp6_parser.cc" break; - case 263: // max_reconnect_tries: "max-reconnect-tries" ":" "integer" -#line 1059 "dhcp6_parser.yy" + case 269: // max_reconnect_tries: "max-reconnect-tries" ":" "integer" +#line 1081 "dhcp6_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 1990 "dhcp6_parser.cc" - break; - - case 264: // $@41: %empty -#line 1065 "dhcp6_parser.yy" - { - ctx.unique("trust-anchor", ctx.loc2pos(yystack_[0].location)); - ctx.enter(ctx.NO_KEYWORD); -} -#line 1999 "dhcp6_parser.cc" - break; - - case 265: // trust_anchor: "trust-anchor" $@41 ":" "constant string" -#line 1068 "dhcp6_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 2009 "dhcp6_parser.cc" - break; - - case 266: // $@42: %empty -#line 1074 "dhcp6_parser.yy" - { - ctx.unique("cert-file", ctx.loc2pos(yystack_[0].location)); - ctx.enter(ctx.NO_KEYWORD); -} -#line 2018 "dhcp6_parser.cc" - break; - - case 267: // cert_file: "cert-file" $@42 ":" "constant string" -#line 1077 "dhcp6_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 2028 "dhcp6_parser.cc" break; - case 268: // $@43: %empty -#line 1083 "dhcp6_parser.yy" - { - ctx.unique("key-file", ctx.loc2pos(yystack_[0].location)); + case 270: // $@43: %empty +#line 1087 "dhcp6_parser.yy" + { + ctx.unique("trust-anchor", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 2037 "dhcp6_parser.cc" break; - case 269: // key_file: "key-file" $@43 ":" "constant string" -#line 1086 "dhcp6_parser.yy" + case 271: // trust_anchor: "trust-anchor" $@43 ":" "constant string" +#line 1090 "dhcp6_parser.yy" { - ElementPtr key(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); - ctx.stack_.back()->set("key-file", key); + 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 2047 "dhcp6_parser.cc" break; - case 270: // $@44: %empty -#line 1092 "dhcp6_parser.yy" - { - ctx.unique("cipher-list", ctx.loc2pos(yystack_[0].location)); + case 272: // $@44: %empty +#line 1096 "dhcp6_parser.yy" + { + ctx.unique("cert-file", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 2056 "dhcp6_parser.cc" break; - case 271: // cipher_list: "cipher-list" $@44 ":" "constant string" -#line 1095 "dhcp6_parser.yy" + case 273: // cert_file: "cert-file" $@44 ":" "constant string" +#line 1099 "dhcp6_parser.yy" { - ElementPtr cl(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); - ctx.stack_.back()->set("cipher-list", cl); + 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 2066 "dhcp6_parser.cc" break; - case 272: // $@45: %empty -#line 1101 "dhcp6_parser.yy" + case 274: // $@45: %empty +#line 1105 "dhcp6_parser.yy" + { + ctx.unique("key-file", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 2075 "dhcp6_parser.cc" + break; + + case 275: // key_file: "key-file" $@45 ":" "constant string" +#line 1108 "dhcp6_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 2085 "dhcp6_parser.cc" + break; + + case 276: // $@46: %empty +#line 1114 "dhcp6_parser.yy" + { + ctx.unique("cipher-list", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 2094 "dhcp6_parser.cc" + break; + + case 277: // cipher_list: "cipher-list" $@46 ":" "constant string" +#line 1117 "dhcp6_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 2104 "dhcp6_parser.cc" + break; + + case 278: // $@47: %empty +#line 1123 "dhcp6_parser.yy" { ctx.unique("sanity-checks", ctx.loc2pos(yystack_[0].location)); ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -2074,37 +2112,37 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(m); ctx.enter(ctx.SANITY_CHECKS); } -#line 2078 "dhcp6_parser.cc" +#line 2116 "dhcp6_parser.cc" break; - case 273: // sanity_checks: "sanity-checks" $@45 ":" "{" sanity_checks_params "}" -#line 1107 "dhcp6_parser.yy" + case 279: // sanity_checks: "sanity-checks" $@47 ":" "{" sanity_checks_params "}" +#line 1129 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 2087 "dhcp6_parser.cc" +#line 2125 "dhcp6_parser.cc" break; - case 276: // sanity_checks_params: sanity_checks_params "," -#line 1114 "dhcp6_parser.yy" + case 282: // sanity_checks_params: sanity_checks_params "," +#line 1136 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2095 "dhcp6_parser.cc" +#line 2133 "dhcp6_parser.cc" break; - case 279: // $@46: %empty -#line 1123 "dhcp6_parser.yy" + case 285: // $@48: %empty +#line 1145 "dhcp6_parser.yy" { ctx.unique("lease-checks", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2104 "dhcp6_parser.cc" +#line 2142 "dhcp6_parser.cc" break; - case 280: // lease_checks: "lease-checks" $@46 ":" "constant string" -#line 1126 "dhcp6_parser.yy" + case 286: // lease_checks: "lease-checks" $@48 ":" "constant string" +#line 1148 "dhcp6_parser.yy" { if ( (string(yystack_[0].value.as < std::string > ()) == "none") || @@ -2120,20 +2158,20 @@ namespace isc { namespace dhcp { ", supported values are: none, warn, fix, fix-del, del"); } } -#line 2124 "dhcp6_parser.cc" +#line 2162 "dhcp6_parser.cc" break; - case 281: // $@47: %empty -#line 1142 "dhcp6_parser.yy" + case 287: // $@49: %empty +#line 1164 "dhcp6_parser.yy" { ctx.unique("extended-info-checks", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2133 "dhcp6_parser.cc" +#line 2171 "dhcp6_parser.cc" break; - case 282: // extended_info_checks: "extended-info-checks" $@47 ":" "constant string" -#line 1145 "dhcp6_parser.yy" + case 288: // extended_info_checks: "extended-info-checks" $@49 ":" "constant string" +#line 1167 "dhcp6_parser.yy" { if ( (string(yystack_[0].value.as < std::string > ()) == "none") || @@ -2148,11 +2186,11 @@ namespace isc { namespace dhcp { ", supported values are: none, fix, strict, pedantic"); } } -#line 2152 "dhcp6_parser.cc" +#line 2190 "dhcp6_parser.cc" break; - case 283: // $@48: %empty -#line 1160 "dhcp6_parser.yy" + case 289: // $@50: %empty +#line 1182 "dhcp6_parser.yy" { ctx.unique("mac-sources", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -2160,46 +2198,46 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.MAC_SOURCES); } -#line 2164 "dhcp6_parser.cc" +#line 2202 "dhcp6_parser.cc" break; - case 284: // mac_sources: "mac-sources" $@48 ":" "[" mac_sources_list "]" -#line 1166 "dhcp6_parser.yy" + case 290: // mac_sources: "mac-sources" $@50 ":" "[" mac_sources_list "]" +#line 1188 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 2173 "dhcp6_parser.cc" +#line 2211 "dhcp6_parser.cc" break; - case 287: // mac_sources_list: mac_sources_list "," -#line 1173 "dhcp6_parser.yy" + case 293: // mac_sources_list: mac_sources_list "," +#line 1195 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2181 "dhcp6_parser.cc" +#line 2219 "dhcp6_parser.cc" break; - case 290: // duid_id: "duid" -#line 1182 "dhcp6_parser.yy" + case 296: // duid_id: "duid" +#line 1204 "dhcp6_parser.yy" { ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(duid); } -#line 2190 "dhcp6_parser.cc" +#line 2228 "dhcp6_parser.cc" break; - case 291: // string_id: "constant string" -#line 1187 "dhcp6_parser.yy" + case 297: // string_id: "constant string" +#line 1209 "dhcp6_parser.yy" { ElementPtr duid(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(duid); } -#line 2199 "dhcp6_parser.cc" +#line 2237 "dhcp6_parser.cc" break; - case 292: // $@49: %empty -#line 1192 "dhcp6_parser.yy" + case 298: // $@51: %empty +#line 1214 "dhcp6_parser.yy" { ctx.unique("host-reservation-identifiers", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -2207,46 +2245,46 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.HOST_RESERVATION_IDENTIFIERS); } -#line 2211 "dhcp6_parser.cc" +#line 2249 "dhcp6_parser.cc" break; - case 293: // host_reservation_identifiers: "host-reservation-identifiers" $@49 ":" "[" host_reservation_identifiers_list "]" -#line 1198 "dhcp6_parser.yy" + case 299: // host_reservation_identifiers: "host-reservation-identifiers" $@51 ":" "[" host_reservation_identifiers_list "]" +#line 1220 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 2220 "dhcp6_parser.cc" +#line 2258 "dhcp6_parser.cc" break; - case 296: // host_reservation_identifiers_list: host_reservation_identifiers_list "," -#line 1205 "dhcp6_parser.yy" + case 302: // host_reservation_identifiers_list: host_reservation_identifiers_list "," +#line 1227 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2228 "dhcp6_parser.cc" +#line 2266 "dhcp6_parser.cc" break; - case 300: // hw_address_id: "hw-address" -#line 1215 "dhcp6_parser.yy" + case 306: // hw_address_id: "hw-address" +#line 1237 "dhcp6_parser.yy" { ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(hwaddr); } -#line 2237 "dhcp6_parser.cc" +#line 2275 "dhcp6_parser.cc" break; - case 301: // flex_id: "flex-id" -#line 1220 "dhcp6_parser.yy" + case 307: // flex_id: "flex-id" +#line 1242 "dhcp6_parser.yy" { ElementPtr flex_id(new StringElement("flex-id", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(flex_id); } -#line 2246 "dhcp6_parser.cc" +#line 2284 "dhcp6_parser.cc" break; - case 302: // $@50: %empty -#line 1227 "dhcp6_parser.yy" + case 308: // $@52: %empty +#line 1249 "dhcp6_parser.yy" { ctx.unique("relay-supplied-options", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -2254,20 +2292,20 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.NO_KEYWORD); } -#line 2258 "dhcp6_parser.cc" +#line 2296 "dhcp6_parser.cc" break; - case 303: // relay_supplied_options: "relay-supplied-options" $@50 ":" "[" list_content "]" -#line 1233 "dhcp6_parser.yy" + case 309: // relay_supplied_options: "relay-supplied-options" $@52 ":" "[" list_content "]" +#line 1255 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 2267 "dhcp6_parser.cc" +#line 2305 "dhcp6_parser.cc" break; - case 304: // $@51: %empty -#line 1240 "dhcp6_parser.yy" + case 310: // $@53: %empty +#line 1262 "dhcp6_parser.yy" { ctx.unique("multi-threading", ctx.loc2pos(yystack_[0].location)); ElementPtr mt(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -2275,60 +2313,60 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(mt); ctx.enter(ctx.DHCP_MULTI_THREADING); } -#line 2279 "dhcp6_parser.cc" +#line 2317 "dhcp6_parser.cc" break; - case 305: // dhcp_multi_threading: "multi-threading" $@51 ":" "{" multi_threading_params "}" -#line 1246 "dhcp6_parser.yy" + case 311: // dhcp_multi_threading: "multi-threading" $@53 ":" "{" multi_threading_params "}" +#line 1268 "dhcp6_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 2290 "dhcp6_parser.cc" +#line 2328 "dhcp6_parser.cc" break; - case 308: // multi_threading_params: multi_threading_params "," -#line 1255 "dhcp6_parser.yy" + case 314: // multi_threading_params: multi_threading_params "," +#line 1277 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2298 "dhcp6_parser.cc" +#line 2336 "dhcp6_parser.cc" break; - case 315: // enable_multi_threading: "enable-multi-threading" ":" "boolean" -#line 1268 "dhcp6_parser.yy" + case 321: // enable_multi_threading: "enable-multi-threading" ":" "boolean" +#line 1290 "dhcp6_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 2308 "dhcp6_parser.cc" +#line 2346 "dhcp6_parser.cc" break; - case 316: // thread_pool_size: "thread-pool-size" ":" "integer" -#line 1274 "dhcp6_parser.yy" + case 322: // thread_pool_size: "thread-pool-size" ":" "integer" +#line 1296 "dhcp6_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 2318 "dhcp6_parser.cc" +#line 2356 "dhcp6_parser.cc" break; - case 317: // packet_queue_size: "packet-queue-size" ":" "integer" -#line 1280 "dhcp6_parser.yy" + case 323: // packet_queue_size: "packet-queue-size" ":" "integer" +#line 1302 "dhcp6_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 2328 "dhcp6_parser.cc" +#line 2366 "dhcp6_parser.cc" break; - case 318: // $@52: %empty -#line 1286 "dhcp6_parser.yy" + case 324: // $@54: %empty +#line 1308 "dhcp6_parser.yy" { ctx.unique("hooks-libraries", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -2336,113 +2374,113 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.HOOKS_LIBRARIES); } -#line 2340 "dhcp6_parser.cc" +#line 2378 "dhcp6_parser.cc" break; - case 319: // hooks_libraries: "hooks-libraries" $@52 ":" "[" hooks_libraries_list "]" -#line 1292 "dhcp6_parser.yy" + case 325: // hooks_libraries: "hooks-libraries" $@54 ":" "[" hooks_libraries_list "]" +#line 1314 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 2349 "dhcp6_parser.cc" +#line 2387 "dhcp6_parser.cc" break; - case 324: // not_empty_hooks_libraries_list: not_empty_hooks_libraries_list "," -#line 1303 "dhcp6_parser.yy" + case 330: // not_empty_hooks_libraries_list: not_empty_hooks_libraries_list "," +#line 1325 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2357 "dhcp6_parser.cc" +#line 2395 "dhcp6_parser.cc" break; - case 325: // $@53: %empty -#line 1308 "dhcp6_parser.yy" + case 331: // $@55: %empty +#line 1330 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 2367 "dhcp6_parser.cc" +#line 2405 "dhcp6_parser.cc" break; - case 326: // hooks_library: "{" $@53 hooks_params "}" -#line 1312 "dhcp6_parser.yy" + case 332: // hooks_library: "{" $@55 hooks_params "}" +#line 1334 "dhcp6_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 2377 "dhcp6_parser.cc" +#line 2415 "dhcp6_parser.cc" break; - case 327: // $@54: %empty -#line 1318 "dhcp6_parser.yy" + case 333: // $@56: %empty +#line 1340 "dhcp6_parser.yy" { // Parse the hooks-libraries list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 2387 "dhcp6_parser.cc" +#line 2425 "dhcp6_parser.cc" break; - case 328: // sub_hooks_library: "{" $@54 hooks_params "}" -#line 1322 "dhcp6_parser.yy" + case 334: // sub_hooks_library: "{" $@56 hooks_params "}" +#line 1344 "dhcp6_parser.yy" { // The library hooks parameter is required ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 2397 "dhcp6_parser.cc" +#line 2435 "dhcp6_parser.cc" break; - case 331: // hooks_params: hooks_params "," -#line 1330 "dhcp6_parser.yy" + case 337: // hooks_params: hooks_params "," +#line 1352 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2405 "dhcp6_parser.cc" +#line 2443 "dhcp6_parser.cc" break; - case 335: // $@55: %empty -#line 1340 "dhcp6_parser.yy" + case 341: // $@57: %empty +#line 1362 "dhcp6_parser.yy" { ctx.unique("library", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2414 "dhcp6_parser.cc" +#line 2452 "dhcp6_parser.cc" break; - case 336: // library: "library" $@55 ":" "constant string" -#line 1343 "dhcp6_parser.yy" + case 342: // library: "library" $@57 ":" "constant string" +#line 1365 "dhcp6_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 2424 "dhcp6_parser.cc" +#line 2462 "dhcp6_parser.cc" break; - case 337: // $@56: %empty -#line 1349 "dhcp6_parser.yy" + case 343: // $@58: %empty +#line 1371 "dhcp6_parser.yy" { ctx.unique("parameters", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2433 "dhcp6_parser.cc" +#line 2471 "dhcp6_parser.cc" break; - case 338: // parameters: "parameters" $@56 ":" map_value -#line 1352 "dhcp6_parser.yy" + case 344: // parameters: "parameters" $@58 ":" map_value +#line 1374 "dhcp6_parser.yy" { ctx.stack_.back()->set("parameters", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 2442 "dhcp6_parser.cc" +#line 2480 "dhcp6_parser.cc" break; - case 339: // $@57: %empty -#line 1358 "dhcp6_parser.yy" + case 345: // $@59: %empty +#line 1380 "dhcp6_parser.yy" { ctx.unique("expired-leases-processing", ctx.loc2pos(yystack_[0].location)); ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -2450,89 +2488,89 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(m); ctx.enter(ctx.EXPIRED_LEASES_PROCESSING); } -#line 2454 "dhcp6_parser.cc" +#line 2492 "dhcp6_parser.cc" break; - case 340: // expired_leases_processing: "expired-leases-processing" $@57 ":" "{" expired_leases_params "}" -#line 1364 "dhcp6_parser.yy" + case 346: // expired_leases_processing: "expired-leases-processing" $@59 ":" "{" expired_leases_params "}" +#line 1386 "dhcp6_parser.yy" { // No expired lease parameter is required ctx.stack_.pop_back(); ctx.leave(); } -#line 2464 "dhcp6_parser.cc" +#line 2502 "dhcp6_parser.cc" break; - case 343: // expired_leases_params: expired_leases_params "," -#line 1372 "dhcp6_parser.yy" + case 349: // expired_leases_params: expired_leases_params "," +#line 1394 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2472 "dhcp6_parser.cc" +#line 2510 "dhcp6_parser.cc" break; - case 350: // reclaim_timer_wait_time: "reclaim-timer-wait-time" ":" "integer" -#line 1385 "dhcp6_parser.yy" + case 356: // reclaim_timer_wait_time: "reclaim-timer-wait-time" ":" "integer" +#line 1407 "dhcp6_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 2482 "dhcp6_parser.cc" +#line 2520 "dhcp6_parser.cc" break; - case 351: // flush_reclaimed_timer_wait_time: "flush-reclaimed-timer-wait-time" ":" "integer" -#line 1391 "dhcp6_parser.yy" + case 357: // flush_reclaimed_timer_wait_time: "flush-reclaimed-timer-wait-time" ":" "integer" +#line 1413 "dhcp6_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 2492 "dhcp6_parser.cc" +#line 2530 "dhcp6_parser.cc" break; - case 352: // hold_reclaimed_time: "hold-reclaimed-time" ":" "integer" -#line 1397 "dhcp6_parser.yy" + case 358: // hold_reclaimed_time: "hold-reclaimed-time" ":" "integer" +#line 1419 "dhcp6_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 2502 "dhcp6_parser.cc" +#line 2540 "dhcp6_parser.cc" break; - case 353: // max_reclaim_leases: "max-reclaim-leases" ":" "integer" -#line 1403 "dhcp6_parser.yy" + case 359: // max_reclaim_leases: "max-reclaim-leases" ":" "integer" +#line 1425 "dhcp6_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 2512 "dhcp6_parser.cc" +#line 2550 "dhcp6_parser.cc" break; - case 354: // max_reclaim_time: "max-reclaim-time" ":" "integer" -#line 1409 "dhcp6_parser.yy" + case 360: // max_reclaim_time: "max-reclaim-time" ":" "integer" +#line 1431 "dhcp6_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 2522 "dhcp6_parser.cc" +#line 2560 "dhcp6_parser.cc" break; - case 355: // unwarned_reclaim_cycles: "unwarned-reclaim-cycles" ":" "integer" -#line 1415 "dhcp6_parser.yy" + case 361: // unwarned_reclaim_cycles: "unwarned-reclaim-cycles" ":" "integer" +#line 1437 "dhcp6_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 2532 "dhcp6_parser.cc" +#line 2570 "dhcp6_parser.cc" break; - case 356: // $@58: %empty -#line 1424 "dhcp6_parser.yy" + case 362: // $@60: %empty +#line 1446 "dhcp6_parser.yy" { ctx.unique("subnet6", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -2540,38 +2578,38 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.SUBNET6); } -#line 2544 "dhcp6_parser.cc" +#line 2582 "dhcp6_parser.cc" break; - case 357: // subnet6_list: "subnet6" $@58 ":" "[" subnet6_list_content "]" -#line 1430 "dhcp6_parser.yy" + case 363: // subnet6_list: "subnet6" $@60 ":" "[" subnet6_list_content "]" +#line 1452 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 2553 "dhcp6_parser.cc" +#line 2591 "dhcp6_parser.cc" break; - case 362: // not_empty_subnet6_list: not_empty_subnet6_list "," -#line 1444 "dhcp6_parser.yy" + case 368: // not_empty_subnet6_list: not_empty_subnet6_list "," +#line 1466 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2561 "dhcp6_parser.cc" +#line 2599 "dhcp6_parser.cc" break; - case 363: // $@59: %empty -#line 1453 "dhcp6_parser.yy" + case 369: // $@61: %empty +#line 1475 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 2571 "dhcp6_parser.cc" +#line 2609 "dhcp6_parser.cc" break; - case 364: // subnet6: "{" $@59 subnet6_params "}" -#line 1457 "dhcp6_parser.yy" + case 370: // subnet6: "{" $@61 subnet6_params "}" +#line 1479 "dhcp6_parser.yy" { // Once we reached this place, the subnet parsing is now complete. // If we want to, we can implement default values here. @@ -2593,115 +2631,115 @@ namespace isc { namespace dhcp { ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 2597 "dhcp6_parser.cc" +#line 2635 "dhcp6_parser.cc" break; - case 365: // $@60: %empty -#line 1479 "dhcp6_parser.yy" + case 371: // $@62: %empty +#line 1501 "dhcp6_parser.yy" { // Parse the subnet6 list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 2607 "dhcp6_parser.cc" +#line 2645 "dhcp6_parser.cc" break; - case 366: // sub_subnet6: "{" $@60 subnet6_params "}" -#line 1483 "dhcp6_parser.yy" + case 372: // sub_subnet6: "{" $@62 subnet6_params "}" +#line 1505 "dhcp6_parser.yy" { // The subnet subnet6 parameter is required ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 2617 "dhcp6_parser.cc" +#line 2655 "dhcp6_parser.cc" break; - case 369: // subnet6_params: subnet6_params "," -#line 1492 "dhcp6_parser.yy" + case 375: // subnet6_params: subnet6_params "," +#line 1514 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2625 "dhcp6_parser.cc" - break; - - case 413: // $@61: %empty -#line 1543 "dhcp6_parser.yy" - { - ctx.unique("subnet", ctx.loc2pos(yystack_[0].location)); - ctx.enter(ctx.NO_KEYWORD); -} -#line 2634 "dhcp6_parser.cc" - break; - - case 414: // subnet: "subnet" $@61 ":" "constant string" -#line 1546 "dhcp6_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 2644 "dhcp6_parser.cc" - break; - - case 415: // $@62: %empty -#line 1552 "dhcp6_parser.yy" - { - ctx.unique("interface", ctx.loc2pos(yystack_[0].location)); - ctx.enter(ctx.NO_KEYWORD); -} -#line 2653 "dhcp6_parser.cc" - break; - - case 416: // interface: "interface" $@62 ":" "constant string" -#line 1555 "dhcp6_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 2663 "dhcp6_parser.cc" break; - case 417: // $@63: %empty -#line 1561 "dhcp6_parser.yy" - { - ctx.unique("interface-id", ctx.loc2pos(yystack_[0].location)); + case 421: // $@63: %empty +#line 1567 "dhcp6_parser.yy" + { + ctx.unique("subnet", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 2672 "dhcp6_parser.cc" break; - case 418: // interface_id: "interface-id" $@63 ":" "constant string" -#line 1564 "dhcp6_parser.yy" + case 422: // subnet: "subnet" $@63 ":" "constant string" +#line 1570 "dhcp6_parser.yy" { - ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); - ctx.stack_.back()->set("interface-id", iface); + ElementPtr subnet(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("subnet", subnet); ctx.leave(); } #line 2682 "dhcp6_parser.cc" break; - case 419: // $@64: %empty -#line 1570 "dhcp6_parser.yy" - { - ctx.unique("client-class", ctx.loc2pos(yystack_[0].location)); + case 423: // $@64: %empty +#line 1576 "dhcp6_parser.yy" + { + ctx.unique("interface", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 2691 "dhcp6_parser.cc" break; - case 420: // client_class: "client-class" $@64 ":" "constant string" -#line 1573 "dhcp6_parser.yy" + case 424: // interface: "interface" $@64 ":" "constant string" +#line 1579 "dhcp6_parser.yy" { - ElementPtr cls(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); - ctx.stack_.back()->set("client-class", cls); + ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("interface", iface); ctx.leave(); } #line 2701 "dhcp6_parser.cc" break; - case 421: // $@65: %empty -#line 1579 "dhcp6_parser.yy" + case 425: // $@65: %empty +#line 1585 "dhcp6_parser.yy" + { + ctx.unique("interface-id", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 2710 "dhcp6_parser.cc" + break; + + case 426: // interface_id: "interface-id" $@65 ":" "constant string" +#line 1588 "dhcp6_parser.yy" + { + ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("interface-id", iface); + ctx.leave(); +} +#line 2720 "dhcp6_parser.cc" + break; + + case 427: // $@66: %empty +#line 1594 "dhcp6_parser.yy" + { + ctx.unique("client-class", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 2729 "dhcp6_parser.cc" + break; + + case 428: // client_class: "client-class" $@66 ":" "constant string" +#line 1597 "dhcp6_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 2739 "dhcp6_parser.cc" + break; + + case 429: // $@67: %empty +#line 1603 "dhcp6_parser.yy" { ctx.unique("require-client-classes", ctx.loc2pos(yystack_[0].location)); ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -2709,112 +2747,112 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(c); ctx.enter(ctx.NO_KEYWORD); } -#line 2713 "dhcp6_parser.cc" +#line 2751 "dhcp6_parser.cc" break; - case 422: // require_client_classes: "require-client-classes" $@65 ":" list_strings -#line 1585 "dhcp6_parser.yy" + case 430: // require_client_classes: "require-client-classes" $@67 ":" list_strings +#line 1609 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 2722 "dhcp6_parser.cc" +#line 2760 "dhcp6_parser.cc" break; - case 423: // reservations_global: "reservations-global" ":" "boolean" -#line 1590 "dhcp6_parser.yy" + case 431: // reservations_global: "reservations-global" ":" "boolean" +#line 1614 "dhcp6_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 2732 "dhcp6_parser.cc" +#line 2770 "dhcp6_parser.cc" break; - case 424: // reservations_in_subnet: "reservations-in-subnet" ":" "boolean" -#line 1596 "dhcp6_parser.yy" + case 432: // reservations_in_subnet: "reservations-in-subnet" ":" "boolean" +#line 1620 "dhcp6_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 2742 "dhcp6_parser.cc" +#line 2780 "dhcp6_parser.cc" break; - case 425: // reservations_out_of_pool: "reservations-out-of-pool" ":" "boolean" -#line 1602 "dhcp6_parser.yy" + case 433: // reservations_out_of_pool: "reservations-out-of-pool" ":" "boolean" +#line 1626 "dhcp6_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 2752 "dhcp6_parser.cc" +#line 2790 "dhcp6_parser.cc" break; - case 426: // $@66: %empty -#line 1608 "dhcp6_parser.yy" + case 434: // $@68: %empty +#line 1632 "dhcp6_parser.yy" { ctx.unique("reservation-mode", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.RESERVATION_MODE); } -#line 2761 "dhcp6_parser.cc" +#line 2799 "dhcp6_parser.cc" break; - case 427: // reservation_mode: "reservation-mode" $@66 ":" hr_mode -#line 1611 "dhcp6_parser.yy" + case 435: // reservation_mode: "reservation-mode" $@68 ":" hr_mode +#line 1635 "dhcp6_parser.yy" { ctx.stack_.back()->set("reservation-mode", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 2770 "dhcp6_parser.cc" +#line 2808 "dhcp6_parser.cc" break; - case 428: // hr_mode: "disabled" -#line 1616 "dhcp6_parser.yy" + case 436: // hr_mode: "disabled" +#line 1640 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("disabled", ctx.loc2pos(yystack_[0].location))); } -#line 2776 "dhcp6_parser.cc" +#line 2814 "dhcp6_parser.cc" break; - case 429: // hr_mode: "out-of-pool" -#line 1617 "dhcp6_parser.yy" + case 437: // hr_mode: "out-of-pool" +#line 1641 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(yystack_[0].location))); } -#line 2782 "dhcp6_parser.cc" +#line 2820 "dhcp6_parser.cc" break; - case 430: // hr_mode: "global" -#line 1618 "dhcp6_parser.yy" + case 438: // hr_mode: "global" +#line 1642 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("global", ctx.loc2pos(yystack_[0].location))); } -#line 2788 "dhcp6_parser.cc" +#line 2826 "dhcp6_parser.cc" break; - case 431: // hr_mode: "all" -#line 1619 "dhcp6_parser.yy" + case 439: // hr_mode: "all" +#line 1643 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("all", ctx.loc2pos(yystack_[0].location))); } -#line 2794 "dhcp6_parser.cc" +#line 2832 "dhcp6_parser.cc" break; - case 432: // id: "id" ":" "integer" -#line 1622 "dhcp6_parser.yy" + case 440: // id: "id" ":" "integer" +#line 1646 "dhcp6_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 2804 "dhcp6_parser.cc" +#line 2842 "dhcp6_parser.cc" break; - case 433: // rapid_commit: "rapid-commit" ":" "boolean" -#line 1628 "dhcp6_parser.yy" + case 441: // rapid_commit: "rapid-commit" ":" "boolean" +#line 1652 "dhcp6_parser.yy" { ctx.unique("rapid-commit", ctx.loc2pos(yystack_[2].location)); ElementPtr rc(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("rapid-commit", rc); } -#line 2814 "dhcp6_parser.cc" +#line 2852 "dhcp6_parser.cc" break; - case 434: // $@67: %empty -#line 1636 "dhcp6_parser.yy" + case 442: // $@69: %empty +#line 1660 "dhcp6_parser.yy" { ctx.unique("shared-networks", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -2822,54 +2860,54 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.SHARED_NETWORK); } -#line 2826 "dhcp6_parser.cc" +#line 2864 "dhcp6_parser.cc" break; - case 435: // shared_networks: "shared-networks" $@67 ":" "[" shared_networks_content "]" -#line 1642 "dhcp6_parser.yy" + case 443: // shared_networks: "shared-networks" $@69 ":" "[" shared_networks_content "]" +#line 1666 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 2835 "dhcp6_parser.cc" +#line 2873 "dhcp6_parser.cc" break; - case 440: // shared_networks_list: shared_networks_list "," -#line 1655 "dhcp6_parser.yy" + case 448: // shared_networks_list: shared_networks_list "," +#line 1679 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2843 "dhcp6_parser.cc" +#line 2881 "dhcp6_parser.cc" break; - case 441: // $@68: %empty -#line 1660 "dhcp6_parser.yy" + case 449: // $@70: %empty +#line 1684 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 2853 "dhcp6_parser.cc" +#line 2891 "dhcp6_parser.cc" break; - case 442: // shared_network: "{" $@68 shared_network_params "}" -#line 1664 "dhcp6_parser.yy" + case 450: // shared_network: "{" $@70 shared_network_params "}" +#line 1688 "dhcp6_parser.yy" { ctx.stack_.pop_back(); } -#line 2861 "dhcp6_parser.cc" +#line 2899 "dhcp6_parser.cc" break; - case 445: // shared_network_params: shared_network_params "," -#line 1670 "dhcp6_parser.yy" + case 453: // shared_network_params: shared_network_params "," +#line 1694 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2869 "dhcp6_parser.cc" +#line 2907 "dhcp6_parser.cc" break; - case 486: // $@69: %empty -#line 1721 "dhcp6_parser.yy" + case 496: // $@71: %empty +#line 1747 "dhcp6_parser.yy" { ctx.unique("option-def", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -2877,55 +2915,55 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.OPTION_DEF); } -#line 2881 "dhcp6_parser.cc" +#line 2919 "dhcp6_parser.cc" break; - case 487: // option_def_list: "option-def" $@69 ":" "[" option_def_list_content "]" -#line 1727 "dhcp6_parser.yy" + case 497: // option_def_list: "option-def" $@71 ":" "[" option_def_list_content "]" +#line 1753 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 2890 "dhcp6_parser.cc" +#line 2928 "dhcp6_parser.cc" break; - case 488: // $@70: %empty -#line 1735 "dhcp6_parser.yy" + case 498: // $@72: %empty +#line 1761 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 2899 "dhcp6_parser.cc" +#line 2937 "dhcp6_parser.cc" break; - case 489: // sub_option_def_list: "{" $@70 option_def_list "}" -#line 1738 "dhcp6_parser.yy" + case 499: // sub_option_def_list: "{" $@72 option_def_list "}" +#line 1764 "dhcp6_parser.yy" { // parsing completed } -#line 2907 "dhcp6_parser.cc" +#line 2945 "dhcp6_parser.cc" break; - case 494: // not_empty_option_def_list: not_empty_option_def_list "," -#line 1750 "dhcp6_parser.yy" + case 504: // not_empty_option_def_list: not_empty_option_def_list "," +#line 1776 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2915 "dhcp6_parser.cc" +#line 2953 "dhcp6_parser.cc" break; - case 495: // $@71: %empty -#line 1757 "dhcp6_parser.yy" + case 505: // $@73: %empty +#line 1783 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 2925 "dhcp6_parser.cc" +#line 2963 "dhcp6_parser.cc" break; - case 496: // option_def_entry: "{" $@71 option_def_params "}" -#line 1761 "dhcp6_parser.yy" + case 506: // option_def_entry: "{" $@73 option_def_params "}" +#line 1787 "dhcp6_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)); @@ -2933,21 +2971,21 @@ namespace isc { namespace dhcp { ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 2937 "dhcp6_parser.cc" +#line 2975 "dhcp6_parser.cc" break; - case 497: // $@72: %empty -#line 1772 "dhcp6_parser.yy" + case 507: // $@74: %empty +#line 1798 "dhcp6_parser.yy" { // Parse the option-def list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 2947 "dhcp6_parser.cc" +#line 2985 "dhcp6_parser.cc" break; - case 498: // sub_option_def: "{" $@72 option_def_params "}" -#line 1776 "dhcp6_parser.yy" + case 508: // sub_option_def: "{" $@74 option_def_params "}" +#line 1802 "dhcp6_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)); @@ -2955,115 +2993,115 @@ namespace isc { namespace dhcp { ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 2959 "dhcp6_parser.cc" +#line 2997 "dhcp6_parser.cc" break; - case 503: // not_empty_option_def_params: not_empty_option_def_params "," -#line 1792 "dhcp6_parser.yy" + case 513: // not_empty_option_def_params: not_empty_option_def_params "," +#line 1818 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2967 "dhcp6_parser.cc" +#line 3005 "dhcp6_parser.cc" break; - case 515: // code: "code" ":" "integer" -#line 1811 "dhcp6_parser.yy" + case 525: // code: "code" ":" "integer" +#line 1837 "dhcp6_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 2977 "dhcp6_parser.cc" - break; - - case 517: // $@73: %empty -#line 1819 "dhcp6_parser.yy" - { - ctx.unique("type", ctx.loc2pos(yystack_[0].location)); - ctx.enter(ctx.NO_KEYWORD); -} -#line 2986 "dhcp6_parser.cc" - break; - - case 518: // option_def_type: "type" $@73 ":" "constant string" -#line 1822 "dhcp6_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 2996 "dhcp6_parser.cc" - break; - - case 519: // $@74: %empty -#line 1828 "dhcp6_parser.yy" - { - ctx.unique("record-types", ctx.loc2pos(yystack_[0].location)); - ctx.enter(ctx.NO_KEYWORD); -} -#line 3005 "dhcp6_parser.cc" - break; - - case 520: // option_def_record_types: "record-types" $@74 ":" "constant string" -#line 1831 "dhcp6_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 3015 "dhcp6_parser.cc" break; - case 521: // $@75: %empty -#line 1837 "dhcp6_parser.yy" - { - ctx.unique("space", ctx.loc2pos(yystack_[0].location)); + case 527: // $@75: %empty +#line 1845 "dhcp6_parser.yy" + { + ctx.unique("type", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 3024 "dhcp6_parser.cc" break; - case 522: // space: "space" $@75 ":" "constant string" -#line 1840 "dhcp6_parser.yy" + case 528: // option_def_type: "type" $@75 ":" "constant string" +#line 1848 "dhcp6_parser.yy" { - ElementPtr space(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); - ctx.stack_.back()->set("space", space); + ElementPtr prf(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("type", prf); ctx.leave(); } #line 3034 "dhcp6_parser.cc" break; - case 524: // $@76: %empty -#line 1848 "dhcp6_parser.yy" - { - ctx.unique("encapsulate", ctx.loc2pos(yystack_[0].location)); + case 529: // $@76: %empty +#line 1854 "dhcp6_parser.yy" + { + ctx.unique("record-types", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 3043 "dhcp6_parser.cc" break; - case 525: // option_def_encapsulate: "encapsulate" $@76 ":" "constant string" -#line 1851 "dhcp6_parser.yy" + case 530: // option_def_record_types: "record-types" $@76 ":" "constant string" +#line 1857 "dhcp6_parser.yy" { - ElementPtr encap(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); - ctx.stack_.back()->set("encapsulate", encap); + 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 3053 "dhcp6_parser.cc" break; - case 526: // option_def_array: "array" ":" "boolean" -#line 1857 "dhcp6_parser.yy" + case 531: // $@77: %empty +#line 1863 "dhcp6_parser.yy" + { + ctx.unique("space", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 3062 "dhcp6_parser.cc" + break; + + case 532: // space: "space" $@77 ":" "constant string" +#line 1866 "dhcp6_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 3072 "dhcp6_parser.cc" + break; + + case 534: // $@78: %empty +#line 1874 "dhcp6_parser.yy" + { + ctx.unique("encapsulate", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 3081 "dhcp6_parser.cc" + break; + + case 535: // option_def_encapsulate: "encapsulate" $@78 ":" "constant string" +#line 1877 "dhcp6_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 3091 "dhcp6_parser.cc" + break; + + case 536: // option_def_array: "array" ":" "boolean" +#line 1883 "dhcp6_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 3063 "dhcp6_parser.cc" +#line 3101 "dhcp6_parser.cc" break; - case 527: // $@77: %empty -#line 1867 "dhcp6_parser.yy" + case 537: // $@79: %empty +#line 1893 "dhcp6_parser.yy" { ctx.unique("option-data", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3071,113 +3109,113 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.OPTION_DATA); } -#line 3075 "dhcp6_parser.cc" +#line 3113 "dhcp6_parser.cc" break; - case 528: // option_data_list: "option-data" $@77 ":" "[" option_data_list_content "]" -#line 1873 "dhcp6_parser.yy" + case 538: // option_data_list: "option-data" $@79 ":" "[" option_data_list_content "]" +#line 1899 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3084 "dhcp6_parser.cc" +#line 3122 "dhcp6_parser.cc" break; - case 533: // not_empty_option_data_list: not_empty_option_data_list "," -#line 1888 "dhcp6_parser.yy" + case 543: // not_empty_option_data_list: not_empty_option_data_list "," +#line 1914 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3092 "dhcp6_parser.cc" +#line 3130 "dhcp6_parser.cc" break; - case 534: // $@78: %empty -#line 1895 "dhcp6_parser.yy" + case 544: // $@80: %empty +#line 1921 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 3102 "dhcp6_parser.cc" +#line 3140 "dhcp6_parser.cc" break; - case 535: // option_data_entry: "{" $@78 option_data_params "}" -#line 1899 "dhcp6_parser.yy" + case 545: // option_data_entry: "{" $@80 option_data_params "}" +#line 1925 "dhcp6_parser.yy" { /// @todo: the code or name parameters are required. ctx.stack_.pop_back(); } -#line 3111 "dhcp6_parser.cc" +#line 3149 "dhcp6_parser.cc" break; - case 536: // $@79: %empty -#line 1907 "dhcp6_parser.yy" + case 546: // $@81: %empty +#line 1933 "dhcp6_parser.yy" { // Parse the option-data list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 3121 "dhcp6_parser.cc" +#line 3159 "dhcp6_parser.cc" break; - case 537: // sub_option_data: "{" $@79 option_data_params "}" -#line 1911 "dhcp6_parser.yy" + case 547: // sub_option_data: "{" $@81 option_data_params "}" +#line 1937 "dhcp6_parser.yy" { /// @todo: the code or name parameters are required. // parsing completed } -#line 3130 "dhcp6_parser.cc" +#line 3168 "dhcp6_parser.cc" break; - case 542: // not_empty_option_data_params: not_empty_option_data_params "," -#line 1927 "dhcp6_parser.yy" + case 552: // not_empty_option_data_params: not_empty_option_data_params "," +#line 1953 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3138 "dhcp6_parser.cc" +#line 3176 "dhcp6_parser.cc" break; - case 553: // $@80: %empty -#line 1947 "dhcp6_parser.yy" + case 563: // $@82: %empty +#line 1973 "dhcp6_parser.yy" { ctx.unique("data", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3147 "dhcp6_parser.cc" +#line 3185 "dhcp6_parser.cc" break; - case 554: // option_data_data: "data" $@80 ":" "constant string" -#line 1950 "dhcp6_parser.yy" + case 564: // option_data_data: "data" $@82 ":" "constant string" +#line 1976 "dhcp6_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 3157 "dhcp6_parser.cc" +#line 3195 "dhcp6_parser.cc" break; - case 557: // option_data_csv_format: "csv-format" ":" "boolean" -#line 1960 "dhcp6_parser.yy" + case 567: // option_data_csv_format: "csv-format" ":" "boolean" +#line 1986 "dhcp6_parser.yy" { ctx.unique("csv-format", ctx.loc2pos(yystack_[2].location)); ElementPtr space(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("csv-format", space); } -#line 3167 "dhcp6_parser.cc" +#line 3205 "dhcp6_parser.cc" break; - case 558: // option_data_always_send: "always-send" ":" "boolean" -#line 1966 "dhcp6_parser.yy" + case 568: // option_data_always_send: "always-send" ":" "boolean" +#line 1992 "dhcp6_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 3177 "dhcp6_parser.cc" +#line 3215 "dhcp6_parser.cc" break; - case 559: // $@81: %empty -#line 1975 "dhcp6_parser.yy" + case 569: // $@83: %empty +#line 2001 "dhcp6_parser.yy" { ctx.unique("pools", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3185,103 +3223,103 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.POOLS); } -#line 3189 "dhcp6_parser.cc" +#line 3227 "dhcp6_parser.cc" break; - case 560: // pools_list: "pools" $@81 ":" "[" pools_list_content "]" -#line 1981 "dhcp6_parser.yy" + case 570: // pools_list: "pools" $@83 ":" "[" pools_list_content "]" +#line 2007 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3198 "dhcp6_parser.cc" +#line 3236 "dhcp6_parser.cc" break; - case 565: // not_empty_pools_list: not_empty_pools_list "," -#line 1994 "dhcp6_parser.yy" + case 575: // not_empty_pools_list: not_empty_pools_list "," +#line 2020 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3206 "dhcp6_parser.cc" +#line 3244 "dhcp6_parser.cc" break; - case 566: // $@82: %empty -#line 1999 "dhcp6_parser.yy" + case 576: // $@84: %empty +#line 2025 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 3216 "dhcp6_parser.cc" +#line 3254 "dhcp6_parser.cc" break; - case 567: // pool_list_entry: "{" $@82 pool_params "}" -#line 2003 "dhcp6_parser.yy" + case 577: // pool_list_entry: "{" $@84 pool_params "}" +#line 2029 "dhcp6_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 3226 "dhcp6_parser.cc" +#line 3264 "dhcp6_parser.cc" break; - case 568: // $@83: %empty -#line 2009 "dhcp6_parser.yy" + case 578: // $@85: %empty +#line 2035 "dhcp6_parser.yy" { // Parse the pool list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 3236 "dhcp6_parser.cc" +#line 3274 "dhcp6_parser.cc" break; - case 569: // sub_pool6: "{" $@83 pool_params "}" -#line 2013 "dhcp6_parser.yy" + case 579: // sub_pool6: "{" $@85 pool_params "}" +#line 2039 "dhcp6_parser.yy" { // The pool parameter is required. ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 3246 "dhcp6_parser.cc" +#line 3284 "dhcp6_parser.cc" break; - case 572: // pool_params: pool_params "," -#line 2021 "dhcp6_parser.yy" + case 582: // pool_params: pool_params "," +#line 2047 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3254 "dhcp6_parser.cc" +#line 3292 "dhcp6_parser.cc" break; - case 580: // $@84: %empty -#line 2035 "dhcp6_parser.yy" + case 590: // $@86: %empty +#line 2061 "dhcp6_parser.yy" { ctx.unique("pool", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3263 "dhcp6_parser.cc" +#line 3301 "dhcp6_parser.cc" break; - case 581: // pool_entry: "pool" $@84 ":" "constant string" -#line 2038 "dhcp6_parser.yy" + case 591: // pool_entry: "pool" $@86 ":" "constant string" +#line 2064 "dhcp6_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 3273 "dhcp6_parser.cc" +#line 3311 "dhcp6_parser.cc" break; - case 582: // $@85: %empty -#line 2044 "dhcp6_parser.yy" + case 592: // $@87: %empty +#line 2070 "dhcp6_parser.yy" { ctx.enter(ctx.NO_KEYWORD); } -#line 3281 "dhcp6_parser.cc" +#line 3319 "dhcp6_parser.cc" break; - case 583: // user_context: "user-context" $@85 ":" map_value -#line 2046 "dhcp6_parser.yy" + case 593: // user_context: "user-context" $@87 ":" map_value +#line 2072 "dhcp6_parser.yy" { ElementPtr parent = ctx.stack_.back(); ElementPtr user_context = yystack_[0].value.as < ElementPtr > (); @@ -3304,19 +3342,19 @@ namespace isc { namespace dhcp { parent->set("user-context", user_context); ctx.leave(); } -#line 3308 "dhcp6_parser.cc" +#line 3346 "dhcp6_parser.cc" break; - case 584: // $@86: %empty -#line 2069 "dhcp6_parser.yy" + case 594: // $@88: %empty +#line 2095 "dhcp6_parser.yy" { ctx.enter(ctx.NO_KEYWORD); } -#line 3316 "dhcp6_parser.cc" +#line 3354 "dhcp6_parser.cc" break; - case 585: // comment: "comment" $@86 ":" "constant string" -#line 2071 "dhcp6_parser.yy" + case 595: // comment: "comment" $@88 ":" "constant string" +#line 2097 "dhcp6_parser.yy" { ElementPtr parent = ctx.stack_.back(); ElementPtr user_context(new MapElement(ctx.loc2pos(yystack_[3].location))); @@ -3341,11 +3379,11 @@ namespace isc { namespace dhcp { parent->set("user-context", user_context); ctx.leave(); } -#line 3345 "dhcp6_parser.cc" +#line 3383 "dhcp6_parser.cc" break; - case 586: // $@87: %empty -#line 2099 "dhcp6_parser.yy" + case 596: // $@89: %empty +#line 2125 "dhcp6_parser.yy" { ctx.unique("pd-pools", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3353,38 +3391,38 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.PD_POOLS); } -#line 3357 "dhcp6_parser.cc" +#line 3395 "dhcp6_parser.cc" break; - case 587: // pd_pools_list: "pd-pools" $@87 ":" "[" pd_pools_list_content "]" -#line 2105 "dhcp6_parser.yy" + case 597: // pd_pools_list: "pd-pools" $@89 ":" "[" pd_pools_list_content "]" +#line 2131 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3366 "dhcp6_parser.cc" +#line 3404 "dhcp6_parser.cc" break; - case 592: // not_empty_pd_pools_list: not_empty_pd_pools_list "," -#line 2118 "dhcp6_parser.yy" + case 602: // not_empty_pd_pools_list: not_empty_pd_pools_list "," +#line 2144 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3374 "dhcp6_parser.cc" +#line 3412 "dhcp6_parser.cc" break; - case 593: // $@88: %empty -#line 2123 "dhcp6_parser.yy" + case 603: // $@90: %empty +#line 2149 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 3384 "dhcp6_parser.cc" +#line 3422 "dhcp6_parser.cc" break; - case 594: // pd_pool_entry: "{" $@88 pd_pool_params "}" -#line 2127 "dhcp6_parser.yy" + case 604: // pd_pool_entry: "{" $@90 pd_pool_params "}" +#line 2153 "dhcp6_parser.yy" { // The prefix, prefix len and delegated len parameters are required. ctx.require("prefix", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); @@ -3392,21 +3430,21 @@ namespace isc { namespace dhcp { ctx.require("delegated-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 3396 "dhcp6_parser.cc" +#line 3434 "dhcp6_parser.cc" break; - case 595: // $@89: %empty -#line 2135 "dhcp6_parser.yy" + case 605: // $@91: %empty +#line 2161 "dhcp6_parser.yy" { // Parse the pd-pool list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 3406 "dhcp6_parser.cc" +#line 3444 "dhcp6_parser.cc" break; - case 596: // sub_pd_pool: "{" $@89 pd_pool_params "}" -#line 2139 "dhcp6_parser.yy" + case 606: // sub_pd_pool: "{" $@91 pd_pool_params "}" +#line 2165 "dhcp6_parser.yy" { // The prefix, prefix len and delegated len parameters are required. ctx.require("prefix", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); @@ -3414,87 +3452,87 @@ namespace isc { namespace dhcp { ctx.require("delegated-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 3418 "dhcp6_parser.cc" +#line 3456 "dhcp6_parser.cc" break; - case 599: // pd_pool_params: pd_pool_params "," -#line 2149 "dhcp6_parser.yy" + case 609: // pd_pool_params: pd_pool_params "," +#line 2175 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3426 "dhcp6_parser.cc" +#line 3464 "dhcp6_parser.cc" break; - case 611: // $@90: %empty -#line 2167 "dhcp6_parser.yy" + case 621: // $@92: %empty +#line 2193 "dhcp6_parser.yy" { ctx.unique("prefix", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3435 "dhcp6_parser.cc" +#line 3473 "dhcp6_parser.cc" break; - case 612: // pd_prefix: "prefix" $@90 ":" "constant string" -#line 2170 "dhcp6_parser.yy" + case 622: // pd_prefix: "prefix" $@92 ":" "constant string" +#line 2196 "dhcp6_parser.yy" { ElementPtr prf(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("prefix", prf); ctx.leave(); } -#line 3445 "dhcp6_parser.cc" +#line 3483 "dhcp6_parser.cc" break; - case 613: // pd_prefix_len: "prefix-len" ":" "integer" -#line 2176 "dhcp6_parser.yy" + case 623: // pd_prefix_len: "prefix-len" ":" "integer" +#line 2202 "dhcp6_parser.yy" { ctx.unique("prefix-len", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("prefix-len", prf); } -#line 3455 "dhcp6_parser.cc" +#line 3493 "dhcp6_parser.cc" break; - case 614: // $@91: %empty -#line 2182 "dhcp6_parser.yy" + case 624: // $@93: %empty +#line 2208 "dhcp6_parser.yy" { ctx.unique("excluded-prefix", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3464 "dhcp6_parser.cc" +#line 3502 "dhcp6_parser.cc" break; - case 615: // excluded_prefix: "excluded-prefix" $@91 ":" "constant string" -#line 2185 "dhcp6_parser.yy" + case 625: // excluded_prefix: "excluded-prefix" $@93 ":" "constant string" +#line 2211 "dhcp6_parser.yy" { ElementPtr prf(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("excluded-prefix", prf); ctx.leave(); } -#line 3474 "dhcp6_parser.cc" +#line 3512 "dhcp6_parser.cc" break; - case 616: // excluded_prefix_len: "excluded-prefix-len" ":" "integer" -#line 2191 "dhcp6_parser.yy" + case 626: // excluded_prefix_len: "excluded-prefix-len" ":" "integer" +#line 2217 "dhcp6_parser.yy" { ctx.unique("excluded-prefix-len", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("excluded-prefix-len", prf); } -#line 3484 "dhcp6_parser.cc" +#line 3522 "dhcp6_parser.cc" break; - case 617: // pd_delegated_len: "delegated-len" ":" "integer" -#line 2197 "dhcp6_parser.yy" + case 627: // pd_delegated_len: "delegated-len" ":" "integer" +#line 2223 "dhcp6_parser.yy" { ctx.unique("delegated-len", ctx.loc2pos(yystack_[2].location)); ElementPtr deleg(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("delegated-len", deleg); } -#line 3494 "dhcp6_parser.cc" +#line 3532 "dhcp6_parser.cc" break; - case 618: // $@92: %empty -#line 2206 "dhcp6_parser.yy" + case 628: // $@94: %empty +#line 2232 "dhcp6_parser.yy" { ctx.unique("reservations", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3502,74 +3540,74 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.RESERVATIONS); } -#line 3506 "dhcp6_parser.cc" +#line 3544 "dhcp6_parser.cc" break; - case 619: // reservations: "reservations" $@92 ":" "[" reservations_list "]" -#line 2212 "dhcp6_parser.yy" + case 629: // reservations: "reservations" $@94 ":" "[" reservations_list "]" +#line 2238 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3515 "dhcp6_parser.cc" +#line 3553 "dhcp6_parser.cc" break; - case 624: // not_empty_reservations_list: not_empty_reservations_list "," -#line 2223 "dhcp6_parser.yy" + case 634: // not_empty_reservations_list: not_empty_reservations_list "," +#line 2249 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3523 "dhcp6_parser.cc" +#line 3561 "dhcp6_parser.cc" break; - case 625: // $@93: %empty -#line 2228 "dhcp6_parser.yy" + case 635: // $@95: %empty +#line 2254 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 3533 "dhcp6_parser.cc" +#line 3571 "dhcp6_parser.cc" break; - case 626: // reservation: "{" $@93 reservation_params "}" -#line 2232 "dhcp6_parser.yy" + case 636: // reservation: "{" $@95 reservation_params "}" +#line 2258 "dhcp6_parser.yy" { /// @todo: an identifier parameter is required. ctx.stack_.pop_back(); } -#line 3542 "dhcp6_parser.cc" +#line 3580 "dhcp6_parser.cc" break; - case 627: // $@94: %empty -#line 2237 "dhcp6_parser.yy" + case 637: // $@96: %empty +#line 2263 "dhcp6_parser.yy" { // Parse the reservations list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 3552 "dhcp6_parser.cc" +#line 3590 "dhcp6_parser.cc" break; - case 628: // sub_reservation: "{" $@94 reservation_params "}" -#line 2241 "dhcp6_parser.yy" + case 638: // sub_reservation: "{" $@96 reservation_params "}" +#line 2267 "dhcp6_parser.yy" { /// @todo: an identifier parameter is required. // parsing completed } -#line 3561 "dhcp6_parser.cc" +#line 3599 "dhcp6_parser.cc" break; - case 633: // not_empty_reservation_params: not_empty_reservation_params "," -#line 2252 "dhcp6_parser.yy" + case 643: // not_empty_reservation_params: not_empty_reservation_params "," +#line 2278 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3569 "dhcp6_parser.cc" +#line 3607 "dhcp6_parser.cc" break; - case 645: // $@95: %empty -#line 2271 "dhcp6_parser.yy" + case 655: // $@97: %empty +#line 2297 "dhcp6_parser.yy" { ctx.unique("ip-addresses", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3577,20 +3615,20 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.NO_KEYWORD); } -#line 3581 "dhcp6_parser.cc" +#line 3619 "dhcp6_parser.cc" break; - case 646: // ip_addresses: "ip-addresses" $@95 ":" list_strings -#line 2277 "dhcp6_parser.yy" + case 656: // ip_addresses: "ip-addresses" $@97 ":" list_strings +#line 2303 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3590 "dhcp6_parser.cc" +#line 3628 "dhcp6_parser.cc" break; - case 647: // $@96: %empty -#line 2282 "dhcp6_parser.yy" + case 657: // $@98: %empty +#line 2308 "dhcp6_parser.yy" { ctx.unique("prefixes", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3598,96 +3636,96 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.NO_KEYWORD); } -#line 3602 "dhcp6_parser.cc" +#line 3640 "dhcp6_parser.cc" break; - case 648: // prefixes: "prefixes" $@96 ":" list_strings -#line 2288 "dhcp6_parser.yy" + case 658: // prefixes: "prefixes" $@98 ":" list_strings +#line 2314 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3611 "dhcp6_parser.cc" - break; - - case 649: // $@97: %empty -#line 2293 "dhcp6_parser.yy" - { - ctx.unique("duid", ctx.loc2pos(yystack_[0].location)); - ctx.enter(ctx.NO_KEYWORD); -} -#line 3620 "dhcp6_parser.cc" - break; - - case 650: // duid: "duid" $@97 ":" "constant string" -#line 2296 "dhcp6_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 3630 "dhcp6_parser.cc" - break; - - case 651: // $@98: %empty -#line 2302 "dhcp6_parser.yy" - { - ctx.unique("hw-address", ctx.loc2pos(yystack_[0].location)); - ctx.enter(ctx.NO_KEYWORD); -} -#line 3639 "dhcp6_parser.cc" - break; - - case 652: // hw_address: "hw-address" $@98 ":" "constant string" -#line 2305 "dhcp6_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 3649 "dhcp6_parser.cc" break; - case 653: // $@99: %empty -#line 2311 "dhcp6_parser.yy" - { - ctx.unique("hostname", ctx.loc2pos(yystack_[0].location)); + case 659: // $@99: %empty +#line 2319 "dhcp6_parser.yy" + { + ctx.unique("duid", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 3658 "dhcp6_parser.cc" break; - case 654: // hostname: "hostname" $@99 ":" "constant string" -#line 2314 "dhcp6_parser.yy" + case 660: // duid: "duid" $@99 ":" "constant string" +#line 2322 "dhcp6_parser.yy" { - ElementPtr host(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); - ctx.stack_.back()->set("hostname", host); + ElementPtr d(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("duid", d); ctx.leave(); } #line 3668 "dhcp6_parser.cc" break; - case 655: // $@100: %empty -#line 2320 "dhcp6_parser.yy" + case 661: // $@100: %empty +#line 2328 "dhcp6_parser.yy" { - ctx.unique("flex-id", ctx.loc2pos(yystack_[0].location)); + ctx.unique("hw-address", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 3677 "dhcp6_parser.cc" break; - case 656: // flex_id_value: "flex-id" $@100 ":" "constant string" -#line 2323 "dhcp6_parser.yy" + case 662: // hw_address: "hw-address" $@100 ":" "constant string" +#line 2331 "dhcp6_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.stack_.back()->set("hw-address", hw); ctx.leave(); } #line 3687 "dhcp6_parser.cc" break; - case 657: // $@101: %empty -#line 2329 "dhcp6_parser.yy" + case 663: // $@101: %empty +#line 2337 "dhcp6_parser.yy" + { + ctx.unique("hostname", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 3696 "dhcp6_parser.cc" + break; + + case 664: // hostname: "hostname" $@101 ":" "constant string" +#line 2340 "dhcp6_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 3706 "dhcp6_parser.cc" + break; + + case 665: // $@102: %empty +#line 2346 "dhcp6_parser.yy" + { + ctx.unique("flex-id", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 3715 "dhcp6_parser.cc" + break; + + case 666: // flex_id_value: "flex-id" $@102 ":" "constant string" +#line 2349 "dhcp6_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 3725 "dhcp6_parser.cc" + break; + + case 667: // $@103: %empty +#line 2355 "dhcp6_parser.yy" { ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location)); ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3695,20 +3733,20 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(c); ctx.enter(ctx.NO_KEYWORD); } -#line 3699 "dhcp6_parser.cc" +#line 3737 "dhcp6_parser.cc" break; - case 658: // reservation_client_classes: "client-classes" $@101 ":" list_strings -#line 2335 "dhcp6_parser.yy" + case 668: // reservation_client_classes: "client-classes" $@103 ":" list_strings +#line 2361 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3708 "dhcp6_parser.cc" +#line 3746 "dhcp6_parser.cc" break; - case 659: // $@102: %empty -#line 2343 "dhcp6_parser.yy" + case 669: // $@104: %empty +#line 2369 "dhcp6_parser.yy" { ctx.unique("relay", ctx.loc2pos(yystack_[0].location)); ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -3716,39 +3754,39 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(m); ctx.enter(ctx.RELAY); } -#line 3720 "dhcp6_parser.cc" +#line 3758 "dhcp6_parser.cc" break; - case 660: // relay: "relay" $@102 ":" "{" relay_map "}" -#line 2349 "dhcp6_parser.yy" + case 670: // relay: "relay" $@104 ":" "{" relay_map "}" +#line 2375 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3729 "dhcp6_parser.cc" +#line 3767 "dhcp6_parser.cc" break; - case 663: // $@103: %empty -#line 2358 "dhcp6_parser.yy" + case 673: // $@105: %empty +#line 2384 "dhcp6_parser.yy" { ctx.unique("ip-address", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3738 "dhcp6_parser.cc" +#line 3776 "dhcp6_parser.cc" break; - case 664: // ip_address: "ip-address" $@103 ":" "constant string" -#line 2361 "dhcp6_parser.yy" + case 674: // ip_address: "ip-address" $@105 ":" "constant string" +#line 2387 "dhcp6_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 3748 "dhcp6_parser.cc" +#line 3786 "dhcp6_parser.cc" break; - case 665: // $@104: %empty -#line 2370 "dhcp6_parser.yy" + case 675: // $@106: %empty +#line 2396 "dhcp6_parser.yy" { ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3756,104 +3794,104 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.CLIENT_CLASSES); } -#line 3760 "dhcp6_parser.cc" +#line 3798 "dhcp6_parser.cc" break; - case 666: // client_classes: "client-classes" $@104 ":" "[" client_classes_list "]" -#line 2376 "dhcp6_parser.yy" + case 676: // client_classes: "client-classes" $@106 ":" "[" client_classes_list "]" +#line 2402 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3769 "dhcp6_parser.cc" +#line 3807 "dhcp6_parser.cc" break; - case 669: // client_classes_list: client_classes_list "," -#line 2383 "dhcp6_parser.yy" + case 679: // client_classes_list: client_classes_list "," +#line 2409 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3777 "dhcp6_parser.cc" +#line 3815 "dhcp6_parser.cc" break; - case 670: // $@105: %empty -#line 2388 "dhcp6_parser.yy" + case 680: // $@107: %empty +#line 2414 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 3787 "dhcp6_parser.cc" +#line 3825 "dhcp6_parser.cc" break; - case 671: // client_class_entry: "{" $@105 client_class_params "}" -#line 2392 "dhcp6_parser.yy" + case 681: // client_class_entry: "{" $@107 client_class_params "}" +#line 2418 "dhcp6_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 3797 "dhcp6_parser.cc" +#line 3835 "dhcp6_parser.cc" break; - case 676: // not_empty_client_class_params: not_empty_client_class_params "," -#line 2404 "dhcp6_parser.yy" + case 686: // not_empty_client_class_params: not_empty_client_class_params "," +#line 2430 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3805 "dhcp6_parser.cc" +#line 3843 "dhcp6_parser.cc" break; - case 692: // $@106: %empty -#line 2427 "dhcp6_parser.yy" + case 702: // $@108: %empty +#line 2453 "dhcp6_parser.yy" { ctx.unique("test", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3814 "dhcp6_parser.cc" +#line 3852 "dhcp6_parser.cc" break; - case 693: // client_class_test: "test" $@106 ":" "constant string" -#line 2430 "dhcp6_parser.yy" + case 703: // client_class_test: "test" $@108 ":" "constant string" +#line 2456 "dhcp6_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 3824 "dhcp6_parser.cc" +#line 3862 "dhcp6_parser.cc" break; - case 694: // $@107: %empty -#line 2436 "dhcp6_parser.yy" + case 704: // $@109: %empty +#line 2462 "dhcp6_parser.yy" { ctx.unique("template-test", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3833 "dhcp6_parser.cc" +#line 3871 "dhcp6_parser.cc" break; - case 695: // client_class_template_test: "template-test" $@107 ":" "constant string" -#line 2439 "dhcp6_parser.yy" + case 705: // client_class_template_test: "template-test" $@109 ":" "constant string" +#line 2465 "dhcp6_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 3843 "dhcp6_parser.cc" +#line 3881 "dhcp6_parser.cc" break; - case 696: // only_if_required: "only-if-required" ":" "boolean" -#line 2445 "dhcp6_parser.yy" + case 706: // only_if_required: "only-if-required" ":" "boolean" +#line 2471 "dhcp6_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 3853 "dhcp6_parser.cc" +#line 3891 "dhcp6_parser.cc" break; - case 697: // $@108: %empty -#line 2454 "dhcp6_parser.yy" + case 707: // $@110: %empty +#line 2480 "dhcp6_parser.yy" { ctx.unique("server-id", ctx.loc2pos(yystack_[0].location)); ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -3861,125 +3899,125 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(m); ctx.enter(ctx.SERVER_ID); } -#line 3865 "dhcp6_parser.cc" +#line 3903 "dhcp6_parser.cc" break; - case 698: // server_id: "server-id" $@108 ":" "{" server_id_params "}" -#line 2460 "dhcp6_parser.yy" + case 708: // server_id: "server-id" $@110 ":" "{" server_id_params "}" +#line 2486 "dhcp6_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 3876 "dhcp6_parser.cc" +#line 3914 "dhcp6_parser.cc" break; - case 701: // server_id_params: server_id_params "," -#line 2469 "dhcp6_parser.yy" + case 711: // server_id_params: server_id_params "," +#line 2495 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3884 "dhcp6_parser.cc" +#line 3922 "dhcp6_parser.cc" break; - case 711: // $@109: %empty -#line 2485 "dhcp6_parser.yy" + case 721: // $@111: %empty +#line 2511 "dhcp6_parser.yy" { ctx.unique("type", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.DUID_TYPE); } -#line 3893 "dhcp6_parser.cc" +#line 3931 "dhcp6_parser.cc" break; - case 712: // server_id_type: "type" $@109 ":" duid_type -#line 2488 "dhcp6_parser.yy" + case 722: // server_id_type: "type" $@111 ":" duid_type +#line 2514 "dhcp6_parser.yy" { ctx.stack_.back()->set("type", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 3902 "dhcp6_parser.cc" +#line 3940 "dhcp6_parser.cc" break; - case 713: // duid_type: "LLT" -#line 2493 "dhcp6_parser.yy" + case 723: // duid_type: "LLT" +#line 2519 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("LLT", ctx.loc2pos(yystack_[0].location))); } -#line 3908 "dhcp6_parser.cc" +#line 3946 "dhcp6_parser.cc" break; - case 714: // duid_type: "EN" -#line 2494 "dhcp6_parser.yy" + case 724: // duid_type: "EN" +#line 2520 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("EN", ctx.loc2pos(yystack_[0].location))); } -#line 3914 "dhcp6_parser.cc" +#line 3952 "dhcp6_parser.cc" break; - case 715: // duid_type: "LL" -#line 2495 "dhcp6_parser.yy" + case 725: // duid_type: "LL" +#line 2521 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("LL", ctx.loc2pos(yystack_[0].location))); } -#line 3920 "dhcp6_parser.cc" +#line 3958 "dhcp6_parser.cc" break; - case 716: // htype: "htype" ":" "integer" -#line 2498 "dhcp6_parser.yy" + case 726: // htype: "htype" ":" "integer" +#line 2524 "dhcp6_parser.yy" { ctx.unique("htype", ctx.loc2pos(yystack_[2].location)); ElementPtr htype(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("htype", htype); } -#line 3930 "dhcp6_parser.cc" +#line 3968 "dhcp6_parser.cc" break; - case 717: // $@110: %empty -#line 2504 "dhcp6_parser.yy" + case 727: // $@112: %empty +#line 2530 "dhcp6_parser.yy" { ctx.unique("identifier", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3939 "dhcp6_parser.cc" +#line 3977 "dhcp6_parser.cc" break; - case 718: // identifier: "identifier" $@110 ":" "constant string" -#line 2507 "dhcp6_parser.yy" + case 728: // identifier: "identifier" $@112 ":" "constant string" +#line 2533 "dhcp6_parser.yy" { ElementPtr id(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("identifier", id); ctx.leave(); } -#line 3949 "dhcp6_parser.cc" +#line 3987 "dhcp6_parser.cc" break; - case 719: // time: "time" ":" "integer" -#line 2513 "dhcp6_parser.yy" + case 729: // time: "time" ":" "integer" +#line 2539 "dhcp6_parser.yy" { ctx.unique("time", ctx.loc2pos(yystack_[2].location)); ElementPtr time(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("time", time); } -#line 3959 "dhcp6_parser.cc" +#line 3997 "dhcp6_parser.cc" break; - case 720: // enterprise_id: "enterprise-id" ":" "integer" -#line 2519 "dhcp6_parser.yy" + case 730: // enterprise_id: "enterprise-id" ":" "integer" +#line 2545 "dhcp6_parser.yy" { ctx.unique("enterprise-id", ctx.loc2pos(yystack_[2].location)); ElementPtr time(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("enterprise-id", time); } -#line 3969 "dhcp6_parser.cc" +#line 4007 "dhcp6_parser.cc" break; - case 721: // dhcp4o6_port: "dhcp4o6-port" ":" "integer" -#line 2527 "dhcp6_parser.yy" + case 731: // dhcp4o6_port: "dhcp4o6-port" ":" "integer" +#line 2553 "dhcp6_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 3979 "dhcp6_parser.cc" +#line 4017 "dhcp6_parser.cc" break; - case 722: // $@111: %empty -#line 2535 "dhcp6_parser.yy" + case 732: // $@113: %empty +#line 2561 "dhcp6_parser.yy" { ctx.unique("control-socket", ctx.loc2pos(yystack_[0].location)); ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -3987,66 +4025,66 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(m); ctx.enter(ctx.CONTROL_SOCKET); } -#line 3991 "dhcp6_parser.cc" +#line 4029 "dhcp6_parser.cc" break; - case 723: // control_socket: "control-socket" $@111 ":" "{" control_socket_params "}" -#line 2541 "dhcp6_parser.yy" + case 733: // control_socket: "control-socket" $@113 ":" "{" control_socket_params "}" +#line 2567 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 4000 "dhcp6_parser.cc" +#line 4038 "dhcp6_parser.cc" break; - case 726: // control_socket_params: control_socket_params "," -#line 2548 "dhcp6_parser.yy" + case 736: // control_socket_params: control_socket_params "," +#line 2574 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4008 "dhcp6_parser.cc" +#line 4046 "dhcp6_parser.cc" break; - case 732: // $@112: %empty -#line 2560 "dhcp6_parser.yy" + case 742: // $@114: %empty +#line 2586 "dhcp6_parser.yy" { ctx.unique("socket-type", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4017 "dhcp6_parser.cc" +#line 4055 "dhcp6_parser.cc" break; - case 733: // socket_type: "socket-type" $@112 ":" "constant string" -#line 2563 "dhcp6_parser.yy" + case 743: // socket_type: "socket-type" $@114 ":" "constant string" +#line 2589 "dhcp6_parser.yy" { ElementPtr stype(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("socket-type", stype); ctx.leave(); } -#line 4027 "dhcp6_parser.cc" +#line 4065 "dhcp6_parser.cc" break; - case 734: // $@113: %empty -#line 2569 "dhcp6_parser.yy" + case 744: // $@115: %empty +#line 2595 "dhcp6_parser.yy" { ctx.unique("socket-name", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4036 "dhcp6_parser.cc" +#line 4074 "dhcp6_parser.cc" break; - case 735: // socket_name: "socket-name" $@113 ":" "constant string" -#line 2572 "dhcp6_parser.yy" + case 745: // socket_name: "socket-name" $@115 ":" "constant string" +#line 2598 "dhcp6_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 4046 "dhcp6_parser.cc" +#line 4084 "dhcp6_parser.cc" break; - case 736: // $@114: %empty -#line 2581 "dhcp6_parser.yy" + case 746: // $@116: %empty +#line 2607 "dhcp6_parser.yy" { ctx.unique("dhcp-queue-control", ctx.loc2pos(yystack_[0].location)); ElementPtr qc(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -4054,87 +4092,87 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(qc); ctx.enter(ctx.DHCP_QUEUE_CONTROL); } -#line 4058 "dhcp6_parser.cc" +#line 4096 "dhcp6_parser.cc" break; - case 737: // dhcp_queue_control: "dhcp-queue-control" $@114 ":" "{" queue_control_params "}" -#line 2587 "dhcp6_parser.yy" + case 747: // dhcp_queue_control: "dhcp-queue-control" $@116 ":" "{" queue_control_params "}" +#line 2613 "dhcp6_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 4069 "dhcp6_parser.cc" +#line 4107 "dhcp6_parser.cc" break; - case 740: // queue_control_params: queue_control_params "," -#line 2596 "dhcp6_parser.yy" + case 750: // queue_control_params: queue_control_params "," +#line 2622 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4077 "dhcp6_parser.cc" +#line 4115 "dhcp6_parser.cc" break; - case 747: // enable_queue: "enable-queue" ":" "boolean" -#line 2609 "dhcp6_parser.yy" + case 757: // enable_queue: "enable-queue" ":" "boolean" +#line 2635 "dhcp6_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 4087 "dhcp6_parser.cc" +#line 4125 "dhcp6_parser.cc" break; - case 748: // $@115: %empty -#line 2615 "dhcp6_parser.yy" + case 758: // $@117: %empty +#line 2641 "dhcp6_parser.yy" { ctx.unique("queue-type", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4096 "dhcp6_parser.cc" +#line 4134 "dhcp6_parser.cc" break; - case 749: // queue_type: "queue-type" $@115 ":" "constant string" -#line 2618 "dhcp6_parser.yy" + case 759: // queue_type: "queue-type" $@117 ":" "constant string" +#line 2644 "dhcp6_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 4106 "dhcp6_parser.cc" +#line 4144 "dhcp6_parser.cc" break; - case 750: // capacity: "capacity" ":" "integer" -#line 2624 "dhcp6_parser.yy" + case 760: // capacity: "capacity" ":" "integer" +#line 2650 "dhcp6_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 4116 "dhcp6_parser.cc" +#line 4154 "dhcp6_parser.cc" break; - case 751: // $@116: %empty -#line 2630 "dhcp6_parser.yy" + case 761: // $@118: %empty +#line 2656 "dhcp6_parser.yy" { ctx.unique(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4125 "dhcp6_parser.cc" +#line 4163 "dhcp6_parser.cc" break; - case 752: // arbitrary_map_entry: "constant string" $@116 ":" value -#line 2633 "dhcp6_parser.yy" + case 762: // arbitrary_map_entry: "constant string" $@118 ":" value +#line 2659 "dhcp6_parser.yy" { ctx.stack_.back()->set(yystack_[3].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 4134 "dhcp6_parser.cc" +#line 4172 "dhcp6_parser.cc" break; - case 753: // $@117: %empty -#line 2640 "dhcp6_parser.yy" + case 763: // $@119: %empty +#line 2666 "dhcp6_parser.yy" { ctx.unique("dhcp-ddns", ctx.loc2pos(yystack_[0].location)); ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -4142,291 +4180,291 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(m); ctx.enter(ctx.DHCP_DDNS); } -#line 4146 "dhcp6_parser.cc" +#line 4184 "dhcp6_parser.cc" break; - case 754: // dhcp_ddns: "dhcp-ddns" $@117 ":" "{" dhcp_ddns_params "}" -#line 2646 "dhcp6_parser.yy" + case 764: // dhcp_ddns: "dhcp-ddns" $@119 ":" "{" dhcp_ddns_params "}" +#line 2672 "dhcp6_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 4157 "dhcp6_parser.cc" +#line 4195 "dhcp6_parser.cc" break; - case 755: // $@118: %empty -#line 2653 "dhcp6_parser.yy" + case 765: // $@120: %empty +#line 2679 "dhcp6_parser.yy" { // Parse the dhcp-ddns map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 4167 "dhcp6_parser.cc" +#line 4205 "dhcp6_parser.cc" break; - case 756: // sub_dhcp_ddns: "{" $@118 dhcp_ddns_params "}" -#line 2657 "dhcp6_parser.yy" + case 766: // sub_dhcp_ddns: "{" $@120 dhcp_ddns_params "}" +#line 2683 "dhcp6_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 4177 "dhcp6_parser.cc" +#line 4215 "dhcp6_parser.cc" break; - case 759: // dhcp_ddns_params: dhcp_ddns_params "," -#line 2665 "dhcp6_parser.yy" + case 769: // dhcp_ddns_params: dhcp_ddns_params "," +#line 2691 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4185 "dhcp6_parser.cc" +#line 4223 "dhcp6_parser.cc" break; - case 778: // enable_updates: "enable-updates" ":" "boolean" -#line 2690 "dhcp6_parser.yy" + case 788: // enable_updates: "enable-updates" ":" "boolean" +#line 2716 "dhcp6_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 4195 "dhcp6_parser.cc" +#line 4233 "dhcp6_parser.cc" break; - case 779: // $@119: %empty -#line 2697 "dhcp6_parser.yy" + case 789: // $@121: %empty +#line 2723 "dhcp6_parser.yy" { ctx.unique("qualifying-suffix", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4204 "dhcp6_parser.cc" +#line 4242 "dhcp6_parser.cc" break; - case 780: // dep_qualifying_suffix: "qualifying-suffix" $@119 ":" "constant string" -#line 2700 "dhcp6_parser.yy" + case 790: // dep_qualifying_suffix: "qualifying-suffix" $@121 ":" "constant string" +#line 2726 "dhcp6_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("qualifying-suffix", s); ctx.leave(); } -#line 4214 "dhcp6_parser.cc" +#line 4252 "dhcp6_parser.cc" break; - case 781: // $@120: %empty -#line 2706 "dhcp6_parser.yy" + case 791: // $@122: %empty +#line 2732 "dhcp6_parser.yy" { ctx.unique("server-ip", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4223 "dhcp6_parser.cc" +#line 4261 "dhcp6_parser.cc" break; - case 782: // server_ip: "server-ip" $@120 ":" "constant string" -#line 2709 "dhcp6_parser.yy" + case 792: // server_ip: "server-ip" $@122 ":" "constant string" +#line 2735 "dhcp6_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 4233 "dhcp6_parser.cc" +#line 4271 "dhcp6_parser.cc" break; - case 783: // server_port: "server-port" ":" "integer" -#line 2715 "dhcp6_parser.yy" + case 793: // server_port: "server-port" ":" "integer" +#line 2741 "dhcp6_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 4243 "dhcp6_parser.cc" +#line 4281 "dhcp6_parser.cc" break; - case 784: // $@121: %empty -#line 2721 "dhcp6_parser.yy" + case 794: // $@123: %empty +#line 2747 "dhcp6_parser.yy" { ctx.unique("sender-ip", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4252 "dhcp6_parser.cc" +#line 4290 "dhcp6_parser.cc" break; - case 785: // sender_ip: "sender-ip" $@121 ":" "constant string" -#line 2724 "dhcp6_parser.yy" + case 795: // sender_ip: "sender-ip" $@123 ":" "constant string" +#line 2750 "dhcp6_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 4262 "dhcp6_parser.cc" +#line 4300 "dhcp6_parser.cc" break; - case 786: // sender_port: "sender-port" ":" "integer" -#line 2730 "dhcp6_parser.yy" + case 796: // sender_port: "sender-port" ":" "integer" +#line 2756 "dhcp6_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 4272 "dhcp6_parser.cc" +#line 4310 "dhcp6_parser.cc" break; - case 787: // max_queue_size: "max-queue-size" ":" "integer" -#line 2736 "dhcp6_parser.yy" + case 797: // max_queue_size: "max-queue-size" ":" "integer" +#line 2762 "dhcp6_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 4282 "dhcp6_parser.cc" +#line 4320 "dhcp6_parser.cc" break; - case 788: // $@122: %empty -#line 2742 "dhcp6_parser.yy" + case 798: // $@124: %empty +#line 2768 "dhcp6_parser.yy" { ctx.unique("ncr-protocol", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NCR_PROTOCOL); } -#line 4291 "dhcp6_parser.cc" +#line 4329 "dhcp6_parser.cc" break; - case 789: // ncr_protocol: "ncr-protocol" $@122 ":" ncr_protocol_value -#line 2745 "dhcp6_parser.yy" + case 799: // ncr_protocol: "ncr-protocol" $@124 ":" ncr_protocol_value +#line 2771 "dhcp6_parser.yy" { ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 4300 "dhcp6_parser.cc" +#line 4338 "dhcp6_parser.cc" break; - case 790: // ncr_protocol_value: "UDP" -#line 2751 "dhcp6_parser.yy" + case 800: // ncr_protocol_value: "UDP" +#line 2777 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); } -#line 4306 "dhcp6_parser.cc" +#line 4344 "dhcp6_parser.cc" break; - case 791: // ncr_protocol_value: "TCP" -#line 2752 "dhcp6_parser.yy" + case 801: // ncr_protocol_value: "TCP" +#line 2778 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); } -#line 4312 "dhcp6_parser.cc" +#line 4350 "dhcp6_parser.cc" break; - case 792: // $@123: %empty -#line 2755 "dhcp6_parser.yy" + case 802: // $@125: %empty +#line 2781 "dhcp6_parser.yy" { ctx.unique("ncr-format", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NCR_FORMAT); } -#line 4321 "dhcp6_parser.cc" +#line 4359 "dhcp6_parser.cc" break; - case 793: // ncr_format: "ncr-format" $@123 ":" "JSON" -#line 2758 "dhcp6_parser.yy" + case 803: // ncr_format: "ncr-format" $@125 ":" "JSON" +#line 2784 "dhcp6_parser.yy" { ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ncr-format", json); ctx.leave(); } -#line 4331 "dhcp6_parser.cc" +#line 4369 "dhcp6_parser.cc" break; - case 794: // dep_override_no_update: "override-no-update" ":" "boolean" -#line 2765 "dhcp6_parser.yy" + case 804: // dep_override_no_update: "override-no-update" ":" "boolean" +#line 2791 "dhcp6_parser.yy" { ctx.unique("override-no-update", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("override-no-update", b); } -#line 4341 "dhcp6_parser.cc" +#line 4379 "dhcp6_parser.cc" break; - case 795: // dep_override_client_update: "override-client-update" ":" "boolean" -#line 2772 "dhcp6_parser.yy" + case 805: // dep_override_client_update: "override-client-update" ":" "boolean" +#line 2798 "dhcp6_parser.yy" { ctx.unique("override-client-update", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("override-client-update", b); } -#line 4351 "dhcp6_parser.cc" +#line 4389 "dhcp6_parser.cc" break; - case 796: // $@124: %empty -#line 2779 "dhcp6_parser.yy" + case 806: // $@126: %empty +#line 2805 "dhcp6_parser.yy" { ctx.unique("replace-client-name", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.REPLACE_CLIENT_NAME); } -#line 4360 "dhcp6_parser.cc" +#line 4398 "dhcp6_parser.cc" break; - case 797: // dep_replace_client_name: "replace-client-name" $@124 ":" ddns_replace_client_name_value -#line 2782 "dhcp6_parser.yy" + case 807: // dep_replace_client_name: "replace-client-name" $@126 ":" ddns_replace_client_name_value +#line 2808 "dhcp6_parser.yy" { ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 4369 "dhcp6_parser.cc" - break; - - case 798: // $@125: %empty -#line 2788 "dhcp6_parser.yy" - { - ctx.unique("generated-prefix", ctx.loc2pos(yystack_[0].location)); - ctx.enter(ctx.NO_KEYWORD); -} -#line 4378 "dhcp6_parser.cc" - break; - - case 799: // dep_generated_prefix: "generated-prefix" $@125 ":" "constant string" -#line 2791 "dhcp6_parser.yy" - { - ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); - ctx.stack_.back()->set("generated-prefix", s); - ctx.leave(); -} -#line 4388 "dhcp6_parser.cc" - break; - - case 800: // $@126: %empty -#line 2798 "dhcp6_parser.yy" - { - ctx.unique("hostname-char-set", ctx.loc2pos(yystack_[0].location)); - ctx.enter(ctx.NO_KEYWORD); -} -#line 4397 "dhcp6_parser.cc" - break; - - case 801: // dep_hostname_char_set: "hostname-char-set" $@126 ":" "constant string" -#line 2801 "dhcp6_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 4407 "dhcp6_parser.cc" break; - case 802: // $@127: %empty -#line 2808 "dhcp6_parser.yy" - { - ctx.unique("hostname-char-replacement", ctx.loc2pos(yystack_[0].location)); + case 808: // $@127: %empty +#line 2814 "dhcp6_parser.yy" + { + ctx.unique("generated-prefix", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 4416 "dhcp6_parser.cc" break; - case 803: // dep_hostname_char_replacement: "hostname-char-replacement" $@127 ":" "constant string" -#line 2811 "dhcp6_parser.yy" + case 809: // dep_generated_prefix: "generated-prefix" $@127 ":" "constant string" +#line 2817 "dhcp6_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.stack_.back()->set("generated-prefix", s); ctx.leave(); } #line 4426 "dhcp6_parser.cc" break; - case 804: // $@128: %empty -#line 2820 "dhcp6_parser.yy" + case 810: // $@128: %empty +#line 2824 "dhcp6_parser.yy" + { + ctx.unique("hostname-char-set", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 4435 "dhcp6_parser.cc" + break; + + case 811: // dep_hostname_char_set: "hostname-char-set" $@128 ":" "constant string" +#line 2827 "dhcp6_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 4445 "dhcp6_parser.cc" + break; + + case 812: // $@129: %empty +#line 2834 "dhcp6_parser.yy" + { + ctx.unique("hostname-char-replacement", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 4454 "dhcp6_parser.cc" + break; + + case 813: // dep_hostname_char_replacement: "hostname-char-replacement" $@129 ":" "constant string" +#line 2837 "dhcp6_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 4464 "dhcp6_parser.cc" + break; + + case 814: // $@130: %empty +#line 2846 "dhcp6_parser.yy" { ctx.unique("config-control", ctx.loc2pos(yystack_[0].location)); ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -4434,48 +4472,48 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(i); ctx.enter(ctx.CONFIG_CONTROL); } -#line 4438 "dhcp6_parser.cc" +#line 4476 "dhcp6_parser.cc" break; - case 805: // config_control: "config-control" $@128 ":" "{" config_control_params "}" -#line 2826 "dhcp6_parser.yy" + case 815: // config_control: "config-control" $@130 ":" "{" config_control_params "}" +#line 2852 "dhcp6_parser.yy" { // No config control params are required ctx.stack_.pop_back(); ctx.leave(); } -#line 4448 "dhcp6_parser.cc" +#line 4486 "dhcp6_parser.cc" break; - case 806: // $@129: %empty -#line 2832 "dhcp6_parser.yy" + case 816: // $@131: %empty +#line 2858 "dhcp6_parser.yy" { // Parse the config-control map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 4458 "dhcp6_parser.cc" +#line 4496 "dhcp6_parser.cc" break; - case 807: // sub_config_control: "{" $@129 config_control_params "}" -#line 2836 "dhcp6_parser.yy" + case 817: // sub_config_control: "{" $@131 config_control_params "}" +#line 2862 "dhcp6_parser.yy" { // No config_control params are required // parsing completed } -#line 4467 "dhcp6_parser.cc" +#line 4505 "dhcp6_parser.cc" break; - case 810: // config_control_params: config_control_params "," -#line 2844 "dhcp6_parser.yy" + case 820: // config_control_params: config_control_params "," +#line 2870 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4475 "dhcp6_parser.cc" +#line 4513 "dhcp6_parser.cc" break; - case 813: // $@130: %empty -#line 2854 "dhcp6_parser.yy" + case 823: // $@132: %empty +#line 2880 "dhcp6_parser.yy" { ctx.unique("config-databases", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -4483,30 +4521,30 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.CONFIG_DATABASE); } -#line 4487 "dhcp6_parser.cc" +#line 4525 "dhcp6_parser.cc" break; - case 814: // config_databases: "config-databases" $@130 ":" "[" database_list "]" -#line 2860 "dhcp6_parser.yy" + case 824: // config_databases: "config-databases" $@132 ":" "[" database_list "]" +#line 2886 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 4496 "dhcp6_parser.cc" +#line 4534 "dhcp6_parser.cc" break; - case 815: // config_fetch_wait_time: "config-fetch-wait-time" ":" "integer" -#line 2865 "dhcp6_parser.yy" + case 825: // config_fetch_wait_time: "config-fetch-wait-time" ":" "integer" +#line 2891 "dhcp6_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 4506 "dhcp6_parser.cc" +#line 4544 "dhcp6_parser.cc" break; - case 816: // $@131: %empty -#line 2873 "dhcp6_parser.yy" + case 826: // $@133: %empty +#line 2899 "dhcp6_parser.yy" { ctx.unique("loggers", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -4514,83 +4552,83 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.LOGGERS); } -#line 4518 "dhcp6_parser.cc" +#line 4556 "dhcp6_parser.cc" break; - case 817: // loggers: "loggers" $@131 ":" "[" loggers_entries "]" -#line 2879 "dhcp6_parser.yy" + case 827: // loggers: "loggers" $@133 ":" "[" loggers_entries "]" +#line 2905 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 4527 "dhcp6_parser.cc" +#line 4565 "dhcp6_parser.cc" break; - case 820: // loggers_entries: loggers_entries "," -#line 2888 "dhcp6_parser.yy" + case 830: // loggers_entries: loggers_entries "," +#line 2914 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4535 "dhcp6_parser.cc" +#line 4573 "dhcp6_parser.cc" break; - case 821: // $@132: %empty -#line 2894 "dhcp6_parser.yy" + case 831: // $@134: %empty +#line 2920 "dhcp6_parser.yy" { ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(l); ctx.stack_.push_back(l); } -#line 4545 "dhcp6_parser.cc" +#line 4583 "dhcp6_parser.cc" break; - case 822: // logger_entry: "{" $@132 logger_params "}" -#line 2898 "dhcp6_parser.yy" + case 832: // logger_entry: "{" $@134 logger_params "}" +#line 2924 "dhcp6_parser.yy" { ctx.stack_.pop_back(); } -#line 4553 "dhcp6_parser.cc" +#line 4591 "dhcp6_parser.cc" break; - case 825: // logger_params: logger_params "," -#line 2904 "dhcp6_parser.yy" + case 835: // logger_params: logger_params "," +#line 2930 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4561 "dhcp6_parser.cc" +#line 4599 "dhcp6_parser.cc" break; - case 833: // debuglevel: "debuglevel" ":" "integer" -#line 2918 "dhcp6_parser.yy" + case 843: // debuglevel: "debuglevel" ":" "integer" +#line 2944 "dhcp6_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 4571 "dhcp6_parser.cc" +#line 4609 "dhcp6_parser.cc" break; - case 834: // $@133: %empty -#line 2924 "dhcp6_parser.yy" + case 844: // $@135: %empty +#line 2950 "dhcp6_parser.yy" { ctx.unique("severity", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4580 "dhcp6_parser.cc" +#line 4618 "dhcp6_parser.cc" break; - case 835: // severity: "severity" $@133 ":" "constant string" -#line 2927 "dhcp6_parser.yy" + case 845: // severity: "severity" $@135 ":" "constant string" +#line 2953 "dhcp6_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 4590 "dhcp6_parser.cc" +#line 4628 "dhcp6_parser.cc" break; - case 836: // $@134: %empty -#line 2933 "dhcp6_parser.yy" + case 846: // $@136: %empty +#line 2959 "dhcp6_parser.yy" { ctx.unique("output_options", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -4598,122 +4636,122 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.OUTPUT_OPTIONS); } -#line 4602 "dhcp6_parser.cc" +#line 4640 "dhcp6_parser.cc" break; - case 837: // output_options_list: "output_options" $@134 ":" "[" output_options_list_content "]" -#line 2939 "dhcp6_parser.yy" + case 847: // output_options_list: "output_options" $@136 ":" "[" output_options_list_content "]" +#line 2965 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 4611 "dhcp6_parser.cc" +#line 4649 "dhcp6_parser.cc" break; - case 840: // output_options_list_content: output_options_list_content "," -#line 2946 "dhcp6_parser.yy" + case 850: // output_options_list_content: output_options_list_content "," +#line 2972 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4619 "dhcp6_parser.cc" +#line 4657 "dhcp6_parser.cc" break; - case 841: // $@135: %empty -#line 2951 "dhcp6_parser.yy" + case 851: // $@137: %empty +#line 2977 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 4629 "dhcp6_parser.cc" +#line 4667 "dhcp6_parser.cc" break; - case 842: // output_entry: "{" $@135 output_params_list "}" -#line 2955 "dhcp6_parser.yy" + case 852: // output_entry: "{" $@137 output_params_list "}" +#line 2981 "dhcp6_parser.yy" { ctx.stack_.pop_back(); } -#line 4637 "dhcp6_parser.cc" +#line 4675 "dhcp6_parser.cc" break; - case 845: // output_params_list: output_params_list "," -#line 2961 "dhcp6_parser.yy" + case 855: // output_params_list: output_params_list "," +#line 2987 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4645 "dhcp6_parser.cc" +#line 4683 "dhcp6_parser.cc" break; - case 851: // $@136: %empty -#line 2973 "dhcp6_parser.yy" + case 861: // $@138: %empty +#line 2999 "dhcp6_parser.yy" { ctx.unique("output", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4654 "dhcp6_parser.cc" +#line 4692 "dhcp6_parser.cc" break; - case 852: // output: "output" $@136 ":" "constant string" -#line 2976 "dhcp6_parser.yy" + case 862: // output: "output" $@138 ":" "constant string" +#line 3002 "dhcp6_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 4664 "dhcp6_parser.cc" +#line 4702 "dhcp6_parser.cc" break; - case 853: // flush: "flush" ":" "boolean" -#line 2982 "dhcp6_parser.yy" + case 863: // flush: "flush" ":" "boolean" +#line 3008 "dhcp6_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 4674 "dhcp6_parser.cc" +#line 4712 "dhcp6_parser.cc" break; - case 854: // maxsize: "maxsize" ":" "integer" -#line 2988 "dhcp6_parser.yy" + case 864: // maxsize: "maxsize" ":" "integer" +#line 3014 "dhcp6_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 4684 "dhcp6_parser.cc" +#line 4722 "dhcp6_parser.cc" break; - case 855: // maxver: "maxver" ":" "integer" -#line 2994 "dhcp6_parser.yy" + case 865: // maxver: "maxver" ":" "integer" +#line 3020 "dhcp6_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 4694 "dhcp6_parser.cc" +#line 4732 "dhcp6_parser.cc" break; - case 856: // $@137: %empty -#line 3000 "dhcp6_parser.yy" + case 866: // $@139: %empty +#line 3026 "dhcp6_parser.yy" { ctx.unique("pattern", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4703 "dhcp6_parser.cc" +#line 4741 "dhcp6_parser.cc" break; - case 857: // pattern: "pattern" $@137 ":" "constant string" -#line 3003 "dhcp6_parser.yy" + case 867: // pattern: "pattern" $@139 ":" "constant string" +#line 3029 "dhcp6_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 4713 "dhcp6_parser.cc" +#line 4751 "dhcp6_parser.cc" break; - case 858: // $@138: %empty -#line 3009 "dhcp6_parser.yy" + case 868: // $@140: %empty +#line 3035 "dhcp6_parser.yy" { ctx.unique("compatibility", ctx.loc2pos(yystack_[0].location)); ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -4721,38 +4759,38 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(i); ctx.enter(ctx.COMPATIBILITY); } -#line 4725 "dhcp6_parser.cc" +#line 4763 "dhcp6_parser.cc" break; - case 859: // compatibility: "compatibility" $@138 ":" "{" compatibility_params "}" -#line 3015 "dhcp6_parser.yy" + case 869: // compatibility: "compatibility" $@140 ":" "{" compatibility_params "}" +#line 3041 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 4734 "dhcp6_parser.cc" +#line 4772 "dhcp6_parser.cc" break; - case 862: // compatibility_params: compatibility_params "," -#line 3022 "dhcp6_parser.yy" + case 872: // compatibility_params: compatibility_params "," +#line 3048 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4742 "dhcp6_parser.cc" +#line 4780 "dhcp6_parser.cc" break; - case 865: // lenient_option_parsing: "lenient-option-parsing" ":" "boolean" -#line 3031 "dhcp6_parser.yy" + case 875: // lenient_option_parsing: "lenient-option-parsing" ":" "boolean" +#line 3057 "dhcp6_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 4752 "dhcp6_parser.cc" +#line 4790 "dhcp6_parser.cc" break; -#line 4756 "dhcp6_parser.cc" +#line 4794 "dhcp6_parser.cc" default: break; @@ -5104,147 +5142,148 @@ namespace isc { namespace dhcp { } - const short Dhcp6Parser::yypact_ninf_ = -997; + const short Dhcp6Parser::yypact_ninf_ = -1009; const signed char Dhcp6Parser::yytable_ninf_ = -1; const short Dhcp6Parser::yypact_[] = { - 526, -997, -997, -997, -997, -997, -997, -997, -997, -997, - -997, -997, -997, -997, -997, 43, 35, 79, 98, 116, - 136, 146, 166, 167, 219, 236, 237, 239, 278, 288, - -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, - -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, - -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, - -997, -997, -997, -997, -997, -997, -997, -997, 35, -147, - 154, 129, 63, 562, 352, 287, 290, 142, 198, 20, - -87, 696, 40, -997, 282, 294, 299, 283, 303, -997, - 49, -997, -997, -997, -997, -997, -997, -997, 305, 313, - 349, 366, 369, 390, 391, 396, 398, 399, 401, 403, - 405, 407, -997, 408, 415, 418, 419, 422, -997, -997, - -997, 424, 429, 430, -997, -997, -997, 435, -997, -997, - -997, -997, 437, 439, 440, -997, -997, -997, -997, -997, - -997, -997, -997, -997, 441, -997, -997, -997, -997, -997, - -997, 442, 445, 446, -997, -997, 447, -997, 58, -997, - -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, - -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, - -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, - -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, - -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, - -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, - -997, -997, -997, -997, -997, 448, 451, 452, 454, -997, - 101, -997, -997, -997, -997, -997, -997, -997, -997, -997, - -997, -997, -997, -997, 455, 456, -997, -997, -997, -997, - -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, - -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, - -997, -997, -997, -997, 105, -997, -997, -997, -997, -997, - -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, - -997, -997, -997, -997, -997, -997, -997, -997, -997, 158, - -997, -997, -997, -997, -997, 457, -997, 458, 459, -997, - -997, -997, -997, -997, -997, 159, -997, -997, -997, -997, - -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, - -997, -997, -997, 328, 304, -997, -997, -997, -997, -997, - -997, -997, -997, 462, -997, -997, 463, -997, -997, -997, - 467, -997, -997, 469, 330, -997, -997, -997, -997, -997, - -997, -997, -997, -997, -997, -997, -997, -997, 474, 476, - -997, -997, -997, -997, 473, 484, -997, -997, -997, -997, - -997, -997, -997, -997, -997, -997, -997, -997, 202, -997, - -997, -997, 486, -997, -997, 488, -997, 490, 492, -997, - -997, 493, 500, -997, -997, -997, -997, -997, -997, -997, - 205, -997, -997, -997, -997, -997, -997, -997, -997, -997, - -997, -997, -997, -997, -997, -997, -997, -997, 501, 209, - -997, -997, -997, -997, 35, 35, -997, 254, 503, -997, - -997, 504, 513, 514, 517, 519, 520, 275, 317, 318, - 320, 321, 322, 323, 334, 312, 335, 336, 337, 343, - 347, 524, 348, 350, 333, 353, 355, 525, 539, 540, - 356, 359, 363, 561, 563, 571, 367, 577, 578, 579, - 581, 371, 373, 377, 589, 591, 592, 594, 595, 596, - 598, 599, 600, 392, 602, 603, 604, 618, 619, 620, - 410, 420, 421, 634, 635, -997, 129, -997, 636, 426, - 427, 431, 432, 63, -997, 639, 642, 643, 644, 646, - 443, 438, 650, 661, 663, 562, -997, 664, 352, -997, - 668, 460, 670, 464, 465, 287, -997, 671, 672, 676, - 677, 678, 681, 682, -997, 290, -997, 683, 689, 481, - 691, 693, 694, 489, -997, 198, 701, 491, 494, -997, - 20, 703, 704, -65, -997, 495, 707, 709, 502, 710, - 505, 506, 712, 713, 507, 523, 716, 717, 735, 736, - 696, -997, 737, 529, 40, -997, -997, -997, 739, 740, - 534, 741, 742, 743, 744, 747, -997, -997, -997, -997, - -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, - 541, -997, -997, -997, -997, -997, -50, 542, 543, -997, - -997, -997, 770, 771, 772, -997, 783, 786, 582, 326, - -997, -997, -997, 790, 791, 792, 793, 794, 796, 797, - 798, 799, -997, 800, 801, 804, 807, 586, 605, -997, - -997, -997, 813, 812, -997, 815, -997, -997, -997, -997, - -997, 819, 820, 614, 615, 616, -997, -997, 815, 617, - 823, -997, 621, -997, 622, -997, 624, -997, -997, -997, - 815, 815, 815, 625, 626, 627, 628, -997, 629, 630, - -997, 632, 633, 637, -997, -997, 638, -997, -997, -997, - 640, 786, -997, -997, 641, 645, -997, 659, -997, -997, - -64, 655, -997, -997, -50, 660, 662, 665, -997, 841, - -997, -997, 35, 129, -997, 40, 63, 314, 314, 840, - -997, -997, -997, -997, -997, -997, -997, -997, -997, 844, - 847, 848, 849, -997, -997, -997, -997, -997, -997, -997, - -997, -86, 35, 8, 144, 866, 868, 869, 117, 23, - -5, -1, 61, 696, -997, -997, 873, -156, -997, -997, - 874, 875, -997, -997, -997, -997, -997, -72, -997, -997, - -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, - -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, - -997, -997, -997, -997, -997, -997, -997, 840, -997, 215, - 225, 226, -997, -997, -997, -997, 879, 880, 881, 882, - 883, 884, 885, -997, 886, -997, -997, -997, -997, -997, - 258, -997, -997, -997, -997, -997, -997, -997, -997, -997, - -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, - 281, -997, 842, 888, -997, -997, 887, 889, -997, -997, - 892, 891, -997, -997, 893, 897, -997, -997, 895, 899, - -997, -997, -997, 71, -997, -997, -997, 898, -997, -997, - -997, 157, -997, -997, -997, -997, -997, 284, -997, -997, - -997, -997, 169, -997, -997, 900, 902, -997, -997, 901, - 906, -997, 907, 908, 909, 910, 911, 912, 302, -997, - -997, -997, -997, -997, -997, -997, -997, -997, 913, 914, - 915, -997, -997, -997, -997, 315, -997, -997, -997, -997, - -997, -997, 916, 917, 918, -997, 316, -997, -997, -997, - -997, -997, -997, -997, -997, -997, -997, -997, 329, -997, - -997, -997, 919, -997, 920, -997, -997, -997, 331, -997, - -997, -997, -997, -997, 332, -997, 203, -997, 921, -997, - 358, -997, -997, 698, -997, 922, 924, -997, -997, 923, - 927, -997, -997, -997, 795, -997, 925, -997, -997, -997, - 928, 929, 930, 931, 690, 680, 723, 722, 725, 726, - 727, 937, 730, 940, 942, 943, 945, 314, -997, -997, - 314, -997, 840, 562, -997, 844, 198, -997, 847, 20, - -997, 848, 714, -997, 849, -86, -997, -997, 8, -997, - 946, 948, 144, -997, 279, 866, -997, 290, -997, 868, - -87, -997, 869, 745, 748, 755, 759, 769, 773, 117, - -997, 950, 951, 774, 784, 789, 23, -997, 768, 805, - 809, -5, -997, 980, 1000, -1, -997, 802, 1002, 811, - 1021, 61, -997, -997, 325, 873, -997, 824, -156, -997, - -997, 1024, 1032, 352, -997, 874, 287, -997, 875, 1041, - -997, -997, 242, 853, 862, 878, -997, -997, -997, -997, - -997, -997, -997, 397, -997, 890, 894, 896, 903, -997, - 360, -997, 361, -997, 1084, -997, 1087, -997, -997, -997, - -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, - -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, - -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, - -997, -997, -997, -997, 364, -997, -997, -997, -997, -997, - -997, -997, -997, 904, 905, -997, -997, -997, 1093, -997, - -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, - 1091, 1097, -997, -997, -997, -997, -997, -997, 1095, -997, - 368, -997, -997, -997, -997, -997, -997, -997, -997, 178, - 926, -997, -997, -997, -997, -997, -997, -997, -997, 932, - 933, -997, -997, 934, -997, 35, -997, -997, 1101, -997, - -997, -997, -997, -997, 381, -997, -997, -997, -997, -997, - -997, -997, -997, 935, 384, -997, 385, -997, 936, -997, - -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, - -997, -997, -997, -997, -997, -997, -997, -997, 714, -997, - -997, -997, 1103, 1105, 938, -997, 279, -997, -997, -997, - -997, -997, -997, -997, -997, -997, -997, -997, 1106, 939, - 1107, 325, -997, -997, -997, -997, -997, -997, 944, 947, - -997, -997, 1108, -997, 949, -997, -997, -997, 1111, -997, - -997, 224, -997, 107, 1111, -997, -997, 1110, 1115, 1116, - -997, 388, -997, -997, -997, -997, -997, -997, -997, 1117, - 952, 941, 953, 1118, 107, -997, 956, -997, -997, -997, - 957, -997, -997, -997 + 446, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, + -1009, -1009, -1009, -1009, -1009, 50, 35, 70, 83, 94, + 104, 112, 133, 161, 163, 178, 184, 254, 265, 271, + -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, + -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, + -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, + -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, 35, -159, + 73, 171, 46, 687, 173, -1, 264, -17, 253, 119, + -89, 460, 134, -1009, 281, 288, 299, 293, 322, -1009, + 53, -1009, -1009, -1009, -1009, -1009, -1009, -1009, 324, 334, + 348, 350, 376, 401, 414, 423, 425, 428, 434, 435, + 436, 437, -1009, 438, 440, 441, 442, 447, -1009, -1009, + -1009, 448, 449, 450, -1009, -1009, -1009, 451, -1009, -1009, + -1009, -1009, -1009, -1009, 452, 453, 454, -1009, -1009, -1009, + -1009, -1009, -1009, -1009, -1009, -1009, 455, -1009, -1009, -1009, + -1009, -1009, -1009, 456, 462, 464, -1009, -1009, 465, -1009, + 101, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, + -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, + -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, + -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, + -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, + -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, + -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, 466, + 467, 470, 471, -1009, 120, -1009, -1009, -1009, -1009, -1009, + -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, 473, 475, + -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, + -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, + -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, + 126, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, + -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, + -1009, -1009, -1009, -1009, -1009, 128, -1009, -1009, -1009, -1009, + -1009, 477, -1009, 481, 482, -1009, -1009, -1009, -1009, -1009, + -1009, 138, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, + -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, 318, + 361, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, 408, + -1009, -1009, 484, -1009, -1009, -1009, 485, -1009, -1009, 487, + 381, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, + -1009, -1009, -1009, -1009, 492, 494, -1009, -1009, -1009, -1009, + 491, 461, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, + -1009, -1009, -1009, -1009, 148, -1009, -1009, -1009, 496, -1009, + -1009, 498, -1009, 500, 501, -1009, -1009, 503, 506, -1009, + -1009, -1009, -1009, -1009, -1009, -1009, 198, -1009, -1009, -1009, + -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, + -1009, -1009, -1009, -1009, 508, 199, -1009, -1009, -1009, -1009, + 35, 35, -1009, 301, 509, -1009, -1009, 512, 517, 519, + 520, 521, 522, 314, 317, 319, 320, 321, 323, 329, + 330, 325, 315, 335, 336, 339, 340, 533, 344, 346, + 326, 347, 351, 535, 552, 565, 354, 355, 356, 571, + 572, 574, 364, 578, 579, 582, 584, 585, 586, 374, + 377, 379, 589, 596, 597, 599, 600, 602, 603, 604, + 607, 398, 610, 611, 613, 614, 615, 616, 404, 420, + 421, 618, 635, -1009, 171, -1009, 636, 424, 426, 427, + 445, 46, -1009, 657, 659, 660, 662, 663, 457, 458, + 664, 665, 666, 687, -1009, 667, 173, -1009, 669, 463, + 673, 468, 469, -1, -1009, 675, 676, 677, 678, 681, + 682, 683, -1009, 264, -1009, 684, 685, 476, 686, 688, + 689, 478, -1009, 253, 690, 479, 480, -1009, 119, 694, + 695, -67, -1009, 486, 701, 702, 495, 703, 502, 504, + 705, 712, 507, 510, 714, 716, 717, 719, 460, -1009, + 721, 511, 134, -1009, -1009, -1009, 724, 722, 516, 725, + 740, 741, 742, 726, -1009, -1009, -1009, -1009, -1009, -1009, + -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, 536, -1009, + -1009, -1009, -1009, -1009, -101, 546, 547, -1009, -1009, -1009, + 758, 759, 760, -1009, 553, 561, 761, 770, 566, 328, + -1009, -1009, -1009, 774, 776, 777, 785, 778, 788, 789, + 792, 793, -1009, 794, 795, 796, 797, 581, 591, -1009, + -1009, -1009, 802, 801, -1009, 804, -1009, -1009, -1009, -1009, + -1009, 807, 808, 601, 605, 606, -1009, -1009, 804, 608, + 809, -1009, 609, -1009, 612, -1009, 617, -1009, -1009, -1009, + 804, 804, 804, 619, 620, 621, 622, -1009, 623, 624, + -1009, 625, 626, 627, -1009, -1009, 628, -1009, -1009, -1009, + 629, 770, -1009, -1009, 630, 631, -1009, 632, -1009, -1009, + 164, 638, -1009, -1009, -101, 633, 634, 637, -1009, 816, + -1009, -1009, 35, 171, -1009, 134, 46, 129, 129, 817, + -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, 818, + 820, 821, -1009, -1009, 822, -1009, -1009, -1009, -1009, -1009, + -1009, -1009, -1009, -88, 35, 84, 137, 823, 825, 842, + 39, 223, 212, -45, 249, 460, -1009, -1009, 843, -156, + -1009, -1009, 845, 846, -1009, -1009, -1009, -1009, -1009, -78, + -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, + -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, + -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, 817, + -1009, 200, 201, 207, -1009, -1009, -1009, -1009, 810, 850, + 851, 852, 853, 854, 855, -1009, 856, -1009, -1009, -1009, + -1009, -1009, 285, -1009, -1009, -1009, -1009, -1009, -1009, -1009, + -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, + -1009, -1009, 291, -1009, 857, 858, -1009, -1009, 859, 861, + -1009, -1009, 860, 864, -1009, -1009, 862, 866, -1009, -1009, + 867, 871, -1009, -1009, -1009, 45, -1009, -1009, -1009, 869, + -1009, -1009, -1009, 102, -1009, -1009, -1009, -1009, -1009, 294, + -1009, -1009, -1009, -1009, 127, -1009, -1009, 870, 874, -1009, + -1009, 872, 876, -1009, 877, 878, 879, 880, 881, 882, + 297, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, + 883, 884, 885, -1009, -1009, -1009, -1009, 310, -1009, -1009, + -1009, -1009, -1009, -1009, 886, 887, 888, -1009, 316, -1009, + -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, + 337, -1009, -1009, -1009, 889, -1009, 890, -1009, -1009, -1009, + 341, -1009, -1009, -1009, -1009, -1009, 345, -1009, 259, -1009, + 891, -1009, 360, -1009, -1009, 648, -1009, 892, 893, -1009, + -1009, 894, 896, -1009, -1009, -1009, 895, -1009, 898, -1009, + -1009, -1009, 901, 902, 903, 904, 655, 680, 696, 692, + 697, 698, 699, 906, 700, 912, 913, 914, 915, 129, + -1009, -1009, 129, -1009, 817, 687, -1009, 818, 253, -1009, + 820, 119, -1009, 821, 1076, -1009, 822, -88, -1009, -1009, + 84, -1009, 916, 917, 137, -1009, 327, 823, -1009, 264, + -1009, 825, -89, -1009, 842, 707, 708, 709, 710, 711, + 713, 39, -1009, 923, 925, 715, 718, 720, 223, -1009, + 723, 727, 728, 212, -1009, 927, 928, -45, -1009, 729, + 930, 730, 932, 249, -1009, -1009, 214, 843, -1009, 731, + -156, -1009, -1009, 931, 899, 173, -1009, 845, -1, -1009, + 846, 934, -1009, -1009, 290, 733, 735, 736, -1009, -1009, + -1009, -1009, -1009, -1009, -1009, 358, -1009, 737, 738, 739, + 744, -1009, 378, -1009, 380, -1009, 933, -1009, 936, -1009, + -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, + -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, + -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, + -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, 392, -1009, + -1009, -1009, -1009, -1009, -1009, -1009, -1009, 745, 747, -1009, + -1009, -1009, 935, -1009, -1009, -1009, -1009, -1009, -1009, -1009, + -1009, -1009, -1009, -1009, 947, 953, -1009, -1009, -1009, -1009, + -1009, -1009, 954, -1009, 393, -1009, -1009, -1009, -1009, -1009, + -1009, -1009, -1009, 277, 750, -1009, -1009, -1009, -1009, -1009, + -1009, -1009, -1009, 752, 753, -1009, -1009, 756, -1009, 35, + -1009, -1009, 969, -1009, -1009, -1009, -1009, -1009, 405, -1009, + -1009, -1009, -1009, -1009, -1009, -1009, -1009, 766, 409, -1009, + 411, -1009, 780, -1009, -1009, -1009, -1009, -1009, -1009, -1009, + -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, + -1009, -1009, 1076, -1009, -1009, -1009, 980, 991, 779, -1009, + 327, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, + -1009, -1009, 994, 784, 1005, 214, -1009, -1009, -1009, -1009, + -1009, -1009, 800, 815, -1009, -1009, 875, -1009, 828, -1009, + -1009, -1009, 1009, -1009, -1009, 273, -1009, -7, 1009, -1009, + -1009, 1014, 1026, 1030, -1009, 412, -1009, -1009, -1009, -1009, + -1009, -1009, -1009, 1032, 830, 836, 837, 1033, -7, -1009, + 863, -1009, -1009, -1009, 905, -1009, -1009, -1009 }; const short @@ -5254,186 +5293,187 @@ namespace isc { namespace dhcp { 20, 22, 24, 26, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 46, 38, 34, 33, 30, 31, 32, 37, 3, - 35, 36, 61, 5, 67, 7, 184, 9, 365, 11, - 568, 13, 595, 15, 627, 17, 488, 19, 497, 21, - 536, 23, 327, 25, 755, 27, 806, 29, 48, 41, - 0, 0, 0, 0, 0, 0, 629, 0, 499, 538, + 35, 36, 61, 5, 67, 7, 190, 9, 371, 11, + 578, 13, 605, 15, 637, 17, 498, 19, 507, 21, + 546, 23, 333, 25, 765, 27, 816, 29, 48, 41, + 0, 0, 0, 0, 0, 0, 639, 0, 509, 548, 0, 0, 0, 50, 0, 49, 0, 0, 42, 63, - 0, 65, 137, 804, 182, 203, 205, 207, 0, 0, + 0, 65, 139, 814, 188, 209, 211, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 176, 0, 0, 0, 0, 0, 156, 163, - 165, 0, 0, 0, 356, 486, 527, 0, 434, 582, - 584, 426, 0, 0, 0, 283, 302, 292, 272, 665, - 618, 318, 339, 697, 0, 304, 722, 736, 753, 169, - 171, 0, 0, 0, 816, 858, 0, 136, 0, 69, - 72, 73, 74, 75, 76, 77, 78, 79, 80, 111, - 112, 113, 114, 115, 81, 119, 120, 121, 122, 123, - 124, 125, 126, 117, 118, 127, 128, 129, 106, 135, - 131, 132, 133, 84, 85, 86, 87, 103, 88, 90, - 89, 130, 94, 95, 82, 108, 109, 110, 107, 83, - 92, 93, 101, 102, 104, 91, 96, 97, 98, 99, - 100, 105, 116, 134, 197, 0, 0, 0, 0, 196, - 0, 186, 189, 190, 191, 192, 193, 194, 195, 559, - 586, 413, 415, 417, 0, 0, 421, 419, 659, 412, - 370, 371, 372, 373, 374, 375, 376, 377, 396, 397, - 398, 399, 400, 403, 404, 405, 406, 407, 408, 409, - 410, 401, 402, 411, 0, 367, 381, 382, 383, 386, - 387, 390, 391, 392, 389, 384, 385, 378, 379, 394, - 395, 380, 388, 393, 580, 579, 575, 576, 574, 0, - 570, 573, 577, 578, 611, 0, 614, 0, 0, 610, - 604, 605, 603, 608, 609, 0, 597, 600, 601, 606, - 607, 602, 657, 645, 647, 649, 651, 653, 655, 644, - 641, 642, 643, 0, 630, 631, 636, 637, 634, 638, - 639, 640, 635, 0, 517, 250, 0, 521, 519, 524, - 0, 513, 514, 0, 500, 501, 504, 516, 505, 506, - 507, 523, 508, 509, 510, 511, 512, 553, 0, 0, - 551, 552, 555, 556, 0, 539, 540, 543, 544, 545, - 546, 547, 548, 549, 550, 335, 337, 332, 0, 329, - 333, 334, 0, 779, 781, 0, 784, 0, 0, 788, - 792, 0, 0, 796, 798, 800, 802, 777, 775, 776, - 0, 757, 760, 772, 761, 762, 763, 764, 765, 766, - 767, 768, 769, 770, 771, 773, 774, 813, 0, 0, - 808, 811, 812, 47, 52, 0, 39, 45, 0, 66, - 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 178, 0, 0, 0, 0, 0, 158, 165, + 167, 0, 0, 0, 362, 496, 537, 0, 181, 183, + 442, 592, 594, 434, 0, 0, 0, 289, 308, 298, + 278, 675, 628, 324, 345, 707, 0, 310, 732, 746, + 763, 171, 173, 0, 0, 0, 826, 868, 0, 138, + 0, 69, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 111, 112, 113, 114, 115, 81, 119, 120, 121, + 122, 123, 124, 125, 126, 117, 118, 127, 128, 129, + 106, 135, 136, 137, 131, 132, 133, 84, 85, 86, + 87, 103, 88, 90, 89, 130, 94, 95, 82, 108, + 109, 110, 107, 83, 92, 93, 101, 102, 104, 91, + 96, 97, 98, 99, 100, 105, 116, 134, 203, 0, + 0, 0, 0, 202, 0, 192, 195, 196, 197, 198, + 199, 200, 201, 569, 596, 421, 423, 425, 0, 0, + 429, 427, 669, 420, 376, 377, 378, 379, 380, 381, + 382, 383, 402, 403, 404, 405, 406, 409, 410, 411, + 412, 413, 414, 415, 416, 407, 408, 417, 418, 419, + 0, 373, 387, 388, 389, 392, 393, 396, 397, 398, + 395, 390, 391, 384, 385, 400, 401, 386, 394, 399, + 590, 589, 585, 586, 584, 0, 580, 583, 587, 588, + 621, 0, 624, 0, 0, 620, 614, 615, 613, 618, + 619, 0, 607, 610, 611, 616, 617, 612, 667, 655, + 657, 659, 661, 663, 665, 654, 651, 652, 653, 0, + 640, 641, 646, 647, 644, 648, 649, 650, 645, 0, + 527, 256, 0, 531, 529, 534, 0, 523, 524, 0, + 510, 511, 514, 526, 515, 516, 517, 533, 518, 519, + 520, 521, 522, 563, 0, 0, 561, 562, 565, 566, + 0, 549, 550, 553, 554, 555, 556, 557, 558, 559, + 560, 341, 343, 338, 0, 335, 339, 340, 0, 789, + 791, 0, 794, 0, 0, 798, 802, 0, 0, 806, + 808, 810, 812, 787, 785, 786, 0, 767, 770, 782, + 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, + 781, 783, 784, 823, 0, 0, 818, 821, 822, 47, + 52, 0, 39, 45, 0, 66, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 60, 71, 68, 0, 0, - 0, 0, 0, 188, 185, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 369, 366, 0, 572, 569, - 0, 0, 0, 0, 0, 599, 596, 0, 0, 0, - 0, 0, 0, 0, 628, 633, 489, 0, 0, 0, - 0, 0, 0, 0, 498, 503, 0, 0, 0, 537, - 542, 0, 0, 331, 328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 759, 756, 0, 0, 810, 807, 51, 43, 0, 0, - 0, 0, 0, 0, 0, 0, 139, 140, 141, 142, - 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, - 0, 174, 175, 153, 154, 155, 0, 0, 0, 167, - 168, 173, 0, 0, 0, 178, 0, 0, 0, 0, - 423, 424, 425, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 721, 0, 0, 0, 0, 0, 0, 179, - 180, 181, 0, 0, 70, 0, 199, 200, 201, 202, - 187, 0, 0, 0, 0, 0, 432, 433, 0, 0, - 0, 368, 0, 571, 0, 613, 0, 616, 617, 598, - 0, 0, 0, 0, 0, 0, 0, 632, 0, 0, - 515, 0, 0, 0, 526, 502, 0, 557, 558, 541, - 0, 0, 330, 778, 0, 0, 783, 0, 786, 787, - 0, 0, 794, 795, 0, 0, 0, 0, 758, 0, - 815, 809, 0, 0, 138, 0, 0, 0, 0, 209, - 177, 158, 159, 160, 161, 162, 157, 164, 166, 358, - 490, 529, 436, 40, 583, 585, 428, 429, 430, 431, - 427, 0, 48, 0, 0, 0, 620, 320, 0, 0, - 0, 0, 0, 0, 170, 172, 0, 0, 53, 198, - 561, 588, 414, 416, 418, 422, 420, 0, 581, 612, - 615, 658, 646, 648, 650, 652, 654, 656, 518, 251, - 522, 520, 525, 554, 336, 338, 780, 782, 785, 790, - 791, 789, 793, 797, 799, 801, 803, 209, 44, 0, - 0, 0, 238, 243, 245, 247, 0, 0, 0, 0, - 0, 0, 0, 257, 0, 264, 266, 268, 270, 237, - 0, 216, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, 230, 231, 232, 229, 233, 234, 235, 236, - 0, 214, 0, 210, 211, 363, 0, 359, 360, 495, - 0, 491, 492, 534, 0, 530, 531, 441, 0, 437, - 438, 290, 291, 0, 285, 288, 289, 0, 300, 301, - 297, 0, 294, 298, 299, 279, 281, 0, 274, 277, - 278, 670, 0, 667, 625, 0, 621, 622, 325, 0, - 321, 322, 0, 0, 0, 0, 0, 0, 0, 341, - 344, 345, 346, 347, 348, 349, 711, 717, 0, 0, - 0, 710, 707, 708, 709, 0, 699, 702, 705, 703, - 704, 706, 0, 0, 0, 314, 0, 306, 309, 310, - 311, 312, 313, 732, 734, 731, 729, 730, 0, 724, - 727, 728, 0, 748, 0, 751, 744, 745, 0, 738, - 741, 742, 743, 746, 0, 821, 0, 818, 0, 864, - 0, 860, 863, 55, 566, 0, 562, 563, 593, 0, - 589, 590, 663, 662, 0, 661, 0, 64, 805, 183, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 218, 204, 206, - 0, 208, 213, 0, 357, 362, 499, 487, 494, 538, - 528, 533, 0, 435, 440, 287, 284, 303, 296, 293, - 0, 0, 276, 273, 672, 669, 666, 629, 619, 624, - 0, 319, 324, 0, 0, 0, 0, 0, 0, 343, - 340, 0, 0, 0, 0, 0, 701, 698, 0, 0, - 0, 308, 305, 0, 0, 726, 723, 0, 0, 0, - 0, 740, 737, 754, 0, 820, 817, 0, 862, 859, - 57, 0, 56, 0, 560, 565, 0, 587, 592, 0, - 660, 814, 0, 0, 0, 0, 249, 252, 253, 254, - 255, 263, 256, 0, 262, 0, 0, 0, 0, 217, - 0, 212, 0, 361, 0, 493, 0, 532, 485, 460, - 461, 462, 464, 465, 466, 450, 451, 469, 470, 471, - 472, 473, 476, 477, 478, 479, 480, 481, 482, 483, - 474, 475, 484, 446, 447, 448, 449, 458, 459, 455, - 456, 457, 454, 463, 0, 443, 452, 467, 468, 453, - 439, 286, 295, 0, 0, 275, 692, 694, 0, 690, - 684, 685, 686, 687, 688, 689, 691, 681, 682, 683, - 0, 673, 674, 677, 678, 679, 680, 668, 0, 623, - 0, 323, 350, 351, 352, 353, 354, 355, 342, 0, - 0, 716, 719, 720, 700, 315, 316, 317, 307, 0, - 0, 725, 747, 0, 750, 0, 739, 836, 0, 834, - 832, 826, 830, 831, 0, 823, 828, 829, 827, 819, - 865, 861, 54, 59, 0, 564, 0, 591, 0, 240, - 241, 242, 239, 244, 246, 248, 259, 260, 261, 258, - 265, 267, 269, 271, 215, 364, 496, 535, 445, 442, - 280, 282, 0, 0, 0, 671, 676, 626, 326, 713, - 714, 715, 712, 718, 733, 735, 749, 752, 0, 0, - 0, 825, 822, 58, 567, 594, 664, 444, 0, 0, - 696, 675, 0, 833, 0, 824, 693, 695, 0, 835, - 841, 0, 838, 0, 840, 837, 851, 0, 0, 0, - 856, 0, 843, 846, 847, 848, 849, 850, 839, 0, - 0, 0, 0, 0, 845, 842, 0, 853, 854, 855, - 0, 844, 852, 857 + 0, 0, 0, 60, 71, 68, 0, 0, 0, 0, + 0, 194, 191, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 375, 372, 0, 582, 579, 0, 0, + 0, 0, 0, 609, 606, 0, 0, 0, 0, 0, + 0, 0, 638, 643, 499, 0, 0, 0, 0, 0, + 0, 0, 508, 513, 0, 0, 0, 547, 552, 0, + 0, 337, 334, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 769, 766, + 0, 0, 820, 817, 51, 43, 0, 0, 0, 0, + 0, 0, 0, 0, 141, 142, 143, 144, 145, 146, + 147, 148, 149, 150, 151, 152, 153, 154, 0, 176, + 177, 155, 156, 157, 0, 0, 0, 169, 170, 175, + 0, 0, 0, 180, 0, 0, 0, 0, 0, 0, + 431, 432, 433, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 731, 0, 0, 0, 0, 0, 0, 185, + 186, 187, 0, 0, 70, 0, 205, 206, 207, 208, + 193, 0, 0, 0, 0, 0, 440, 441, 0, 0, + 0, 374, 0, 581, 0, 623, 0, 626, 627, 608, + 0, 0, 0, 0, 0, 0, 0, 642, 0, 0, + 525, 0, 0, 0, 536, 512, 0, 567, 568, 551, + 0, 0, 336, 788, 0, 0, 793, 0, 796, 797, + 0, 0, 804, 805, 0, 0, 0, 0, 768, 0, + 825, 819, 0, 0, 140, 0, 0, 0, 0, 215, + 179, 160, 161, 162, 163, 164, 159, 166, 168, 364, + 500, 539, 182, 184, 444, 40, 593, 595, 436, 437, + 438, 439, 435, 0, 48, 0, 0, 0, 630, 326, + 0, 0, 0, 0, 0, 0, 172, 174, 0, 0, + 53, 204, 571, 598, 422, 424, 426, 430, 428, 0, + 591, 622, 625, 668, 656, 658, 660, 662, 664, 666, + 528, 257, 532, 530, 535, 564, 342, 344, 790, 792, + 795, 800, 801, 799, 803, 807, 809, 811, 813, 215, + 44, 0, 0, 0, 244, 249, 251, 253, 0, 0, + 0, 0, 0, 0, 0, 263, 0, 270, 272, 274, + 276, 243, 0, 222, 225, 226, 227, 228, 229, 230, + 231, 232, 233, 234, 236, 237, 238, 235, 239, 240, + 241, 242, 0, 220, 0, 216, 217, 369, 0, 365, + 366, 505, 0, 501, 502, 544, 0, 540, 541, 449, + 0, 445, 446, 296, 297, 0, 291, 294, 295, 0, + 306, 307, 303, 0, 300, 304, 305, 285, 287, 0, + 280, 283, 284, 680, 0, 677, 635, 0, 631, 632, + 331, 0, 327, 328, 0, 0, 0, 0, 0, 0, + 0, 347, 350, 351, 352, 353, 354, 355, 721, 727, + 0, 0, 0, 720, 717, 718, 719, 0, 709, 712, + 715, 713, 714, 716, 0, 0, 0, 320, 0, 312, + 315, 316, 317, 318, 319, 742, 744, 741, 739, 740, + 0, 734, 737, 738, 0, 758, 0, 761, 754, 755, + 0, 748, 751, 752, 753, 756, 0, 831, 0, 828, + 0, 874, 0, 870, 873, 55, 576, 0, 572, 573, + 603, 0, 599, 600, 673, 672, 0, 671, 0, 64, + 815, 189, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, + 210, 212, 0, 214, 219, 0, 363, 368, 509, 497, + 504, 548, 538, 543, 0, 443, 448, 293, 290, 309, + 302, 299, 0, 0, 282, 279, 682, 679, 676, 639, + 629, 634, 0, 325, 330, 0, 0, 0, 0, 0, + 0, 349, 346, 0, 0, 0, 0, 0, 711, 708, + 0, 0, 0, 314, 311, 0, 0, 736, 733, 0, + 0, 0, 0, 750, 747, 764, 0, 830, 827, 0, + 872, 869, 57, 0, 56, 0, 570, 575, 0, 597, + 602, 0, 670, 824, 0, 0, 0, 0, 255, 258, + 259, 260, 261, 269, 262, 0, 268, 0, 0, 0, + 0, 223, 0, 218, 0, 367, 0, 503, 0, 542, + 495, 468, 469, 470, 472, 473, 474, 458, 459, 477, + 478, 479, 480, 481, 484, 485, 486, 487, 488, 489, + 490, 491, 482, 483, 492, 493, 494, 454, 455, 456, + 457, 466, 467, 463, 464, 465, 462, 471, 0, 451, + 460, 475, 476, 461, 447, 292, 301, 0, 0, 281, + 702, 704, 0, 700, 694, 695, 696, 697, 698, 699, + 701, 691, 692, 693, 0, 683, 684, 687, 688, 689, + 690, 678, 0, 633, 0, 329, 356, 357, 358, 359, + 360, 361, 348, 0, 0, 726, 729, 730, 710, 321, + 322, 323, 313, 0, 0, 735, 757, 0, 760, 0, + 749, 846, 0, 844, 842, 836, 840, 841, 0, 833, + 838, 839, 837, 829, 875, 871, 54, 59, 0, 574, + 0, 601, 0, 246, 247, 248, 245, 250, 252, 254, + 265, 266, 267, 264, 271, 273, 275, 277, 221, 370, + 506, 545, 453, 450, 286, 288, 0, 0, 0, 681, + 686, 636, 332, 723, 724, 725, 722, 728, 743, 745, + 759, 762, 0, 0, 0, 835, 832, 58, 577, 604, + 674, 452, 0, 0, 706, 685, 0, 843, 0, 834, + 703, 705, 0, 845, 851, 0, 848, 0, 850, 847, + 861, 0, 0, 0, 866, 0, 853, 856, 857, 858, + 859, 860, 849, 0, 0, 0, 0, 0, 855, 852, + 0, 863, 864, 865, 0, 854, 862, 867 }; const short Dhcp6Parser::yypgoto_[] = { - -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, - -997, -997, -997, -997, -997, -997, -10, -997, -579, -997, - 103, -997, -997, -997, -997, 372, -997, -618, -997, -997, - -997, -71, -997, -997, -997, -997, -997, -997, -997, 389, - 623, -997, -997, -46, -43, -14, -13, 14, 15, -49, - -24, 16, 29, 30, 33, 34, -997, 37, 41, 44, - 47, -997, 409, 48, -997, 51, -997, 54, 59, 62, - -997, 64, -997, 65, -997, -997, -997, -997, -997, -997, - -997, -997, -997, -997, -997, -997, 400, 612, -997, -997, - -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, - 324, -997, 115, -997, -706, 121, -997, -997, -997, -997, - -997, -997, -997, -997, -997, -997, -41, -997, -748, -997, - -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, - -997, -997, -997, -997, -997, -997, -997, -997, -997, 100, - -997, -997, -997, -997, -997, -997, -997, 108, -730, -997, - -997, -997, -997, 102, -997, -997, -997, -997, -997, -997, - -997, 73, -997, -997, -997, -997, -997, -997, -997, 93, - -997, -997, -997, 96, 574, -997, -997, -997, -997, -997, - -997, -997, 90, -997, -997, -997, -997, -997, -997, -996, - -997, -997, -997, 125, -997, -997, -997, 128, 647, -997, - -997, -994, -997, -993, -997, 10, -997, 18, -997, 66, - 69, 72, 76, -997, -997, -997, -987, -997, -997, -997, - -997, 118, -997, -997, -115, 1072, -997, -997, -997, -997, - -997, 132, -997, -997, -997, 135, -997, 607, -997, -62, - -997, -997, -997, -997, -997, -54, -997, -997, -997, -997, - -997, -42, -997, -997, -997, 134, -997, -997, -997, 138, - -997, 610, -997, -997, -997, -997, -997, -997, -997, -997, - -997, -997, -997, 75, -997, -997, -997, 80, 648, -997, - -997, -60, -997, -3, -997, -997, -997, -997, -997, 70, - -997, -997, -997, 78, 649, -997, -997, -997, -997, -997, - -997, -997, -53, -997, -997, -997, 126, -997, -997, -997, - 137, -997, 651, 394, -997, -997, -997, -997, -997, -997, - -997, -997, -997, -997, -997, -997, -997, -986, -997, -997, - -997, -997, -997, -997, -997, 140, -997, -997, -997, -93, - -997, -997, -997, -997, -997, -997, -997, -997, -997, 122, - -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, - -997, -997, 112, -997, -997, -997, -997, -997, -997, -997, - 109, -997, -997, -997, -997, -997, -997, -997, -997, -997, - -997, 416, 601, -997, -997, -997, -997, -997, -997, -997, - -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, - -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, - -997, -997, 461, 606, -997, -997, -997, -997, -997, -997, - 110, -997, -997, -99, -997, -997, -997, -997, -997, -997, - -121, -997, -997, -136, -997, -997, -997, -997, -997, -997, - -997, -997, -997, -997, 111, -997 + -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, + -1009, -1009, -1009, -1009, -1009, -1009, -10, -1009, -596, -1009, + 375, -1009, -1009, -1009, -1009, 343, -1009, -592, -1009, -1009, + -1009, -71, -1009, -1009, -1009, -1009, -1009, -1009, -1009, 382, + 543, -1009, -1009, -46, -43, -14, -13, 14, 15, -49, + -24, 16, 29, 30, 33, 34, -1009, 37, 41, 44, + 47, -1009, 385, 48, -1009, 51, -1009, 54, 59, 62, + -1009, 64, -1009, 65, -1009, -1009, -1009, -1009, -1009, 66, + -1009, 69, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, + 384, 595, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, + -1009, -1009, -1009, -1009, 298, -1009, 88, -1009, -716, 99, + -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, + -41, -1009, -760, -1009, -1009, -1009, -1009, -1009, -1009, -1009, + -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, + -1009, -1009, -1009, 78, -1009, -1009, -1009, -1009, -1009, -1009, + -1009, 100, -742, -1009, -1009, -1009, -1009, 81, -1009, -1009, + -1009, -1009, -1009, -1009, -1009, 63, -1009, -1009, -1009, -1009, + -1009, -1009, -1009, 85, -1009, -1009, -1009, 86, 583, -1009, + -1009, -1009, -1009, -1009, -1009, -1009, 89, -1009, -1009, -1009, + -1009, -1009, -1009, -1008, -1009, -1009, -1009, 130, -1009, -1009, + -1009, 131, 639, -1009, -1009, -1006, -1009, -1005, -1009, 10, + -1009, 80, -1009, 72, 76, 77, 79, -1009, -1009, -1009, + -999, -1009, -1009, -1009, -1009, 117, -1009, -1009, -117, 1081, + -1009, -1009, -1009, -1009, -1009, 135, -1009, -1009, -1009, 132, + -1009, 598, -1009, -62, -1009, -1009, -1009, -1009, -1009, -54, + -1009, -1009, -1009, -1009, -1009, -42, -1009, -1009, -1009, 136, + -1009, -1009, -1009, 139, -1009, 640, -1009, -1009, -1009, -1009, + -1009, -1009, -1009, -1009, -1009, -1009, -1009, 67, -1009, -1009, + -1009, 71, 645, -1009, -1009, -60, -1009, -3, -1009, -1009, + -1009, -1009, -1009, 68, -1009, -1009, -1009, 61, 641, -1009, + -1009, -1009, -1009, -1009, -1009, -1009, -53, -1009, -1009, -1009, + 116, -1009, -1009, -1009, 122, -1009, 643, 394, -1009, -1009, + -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, + -1009, -998, -1009, -1009, -1009, -1009, -1009, -1009, -1009, 141, + -1009, -1009, -1009, -98, -1009, -1009, -1009, -1009, -1009, -1009, + -1009, -1009, -1009, 121, -1009, -1009, -1009, -1009, -1009, -1009, + -1009, -1009, -1009, -1009, -1009, -1009, 113, -1009, -1009, -1009, + -1009, -1009, -1009, -1009, 108, -1009, -1009, -1009, -1009, -1009, + -1009, -1009, -1009, -1009, -1009, 417, 644, -1009, -1009, -1009, + -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, + -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, + -1009, -1009, -1009, -1009, -1009, -1009, 459, 649, -1009, -1009, + -1009, -1009, -1009, -1009, 106, -1009, -1009, -97, -1009, -1009, + -1009, -1009, -1009, -1009, -121, -1009, -1009, -138, -1009, -1009, + -1009, -1009, -1009, -1009, -1009, -1009, -1009, -1009, 114, -1009 }; const short @@ -5441,558 +5481,564 @@ namespace isc { namespace dhcp { { 0, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 83, 39, 40, 69, - 744, 87, 88, 41, 68, 84, 85, 769, 973, 1081, - 1082, 829, 43, 70, 90, 438, 91, 45, 71, 158, - 159, 160, 441, 161, 162, 163, 164, 165, 166, 167, - 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, - 178, 467, 736, 179, 468, 180, 469, 181, 182, 183, - 498, 184, 499, 185, 186, 187, 188, 461, 189, 190, - 191, 192, 193, 443, 47, 72, 230, 231, 232, 508, - 233, 234, 235, 236, 194, 444, 195, 445, 196, 446, - 852, 853, 854, 1010, 830, 831, 832, 990, 1242, 833, - 991, 834, 992, 835, 993, 836, 837, 548, 838, 839, - 840, 841, 842, 843, 1001, 1249, 844, 845, 846, 1003, - 847, 1004, 848, 1005, 849, 1006, 197, 487, 887, 888, - 889, 1030, 890, 1031, 198, 484, 873, 874, 875, 876, - 199, 486, 881, 882, 883, 884, 200, 485, 201, 494, - 936, 937, 938, 939, 940, 202, 490, 899, 900, 901, - 1040, 63, 80, 388, 389, 390, 561, 391, 562, 203, - 491, 908, 909, 910, 911, 912, 913, 914, 915, 204, - 473, 856, 857, 858, 1013, 49, 73, 274, 275, 276, - 517, 277, 518, 278, 519, 279, 523, 280, 522, 205, - 206, 207, 208, 480, 750, 285, 286, 209, 477, 868, - 869, 870, 1022, 1154, 1155, 210, 474, 57, 77, 860, - 861, 862, 1016, 59, 78, 353, 354, 355, 356, 357, - 358, 359, 547, 360, 551, 361, 550, 362, 363, 552, - 364, 211, 475, 864, 865, 866, 1019, 61, 79, 374, - 375, 376, 377, 378, 556, 379, 380, 381, 382, 288, - 515, 975, 976, 977, 1083, 51, 74, 299, 300, 301, - 527, 212, 478, 213, 479, 291, 516, 979, 980, 981, - 1086, 53, 75, 315, 316, 317, 530, 318, 319, 532, - 320, 321, 214, 489, 895, 896, 897, 1037, 55, 76, - 333, 334, 335, 336, 538, 337, 539, 338, 540, 339, - 541, 340, 542, 341, 543, 342, 537, 293, 524, 984, - 985, 1089, 215, 488, 892, 893, 1034, 1180, 1181, 1182, - 1183, 1184, 1262, 1185, 1263, 1186, 216, 492, 925, 926, - 927, 1051, 1272, 928, 929, 1052, 930, 931, 217, 218, - 495, 948, 949, 950, 1063, 951, 1064, 219, 496, 958, - 959, 960, 961, 1068, 962, 963, 1070, 220, 497, 65, - 81, 410, 411, 412, 413, 566, 414, 567, 415, 416, - 569, 417, 418, 419, 572, 801, 420, 573, 421, 422, - 423, 576, 424, 577, 425, 578, 426, 579, 221, 442, - 67, 82, 429, 430, 431, 582, 432, 222, 503, 966, - 967, 1074, 1224, 1225, 1226, 1227, 1280, 1228, 1278, 1301, - 1302, 1303, 1311, 1312, 1313, 1319, 1314, 1315, 1316, 1317, - 1323, 223, 504, 970, 971, 972 + 756, 87, 88, 41, 68, 84, 85, 781, 985, 1093, + 1094, 841, 43, 70, 90, 444, 91, 45, 71, 160, + 161, 162, 447, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, + 180, 473, 746, 181, 474, 182, 475, 183, 184, 185, + 506, 186, 507, 187, 188, 189, 190, 467, 191, 192, + 483, 193, 484, 194, 195, 196, 197, 449, 47, 72, + 234, 235, 236, 516, 237, 238, 239, 240, 198, 450, + 199, 451, 200, 452, 864, 865, 866, 1022, 842, 843, + 844, 1002, 1256, 845, 1003, 846, 1004, 847, 1005, 848, + 849, 556, 850, 851, 852, 853, 854, 855, 1013, 1263, + 856, 857, 858, 1015, 859, 1016, 860, 1017, 861, 1018, + 201, 495, 899, 900, 901, 1042, 902, 1043, 202, 492, + 885, 886, 887, 888, 203, 494, 893, 894, 895, 896, + 204, 493, 205, 502, 948, 949, 950, 951, 952, 206, + 498, 911, 912, 913, 1052, 63, 80, 394, 395, 396, + 569, 397, 570, 207, 499, 920, 921, 922, 923, 924, + 925, 926, 927, 208, 479, 868, 869, 870, 1025, 49, + 73, 280, 281, 282, 525, 283, 526, 284, 527, 285, + 531, 286, 530, 209, 210, 211, 212, 488, 762, 291, + 292, 213, 485, 880, 881, 882, 1034, 1168, 1169, 214, + 480, 57, 77, 872, 873, 874, 1028, 59, 78, 359, + 360, 361, 362, 363, 364, 365, 555, 366, 559, 367, + 558, 368, 369, 560, 370, 215, 481, 876, 877, 878, + 1031, 61, 79, 380, 381, 382, 383, 384, 564, 385, + 386, 387, 388, 294, 523, 987, 988, 989, 1095, 51, + 74, 305, 306, 307, 535, 216, 486, 217, 487, 297, + 524, 991, 992, 993, 1098, 53, 75, 321, 322, 323, + 538, 324, 325, 540, 326, 327, 218, 497, 907, 908, + 909, 1049, 55, 76, 339, 340, 341, 342, 546, 343, + 547, 344, 548, 345, 549, 346, 550, 347, 551, 348, + 545, 299, 532, 996, 997, 1101, 219, 496, 904, 905, + 1046, 1194, 1195, 1196, 1197, 1198, 1276, 1199, 1277, 1200, + 220, 500, 937, 938, 939, 1063, 1286, 940, 941, 1064, + 942, 943, 221, 222, 503, 960, 961, 962, 1075, 963, + 1076, 223, 504, 970, 971, 972, 973, 1080, 974, 975, + 1082, 224, 505, 65, 81, 416, 417, 418, 419, 574, + 420, 575, 421, 422, 577, 423, 424, 425, 580, 813, + 426, 581, 427, 428, 429, 584, 430, 585, 431, 586, + 432, 587, 225, 448, 67, 82, 435, 436, 437, 590, + 438, 226, 511, 978, 979, 1086, 1238, 1239, 1240, 1241, + 1294, 1242, 1292, 1315, 1316, 1317, 1325, 1326, 1327, 1333, + 1328, 1329, 1330, 1331, 1337, 227, 512, 982, 983, 984 }; const short Dhcp6Parser::yytable_[] = { - 157, 229, 249, 295, 309, 329, 38, 351, 370, 387, - 407, 922, 237, 289, 302, 313, 331, 372, 365, 383, - 292, 408, 850, 880, 256, 373, 1144, 250, 1145, 1146, - 251, 287, 298, 312, 330, 1153, 1159, 352, 371, 871, - 31, 968, 32, 30, 33, 385, 386, 916, 743, 257, - 775, 323, 439, 427, 428, 817, 156, 440, 982, 252, - 253, 506, 781, 782, 783, 86, 507, 385, 386, 238, - 290, 303, 314, 332, 1025, 366, 384, 1026, 409, 224, - 225, 226, 227, 228, 296, 310, 42, 254, 255, 258, - 129, 130, 297, 311, 129, 130, 345, 367, 346, 347, - 368, 369, 259, 260, 513, 44, 261, 262, 525, 514, - 263, 799, 800, 526, 264, 129, 130, 265, 129, 130, - 266, 267, 743, 46, 268, 156, 872, 269, 731, 732, - 733, 734, 270, 871, 878, 271, 879, 272, 273, 281, - 92, 93, 282, 48, 94, 283, 932, 933, 934, 284, - 95, 96, 97, 50, 943, 944, 129, 130, 129, 130, - 1028, 528, 535, 1029, 89, 735, 529, 536, 917, 918, - 919, 920, 1035, 52, 54, 1036, 98, 99, 100, 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, 126, 563, 1075, 156, 580, 1076, - 564, 156, 584, 581, 127, 128, 125, 585, 506, 952, - 953, 954, 344, 987, 129, 130, 56, 1304, 584, 513, - 1305, 131, 156, 988, 989, 156, 132, 133, 134, 135, - 136, 137, 138, 58, 60, 139, 62, 34, 35, 36, - 37, 140, 902, 903, 904, 905, 906, 907, 885, 886, - 141, 1007, 1144, 142, 1145, 1146, 1008, 1239, 1240, 1241, - 143, 1153, 1159, 955, 345, 156, 346, 347, 144, 145, - 348, 349, 350, 146, 1007, 64, 147, 1032, 433, 1009, - 148, 436, 1033, 129, 130, 66, 1306, 434, 880, 1307, - 1308, 1309, 1310, 435, 1110, 1049, 437, 545, 922, 447, - 1050, 149, 150, 151, 152, 153, 154, 448, 1056, 1061, - 1269, 1270, 1271, 1057, 1062, 155, 98, 99, 100, 101, - 102, 103, 1065, 555, 1071, 580, 544, 1066, 812, 1072, - 1073, 156, 813, 814, 815, 816, 817, 818, 819, 820, - 821, 822, 823, 449, 126, 345, 824, 825, 826, 827, - 828, 1078, 126, 1007, 525, 126, 1079, 1258, 1254, 1255, - 450, 563, 1259, 451, 129, 130, 1268, 304, 305, 306, - 307, 308, 129, 130, 1281, 129, 130, 528, 535, 1282, - 345, 1324, 1284, 1285, 452, 453, 1325, 1166, 1167, 1168, - 454, 345, 455, 456, 246, 457, 322, 458, 247, 459, - 156, 460, 462, 323, 324, 325, 326, 327, 328, 463, - 129, 130, 464, 465, 586, 587, 466, 126, 470, 746, - 747, 748, 749, 471, 472, 157, 1246, 1247, 1248, 476, - 294, 481, 229, 482, 483, 493, 500, 129, 130, 501, - 502, 505, 509, 237, 249, 510, 511, 295, 512, 520, - 521, 531, 533, 534, 309, 289, 588, 549, 302, 246, - 546, 553, 292, 247, 329, 313, 256, 554, 557, 250, - 558, 559, 251, 287, 351, 331, 298, 560, 596, 370, - 565, 156, 568, 312, 570, 365, 571, 574, 372, 156, - 383, 257, 156, 330, 575, 583, 373, 589, 590, 407, - 238, 252, 253, 1217, 352, 1218, 1219, 591, 592, 371, - 408, 593, 290, 594, 595, 303, 156, 604, 610, 616, - 597, 598, 314, 599, 600, 601, 602, 156, 296, 254, - 255, 258, 332, 617, 618, 310, 297, 603, 613, 605, - 606, 607, 366, 311, 259, 260, 608, 384, 261, 262, - 609, 611, 263, 612, 156, 622, 264, 623, 614, 265, - 615, 619, 266, 267, 620, 624, 268, 409, 621, 269, - 625, 626, 627, 628, 270, 629, 630, 271, 631, 272, - 273, 281, 632, 633, 282, 634, 635, 283, 636, 637, - 638, 284, 639, 640, 641, 642, 643, 644, 645, 98, - 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, - 109, 110, 646, 647, 648, 649, 115, 116, 117, 118, - 119, 120, 121, 122, 123, 650, 651, 126, 652, 653, - 655, 656, 657, 661, 658, 659, 662, 663, 664, 239, - 665, 240, 157, 667, 668, 229, 666, 129, 130, 241, - 242, 243, 244, 245, 131, 669, 237, 670, 672, 132, - 133, 134, 674, 675, 676, 680, 681, 677, 678, 246, - 682, 683, 684, 247, 140, 685, 686, 688, 921, 935, - 945, 248, 407, 689, 690, 691, 969, 692, 693, 923, - 941, 946, 956, 408, 694, 696, 697, 700, 701, 698, - 703, 704, 808, 705, 707, 706, 710, 711, 708, 709, - 714, 715, 712, 238, 1, 2, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 713, 716, - 717, 719, 720, 722, 149, 150, 724, 723, 725, 726, - 727, 728, 729, 730, 737, 738, 924, 942, 947, 957, - 409, 98, 99, 100, 101, 102, 103, 104, 105, 106, - 107, 108, 109, 110, 156, 739, 740, 741, 115, 116, - 117, 118, 119, 120, 121, 122, 123, 124, 742, 126, - 345, 129, 130, 32, 745, 751, 752, 753, 764, 755, - 754, 756, 757, 1090, 795, 758, 759, 760, 761, 129, - 130, 762, 242, 243, 763, 245, 131, 765, 766, 767, - 768, 132, 133, 134, 770, 771, 772, 773, 774, 776, - 777, 246, 802, 778, 779, 247, 780, 784, 785, 786, - 787, 788, 789, 248, 790, 791, 807, 851, 1011, 792, - 793, 855, 794, 796, 859, 863, 867, 797, 392, 393, - 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, - 404, 798, 804, 891, 805, 894, 898, 806, 405, 406, - 965, 974, 978, 994, 995, 996, 997, 998, 999, 1000, - 1002, 1012, 1015, 1014, 1018, 1097, 149, 150, 1017, 1020, - 1021, 1023, 1024, 1096, 1027, 1039, 1038, 1041, 156, 1042, - 1080, 1043, 1044, 1045, 1046, 1047, 1048, 1053, 1054, 1055, - 1058, 1059, 1060, 1067, 1069, 1077, 156, 1085, 1084, 1087, - 1088, 1091, 1092, 1093, 1094, 1095, 1098, 1099, 1100, 1101, - 1102, 1103, 249, 1104, 1105, 351, 1106, 1107, 370, 1108, - 1163, 1118, 1164, 289, 1199, 1200, 365, 372, 1192, 383, - 292, 1193, 1157, 1169, 256, 373, 329, 250, 1194, 387, - 251, 287, 1195, 1125, 1178, 352, 1119, 331, 371, 1120, - 1156, 1143, 1196, 1205, 1209, 921, 1197, 1201, 1170, 257, - 935, 1171, 1177, 1176, 945, 330, 923, 1202, 1126, 252, - 253, 941, 1203, 1220, 1210, 946, 1213, 969, 1121, 1122, - 290, 956, 295, 366, 1222, 309, 384, 1212, 1206, 1158, - 1172, 1173, 1207, 302, 1214, 1215, 313, 254, 255, 258, - 1232, 1179, 1147, 1221, 332, 1233, 1123, 1124, 1127, 1230, - 1148, 298, 259, 260, 312, 1238, 261, 262, 1174, 1175, - 263, 1128, 1129, 924, 264, 1130, 1131, 265, 942, 1132, - 266, 267, 947, 1133, 268, 1243, 1134, 269, 957, 1135, - 1136, 1223, 270, 1137, 1244, 271, 1138, 272, 273, 281, - 303, 1139, 282, 314, 1140, 283, 1141, 1142, 1149, 284, - 1245, 1150, 1256, 296, 1151, 1257, 310, 1264, 1152, 1265, - 1266, 297, 1250, 1267, 311, 1279, 1251, 1288, 1252, 1289, - 1292, 1294, 809, 1298, 1320, 1253, 1260, 1261, 1300, 1321, - 1322, 1326, 1330, 803, 877, 660, 811, 1111, 1109, 654, - 1162, 986, 1165, 1161, 1208, 1191, 1190, 702, 1273, 1198, - 1113, 1112, 1160, 1287, 1274, 1275, 1276, 1283, 1286, 343, - 1115, 1114, 1293, 1290, 1328, 1117, 1296, 1116, 1237, 1297, - 1235, 1299, 695, 1234, 1236, 1189, 1329, 1327, 1332, 1333, - 699, 983, 671, 1291, 1188, 1187, 673, 1211, 1204, 964, - 1216, 718, 1295, 1318, 679, 1229, 810, 1118, 1331, 1231, - 721, 0, 0, 0, 0, 1169, 687, 0, 1157, 0, - 0, 0, 0, 0, 0, 1277, 1178, 0, 0, 1125, - 1220, 0, 1119, 0, 0, 1120, 1156, 1143, 0, 0, - 1170, 1222, 0, 1171, 1177, 1176, 0, 0, 0, 0, - 0, 0, 0, 0, 1126, 0, 0, 0, 0, 0, - 1221, 0, 0, 0, 1121, 1122, 0, 0, 0, 0, - 0, 0, 1172, 1173, 0, 1158, 0, 0, 0, 0, - 0, 0, 0, 1179, 0, 0, 0, 0, 1147, 0, - 0, 0, 1123, 1124, 1127, 0, 1148, 0, 1223, 0, - 1174, 1175, 0, 0, 0, 0, 0, 1128, 1129, 0, - 0, 1130, 1131, 0, 0, 1132, 0, 0, 0, 1133, - 0, 0, 1134, 0, 0, 1135, 1136, 0, 0, 1137, - 0, 0, 1138, 0, 0, 0, 0, 1139, 0, 0, - 1140, 0, 1141, 1142, 1149, 0, 0, 1150, 0, 0, - 1151, 0, 0, 0, 1152 + 159, 233, 253, 301, 315, 335, 38, 357, 376, 393, + 413, 934, 241, 295, 308, 319, 337, 378, 371, 389, + 298, 414, 862, 892, 260, 379, 1158, 254, 1159, 1160, + 255, 293, 304, 318, 336, 1167, 1173, 358, 377, 883, + 31, 755, 32, 980, 33, 391, 392, 329, 1037, 261, + 30, 1038, 131, 132, 994, 86, 445, 125, 158, 256, + 257, 446, 228, 229, 230, 231, 232, 391, 392, 242, + 296, 309, 320, 338, 126, 372, 390, 42, 415, 741, + 742, 743, 744, 89, 302, 316, 787, 258, 259, 262, + 44, 310, 311, 312, 313, 314, 131, 132, 793, 794, + 795, 46, 263, 264, 514, 1040, 265, 266, 1041, 515, + 267, 48, 955, 956, 268, 755, 745, 269, 250, 50, + 270, 271, 251, 521, 272, 158, 884, 273, 522, 533, + 1047, 536, 274, 1048, 534, 275, 537, 276, 277, 278, + 52, 543, 279, 131, 132, 287, 544, 433, 434, 288, + 289, 571, 290, 824, 303, 317, 572, 825, 826, 827, + 828, 829, 830, 831, 832, 833, 834, 835, 54, 158, + 56, 836, 837, 838, 839, 840, 914, 915, 916, 917, + 918, 919, 92, 93, 1320, 58, 94, 1321, 1322, 1323, + 1324, 60, 95, 96, 97, 351, 373, 352, 353, 374, + 375, 588, 592, 514, 592, 351, 589, 593, 999, 1000, + 521, 883, 890, 158, 891, 1001, 131, 132, 98, 99, + 100, 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, 126, 928, 126, 34, + 35, 36, 37, 897, 898, 829, 127, 128, 129, 130, + 158, 62, 1087, 300, 1158, 1088, 1159, 1160, 131, 132, + 131, 132, 64, 1167, 1173, 133, 1318, 350, 66, 1319, + 134, 135, 136, 137, 138, 139, 140, 439, 1019, 141, + 351, 440, 250, 1020, 1019, 142, 251, 1044, 892, 1021, + 1061, 442, 1045, 441, 143, 1062, 1122, 144, 934, 131, + 132, 131, 132, 1068, 145, 1253, 1254, 1255, 1069, 1073, + 131, 132, 146, 147, 1074, 443, 552, 148, 453, 351, + 149, 352, 353, 158, 150, 354, 355, 356, 454, 126, + 1077, 811, 812, 158, 1083, 1078, 131, 132, 588, 1084, + 131, 132, 455, 1085, 456, 151, 152, 153, 154, 155, + 156, 131, 132, 1090, 553, 944, 945, 946, 1091, 157, + 929, 930, 931, 932, 98, 99, 100, 101, 102, 103, + 457, 1019, 328, 533, 563, 158, 1268, 158, 1269, 329, + 330, 331, 332, 333, 334, 1272, 571, 1260, 1261, 1262, + 1273, 1282, 126, 351, 1231, 458, 1232, 1233, 1295, 964, + 965, 966, 536, 1296, 543, 1338, 554, 1298, 459, 1299, + 1339, 1283, 1284, 1285, 131, 132, 158, 460, 158, 461, + 594, 595, 462, 758, 759, 760, 761, 158, 463, 464, + 465, 466, 468, 159, 469, 470, 471, 1180, 1181, 1182, + 233, 472, 476, 477, 478, 482, 489, 490, 491, 501, + 508, 241, 253, 967, 568, 301, 509, 158, 510, 513, + 517, 518, 315, 295, 519, 520, 308, 528, 158, 529, + 298, 539, 335, 319, 260, 541, 542, 254, 557, 561, + 255, 293, 357, 337, 304, 562, 565, 376, 566, 567, + 573, 318, 576, 371, 578, 579, 378, 582, 389, 261, + 583, 336, 591, 597, 379, 596, 598, 413, 242, 256, + 257, 599, 358, 600, 601, 602, 603, 377, 414, 604, + 296, 613, 605, 309, 606, 607, 608, 618, 609, 624, + 320, 158, 612, 621, 610, 611, 302, 258, 259, 262, + 338, 614, 615, 316, 616, 617, 625, 131, 132, 619, + 372, 620, 263, 264, 622, 390, 265, 266, 623, 626, + 267, 627, 628, 629, 268, 630, 631, 269, 632, 633, + 270, 271, 634, 635, 272, 415, 636, 273, 637, 638, + 639, 640, 274, 643, 641, 275, 642, 276, 277, 278, + 644, 645, 279, 646, 647, 287, 648, 649, 650, 288, + 289, 651, 290, 652, 653, 654, 303, 655, 656, 657, + 658, 659, 662, 317, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 660, 661, 663, + 665, 666, 668, 667, 411, 412, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 669, 671, 159, 672, 673, 233, 674, 675, 678, 679, + 680, 682, 676, 684, 158, 677, 241, 686, 685, 690, + 691, 692, 693, 687, 688, 694, 695, 696, 698, 699, + 701, 700, 702, 703, 706, 704, 707, 708, 710, 711, + 933, 947, 957, 713, 413, 714, 715, 717, 981, 720, + 716, 935, 953, 958, 968, 414, 721, 718, 724, 719, + 725, 726, 820, 727, 722, 729, 730, 723, 732, 733, + 734, 739, 735, 242, 98, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 736, 737, 738, + 740, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 747, 748, 126, 749, 750, 751, 754, 752, 936, 954, + 959, 969, 415, 128, 129, 753, 243, 32, 244, 763, + 757, 764, 765, 767, 131, 132, 245, 246, 247, 248, + 249, 133, 766, 768, 769, 776, 134, 135, 136, 770, + 771, 772, 773, 774, 775, 777, 250, 778, 779, 780, + 251, 142, 782, 783, 1006, 784, 789, 814, 252, 785, + 786, 819, 788, 790, 863, 867, 791, 871, 875, 879, + 903, 792, 906, 796, 797, 798, 799, 800, 801, 802, + 803, 804, 805, 806, 808, 809, 810, 816, 817, 910, + 977, 818, 986, 990, 1007, 1008, 1009, 1010, 1011, 1012, + 1014, 1024, 1092, 1023, 1027, 1026, 1029, 1030, 1032, 1033, + 1108, 151, 152, 1035, 1036, 1039, 1050, 1051, 1053, 1054, + 1312, 1055, 1056, 1057, 1058, 1059, 1060, 1065, 1066, 1067, + 1070, 1071, 1072, 1079, 1081, 1089, 1097, 1109, 1096, 1100, + 1099, 158, 1247, 1102, 1103, 1104, 1105, 1106, 1107, 1111, + 1115, 1110, 1112, 1113, 1114, 1116, 1117, 1118, 1119, 1120, + 1177, 1178, 1206, 1207, 1208, 1209, 1210, 1213, 1211, 1214, + 1215, 1223, 1224, 1216, 1227, 1217, 1229, 1246, 1252, 1278, + 1219, 1270, 1220, 1221, 1271, 1228, 1226, 1257, 1244, 1258, + 1259, 1264, 1265, 1266, 253, 1279, 1280, 357, 1267, 1274, + 376, 1275, 1281, 1130, 1287, 295, 1288, 1289, 371, 378, + 1290, 389, 298, 1293, 1171, 1183, 260, 379, 335, 254, + 1297, 393, 255, 293, 1302, 1137, 1192, 358, 1131, 337, + 377, 1132, 1170, 1157, 1300, 1303, 1304, 933, 1306, 1307, + 1184, 261, 947, 1185, 1191, 1190, 957, 336, 935, 1308, + 1138, 256, 257, 953, 1310, 1234, 1314, 958, 1334, 981, + 1133, 1134, 296, 968, 301, 372, 1236, 315, 390, 1311, + 1335, 1172, 1186, 1187, 1336, 308, 1340, 1344, 319, 258, + 259, 262, 1313, 1193, 1161, 1235, 338, 1341, 1135, 1136, + 1139, 1342, 1343, 304, 263, 264, 318, 664, 265, 266, + 1188, 1189, 267, 1140, 1141, 936, 268, 1142, 1143, 269, + 954, 1144, 270, 271, 959, 1145, 272, 1346, 1146, 273, + 969, 1147, 1148, 1237, 274, 1149, 807, 275, 1150, 276, + 277, 278, 309, 1151, 279, 320, 1152, 287, 1153, 1154, + 1155, 288, 289, 1156, 290, 302, 1163, 889, 316, 815, + 1164, 1165, 1123, 1166, 1162, 821, 670, 998, 1121, 1347, + 823, 1176, 1179, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 1222, 1175, 1204, 1205, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 1212, 126, 351, 1174, 712, 1301, 1124, 1125, 349, 1250, + 1126, 705, 128, 129, 1249, 1127, 1248, 1203, 1251, 1129, + 1128, 1202, 681, 131, 132, 303, 246, 247, 317, 249, + 133, 683, 1305, 995, 689, 134, 135, 136, 1201, 1218, + 1225, 1230, 976, 1243, 822, 250, 697, 1332, 1309, 251, + 1345, 1130, 0, 0, 1245, 0, 0, 252, 709, 1183, + 0, 0, 1171, 0, 0, 0, 0, 0, 0, 1291, + 1192, 0, 0, 1137, 1234, 0, 1131, 0, 0, 1132, + 1170, 1157, 728, 0, 1184, 1236, 0, 1185, 1191, 1190, + 0, 731, 0, 0, 0, 0, 0, 0, 1138, 0, + 0, 0, 0, 0, 1235, 0, 0, 0, 1133, 1134, + 151, 152, 0, 0, 0, 0, 1186, 1187, 0, 1172, + 0, 0, 0, 0, 0, 0, 0, 1193, 0, 0, + 0, 0, 1161, 0, 0, 0, 1135, 1136, 1139, 0, + 158, 0, 1237, 0, 1188, 1189, 0, 0, 0, 0, + 0, 1140, 1141, 0, 0, 1142, 1143, 0, 0, 1144, + 0, 0, 0, 1145, 0, 0, 1146, 0, 0, 1147, + 1148, 0, 0, 1149, 0, 0, 1150, 0, 0, 0, + 0, 1151, 0, 0, 1152, 0, 1153, 1154, 1155, 0, + 0, 1156, 0, 0, 1163, 0, 0, 0, 1164, 1165, + 0, 1166, 1162 }; const short Dhcp6Parser::yycheck_[] = { 71, 72, 73, 74, 75, 76, 16, 78, 79, 80, - 81, 759, 72, 73, 74, 75, 76, 79, 78, 79, - 73, 81, 728, 753, 73, 79, 1022, 73, 1022, 1022, - 73, 73, 74, 75, 76, 1022, 1022, 78, 79, 125, - 5, 197, 7, 0, 9, 132, 133, 24, 627, 73, - 668, 123, 3, 13, 14, 32, 212, 8, 130, 73, - 73, 3, 680, 681, 682, 212, 8, 132, 133, 72, - 73, 74, 75, 76, 3, 78, 79, 6, 81, 16, - 17, 18, 19, 20, 74, 75, 7, 73, 73, 73, - 95, 96, 74, 75, 95, 96, 76, 77, 78, 79, - 80, 81, 73, 73, 3, 7, 73, 73, 3, 8, - 73, 175, 176, 8, 73, 95, 96, 73, 95, 96, - 73, 73, 701, 7, 73, 212, 212, 73, 178, 179, - 180, 181, 73, 125, 126, 73, 128, 73, 73, 73, - 11, 12, 73, 7, 15, 73, 151, 152, 153, 73, - 21, 22, 23, 7, 155, 156, 95, 96, 95, 96, - 3, 3, 3, 6, 10, 215, 8, 8, 145, 146, - 147, 148, 3, 7, 7, 6, 47, 48, 49, 50, - 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, - 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, - 71, 72, 73, 74, 75, 3, 3, 212, 3, 6, - 8, 212, 3, 8, 85, 86, 74, 8, 3, 158, - 159, 160, 24, 8, 95, 96, 7, 3, 3, 3, - 6, 102, 212, 8, 8, 212, 107, 108, 109, 110, - 111, 112, 113, 7, 7, 116, 7, 212, 213, 214, - 215, 122, 135, 136, 137, 138, 139, 140, 114, 115, - 131, 3, 1258, 134, 1258, 1258, 8, 25, 26, 27, - 141, 1258, 1258, 212, 76, 212, 78, 79, 149, 150, - 82, 83, 84, 154, 3, 7, 157, 3, 6, 8, - 161, 8, 8, 95, 96, 7, 189, 3, 1028, 192, - 193, 194, 195, 4, 1010, 3, 3, 3, 1056, 4, - 8, 182, 183, 184, 185, 186, 187, 4, 3, 3, - 142, 143, 144, 8, 8, 196, 47, 48, 49, 50, - 51, 52, 3, 3, 3, 3, 8, 8, 24, 8, - 8, 212, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 4, 75, 76, 42, 43, 44, 45, - 46, 3, 75, 3, 3, 75, 8, 3, 8, 8, - 4, 3, 8, 4, 95, 96, 8, 90, 91, 92, - 93, 94, 95, 96, 3, 95, 96, 3, 3, 8, - 76, 3, 8, 8, 4, 4, 8, 118, 119, 120, - 4, 76, 4, 4, 117, 4, 116, 4, 121, 4, - 212, 4, 4, 123, 124, 125, 126, 127, 128, 4, - 95, 96, 4, 4, 434, 435, 4, 75, 4, 103, - 104, 105, 106, 4, 4, 506, 39, 40, 41, 4, - 88, 4, 513, 4, 4, 4, 4, 95, 96, 4, - 4, 4, 4, 513, 525, 4, 4, 528, 4, 4, - 4, 4, 4, 4, 535, 525, 212, 4, 528, 117, - 8, 4, 525, 121, 545, 535, 525, 8, 4, 525, - 4, 8, 525, 525, 555, 545, 528, 3, 213, 560, - 4, 212, 4, 535, 4, 555, 4, 4, 560, 212, - 560, 525, 212, 545, 4, 4, 560, 4, 4, 580, - 513, 525, 525, 188, 555, 190, 191, 4, 4, 560, - 580, 4, 525, 4, 4, 528, 212, 215, 4, 4, - 213, 213, 535, 213, 213, 213, 213, 212, 528, 525, - 525, 525, 545, 4, 4, 535, 528, 213, 215, 214, - 214, 214, 555, 535, 525, 525, 213, 560, 525, 525, - 213, 213, 525, 213, 212, 4, 525, 4, 215, 525, - 215, 215, 525, 525, 215, 4, 525, 580, 215, 525, - 213, 4, 4, 4, 525, 4, 215, 525, 215, 525, - 525, 525, 215, 4, 525, 4, 4, 525, 4, 4, - 4, 525, 4, 4, 4, 213, 4, 4, 4, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - 58, 59, 4, 4, 4, 215, 64, 65, 66, 67, - 68, 69, 70, 71, 72, 215, 215, 75, 4, 4, - 4, 215, 215, 4, 213, 213, 4, 4, 4, 87, - 4, 89, 723, 215, 4, 726, 213, 95, 96, 97, - 98, 99, 100, 101, 102, 4, 726, 4, 4, 107, - 108, 109, 4, 213, 4, 4, 4, 213, 213, 117, - 4, 4, 4, 121, 122, 4, 4, 4, 759, 760, - 761, 129, 763, 4, 213, 4, 767, 4, 4, 759, - 760, 761, 762, 763, 215, 4, 215, 4, 4, 215, - 215, 4, 722, 4, 4, 213, 4, 4, 213, 213, - 4, 4, 215, 726, 198, 199, 200, 201, 202, 203, - 204, 205, 206, 207, 208, 209, 210, 211, 215, 4, - 4, 4, 213, 4, 182, 183, 212, 7, 7, 7, - 7, 7, 5, 212, 212, 212, 759, 760, 761, 762, - 763, 47, 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, 58, 59, 212, 5, 5, 5, 64, 65, - 66, 67, 68, 69, 70, 71, 72, 73, 5, 75, - 76, 95, 96, 7, 212, 5, 5, 5, 212, 5, - 7, 5, 5, 8, 701, 7, 7, 7, 7, 95, - 96, 7, 98, 99, 7, 101, 102, 212, 5, 7, - 5, 107, 108, 109, 5, 5, 212, 212, 212, 212, - 7, 117, 177, 212, 212, 121, 212, 212, 212, 212, - 212, 212, 212, 129, 212, 212, 5, 7, 6, 212, - 212, 7, 212, 212, 7, 7, 7, 212, 162, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, - 174, 212, 212, 7, 212, 7, 7, 212, 182, 183, - 7, 7, 7, 4, 4, 4, 4, 4, 4, 4, - 4, 3, 3, 6, 3, 215, 182, 183, 6, 6, - 3, 6, 3, 213, 6, 3, 6, 6, 212, 3, - 212, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 212, 3, 6, 6, - 3, 6, 4, 4, 4, 4, 213, 215, 213, 213, - 213, 4, 1013, 213, 4, 1016, 4, 4, 1019, 4, - 4, 1022, 4, 1013, 4, 4, 1016, 1019, 213, 1019, - 1013, 213, 1022, 1034, 1013, 1019, 1037, 1013, 213, 1040, - 1013, 1013, 213, 1022, 1034, 1016, 1022, 1037, 1019, 1022, - 1022, 1022, 213, 215, 4, 1056, 213, 213, 1034, 1013, - 1061, 1034, 1034, 1034, 1065, 1037, 1056, 213, 1022, 1013, - 1013, 1061, 213, 1074, 4, 1065, 4, 1078, 1022, 1022, - 1013, 1071, 1083, 1016, 1074, 1086, 1019, 215, 213, 1022, - 1034, 1034, 213, 1083, 213, 4, 1086, 1013, 1013, 1013, - 6, 1034, 1022, 1074, 1037, 3, 1022, 1022, 1022, 215, - 1022, 1083, 1013, 1013, 1086, 4, 1013, 1013, 1034, 1034, - 1013, 1022, 1022, 1056, 1013, 1022, 1022, 1013, 1061, 1022, - 1013, 1013, 1065, 1022, 1013, 212, 1022, 1013, 1071, 1022, - 1022, 1074, 1013, 1022, 212, 1013, 1022, 1013, 1013, 1013, - 1083, 1022, 1013, 1086, 1022, 1013, 1022, 1022, 1022, 1013, - 212, 1022, 8, 1083, 1022, 8, 1086, 4, 1022, 8, - 3, 1083, 212, 8, 1086, 4, 212, 4, 212, 4, - 4, 4, 723, 5, 4, 212, 212, 212, 7, 4, - 4, 4, 4, 714, 752, 513, 726, 1012, 1007, 506, - 1028, 807, 1032, 1025, 1061, 1042, 1040, 563, 212, 1049, - 1015, 1013, 1024, 1258, 212, 212, 212, 212, 212, 77, - 1018, 1016, 213, 215, 213, 1021, 212, 1019, 1088, 212, - 1085, 212, 555, 1083, 1086, 1039, 213, 215, 212, 212, - 560, 777, 525, 1266, 1037, 1035, 528, 1065, 1056, 763, - 1071, 580, 1281, 1304, 535, 1075, 725, 1258, 1324, 1078, - 584, -1, -1, -1, -1, 1266, 545, -1, 1258, -1, - -1, -1, -1, -1, -1, 1215, 1266, -1, -1, 1258, - 1281, -1, 1258, -1, -1, 1258, 1258, 1258, -1, -1, - 1266, 1281, -1, 1266, 1266, 1266, -1, -1, -1, -1, - -1, -1, -1, -1, 1258, -1, -1, -1, -1, -1, - 1281, -1, -1, -1, 1258, 1258, -1, -1, -1, -1, - -1, -1, 1266, 1266, -1, 1258, -1, -1, -1, -1, - -1, -1, -1, 1266, -1, -1, -1, -1, 1258, -1, - -1, -1, 1258, 1258, 1258, -1, 1258, -1, 1281, -1, - 1266, 1266, -1, -1, -1, -1, -1, 1258, 1258, -1, - -1, 1258, 1258, -1, -1, 1258, -1, -1, -1, 1258, - -1, -1, 1258, -1, -1, 1258, 1258, -1, -1, 1258, - -1, -1, 1258, -1, -1, -1, -1, 1258, -1, -1, - 1258, -1, 1258, 1258, 1258, -1, -1, 1258, -1, -1, - 1258, -1, -1, -1, 1258 + 81, 771, 72, 73, 74, 75, 76, 79, 78, 79, + 73, 81, 738, 765, 73, 79, 1034, 73, 1034, 1034, + 73, 73, 74, 75, 76, 1034, 1034, 78, 79, 127, + 5, 637, 7, 199, 9, 134, 135, 125, 3, 73, + 0, 6, 97, 98, 132, 214, 3, 74, 214, 73, + 73, 8, 16, 17, 18, 19, 20, 134, 135, 72, + 73, 74, 75, 76, 75, 78, 79, 7, 81, 180, + 181, 182, 183, 10, 74, 75, 678, 73, 73, 73, + 7, 92, 93, 94, 95, 96, 97, 98, 690, 691, + 692, 7, 73, 73, 3, 3, 73, 73, 6, 8, + 73, 7, 157, 158, 73, 711, 217, 73, 119, 7, + 73, 73, 123, 3, 73, 214, 214, 73, 8, 3, + 3, 3, 73, 6, 8, 73, 8, 73, 73, 73, + 7, 3, 73, 97, 98, 73, 8, 13, 14, 73, + 73, 3, 73, 24, 74, 75, 8, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 7, 214, + 7, 42, 43, 44, 45, 46, 137, 138, 139, 140, + 141, 142, 11, 12, 191, 7, 15, 194, 195, 196, + 197, 7, 21, 22, 23, 76, 77, 78, 79, 80, + 81, 3, 3, 3, 3, 76, 8, 8, 8, 8, + 3, 127, 128, 214, 130, 8, 97, 98, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, 70, 71, 72, 73, 74, 75, 24, 75, 214, + 215, 216, 217, 116, 117, 32, 85, 86, 87, 88, + 214, 7, 3, 90, 1272, 6, 1272, 1272, 97, 98, + 97, 98, 7, 1272, 1272, 104, 3, 24, 7, 6, + 109, 110, 111, 112, 113, 114, 115, 6, 3, 118, + 76, 3, 119, 8, 3, 124, 123, 3, 1040, 8, + 3, 8, 8, 4, 133, 8, 1022, 136, 1068, 97, + 98, 97, 98, 3, 143, 25, 26, 27, 8, 3, + 97, 98, 151, 152, 8, 3, 8, 156, 4, 76, + 159, 78, 79, 214, 163, 82, 83, 84, 4, 75, + 3, 177, 178, 214, 3, 8, 97, 98, 3, 8, + 97, 98, 4, 8, 4, 184, 185, 186, 187, 188, + 189, 97, 98, 3, 3, 153, 154, 155, 8, 198, + 147, 148, 149, 150, 47, 48, 49, 50, 51, 52, + 4, 3, 118, 3, 3, 214, 8, 214, 8, 125, + 126, 127, 128, 129, 130, 3, 3, 39, 40, 41, + 8, 8, 75, 76, 190, 4, 192, 193, 3, 160, + 161, 162, 3, 8, 3, 3, 8, 8, 4, 8, + 8, 144, 145, 146, 97, 98, 214, 4, 214, 4, + 440, 441, 4, 105, 106, 107, 108, 214, 4, 4, + 4, 4, 4, 514, 4, 4, 4, 120, 121, 122, + 521, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 521, 533, 214, 3, 536, 4, 214, 4, 4, + 4, 4, 543, 533, 4, 4, 536, 4, 214, 4, + 533, 4, 553, 543, 533, 4, 4, 533, 4, 4, + 533, 533, 563, 553, 536, 8, 4, 568, 4, 8, + 4, 543, 4, 563, 4, 4, 568, 4, 568, 533, + 4, 553, 4, 4, 568, 214, 4, 588, 521, 533, + 533, 4, 563, 4, 4, 4, 4, 568, 588, 215, + 533, 216, 215, 536, 215, 215, 215, 4, 215, 4, + 543, 214, 217, 217, 215, 215, 536, 533, 533, 533, + 553, 216, 216, 543, 215, 215, 4, 97, 98, 215, + 563, 215, 533, 533, 217, 568, 533, 533, 217, 4, + 533, 217, 217, 217, 533, 4, 4, 533, 4, 215, + 533, 533, 4, 4, 533, 588, 4, 533, 4, 4, + 4, 217, 533, 4, 217, 533, 217, 533, 533, 533, + 4, 4, 533, 4, 4, 533, 4, 4, 4, 533, + 533, 4, 533, 215, 4, 4, 536, 4, 4, 4, + 4, 217, 4, 543, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 217, 217, 4, + 4, 217, 215, 217, 184, 185, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 215, 4, 733, 4, 4, 736, 4, 4, 4, 4, + 4, 4, 215, 4, 214, 217, 736, 4, 215, 4, + 4, 4, 4, 215, 215, 4, 4, 4, 4, 4, + 4, 215, 4, 4, 4, 217, 217, 217, 4, 4, + 771, 772, 773, 217, 775, 4, 4, 4, 779, 4, + 215, 771, 772, 773, 774, 775, 4, 215, 4, 215, + 4, 4, 732, 4, 217, 4, 215, 217, 4, 7, + 214, 5, 7, 736, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, 58, 59, 7, 7, 7, + 214, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 214, 214, 75, 5, 5, 5, 5, 214, 771, 772, + 773, 774, 775, 86, 87, 214, 89, 7, 91, 5, + 214, 5, 5, 5, 97, 98, 99, 100, 101, 102, + 103, 104, 7, 5, 5, 214, 109, 110, 111, 7, + 7, 7, 7, 7, 7, 214, 119, 5, 7, 5, + 123, 124, 5, 5, 4, 214, 7, 179, 131, 214, + 214, 5, 214, 214, 7, 7, 214, 7, 7, 7, + 7, 214, 7, 214, 214, 214, 214, 214, 214, 214, + 214, 214, 214, 214, 214, 214, 214, 214, 214, 7, + 7, 214, 7, 7, 4, 4, 4, 4, 4, 4, + 4, 3, 214, 6, 3, 6, 6, 3, 6, 3, + 215, 184, 185, 6, 3, 6, 6, 3, 6, 3, + 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 3, 217, 6, 3, + 6, 214, 3, 8, 6, 4, 4, 4, 4, 217, + 4, 215, 215, 215, 215, 215, 4, 4, 4, 4, + 4, 4, 215, 215, 215, 215, 215, 4, 215, 4, + 215, 4, 4, 215, 4, 215, 4, 6, 4, 4, + 217, 8, 215, 215, 8, 215, 217, 214, 217, 214, + 214, 214, 214, 214, 1025, 8, 3, 1028, 214, 214, + 1031, 214, 8, 1034, 214, 1025, 214, 214, 1028, 1031, + 214, 1031, 1025, 4, 1034, 1046, 1025, 1031, 1049, 1025, + 214, 1052, 1025, 1025, 4, 1034, 1046, 1028, 1034, 1049, + 1031, 1034, 1034, 1034, 214, 4, 217, 1068, 4, 215, + 1046, 1025, 1073, 1046, 1046, 1046, 1077, 1049, 1068, 4, + 1034, 1025, 1025, 1073, 214, 1086, 7, 1077, 4, 1090, + 1034, 1034, 1025, 1083, 1095, 1028, 1086, 1098, 1031, 214, + 4, 1034, 1046, 1046, 4, 1095, 4, 4, 1098, 1025, + 1025, 1025, 214, 1046, 1034, 1086, 1049, 217, 1034, 1034, + 1034, 215, 215, 1095, 1025, 1025, 1098, 514, 1025, 1025, + 1046, 1046, 1025, 1034, 1034, 1068, 1025, 1034, 1034, 1025, + 1073, 1034, 1025, 1025, 1077, 1034, 1025, 214, 1034, 1025, + 1083, 1034, 1034, 1086, 1025, 1034, 711, 1025, 1034, 1025, + 1025, 1025, 1095, 1034, 1025, 1098, 1034, 1025, 1034, 1034, + 1034, 1025, 1025, 1034, 1025, 1095, 1034, 764, 1098, 724, + 1034, 1034, 1024, 1034, 1034, 733, 521, 819, 1019, 214, + 736, 1040, 1044, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, 59, 1073, 1037, 1052, 1054, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 1061, 75, 76, 1036, 571, 1272, 1025, 1027, 77, 1098, + 1028, 563, 86, 87, 1097, 1030, 1095, 1051, 1100, 1033, + 1031, 1049, 533, 97, 98, 1095, 100, 101, 1098, 103, + 104, 536, 1280, 789, 543, 109, 110, 111, 1047, 1068, + 1077, 1083, 775, 1087, 735, 119, 553, 1318, 1295, 123, + 1338, 1272, -1, -1, 1090, -1, -1, 131, 568, 1280, + -1, -1, 1272, -1, -1, -1, -1, -1, -1, 1229, + 1280, -1, -1, 1272, 1295, -1, 1272, -1, -1, 1272, + 1272, 1272, 588, -1, 1280, 1295, -1, 1280, 1280, 1280, + -1, 592, -1, -1, -1, -1, -1, -1, 1272, -1, + -1, -1, -1, -1, 1295, -1, -1, -1, 1272, 1272, + 184, 185, -1, -1, -1, -1, 1280, 1280, -1, 1272, + -1, -1, -1, -1, -1, -1, -1, 1280, -1, -1, + -1, -1, 1272, -1, -1, -1, 1272, 1272, 1272, -1, + 214, -1, 1295, -1, 1280, 1280, -1, -1, -1, -1, + -1, 1272, 1272, -1, -1, 1272, 1272, -1, -1, 1272, + -1, -1, -1, 1272, -1, -1, 1272, -1, -1, 1272, + 1272, -1, -1, 1272, -1, -1, 1272, -1, -1, -1, + -1, 1272, -1, -1, 1272, -1, 1272, 1272, 1272, -1, + -1, 1272, -1, -1, 1272, -1, -1, -1, 1272, 1272, + -1, 1272, 1272 }; const short Dhcp6Parser::yystos_[] = { - 0, 198, 199, 200, 201, 202, 203, 204, 205, 206, - 207, 208, 209, 210, 211, 217, 218, 219, 220, 221, - 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, - 0, 5, 7, 9, 212, 213, 214, 215, 232, 233, - 234, 239, 7, 248, 7, 253, 7, 300, 7, 411, - 7, 491, 7, 507, 7, 524, 7, 443, 7, 449, - 7, 473, 7, 387, 7, 595, 7, 626, 240, 235, - 249, 254, 301, 412, 492, 508, 525, 444, 450, 474, - 388, 596, 627, 232, 241, 242, 212, 237, 238, 10, - 250, 252, 11, 12, 15, 21, 22, 23, 47, 48, + 0, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 0, 5, 7, 9, 214, 215, 216, 217, 234, 235, + 236, 241, 7, 250, 7, 255, 7, 306, 7, 417, + 7, 497, 7, 513, 7, 530, 7, 449, 7, 455, + 7, 479, 7, 393, 7, 601, 7, 632, 242, 237, + 251, 256, 307, 418, 498, 514, 531, 450, 456, 480, + 394, 602, 633, 234, 243, 244, 214, 239, 240, 10, + 252, 254, 11, 12, 15, 21, 22, 23, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, - 69, 70, 71, 72, 73, 74, 75, 85, 86, 95, - 96, 102, 107, 108, 109, 110, 111, 112, 113, 116, - 122, 131, 134, 141, 149, 150, 154, 157, 161, 182, - 183, 184, 185, 186, 187, 196, 212, 247, 255, 256, - 257, 259, 260, 261, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, 273, 274, 275, 276, 279, - 281, 283, 284, 285, 287, 289, 290, 291, 292, 294, - 295, 296, 297, 298, 310, 312, 314, 352, 360, 366, - 372, 374, 381, 395, 405, 425, 426, 427, 428, 433, - 441, 467, 497, 499, 518, 548, 562, 574, 575, 583, - 593, 624, 633, 657, 16, 17, 18, 19, 20, 247, - 302, 303, 304, 306, 307, 308, 309, 497, 499, 87, - 89, 97, 98, 99, 100, 101, 117, 121, 129, 247, - 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, - 269, 270, 271, 273, 274, 275, 276, 279, 281, 283, - 284, 285, 287, 289, 413, 414, 415, 417, 419, 421, - 423, 425, 426, 427, 428, 431, 432, 467, 485, 497, - 499, 501, 518, 543, 88, 247, 421, 423, 467, 493, - 494, 495, 497, 499, 90, 91, 92, 93, 94, 247, - 421, 423, 467, 497, 499, 509, 510, 511, 513, 514, - 516, 517, 116, 123, 124, 125, 126, 127, 128, 247, - 467, 497, 499, 526, 527, 528, 529, 531, 533, 535, - 537, 539, 541, 441, 24, 76, 78, 79, 82, 83, - 84, 247, 332, 451, 452, 453, 454, 455, 456, 457, - 459, 461, 463, 464, 466, 497, 499, 77, 80, 81, - 247, 332, 455, 461, 475, 476, 477, 478, 479, 481, - 482, 483, 484, 497, 499, 132, 133, 247, 389, 390, - 391, 393, 162, 163, 164, 165, 166, 167, 168, 169, - 170, 171, 172, 173, 174, 182, 183, 247, 497, 499, - 597, 598, 599, 600, 602, 604, 605, 607, 608, 609, - 612, 614, 615, 616, 618, 620, 622, 13, 14, 628, - 629, 630, 632, 6, 3, 4, 8, 3, 251, 3, - 8, 258, 625, 299, 311, 313, 315, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 293, 4, 4, 4, 4, 4, 277, 280, 282, - 4, 4, 4, 406, 442, 468, 4, 434, 498, 500, - 429, 4, 4, 4, 361, 373, 367, 353, 549, 519, - 382, 396, 563, 4, 375, 576, 584, 594, 286, 288, - 4, 4, 4, 634, 658, 4, 3, 8, 305, 4, - 4, 4, 4, 3, 8, 486, 502, 416, 418, 420, - 4, 4, 424, 422, 544, 3, 8, 496, 3, 8, - 512, 4, 515, 4, 4, 3, 8, 542, 530, 532, - 534, 536, 538, 540, 8, 3, 8, 458, 333, 4, - 462, 460, 465, 4, 8, 3, 480, 4, 4, 8, - 3, 392, 394, 3, 8, 4, 601, 603, 4, 606, - 4, 4, 610, 613, 4, 4, 617, 619, 621, 623, - 3, 8, 631, 4, 3, 8, 232, 232, 212, 4, - 4, 4, 4, 4, 4, 4, 213, 213, 213, 213, - 213, 213, 213, 213, 215, 214, 214, 214, 213, 213, - 4, 213, 213, 215, 215, 215, 4, 4, 4, 215, - 215, 215, 4, 4, 4, 213, 4, 4, 4, 4, - 215, 215, 215, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 213, 4, 4, 4, 4, 4, 4, 215, - 215, 215, 4, 4, 256, 4, 215, 215, 213, 213, - 303, 4, 4, 4, 4, 4, 213, 215, 4, 4, - 4, 414, 4, 494, 4, 213, 4, 213, 213, 510, - 4, 4, 4, 4, 4, 4, 4, 528, 4, 4, - 213, 4, 4, 4, 215, 453, 4, 215, 215, 477, - 4, 4, 390, 215, 4, 4, 213, 4, 213, 213, - 4, 4, 215, 215, 4, 4, 4, 4, 598, 4, - 213, 629, 4, 7, 212, 7, 7, 7, 7, 5, - 212, 178, 179, 180, 181, 215, 278, 212, 212, 5, - 5, 5, 5, 234, 236, 212, 103, 104, 105, 106, - 430, 5, 5, 5, 7, 5, 5, 5, 7, 7, - 7, 7, 7, 7, 212, 212, 5, 7, 5, 243, - 5, 5, 212, 212, 212, 243, 212, 7, 212, 212, - 212, 243, 243, 243, 212, 212, 212, 212, 212, 212, - 212, 212, 212, 212, 212, 236, 212, 212, 212, 175, - 176, 611, 177, 278, 212, 212, 212, 5, 232, 255, - 628, 302, 24, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 42, 43, 44, 45, 46, 247, - 320, 321, 322, 325, 327, 329, 331, 332, 334, 335, - 336, 337, 338, 339, 342, 343, 344, 346, 348, 350, - 320, 7, 316, 317, 318, 7, 407, 408, 409, 7, - 445, 446, 447, 7, 469, 470, 471, 7, 435, 436, - 437, 125, 212, 362, 363, 364, 365, 241, 126, 128, - 364, 368, 369, 370, 371, 114, 115, 354, 355, 356, - 358, 7, 550, 551, 7, 520, 521, 522, 7, 383, - 384, 385, 135, 136, 137, 138, 139, 140, 397, 398, - 399, 400, 401, 402, 403, 404, 24, 145, 146, 147, - 148, 247, 334, 497, 499, 564, 565, 566, 569, 570, - 572, 573, 151, 152, 153, 247, 376, 377, 378, 379, - 380, 497, 499, 155, 156, 247, 497, 499, 577, 578, - 579, 581, 158, 159, 160, 212, 497, 499, 585, 586, - 587, 588, 590, 591, 597, 7, 635, 636, 197, 247, - 659, 660, 661, 244, 7, 487, 488, 489, 7, 503, - 504, 505, 130, 529, 545, 546, 316, 8, 8, 8, - 323, 326, 328, 330, 4, 4, 4, 4, 4, 4, - 4, 340, 4, 345, 347, 349, 351, 3, 8, 8, - 319, 6, 3, 410, 6, 3, 448, 6, 3, 472, - 6, 3, 438, 6, 3, 3, 6, 6, 3, 6, - 357, 359, 3, 8, 552, 3, 6, 523, 6, 3, - 386, 6, 3, 4, 4, 4, 4, 4, 4, 3, - 8, 567, 571, 4, 4, 4, 3, 8, 4, 4, - 4, 3, 8, 580, 582, 3, 8, 4, 589, 4, - 592, 3, 8, 8, 637, 3, 6, 4, 3, 8, - 212, 245, 246, 490, 6, 3, 506, 6, 3, 547, - 8, 6, 4, 4, 4, 4, 213, 215, 213, 215, - 213, 213, 213, 4, 213, 4, 4, 4, 4, 321, - 320, 318, 413, 409, 451, 447, 475, 471, 247, 259, - 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, - 270, 271, 273, 274, 275, 276, 279, 281, 283, 284, - 285, 287, 289, 332, 405, 417, 419, 421, 423, 425, - 426, 427, 428, 432, 439, 440, 467, 497, 499, 543, - 437, 363, 369, 4, 4, 355, 118, 119, 120, 247, - 259, 260, 261, 262, 263, 264, 332, 467, 497, 499, - 553, 554, 555, 556, 557, 559, 561, 551, 526, 522, - 389, 385, 213, 213, 213, 213, 213, 213, 398, 4, - 4, 213, 213, 213, 565, 215, 213, 213, 377, 4, - 4, 578, 215, 4, 213, 4, 586, 188, 190, 191, - 247, 332, 497, 499, 638, 639, 640, 641, 643, 636, - 215, 660, 6, 3, 493, 489, 509, 505, 4, 25, - 26, 27, 324, 212, 212, 212, 39, 40, 41, 341, - 212, 212, 212, 212, 8, 8, 8, 8, 3, 8, - 212, 212, 558, 560, 4, 8, 3, 8, 8, 142, - 143, 144, 568, 212, 212, 212, 212, 232, 644, 4, - 642, 3, 8, 212, 8, 8, 212, 440, 4, 4, - 215, 555, 4, 213, 4, 639, 212, 212, 5, 212, - 7, 645, 646, 647, 3, 6, 189, 192, 193, 194, - 195, 648, 649, 650, 652, 653, 654, 655, 646, 651, - 4, 4, 4, 656, 3, 8, 4, 215, 213, 213, - 4, 649, 212, 212 + 69, 70, 71, 72, 73, 74, 75, 85, 86, 87, + 88, 97, 98, 104, 109, 110, 111, 112, 113, 114, + 115, 118, 124, 133, 136, 143, 151, 152, 156, 159, + 163, 184, 185, 186, 187, 188, 189, 198, 214, 249, + 257, 258, 259, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 281, 283, 285, 286, 287, 289, 291, 292, 293, + 294, 296, 297, 299, 301, 302, 303, 304, 316, 318, + 320, 358, 366, 372, 378, 380, 387, 401, 411, 431, + 432, 433, 434, 439, 447, 473, 503, 505, 524, 554, + 568, 580, 581, 589, 599, 630, 639, 663, 16, 17, + 18, 19, 20, 249, 308, 309, 310, 312, 313, 314, + 315, 503, 505, 89, 91, 99, 100, 101, 102, 103, + 119, 123, 131, 249, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 275, 276, 277, + 278, 281, 283, 285, 286, 287, 289, 291, 297, 299, + 419, 420, 421, 423, 425, 427, 429, 431, 432, 433, + 434, 437, 438, 473, 491, 503, 505, 507, 524, 549, + 90, 249, 427, 429, 473, 499, 500, 501, 503, 505, + 92, 93, 94, 95, 96, 249, 427, 429, 473, 503, + 505, 515, 516, 517, 519, 520, 522, 523, 118, 125, + 126, 127, 128, 129, 130, 249, 473, 503, 505, 532, + 533, 534, 535, 537, 539, 541, 543, 545, 547, 447, + 24, 76, 78, 79, 82, 83, 84, 249, 338, 457, + 458, 459, 460, 461, 462, 463, 465, 467, 469, 470, + 472, 503, 505, 77, 80, 81, 249, 338, 461, 467, + 481, 482, 483, 484, 485, 487, 488, 489, 490, 503, + 505, 134, 135, 249, 395, 396, 397, 399, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, + 176, 184, 185, 249, 503, 505, 603, 604, 605, 606, + 608, 610, 611, 613, 614, 615, 618, 620, 621, 622, + 624, 626, 628, 13, 14, 634, 635, 636, 638, 6, + 3, 4, 8, 3, 253, 3, 8, 260, 631, 305, + 317, 319, 321, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 295, 4, 4, + 4, 4, 4, 279, 282, 284, 4, 4, 4, 412, + 448, 474, 4, 298, 300, 440, 504, 506, 435, 4, + 4, 4, 367, 379, 373, 359, 555, 525, 388, 402, + 569, 4, 381, 582, 590, 600, 288, 290, 4, 4, + 4, 640, 664, 4, 3, 8, 311, 4, 4, 4, + 4, 3, 8, 492, 508, 422, 424, 426, 4, 4, + 430, 428, 550, 3, 8, 502, 3, 8, 518, 4, + 521, 4, 4, 3, 8, 548, 536, 538, 540, 542, + 544, 546, 8, 3, 8, 464, 339, 4, 468, 466, + 471, 4, 8, 3, 486, 4, 4, 8, 3, 398, + 400, 3, 8, 4, 607, 609, 4, 612, 4, 4, + 616, 619, 4, 4, 623, 625, 627, 629, 3, 8, + 637, 4, 3, 8, 234, 234, 214, 4, 4, 4, + 4, 4, 4, 4, 215, 215, 215, 215, 215, 215, + 215, 215, 217, 216, 216, 216, 215, 215, 4, 215, + 215, 217, 217, 217, 4, 4, 4, 217, 217, 217, + 4, 4, 4, 215, 4, 4, 4, 4, 4, 4, + 217, 217, 217, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 215, 4, 4, 4, 4, 4, 4, 217, + 217, 217, 4, 4, 258, 4, 217, 217, 215, 215, + 309, 4, 4, 4, 4, 4, 215, 217, 4, 4, + 4, 420, 4, 500, 4, 215, 4, 215, 215, 516, + 4, 4, 4, 4, 4, 4, 4, 534, 4, 4, + 215, 4, 4, 4, 217, 459, 4, 217, 217, 483, + 4, 4, 396, 217, 4, 4, 215, 4, 215, 215, + 4, 4, 217, 217, 4, 4, 4, 4, 604, 4, + 215, 635, 4, 7, 214, 7, 7, 7, 7, 5, + 214, 180, 181, 182, 183, 217, 280, 214, 214, 5, + 5, 5, 214, 214, 5, 236, 238, 214, 105, 106, + 107, 108, 436, 5, 5, 5, 7, 5, 5, 5, + 7, 7, 7, 7, 7, 7, 214, 214, 5, 7, + 5, 245, 5, 5, 214, 214, 214, 245, 214, 7, + 214, 214, 214, 245, 245, 245, 214, 214, 214, 214, + 214, 214, 214, 214, 214, 214, 214, 238, 214, 214, + 214, 177, 178, 617, 179, 280, 214, 214, 214, 5, + 234, 257, 634, 308, 24, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 42, 43, 44, 45, + 46, 249, 326, 327, 328, 331, 333, 335, 337, 338, + 340, 341, 342, 343, 344, 345, 348, 349, 350, 352, + 354, 356, 326, 7, 322, 323, 324, 7, 413, 414, + 415, 7, 451, 452, 453, 7, 475, 476, 477, 7, + 441, 442, 443, 127, 214, 368, 369, 370, 371, 243, + 128, 130, 370, 374, 375, 376, 377, 116, 117, 360, + 361, 362, 364, 7, 556, 557, 7, 526, 527, 528, + 7, 389, 390, 391, 137, 138, 139, 140, 141, 142, + 403, 404, 405, 406, 407, 408, 409, 410, 24, 147, + 148, 149, 150, 249, 340, 503, 505, 570, 571, 572, + 575, 576, 578, 579, 153, 154, 155, 249, 382, 383, + 384, 385, 386, 503, 505, 157, 158, 249, 503, 505, + 583, 584, 585, 587, 160, 161, 162, 214, 503, 505, + 591, 592, 593, 594, 596, 597, 603, 7, 641, 642, + 199, 249, 665, 666, 667, 246, 7, 493, 494, 495, + 7, 509, 510, 511, 132, 535, 551, 552, 322, 8, + 8, 8, 329, 332, 334, 336, 4, 4, 4, 4, + 4, 4, 4, 346, 4, 351, 353, 355, 357, 3, + 8, 8, 325, 6, 3, 416, 6, 3, 454, 6, + 3, 478, 6, 3, 444, 6, 3, 3, 6, 6, + 3, 6, 363, 365, 3, 8, 558, 3, 6, 529, + 6, 3, 392, 6, 3, 4, 4, 4, 4, 4, + 4, 3, 8, 573, 577, 4, 4, 4, 3, 8, + 4, 4, 4, 3, 8, 586, 588, 3, 8, 4, + 595, 4, 598, 3, 8, 8, 643, 3, 6, 4, + 3, 8, 214, 247, 248, 496, 6, 3, 512, 6, + 3, 553, 8, 6, 4, 4, 4, 4, 215, 217, + 215, 217, 215, 215, 215, 4, 215, 4, 4, 4, + 4, 327, 326, 324, 419, 415, 457, 453, 481, 477, + 249, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 275, 276, 277, 278, 281, 283, + 285, 286, 287, 289, 291, 297, 299, 338, 411, 423, + 425, 427, 429, 431, 432, 433, 434, 438, 445, 446, + 473, 503, 505, 549, 443, 369, 375, 4, 4, 361, + 120, 121, 122, 249, 261, 262, 263, 264, 265, 266, + 338, 473, 503, 505, 559, 560, 561, 562, 563, 565, + 567, 557, 532, 528, 395, 391, 215, 215, 215, 215, + 215, 215, 404, 4, 4, 215, 215, 215, 571, 217, + 215, 215, 383, 4, 4, 584, 217, 4, 215, 4, + 592, 190, 192, 193, 249, 338, 503, 505, 644, 645, + 646, 647, 649, 642, 217, 666, 6, 3, 499, 495, + 515, 511, 4, 25, 26, 27, 330, 214, 214, 214, + 39, 40, 41, 347, 214, 214, 214, 214, 8, 8, + 8, 8, 3, 8, 214, 214, 564, 566, 4, 8, + 3, 8, 8, 144, 145, 146, 574, 214, 214, 214, + 214, 234, 650, 4, 648, 3, 8, 214, 8, 8, + 214, 446, 4, 4, 217, 561, 4, 215, 4, 645, + 214, 214, 5, 214, 7, 651, 652, 653, 3, 6, + 191, 194, 195, 196, 197, 654, 655, 656, 658, 659, + 660, 661, 652, 657, 4, 4, 4, 662, 3, 8, + 4, 217, 215, 215, 4, 655, 214, 214 }; const short Dhcp6Parser::yyr1_[] = { - 0, 216, 218, 217, 219, 217, 220, 217, 221, 217, - 222, 217, 223, 217, 224, 217, 225, 217, 226, 217, - 227, 217, 228, 217, 229, 217, 230, 217, 231, 217, - 232, 232, 232, 232, 232, 232, 232, 233, 235, 234, - 236, 237, 237, 238, 238, 238, 240, 239, 241, 241, - 242, 242, 242, 244, 243, 245, 245, 246, 246, 246, - 247, 249, 248, 251, 250, 250, 252, 254, 253, 255, - 255, 255, 256, 256, 256, 256, 256, 256, 256, 256, - 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, - 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, - 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, - 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, - 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, - 256, 256, 256, 256, 256, 256, 256, 258, 257, 259, - 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, - 270, 271, 272, 273, 274, 275, 277, 276, 278, 278, - 278, 278, 278, 280, 279, 282, 281, 283, 284, 286, - 285, 288, 287, 289, 290, 291, 293, 292, 294, 295, - 296, 297, 299, 298, 301, 300, 302, 302, 302, 303, - 303, 303, 303, 303, 303, 303, 303, 305, 304, 306, - 307, 308, 309, 311, 310, 313, 312, 315, 314, 316, - 316, 317, 317, 317, 319, 318, 320, 320, 320, 321, - 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, - 321, 321, 321, 321, 321, 321, 321, 321, 323, 322, - 324, 324, 324, 326, 325, 328, 327, 330, 329, 331, - 333, 332, 334, 335, 336, 337, 338, 340, 339, 341, - 341, 341, 342, 343, 345, 344, 347, 346, 349, 348, - 351, 350, 353, 352, 354, 354, 354, 355, 355, 357, - 356, 359, 358, 361, 360, 362, 362, 362, 363, 363, - 364, 365, 367, 366, 368, 368, 368, 369, 369, 369, - 370, 371, 373, 372, 375, 374, 376, 376, 376, 377, - 377, 377, 377, 377, 377, 378, 379, 380, 382, 381, - 383, 383, 384, 384, 384, 386, 385, 388, 387, 389, - 389, 389, 389, 390, 390, 392, 391, 394, 393, 396, - 395, 397, 397, 397, 398, 398, 398, 398, 398, 398, - 399, 400, 401, 402, 403, 404, 406, 405, 407, 407, - 408, 408, 408, 410, 409, 412, 411, 413, 413, 413, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 416, 415, 418, 417, 420, 419, 422, - 421, 424, 423, 425, 426, 427, 429, 428, 430, 430, - 430, 430, 431, 432, 434, 433, 435, 435, 436, 436, - 436, 438, 437, 439, 439, 439, 440, 440, 440, 440, - 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, - 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, - 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, - 440, 440, 440, 440, 440, 440, 442, 441, 444, 443, - 445, 445, 446, 446, 446, 448, 447, 450, 449, 451, - 451, 452, 452, 452, 453, 453, 453, 453, 453, 453, - 453, 453, 453, 453, 454, 455, 456, 458, 457, 460, - 459, 462, 461, 463, 465, 464, 466, 468, 467, 469, - 469, 470, 470, 470, 472, 471, 474, 473, 475, 475, - 476, 476, 476, 477, 477, 477, 477, 477, 477, 477, - 477, 477, 478, 480, 479, 481, 482, 483, 484, 486, - 485, 487, 487, 488, 488, 488, 490, 489, 492, 491, - 493, 493, 493, 494, 494, 494, 494, 494, 494, 494, - 496, 495, 498, 497, 500, 499, 502, 501, 503, 503, - 504, 504, 504, 506, 505, 508, 507, 509, 509, 509, - 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, - 510, 512, 511, 513, 515, 514, 516, 517, 519, 518, - 520, 520, 521, 521, 521, 523, 522, 525, 524, 526, - 526, 527, 527, 527, 528, 528, 528, 528, 528, 528, - 528, 528, 528, 528, 528, 530, 529, 532, 531, 534, - 533, 536, 535, 538, 537, 540, 539, 542, 541, 544, - 543, 545, 545, 547, 546, 549, 548, 550, 550, 550, - 552, 551, 553, 553, 554, 554, 554, 555, 555, 555, - 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, - 555, 556, 558, 557, 560, 559, 561, 563, 562, 564, - 564, 564, 565, 565, 565, 565, 565, 565, 565, 565, - 565, 567, 566, 568, 568, 568, 569, 571, 570, 572, - 573, 574, 576, 575, 577, 577, 577, 578, 578, 578, - 578, 578, 580, 579, 582, 581, 584, 583, 585, 585, - 585, 586, 586, 586, 586, 586, 586, 587, 589, 588, - 590, 592, 591, 594, 593, 596, 595, 597, 597, 597, - 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, 599, 601, - 600, 603, 602, 604, 606, 605, 607, 608, 610, 609, - 611, 611, 613, 612, 614, 615, 617, 616, 619, 618, - 621, 620, 623, 622, 625, 624, 627, 626, 628, 628, - 628, 629, 629, 631, 630, 632, 634, 633, 635, 635, - 635, 637, 636, 638, 638, 638, 639, 639, 639, 639, - 639, 639, 639, 640, 642, 641, 644, 643, 645, 645, - 645, 647, 646, 648, 648, 648, 649, 649, 649, 649, - 649, 651, 650, 652, 653, 654, 656, 655, 658, 657, - 659, 659, 659, 660, 660, 661 + 0, 218, 220, 219, 221, 219, 222, 219, 223, 219, + 224, 219, 225, 219, 226, 219, 227, 219, 228, 219, + 229, 219, 230, 219, 231, 219, 232, 219, 233, 219, + 234, 234, 234, 234, 234, 234, 234, 235, 237, 236, + 238, 239, 239, 240, 240, 240, 242, 241, 243, 243, + 244, 244, 244, 246, 245, 247, 247, 248, 248, 248, + 249, 251, 250, 253, 252, 252, 254, 256, 255, 257, + 257, 257, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 260, + 259, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 277, 279, 278, + 280, 280, 280, 280, 280, 282, 281, 284, 283, 285, + 286, 288, 287, 290, 289, 291, 292, 293, 295, 294, + 296, 298, 297, 300, 299, 301, 302, 303, 305, 304, + 307, 306, 308, 308, 308, 309, 309, 309, 309, 309, + 309, 309, 309, 311, 310, 312, 313, 314, 315, 317, + 316, 319, 318, 321, 320, 322, 322, 323, 323, 323, + 325, 324, 326, 326, 326, 327, 327, 327, 327, 327, + 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, + 327, 327, 327, 327, 329, 328, 330, 330, 330, 332, + 331, 334, 333, 336, 335, 337, 339, 338, 340, 341, + 342, 343, 344, 346, 345, 347, 347, 347, 348, 349, + 351, 350, 353, 352, 355, 354, 357, 356, 359, 358, + 360, 360, 360, 361, 361, 363, 362, 365, 364, 367, + 366, 368, 368, 368, 369, 369, 370, 371, 373, 372, + 374, 374, 374, 375, 375, 375, 376, 377, 379, 378, + 381, 380, 382, 382, 382, 383, 383, 383, 383, 383, + 383, 384, 385, 386, 388, 387, 389, 389, 390, 390, + 390, 392, 391, 394, 393, 395, 395, 395, 395, 396, + 396, 398, 397, 400, 399, 402, 401, 403, 403, 403, + 404, 404, 404, 404, 404, 404, 405, 406, 407, 408, + 409, 410, 412, 411, 413, 413, 414, 414, 414, 416, + 415, 418, 417, 419, 419, 419, 420, 420, 420, 420, + 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, + 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, + 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, + 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, + 420, 422, 421, 424, 423, 426, 425, 428, 427, 430, + 429, 431, 432, 433, 435, 434, 436, 436, 436, 436, + 437, 438, 440, 439, 441, 441, 442, 442, 442, 444, + 443, 445, 445, 445, 446, 446, 446, 446, 446, 446, + 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, + 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, + 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, + 446, 446, 446, 446, 446, 446, 448, 447, 450, 449, + 451, 451, 452, 452, 452, 454, 453, 456, 455, 457, + 457, 458, 458, 458, 459, 459, 459, 459, 459, 459, + 459, 459, 459, 459, 460, 461, 462, 464, 463, 466, + 465, 468, 467, 469, 471, 470, 472, 474, 473, 475, + 475, 476, 476, 476, 478, 477, 480, 479, 481, 481, + 482, 482, 482, 483, 483, 483, 483, 483, 483, 483, + 483, 483, 484, 486, 485, 487, 488, 489, 490, 492, + 491, 493, 493, 494, 494, 494, 496, 495, 498, 497, + 499, 499, 499, 500, 500, 500, 500, 500, 500, 500, + 502, 501, 504, 503, 506, 505, 508, 507, 509, 509, + 510, 510, 510, 512, 511, 514, 513, 515, 515, 515, + 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, + 516, 518, 517, 519, 521, 520, 522, 523, 525, 524, + 526, 526, 527, 527, 527, 529, 528, 531, 530, 532, + 532, 533, 533, 533, 534, 534, 534, 534, 534, 534, + 534, 534, 534, 534, 534, 536, 535, 538, 537, 540, + 539, 542, 541, 544, 543, 546, 545, 548, 547, 550, + 549, 551, 551, 553, 552, 555, 554, 556, 556, 556, + 558, 557, 559, 559, 560, 560, 560, 561, 561, 561, + 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, + 561, 562, 564, 563, 566, 565, 567, 569, 568, 570, + 570, 570, 571, 571, 571, 571, 571, 571, 571, 571, + 571, 573, 572, 574, 574, 574, 575, 577, 576, 578, + 579, 580, 582, 581, 583, 583, 583, 584, 584, 584, + 584, 584, 586, 585, 588, 587, 590, 589, 591, 591, + 591, 592, 592, 592, 592, 592, 592, 593, 595, 594, + 596, 598, 597, 600, 599, 602, 601, 603, 603, 603, + 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, + 604, 604, 604, 604, 604, 604, 604, 604, 605, 607, + 606, 609, 608, 610, 612, 611, 613, 614, 616, 615, + 617, 617, 619, 618, 620, 621, 623, 622, 625, 624, + 627, 626, 629, 628, 631, 630, 633, 632, 634, 634, + 634, 635, 635, 637, 636, 638, 640, 639, 641, 641, + 641, 643, 642, 644, 644, 644, 645, 645, 645, 645, + 645, 645, 645, 646, 648, 647, 650, 649, 651, 651, + 651, 653, 652, 654, 654, 654, 655, 655, 655, 655, + 655, 657, 656, 658, 659, 660, 662, 661, 664, 663, + 665, 665, 665, 666, 666, 667 }; const signed char @@ -6011,38 +6057,39 @@ 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, 0, 4, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 0, 4, 1, 1, - 1, 1, 1, 0, 4, 0, 4, 3, 3, 0, - 4, 0, 4, 3, 3, 3, 0, 4, 3, 3, - 3, 3, 0, 6, 0, 4, 1, 3, 2, 1, - 1, 1, 1, 1, 1, 1, 1, 0, 4, 3, - 3, 3, 3, 0, 6, 0, 6, 0, 6, 0, - 1, 1, 3, 2, 0, 4, 1, 3, 2, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 0, 4, + 1, 1, 1, 1, 1, 0, 4, 0, 4, 3, + 3, 0, 4, 0, 4, 3, 3, 3, 0, 4, + 3, 0, 4, 0, 4, 3, 3, 3, 0, 6, + 0, 4, 1, 3, 2, 1, 1, 1, 1, 1, + 1, 1, 1, 0, 4, 3, 3, 3, 3, 0, + 6, 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, - 1, 1, 1, 0, 4, 0, 4, 0, 4, 3, - 0, 4, 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, 0, - 4, 0, 4, 0, 6, 1, 3, 2, 1, 1, - 1, 1, 0, 6, 1, 3, 2, 1, 1, 1, - 1, 1, 0, 6, 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, 0, 4, 1, 3, 2, + 1, 1, 1, 1, 0, 4, 1, 1, 1, 0, + 4, 0, 4, 0, 4, 3, 0, 4, 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, 0, 4, 0, 4, 0, + 6, 1, 3, 2, 1, 1, 1, 1, 0, 6, + 1, 3, 2, 1, 1, 1, 1, 1, 0, 6, + 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, 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, 0, 4, 0, 4, 0, 4, 0, - 4, 0, 4, 3, 3, 3, 0, 4, 1, 1, - 1, 1, 3, 3, 0, 6, 0, 1, 1, 3, - 2, 0, 4, 1, 3, 2, 1, 1, 1, 1, + 1, 0, 4, 0, 4, 0, 4, 0, 4, 0, + 4, 3, 3, 3, 0, 4, 1, 1, 1, 1, + 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, @@ -6123,21 +6170,21 @@ namespace isc { namespace dhcp { "\"option-data\"", "\"name\"", "\"data\"", "\"code\"", "\"space\"", "\"csv-format\"", "\"always-send\"", "\"record-types\"", "\"encapsulate\"", "\"array\"", "\"parked-packet-limit\"", - "\"shared-networks\"", "\"pools\"", "\"pool\"", "\"pd-pools\"", - "\"prefix\"", "\"prefix-len\"", "\"excluded-prefix\"", - "\"excluded-prefix-len\"", "\"delegated-len\"", "\"user-context\"", - "\"comment\"", "\"subnet\"", "\"interface\"", "\"interface-id\"", - "\"id\"", "\"rapid-commit\"", "\"reservation-mode\"", "\"disabled\"", - "\"out-of-pool\"", "\"global\"", "\"all\"", "\"reservations-global\"", - "\"reservations-in-subnet\"", "\"reservations-out-of-pool\"", - "\"mac-sources\"", "\"relay-supplied-options\"", - "\"host-reservation-identifiers\"", "\"sanity-checks\"", - "\"lease-checks\"", "\"extended-info-checks\"", "\"client-classes\"", - "\"require-client-classes\"", "\"test\"", "\"template-test\"", - "\"only-if-required\"", "\"client-class\"", "\"reservations\"", - "\"ip-addresses\"", "\"prefixes\"", "\"duid\"", "\"hw-address\"", - "\"hostname\"", "\"flex-id\"", "\"relay\"", "\"ip-address\"", - "\"hooks-libraries\"", "\"library\"", "\"parameters\"", + "\"allocator\"", "\"pd-allocator\"", "\"shared-networks\"", "\"pools\"", + "\"pool\"", "\"pd-pools\"", "\"prefix\"", "\"prefix-len\"", + "\"excluded-prefix\"", "\"excluded-prefix-len\"", "\"delegated-len\"", + "\"user-context\"", "\"comment\"", "\"subnet\"", "\"interface\"", + "\"interface-id\"", "\"id\"", "\"rapid-commit\"", "\"reservation-mode\"", + "\"disabled\"", "\"out-of-pool\"", "\"global\"", "\"all\"", + "\"reservations-global\"", "\"reservations-in-subnet\"", + "\"reservations-out-of-pool\"", "\"mac-sources\"", + "\"relay-supplied-options\"", "\"host-reservation-identifiers\"", + "\"sanity-checks\"", "\"lease-checks\"", "\"extended-info-checks\"", + "\"client-classes\"", "\"require-client-classes\"", "\"test\"", + "\"template-test\"", "\"only-if-required\"", "\"client-class\"", + "\"reservations\"", "\"ip-addresses\"", "\"prefixes\"", "\"duid\"", + "\"hw-address\"", "\"hostname\"", "\"flex-id\"", "\"relay\"", + "\"ip-address\"", "\"hooks-libraries\"", "\"library\"", "\"parameters\"", "\"expired-leases-processing\"", "\"reclaim-timer-wait-time\"", "\"flush-reclaimed-timer-wait-time\"", "\"hold-reclaimed-time\"", "\"max-reclaim-leases\"", "\"max-reclaim-time\"", @@ -6183,98 +6230,99 @@ namespace isc { namespace dhcp { "hostname_char_set", "$@25", "hostname_char_replacement", "$@26", "store_extended_info", "statistic_default_sample_count", "statistic_default_sample_age", "server_tag", "$@27", - "parked_packet_limit", "early_global_reservations_lookup", - "ip_reservations_unique", "reservations_lookup_first", - "interfaces_config", "$@28", "sub_interfaces6", "$@29", - "interfaces_config_params", "interfaces_config_param", "interfaces_list", - "$@30", "re_detect", "service_sockets_require_all", - "service_sockets_retry_wait_time", "service_sockets_max_retries", - "lease_database", "$@31", "hosts_database", "$@32", "hosts_databases", - "$@33", "database_list", "not_empty_database_list", "database", "$@34", - "database_map_params", "database_map_param", "database_type", "$@35", - "db_type", "user", "$@36", "password", "$@37", "host", "$@38", "port", - "name", "$@39", "persist", "lfc_interval", "readonly", "connect_timeout", - "reconnect_wait_time", "on_fail", "$@40", "on_fail_mode", - "max_row_errors", "max_reconnect_tries", "trust_anchor", "$@41", - "cert_file", "$@42", "key_file", "$@43", "cipher_list", "$@44", - "sanity_checks", "$@45", "sanity_checks_params", "sanity_checks_param", - "lease_checks", "$@46", "extended_info_checks", "$@47", "mac_sources", - "$@48", "mac_sources_list", "mac_sources_value", "duid_id", "string_id", - "host_reservation_identifiers", "$@49", + "parked_packet_limit", "allocator", "$@28", "pd_allocator", "$@29", + "early_global_reservations_lookup", "ip_reservations_unique", + "reservations_lookup_first", "interfaces_config", "$@30", + "sub_interfaces6", "$@31", "interfaces_config_params", + "interfaces_config_param", "interfaces_list", "$@32", "re_detect", + "service_sockets_require_all", "service_sockets_retry_wait_time", + "service_sockets_max_retries", "lease_database", "$@33", + "hosts_database", "$@34", "hosts_databases", "$@35", "database_list", + "not_empty_database_list", "database", "$@36", "database_map_params", + "database_map_param", "database_type", "$@37", "db_type", "user", "$@38", + "password", "$@39", "host", "$@40", "port", "name", "$@41", "persist", + "lfc_interval", "readonly", "connect_timeout", "reconnect_wait_time", + "on_fail", "$@42", "on_fail_mode", "max_row_errors", + "max_reconnect_tries", "trust_anchor", "$@43", "cert_file", "$@44", + "key_file", "$@45", "cipher_list", "$@46", "sanity_checks", "$@47", + "sanity_checks_params", "sanity_checks_param", "lease_checks", "$@48", + "extended_info_checks", "$@49", "mac_sources", "$@50", + "mac_sources_list", "mac_sources_value", "duid_id", "string_id", + "host_reservation_identifiers", "$@51", "host_reservation_identifiers_list", "host_reservation_identifier", - "hw_address_id", "flex_id", "relay_supplied_options", "$@50", - "dhcp_multi_threading", "$@51", "multi_threading_params", + "hw_address_id", "flex_id", "relay_supplied_options", "$@52", + "dhcp_multi_threading", "$@53", "multi_threading_params", "multi_threading_param", "enable_multi_threading", "thread_pool_size", - "packet_queue_size", "hooks_libraries", "$@52", "hooks_libraries_list", - "not_empty_hooks_libraries_list", "hooks_library", "$@53", - "sub_hooks_library", "$@54", "hooks_params", "hooks_param", "library", - "$@55", "parameters", "$@56", "expired_leases_processing", "$@57", + "packet_queue_size", "hooks_libraries", "$@54", "hooks_libraries_list", + "not_empty_hooks_libraries_list", "hooks_library", "$@55", + "sub_hooks_library", "$@56", "hooks_params", "hooks_param", "library", + "$@57", "parameters", "$@58", "expired_leases_processing", "$@59", "expired_leases_params", "expired_leases_param", "reclaim_timer_wait_time", "flush_reclaimed_timer_wait_time", "hold_reclaimed_time", "max_reclaim_leases", "max_reclaim_time", - "unwarned_reclaim_cycles", "subnet6_list", "$@58", - "subnet6_list_content", "not_empty_subnet6_list", "subnet6", "$@59", - "sub_subnet6", "$@60", "subnet6_params", "subnet6_param", "subnet", - "$@61", "interface", "$@62", "interface_id", "$@63", "client_class", - "$@64", "require_client_classes", "$@65", "reservations_global", + "unwarned_reclaim_cycles", "subnet6_list", "$@60", + "subnet6_list_content", "not_empty_subnet6_list", "subnet6", "$@61", + "sub_subnet6", "$@62", "subnet6_params", "subnet6_param", "subnet", + "$@63", "interface", "$@64", "interface_id", "$@65", "client_class", + "$@66", "require_client_classes", "$@67", "reservations_global", "reservations_in_subnet", "reservations_out_of_pool", "reservation_mode", - "$@66", "hr_mode", "id", "rapid_commit", "shared_networks", "$@67", + "$@68", "hr_mode", "id", "rapid_commit", "shared_networks", "$@69", "shared_networks_content", "shared_networks_list", "shared_network", - "$@68", "shared_network_params", "shared_network_param", - "option_def_list", "$@69", "sub_option_def_list", "$@70", + "$@70", "shared_network_params", "shared_network_param", + "option_def_list", "$@71", "sub_option_def_list", "$@72", "option_def_list_content", "not_empty_option_def_list", - "option_def_entry", "$@71", "sub_option_def", "$@72", + "option_def_entry", "$@73", "sub_option_def", "$@74", "option_def_params", "not_empty_option_def_params", "option_def_param", - "option_def_name", "code", "option_def_code", "option_def_type", "$@73", - "option_def_record_types", "$@74", "space", "$@75", "option_def_space", - "option_def_encapsulate", "$@76", "option_def_array", "option_data_list", - "$@77", "option_data_list_content", "not_empty_option_data_list", - "option_data_entry", "$@78", "sub_option_data", "$@79", + "option_def_name", "code", "option_def_code", "option_def_type", "$@75", + "option_def_record_types", "$@76", "space", "$@77", "option_def_space", + "option_def_encapsulate", "$@78", "option_def_array", "option_data_list", + "$@79", "option_data_list_content", "not_empty_option_data_list", + "option_data_entry", "$@80", "sub_option_data", "$@81", "option_data_params", "not_empty_option_data_params", - "option_data_param", "option_data_name", "option_data_data", "$@80", + "option_data_param", "option_data_name", "option_data_data", "$@82", "option_data_code", "option_data_space", "option_data_csv_format", - "option_data_always_send", "pools_list", "$@81", "pools_list_content", - "not_empty_pools_list", "pool_list_entry", "$@82", "sub_pool6", "$@83", - "pool_params", "pool_param", "pool_entry", "$@84", "user_context", - "$@85", "comment", "$@86", "pd_pools_list", "$@87", + "option_data_always_send", "pools_list", "$@83", "pools_list_content", + "not_empty_pools_list", "pool_list_entry", "$@84", "sub_pool6", "$@85", + "pool_params", "pool_param", "pool_entry", "$@86", "user_context", + "$@87", "comment", "$@88", "pd_pools_list", "$@89", "pd_pools_list_content", "not_empty_pd_pools_list", "pd_pool_entry", - "$@88", "sub_pd_pool", "$@89", "pd_pool_params", "pd_pool_param", - "pd_prefix", "$@90", "pd_prefix_len", "excluded_prefix", "$@91", - "excluded_prefix_len", "pd_delegated_len", "reservations", "$@92", + "$@90", "sub_pd_pool", "$@91", "pd_pool_params", "pd_pool_param", + "pd_prefix", "$@92", "pd_prefix_len", "excluded_prefix", "$@93", + "excluded_prefix_len", "pd_delegated_len", "reservations", "$@94", "reservations_list", "not_empty_reservations_list", "reservation", - "$@93", "sub_reservation", "$@94", "reservation_params", + "$@95", "sub_reservation", "$@96", "reservation_params", "not_empty_reservation_params", "reservation_param", "ip_addresses", - "$@95", "prefixes", "$@96", "duid", "$@97", "hw_address", "$@98", - "hostname", "$@99", "flex_id_value", "$@100", - "reservation_client_classes", "$@101", "relay", "$@102", "relay_map", - "ip_address", "$@103", "client_classes", "$@104", "client_classes_list", - "client_class_entry", "$@105", "client_class_params", + "$@97", "prefixes", "$@98", "duid", "$@99", "hw_address", "$@100", + "hostname", "$@101", "flex_id_value", "$@102", + "reservation_client_classes", "$@103", "relay", "$@104", "relay_map", + "ip_address", "$@105", "client_classes", "$@106", "client_classes_list", + "client_class_entry", "$@107", "client_class_params", "not_empty_client_class_params", "client_class_param", - "client_class_name", "client_class_test", "$@106", - "client_class_template_test", "$@107", "only_if_required", "server_id", - "$@108", "server_id_params", "server_id_param", "server_id_type", - "$@109", "duid_type", "htype", "identifier", "$@110", "time", - "enterprise_id", "dhcp4o6_port", "control_socket", "$@111", - "control_socket_params", "control_socket_param", "socket_type", "$@112", - "socket_name", "$@113", "dhcp_queue_control", "$@114", + "client_class_name", "client_class_test", "$@108", + "client_class_template_test", "$@109", "only_if_required", "server_id", + "$@110", "server_id_params", "server_id_param", "server_id_type", + "$@111", "duid_type", "htype", "identifier", "$@112", "time", + "enterprise_id", "dhcp4o6_port", "control_socket", "$@113", + "control_socket_params", "control_socket_param", "socket_type", "$@114", + "socket_name", "$@115", "dhcp_queue_control", "$@116", "queue_control_params", "queue_control_param", "enable_queue", - "queue_type", "$@115", "capacity", "arbitrary_map_entry", "$@116", - "dhcp_ddns", "$@117", "sub_dhcp_ddns", "$@118", "dhcp_ddns_params", - "dhcp_ddns_param", "enable_updates", "dep_qualifying_suffix", "$@119", - "server_ip", "$@120", "server_port", "sender_ip", "$@121", "sender_port", - "max_queue_size", "ncr_protocol", "$@122", "ncr_protocol_value", - "ncr_format", "$@123", "dep_override_no_update", - "dep_override_client_update", "dep_replace_client_name", "$@124", - "dep_generated_prefix", "$@125", "dep_hostname_char_set", "$@126", - "dep_hostname_char_replacement", "$@127", "config_control", "$@128", - "sub_config_control", "$@129", "config_control_params", - "config_control_param", "config_databases", "$@130", - "config_fetch_wait_time", "loggers", "$@131", "loggers_entries", - "logger_entry", "$@132", "logger_params", "logger_param", "debuglevel", - "severity", "$@133", "output_options_list", "$@134", - "output_options_list_content", "output_entry", "$@135", - "output_params_list", "output_params", "output", "$@136", "flush", - "maxsize", "maxver", "pattern", "$@137", "compatibility", "$@138", + "queue_type", "$@117", "capacity", "arbitrary_map_entry", "$@118", + "dhcp_ddns", "$@119", "sub_dhcp_ddns", "$@120", "dhcp_ddns_params", + "dhcp_ddns_param", "enable_updates", "dep_qualifying_suffix", "$@121", + "server_ip", "$@122", "server_port", "sender_ip", "$@123", "sender_port", + "max_queue_size", "ncr_protocol", "$@124", "ncr_protocol_value", + "ncr_format", "$@125", "dep_override_no_update", + "dep_override_client_update", "dep_replace_client_name", "$@126", + "dep_generated_prefix", "$@127", "dep_hostname_char_set", "$@128", + "dep_hostname_char_replacement", "$@129", "config_control", "$@130", + "sub_config_control", "$@131", "config_control_params", + "config_control_param", "config_databases", "$@132", + "config_fetch_wait_time", "loggers", "$@133", "loggers_entries", + "logger_entry", "$@134", "logger_params", "logger_param", "debuglevel", + "severity", "$@135", "output_options_list", "$@136", + "output_options_list_content", "output_entry", "$@137", + "output_params_list", "output_params", "output", "$@138", "flush", + "maxsize", "maxver", "pattern", "$@139", "compatibility", "$@140", "compatibility_params", "compatibility_param", "lenient_option_parsing", YY_NULLPTR }; #endif @@ -6284,93 +6332,94 @@ namespace isc { namespace dhcp { const short Dhcp6Parser::yyrline_[] = { - 0, 304, 304, 304, 305, 305, 306, 306, 307, 307, - 308, 308, 309, 309, 310, 310, 311, 311, 312, 312, - 313, 313, 314, 314, 315, 315, 316, 316, 317, 317, - 325, 326, 327, 328, 329, 330, 331, 334, 339, 339, - 350, 353, 354, 357, 362, 368, 373, 373, 380, 381, - 384, 388, 392, 398, 398, 405, 406, 409, 413, 417, - 427, 436, 436, 451, 451, 465, 468, 474, 474, 483, - 484, 485, 492, 493, 494, 495, 496, 497, 498, 499, - 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, - 510, 511, 512, 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, 559, 559, 568, - 574, 580, 586, 592, 598, 604, 610, 616, 622, 628, - 634, 640, 646, 652, 658, 664, 670, 670, 679, 682, - 685, 688, 691, 697, 697, 706, 706, 715, 721, 727, - 727, 736, 736, 745, 751, 757, 763, 763, 772, 778, - 784, 790, 796, 796, 808, 808, 817, 818, 819, 824, - 825, 826, 827, 828, 829, 830, 831, 834, 834, 845, - 851, 857, 863, 869, 869, 882, 882, 895, 895, 906, - 907, 910, 911, 912, 917, 917, 927, 928, 929, 934, - 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, - 945, 946, 947, 948, 949, 950, 951, 952, 955, 955, - 963, 964, 965, 968, 968, 977, 977, 986, 986, 995, - 1001, 1001, 1010, 1016, 1022, 1028, 1034, 1040, 1040, 1048, - 1049, 1050, 1053, 1059, 1065, 1065, 1074, 1074, 1083, 1083, - 1092, 1092, 1101, 1101, 1112, 1113, 1114, 1119, 1120, 1123, - 1123, 1142, 1142, 1160, 1160, 1171, 1172, 1173, 1178, 1179, - 1182, 1187, 1192, 1192, 1203, 1204, 1205, 1210, 1211, 1212, - 1215, 1220, 1227, 1227, 1240, 1240, 1253, 1254, 1255, 1260, - 1261, 1262, 1263, 1264, 1265, 1268, 1274, 1280, 1286, 1286, - 1297, 1298, 1301, 1302, 1303, 1308, 1308, 1318, 1318, 1328, - 1329, 1330, 1333, 1336, 1337, 1340, 1340, 1349, 1349, 1358, - 1358, 1370, 1371, 1372, 1377, 1378, 1379, 1380, 1381, 1382, - 1385, 1391, 1397, 1403, 1409, 1415, 1424, 1424, 1438, 1439, - 1442, 1443, 1444, 1453, 1453, 1479, 1479, 1490, 1491, 1492, - 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, - 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1515, 1516, 1517, - 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, - 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, - 1538, 1539, 1540, 1543, 1543, 1552, 1552, 1561, 1561, 1570, - 1570, 1579, 1579, 1590, 1596, 1602, 1608, 1608, 1616, 1617, - 1618, 1619, 1622, 1628, 1636, 1636, 1648, 1649, 1653, 1654, - 1655, 1660, 1660, 1668, 1669, 1670, 1675, 1676, 1677, 1678, - 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, - 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, - 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, - 1709, 1710, 1711, 1712, 1713, 1714, 1721, 1721, 1735, 1735, - 1744, 1745, 1748, 1749, 1750, 1757, 1757, 1772, 1772, 1786, - 1787, 1790, 1791, 1792, 1797, 1798, 1799, 1800, 1801, 1802, - 1803, 1804, 1805, 1806, 1809, 1811, 1817, 1819, 1819, 1828, - 1828, 1837, 1837, 1846, 1848, 1848, 1857, 1867, 1867, 1880, - 1881, 1886, 1887, 1888, 1895, 1895, 1907, 1907, 1919, 1920, - 1925, 1926, 1927, 1934, 1935, 1936, 1937, 1938, 1939, 1940, - 1941, 1942, 1945, 1947, 1947, 1956, 1958, 1960, 1966, 1975, - 1975, 1988, 1989, 1992, 1993, 1994, 1999, 1999, 2009, 2009, - 2019, 2020, 2021, 2026, 2027, 2028, 2029, 2030, 2031, 2032, - 2035, 2035, 2044, 2044, 2069, 2069, 2099, 2099, 2112, 2113, - 2116, 2117, 2118, 2123, 2123, 2135, 2135, 2147, 2148, 2149, - 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, - 2164, 2167, 2167, 2176, 2182, 2182, 2191, 2197, 2206, 2206, - 2217, 2218, 2221, 2222, 2223, 2228, 2228, 2237, 2237, 2246, - 2247, 2250, 2251, 2252, 2258, 2259, 2260, 2261, 2262, 2263, - 2264, 2265, 2266, 2267, 2268, 2271, 2271, 2282, 2282, 2293, - 2293, 2302, 2302, 2311, 2311, 2320, 2320, 2329, 2329, 2343, - 2343, 2354, 2355, 2358, 2358, 2370, 2370, 2381, 2382, 2383, - 2388, 2388, 2398, 2399, 2402, 2403, 2404, 2409, 2410, 2411, - 2412, 2413, 2414, 2415, 2416, 2417, 2418, 2419, 2420, 2421, - 2422, 2425, 2427, 2427, 2436, 2436, 2445, 2454, 2454, 2467, - 2468, 2469, 2474, 2475, 2476, 2477, 2478, 2479, 2480, 2481, - 2482, 2485, 2485, 2493, 2494, 2495, 2498, 2504, 2504, 2513, - 2519, 2527, 2535, 2535, 2546, 2547, 2548, 2553, 2554, 2555, - 2556, 2557, 2560, 2560, 2569, 2569, 2581, 2581, 2594, 2595, - 2596, 2601, 2602, 2603, 2604, 2605, 2606, 2609, 2615, 2615, - 2624, 2630, 2630, 2640, 2640, 2653, 2653, 2663, 2664, 2665, - 2670, 2671, 2672, 2673, 2674, 2675, 2676, 2677, 2678, 2679, - 2680, 2681, 2682, 2683, 2684, 2685, 2686, 2687, 2690, 2697, - 2697, 2706, 2706, 2715, 2721, 2721, 2730, 2736, 2742, 2742, - 2751, 2752, 2755, 2755, 2765, 2772, 2779, 2779, 2788, 2788, - 2798, 2798, 2808, 2808, 2820, 2820, 2832, 2832, 2842, 2843, - 2844, 2850, 2851, 2854, 2854, 2865, 2873, 2873, 2886, 2887, - 2888, 2894, 2894, 2902, 2903, 2904, 2909, 2910, 2911, 2912, - 2913, 2914, 2915, 2918, 2924, 2924, 2933, 2933, 2944, 2945, - 2946, 2951, 2951, 2959, 2960, 2961, 2966, 2967, 2968, 2969, - 2970, 2973, 2973, 2982, 2988, 2994, 3000, 3000, 3009, 3009, - 3020, 3021, 3022, 3027, 3028, 3031 + 0, 306, 306, 306, 307, 307, 308, 308, 309, 309, + 310, 310, 311, 311, 312, 312, 313, 313, 314, 314, + 315, 315, 316, 316, 317, 317, 318, 318, 319, 319, + 327, 328, 329, 330, 331, 332, 333, 336, 341, 341, + 352, 355, 356, 359, 364, 370, 375, 375, 382, 383, + 386, 390, 394, 400, 400, 407, 408, 411, 415, 419, + 429, 438, 438, 453, 453, 467, 470, 476, 476, 485, + 486, 487, 494, 495, 496, 497, 498, 499, 500, 501, + 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, + 512, 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, 563, + 563, 572, 578, 584, 590, 596, 602, 608, 614, 620, + 626, 632, 638, 644, 650, 656, 662, 668, 674, 674, + 683, 686, 689, 692, 695, 701, 701, 710, 710, 719, + 725, 731, 731, 740, 740, 749, 755, 761, 767, 767, + 776, 782, 782, 791, 791, 800, 806, 812, 818, 818, + 830, 830, 839, 840, 841, 846, 847, 848, 849, 850, + 851, 852, 853, 856, 856, 867, 873, 879, 885, 891, + 891, 904, 904, 917, 917, 928, 929, 932, 933, 934, + 939, 939, 949, 950, 951, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, + 971, 972, 973, 974, 977, 977, 985, 986, 987, 990, + 990, 999, 999, 1008, 1008, 1017, 1023, 1023, 1032, 1038, + 1044, 1050, 1056, 1062, 1062, 1070, 1071, 1072, 1075, 1081, + 1087, 1087, 1096, 1096, 1105, 1105, 1114, 1114, 1123, 1123, + 1134, 1135, 1136, 1141, 1142, 1145, 1145, 1164, 1164, 1182, + 1182, 1193, 1194, 1195, 1200, 1201, 1204, 1209, 1214, 1214, + 1225, 1226, 1227, 1232, 1233, 1234, 1237, 1242, 1249, 1249, + 1262, 1262, 1275, 1276, 1277, 1282, 1283, 1284, 1285, 1286, + 1287, 1290, 1296, 1302, 1308, 1308, 1319, 1320, 1323, 1324, + 1325, 1330, 1330, 1340, 1340, 1350, 1351, 1352, 1355, 1358, + 1359, 1362, 1362, 1371, 1371, 1380, 1380, 1392, 1393, 1394, + 1399, 1400, 1401, 1402, 1403, 1404, 1407, 1413, 1419, 1425, + 1431, 1437, 1446, 1446, 1460, 1461, 1464, 1465, 1466, 1475, + 1475, 1501, 1501, 1512, 1513, 1514, 1520, 1521, 1522, 1523, + 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, + 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, + 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, + 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, + 1564, 1567, 1567, 1576, 1576, 1585, 1585, 1594, 1594, 1603, + 1603, 1614, 1620, 1626, 1632, 1632, 1640, 1641, 1642, 1643, + 1646, 1652, 1660, 1660, 1672, 1673, 1677, 1678, 1679, 1684, + 1684, 1692, 1693, 1694, 1699, 1700, 1701, 1702, 1703, 1704, + 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713, 1714, + 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, + 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, + 1735, 1736, 1737, 1738, 1739, 1740, 1747, 1747, 1761, 1761, + 1770, 1771, 1774, 1775, 1776, 1783, 1783, 1798, 1798, 1812, + 1813, 1816, 1817, 1818, 1823, 1824, 1825, 1826, 1827, 1828, + 1829, 1830, 1831, 1832, 1835, 1837, 1843, 1845, 1845, 1854, + 1854, 1863, 1863, 1872, 1874, 1874, 1883, 1893, 1893, 1906, + 1907, 1912, 1913, 1914, 1921, 1921, 1933, 1933, 1945, 1946, + 1951, 1952, 1953, 1960, 1961, 1962, 1963, 1964, 1965, 1966, + 1967, 1968, 1971, 1973, 1973, 1982, 1984, 1986, 1992, 2001, + 2001, 2014, 2015, 2018, 2019, 2020, 2025, 2025, 2035, 2035, + 2045, 2046, 2047, 2052, 2053, 2054, 2055, 2056, 2057, 2058, + 2061, 2061, 2070, 2070, 2095, 2095, 2125, 2125, 2138, 2139, + 2142, 2143, 2144, 2149, 2149, 2161, 2161, 2173, 2174, 2175, + 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, + 2190, 2193, 2193, 2202, 2208, 2208, 2217, 2223, 2232, 2232, + 2243, 2244, 2247, 2248, 2249, 2254, 2254, 2263, 2263, 2272, + 2273, 2276, 2277, 2278, 2284, 2285, 2286, 2287, 2288, 2289, + 2290, 2291, 2292, 2293, 2294, 2297, 2297, 2308, 2308, 2319, + 2319, 2328, 2328, 2337, 2337, 2346, 2346, 2355, 2355, 2369, + 2369, 2380, 2381, 2384, 2384, 2396, 2396, 2407, 2408, 2409, + 2414, 2414, 2424, 2425, 2428, 2429, 2430, 2435, 2436, 2437, + 2438, 2439, 2440, 2441, 2442, 2443, 2444, 2445, 2446, 2447, + 2448, 2451, 2453, 2453, 2462, 2462, 2471, 2480, 2480, 2493, + 2494, 2495, 2500, 2501, 2502, 2503, 2504, 2505, 2506, 2507, + 2508, 2511, 2511, 2519, 2520, 2521, 2524, 2530, 2530, 2539, + 2545, 2553, 2561, 2561, 2572, 2573, 2574, 2579, 2580, 2581, + 2582, 2583, 2586, 2586, 2595, 2595, 2607, 2607, 2620, 2621, + 2622, 2627, 2628, 2629, 2630, 2631, 2632, 2635, 2641, 2641, + 2650, 2656, 2656, 2666, 2666, 2679, 2679, 2689, 2690, 2691, + 2696, 2697, 2698, 2699, 2700, 2701, 2702, 2703, 2704, 2705, + 2706, 2707, 2708, 2709, 2710, 2711, 2712, 2713, 2716, 2723, + 2723, 2732, 2732, 2741, 2747, 2747, 2756, 2762, 2768, 2768, + 2777, 2778, 2781, 2781, 2791, 2798, 2805, 2805, 2814, 2814, + 2824, 2824, 2834, 2834, 2846, 2846, 2858, 2858, 2868, 2869, + 2870, 2876, 2877, 2880, 2880, 2891, 2899, 2899, 2912, 2913, + 2914, 2920, 2920, 2928, 2929, 2930, 2935, 2936, 2937, 2938, + 2939, 2940, 2941, 2944, 2950, 2950, 2959, 2959, 2970, 2971, + 2972, 2977, 2977, 2985, 2986, 2987, 2992, 2993, 2994, 2995, + 2996, 2999, 2999, 3008, 3014, 3020, 3026, 3026, 3035, 3035, + 3046, 3047, 3048, 3053, 3054, 3057 }; void @@ -6403,9 +6452,9 @@ namespace isc { namespace dhcp { #line 14 "dhcp6_parser.yy" } } // isc::dhcp -#line 6407 "dhcp6_parser.cc" +#line 6456 "dhcp6_parser.cc" -#line 3037 "dhcp6_parser.yy" +#line 3063 "dhcp6_parser.yy" void diff --git a/src/bin/dhcp6/dhcp6_parser.h b/src/bin/dhcp6/dhcp6_parser.h index 7068fe4783..2a0d53aec8 100644 --- a/src/bin/dhcp6/dhcp6_parser.h +++ b/src/bin/dhcp6/dhcp6_parser.h @@ -581,136 +581,138 @@ namespace isc { namespace dhcp { TOKEN_ENCAPSULATE = 338, // "encapsulate" TOKEN_ARRAY = 339, // "array" TOKEN_PARKED_PACKET_LIMIT = 340, // "parked-packet-limit" - TOKEN_SHARED_NETWORKS = 341, // "shared-networks" - TOKEN_POOLS = 342, // "pools" - TOKEN_POOL = 343, // "pool" - TOKEN_PD_POOLS = 344, // "pd-pools" - TOKEN_PREFIX = 345, // "prefix" - TOKEN_PREFIX_LEN = 346, // "prefix-len" - TOKEN_EXCLUDED_PREFIX = 347, // "excluded-prefix" - TOKEN_EXCLUDED_PREFIX_LEN = 348, // "excluded-prefix-len" - TOKEN_DELEGATED_LEN = 349, // "delegated-len" - TOKEN_USER_CONTEXT = 350, // "user-context" - TOKEN_COMMENT = 351, // "comment" - TOKEN_SUBNET = 352, // "subnet" - TOKEN_INTERFACE = 353, // "interface" - TOKEN_INTERFACE_ID = 354, // "interface-id" - TOKEN_ID = 355, // "id" - TOKEN_RAPID_COMMIT = 356, // "rapid-commit" - TOKEN_RESERVATION_MODE = 357, // "reservation-mode" - TOKEN_DISABLED = 358, // "disabled" - TOKEN_OUT_OF_POOL = 359, // "out-of-pool" - TOKEN_GLOBAL = 360, // "global" - TOKEN_ALL = 361, // "all" - TOKEN_RESERVATIONS_GLOBAL = 362, // "reservations-global" - TOKEN_RESERVATIONS_IN_SUBNET = 363, // "reservations-in-subnet" - TOKEN_RESERVATIONS_OUT_OF_POOL = 364, // "reservations-out-of-pool" - TOKEN_MAC_SOURCES = 365, // "mac-sources" - TOKEN_RELAY_SUPPLIED_OPTIONS = 366, // "relay-supplied-options" - TOKEN_HOST_RESERVATION_IDENTIFIERS = 367, // "host-reservation-identifiers" - TOKEN_SANITY_CHECKS = 368, // "sanity-checks" - TOKEN_LEASE_CHECKS = 369, // "lease-checks" - TOKEN_EXTENDED_INFO_CHECKS = 370, // "extended-info-checks" - TOKEN_CLIENT_CLASSES = 371, // "client-classes" - TOKEN_REQUIRE_CLIENT_CLASSES = 372, // "require-client-classes" - TOKEN_TEST = 373, // "test" - TOKEN_TEMPLATE_TEST = 374, // "template-test" - TOKEN_ONLY_IF_REQUIRED = 375, // "only-if-required" - TOKEN_CLIENT_CLASS = 376, // "client-class" - TOKEN_RESERVATIONS = 377, // "reservations" - TOKEN_IP_ADDRESSES = 378, // "ip-addresses" - TOKEN_PREFIXES = 379, // "prefixes" - TOKEN_DUID = 380, // "duid" - TOKEN_HW_ADDRESS = 381, // "hw-address" - TOKEN_HOSTNAME = 382, // "hostname" - TOKEN_FLEX_ID = 383, // "flex-id" - TOKEN_RELAY = 384, // "relay" - TOKEN_IP_ADDRESS = 385, // "ip-address" - TOKEN_HOOKS_LIBRARIES = 386, // "hooks-libraries" - TOKEN_LIBRARY = 387, // "library" - TOKEN_PARAMETERS = 388, // "parameters" - TOKEN_EXPIRED_LEASES_PROCESSING = 389, // "expired-leases-processing" - TOKEN_RECLAIM_TIMER_WAIT_TIME = 390, // "reclaim-timer-wait-time" - TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 391, // "flush-reclaimed-timer-wait-time" - TOKEN_HOLD_RECLAIMED_TIME = 392, // "hold-reclaimed-time" - TOKEN_MAX_RECLAIM_LEASES = 393, // "max-reclaim-leases" - TOKEN_MAX_RECLAIM_TIME = 394, // "max-reclaim-time" - TOKEN_UNWARNED_RECLAIM_CYCLES = 395, // "unwarned-reclaim-cycles" - TOKEN_SERVER_ID = 396, // "server-id" - TOKEN_LLT = 397, // "LLT" - TOKEN_EN = 398, // "EN" - TOKEN_LL = 399, // "LL" - TOKEN_IDENTIFIER = 400, // "identifier" - TOKEN_HTYPE = 401, // "htype" - TOKEN_TIME = 402, // "time" - TOKEN_ENTERPRISE_ID = 403, // "enterprise-id" - TOKEN_DHCP4O6_PORT = 404, // "dhcp4o6-port" - TOKEN_DHCP_MULTI_THREADING = 405, // "multi-threading" - TOKEN_ENABLE_MULTI_THREADING = 406, // "enable-multi-threading" - TOKEN_THREAD_POOL_SIZE = 407, // "thread-pool-size" - TOKEN_PACKET_QUEUE_SIZE = 408, // "packet-queue-size" - TOKEN_CONTROL_SOCKET = 409, // "control-socket" - TOKEN_SOCKET_TYPE = 410, // "socket-type" - TOKEN_SOCKET_NAME = 411, // "socket-name" - TOKEN_DHCP_QUEUE_CONTROL = 412, // "dhcp-queue-control" - TOKEN_ENABLE_QUEUE = 413, // "enable-queue" - TOKEN_QUEUE_TYPE = 414, // "queue-type" - TOKEN_CAPACITY = 415, // "capacity" - TOKEN_DHCP_DDNS = 416, // "dhcp-ddns" - TOKEN_ENABLE_UPDATES = 417, // "enable-updates" - TOKEN_QUALIFYING_SUFFIX = 418, // "qualifying-suffix" - TOKEN_SERVER_IP = 419, // "server-ip" - TOKEN_SERVER_PORT = 420, // "server-port" - TOKEN_SENDER_IP = 421, // "sender-ip" - TOKEN_SENDER_PORT = 422, // "sender-port" - TOKEN_MAX_QUEUE_SIZE = 423, // "max-queue-size" - TOKEN_NCR_PROTOCOL = 424, // "ncr-protocol" - TOKEN_NCR_FORMAT = 425, // "ncr-format" - TOKEN_OVERRIDE_NO_UPDATE = 426, // "override-no-update" - TOKEN_OVERRIDE_CLIENT_UPDATE = 427, // "override-client-update" - TOKEN_REPLACE_CLIENT_NAME = 428, // "replace-client-name" - TOKEN_GENERATED_PREFIX = 429, // "generated-prefix" - TOKEN_UDP = 430, // "UDP" - TOKEN_TCP = 431, // "TCP" - TOKEN_JSON = 432, // "JSON" - TOKEN_WHEN_PRESENT = 433, // "when-present" - TOKEN_NEVER = 434, // "never" - TOKEN_ALWAYS = 435, // "always" - TOKEN_WHEN_NOT_PRESENT = 436, // "when-not-present" - TOKEN_HOSTNAME_CHAR_SET = 437, // "hostname-char-set" - TOKEN_HOSTNAME_CHAR_REPLACEMENT = 438, // "hostname-char-replacement" - TOKEN_EARLY_GLOBAL_RESERVATIONS_LOOKUP = 439, // "early-global-reservations-lookup" - TOKEN_IP_RESERVATIONS_UNIQUE = 440, // "ip-reservations-unique" - TOKEN_RESERVATIONS_LOOKUP_FIRST = 441, // "reservations-lookup-first" - TOKEN_LOGGERS = 442, // "loggers" - TOKEN_OUTPUT_OPTIONS = 443, // "output_options" - TOKEN_OUTPUT = 444, // "output" - TOKEN_DEBUGLEVEL = 445, // "debuglevel" - TOKEN_SEVERITY = 446, // "severity" - TOKEN_FLUSH = 447, // "flush" - TOKEN_MAXSIZE = 448, // "maxsize" - TOKEN_MAXVER = 449, // "maxver" - TOKEN_PATTERN = 450, // "pattern" - TOKEN_COMPATIBILITY = 451, // "compatibility" - TOKEN_LENIENT_OPTION_PARSING = 452, // "lenient-option-parsing" - TOKEN_TOPLEVEL_JSON = 453, // TOPLEVEL_JSON - TOKEN_TOPLEVEL_DHCP6 = 454, // TOPLEVEL_DHCP6 - TOKEN_SUB_DHCP6 = 455, // SUB_DHCP6 - TOKEN_SUB_INTERFACES6 = 456, // SUB_INTERFACES6 - TOKEN_SUB_SUBNET6 = 457, // SUB_SUBNET6 - TOKEN_SUB_POOL6 = 458, // SUB_POOL6 - TOKEN_SUB_PD_POOL = 459, // SUB_PD_POOL - TOKEN_SUB_RESERVATION = 460, // SUB_RESERVATION - TOKEN_SUB_OPTION_DEFS = 461, // SUB_OPTION_DEFS - TOKEN_SUB_OPTION_DEF = 462, // SUB_OPTION_DEF - TOKEN_SUB_OPTION_DATA = 463, // SUB_OPTION_DATA - TOKEN_SUB_HOOKS_LIBRARY = 464, // SUB_HOOKS_LIBRARY - TOKEN_SUB_DHCP_DDNS = 465, // SUB_DHCP_DDNS - TOKEN_SUB_CONFIG_CONTROL = 466, // SUB_CONFIG_CONTROL - TOKEN_STRING = 467, // "constant string" - TOKEN_INTEGER = 468, // "integer" - TOKEN_FLOAT = 469, // "floating point" - TOKEN_BOOLEAN = 470 // "boolean" + TOKEN_ALLOCATOR = 341, // "allocator" + TOKEN_PD_ALLOCATOR = 342, // "pd-allocator" + TOKEN_SHARED_NETWORKS = 343, // "shared-networks" + TOKEN_POOLS = 344, // "pools" + TOKEN_POOL = 345, // "pool" + TOKEN_PD_POOLS = 346, // "pd-pools" + TOKEN_PREFIX = 347, // "prefix" + TOKEN_PREFIX_LEN = 348, // "prefix-len" + TOKEN_EXCLUDED_PREFIX = 349, // "excluded-prefix" + TOKEN_EXCLUDED_PREFIX_LEN = 350, // "excluded-prefix-len" + TOKEN_DELEGATED_LEN = 351, // "delegated-len" + TOKEN_USER_CONTEXT = 352, // "user-context" + TOKEN_COMMENT = 353, // "comment" + TOKEN_SUBNET = 354, // "subnet" + TOKEN_INTERFACE = 355, // "interface" + TOKEN_INTERFACE_ID = 356, // "interface-id" + TOKEN_ID = 357, // "id" + TOKEN_RAPID_COMMIT = 358, // "rapid-commit" + TOKEN_RESERVATION_MODE = 359, // "reservation-mode" + TOKEN_DISABLED = 360, // "disabled" + TOKEN_OUT_OF_POOL = 361, // "out-of-pool" + TOKEN_GLOBAL = 362, // "global" + TOKEN_ALL = 363, // "all" + TOKEN_RESERVATIONS_GLOBAL = 364, // "reservations-global" + TOKEN_RESERVATIONS_IN_SUBNET = 365, // "reservations-in-subnet" + TOKEN_RESERVATIONS_OUT_OF_POOL = 366, // "reservations-out-of-pool" + TOKEN_MAC_SOURCES = 367, // "mac-sources" + TOKEN_RELAY_SUPPLIED_OPTIONS = 368, // "relay-supplied-options" + TOKEN_HOST_RESERVATION_IDENTIFIERS = 369, // "host-reservation-identifiers" + TOKEN_SANITY_CHECKS = 370, // "sanity-checks" + TOKEN_LEASE_CHECKS = 371, // "lease-checks" + TOKEN_EXTENDED_INFO_CHECKS = 372, // "extended-info-checks" + TOKEN_CLIENT_CLASSES = 373, // "client-classes" + TOKEN_REQUIRE_CLIENT_CLASSES = 374, // "require-client-classes" + TOKEN_TEST = 375, // "test" + TOKEN_TEMPLATE_TEST = 376, // "template-test" + TOKEN_ONLY_IF_REQUIRED = 377, // "only-if-required" + TOKEN_CLIENT_CLASS = 378, // "client-class" + TOKEN_RESERVATIONS = 379, // "reservations" + TOKEN_IP_ADDRESSES = 380, // "ip-addresses" + TOKEN_PREFIXES = 381, // "prefixes" + TOKEN_DUID = 382, // "duid" + TOKEN_HW_ADDRESS = 383, // "hw-address" + TOKEN_HOSTNAME = 384, // "hostname" + TOKEN_FLEX_ID = 385, // "flex-id" + TOKEN_RELAY = 386, // "relay" + TOKEN_IP_ADDRESS = 387, // "ip-address" + TOKEN_HOOKS_LIBRARIES = 388, // "hooks-libraries" + TOKEN_LIBRARY = 389, // "library" + TOKEN_PARAMETERS = 390, // "parameters" + TOKEN_EXPIRED_LEASES_PROCESSING = 391, // "expired-leases-processing" + TOKEN_RECLAIM_TIMER_WAIT_TIME = 392, // "reclaim-timer-wait-time" + TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 393, // "flush-reclaimed-timer-wait-time" + TOKEN_HOLD_RECLAIMED_TIME = 394, // "hold-reclaimed-time" + TOKEN_MAX_RECLAIM_LEASES = 395, // "max-reclaim-leases" + TOKEN_MAX_RECLAIM_TIME = 396, // "max-reclaim-time" + TOKEN_UNWARNED_RECLAIM_CYCLES = 397, // "unwarned-reclaim-cycles" + TOKEN_SERVER_ID = 398, // "server-id" + TOKEN_LLT = 399, // "LLT" + TOKEN_EN = 400, // "EN" + TOKEN_LL = 401, // "LL" + TOKEN_IDENTIFIER = 402, // "identifier" + TOKEN_HTYPE = 403, // "htype" + TOKEN_TIME = 404, // "time" + TOKEN_ENTERPRISE_ID = 405, // "enterprise-id" + TOKEN_DHCP4O6_PORT = 406, // "dhcp4o6-port" + TOKEN_DHCP_MULTI_THREADING = 407, // "multi-threading" + TOKEN_ENABLE_MULTI_THREADING = 408, // "enable-multi-threading" + TOKEN_THREAD_POOL_SIZE = 409, // "thread-pool-size" + TOKEN_PACKET_QUEUE_SIZE = 410, // "packet-queue-size" + TOKEN_CONTROL_SOCKET = 411, // "control-socket" + TOKEN_SOCKET_TYPE = 412, // "socket-type" + TOKEN_SOCKET_NAME = 413, // "socket-name" + TOKEN_DHCP_QUEUE_CONTROL = 414, // "dhcp-queue-control" + TOKEN_ENABLE_QUEUE = 415, // "enable-queue" + TOKEN_QUEUE_TYPE = 416, // "queue-type" + TOKEN_CAPACITY = 417, // "capacity" + TOKEN_DHCP_DDNS = 418, // "dhcp-ddns" + TOKEN_ENABLE_UPDATES = 419, // "enable-updates" + TOKEN_QUALIFYING_SUFFIX = 420, // "qualifying-suffix" + TOKEN_SERVER_IP = 421, // "server-ip" + TOKEN_SERVER_PORT = 422, // "server-port" + TOKEN_SENDER_IP = 423, // "sender-ip" + TOKEN_SENDER_PORT = 424, // "sender-port" + TOKEN_MAX_QUEUE_SIZE = 425, // "max-queue-size" + TOKEN_NCR_PROTOCOL = 426, // "ncr-protocol" + TOKEN_NCR_FORMAT = 427, // "ncr-format" + TOKEN_OVERRIDE_NO_UPDATE = 428, // "override-no-update" + TOKEN_OVERRIDE_CLIENT_UPDATE = 429, // "override-client-update" + TOKEN_REPLACE_CLIENT_NAME = 430, // "replace-client-name" + TOKEN_GENERATED_PREFIX = 431, // "generated-prefix" + TOKEN_UDP = 432, // "UDP" + TOKEN_TCP = 433, // "TCP" + TOKEN_JSON = 434, // "JSON" + TOKEN_WHEN_PRESENT = 435, // "when-present" + TOKEN_NEVER = 436, // "never" + TOKEN_ALWAYS = 437, // "always" + TOKEN_WHEN_NOT_PRESENT = 438, // "when-not-present" + TOKEN_HOSTNAME_CHAR_SET = 439, // "hostname-char-set" + TOKEN_HOSTNAME_CHAR_REPLACEMENT = 440, // "hostname-char-replacement" + TOKEN_EARLY_GLOBAL_RESERVATIONS_LOOKUP = 441, // "early-global-reservations-lookup" + TOKEN_IP_RESERVATIONS_UNIQUE = 442, // "ip-reservations-unique" + TOKEN_RESERVATIONS_LOOKUP_FIRST = 443, // "reservations-lookup-first" + TOKEN_LOGGERS = 444, // "loggers" + TOKEN_OUTPUT_OPTIONS = 445, // "output_options" + TOKEN_OUTPUT = 446, // "output" + TOKEN_DEBUGLEVEL = 447, // "debuglevel" + TOKEN_SEVERITY = 448, // "severity" + TOKEN_FLUSH = 449, // "flush" + TOKEN_MAXSIZE = 450, // "maxsize" + TOKEN_MAXVER = 451, // "maxver" + TOKEN_PATTERN = 452, // "pattern" + TOKEN_COMPATIBILITY = 453, // "compatibility" + TOKEN_LENIENT_OPTION_PARSING = 454, // "lenient-option-parsing" + TOKEN_TOPLEVEL_JSON = 455, // TOPLEVEL_JSON + TOKEN_TOPLEVEL_DHCP6 = 456, // TOPLEVEL_DHCP6 + TOKEN_SUB_DHCP6 = 457, // SUB_DHCP6 + TOKEN_SUB_INTERFACES6 = 458, // SUB_INTERFACES6 + TOKEN_SUB_SUBNET6 = 459, // SUB_SUBNET6 + TOKEN_SUB_POOL6 = 460, // SUB_POOL6 + TOKEN_SUB_PD_POOL = 461, // SUB_PD_POOL + TOKEN_SUB_RESERVATION = 462, // SUB_RESERVATION + TOKEN_SUB_OPTION_DEFS = 463, // SUB_OPTION_DEFS + TOKEN_SUB_OPTION_DEF = 464, // SUB_OPTION_DEF + TOKEN_SUB_OPTION_DATA = 465, // SUB_OPTION_DATA + TOKEN_SUB_HOOKS_LIBRARY = 466, // SUB_HOOKS_LIBRARY + TOKEN_SUB_DHCP_DDNS = 467, // SUB_DHCP_DDNS + TOKEN_SUB_CONFIG_CONTROL = 468, // SUB_CONFIG_CONTROL + TOKEN_STRING = 469, // "constant string" + TOKEN_INTEGER = 470, // "integer" + TOKEN_FLOAT = 471, // "floating point" + TOKEN_BOOLEAN = 472 // "boolean" }; /// Backward compatibility alias (Bison 3.6). typedef token_kind_type yytokentype; @@ -727,7 +729,7 @@ namespace isc { namespace dhcp { { enum symbol_kind_type { - YYNTOKENS = 216, ///< Number of tokens. + YYNTOKENS = 218, ///< Number of tokens. S_YYEMPTY = -2, S_YYEOF = 0, // "end of file" S_YYerror = 1, // error @@ -815,582 +817,588 @@ namespace isc { namespace dhcp { S_ENCAPSULATE = 83, // "encapsulate" S_ARRAY = 84, // "array" S_PARKED_PACKET_LIMIT = 85, // "parked-packet-limit" - S_SHARED_NETWORKS = 86, // "shared-networks" - S_POOLS = 87, // "pools" - S_POOL = 88, // "pool" - S_PD_POOLS = 89, // "pd-pools" - S_PREFIX = 90, // "prefix" - S_PREFIX_LEN = 91, // "prefix-len" - S_EXCLUDED_PREFIX = 92, // "excluded-prefix" - S_EXCLUDED_PREFIX_LEN = 93, // "excluded-prefix-len" - S_DELEGATED_LEN = 94, // "delegated-len" - S_USER_CONTEXT = 95, // "user-context" - S_COMMENT = 96, // "comment" - S_SUBNET = 97, // "subnet" - S_INTERFACE = 98, // "interface" - S_INTERFACE_ID = 99, // "interface-id" - S_ID = 100, // "id" - S_RAPID_COMMIT = 101, // "rapid-commit" - S_RESERVATION_MODE = 102, // "reservation-mode" - S_DISABLED = 103, // "disabled" - S_OUT_OF_POOL = 104, // "out-of-pool" - S_GLOBAL = 105, // "global" - S_ALL = 106, // "all" - S_RESERVATIONS_GLOBAL = 107, // "reservations-global" - S_RESERVATIONS_IN_SUBNET = 108, // "reservations-in-subnet" - S_RESERVATIONS_OUT_OF_POOL = 109, // "reservations-out-of-pool" - S_MAC_SOURCES = 110, // "mac-sources" - S_RELAY_SUPPLIED_OPTIONS = 111, // "relay-supplied-options" - S_HOST_RESERVATION_IDENTIFIERS = 112, // "host-reservation-identifiers" - S_SANITY_CHECKS = 113, // "sanity-checks" - S_LEASE_CHECKS = 114, // "lease-checks" - S_EXTENDED_INFO_CHECKS = 115, // "extended-info-checks" - S_CLIENT_CLASSES = 116, // "client-classes" - S_REQUIRE_CLIENT_CLASSES = 117, // "require-client-classes" - S_TEST = 118, // "test" - S_TEMPLATE_TEST = 119, // "template-test" - S_ONLY_IF_REQUIRED = 120, // "only-if-required" - S_CLIENT_CLASS = 121, // "client-class" - S_RESERVATIONS = 122, // "reservations" - S_IP_ADDRESSES = 123, // "ip-addresses" - S_PREFIXES = 124, // "prefixes" - S_DUID = 125, // "duid" - S_HW_ADDRESS = 126, // "hw-address" - S_HOSTNAME = 127, // "hostname" - S_FLEX_ID = 128, // "flex-id" - S_RELAY = 129, // "relay" - S_IP_ADDRESS = 130, // "ip-address" - S_HOOKS_LIBRARIES = 131, // "hooks-libraries" - S_LIBRARY = 132, // "library" - S_PARAMETERS = 133, // "parameters" - S_EXPIRED_LEASES_PROCESSING = 134, // "expired-leases-processing" - S_RECLAIM_TIMER_WAIT_TIME = 135, // "reclaim-timer-wait-time" - S_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 136, // "flush-reclaimed-timer-wait-time" - S_HOLD_RECLAIMED_TIME = 137, // "hold-reclaimed-time" - S_MAX_RECLAIM_LEASES = 138, // "max-reclaim-leases" - S_MAX_RECLAIM_TIME = 139, // "max-reclaim-time" - S_UNWARNED_RECLAIM_CYCLES = 140, // "unwarned-reclaim-cycles" - S_SERVER_ID = 141, // "server-id" - S_LLT = 142, // "LLT" - S_EN = 143, // "EN" - S_LL = 144, // "LL" - S_IDENTIFIER = 145, // "identifier" - S_HTYPE = 146, // "htype" - S_TIME = 147, // "time" - S_ENTERPRISE_ID = 148, // "enterprise-id" - S_DHCP4O6_PORT = 149, // "dhcp4o6-port" - S_DHCP_MULTI_THREADING = 150, // "multi-threading" - S_ENABLE_MULTI_THREADING = 151, // "enable-multi-threading" - S_THREAD_POOL_SIZE = 152, // "thread-pool-size" - S_PACKET_QUEUE_SIZE = 153, // "packet-queue-size" - S_CONTROL_SOCKET = 154, // "control-socket" - S_SOCKET_TYPE = 155, // "socket-type" - S_SOCKET_NAME = 156, // "socket-name" - S_DHCP_QUEUE_CONTROL = 157, // "dhcp-queue-control" - S_ENABLE_QUEUE = 158, // "enable-queue" - S_QUEUE_TYPE = 159, // "queue-type" - S_CAPACITY = 160, // "capacity" - S_DHCP_DDNS = 161, // "dhcp-ddns" - S_ENABLE_UPDATES = 162, // "enable-updates" - S_QUALIFYING_SUFFIX = 163, // "qualifying-suffix" - S_SERVER_IP = 164, // "server-ip" - S_SERVER_PORT = 165, // "server-port" - S_SENDER_IP = 166, // "sender-ip" - S_SENDER_PORT = 167, // "sender-port" - S_MAX_QUEUE_SIZE = 168, // "max-queue-size" - S_NCR_PROTOCOL = 169, // "ncr-protocol" - S_NCR_FORMAT = 170, // "ncr-format" - S_OVERRIDE_NO_UPDATE = 171, // "override-no-update" - S_OVERRIDE_CLIENT_UPDATE = 172, // "override-client-update" - S_REPLACE_CLIENT_NAME = 173, // "replace-client-name" - S_GENERATED_PREFIX = 174, // "generated-prefix" - S_UDP = 175, // "UDP" - S_TCP = 176, // "TCP" - S_JSON = 177, // "JSON" - S_WHEN_PRESENT = 178, // "when-present" - S_NEVER = 179, // "never" - S_ALWAYS = 180, // "always" - S_WHEN_NOT_PRESENT = 181, // "when-not-present" - S_HOSTNAME_CHAR_SET = 182, // "hostname-char-set" - S_HOSTNAME_CHAR_REPLACEMENT = 183, // "hostname-char-replacement" - S_EARLY_GLOBAL_RESERVATIONS_LOOKUP = 184, // "early-global-reservations-lookup" - S_IP_RESERVATIONS_UNIQUE = 185, // "ip-reservations-unique" - S_RESERVATIONS_LOOKUP_FIRST = 186, // "reservations-lookup-first" - S_LOGGERS = 187, // "loggers" - S_OUTPUT_OPTIONS = 188, // "output_options" - S_OUTPUT = 189, // "output" - S_DEBUGLEVEL = 190, // "debuglevel" - S_SEVERITY = 191, // "severity" - S_FLUSH = 192, // "flush" - S_MAXSIZE = 193, // "maxsize" - S_MAXVER = 194, // "maxver" - S_PATTERN = 195, // "pattern" - S_COMPATIBILITY = 196, // "compatibility" - S_LENIENT_OPTION_PARSING = 197, // "lenient-option-parsing" - S_TOPLEVEL_JSON = 198, // TOPLEVEL_JSON - S_TOPLEVEL_DHCP6 = 199, // TOPLEVEL_DHCP6 - S_SUB_DHCP6 = 200, // SUB_DHCP6 - S_SUB_INTERFACES6 = 201, // SUB_INTERFACES6 - S_SUB_SUBNET6 = 202, // SUB_SUBNET6 - S_SUB_POOL6 = 203, // SUB_POOL6 - S_SUB_PD_POOL = 204, // SUB_PD_POOL - S_SUB_RESERVATION = 205, // SUB_RESERVATION - S_SUB_OPTION_DEFS = 206, // SUB_OPTION_DEFS - S_SUB_OPTION_DEF = 207, // SUB_OPTION_DEF - S_SUB_OPTION_DATA = 208, // SUB_OPTION_DATA - S_SUB_HOOKS_LIBRARY = 209, // SUB_HOOKS_LIBRARY - S_SUB_DHCP_DDNS = 210, // SUB_DHCP_DDNS - S_SUB_CONFIG_CONTROL = 211, // SUB_CONFIG_CONTROL - S_STRING = 212, // "constant string" - S_INTEGER = 213, // "integer" - S_FLOAT = 214, // "floating point" - S_BOOLEAN = 215, // "boolean" - S_YYACCEPT = 216, // $accept - S_start = 217, // start - S_218_1 = 218, // $@1 - S_219_2 = 219, // $@2 - S_220_3 = 220, // $@3 - S_221_4 = 221, // $@4 - S_222_5 = 222, // $@5 - S_223_6 = 223, // $@6 - S_224_7 = 224, // $@7 - S_225_8 = 225, // $@8 - S_226_9 = 226, // $@9 - S_227_10 = 227, // $@10 - S_228_11 = 228, // $@11 - S_229_12 = 229, // $@12 - S_230_13 = 230, // $@13 - S_231_14 = 231, // $@14 - S_value = 232, // value - S_sub_json = 233, // sub_json - S_map2 = 234, // map2 - S_235_15 = 235, // $@15 - S_map_value = 236, // map_value - S_map_content = 237, // map_content - S_not_empty_map = 238, // not_empty_map - S_list_generic = 239, // list_generic - S_240_16 = 240, // $@16 - S_list_content = 241, // list_content - S_not_empty_list = 242, // not_empty_list - S_list_strings = 243, // list_strings - S_244_17 = 244, // $@17 - S_list_strings_content = 245, // list_strings_content - S_not_empty_list_strings = 246, // not_empty_list_strings - S_unknown_map_entry = 247, // unknown_map_entry - S_syntax_map = 248, // syntax_map - S_249_18 = 249, // $@18 - S_global_object = 250, // global_object - S_251_19 = 251, // $@19 - S_global_object_comma = 252, // global_object_comma - S_sub_dhcp6 = 253, // sub_dhcp6 - S_254_20 = 254, // $@20 - S_global_params = 255, // global_params - S_global_param = 256, // global_param - S_data_directory = 257, // data_directory - S_258_21 = 258, // $@21 - S_preferred_lifetime = 259, // preferred_lifetime - S_min_preferred_lifetime = 260, // min_preferred_lifetime - S_max_preferred_lifetime = 261, // max_preferred_lifetime - S_valid_lifetime = 262, // valid_lifetime - S_min_valid_lifetime = 263, // min_valid_lifetime - S_max_valid_lifetime = 264, // max_valid_lifetime - S_renew_timer = 265, // renew_timer - S_rebind_timer = 266, // rebind_timer - S_calculate_tee_times = 267, // calculate_tee_times - S_t1_percent = 268, // t1_percent - S_t2_percent = 269, // t2_percent - S_cache_threshold = 270, // cache_threshold - S_cache_max_age = 271, // cache_max_age - S_decline_probation_period = 272, // decline_probation_period - S_ddns_send_updates = 273, // ddns_send_updates - S_ddns_override_no_update = 274, // ddns_override_no_update - S_ddns_override_client_update = 275, // ddns_override_client_update - S_ddns_replace_client_name = 276, // ddns_replace_client_name - S_277_22 = 277, // $@22 - S_ddns_replace_client_name_value = 278, // ddns_replace_client_name_value - S_ddns_generated_prefix = 279, // ddns_generated_prefix - S_280_23 = 280, // $@23 - S_ddns_qualifying_suffix = 281, // ddns_qualifying_suffix - S_282_24 = 282, // $@24 - S_ddns_update_on_renew = 283, // ddns_update_on_renew - S_ddns_use_conflict_resolution = 284, // ddns_use_conflict_resolution - S_hostname_char_set = 285, // hostname_char_set - S_286_25 = 286, // $@25 - S_hostname_char_replacement = 287, // hostname_char_replacement - S_288_26 = 288, // $@26 - S_store_extended_info = 289, // store_extended_info - S_statistic_default_sample_count = 290, // statistic_default_sample_count - S_statistic_default_sample_age = 291, // statistic_default_sample_age - S_server_tag = 292, // server_tag - S_293_27 = 293, // $@27 - S_parked_packet_limit = 294, // parked_packet_limit - S_early_global_reservations_lookup = 295, // early_global_reservations_lookup - S_ip_reservations_unique = 296, // ip_reservations_unique - S_reservations_lookup_first = 297, // reservations_lookup_first - S_interfaces_config = 298, // interfaces_config - S_299_28 = 299, // $@28 - S_sub_interfaces6 = 300, // sub_interfaces6 - S_301_29 = 301, // $@29 - S_interfaces_config_params = 302, // interfaces_config_params - S_interfaces_config_param = 303, // interfaces_config_param - S_interfaces_list = 304, // interfaces_list + S_ALLOCATOR = 86, // "allocator" + S_PD_ALLOCATOR = 87, // "pd-allocator" + S_SHARED_NETWORKS = 88, // "shared-networks" + S_POOLS = 89, // "pools" + S_POOL = 90, // "pool" + S_PD_POOLS = 91, // "pd-pools" + S_PREFIX = 92, // "prefix" + S_PREFIX_LEN = 93, // "prefix-len" + S_EXCLUDED_PREFIX = 94, // "excluded-prefix" + S_EXCLUDED_PREFIX_LEN = 95, // "excluded-prefix-len" + S_DELEGATED_LEN = 96, // "delegated-len" + S_USER_CONTEXT = 97, // "user-context" + S_COMMENT = 98, // "comment" + S_SUBNET = 99, // "subnet" + S_INTERFACE = 100, // "interface" + S_INTERFACE_ID = 101, // "interface-id" + S_ID = 102, // "id" + S_RAPID_COMMIT = 103, // "rapid-commit" + S_RESERVATION_MODE = 104, // "reservation-mode" + S_DISABLED = 105, // "disabled" + S_OUT_OF_POOL = 106, // "out-of-pool" + S_GLOBAL = 107, // "global" + S_ALL = 108, // "all" + S_RESERVATIONS_GLOBAL = 109, // "reservations-global" + S_RESERVATIONS_IN_SUBNET = 110, // "reservations-in-subnet" + S_RESERVATIONS_OUT_OF_POOL = 111, // "reservations-out-of-pool" + S_MAC_SOURCES = 112, // "mac-sources" + S_RELAY_SUPPLIED_OPTIONS = 113, // "relay-supplied-options" + S_HOST_RESERVATION_IDENTIFIERS = 114, // "host-reservation-identifiers" + S_SANITY_CHECKS = 115, // "sanity-checks" + S_LEASE_CHECKS = 116, // "lease-checks" + S_EXTENDED_INFO_CHECKS = 117, // "extended-info-checks" + S_CLIENT_CLASSES = 118, // "client-classes" + S_REQUIRE_CLIENT_CLASSES = 119, // "require-client-classes" + S_TEST = 120, // "test" + S_TEMPLATE_TEST = 121, // "template-test" + S_ONLY_IF_REQUIRED = 122, // "only-if-required" + S_CLIENT_CLASS = 123, // "client-class" + S_RESERVATIONS = 124, // "reservations" + S_IP_ADDRESSES = 125, // "ip-addresses" + S_PREFIXES = 126, // "prefixes" + S_DUID = 127, // "duid" + S_HW_ADDRESS = 128, // "hw-address" + S_HOSTNAME = 129, // "hostname" + S_FLEX_ID = 130, // "flex-id" + S_RELAY = 131, // "relay" + S_IP_ADDRESS = 132, // "ip-address" + S_HOOKS_LIBRARIES = 133, // "hooks-libraries" + S_LIBRARY = 134, // "library" + S_PARAMETERS = 135, // "parameters" + S_EXPIRED_LEASES_PROCESSING = 136, // "expired-leases-processing" + S_RECLAIM_TIMER_WAIT_TIME = 137, // "reclaim-timer-wait-time" + S_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 138, // "flush-reclaimed-timer-wait-time" + S_HOLD_RECLAIMED_TIME = 139, // "hold-reclaimed-time" + S_MAX_RECLAIM_LEASES = 140, // "max-reclaim-leases" + S_MAX_RECLAIM_TIME = 141, // "max-reclaim-time" + S_UNWARNED_RECLAIM_CYCLES = 142, // "unwarned-reclaim-cycles" + S_SERVER_ID = 143, // "server-id" + S_LLT = 144, // "LLT" + S_EN = 145, // "EN" + S_LL = 146, // "LL" + S_IDENTIFIER = 147, // "identifier" + S_HTYPE = 148, // "htype" + S_TIME = 149, // "time" + S_ENTERPRISE_ID = 150, // "enterprise-id" + S_DHCP4O6_PORT = 151, // "dhcp4o6-port" + S_DHCP_MULTI_THREADING = 152, // "multi-threading" + S_ENABLE_MULTI_THREADING = 153, // "enable-multi-threading" + S_THREAD_POOL_SIZE = 154, // "thread-pool-size" + S_PACKET_QUEUE_SIZE = 155, // "packet-queue-size" + S_CONTROL_SOCKET = 156, // "control-socket" + S_SOCKET_TYPE = 157, // "socket-type" + S_SOCKET_NAME = 158, // "socket-name" + S_DHCP_QUEUE_CONTROL = 159, // "dhcp-queue-control" + S_ENABLE_QUEUE = 160, // "enable-queue" + S_QUEUE_TYPE = 161, // "queue-type" + S_CAPACITY = 162, // "capacity" + S_DHCP_DDNS = 163, // "dhcp-ddns" + S_ENABLE_UPDATES = 164, // "enable-updates" + S_QUALIFYING_SUFFIX = 165, // "qualifying-suffix" + S_SERVER_IP = 166, // "server-ip" + S_SERVER_PORT = 167, // "server-port" + S_SENDER_IP = 168, // "sender-ip" + S_SENDER_PORT = 169, // "sender-port" + S_MAX_QUEUE_SIZE = 170, // "max-queue-size" + S_NCR_PROTOCOL = 171, // "ncr-protocol" + S_NCR_FORMAT = 172, // "ncr-format" + S_OVERRIDE_NO_UPDATE = 173, // "override-no-update" + S_OVERRIDE_CLIENT_UPDATE = 174, // "override-client-update" + S_REPLACE_CLIENT_NAME = 175, // "replace-client-name" + S_GENERATED_PREFIX = 176, // "generated-prefix" + S_UDP = 177, // "UDP" + S_TCP = 178, // "TCP" + S_JSON = 179, // "JSON" + S_WHEN_PRESENT = 180, // "when-present" + S_NEVER = 181, // "never" + S_ALWAYS = 182, // "always" + S_WHEN_NOT_PRESENT = 183, // "when-not-present" + S_HOSTNAME_CHAR_SET = 184, // "hostname-char-set" + S_HOSTNAME_CHAR_REPLACEMENT = 185, // "hostname-char-replacement" + S_EARLY_GLOBAL_RESERVATIONS_LOOKUP = 186, // "early-global-reservations-lookup" + S_IP_RESERVATIONS_UNIQUE = 187, // "ip-reservations-unique" + S_RESERVATIONS_LOOKUP_FIRST = 188, // "reservations-lookup-first" + S_LOGGERS = 189, // "loggers" + S_OUTPUT_OPTIONS = 190, // "output_options" + S_OUTPUT = 191, // "output" + S_DEBUGLEVEL = 192, // "debuglevel" + S_SEVERITY = 193, // "severity" + S_FLUSH = 194, // "flush" + S_MAXSIZE = 195, // "maxsize" + S_MAXVER = 196, // "maxver" + S_PATTERN = 197, // "pattern" + S_COMPATIBILITY = 198, // "compatibility" + S_LENIENT_OPTION_PARSING = 199, // "lenient-option-parsing" + S_TOPLEVEL_JSON = 200, // TOPLEVEL_JSON + S_TOPLEVEL_DHCP6 = 201, // TOPLEVEL_DHCP6 + S_SUB_DHCP6 = 202, // SUB_DHCP6 + S_SUB_INTERFACES6 = 203, // SUB_INTERFACES6 + S_SUB_SUBNET6 = 204, // SUB_SUBNET6 + S_SUB_POOL6 = 205, // SUB_POOL6 + S_SUB_PD_POOL = 206, // SUB_PD_POOL + S_SUB_RESERVATION = 207, // SUB_RESERVATION + S_SUB_OPTION_DEFS = 208, // SUB_OPTION_DEFS + S_SUB_OPTION_DEF = 209, // SUB_OPTION_DEF + S_SUB_OPTION_DATA = 210, // SUB_OPTION_DATA + S_SUB_HOOKS_LIBRARY = 211, // SUB_HOOKS_LIBRARY + S_SUB_DHCP_DDNS = 212, // SUB_DHCP_DDNS + S_SUB_CONFIG_CONTROL = 213, // SUB_CONFIG_CONTROL + S_STRING = 214, // "constant string" + S_INTEGER = 215, // "integer" + S_FLOAT = 216, // "floating point" + S_BOOLEAN = 217, // "boolean" + S_YYACCEPT = 218, // $accept + S_start = 219, // start + S_220_1 = 220, // $@1 + S_221_2 = 221, // $@2 + S_222_3 = 222, // $@3 + S_223_4 = 223, // $@4 + S_224_5 = 224, // $@5 + S_225_6 = 225, // $@6 + S_226_7 = 226, // $@7 + S_227_8 = 227, // $@8 + S_228_9 = 228, // $@9 + S_229_10 = 229, // $@10 + S_230_11 = 230, // $@11 + S_231_12 = 231, // $@12 + S_232_13 = 232, // $@13 + S_233_14 = 233, // $@14 + S_value = 234, // value + S_sub_json = 235, // sub_json + S_map2 = 236, // map2 + S_237_15 = 237, // $@15 + S_map_value = 238, // map_value + S_map_content = 239, // map_content + S_not_empty_map = 240, // not_empty_map + S_list_generic = 241, // list_generic + S_242_16 = 242, // $@16 + S_list_content = 243, // list_content + S_not_empty_list = 244, // not_empty_list + S_list_strings = 245, // list_strings + S_246_17 = 246, // $@17 + S_list_strings_content = 247, // list_strings_content + S_not_empty_list_strings = 248, // not_empty_list_strings + S_unknown_map_entry = 249, // unknown_map_entry + S_syntax_map = 250, // syntax_map + S_251_18 = 251, // $@18 + S_global_object = 252, // global_object + S_253_19 = 253, // $@19 + S_global_object_comma = 254, // global_object_comma + S_sub_dhcp6 = 255, // sub_dhcp6 + S_256_20 = 256, // $@20 + S_global_params = 257, // global_params + S_global_param = 258, // global_param + S_data_directory = 259, // data_directory + S_260_21 = 260, // $@21 + S_preferred_lifetime = 261, // preferred_lifetime + S_min_preferred_lifetime = 262, // min_preferred_lifetime + S_max_preferred_lifetime = 263, // max_preferred_lifetime + S_valid_lifetime = 264, // valid_lifetime + S_min_valid_lifetime = 265, // min_valid_lifetime + S_max_valid_lifetime = 266, // max_valid_lifetime + S_renew_timer = 267, // renew_timer + S_rebind_timer = 268, // rebind_timer + S_calculate_tee_times = 269, // calculate_tee_times + S_t1_percent = 270, // t1_percent + S_t2_percent = 271, // t2_percent + S_cache_threshold = 272, // cache_threshold + S_cache_max_age = 273, // cache_max_age + S_decline_probation_period = 274, // decline_probation_period + S_ddns_send_updates = 275, // ddns_send_updates + S_ddns_override_no_update = 276, // ddns_override_no_update + S_ddns_override_client_update = 277, // ddns_override_client_update + S_ddns_replace_client_name = 278, // ddns_replace_client_name + S_279_22 = 279, // $@22 + S_ddns_replace_client_name_value = 280, // ddns_replace_client_name_value + S_ddns_generated_prefix = 281, // ddns_generated_prefix + S_282_23 = 282, // $@23 + S_ddns_qualifying_suffix = 283, // ddns_qualifying_suffix + S_284_24 = 284, // $@24 + S_ddns_update_on_renew = 285, // ddns_update_on_renew + S_ddns_use_conflict_resolution = 286, // ddns_use_conflict_resolution + S_hostname_char_set = 287, // hostname_char_set + S_288_25 = 288, // $@25 + S_hostname_char_replacement = 289, // hostname_char_replacement + S_290_26 = 290, // $@26 + S_store_extended_info = 291, // store_extended_info + S_statistic_default_sample_count = 292, // statistic_default_sample_count + S_statistic_default_sample_age = 293, // statistic_default_sample_age + S_server_tag = 294, // server_tag + S_295_27 = 295, // $@27 + S_parked_packet_limit = 296, // parked_packet_limit + S_allocator = 297, // allocator + S_298_28 = 298, // $@28 + S_pd_allocator = 299, // pd_allocator + S_300_29 = 300, // $@29 + S_early_global_reservations_lookup = 301, // early_global_reservations_lookup + S_ip_reservations_unique = 302, // ip_reservations_unique + S_reservations_lookup_first = 303, // reservations_lookup_first + S_interfaces_config = 304, // interfaces_config S_305_30 = 305, // $@30 - S_re_detect = 306, // re_detect - S_service_sockets_require_all = 307, // service_sockets_require_all - S_service_sockets_retry_wait_time = 308, // service_sockets_retry_wait_time - S_service_sockets_max_retries = 309, // service_sockets_max_retries - S_lease_database = 310, // lease_database - S_311_31 = 311, // $@31 - S_hosts_database = 312, // hosts_database - S_313_32 = 313, // $@32 - S_hosts_databases = 314, // hosts_databases - S_315_33 = 315, // $@33 - S_database_list = 316, // database_list - S_not_empty_database_list = 317, // not_empty_database_list - S_database = 318, // database + S_sub_interfaces6 = 306, // sub_interfaces6 + S_307_31 = 307, // $@31 + S_interfaces_config_params = 308, // interfaces_config_params + S_interfaces_config_param = 309, // interfaces_config_param + S_interfaces_list = 310, // interfaces_list + S_311_32 = 311, // $@32 + S_re_detect = 312, // re_detect + S_service_sockets_require_all = 313, // service_sockets_require_all + S_service_sockets_retry_wait_time = 314, // service_sockets_retry_wait_time + S_service_sockets_max_retries = 315, // service_sockets_max_retries + S_lease_database = 316, // lease_database + S_317_33 = 317, // $@33 + S_hosts_database = 318, // hosts_database S_319_34 = 319, // $@34 - S_database_map_params = 320, // database_map_params - S_database_map_param = 321, // database_map_param - S_database_type = 322, // database_type - S_323_35 = 323, // $@35 - S_db_type = 324, // db_type - S_user = 325, // user - S_326_36 = 326, // $@36 - S_password = 327, // password - S_328_37 = 328, // $@37 - S_host = 329, // host - S_330_38 = 330, // $@38 - S_port = 331, // port - S_name = 332, // name - S_333_39 = 333, // $@39 - S_persist = 334, // persist - S_lfc_interval = 335, // lfc_interval - S_readonly = 336, // readonly - S_connect_timeout = 337, // connect_timeout - S_reconnect_wait_time = 338, // reconnect_wait_time - S_on_fail = 339, // on_fail - S_340_40 = 340, // $@40 - S_on_fail_mode = 341, // on_fail_mode - S_max_row_errors = 342, // max_row_errors - S_max_reconnect_tries = 343, // max_reconnect_tries - S_trust_anchor = 344, // trust_anchor - S_345_41 = 345, // $@41 - S_cert_file = 346, // cert_file - S_347_42 = 347, // $@42 - S_key_file = 348, // key_file - S_349_43 = 349, // $@43 - S_cipher_list = 350, // cipher_list - S_351_44 = 351, // $@44 - S_sanity_checks = 352, // sanity_checks - S_353_45 = 353, // $@45 - S_sanity_checks_params = 354, // sanity_checks_params - S_sanity_checks_param = 355, // sanity_checks_param - S_lease_checks = 356, // lease_checks + S_hosts_databases = 320, // hosts_databases + S_321_35 = 321, // $@35 + S_database_list = 322, // database_list + S_not_empty_database_list = 323, // not_empty_database_list + S_database = 324, // database + S_325_36 = 325, // $@36 + S_database_map_params = 326, // database_map_params + S_database_map_param = 327, // database_map_param + S_database_type = 328, // database_type + S_329_37 = 329, // $@37 + S_db_type = 330, // db_type + S_user = 331, // user + S_332_38 = 332, // $@38 + S_password = 333, // password + S_334_39 = 334, // $@39 + S_host = 335, // host + S_336_40 = 336, // $@40 + S_port = 337, // port + S_name = 338, // name + S_339_41 = 339, // $@41 + S_persist = 340, // persist + S_lfc_interval = 341, // lfc_interval + S_readonly = 342, // readonly + S_connect_timeout = 343, // connect_timeout + S_reconnect_wait_time = 344, // reconnect_wait_time + S_on_fail = 345, // on_fail + S_346_42 = 346, // $@42 + S_on_fail_mode = 347, // on_fail_mode + S_max_row_errors = 348, // max_row_errors + S_max_reconnect_tries = 349, // max_reconnect_tries + S_trust_anchor = 350, // trust_anchor + S_351_43 = 351, // $@43 + S_cert_file = 352, // cert_file + S_353_44 = 353, // $@44 + S_key_file = 354, // key_file + S_355_45 = 355, // $@45 + S_cipher_list = 356, // cipher_list S_357_46 = 357, // $@46 - S_extended_info_checks = 358, // extended_info_checks + S_sanity_checks = 358, // sanity_checks S_359_47 = 359, // $@47 - S_mac_sources = 360, // mac_sources - S_361_48 = 361, // $@48 - S_mac_sources_list = 362, // mac_sources_list - S_mac_sources_value = 363, // mac_sources_value - S_duid_id = 364, // duid_id - S_string_id = 365, // string_id - S_host_reservation_identifiers = 366, // host_reservation_identifiers - S_367_49 = 367, // $@49 - S_host_reservation_identifiers_list = 368, // host_reservation_identifiers_list - S_host_reservation_identifier = 369, // host_reservation_identifier - S_hw_address_id = 370, // hw_address_id - S_flex_id = 371, // flex_id - S_relay_supplied_options = 372, // relay_supplied_options - S_373_50 = 373, // $@50 - S_dhcp_multi_threading = 374, // dhcp_multi_threading - S_375_51 = 375, // $@51 - S_multi_threading_params = 376, // multi_threading_params - S_multi_threading_param = 377, // multi_threading_param - S_enable_multi_threading = 378, // enable_multi_threading - S_thread_pool_size = 379, // thread_pool_size - S_packet_queue_size = 380, // packet_queue_size - S_hooks_libraries = 381, // hooks_libraries - S_382_52 = 382, // $@52 - S_hooks_libraries_list = 383, // hooks_libraries_list - S_not_empty_hooks_libraries_list = 384, // not_empty_hooks_libraries_list - S_hooks_library = 385, // hooks_library - S_386_53 = 386, // $@53 - S_sub_hooks_library = 387, // sub_hooks_library + S_sanity_checks_params = 360, // sanity_checks_params + S_sanity_checks_param = 361, // sanity_checks_param + S_lease_checks = 362, // lease_checks + S_363_48 = 363, // $@48 + S_extended_info_checks = 364, // extended_info_checks + S_365_49 = 365, // $@49 + S_mac_sources = 366, // mac_sources + S_367_50 = 367, // $@50 + S_mac_sources_list = 368, // mac_sources_list + S_mac_sources_value = 369, // mac_sources_value + S_duid_id = 370, // duid_id + S_string_id = 371, // string_id + S_host_reservation_identifiers = 372, // host_reservation_identifiers + S_373_51 = 373, // $@51 + S_host_reservation_identifiers_list = 374, // host_reservation_identifiers_list + S_host_reservation_identifier = 375, // host_reservation_identifier + S_hw_address_id = 376, // hw_address_id + S_flex_id = 377, // flex_id + S_relay_supplied_options = 378, // relay_supplied_options + S_379_52 = 379, // $@52 + S_dhcp_multi_threading = 380, // dhcp_multi_threading + S_381_53 = 381, // $@53 + S_multi_threading_params = 382, // multi_threading_params + S_multi_threading_param = 383, // multi_threading_param + S_enable_multi_threading = 384, // enable_multi_threading + S_thread_pool_size = 385, // thread_pool_size + S_packet_queue_size = 386, // packet_queue_size + S_hooks_libraries = 387, // hooks_libraries S_388_54 = 388, // $@54 - S_hooks_params = 389, // hooks_params - S_hooks_param = 390, // hooks_param - S_library = 391, // library + S_hooks_libraries_list = 389, // hooks_libraries_list + S_not_empty_hooks_libraries_list = 390, // not_empty_hooks_libraries_list + S_hooks_library = 391, // hooks_library S_392_55 = 392, // $@55 - S_parameters = 393, // parameters + S_sub_hooks_library = 393, // sub_hooks_library S_394_56 = 394, // $@56 - S_expired_leases_processing = 395, // expired_leases_processing - S_396_57 = 396, // $@57 - S_expired_leases_params = 397, // expired_leases_params - S_expired_leases_param = 398, // expired_leases_param - S_reclaim_timer_wait_time = 399, // reclaim_timer_wait_time - S_flush_reclaimed_timer_wait_time = 400, // flush_reclaimed_timer_wait_time - S_hold_reclaimed_time = 401, // hold_reclaimed_time - S_max_reclaim_leases = 402, // max_reclaim_leases - S_max_reclaim_time = 403, // max_reclaim_time - S_unwarned_reclaim_cycles = 404, // unwarned_reclaim_cycles - S_subnet6_list = 405, // subnet6_list - S_406_58 = 406, // $@58 - S_subnet6_list_content = 407, // subnet6_list_content - S_not_empty_subnet6_list = 408, // not_empty_subnet6_list - S_subnet6 = 409, // subnet6 - S_410_59 = 410, // $@59 - S_sub_subnet6 = 411, // sub_subnet6 + S_hooks_params = 395, // hooks_params + S_hooks_param = 396, // hooks_param + S_library = 397, // library + S_398_57 = 398, // $@57 + S_parameters = 399, // parameters + S_400_58 = 400, // $@58 + S_expired_leases_processing = 401, // expired_leases_processing + S_402_59 = 402, // $@59 + S_expired_leases_params = 403, // expired_leases_params + S_expired_leases_param = 404, // expired_leases_param + S_reclaim_timer_wait_time = 405, // reclaim_timer_wait_time + S_flush_reclaimed_timer_wait_time = 406, // flush_reclaimed_timer_wait_time + S_hold_reclaimed_time = 407, // hold_reclaimed_time + S_max_reclaim_leases = 408, // max_reclaim_leases + S_max_reclaim_time = 409, // max_reclaim_time + S_unwarned_reclaim_cycles = 410, // unwarned_reclaim_cycles + S_subnet6_list = 411, // subnet6_list S_412_60 = 412, // $@60 - S_subnet6_params = 413, // subnet6_params - S_subnet6_param = 414, // subnet6_param - S_subnet = 415, // subnet + S_subnet6_list_content = 413, // subnet6_list_content + S_not_empty_subnet6_list = 414, // not_empty_subnet6_list + S_subnet6 = 415, // subnet6 S_416_61 = 416, // $@61 - S_interface = 417, // interface + S_sub_subnet6 = 417, // sub_subnet6 S_418_62 = 418, // $@62 - S_interface_id = 419, // interface_id - S_420_63 = 420, // $@63 - S_client_class = 421, // client_class - S_422_64 = 422, // $@64 - S_require_client_classes = 423, // require_client_classes - S_424_65 = 424, // $@65 - S_reservations_global = 425, // reservations_global - S_reservations_in_subnet = 426, // reservations_in_subnet - S_reservations_out_of_pool = 427, // reservations_out_of_pool - S_reservation_mode = 428, // reservation_mode - S_429_66 = 429, // $@66 - S_hr_mode = 430, // hr_mode - S_id = 431, // id - S_rapid_commit = 432, // rapid_commit - S_shared_networks = 433, // shared_networks - S_434_67 = 434, // $@67 - S_shared_networks_content = 435, // shared_networks_content - S_shared_networks_list = 436, // shared_networks_list - S_shared_network = 437, // shared_network - S_438_68 = 438, // $@68 - S_shared_network_params = 439, // shared_network_params - S_shared_network_param = 440, // shared_network_param - S_option_def_list = 441, // option_def_list - S_442_69 = 442, // $@69 - S_sub_option_def_list = 443, // sub_option_def_list + S_subnet6_params = 419, // subnet6_params + S_subnet6_param = 420, // subnet6_param + S_subnet = 421, // subnet + S_422_63 = 422, // $@63 + S_interface = 423, // interface + S_424_64 = 424, // $@64 + S_interface_id = 425, // interface_id + S_426_65 = 426, // $@65 + S_client_class = 427, // client_class + S_428_66 = 428, // $@66 + S_require_client_classes = 429, // require_client_classes + S_430_67 = 430, // $@67 + S_reservations_global = 431, // reservations_global + S_reservations_in_subnet = 432, // reservations_in_subnet + S_reservations_out_of_pool = 433, // reservations_out_of_pool + S_reservation_mode = 434, // reservation_mode + S_435_68 = 435, // $@68 + S_hr_mode = 436, // hr_mode + S_id = 437, // id + S_rapid_commit = 438, // rapid_commit + S_shared_networks = 439, // shared_networks + S_440_69 = 440, // $@69 + S_shared_networks_content = 441, // shared_networks_content + S_shared_networks_list = 442, // shared_networks_list + S_shared_network = 443, // shared_network S_444_70 = 444, // $@70 - S_option_def_list_content = 445, // option_def_list_content - S_not_empty_option_def_list = 446, // not_empty_option_def_list - S_option_def_entry = 447, // option_def_entry + S_shared_network_params = 445, // shared_network_params + S_shared_network_param = 446, // shared_network_param + S_option_def_list = 447, // option_def_list S_448_71 = 448, // $@71 - S_sub_option_def = 449, // sub_option_def + S_sub_option_def_list = 449, // sub_option_def_list S_450_72 = 450, // $@72 - S_option_def_params = 451, // option_def_params - S_not_empty_option_def_params = 452, // not_empty_option_def_params - S_option_def_param = 453, // option_def_param - S_option_def_name = 454, // option_def_name - S_code = 455, // code - S_option_def_code = 456, // option_def_code - S_option_def_type = 457, // option_def_type - S_458_73 = 458, // $@73 - S_option_def_record_types = 459, // option_def_record_types - S_460_74 = 460, // $@74 - S_space = 461, // space - S_462_75 = 462, // $@75 - S_option_def_space = 463, // option_def_space - S_option_def_encapsulate = 464, // option_def_encapsulate - S_465_76 = 465, // $@76 - S_option_def_array = 466, // option_def_array - S_option_data_list = 467, // option_data_list + S_option_def_list_content = 451, // option_def_list_content + S_not_empty_option_def_list = 452, // not_empty_option_def_list + S_option_def_entry = 453, // option_def_entry + S_454_73 = 454, // $@73 + S_sub_option_def = 455, // sub_option_def + S_456_74 = 456, // $@74 + S_option_def_params = 457, // option_def_params + S_not_empty_option_def_params = 458, // not_empty_option_def_params + S_option_def_param = 459, // option_def_param + S_option_def_name = 460, // option_def_name + S_code = 461, // code + S_option_def_code = 462, // option_def_code + S_option_def_type = 463, // option_def_type + S_464_75 = 464, // $@75 + S_option_def_record_types = 465, // option_def_record_types + S_466_76 = 466, // $@76 + S_space = 467, // space S_468_77 = 468, // $@77 - S_option_data_list_content = 469, // option_data_list_content - S_not_empty_option_data_list = 470, // not_empty_option_data_list - S_option_data_entry = 471, // option_data_entry - S_472_78 = 472, // $@78 - S_sub_option_data = 473, // sub_option_data + S_option_def_space = 469, // option_def_space + S_option_def_encapsulate = 470, // option_def_encapsulate + S_471_78 = 471, // $@78 + S_option_def_array = 472, // option_def_array + S_option_data_list = 473, // option_data_list S_474_79 = 474, // $@79 - S_option_data_params = 475, // option_data_params - S_not_empty_option_data_params = 476, // not_empty_option_data_params - S_option_data_param = 477, // option_data_param - S_option_data_name = 478, // option_data_name - S_option_data_data = 479, // option_data_data - S_480_80 = 480, // $@80 - S_option_data_code = 481, // option_data_code - S_option_data_space = 482, // option_data_space - S_option_data_csv_format = 483, // option_data_csv_format - S_option_data_always_send = 484, // option_data_always_send - S_pools_list = 485, // pools_list - S_486_81 = 486, // $@81 - S_pools_list_content = 487, // pools_list_content - S_not_empty_pools_list = 488, // not_empty_pools_list - S_pool_list_entry = 489, // pool_list_entry - S_490_82 = 490, // $@82 - S_sub_pool6 = 491, // sub_pool6 + S_option_data_list_content = 475, // option_data_list_content + S_not_empty_option_data_list = 476, // not_empty_option_data_list + S_option_data_entry = 477, // option_data_entry + S_478_80 = 478, // $@80 + S_sub_option_data = 479, // sub_option_data + S_480_81 = 480, // $@81 + S_option_data_params = 481, // option_data_params + S_not_empty_option_data_params = 482, // not_empty_option_data_params + S_option_data_param = 483, // option_data_param + S_option_data_name = 484, // option_data_name + S_option_data_data = 485, // option_data_data + S_486_82 = 486, // $@82 + S_option_data_code = 487, // option_data_code + S_option_data_space = 488, // option_data_space + S_option_data_csv_format = 489, // option_data_csv_format + S_option_data_always_send = 490, // option_data_always_send + S_pools_list = 491, // pools_list S_492_83 = 492, // $@83 - S_pool_params = 493, // pool_params - S_pool_param = 494, // pool_param - S_pool_entry = 495, // pool_entry + S_pools_list_content = 493, // pools_list_content + S_not_empty_pools_list = 494, // not_empty_pools_list + S_pool_list_entry = 495, // pool_list_entry S_496_84 = 496, // $@84 - S_user_context = 497, // user_context + S_sub_pool6 = 497, // sub_pool6 S_498_85 = 498, // $@85 - S_comment = 499, // comment - S_500_86 = 500, // $@86 - S_pd_pools_list = 501, // pd_pools_list - S_502_87 = 502, // $@87 - S_pd_pools_list_content = 503, // pd_pools_list_content - S_not_empty_pd_pools_list = 504, // not_empty_pd_pools_list - S_pd_pool_entry = 505, // pd_pool_entry + S_pool_params = 499, // pool_params + S_pool_param = 500, // pool_param + S_pool_entry = 501, // pool_entry + S_502_86 = 502, // $@86 + S_user_context = 503, // user_context + S_504_87 = 504, // $@87 + S_comment = 505, // comment S_506_88 = 506, // $@88 - S_sub_pd_pool = 507, // sub_pd_pool + S_pd_pools_list = 507, // pd_pools_list S_508_89 = 508, // $@89 - S_pd_pool_params = 509, // pd_pool_params - S_pd_pool_param = 510, // pd_pool_param - S_pd_prefix = 511, // pd_prefix + S_pd_pools_list_content = 509, // pd_pools_list_content + S_not_empty_pd_pools_list = 510, // not_empty_pd_pools_list + S_pd_pool_entry = 511, // pd_pool_entry S_512_90 = 512, // $@90 - S_pd_prefix_len = 513, // pd_prefix_len - S_excluded_prefix = 514, // excluded_prefix - S_515_91 = 515, // $@91 - S_excluded_prefix_len = 516, // excluded_prefix_len - S_pd_delegated_len = 517, // pd_delegated_len - S_reservations = 518, // reservations - S_519_92 = 519, // $@92 - S_reservations_list = 520, // reservations_list - S_not_empty_reservations_list = 521, // not_empty_reservations_list - S_reservation = 522, // reservation - S_523_93 = 523, // $@93 - S_sub_reservation = 524, // sub_reservation + S_sub_pd_pool = 513, // sub_pd_pool + S_514_91 = 514, // $@91 + S_pd_pool_params = 515, // pd_pool_params + S_pd_pool_param = 516, // pd_pool_param + S_pd_prefix = 517, // pd_prefix + S_518_92 = 518, // $@92 + S_pd_prefix_len = 519, // pd_prefix_len + S_excluded_prefix = 520, // excluded_prefix + S_521_93 = 521, // $@93 + S_excluded_prefix_len = 522, // excluded_prefix_len + S_pd_delegated_len = 523, // pd_delegated_len + S_reservations = 524, // reservations S_525_94 = 525, // $@94 - S_reservation_params = 526, // reservation_params - S_not_empty_reservation_params = 527, // not_empty_reservation_params - S_reservation_param = 528, // reservation_param - S_ip_addresses = 529, // ip_addresses - S_530_95 = 530, // $@95 - S_prefixes = 531, // prefixes - S_532_96 = 532, // $@96 - S_duid = 533, // duid - S_534_97 = 534, // $@97 - S_hw_address = 535, // hw_address - S_536_98 = 536, // $@98 - S_hostname = 537, // hostname - S_538_99 = 538, // $@99 - S_flex_id_value = 539, // flex_id_value - S_540_100 = 540, // $@100 - S_reservation_client_classes = 541, // reservation_client_classes - S_542_101 = 542, // $@101 - S_relay = 543, // relay - S_544_102 = 544, // $@102 - S_relay_map = 545, // relay_map - S_ip_address = 546, // ip_address - S_547_103 = 547, // $@103 - S_client_classes = 548, // client_classes - S_549_104 = 549, // $@104 - S_client_classes_list = 550, // client_classes_list - S_client_class_entry = 551, // client_class_entry - S_552_105 = 552, // $@105 - S_client_class_params = 553, // client_class_params - S_not_empty_client_class_params = 554, // not_empty_client_class_params - S_client_class_param = 555, // client_class_param - S_client_class_name = 556, // client_class_name - S_client_class_test = 557, // client_class_test - S_558_106 = 558, // $@106 - S_client_class_template_test = 559, // client_class_template_test - S_560_107 = 560, // $@107 - S_only_if_required = 561, // only_if_required - S_server_id = 562, // server_id - S_563_108 = 563, // $@108 - S_server_id_params = 564, // server_id_params - S_server_id_param = 565, // server_id_param - S_server_id_type = 566, // server_id_type - S_567_109 = 567, // $@109 - S_duid_type = 568, // duid_type - S_htype = 569, // htype - S_identifier = 570, // identifier - S_571_110 = 571, // $@110 - S_time = 572, // time - S_enterprise_id = 573, // enterprise_id - S_dhcp4o6_port = 574, // dhcp4o6_port - S_control_socket = 575, // control_socket - S_576_111 = 576, // $@111 - S_control_socket_params = 577, // control_socket_params - S_control_socket_param = 578, // control_socket_param - S_socket_type = 579, // socket_type - S_580_112 = 580, // $@112 - S_socket_name = 581, // socket_name + S_reservations_list = 526, // reservations_list + S_not_empty_reservations_list = 527, // not_empty_reservations_list + S_reservation = 528, // reservation + S_529_95 = 529, // $@95 + S_sub_reservation = 530, // sub_reservation + S_531_96 = 531, // $@96 + S_reservation_params = 532, // reservation_params + S_not_empty_reservation_params = 533, // not_empty_reservation_params + S_reservation_param = 534, // reservation_param + S_ip_addresses = 535, // ip_addresses + S_536_97 = 536, // $@97 + S_prefixes = 537, // prefixes + S_538_98 = 538, // $@98 + S_duid = 539, // duid + S_540_99 = 540, // $@99 + S_hw_address = 541, // hw_address + S_542_100 = 542, // $@100 + S_hostname = 543, // hostname + S_544_101 = 544, // $@101 + S_flex_id_value = 545, // flex_id_value + S_546_102 = 546, // $@102 + S_reservation_client_classes = 547, // reservation_client_classes + S_548_103 = 548, // $@103 + S_relay = 549, // relay + S_550_104 = 550, // $@104 + S_relay_map = 551, // relay_map + S_ip_address = 552, // ip_address + S_553_105 = 553, // $@105 + S_client_classes = 554, // client_classes + S_555_106 = 555, // $@106 + S_client_classes_list = 556, // client_classes_list + S_client_class_entry = 557, // client_class_entry + S_558_107 = 558, // $@107 + S_client_class_params = 559, // client_class_params + S_not_empty_client_class_params = 560, // not_empty_client_class_params + S_client_class_param = 561, // client_class_param + S_client_class_name = 562, // client_class_name + S_client_class_test = 563, // client_class_test + S_564_108 = 564, // $@108 + S_client_class_template_test = 565, // client_class_template_test + S_566_109 = 566, // $@109 + S_only_if_required = 567, // only_if_required + S_server_id = 568, // server_id + S_569_110 = 569, // $@110 + S_server_id_params = 570, // server_id_params + S_server_id_param = 571, // server_id_param + S_server_id_type = 572, // server_id_type + S_573_111 = 573, // $@111 + S_duid_type = 574, // duid_type + S_htype = 575, // htype + S_identifier = 576, // identifier + S_577_112 = 577, // $@112 + S_time = 578, // time + S_enterprise_id = 579, // enterprise_id + S_dhcp4o6_port = 580, // dhcp4o6_port + S_control_socket = 581, // control_socket S_582_113 = 582, // $@113 - S_dhcp_queue_control = 583, // dhcp_queue_control - S_584_114 = 584, // $@114 - S_queue_control_params = 585, // queue_control_params - S_queue_control_param = 586, // queue_control_param - S_enable_queue = 587, // enable_queue - S_queue_type = 588, // queue_type - S_589_115 = 589, // $@115 - S_capacity = 590, // capacity - S_arbitrary_map_entry = 591, // arbitrary_map_entry - S_592_116 = 592, // $@116 - S_dhcp_ddns = 593, // dhcp_ddns - S_594_117 = 594, // $@117 - S_sub_dhcp_ddns = 595, // sub_dhcp_ddns - S_596_118 = 596, // $@118 - S_dhcp_ddns_params = 597, // dhcp_ddns_params - S_dhcp_ddns_param = 598, // dhcp_ddns_param - S_enable_updates = 599, // enable_updates - S_dep_qualifying_suffix = 600, // dep_qualifying_suffix - S_601_119 = 601, // $@119 - S_server_ip = 602, // server_ip - S_603_120 = 603, // $@120 - S_server_port = 604, // server_port - S_sender_ip = 605, // sender_ip - S_606_121 = 606, // $@121 - S_sender_port = 607, // sender_port - S_max_queue_size = 608, // max_queue_size - S_ncr_protocol = 609, // ncr_protocol - S_610_122 = 610, // $@122 - S_ncr_protocol_value = 611, // ncr_protocol_value - S_ncr_format = 612, // ncr_format - S_613_123 = 613, // $@123 - S_dep_override_no_update = 614, // dep_override_no_update - S_dep_override_client_update = 615, // dep_override_client_update - S_dep_replace_client_name = 616, // dep_replace_client_name - S_617_124 = 617, // $@124 - S_dep_generated_prefix = 618, // dep_generated_prefix + S_control_socket_params = 583, // control_socket_params + S_control_socket_param = 584, // control_socket_param + S_socket_type = 585, // socket_type + S_586_114 = 586, // $@114 + S_socket_name = 587, // socket_name + S_588_115 = 588, // $@115 + S_dhcp_queue_control = 589, // dhcp_queue_control + S_590_116 = 590, // $@116 + S_queue_control_params = 591, // queue_control_params + S_queue_control_param = 592, // queue_control_param + S_enable_queue = 593, // enable_queue + S_queue_type = 594, // queue_type + S_595_117 = 595, // $@117 + S_capacity = 596, // capacity + S_arbitrary_map_entry = 597, // arbitrary_map_entry + S_598_118 = 598, // $@118 + S_dhcp_ddns = 599, // dhcp_ddns + S_600_119 = 600, // $@119 + S_sub_dhcp_ddns = 601, // sub_dhcp_ddns + S_602_120 = 602, // $@120 + S_dhcp_ddns_params = 603, // dhcp_ddns_params + S_dhcp_ddns_param = 604, // dhcp_ddns_param + S_enable_updates = 605, // enable_updates + S_dep_qualifying_suffix = 606, // dep_qualifying_suffix + S_607_121 = 607, // $@121 + S_server_ip = 608, // server_ip + S_609_122 = 609, // $@122 + S_server_port = 610, // server_port + S_sender_ip = 611, // sender_ip + S_612_123 = 612, // $@123 + S_sender_port = 613, // sender_port + S_max_queue_size = 614, // max_queue_size + S_ncr_protocol = 615, // ncr_protocol + S_616_124 = 616, // $@124 + S_ncr_protocol_value = 617, // ncr_protocol_value + S_ncr_format = 618, // ncr_format S_619_125 = 619, // $@125 - S_dep_hostname_char_set = 620, // dep_hostname_char_set - S_621_126 = 621, // $@126 - S_dep_hostname_char_replacement = 622, // dep_hostname_char_replacement - S_623_127 = 623, // $@127 - S_config_control = 624, // config_control - S_625_128 = 625, // $@128 - S_sub_config_control = 626, // sub_config_control - S_627_129 = 627, // $@129 - S_config_control_params = 628, // config_control_params - S_config_control_param = 629, // config_control_param - S_config_databases = 630, // config_databases + S_dep_override_no_update = 620, // dep_override_no_update + S_dep_override_client_update = 621, // dep_override_client_update + S_dep_replace_client_name = 622, // dep_replace_client_name + S_623_126 = 623, // $@126 + S_dep_generated_prefix = 624, // dep_generated_prefix + S_625_127 = 625, // $@127 + S_dep_hostname_char_set = 626, // dep_hostname_char_set + S_627_128 = 627, // $@128 + S_dep_hostname_char_replacement = 628, // dep_hostname_char_replacement + S_629_129 = 629, // $@129 + S_config_control = 630, // config_control S_631_130 = 631, // $@130 - S_config_fetch_wait_time = 632, // config_fetch_wait_time - S_loggers = 633, // loggers - S_634_131 = 634, // $@131 - S_loggers_entries = 635, // loggers_entries - S_logger_entry = 636, // logger_entry + S_sub_config_control = 632, // sub_config_control + S_633_131 = 633, // $@131 + S_config_control_params = 634, // config_control_params + S_config_control_param = 635, // config_control_param + S_config_databases = 636, // config_databases S_637_132 = 637, // $@132 - S_logger_params = 638, // logger_params - S_logger_param = 639, // logger_param - S_debuglevel = 640, // debuglevel - S_severity = 641, // severity - S_642_133 = 642, // $@133 - S_output_options_list = 643, // output_options_list - S_644_134 = 644, // $@134 - S_output_options_list_content = 645, // output_options_list_content - S_output_entry = 646, // output_entry - S_647_135 = 647, // $@135 - S_output_params_list = 648, // output_params_list - S_output_params = 649, // output_params - S_output = 650, // output - S_651_136 = 651, // $@136 - S_flush = 652, // flush - S_maxsize = 653, // maxsize - S_maxver = 654, // maxver - S_pattern = 655, // pattern - S_656_137 = 656, // $@137 - S_compatibility = 657, // compatibility - S_658_138 = 658, // $@138 - S_compatibility_params = 659, // compatibility_params - S_compatibility_param = 660, // compatibility_param - S_lenient_option_parsing = 661 // lenient_option_parsing + S_config_fetch_wait_time = 638, // config_fetch_wait_time + S_loggers = 639, // loggers + S_640_133 = 640, // $@133 + S_loggers_entries = 641, // loggers_entries + S_logger_entry = 642, // logger_entry + S_643_134 = 643, // $@134 + S_logger_params = 644, // logger_params + S_logger_param = 645, // logger_param + S_debuglevel = 646, // debuglevel + S_severity = 647, // severity + S_648_135 = 648, // $@135 + S_output_options_list = 649, // output_options_list + S_650_136 = 650, // $@136 + S_output_options_list_content = 651, // output_options_list_content + S_output_entry = 652, // output_entry + S_653_137 = 653, // $@137 + S_output_params_list = 654, // output_params_list + S_output_params = 655, // output_params + S_output = 656, // output + S_657_138 = 657, // $@138 + S_flush = 658, // flush + S_maxsize = 659, // maxsize + S_maxver = 660, // maxver + S_pattern = 661, // pattern + S_662_139 = 662, // $@139 + S_compatibility = 663, // compatibility + S_664_140 = 664, // $@140 + S_compatibility_params = 665, // compatibility_params + S_compatibility_param = 666, // compatibility_param + S_lenient_option_parsing = 667 // lenient_option_parsing }; }; @@ -3085,6 +3093,36 @@ switch (yykind) return symbol_type (token::TOKEN_PARKED_PACKET_LIMIT, l); } #endif +#if 201103L <= YY_CPLUSPLUS + static + symbol_type + make_ALLOCATOR (location_type l) + { + return symbol_type (token::TOKEN_ALLOCATOR, std::move (l)); + } +#else + static + symbol_type + make_ALLOCATOR (const location_type& l) + { + return symbol_type (token::TOKEN_ALLOCATOR, l); + } +#endif +#if 201103L <= YY_CPLUSPLUS + static + symbol_type + make_PD_ALLOCATOR (location_type l) + { + return symbol_type (token::TOKEN_PD_ALLOCATOR, std::move (l)); + } +#else + static + symbol_type + make_PD_ALLOCATOR (const location_type& l) + { + return symbol_type (token::TOKEN_PD_ALLOCATOR, l); + } +#endif #if 201103L <= YY_CPLUSPLUS static symbol_type @@ -5365,8 +5403,8 @@ switch (yykind) /// Constants. enum { - yylast_ = 1334, ///< Last index in yytable_. - yynnts_ = 446, ///< Number of nonterminal symbols. + yylast_ = 1352, ///< Last index in yytable_. + yynnts_ = 450, ///< Number of nonterminal symbols. yyfinal_ = 30 ///< Termination state number. }; @@ -5433,10 +5471,10 @@ switch (yykind) 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, - 215 + 215, 216, 217 }; // Last valid token kind. - const int code_max = 470; + const int code_max = 472; if (t <= 0) return symbol_kind::S_YYEOF; @@ -5607,7 +5645,7 @@ switch (yykind) #line 14 "dhcp6_parser.yy" } } // isc::dhcp -#line 5611 "dhcp6_parser.h" +#line 5649 "dhcp6_parser.h" diff --git a/src/bin/dhcp6/dhcp6_parser.yy b/src/bin/dhcp6/dhcp6_parser.yy index 18e90b911d..9928d91f63 100644 --- a/src/bin/dhcp6/dhcp6_parser.yy +++ b/src/bin/dhcp6/dhcp6_parser.yy @@ -129,6 +129,8 @@ using namespace std; ENCAPSULATE "encapsulate" ARRAY "array" PARKED_PACKET_LIMIT "parked-packet-limit" + ALLOCATOR "allocator" + PD_ALLOCATOR "pd-allocator" SHARED_NETWORKS "shared-networks" @@ -553,6 +555,8 @@ global_param: data_directory | reservations_lookup_first | compatibility | parked_packet_limit + | allocator + | pd_allocator | unknown_map_entry ; @@ -775,6 +779,24 @@ parked_packet_limit: PARKED_PACKET_LIMIT COLON INTEGER { ctx.stack_.back()->set("parked-packet-limit", ppl); }; +allocator: ALLOCATOR { + ctx.unique("allocator", ctx.loc2pos(@1)); + ctx.enter(ctx.NO_KEYWORD); +} COLON STRING { + ElementPtr al(new StringElement($4, ctx.loc2pos(@4))); + ctx.stack_.back()->set("allocator", al); + ctx.leave(); +}; + +pd_allocator: PD_ALLOCATOR { + ctx.unique("pd-allocator", ctx.loc2pos(@1)); + ctx.enter(ctx.NO_KEYWORD); +} COLON STRING { + ElementPtr al(new StringElement($4, ctx.loc2pos(@4))); + ctx.stack_.back()->set("pd-allocator", al); + ctx.leave(); +}; + early_global_reservations_lookup: EARLY_GLOBAL_RESERVATIONS_LOOKUP COLON BOOLEAN { ctx.unique("early-global-reservations-lookup", ctx.loc2pos(@1)); ElementPtr early(new BoolElement($3, ctx.loc2pos(@3))); @@ -1537,6 +1559,8 @@ subnet6_param: preferred_lifetime | ddns_update_on_renew | ddns_use_conflict_resolution | store_extended_info + | allocator + | pd_allocator | unknown_map_entry ; @@ -1711,6 +1735,8 @@ shared_network_param: name | ddns_update_on_renew | ddns_use_conflict_resolution | store_extended_info + | allocator + | pd_allocator | unknown_map_entry ; diff --git a/src/bin/dhcp6/json_config_parser.cc b/src/bin/dhcp6/json_config_parser.cc index 70990b8467..52ee35d4ee 100644 --- a/src/bin/dhcp6/json_config_parser.cc +++ b/src/bin/dhcp6/json_config_parser.cc @@ -818,7 +818,9 @@ configureDhcp6Server(Dhcpv6Srv& server, isc::data::ConstElementPtr config_set, (config_pair.first == "early-global-reservations-lookup") || (config_pair.first == "ip-reservations-unique") || (config_pair.first == "reservations-lookup-first") || - (config_pair.first == "parked-packet-limit")) { + (config_pair.first == "parked-packet-limit") || + (config_pair.first == "allocator") || + (config_pair.first == "pd-allocator") ) { CfgMgr::instance().getStagingCfg()->addConfiguredGlobal(config_pair.first, config_pair.second); continue; diff --git a/src/bin/dhcp6/tests/get_config_unittest.cc b/src/bin/dhcp6/tests/get_config_unittest.cc index 0b617a3536..d15d92c466 100644 --- a/src/bin/dhcp6/tests/get_config_unittest.cc +++ b/src/bin/dhcp6/tests/get_config_unittest.cc @@ -2043,6 +2043,39 @@ const char* EXTRACTED_CONFIGS[] = { " \"subnet\": \"2001:db8:1::/64\"\n" " }\n" " ]\n" +" }\n", + // CONFIGURATION 64 +"{\n" +" \"client-classes\": [\n" +" {\n" +" \"max-preferred-lifetime\": 6000,\n" +" \"max-valid-lifetime\": 3000,\n" +" \"min-preferred-lifetime\": 4000,\n" +" \"min-valid-lifetime\": 1000,\n" +" \"name\": \"one\",\n" +" \"preferred-lifetime\": 5000,\n" +" \"template-test\": \"''\",\n" +" \"valid-lifetime\": 2000\n" +" },\n" +" {\n" +" \"name\": \"two\",\n" +" \"template-test\": \"''\"\n" +" }\n" +" ],\n" +" \"interfaces-config\": {\n" +" \"interfaces\": [ \"*\" ],\n" +" \"re-detect\": false\n" +" },\n" +" \"subnet6\": [\n" +" {\n" +" \"pools\": [\n" +" {\n" +" \"pool\": \"2001:db8:1::1 - 2001:db8:1::ffff\"\n" +" }\n" +" ],\n" +" \"subnet\": \"2001:db8:1::/64\"\n" +" }\n" +" ]\n" " }\n" }; @@ -2050,6 +2083,7 @@ const char* EXTRACTED_CONFIGS[] = { const char* UNPARSED_CONFIGS[] = { // CONFIGURATION 0 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -2106,6 +2140,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -2138,6 +2173,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 1 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -2198,6 +2234,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -2225,6 +2262,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 1,\n" " \"max-preferred-lifetime\": 4000,\n" @@ -2232,6 +2270,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 2000,\n" " \"min-valid-lifetime\": 3000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -2260,6 +2299,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 2 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -2316,6 +2356,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -2343,6 +2384,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 1,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -2350,6 +2392,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -2372,6 +2415,7 @@ const char* UNPARSED_CONFIGS[] = { " \"valid-lifetime\": 4000\n" " },\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 2,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -2379,6 +2423,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -2401,6 +2446,7 @@ const char* UNPARSED_CONFIGS[] = { " \"valid-lifetime\": 4000\n" " },\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 3,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -2408,6 +2454,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -2430,6 +2477,7 @@ const char* UNPARSED_CONFIGS[] = { " \"valid-lifetime\": 4000\n" " },\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 4,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -2437,6 +2485,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -2465,6 +2514,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 3 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -2521,6 +2571,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -2548,6 +2599,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 1,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -2555,6 +2607,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -2577,6 +2630,7 @@ const char* UNPARSED_CONFIGS[] = { " \"valid-lifetime\": 4000\n" " },\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 34,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -2584,6 +2638,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -2606,6 +2661,7 @@ const char* UNPARSED_CONFIGS[] = { " \"valid-lifetime\": 4000\n" " },\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 100,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -2613,6 +2669,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -2635,6 +2692,7 @@ const char* UNPARSED_CONFIGS[] = { " \"valid-lifetime\": 4000\n" " },\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 1024,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -2642,6 +2700,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -2670,6 +2729,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 4 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -2726,6 +2786,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -2753,6 +2814,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 1,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -2760,6 +2822,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -2782,6 +2845,7 @@ const char* UNPARSED_CONFIGS[] = { " \"valid-lifetime\": 4000\n" " },\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 2,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -2789,6 +2853,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -2811,6 +2876,7 @@ const char* UNPARSED_CONFIGS[] = { " \"valid-lifetime\": 4000\n" " },\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 3,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -2818,6 +2884,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -2840,6 +2907,7 @@ const char* UNPARSED_CONFIGS[] = { " \"valid-lifetime\": 4000\n" " },\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 4,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -2847,6 +2915,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -2875,6 +2944,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 5 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -2935,6 +3005,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -2962,6 +3033,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 1,\n" " \"max-preferred-lifetime\": 4,\n" @@ -2969,6 +3041,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 2,\n" " \"min-valid-lifetime\": 3,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -2997,6 +3070,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 6 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -3053,6 +3127,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -3080,6 +3155,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 1,\n" " \"interface\": \"eth0\",\n" @@ -3088,6 +3164,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -3116,6 +3193,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 7 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -3172,6 +3250,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -3199,6 +3278,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 1,\n" " \"interface-id\": \"foobar\",\n" @@ -3207,6 +3287,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -3235,6 +3316,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 8 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -3291,6 +3373,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -3318,6 +3401,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 1,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -3325,6 +3409,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -3351,6 +3436,7 @@ const char* UNPARSED_CONFIGS[] = { " \"valid-lifetime\": 4000\n" " },\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 2,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -3358,6 +3444,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -3390,6 +3477,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 9 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -3446,6 +3534,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -3473,6 +3562,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 1,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -3480,6 +3570,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -3508,6 +3599,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 10 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -3564,6 +3656,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -3591,6 +3684,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 1,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -3598,6 +3692,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [\n" " {\n" " \"delegated-len\": 128,\n" @@ -3628,6 +3723,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 11 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -3684,6 +3780,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -3711,6 +3808,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 1,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -3718,6 +3816,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [\n" " {\n" " \"delegated-len\": 64,\n" @@ -3750,6 +3849,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 12 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -3806,6 +3906,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -3833,6 +3934,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 1,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -3840,6 +3942,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [\n" " {\n" " \"delegated-len\": 80,\n" @@ -3887,6 +3990,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 13 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -3943,6 +4047,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -3970,6 +4075,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 1,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -3977,6 +4083,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [\n" " {\n" " \"delegated-len\": 64,\n" @@ -4007,6 +4114,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 14 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -4073,6 +4181,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n" " ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3600,\n" " \"relay-supplied-options\": [ \"65\" ],\n" " \"reservations-global\": false,\n" @@ -4103,6 +4212,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 15 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -4169,6 +4279,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n" " ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3600,\n" " \"relay-supplied-options\": [ \"65\" ],\n" " \"reservations-global\": false,\n" @@ -4199,6 +4310,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 16 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -4274,6 +4386,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n" " ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3600,\n" " \"relay-supplied-options\": [ \"65\" ],\n" " \"reservations-global\": false,\n" @@ -4304,6 +4417,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 17 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -4370,6 +4484,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n" " ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3600,\n" " \"relay-supplied-options\": [ \"65\" ],\n" " \"reservations-global\": false,\n" @@ -4400,6 +4515,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 18 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -4466,6 +4582,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n" " ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3600,\n" " \"relay-supplied-options\": [ \"65\" ],\n" " \"reservations-global\": false,\n" @@ -4496,6 +4613,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 19 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -4569,6 +4687,7 @@ const char* UNPARSED_CONFIGS[] = { " ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -4596,6 +4715,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 1,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -4603,6 +4723,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -4631,6 +4752,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 20 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -4687,6 +4809,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -4714,6 +4837,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 1,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -4738,6 +4862,7 @@ const char* UNPARSED_CONFIGS[] = { " \"space\": \"dhcp6\"\n" " }\n" " ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -4766,6 +4891,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 21 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -4849,6 +4975,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n" " ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -4876,6 +5003,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 1,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -4883,6 +5011,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -4911,6 +5040,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 22 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -5003,6 +5133,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n" " ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -5035,6 +5166,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 23 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -5144,6 +5276,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n" " ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -5171,6 +5304,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 1,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -5178,6 +5312,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -5206,6 +5341,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 24 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -5262,6 +5398,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -5289,6 +5426,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 1,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -5305,6 +5443,7 @@ const char* UNPARSED_CONFIGS[] = { " \"space\": \"dhcp6\"\n" " }\n" " ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -5327,6 +5466,7 @@ const char* UNPARSED_CONFIGS[] = { " \"valid-lifetime\": 4000\n" " },\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 2,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -5343,6 +5483,7 @@ const char* UNPARSED_CONFIGS[] = { " \"space\": \"dhcp6\"\n" " }\n" " ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -5371,6 +5512,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 25 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -5427,6 +5569,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -5454,6 +5597,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 1,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -5461,6 +5605,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [\n" " {\n" " \"delegated-len\": 64,\n" @@ -5542,6 +5687,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 26 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -5613,6 +5759,7 @@ const char* UNPARSED_CONFIGS[] = { " ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -5640,6 +5787,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 1,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -5647,6 +5795,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -5675,6 +5824,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 27 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -5750,6 +5900,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n" " ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -5777,6 +5928,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 1,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -5784,6 +5936,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -5812,6 +5965,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 28 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -5868,6 +6022,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -5900,6 +6055,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 29 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -5956,6 +6112,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -5988,6 +6145,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 30 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -6044,6 +6202,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -6071,6 +6230,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 1,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -6078,6 +6238,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -6106,6 +6267,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 31 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -6162,6 +6324,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -6189,6 +6352,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 1,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -6196,6 +6360,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -6224,6 +6389,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 32 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -6280,6 +6446,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -6307,6 +6474,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"client-class\": \"alpha\",\n" " \"id\": 1,\n" @@ -6315,6 +6483,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -6337,6 +6506,7 @@ const char* UNPARSED_CONFIGS[] = { " \"valid-lifetime\": 4000\n" " },\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"client-class\": \"beta\",\n" " \"id\": 2,\n" @@ -6345,6 +6515,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -6367,6 +6538,7 @@ const char* UNPARSED_CONFIGS[] = { " \"valid-lifetime\": 4000\n" " },\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"client-class\": \"gamma\",\n" " \"id\": 3,\n" @@ -6375,6 +6547,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -6397,6 +6570,7 @@ const char* UNPARSED_CONFIGS[] = { " \"valid-lifetime\": 4000\n" " },\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 4,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -6404,6 +6578,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -6432,6 +6607,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 33 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -6488,6 +6664,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -6515,6 +6692,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 1,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -6522,6 +6700,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -6565,6 +6744,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 34 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -6621,6 +6801,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -6648,6 +6829,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 1,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -6655,6 +6837,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [\n" " {\n" " \"client-class\": \"alpha\",\n" @@ -6706,6 +6889,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 35 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -6762,6 +6946,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -6789,6 +6974,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 1,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -6796,6 +6982,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -6824,6 +7011,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 36 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"test.prefix\",\n" " \"ddns-override-client-update\": true,\n" @@ -6880,6 +7068,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -6907,6 +7096,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 1,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -6914,6 +7104,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -6942,6 +7133,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 37 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"global.prefix\",\n" " \"ddns-override-client-update\": true,\n" @@ -6998,6 +7190,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -7025,6 +7218,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 1,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -7032,6 +7226,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -7060,6 +7255,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 38 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -7116,6 +7312,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -7143,6 +7340,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 123,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -7150,6 +7348,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -7172,6 +7371,7 @@ const char* UNPARSED_CONFIGS[] = { " \"valid-lifetime\": 4000\n" " },\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 234,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -7179,6 +7379,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [ ],\n" " \"preferred-lifetime\": 3000,\n" @@ -7247,6 +7448,7 @@ const char* UNPARSED_CONFIGS[] = { " \"valid-lifetime\": 4000\n" " },\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 542,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -7254,6 +7456,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [ ],\n" " \"preferred-lifetime\": 3000,\n" @@ -7311,6 +7514,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 39 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -7377,6 +7581,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n" " ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -7404,6 +7609,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 234,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -7411,6 +7617,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [ ],\n" " \"preferred-lifetime\": 3000,\n" @@ -7452,6 +7659,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 40 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -7508,6 +7716,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -7540,6 +7749,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 41 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -7596,6 +7806,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -7628,6 +7839,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 42 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -7684,6 +7896,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -7711,6 +7924,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 1,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -7718,6 +7932,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -7743,6 +7958,7 @@ const char* UNPARSED_CONFIGS[] = { " \"valid-lifetime\": 4000\n" " },\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 2,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -7750,6 +7966,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -7775,6 +7992,7 @@ const char* UNPARSED_CONFIGS[] = { " \"valid-lifetime\": 4000\n" " },\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 3,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -7782,6 +8000,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -7806,6 +8025,7 @@ const char* UNPARSED_CONFIGS[] = { " \"valid-lifetime\": 4000\n" " },\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 4,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -7813,6 +8033,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -7837,6 +8058,7 @@ const char* UNPARSED_CONFIGS[] = { " \"valid-lifetime\": 4000\n" " },\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 5,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -7844,6 +8066,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -7866,6 +8089,7 @@ const char* UNPARSED_CONFIGS[] = { " \"valid-lifetime\": 4000\n" " },\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 6,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -7873,6 +8097,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -7898,6 +8123,7 @@ const char* UNPARSED_CONFIGS[] = { " \"valid-lifetime\": 4000\n" " },\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 7,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -7905,6 +8131,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -7936,6 +8163,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 43 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -7992,6 +8220,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -8019,6 +8248,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 1,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -8026,6 +8256,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -8051,6 +8282,7 @@ const char* UNPARSED_CONFIGS[] = { " \"valid-lifetime\": 4000\n" " },\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 2,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -8058,6 +8290,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -8086,6 +8319,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 44 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -8142,6 +8376,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"23\", \"37\", \"65\" ],\n" @@ -8174,6 +8409,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 45 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -8230,6 +8466,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3600,\n" " \"relay-supplied-options\": [ \"65\" ],\n" " \"reservations-global\": false,\n" @@ -8260,6 +8497,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 46 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -8316,6 +8554,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3600,\n" " \"relay-supplied-options\": [ \"65\" ],\n" " \"reservations-global\": false,\n" @@ -8346,6 +8585,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 47 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -8402,6 +8642,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3600,\n" " \"relay-supplied-options\": [ \"65\" ],\n" " \"reservations-global\": false,\n" @@ -8432,6 +8673,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 48 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -8488,6 +8730,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3600,\n" " \"relay-supplied-options\": [ \"65\" ],\n" " \"reservations-global\": false,\n" @@ -8518,6 +8761,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 49 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"client-classes\": [\n" " {\n" @@ -8588,6 +8832,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -8615,6 +8860,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 1,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -8622,6 +8868,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -8650,6 +8897,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 50 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -8706,6 +8954,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -8733,6 +8982,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 1,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -8740,6 +8990,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -8768,6 +9019,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 51 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -8824,6 +9076,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -8851,6 +9104,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 1,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -8858,6 +9112,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -8887,6 +9142,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 52 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -8943,6 +9199,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -8970,6 +9227,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 1,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -8977,6 +9235,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -9011,6 +9270,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 53 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -9067,6 +9327,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -9094,6 +9355,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 1,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -9101,6 +9363,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -9135,6 +9398,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 54 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -9191,6 +9455,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -9218,6 +9483,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 1,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -9225,6 +9491,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [\n" " {\n" " \"delegated-len\": 64,\n" @@ -9255,6 +9522,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 55 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -9311,6 +9579,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -9338,6 +9607,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 1,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -9345,6 +9615,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [\n" " {\n" " \"delegated-len\": 64,\n" @@ -9376,6 +9647,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 56 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -9432,6 +9704,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -9459,6 +9732,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 1,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -9466,6 +9740,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [\n" " {\n" " \"delegated-len\": 64,\n" @@ -9502,6 +9777,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 57 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -9572,6 +9848,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -9604,6 +9881,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 58 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"client-classes\": [\n" " {\n" @@ -9720,6 +9998,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n" " ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3600,\n" " \"relay-supplied-options\": [ \"65\" ],\n" " \"reservations-global\": false,\n" @@ -9759,6 +10038,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 100,\n" " \"max-preferred-lifetime\": 3600,\n" @@ -9766,6 +10046,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3600,\n" " \"min-valid-lifetime\": 7200,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [\n" " {\n" " \"delegated-len\": 64,\n" @@ -9846,6 +10127,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 59 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -9902,6 +10184,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -9981,6 +10264,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 123,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -9988,6 +10272,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" @@ -10010,6 +10295,7 @@ const char* UNPARSED_CONFIGS[] = { " \"valid-lifetime\": 4000\n" " },\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 234,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -10017,6 +10303,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [ ],\n" " \"preferred-lifetime\": 3000,\n" @@ -10034,6 +10321,7 @@ const char* UNPARSED_CONFIGS[] = { " \"valid-lifetime\": 4000\n" " },\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 542,\n" " \"max-preferred-lifetime\": 3000,\n" @@ -10041,6 +10329,7 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3000,\n" " \"min-valid-lifetime\": 4000,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [ ],\n" " \"preferred-lifetime\": 3000,\n" @@ -10064,6 +10353,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 60 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -10120,6 +10410,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3000,\n" " \"rebind-timer\": 2000,\n" " \"relay-supplied-options\": [ \"65\" ],\n" @@ -10152,6 +10443,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 61 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -10208,6 +10500,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3600,\n" " \"relay-supplied-options\": [ \"65\" ],\n" " \"reservations-global\": false,\n" @@ -10238,6 +10531,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 62 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"ddns-generated-prefix\": \"myhost\",\n" " \"ddns-override-client-update\": false,\n" @@ -10294,6 +10588,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3600,\n" " \"relay-supplied-options\": [ \"65\" ],\n" " \"reservations-global\": false,\n" @@ -10324,6 +10619,7 @@ const char* UNPARSED_CONFIGS[] = { " }\n", // CONFIGURATION 63 "{\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"client-classes\": [\n" " {\n" @@ -10396,6 +10692,7 @@ const char* UNPARSED_CONFIGS[] = { " \"option-data\": [ ],\n" " \"option-def\": [ ],\n" " \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" " \"preferred-lifetime\": 3600,\n" " \"relay-supplied-options\": [ \"65\" ],\n" " \"reservations-global\": false,\n" @@ -10421,6 +10718,7 @@ const char* UNPARSED_CONFIGS[] = { " \"store-extended-info\": false,\n" " \"subnet6\": [\n" " {\n" +" \"allocator\": \"iterative\",\n" " \"calculate-tee-times\": true,\n" " \"id\": 1,\n" " \"max-preferred-lifetime\": 3600,\n" @@ -10428,6 +10726,143 @@ const char* UNPARSED_CONFIGS[] = { " \"min-preferred-lifetime\": 3600,\n" " \"min-valid-lifetime\": 7200,\n" " \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" +" \"pd-pools\": [ ],\n" +" \"pools\": [\n" +" {\n" +" \"option-data\": [ ],\n" +" \"pool\": \"2001:db8:1::1-2001:db8:1::ffff\"\n" +" }\n" +" ],\n" +" \"preferred-lifetime\": 3600,\n" +" \"rapid-commit\": false,\n" +" \"relay\": {\n" +" \"ip-addresses\": [ ]\n" +" },\n" +" \"reservations\": [ ],\n" +" \"store-extended-info\": false,\n" +" \"subnet\": \"2001:db8:1::/64\",\n" +" \"t1-percent\": 0.5,\n" +" \"t2-percent\": 0.8,\n" +" \"valid-lifetime\": 7200\n" +" }\n" +" ],\n" +" \"t1-percent\": 0.5,\n" +" \"t2-percent\": 0.8,\n" +" \"valid-lifetime\": 7200\n" +" }\n", + // CONFIGURATION 64 +"{\n" +" \"allocator\": \"iterative\",\n" +" \"calculate-tee-times\": true,\n" +" \"client-classes\": [\n" +" {\n" +" \"max-preferred-lifetime\": 6000,\n" +" \"max-valid-lifetime\": 3000,\n" +" \"min-preferred-lifetime\": 4000,\n" +" \"min-valid-lifetime\": 1000,\n" +" \"name\": \"one\",\n" +" \"option-data\": [ ],\n" +" \"preferred-lifetime\": 5000,\n" +" \"template-test\": \"''\",\n" +" \"valid-lifetime\": 2000\n" +" },\n" +" {\n" +" \"name\": \"two\",\n" +" \"option-data\": [ ],\n" +" \"template-test\": \"''\"\n" +" }\n" +" ],\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-update-on-renew\": false,\n" +" \"ddns-use-conflict-resolution\": true,\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-ring6\"\n" +" },\n" +" \"dhcp4o6-port\": 0,\n" +" \"early-global-reservations-lookup\": false,\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\" ],\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" +" \"mac-sources\": [ \"any\" ],\n" +" \"multi-threading\": {\n" +" \"enable-multi-threading\": false,\n" +" \"packet-queue-size\": 64,\n" +" \"thread-pool-size\": 0\n" +" },\n" +" \"option-data\": [ ],\n" +" \"option-def\": [ ],\n" +" \"parked-packet-limit\": 256,\n" +" \"pd-allocator\": \"iterative\",\n" +" \"preferred-lifetime\": 3600,\n" +" \"relay-supplied-options\": [ \"65\" ],\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-id\": {\n" +" \"enterprise-id\": 0,\n" +" \"htype\": 0,\n" +" \"identifier\": \"\",\n" +" \"persist\": true,\n" +" \"time\": 0,\n" +" \"type\": \"LLT\"\n" +" },\n" +" \"server-tag\": \"\",\n" +" \"shared-networks\": [ ],\n" +" \"statistic-default-sample-age\": 0,\n" +" \"statistic-default-sample-count\": 20,\n" +" \"store-extended-info\": false,\n" +" \"subnet6\": [\n" +" {\n" +" \"allocator\": \"iterative\",\n" +" \"calculate-tee-times\": true,\n" +" \"id\": 1,\n" +" \"max-preferred-lifetime\": 3600,\n" +" \"max-valid-lifetime\": 7200,\n" +" \"min-preferred-lifetime\": 3600,\n" +" \"min-valid-lifetime\": 7200,\n" +" \"option-data\": [ ],\n" +" \"pd-allocator\": \"iterative\",\n" " \"pd-pools\": [ ],\n" " \"pools\": [\n" " {\n" diff --git a/src/bin/dhcp6/tests/sarr_unittest.cc b/src/bin/dhcp6/tests/sarr_unittest.cc index cd485eed93..e2a0470608 100644 --- a/src/bin/dhcp6/tests/sarr_unittest.cc +++ b/src/bin/dhcp6/tests/sarr_unittest.cc @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2020 Internet Systems Consortium, Inc. ("ISC") +// Copyright (C) 2014-2022 Internet Systems Consortium, Inc. ("ISC") // // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this @@ -14,6 +14,8 @@ #include #include #include +#include +#include using namespace isc; using namespace isc::asiolink; @@ -60,6 +62,17 @@ namespace { /// - The reservations-in-subnet and reservations-out-of-pool flags are set to /// true to test that only out of pool reservations are honored. /// +/// - Configuration 5: +/// - Selects random allocator for addresses. +/// - One subnet with three distinct pools. +/// - Random allocator enabled globally for addresses. +/// - Iterative allocator for prefix delegation. +/// +/// - Configuration 6: +/// - Selects random allocator for delegated prefixes. +/// - One subnet with three distinct pools. +/// - Random allocator enabled globally for delegated prefixes. +/// - Iterative allocator for address allocation. const char* CONFIGS[] = { // Configuration 0 "{ \"interfaces-config\": {" @@ -214,7 +227,65 @@ const char* CONFIGS[] = { " }" " ]" "} ]" - "}" + "}", + + // Configuration 5 + "{ \"interfaces-config\": {" + " \"interfaces\": [ \"*\" ]" + "}," + "\"allocator\": \"random\"," + "\"pd-allocator\": \"iterative\"," + "\"preferred-lifetime\": 3000," + "\"rebind-timer\": 2000, " + "\"renew-timer\": 1000, " + "\"subnet6\": [" + " {" + " \"pools\": [" + " {" + " \"pool\": \"3000::20 - 3000::60\"" + " }" + " ]," + " \"pd-pools\": [" + " {" + " \"prefix\": \"2001:db8:3::\", " + " \"prefix-len\": 48, " + " \"delegated-len\": 64" + " }" + " ]," + " \"subnet\": \"3000::/32\", " + " \"interface\": \"eth0\"" + " }" + "]," + "\"valid-lifetime\": 4000 }", + + // Configuration 6 + "{ \"interfaces-config\": {" + " \"interfaces\": [ \"*\" ]" + "}," + "\"allocator\": \"iterative\"," + "\"pd-allocator\": \"random\"," + "\"preferred-lifetime\": 3000," + "\"rebind-timer\": 2000, " + "\"renew-timer\": 1000, " + "\"subnet6\": [" + " {" + " \"pools\": [" + " {" + " \"pool\": \"3000::20 - 3000::60\"" + " }" + " ]," + " \"pd-pools\": [" + " {" + " \"prefix\": \"2001:db8:3::\", " + " \"prefix-len\": 48, " + " \"delegated-len\": 64" + " }" + " ]," + " \"subnet\": \"3000::/32\", " + " \"interface\": \"eth0\"" + " }" + "]," + "\"valid-lifetime\": 4000 }", }; /// @brief Test fixture class for testing 4-way exchange: Solicit-Advertise, @@ -299,6 +370,14 @@ public: /// reservations-out-of-pool flag is set to true. void reservationIgnoredInOutOfPoolMode(); + /// @brief This test verifies that random allocator is used according + /// to the configuration and it allocates random addresses. + void randomAddressAllocation(); + + /// @brief This test verifies that random allocator is used according + /// to the configuration and it allocates random prefixes. + void randomPrefixAllocation(); + /// @brief Interface Manager's fake configuration control. IfaceMgrTestConfig iface_mgr_test_config_; }; @@ -873,4 +952,145 @@ TEST_F(SARRTest, reservationIgnoredInOutOfPoolModeMultiThreading) { reservationIgnoredInOutOfPoolMode(); } +void +SARRTest::randomAddressAllocation() { + // Create the base client and server configuration. + Dhcp6Client client; + configure(CONFIGS[5], *client.getServer()); + + // Record what addresses have been allocated and in what order. + std::set allocated_na_set; + std::vector allocated_na_vector; + std::set allocated_pd_set; + std::vector allocated_pd_vector; + // Simulate allocations from different clients. + for (auto i = 0; i < 30; ++i) { + // Create a client from the base client. + Dhcp6Client next_client(client.getServer()); + next_client.requestAddress(); + next_client.requestPrefix(); + // Run 4-way exchange. + ASSERT_NO_THROW(next_client.doSARR()); + // We should have one IA_NA and one IA_PD. + auto leases_na = next_client.getLeasesByType(Lease::TYPE_NA); + ASSERT_EQ(1, leases_na.size()); + auto leases_pd = next_client.getLeasesByType(Lease::TYPE_PD); + ASSERT_EQ(1, leases_pd.size()); + // Remember allocated address and delegated prefix uniqueness + // and order. + allocated_na_set.insert(leases_na[0].toText()); + allocated_na_vector.push_back(leases_na[0].addr_); + allocated_pd_set.insert(leases_pd[0].toText()); + allocated_pd_vector.push_back(leases_pd[0].addr_); + } + // Make sure that we have 30 distinct allocations for each lease type. + ASSERT_EQ(30, allocated_na_set.size()); + ASSERT_EQ(30, allocated_na_vector.size()); + ASSERT_EQ(30, allocated_pd_set.size()); + ASSERT_EQ(30, allocated_pd_vector.size()); + + // Make sure that the addresses are not allocated iteratively. + int consecutives = 0; + for (auto i = 1; i < allocated_na_vector.size(); ++i) { + // Record the cases when the previously allocated address is + // lower by 1 (iterative allocation). Some cases like this are + // possible even with the random allocation but they should be + // very rare. + if (IOAddress::increase(allocated_na_vector[i-1]) == allocated_na_vector[i]) { + ++consecutives; + } + } + EXPECT_LT(consecutives, 10); + + // Make sure that delegated prefixes have been allocated iteratively. + consecutives = 0; + for (auto i = 1; i < allocated_pd_vector.size(); ++i) { + if (IOAddress::subtract(allocated_pd_vector[i], allocated_pd_vector[i-1]) == IOAddress("0:0:0:1::")) { + ++consecutives; + } + } + EXPECT_EQ(29, consecutives); +} + +TEST_F(SARRTest, randomAddressAllocation) { + Dhcpv6SrvMTTestGuard guard(*this, false); + randomAddressAllocation(); +} + +TEST_F(SARRTest, randomAddressAllocationMultiThreading) { + Dhcpv6SrvMTTestGuard guard(*this, true); + randomAddressAllocation(); +} + +void +SARRTest::randomPrefixAllocation() { + // Create the base client and server configuration. + Dhcp6Client client; + configure(CONFIGS[6], *client.getServer()); + + // Record what addresses have been allocated and in what order. + std::set allocated_na_set; + std::vector allocated_na_vector; + std::set allocated_pd_set; + std::vector allocated_pd_vector; + // Simulate allocations from different clients. + for (auto i = 0; i < 30; ++i) { + // Create a client from the base client. + Dhcp6Client next_client(client.getServer()); + next_client.requestAddress(); + next_client.requestPrefix(); + // Run 4-way exchange. + ASSERT_NO_THROW(next_client.doSARR()); + // We should have one IA_NA and one IA_PD. + auto leases_na = next_client.getLeasesByType(Lease::TYPE_NA); + ASSERT_EQ(1, leases_na.size()); + auto leases_pd = next_client.getLeasesByType(Lease::TYPE_PD); + ASSERT_EQ(1, leases_pd.size()); + // Remember allocated address and delegated prefix uniqueness + // and order. + allocated_na_set.insert(leases_na[0].toText()); + allocated_na_vector.push_back(leases_na[0].addr_); + allocated_pd_set.insert(leases_pd[0].toText()); + allocated_pd_vector.push_back(leases_pd[0].addr_); + } + // Make sure that we have 30 distinct allocations for each lease type. + ASSERT_EQ(30, allocated_na_set.size()); + ASSERT_EQ(30, allocated_na_vector.size()); + ASSERT_EQ(30, allocated_pd_set.size()); + ASSERT_EQ(30, allocated_pd_vector.size()); + + // Make sure that the addresses have been allocated iteratively. + int consecutives = 0; + for (auto i = 1; i < allocated_na_vector.size(); ++i) { + // Record the cases when the previously allocated address is + // lower by 1 (iterative allocation). + if (IOAddress::increase(allocated_na_vector[i-1]) == allocated_na_vector[i]) { + ++consecutives; + } + } + + // Make sure that addresses have been allocated iteratively. + EXPECT_EQ(29, consecutives); + + // Make sure that delegated prefixes have been allocated randomly. + consecutives = 0; + for (auto i = 1; i < allocated_pd_vector.size(); ++i) { + if (IOAddress::subtract(allocated_pd_vector[i], allocated_pd_vector[i-1]) == IOAddress("0:0:0:1::")) { + ++consecutives; + } + } + EXPECT_LT(consecutives, 10); +} + +TEST_F(SARRTest, randomPrefixAllocation) { + Dhcpv6SrvMTTestGuard guard(*this, false); + randomPrefixAllocation(); +} + +TEST_F(SARRTest, randomPrefixAllocationMultiThreading) { + Dhcpv6SrvMTTestGuard guard(*this, true); + randomPrefixAllocation(); +} + + } // end of anonymous namespace diff --git a/src/lib/dhcpsrv/allocation_state.cc b/src/lib/dhcpsrv/allocation_state.cc index 1b8b5a18b9..dfb98c12b0 100644 --- a/src/lib/dhcpsrv/allocation_state.cc +++ b/src/lib/dhcpsrv/allocation_state.cc @@ -16,34 +16,18 @@ namespace dhcp { SubnetAllocationState::SubnetAllocationState() : AllocationState(), mutex_(new std::mutex) { - // Initialize timestamps for each lease type to negative infinity. - last_allocated_time_[Lease::TYPE_V4] = boost::posix_time::neg_infin; - last_allocated_time_[Lease::TYPE_NA] = boost::posix_time::neg_infin; - last_allocated_time_[Lease::TYPE_TA] = boost::posix_time::neg_infin; - last_allocated_time_[Lease::TYPE_PD] = boost::posix_time::neg_infin; + last_allocated_time_ = boost::posix_time::neg_infin; } boost::posix_time::ptime -SubnetAllocationState::getLastAllocatedTime(Lease::Type type) const { +SubnetAllocationState::getLastAllocatedTime() const { MultiThreadingLock lock(*mutex_); - return (getLastAllocatedTimeInternal(type)); -} - -boost::posix_time::ptime -SubnetAllocationState::getLastAllocatedTimeInternal(Lease::Type type) const { - auto t = last_allocated_time_.find(type); - if (t != last_allocated_time_.end()) { - return (t->second); - } - - // This shouldn't happen, because we have initialized the structure - // for all lease types. - return (boost::posix_time::neg_infin); + return (last_allocated_time_); } void -SubnetAllocationState::setCurrentAllocatedTimeInternal(Lease::Type type) { - last_allocated_time_[type] = boost::posix_time::microsec_clock::universal_time(); +SubnetAllocationState::setCurrentAllocatedTimeInternal() { + last_allocated_time_ = boost::posix_time::microsec_clock::universal_time(); } } diff --git a/src/lib/dhcpsrv/allocation_state.h b/src/lib/dhcpsrv/allocation_state.h index c2890686b5..93231476f4 100644 --- a/src/lib/dhcpsrv/allocation_state.h +++ b/src/lib/dhcpsrv/allocation_state.h @@ -55,46 +55,26 @@ public: /// @brief Returns last allocation time for the specified lease type. /// - /// @param type specifies a lease type for which the last allocation - /// time should be returned. /// @return Last allocation time for the lease type or /// @c boost::posix_time::neg_infin when no leases have been allocated /// from this subnet yet. boost::posix_time::ptime - getLastAllocatedTime(Lease::Type type) const; + getLastAllocatedTime() const; protected: - /// @brief Sets the last allocation time to current for a lease type. + /// @brief Sets the last allocation time to current. /// /// This function should be called by derived classes. It should be /// called in the thread-safe context. - /// - /// @param type specifies a lease type for which the last allocation - /// time should be set to the current time. - void setCurrentAllocatedTimeInternal(Lease::Type type); - - /// @brief Returns the last allocation time of a specified lease type. - /// - /// It should be called in a thread safe context. - /// - /// @param lease_type Lease type for which last allocation timestamp should - /// be returned. - /// - /// @return time when a lease of a specified type has been allocated from - /// this subnet. The negative infinity time is returned if a lease type is - /// not recognized (which is unlikely). - boost::posix_time::ptime - getLastAllocatedTimeInternal(Lease::Type type) const; + void setCurrentAllocatedTimeInternal(); /// @brief Mutex used for thread-safe access to the state members. boost::scoped_ptr mutex_; - /// @brief Timestamp indicating when a lease of a specified type has been - /// last allocated from the subnet. - /// - /// @note: This map is protected by the mutex. - std::map last_allocated_time_; + /// @brief Timestamp indicating when a lease has been last allocated + /// from the subnet. + boost::posix_time::ptime last_allocated_time_; }; typedef boost::shared_ptr SubnetAllocationStatePtr; diff --git a/src/lib/dhcpsrv/cfg_globals.cc b/src/lib/dhcpsrv/cfg_globals.cc index 1b66050a6b..990557e626 100644 --- a/src/lib/dhcpsrv/cfg_globals.cc +++ b/src/lib/dhcpsrv/cfg_globals.cc @@ -50,6 +50,7 @@ CfgGlobals::nameToIndex = { { "ddns-update-on-renew", DDNS_UPDATE_ON_RENEW }, { "ddns-use-conflict-resolution", DDNS_USE_CONFLICT_RESOLUTION }, { "parked-packet-limit", PARKED_PACKET_LIMIT }, + { "allocator", ALLOCATOR }, // DHCPv4 specific parameters. { "echo-client-id", ECHO_CLIENT_ID }, @@ -58,13 +59,13 @@ CfgGlobals::nameToIndex = { { "next-server", NEXT_SERVER }, { "server-hostname", SERVER_HOSTNAME }, { "boot-file-name", BOOT_FILE_NAME }, - { "allocator", ALLOCATOR }, // DHCPv6 specific parameters. { "data-directory", DATA_DIRECTORY }, { "preferred-lifetime", PREFERRED_LIFETIME }, { "min-preferred-lifetime", MIN_PREFERRED_LIFETIME }, - { "max-preferred-lifetime", MAX_PREFERRED_LIFETIME } + { "max-preferred-lifetime", MAX_PREFERRED_LIFETIME }, + { "pd-allocator", PD_ALLOCATOR } }; // Load time sanity check. diff --git a/src/lib/dhcpsrv/cfg_globals.h b/src/lib/dhcpsrv/cfg_globals.h index c453425758..d9dcb02c76 100644 --- a/src/lib/dhcpsrv/cfg_globals.h +++ b/src/lib/dhcpsrv/cfg_globals.h @@ -73,6 +73,7 @@ public: DDNS_UPDATE_ON_RENEW, DDNS_USE_CONFLICT_RESOLUTION, PARKED_PACKET_LIMIT, + ALLOCATOR, // DHCPv4 specific parameters. ECHO_CLIENT_ID, @@ -81,13 +82,13 @@ public: NEXT_SERVER, SERVER_HOSTNAME, BOOT_FILE_NAME, - ALLOCATOR, // DHCPv6 specific parameters. DATA_DIRECTORY, PREFERRED_LIFETIME, MIN_PREFERRED_LIFETIME, MAX_PREFERRED_LIFETIME, + PD_ALLOCATOR, // Size sentinel. SIZE diff --git a/src/lib/dhcpsrv/iterative_allocation_state.cc b/src/lib/dhcpsrv/iterative_allocation_state.cc index 098973f162..0f1920281e 100644 --- a/src/lib/dhcpsrv/iterative_allocation_state.cc +++ b/src/lib/dhcpsrv/iterative_allocation_state.cc @@ -26,47 +26,21 @@ SubnetIterativeAllocationState::create(const SubnetPtr& subnet) { SubnetIterativeAllocationState::SubnetIterativeAllocationState(const IOAddress& prefix, const uint8_t prefix_length) : SubnetAllocationState(), - last_allocated_address_(lastAddrInPrefix(prefix, prefix_length)), - last_allocated_ta_(lastAddrInPrefix(prefix, prefix_length)), - last_allocated_pd_(lastAddrInPrefix(prefix, prefix_length)) { + last_allocated_(lastAddrInPrefix(prefix, prefix_length)) { } IOAddress -SubnetIterativeAllocationState::getLastAllocated(Lease::Type type) const { +SubnetIterativeAllocationState::getLastAllocated() const { MultiThreadingLock lock(*mutex_); - switch (type) { - case Lease::TYPE_V4: - case Lease::TYPE_NA: - return (last_allocated_address_); - case Lease::TYPE_TA: - return (last_allocated_ta_); - case Lease::TYPE_PD: - return (last_allocated_pd_); - default: - isc_throw(BadValue, "pool type " << type << " not supported"); - } + return (last_allocated_); } void -SubnetIterativeAllocationState::setLastAllocated(Lease::Type type, const IOAddress& address) { +SubnetIterativeAllocationState::setLastAllocated(const IOAddress& address) { MultiThreadingLock lock(*mutex_); - switch (type) { - case Lease::TYPE_V4: - case Lease::TYPE_NA: - last_allocated_address_ = address; - break; - case Lease::TYPE_TA: - last_allocated_ta_ = address; - break; - case Lease::TYPE_PD: - last_allocated_pd_ = address; - break; - default: - isc_throw(BadValue, "pool type " << type << " not supported"); - } - - // Update the timestamp of last allocation. - setCurrentAllocatedTimeInternal(type); + last_allocated_ = address; + // Update the timestamp of the last allocation. + setCurrentAllocatedTimeInternal(); } PoolIterativeAllocationStatePtr diff --git a/src/lib/dhcpsrv/iterative_allocation_state.h b/src/lib/dhcpsrv/iterative_allocation_state.h index 278c09fed3..2ff9aa0bad 100644 --- a/src/lib/dhcpsrv/iterative_allocation_state.h +++ b/src/lib/dhcpsrv/iterative_allocation_state.h @@ -49,37 +49,26 @@ public: /// @brief Returns last allocated address or prefix. /// - /// @param type type of the last allocated lease to be returned. - /// @return last allocated address or prefix of a given type. - asiolink::IOAddress getLastAllocated(Lease::Type type) const; + /// @return last allocated address or prefix. + asiolink::IOAddress getLastAllocated() const; /// @brief Sets last allocated address or prefix. /// - /// @param type type of the last allocated lease set. /// @param address an address or prefix last allocated. - void setLastAllocated(Lease::Type type, const asiolink::IOAddress& address); + void setLastAllocated(const asiolink::IOAddress& address); private: - /// @brief Last allocated address. + /// @brief Last allocated address or delegated prefix. /// - /// This is the last allocated address that was previously allocated from - /// the particular subnet. It should be noted that although the value - /// is usually correct, there are cases when it is invalid, e.g. after - /// removing a pool, restarting or changing allocation algorithms. For - /// that purpose it should be only considered a help that should not be - /// fully trusted. - asiolink::IOAddress last_allocated_address_; - - /// @brief Last allocated temporary address. - /// - /// See @ref last_allocated_address_ for details. - asiolink::IOAddress last_allocated_ta_; - - /// @brief Last allocated IPv6 prefix. - /// - /// See @ref last_allocated_address_ for details. - asiolink::IOAddress last_allocated_pd_; + /// This is the last allocated address or delegated prefix that was + /// previously allocated from the particular subnet. It should be + /// noted that although the value is usually correct, there are + /// cases when it is invalid, e.g. after removing a pool, + /// restarting or changing allocation algorithms. For that purpose + /// it should be only considered a help that should not be fully + /// trusted. + asiolink::IOAddress last_allocated_; }; /// @brief Forward declaration of the @c PoolIterativeAllocationState. diff --git a/src/lib/dhcpsrv/iterative_allocator.cc b/src/lib/dhcpsrv/iterative_allocator.cc index f000ddab3f..295fd5a629 100644 --- a/src/lib/dhcpsrv/iterative_allocator.cc +++ b/src/lib/dhcpsrv/iterative_allocator.cc @@ -97,7 +97,7 @@ IterativeAllocator::pickAddressInternal(const ClientClasses& client_classes, // Let's get the last allocated address. It is usually set correctly, // but there are times when it won't be (like after removing a pool or // perhaps restarting the server). - IOAddress last = getSubnetState()->getLastAllocated(pool_type_); + IOAddress last = getSubnetState()->getLastAllocated(); bool valid = true; bool retrying = false; @@ -156,7 +156,7 @@ IterativeAllocator::pickAddressInternal(const ClientClasses& client_classes, if (!valid && (last == (*it)->getFirstAddress())) { // Pool was (re)initialized getPoolState(*it)->setLastAllocated(last); - getSubnetState()->setLastAllocated(pool_type_, last); + getSubnetState()->setLastAllocated(last); return (last); } // still can be bogus @@ -186,7 +186,7 @@ IterativeAllocator::pickAddressInternal(const ClientClasses& client_classes, // the next one is in the pool as well, so we haven't hit // pool boundary yet getPoolState(*it)->setLastAllocated(next); - getSubnetState()->setLastAllocated(pool_type_, next); + getSubnetState()->setLastAllocated(next); return (next); } @@ -209,17 +209,17 @@ IterativeAllocator::pickAddressInternal(const ClientClasses& client_classes, // ok to access first element directly. We checked that pools is non-empty last = getPoolState(*first)->getLastAllocated(); getPoolState(*first)->setLastAllocated(last); - getSubnetState()->setLastAllocated(pool_type_, last); + getSubnetState()->setLastAllocated(last); return (last); } SubnetIterativeAllocationStatePtr IterativeAllocator::getSubnetState() const { auto subnet = subnet_.lock(); - if (!subnet->getAllocationState()) { - subnet->setAllocationState(SubnetIterativeAllocationState::create(subnet)); + if (!subnet->getAllocationState(pool_type_)) { + subnet->setAllocationState(pool_type_, SubnetIterativeAllocationState::create(subnet)); } - return (boost::dynamic_pointer_cast(subnet->getAllocationState())); + return (boost::dynamic_pointer_cast(subnet->getAllocationState(pool_type_))); } PoolIterativeAllocationStatePtr diff --git a/src/lib/dhcpsrv/network.cc b/src/lib/dhcpsrv/network.cc index 934c0178c0..aff321633a 100644 --- a/src/lib/dhcpsrv/network.cc +++ b/src/lib/dhcpsrv/network.cc @@ -368,6 +368,11 @@ Network6::toElement() const { map->set("rapid-commit", Element::create(rapid_commit_.get())); } + // Set pd-allocator + if (!pd_allocator_type_.unspecified()) { + map->set("pd-allocator", Element::create(pd_allocator_type_)); + } + return (map); } diff --git a/src/lib/dhcpsrv/network.h b/src/lib/dhcpsrv/network.h index 43f647bb33..adb799e88b 100644 --- a/src/lib/dhcpsrv/network.h +++ b/src/lib/dhcpsrv/network.h @@ -1400,6 +1400,28 @@ public: rapid_commit_ = rapid_commit; }; + /// @brief Returns allocator type for prefix delegation. + /// + /// @param inheritance inheritance mode to be used. + util::Optional + getPdAllocatorType(const Inheritance& inheritance = Inheritance::ALL) const { + return (getProperty(&Network6::getPdAllocatorType, + pd_allocator_type_, + inheritance, + CfgGlobals::PD_ALLOCATOR)); + } + + /// @brief Sets new allocator type for prefix delegation. + /// + /// It doesn't set the actual allocator instance. It merely remembers the + /// value specified in the configuration, so it can be output in the + /// @c toElement call. + /// + /// @param allocator_type new allocator type to use. + void setPdAllocatorType(const util::Optional& allocator_type) { + pd_allocator_type_ = allocator_type; + } + /// @brief Unparses network object. /// /// @return A pointer to unparsed network configuration. @@ -1419,6 +1441,9 @@ private: /// It's default value is false, which indicates that the Rapid /// Commit is disabled for the subnet. util::Optional rapid_commit_; + + /// @brief Allocator used for prefix delegation. + util::Optional pd_allocator_type_; }; } // end of namespace isc::dhcp diff --git a/src/lib/dhcpsrv/parsers/dhcp_parsers.cc b/src/lib/dhcpsrv/parsers/dhcp_parsers.cc index 10b01a1197..3b92002494 100644 --- a/src/lib/dhcpsrv/parsers/dhcp_parsers.cc +++ b/src/lib/dhcpsrv/parsers/dhcp_parsers.cc @@ -633,39 +633,22 @@ SubnetConfigParser::createSubnet(ConstElementPtr params) { // Call the subclass's method to instantiate the subnet initSubnet(params, addr, len); - std::string allocator_type = (params->contains("allocator") ? - getString(params, "allocator") : "iterative"); - subnet_->setAllocatorType(allocator_type); - if (allocator_type == "random") { - subnet_->setAllocator(Lease::TYPE_V4, - boost::make_shared - (Lease::TYPE_V4, subnet_)); - subnet_->setAllocationState(SubnetAllocationStatePtr()); - - } else if (allocator_type == "iterative") { - subnet_->setAllocator(Lease::TYPE_V4, - boost::make_shared - (Lease::TYPE_V4, subnet_)); - subnet_->setAllocationState(SubnetIterativeAllocationState::create(subnet_)); - - } else { - ConstElementPtr error = params->get("allocator"); - isc_throw(DhcpConfigError, "supported allocators are: iterative and random (" - << error->getPosition() << ")"); + std::string allocator_type = "iterative"; + if (params->contains("allocator")) { + allocator_type = getString(params, "allocator"); + if ((allocator_type != "iterative") && (allocator_type != "random")) { + ConstElementPtr error = params->get("allocator"); + isc_throw(DhcpConfigError, "supported allocators are: iterative and random (" + << error->getPosition() << ")"); + } } - + subnet_->setAllocatorType(allocator_type); // Add pools to it. for (PoolStorage::iterator it = pools_->begin(); it != pools_->end(); ++it) { try { - auto pool = *it; - if (allocator_type == "random") { - pool->setAllocationState(PoolRandomAllocationState::create(pool)); - } else { - pool->setAllocationState(PoolIterativeAllocationState::create(pool)); - } - subnet_->addPool(pool); + subnet_->addPool(*it); } catch (const BadValue& ex) { // addPool() can throw BadValue if the pool is overlapping or // is out of bounds for the subnet. @@ -749,6 +732,28 @@ Subnet4ConfigParser::parse(ConstElementPtr subnet) { } } + if (subnet_->getAllocatorType() == "random") { + subnet_->setAllocator(Lease::TYPE_V4, + boost::make_shared + (Lease::TYPE_V4, subnet_)); + subnet_->setAllocationState(Lease::TYPE_V4, SubnetAllocationStatePtr()); + + for (auto pool : *pools_) { + pool->setAllocationState(PoolRandomAllocationState::create(pool)); + } + + } else if (subnet_->getAllocatorType() == "iterative") { + subnet_->setAllocator(Lease::TYPE_V4, + boost::make_shared + (Lease::TYPE_V4, subnet_)); + subnet_->setAllocationState(Lease::TYPE_V4, SubnetIterativeAllocationState::create(subnet_)); + + for (auto pool : *pools_) { + pool->setAllocationState(PoolIterativeAllocationState::create(pool)); + } + + } + return (sn4ptr); } @@ -1256,6 +1261,72 @@ Subnet6ConfigParser::parse(ConstElementPtr subnet) { } } + std::string allocator_type = "iterative"; + if (subnet->contains("pd-allocator")) { + allocator_type = getString(subnet, "pd-allocator"); + if ((allocator_type != "iterative") && (allocator_type != "random")) { + ConstElementPtr error = subnet->get("pd-allocator"); + isc_throw(DhcpConfigError, "supported allocators are: iterative and random (" + << error->getPosition() << ")"); + } + } + sn6ptr->setPdAllocatorType(allocator_type); + + if (sn6ptr->getAllocatorType() == "random") { + sn6ptr->setAllocator(Lease::TYPE_NA, + boost::make_shared + (Lease::TYPE_NA, sn6ptr)); + sn6ptr->setAllocator(Lease::TYPE_TA, + boost::make_shared + (Lease::TYPE_TA, sn6ptr)); + sn6ptr->setAllocationState(Lease::TYPE_NA, SubnetAllocationStatePtr()); + sn6ptr->setAllocationState(Lease::TYPE_TA, SubnetAllocationStatePtr()); + + } else { + sn6ptr->setAllocator(Lease::TYPE_NA, + boost::make_shared + (Lease::TYPE_NA, sn6ptr)); + sn6ptr->setAllocator(Lease::TYPE_TA, + boost::make_shared + (Lease::TYPE_TA, sn6ptr)); + sn6ptr->setAllocationState(Lease::TYPE_NA, SubnetIterativeAllocationState::create(sn6ptr)); + sn6ptr->setAllocationState(Lease::TYPE_TA, SubnetIterativeAllocationState::create(sn6ptr)); + } + + if (sn6ptr->getPdAllocatorType() == "random") { + sn6ptr->setAllocator(Lease::TYPE_PD, + boost::make_shared + (Lease::TYPE_PD, sn6ptr)); + sn6ptr->setAllocationState(Lease::TYPE_PD, SubnetAllocationStatePtr()); + + } else { + sn6ptr->setAllocator(Lease::TYPE_PD, + boost::make_shared + (Lease::TYPE_PD, sn6ptr)); + sn6ptr->setAllocationState(Lease::TYPE_PD, SubnetIterativeAllocationState::create(sn6ptr)); + } + + for (auto pool : *pools_) { + switch (pool->getType()) { + case Lease::TYPE_V4: + case Lease::TYPE_NA: + case Lease::TYPE_TA: + if (sn6ptr->getAllocatorType() == "random") { + pool->setAllocationState(PoolRandomAllocationState::create(pool)); + } else { + pool->setAllocationState(PoolIterativeAllocationState::create(pool)); + } + break; + case Lease::TYPE_PD: + if (sn6ptr->getPdAllocatorType() == "random") { + pool->setAllocationState(PoolRandomAllocationState::create(pool)); + } else { + pool->setAllocationState(PoolIterativeAllocationState::create(pool)); + } + break; + } + } + return (sn6ptr); } diff --git a/src/lib/dhcpsrv/parsers/simple_parser4.cc b/src/lib/dhcpsrv/parsers/simple_parser4.cc index dcf0a3d7d4..f83e78e9f5 100644 --- a/src/lib/dhcpsrv/parsers/simple_parser4.cc +++ b/src/lib/dhcpsrv/parsers/simple_parser4.cc @@ -141,7 +141,7 @@ const SimpleDefaults SimpleParser4::GLOBAL4_DEFAULTS = { { "ddns-update-on-renew", Element::boolean, "false" }, { "ddns-use-conflict-resolution", Element::boolean, "true" }, { "parked-packet-limit", Element::integer, "256" }, - { "allocator", Element::string, "iterative" }, + { "allocator", Element::string, "iterative" }, }; /// @brief This table defines all option definition parameters. diff --git a/src/lib/dhcpsrv/parsers/simple_parser6.cc b/src/lib/dhcpsrv/parsers/simple_parser6.cc index 6ed05ff92d..276e24f011 100644 --- a/src/lib/dhcpsrv/parsers/simple_parser6.cc +++ b/src/lib/dhcpsrv/parsers/simple_parser6.cc @@ -100,6 +100,8 @@ const SimpleKeywords SimpleParser6::GLOBAL6_PARAMETERS = { { "ddns-use-conflict-resolution", Element::boolean }, { "compatibility", Element::map }, { "parked-packet-limit", Element::integer }, + { "allocator", Element::string }, + { "pd-allocator", Element::string } }; /// @brief This table defines default global values for DHCPv6 @@ -135,7 +137,9 @@ const SimpleDefaults SimpleParser6::GLOBAL6_DEFAULTS = { { "reservations-lookup-first", Element::boolean, "false" }, { "ddns-update-on-renew", Element::boolean, "false" }, { "ddns-use-conflict-resolution", Element::boolean, "true" }, - { "parked-packet-limit", Element::integer, "256" } + { "parked-packet-limit", Element::integer, "256" }, + { "allocator", Element::string, "iterative" }, + { "pd-allocator", Element::string, "iterative" } }; /// @brief This table defines all option definition parameters. @@ -243,7 +247,9 @@ const SimpleKeywords SimpleParser6::SUBNET6_PARAMETERS = { { "cache-threshold", Element::real }, { "cache-max-age", Element::integer }, { "ddns-update-on-renew", Element::boolean }, - { "ddns-use-conflict-resolution", Element::boolean } + { "ddns-use-conflict-resolution", Element::boolean }, + { "allocator", Element::string }, + { "pd-allocator", Element::string } }; /// @brief This table defines default values for each IPv6 subnet. @@ -296,7 +302,9 @@ const ParamsList SimpleParser6::INHERIT_TO_SUBNET6 = { "t2-percent", "store-extended-info", "cache-threshold", - "cache-max-age" + "cache-max-age", + "allocator", + "pd-allocator" }; /// @brief This table defines all pool parameters. @@ -378,7 +386,9 @@ const SimpleKeywords SimpleParser6::SHARED_NETWORK6_PARAMETERS = { { "cache-threshold", Element::real }, { "cache-max-age", Element::integer }, { "ddns-update-on-renew", Element::boolean }, - { "ddns-use-conflict-resolution", Element::boolean } + { "ddns-use-conflict-resolution", Element::boolean }, + { "allocator", Element::string }, + { "pd-allocator", Element::string } }; /// @brief This table defines default values for each IPv6 subnet. diff --git a/src/lib/dhcpsrv/shared_network.cc b/src/lib/dhcpsrv/shared_network.cc index 61e5e3aa15..4a36179e0c 100644 --- a/src/lib/dhcpsrv/shared_network.cc +++ b/src/lib/dhcpsrv/shared_network.cc @@ -307,16 +307,16 @@ public: if ((*s)->getClientClass().get() != selected_subnet->getClientClass().get()) { continue; } - auto current_subnet_state = (*s)->getAllocationState(); + auto current_subnet_state = (*s)->getAllocationState(lease_type); if (!current_subnet_state) { continue; } - auto selected_subnet_state = selected_subnet->getAllocationState(); + auto selected_subnet_state = selected_subnet->getAllocationState(lease_type); if (!selected_subnet_state) { continue; } - if (current_subnet_state->getLastAllocatedTime(lease_type) > - selected_subnet_state->getLastAllocatedTime(lease_type)) { + if (current_subnet_state->getLastAllocatedTime() > + selected_subnet_state->getLastAllocatedTime()) { preferred_subnet = (*s); } } diff --git a/src/lib/dhcpsrv/subnet.cc b/src/lib/dhcpsrv/subnet.cc index 0ca4a188e1..743b2ef81d 100644 --- a/src/lib/dhcpsrv/subnet.cc +++ b/src/lib/dhcpsrv/subnet.cc @@ -210,6 +210,8 @@ Subnet4::create(const IOAddress& prefix, uint8_t length, subnet->setAllocator(Lease::TYPE_V4, boost::make_shared (Lease::TYPE_V4, subnet)); + subnet->setAllocationState(Lease::TYPE_V4, + SubnetIterativeAllocationState::create(subnet)); return (subnet); } @@ -316,6 +318,22 @@ Subnet::setAllocator(Lease::Type type, const AllocatorPtr& allocator) { allocators_[type] = allocator; } +SubnetAllocationStatePtr +Subnet::getAllocationState(Lease::Type type) const { + auto state = allocation_states_.find(type); + + if (state == allocation_states_.end()) { + isc_throw(BadValue, "no allocation state initialized for pool type " + << Lease::typeToText(type)); + } + return (state->second); +} + +void +Subnet::setAllocationState(Lease::Type type, const SubnetAllocationStatePtr& allocation_state) { + allocation_states_[type] = allocation_state; +} + const PoolPtr Subnet::getPool(Lease::Type type, const isc::asiolink::IOAddress& hint, bool anypool /* true */) const { // check if the type is valid (and throw if it isn't) @@ -582,16 +600,24 @@ Subnet6::create(const IOAddress& prefix, uint8_t length, const SubnetID id) { Subnet6Ptr subnet = boost::make_shared (prefix, length, t1, t2, preferred_lifetime, valid_lifetime, id); + // IA_NA subnet->setAllocator(Lease::TYPE_NA, boost::make_shared (Lease::TYPE_NA, subnet)); + subnet->setAllocationState(Lease::TYPE_NA, + SubnetIterativeAllocationState::create(subnet)); + // IA_TA subnet->setAllocator(Lease::TYPE_TA, boost::make_shared (Lease::TYPE_TA, subnet)); + subnet->setAllocationState(Lease::TYPE_TA, + SubnetIterativeAllocationState::create(subnet)); + // IA_PD subnet->setAllocator(Lease::TYPE_PD, boost::make_shared (Lease::TYPE_PD, subnet)); - + subnet->setAllocationState(Lease::TYPE_PD, + SubnetIterativeAllocationState::create(subnet)); return (subnet); } diff --git a/src/lib/dhcpsrv/subnet.h b/src/lib/dhcpsrv/subnet.h index d1cba57c52..4199e955d0 100644 --- a/src/lib/dhcpsrv/subnet.h +++ b/src/lib/dhcpsrv/subnet.h @@ -290,17 +290,15 @@ public: /// /// The actual type of the state depends on the allocator type. /// + /// @param type lease type for which the allocation state is returned. /// @return allocation state. - SubnetAllocationStatePtr getAllocationState() const { - return (allocation_state_); - } + SubnetAllocationStatePtr getAllocationState(Lease::Type type) const; /// @brief Sets subnet-specific allocation state. /// + /// @param type lease type for which the allocation state is set. /// @param allocation_state allocation state instance. - void setAllocationState(const SubnetAllocationStatePtr& allocation_state) { - allocation_state_ = allocation_state; - } + void setAllocationState(Lease::Type type, const SubnetAllocationStatePtr& allocation_state); protected: @@ -423,14 +421,14 @@ protected: /// @brief a prefix length of the subnet. uint8_t prefix_len_; - /// @brief Holds subnet-specific allocation state. - SubnetAllocationStatePtr allocation_state_; - /// @brief Shared network name. std::string shared_network_name_; /// @brief Lease allocators used by the subnet. std::map allocators_; + + /// @brief Holds subnet-specific allocation state. + std::map allocation_states_; }; /// @brief A generic pointer to either Subnet4 or Subnet6 object diff --git a/src/lib/dhcpsrv/tests/allocation_state_unittest.cc b/src/lib/dhcpsrv/tests/allocation_state_unittest.cc index 157d3e2be2..03474c11d4 100644 --- a/src/lib/dhcpsrv/tests/allocation_state_unittest.cc +++ b/src/lib/dhcpsrv/tests/allocation_state_unittest.cc @@ -32,109 +32,45 @@ public: // Tests initialization of the SubnetAllocationState. TEST(SubnetAllocationState, constructor) { SubnetAllocationState state; - EXPECT_TRUE(state.getLastAllocatedTime(Lease::TYPE_V4).is_neg_infinity()); - EXPECT_TRUE(state.getLastAllocatedTime(Lease::TYPE_NA).is_neg_infinity()); - EXPECT_TRUE(state.getLastAllocatedTime(Lease::TYPE_TA).is_neg_infinity()); - EXPECT_TRUE(state.getLastAllocatedTime(Lease::TYPE_PD).is_neg_infinity()); + EXPECT_TRUE(state.getLastAllocatedTime().is_neg_infinity()); } -// Tests that the explicitly initialized allocation time can be retrieved -// for each lease type. +// Tests that the explicitly initialized allocation time can be retrieved. TEST(SubnetAllocationState, getLastAllocatedTime) { NakedSubnetAllocationState state; date gdate(greg_year(2002), greg_month(1), greg_day(20)); - time_duration tm_v4(22, 59, 59, 0); - ptime time_v4 = ptime(gdate, tm_v4); + time_duration t(22, 59, 59, 0); + ptime pt = ptime(gdate, t); - time_duration tm_na(12, 59, 59, 0); - ptime time_na = ptime(gdate, tm_na); + state.last_allocated_time_= pt; - time_duration tm_ta(14, 59, 59, 0); - ptime time_ta = ptime(gdate, tm_ta); - - time_duration tm_pd(16, 59, 59, 0); - ptime time_pd = ptime(gdate, tm_pd); - - state.last_allocated_time_[Lease::TYPE_V4] = time_v4; - state.last_allocated_time_[Lease::TYPE_NA] = time_na; - state.last_allocated_time_[Lease::TYPE_TA] = time_ta; - state.last_allocated_time_[Lease::TYPE_PD] = time_pd; - - EXPECT_EQ(time_v4, state.getLastAllocatedTime(Lease::TYPE_V4)); - EXPECT_EQ(time_na, state.getLastAllocatedTime(Lease::TYPE_NA)); - EXPECT_EQ(time_ta, state.getLastAllocatedTime(Lease::TYPE_TA)); - EXPECT_EQ(time_pd, state.getLastAllocatedTime(Lease::TYPE_PD)); + EXPECT_EQ(pt, state.getLastAllocatedTime()); } -// Tests that the explicitly initialized allocation time can be retrieved -// for each lease type. Multi threaded variant. +// Tests that the explicitly initialized allocation time can be retrieved. +// Multi threaded variant. TEST(SubnetAllocationState, getLastAllocatedTimeMultiThreading) { MultiThreadingTest mt(true); NakedSubnetAllocationState state; date gdate(greg_year(2002), greg_month(1), greg_day(20)); - time_duration tm_v4(22, 59, 59, 0); - ptime time_v4 = ptime(gdate, tm_v4); + time_duration t(22, 59, 59, 0); + ptime pt = ptime(gdate, t); - time_duration tm_na(12, 59, 59, 0); - ptime time_na = ptime(gdate, tm_na); + state.last_allocated_time_ = pt; - time_duration tm_ta(14, 59, 59, 0); - ptime time_ta = ptime(gdate, tm_ta); - - time_duration tm_pd(16, 59, 59, 0); - ptime time_pd = ptime(gdate, tm_pd); - - state.last_allocated_time_[Lease::TYPE_V4] = time_v4; - state.last_allocated_time_[Lease::TYPE_NA] = time_na; - state.last_allocated_time_[Lease::TYPE_TA] = time_ta; - state.last_allocated_time_[Lease::TYPE_PD] = time_pd; - - EXPECT_EQ(time_v4, state.getLastAllocatedTime(Lease::TYPE_V4)); - EXPECT_EQ(time_na, state.getLastAllocatedTime(Lease::TYPE_NA)); - EXPECT_EQ(time_ta, state.getLastAllocatedTime(Lease::TYPE_TA)); - EXPECT_EQ(time_pd, state.getLastAllocatedTime(Lease::TYPE_PD)); + EXPECT_EQ(pt, state.getLastAllocatedTime()); } -// Test that current allocation time is set for an IPv4 lease. -TEST(SubnetAllocationState, setCurrentAllocatedTimeV4) { +// Test that current allocation time is set. +TEST(SubnetAllocationState, setCurrentAllocatedTime) { NakedSubnetAllocationState state; - state.setCurrentAllocatedTimeInternal(Lease::TYPE_V4); - auto time_v4 = state.getLastAllocatedTime(Lease::TYPE_V4); - auto duration = time_v4 - microsec_clock::universal_time(); - EXPECT_LT(duration.seconds(), 10); -} - -// Test that current allocation time is set for an IPv6 address. -TEST(SubnetAllocationState, setCurrentAllocatedTimeNA) { - NakedSubnetAllocationState state; - - state.setCurrentAllocatedTimeInternal(Lease::TYPE_NA); - auto time_na = state.getLastAllocatedTime(Lease::TYPE_NA); - auto duration = time_na - microsec_clock::universal_time(); - EXPECT_LT(duration.seconds(), 10); -} - -// Test that current allocation time is set for an IPv6 temporary address. -TEST(SubnetAllocationState, setCurrentAllocatedTimeTA) { - NakedSubnetAllocationState state; - - state.setCurrentAllocatedTimeInternal(Lease::TYPE_TA); - auto time_ta = state.getLastAllocatedTime(Lease::TYPE_TA); - auto duration = time_ta - microsec_clock::universal_time(); - EXPECT_LT(duration.seconds(), 10); -} - -// Test that current allocation time is set for a delegated prefix. -TEST(SubnetAllocationState, setCurrentAllocatedTimePD) { - NakedSubnetAllocationState state; - - state.setCurrentAllocatedTimeInternal(Lease::TYPE_PD); - auto time_pd = state.getLastAllocatedTime(Lease::TYPE_PD); - auto duration = time_pd - microsec_clock::universal_time(); + state.setCurrentAllocatedTimeInternal(); + auto pt = state.getLastAllocatedTime(); + auto duration = pt - microsec_clock::universal_time(); EXPECT_LT(duration.seconds(), 10); } diff --git a/src/lib/dhcpsrv/tests/dhcp_parsers_unittest.cc b/src/lib/dhcpsrv/tests/dhcp_parsers_unittest.cc index 5eb0ac6ff1..b0e8a178ec 100644 --- a/src/lib/dhcpsrv/tests/dhcp_parsers_unittest.cc +++ b/src/lib/dhcpsrv/tests/dhcp_parsers_unittest.cc @@ -2804,7 +2804,7 @@ TEST_F(ParseConfigTest, defaultSubnet4) { EXPECT_TRUE(subnet->getDdnsUseConflictResolution().unspecified()); EXPECT_FALSE(subnet->getDdnsUseConflictResolution().get()); - EXPECT_TRUE(subnet->getAllocationState()); + EXPECT_TRUE(subnet->getAllocationState(Lease::TYPE_V4)); EXPECT_TRUE(subnet->getAllocator(Lease::TYPE_V4)); auto allocator = subnet->getAllocator(Lease::TYPE_V4); @@ -2902,10 +2902,9 @@ TEST_F(ParseConfigTest, defaultSubnet6) { EXPECT_TRUE(subnet->getDdnsUseConflictResolution().unspecified()); EXPECT_FALSE(subnet->getDdnsUseConflictResolution().get()); - EXPECT_TRUE(subnet->getAllocationState()); - EXPECT_TRUE(subnet->getAllocator(Lease::TYPE_NA)); - EXPECT_TRUE(subnet->getAllocator(Lease::TYPE_TA)); - EXPECT_TRUE(subnet->getAllocator(Lease::TYPE_PD)); + EXPECT_TRUE(subnet->getAllocationState(Lease::TYPE_NA)); + EXPECT_TRUE(subnet->getAllocationState(Lease::TYPE_TA)); + EXPECT_TRUE(subnet->getAllocationState(Lease::TYPE_PD)); auto allocator = subnet->getAllocator(Lease::TYPE_NA); EXPECT_TRUE(boost::dynamic_pointer_cast(allocator)); @@ -3091,6 +3090,12 @@ TEST_F(ParseConfigTest, defaultSharedNetwork6) { EXPECT_TRUE(network->getDdnsUseConflictResolution().unspecified()); EXPECT_FALSE(network->getDdnsUseConflictResolution().get()); + + EXPECT_TRUE(network->getAllocatorType().unspecified()); + EXPECT_TRUE(network->getAllocatorType().get().empty()); + + EXPECT_TRUE(network->getPdAllocatorType().unspecified()); + EXPECT_TRUE(network->getPdAllocatorType().get().empty()); } // This test verifies a negative value for the subnet ID is rejected (v4). diff --git a/src/lib/dhcpsrv/tests/iterative_allocation_state_unittest.cc b/src/lib/dhcpsrv/tests/iterative_allocation_state_unittest.cc index 8b0bd24356..6aa9a0177b 100644 --- a/src/lib/dhcpsrv/tests/iterative_allocation_state_unittest.cc +++ b/src/lib/dhcpsrv/tests/iterative_allocation_state_unittest.cc @@ -29,11 +29,11 @@ TEST(IterativeAllocationStateTest, subnetLastAllocated4) { auto state = SubnetIterativeAllocationState::create(subnet); // Check initial conditions (all should be set to the last address in range) - EXPECT_EQ(last.toText(), state->getLastAllocated(Lease::TYPE_V4).toText()); + EXPECT_EQ(last.toText(), state->getLastAllocated().toText()); - // Now set last allocated for IA - EXPECT_NO_THROW(state->setLastAllocated(Lease::TYPE_V4, addr)); - EXPECT_EQ(addr.toText(), state->getLastAllocated(Lease::TYPE_V4).toText()); + // Now set last allocated. + EXPECT_NO_THROW(state->setLastAllocated(addr)); + EXPECT_EQ(addr.toText(), state->getLastAllocated().toText()); } // Checks that the last allocated IPv4 address is remembered in the @@ -48,11 +48,11 @@ TEST(IterativeAllocationStateTest, subnetLastAllocated4MultiThreading) { auto state = SubnetIterativeAllocationState::create(subnet); // Check initial conditions (all should be set to the last address in range) - EXPECT_EQ(last.toText(), state->getLastAllocated(Lease::TYPE_V4).toText()); + EXPECT_EQ(last.toText(), state->getLastAllocated().toText()); - // Now set last allocated for IA - EXPECT_NO_THROW(state->setLastAllocated(Lease::TYPE_V4, addr)); - EXPECT_EQ(addr.toText(), state->getLastAllocated(Lease::TYPE_V4).toText()); + // Now set last allocated. + EXPECT_NO_THROW(state->setLastAllocated(addr)); + EXPECT_EQ(addr.toText(), state->getLastAllocated().toText()); } // Checks if last allocated address/prefix is stored/retrieved properly. @@ -63,29 +63,34 @@ TEST(IterativeAllocationStateTest, subnetLastAllocated6) { IOAddress last("2001:db8:1::ffff:ffff:ffff:ffff"); - auto subnet = boost::make_shared(IOAddress("2001:db8:1::"), 64, 1, 2, 3, 4); - auto state = SubnetIterativeAllocationState::create(subnet); + auto subnet = Subnet6::create(IOAddress("2001:db8:1::"), 64, 1, 2, 3, 4); + auto state_na = boost::dynamic_pointer_cast + (subnet->getAllocationState(Lease::TYPE_NA)); + auto state_ta = boost::dynamic_pointer_cast + (subnet->getAllocationState(Lease::TYPE_TA)); + auto state_pd = boost::dynamic_pointer_cast + (subnet->getAllocationState(Lease::TYPE_PD)); // Check initial conditions (all should be set to the last address in range) - EXPECT_EQ(last.toText(), state->getLastAllocated(Lease::TYPE_NA).toText()); - EXPECT_EQ(last.toText(), state->getLastAllocated(Lease::TYPE_TA).toText()); - EXPECT_EQ(last.toText(), state->getLastAllocated(Lease::TYPE_PD).toText()); + EXPECT_EQ(last.toText(), state_na->getLastAllocated().toText()); + EXPECT_EQ(last.toText(), state_ta->getLastAllocated().toText()); + EXPECT_EQ(last.toText(), state_pd->getLastAllocated().toText()); // Now set last allocated for IA - EXPECT_NO_THROW(state->setLastAllocated(Lease::TYPE_NA, na)); - EXPECT_EQ(na.toText(), state->getLastAllocated(Lease::TYPE_NA).toText()); + EXPECT_NO_THROW(state_na->setLastAllocated(na)); + EXPECT_EQ(na.toText(), state_na->getLastAllocated().toText()); // TA and PD should be unchanged - EXPECT_EQ(last.toText(), state->getLastAllocated(Lease::TYPE_TA).toText()); - EXPECT_EQ(last.toText(), state->getLastAllocated(Lease::TYPE_PD).toText()); + EXPECT_EQ(last.toText(), state_ta->getLastAllocated().toText()); + EXPECT_EQ(last.toText(), state_pd->getLastAllocated().toText()); // Now set TA and PD - EXPECT_NO_THROW(state->setLastAllocated(Lease::TYPE_TA, ta)); - EXPECT_NO_THROW(state->setLastAllocated(Lease::TYPE_PD, pd)); + EXPECT_NO_THROW(state_ta->setLastAllocated(ta)); + EXPECT_NO_THROW(state_pd->setLastAllocated(pd)); - EXPECT_EQ(na.toText(), state->getLastAllocated(Lease::TYPE_NA).toText()); - EXPECT_EQ(ta.toText(), state->getLastAllocated(Lease::TYPE_TA).toText()); - EXPECT_EQ(pd.toText(), state->getLastAllocated(Lease::TYPE_PD).toText()); + EXPECT_EQ(na.toText(), state_na->getLastAllocated().toText()); + EXPECT_EQ(ta.toText(), state_ta->getLastAllocated().toText()); + EXPECT_EQ(pd.toText(), state_pd->getLastAllocated().toText()); } // Checks if last allocated address/prefix is stored/retrieved properly when @@ -98,29 +103,34 @@ TEST(IterativeAllocationStateTest, subnetLastAllocated6MultiThreading) { IOAddress last("2001:db8:1::ffff:ffff:ffff:ffff"); - auto subnet = boost::make_shared(IOAddress("2001:db8:1::"), 64, 1, 2, 3, 4); - auto state = SubnetIterativeAllocationState::create(subnet); + auto subnet = Subnet6::create(IOAddress("2001:db8:1::"), 64, 1, 2, 3, 4); + auto state_na = boost::dynamic_pointer_cast + (subnet->getAllocationState(Lease::TYPE_NA)); + auto state_ta = boost::dynamic_pointer_cast + (subnet->getAllocationState(Lease::TYPE_TA)); + auto state_pd = boost::dynamic_pointer_cast + (subnet->getAllocationState(Lease::TYPE_PD)); // Check initial conditions (all should be set to the last address in range) - EXPECT_EQ(last.toText(), state->getLastAllocated(Lease::TYPE_NA).toText()); - EXPECT_EQ(last.toText(), state->getLastAllocated(Lease::TYPE_TA).toText()); - EXPECT_EQ(last.toText(), state->getLastAllocated(Lease::TYPE_PD).toText()); + EXPECT_EQ(last.toText(), state_na->getLastAllocated().toText()); + EXPECT_EQ(last.toText(), state_ta->getLastAllocated().toText()); + EXPECT_EQ(last.toText(), state_pd->getLastAllocated().toText()); // Now set last allocated for IA - EXPECT_NO_THROW(state->setLastAllocated(Lease::TYPE_NA, na)); - EXPECT_EQ(na.toText(), state->getLastAllocated(Lease::TYPE_NA).toText()); + EXPECT_NO_THROW(state_na->setLastAllocated(na)); + EXPECT_EQ(na.toText(), state_na->getLastAllocated().toText()); // TA and PD should be unchanged - EXPECT_EQ(last.toText(), state->getLastAllocated(Lease::TYPE_TA).toText()); - EXPECT_EQ(last.toText(), state->getLastAllocated(Lease::TYPE_PD).toText()); + EXPECT_EQ(last.toText(), state_ta->getLastAllocated().toText()); + EXPECT_EQ(last.toText(), state_pd->getLastAllocated().toText()); // Now set TA and PD - EXPECT_NO_THROW(state->setLastAllocated(Lease::TYPE_TA, ta)); - EXPECT_NO_THROW(state->setLastAllocated(Lease::TYPE_PD, pd)); + EXPECT_NO_THROW(state_ta->setLastAllocated(ta)); + EXPECT_NO_THROW(state_pd->setLastAllocated(pd)); - EXPECT_EQ(na.toText(), state->getLastAllocated(Lease::TYPE_NA).toText()); - EXPECT_EQ(ta.toText(), state->getLastAllocated(Lease::TYPE_TA).toText()); - EXPECT_EQ(pd.toText(), state->getLastAllocated(Lease::TYPE_PD).toText()); + EXPECT_EQ(na.toText(), state_na->getLastAllocated().toText()); + EXPECT_EQ(ta.toText(), state_ta->getLastAllocated().toText()); + EXPECT_EQ(pd.toText(), state_pd->getLastAllocated().toText()); } // Checks that last allocated IPv4 address is stored in the pool-specific diff --git a/src/lib/dhcpsrv/tests/iterative_allocator_unittest.cc b/src/lib/dhcpsrv/tests/iterative_allocator_unittest.cc index 09f12f2251..88e607a826 100644 --- a/src/lib/dhcpsrv/tests/iterative_allocator_unittest.cc +++ b/src/lib/dhcpsrv/tests/iterative_allocator_unittest.cc @@ -293,7 +293,7 @@ TEST_F(IterativeAllocatorTest6, addrStepOutClass) { // This test verifies that the allocator picks delegated prefixes from several // pools. TEST_F(IterativeAllocatorTest6, prefixStep) { - subnet_.reset(new Subnet6(IOAddress("2001:db8::"), 32, 1, 2, 3, 4)); + subnet_ = Subnet6::create(IOAddress("2001:db8::"), 32, 1, 2, 3, 4); Pool6Ptr pool1(new Pool6(Lease::TYPE_PD, IOAddress("2001:db8::"), 56, 60)); Pool6Ptr pool2(new Pool6(Lease::TYPE_PD, IOAddress("2001:db8:1::"), 48, 48)); @@ -372,7 +372,7 @@ TEST_F(IterativeAllocatorTest6, prefixStep) { // This test verifies that the allocator picks delegated prefixes from the pools // with class guards. TEST_F(IterativeAllocatorTest6, prefixStepInClass) { - subnet_.reset(new Subnet6(IOAddress("2001:db8::"), 32, 1, 2, 3, 4)); + subnet_ = Subnet6::create(IOAddress("2001:db8::"), 32, 1, 2, 3, 4); Pool6Ptr pool1(new Pool6(Lease::TYPE_PD, IOAddress("2001:db8::"), 56, 60)); Pool6Ptr pool2(new Pool6(Lease::TYPE_PD, IOAddress("2001:db8:1::"), 48, 48)); @@ -456,7 +456,7 @@ TEST_F(IterativeAllocatorTest6, prefixStepInClass) { // This test verifies that the allocator omits pools with non-matching client classes. TEST_F(IterativeAllocatorTest6, prefixStepOutClass) { - subnet_.reset(new Subnet6(IOAddress("2001:db8::"), 32, 1, 2, 3, 4)); + subnet_ = Subnet6::create(IOAddress("2001:db8::"), 32, 1, 2, 3, 4); Pool6Ptr pool1(new Pool6(Lease::TYPE_PD, IOAddress("2001:db8::"), 56, 60)); Pool6Ptr pool2(new Pool6(Lease::TYPE_PD, IOAddress("2001:db8:1::"), 48, 48)); diff --git a/src/lib/dhcpsrv/tests/network_unittest.cc b/src/lib/dhcpsrv/tests/network_unittest.cc index 9f649dc481..ef765c4f8e 100644 --- a/src/lib/dhcpsrv/tests/network_unittest.cc +++ b/src/lib/dhcpsrv/tests/network_unittest.cc @@ -378,6 +378,8 @@ TEST_F(NetworkTest, inheritanceSupport6) { globals_->set("store-extended-info", Element::create(true)); globals_->set("ddns-update-on-renew", Element::create(true)); globals_->set("ddns-use-conflict-resolution", Element::create(true)); + globals_->set("allocator", Element::create("random")); + globals_->set("pd-allocator", Element::create("random")); // For each parameter for which inheritance is supported run // the test that checks if the values are inherited properly. @@ -456,6 +458,18 @@ TEST_F(NetworkTest, inheritanceSupport6) { &Network6::setDdnsUseConflictResolution, false, true); } + { + SCOPED_TRACE("allocator"); + testNetworkInheritance(&Network6::getAllocatorType, + &Network6::setAllocatorType, + "iterative", "random"); + } + { + SCOPED_TRACE("pd-allocator"); + testNetworkInheritance(&Network6::getPdAllocatorType, + &Network6::setPdAllocatorType, + "iterative", "random"); + } // Interface-id requires special type of test. boost::shared_ptr net_child(new TestNetwork6()); diff --git a/src/lib/dhcpsrv/tests/shared_network_unittest.cc b/src/lib/dhcpsrv/tests/shared_network_unittest.cc index e039c6cb20..28c2bd53c5 100644 --- a/src/lib/dhcpsrv/tests/shared_network_unittest.cc +++ b/src/lib/dhcpsrv/tests/shared_network_unittest.cc @@ -390,24 +390,15 @@ TEST(SharedNetwork4Test, getPreferredSubnet) { SharedNetwork4Ptr network(new SharedNetwork4("frog")); // Create four subnets. - Subnet4Ptr subnet1(new Subnet4(IOAddress("10.0.0.0"), 8, 10, 20, 30, - SubnetID(1))); - Subnet4Ptr subnet2(new Subnet4(IOAddress("192.0.2.0"), 24, 10, 20, 30, - SubnetID(2))); - Subnet4Ptr subnet3(new Subnet4(IOAddress("172.16.25.0"), 24, 10, 20, 30, - SubnetID(3))); - Subnet4Ptr subnet4(new Subnet4(IOAddress("172.16.28.0"), 24, 10, 20, 30, - SubnetID(4))); + auto subnet1 = Subnet4::create(IOAddress("10.0.0.0"), 8, 10, 20, 30, + SubnetID(1)); + auto subnet2 = Subnet4::create(IOAddress("192.0.2.0"), 24, 10, 20, 30, + SubnetID(2)); + auto subnet3 = Subnet4::create(IOAddress("172.16.25.0"), 24, 10, 20, 30, + SubnetID(3)); + auto subnet4 = Subnet4::create(IOAddress("172.16.28.0"), 24, 10, 20, 30, + SubnetID(4)); - auto state1 = SubnetIterativeAllocationState::create(subnet1); - auto state2 = SubnetIterativeAllocationState::create(subnet2); - auto state3 = SubnetIterativeAllocationState::create(subnet3); - auto state4 = SubnetIterativeAllocationState::create(subnet4); - - subnet1->setAllocationState(state1); - subnet2->setAllocationState(state2); - subnet3->setAllocationState(state3); - subnet4->setAllocationState(state4); // Associate first two subnets with classes. subnet1->allowClientClass("class1"); @@ -438,7 +429,9 @@ TEST(SharedNetwork4Test, getPreferredSubnet) { // Allocating an address from subnet2 updates the last allocated timestamp // for this subnet, which makes this subnet preferred over subnet1. - state2->setLastAllocated(Lease::TYPE_V4, IOAddress("192.0.2.25")); + auto state2 = boost::dynamic_pointer_cast + (subnet2->getAllocationState(Lease::TYPE_V4)); + state2->setLastAllocated(IOAddress("192.0.2.25")); preferred = network->getPreferredSubnet(subnet1); EXPECT_EQ(subnet2->getID(), preferred->getID()); @@ -458,7 +451,9 @@ TEST(SharedNetwork4Test, getPreferredSubnet) { // Allocate an address from the subnet3. This makes it preferred to // subnet4. - state3->setLastAllocated(Lease::TYPE_V4, IOAddress("172.16.25.23")); + auto state3 = boost::dynamic_pointer_cast + (subnet3->getAllocationState(Lease::TYPE_V4)); + state3->setLastAllocated(IOAddress("172.16.25.23")); // If the selected is subnet1, the preferred subnet is subnet2, because // it has the same set of classes as subnet1. The subnet3 can't be @@ -483,24 +478,14 @@ TEST(SharedNetwork4Test, getPreferredSubnetMultiThreading) { SharedNetwork4Ptr network(new SharedNetwork4("frog")); // Create four subnets. - Subnet4Ptr subnet1(new Subnet4(IOAddress("10.0.0.0"), 8, 10, 20, 30, - SubnetID(1))); - Subnet4Ptr subnet2(new Subnet4(IOAddress("192.0.2.0"), 24, 10, 20, 30, - SubnetID(2))); - Subnet4Ptr subnet3(new Subnet4(IOAddress("172.16.25.0"), 24, 10, 20, 30, - SubnetID(3))); - Subnet4Ptr subnet4(new Subnet4(IOAddress("172.16.28.0"), 24, 10, 20, 30, - SubnetID(4))); - - auto state1 = SubnetIterativeAllocationState::create(subnet1); - auto state2 = SubnetIterativeAllocationState::create(subnet2); - auto state3 = SubnetIterativeAllocationState::create(subnet3); - auto state4 = SubnetIterativeAllocationState::create(subnet4); - - subnet1->setAllocationState(state1); - subnet2->setAllocationState(state2); - subnet3->setAllocationState(state3); - subnet4->setAllocationState(state4); + auto subnet1 = Subnet4::create(IOAddress("10.0.0.0"), 8, 10, 20, 30, + SubnetID(1)); + auto subnet2 = Subnet4::create(IOAddress("192.0.2.0"), 24, 10, 20, 30, + SubnetID(2)); + auto subnet3 = Subnet4::create(IOAddress("172.16.25.0"), 24, 10, 20, 30, + SubnetID(3)); + auto subnet4 = Subnet4::create(IOAddress("172.16.28.0"), 24, 10, 20, 30, + SubnetID(4)); // Associate first two subnets with classes. subnet1->allowClientClass("class1"); @@ -530,8 +515,10 @@ TEST(SharedNetwork4Test, getPreferredSubnetMultiThreading) { } // Allocating an address from subnet2 updates the last allocated timestamp - // for this subnet, which makes this subnet preferred over subnet1. - state2->setLastAllocated(Lease::TYPE_V4, IOAddress("192.0.2.25")); + // for this subnet, which makes this subnet preferred over subnet1 + auto state2 = boost::dynamic_pointer_cast + (subnet2->getAllocationState(Lease::TYPE_V4)); + state2->setLastAllocated(IOAddress("192.0.2.25")); preferred = network->getPreferredSubnet(subnet1); EXPECT_EQ(subnet2->getID(), preferred->getID()); @@ -551,7 +538,9 @@ TEST(SharedNetwork4Test, getPreferredSubnetMultiThreading) { // Allocate an address from the subnet3. This makes it preferred to // subnet4. - state3->setLastAllocated(Lease::TYPE_V4, IOAddress("172.16.25.23")); + auto state3 = boost::dynamic_pointer_cast + (subnet3->getAllocationState(Lease::TYPE_V4)); + state3->setLastAllocated(IOAddress("172.16.25.23")); // If the selected is subnet1, the preferred subnet is subnet2, because // it has the same set of classes as subnet1. The subnet3 can't be @@ -1125,24 +1114,14 @@ TEST(SharedNetwork6Test, getPreferredSubnet) { SharedNetwork6Ptr network(new SharedNetwork6("frog")); // Create four subnets. - Subnet6Ptr subnet1(new Subnet6(IOAddress("2001:db8:1::"), 64, 10, 20, 30, - 40, SubnetID(1))); - Subnet6Ptr subnet2(new Subnet6(IOAddress("3000::"), 16, 10, 20, 30, 40, - SubnetID(2))); - Subnet6Ptr subnet3(new Subnet6(IOAddress("2001:db8:2::"), 64, 10, 20, 30, - 40, SubnetID(3))); - Subnet6Ptr subnet4(new Subnet6(IOAddress("3000:1::"), 64, 10, 20, 30, - 40, SubnetID(4))); - - auto state1 = SubnetIterativeAllocationState::create(subnet1); - auto state2 = SubnetIterativeAllocationState::create(subnet2); - auto state3 = SubnetIterativeAllocationState::create(subnet3); - auto state4 = SubnetIterativeAllocationState::create(subnet4); - - subnet1->setAllocationState(state1); - subnet2->setAllocationState(state2); - subnet3->setAllocationState(state3); - subnet4->setAllocationState(state4); + auto subnet1 = Subnet6::create(IOAddress("2001:db8:1::"), 64, 10, 20, 30, + 40, SubnetID(1)); + auto subnet2 = Subnet6::create(IOAddress("3000::"), 16, 10, 20, 30, 40, + SubnetID(2)); + auto subnet3 = Subnet6::create(IOAddress("2001:db8:2::"), 64, 10, 20, 30, + 40, SubnetID(3)); + auto subnet4 = Subnet6::create(IOAddress("3000:1::"), 64, 10, 20, 30, + 40, SubnetID(4)); // Associate first two subnets with classes. subnet1->allowClientClass("class1"); @@ -1176,8 +1155,10 @@ TEST(SharedNetwork6Test, getPreferredSubnet) { } // Allocating an address from subnet2 updates the last allocated timestamp - // for this subnet, which makes this subnet preferred over subnet1. - state2->setLastAllocated(Lease::TYPE_NA, IOAddress("2001:db8:1:2::")); + // for this subnet, which makes this subnet preferred over subnet1 + auto state = boost::dynamic_pointer_cast + (subnet2->getAllocationState(Lease::TYPE_NA)); + state->setLastAllocated(IOAddress("2001:db8:1:2::")); preferred = network->getPreferredSubnet(subnet1, Lease::TYPE_NA); EXPECT_EQ(subnet2->getID(), preferred->getID()); @@ -1192,7 +1173,9 @@ TEST(SharedNetwork6Test, getPreferredSubnet) { // Although, if we pick a prefix from the subnet2, we should get the // subnet2 as preferred instead. - state2->setLastAllocated(Lease::TYPE_PD, IOAddress("3000:1234::")); + state = boost::dynamic_pointer_cast + (subnet2->getAllocationState(Lease::TYPE_PD)); + state->setLastAllocated(IOAddress("3000:1234::")); preferred = network->getPreferredSubnet(subnet1, Lease::TYPE_PD); EXPECT_EQ(subnet2->getID(), preferred->getID()); @@ -1208,7 +1191,9 @@ TEST(SharedNetwork6Test, getPreferredSubnet) { // Allocate an address from the subnet3. This makes it preferred to // subnet4. - state3->setLastAllocated(Lease::TYPE_NA, IOAddress("2001:db8:2:1234::")); + state = boost::dynamic_pointer_cast + (subnet3->getAllocationState(Lease::TYPE_NA)); + state->setLastAllocated(IOAddress("2001:db8:2:1234::")); // If the selected is subnet1, the preferred subnet is subnet2, because // it has the same set of classes as subnet1. The subnet3 can't be @@ -1233,24 +1218,14 @@ TEST(SharedNetwork6Test, getPreferredSubnetMultiThreading) { SharedNetwork6Ptr network(new SharedNetwork6("frog")); // Create four subnets. - Subnet6Ptr subnet1(new Subnet6(IOAddress("2001:db8:1::"), 64, 10, 20, 30, - 40, SubnetID(1))); - Subnet6Ptr subnet2(new Subnet6(IOAddress("3000::"), 16, 10, 20, 30, 40, - SubnetID(2))); - Subnet6Ptr subnet3(new Subnet6(IOAddress("2001:db8:2::"), 64, 10, 20, 30, - 40, SubnetID(3))); - Subnet6Ptr subnet4(new Subnet6(IOAddress("3000:1::"), 64, 10, 20, 30, - 40, SubnetID(4))); - - auto state1 = SubnetIterativeAllocationState::create(subnet1); - auto state2 = SubnetIterativeAllocationState::create(subnet2); - auto state3 = SubnetIterativeAllocationState::create(subnet3); - auto state4 = SubnetIterativeAllocationState::create(subnet4); - - subnet1->setAllocationState(state1); - subnet2->setAllocationState(state2); - subnet3->setAllocationState(state3); - subnet4->setAllocationState(state4); + auto subnet1 = Subnet6::create(IOAddress("2001:db8:1::"), 64, 10, 20, 30, + 40, SubnetID(1)); + auto subnet2 = Subnet6::create(IOAddress("3000::"), 16, 10, 20, 30, 40, + SubnetID(2)); + auto subnet3 = Subnet6::create(IOAddress("2001:db8:2::"), 64, 10, 20, 30, + 40, SubnetID(3)); + auto subnet4 = Subnet6::create(IOAddress("3000:1::"), 64, 10, 20, 30, + 40, SubnetID(4)); // Associate first two subnets with classes. subnet1->allowClientClass("class1"); @@ -1285,7 +1260,9 @@ TEST(SharedNetwork6Test, getPreferredSubnetMultiThreading) { // Allocating an address from subnet2 updates the last allocated timestamp // for this subnet, which makes this subnet preferred over subnet1. - state2->setLastAllocated(Lease::TYPE_NA, IOAddress("2001:db8:1:2::")); + auto state = boost::dynamic_pointer_cast + (subnet2->getAllocationState(Lease::TYPE_NA)); + state->setLastAllocated(IOAddress("2001:db8:1:2::")); preferred = network->getPreferredSubnet(subnet1, Lease::TYPE_NA); EXPECT_EQ(subnet2->getID(), preferred->getID()); @@ -1300,7 +1277,9 @@ TEST(SharedNetwork6Test, getPreferredSubnetMultiThreading) { // Although, if we pick a prefix from the subnet2, we should get the // subnet2 as preferred instead. - state2->setLastAllocated(Lease::TYPE_PD, IOAddress("3000:1234::")); + state = boost::dynamic_pointer_cast + (subnet2->getAllocationState(Lease::TYPE_PD)); + state->setLastAllocated(IOAddress("3000:1234::")); preferred = network->getPreferredSubnet(subnet1, Lease::TYPE_PD); EXPECT_EQ(subnet2->getID(), preferred->getID()); @@ -1316,7 +1295,9 @@ TEST(SharedNetwork6Test, getPreferredSubnetMultiThreading) { // Allocate an address from the subnet3. This makes it preferred to // subnet4. - state3->setLastAllocated(Lease::TYPE_NA, IOAddress("2001:db8:2:1234::")); + state = boost::dynamic_pointer_cast + (subnet3->getAllocationState(Lease::TYPE_NA)); + state->setLastAllocated(IOAddress("2001:db8:2:1234::")); // If the selected is subnet1, the preferred subnet is subnet2, because // it has the same set of classes as subnet1. The subnet3 can't be