diff options
Diffstat (limited to 'src/bin/dhcp6/dhcp6_parser.cc')
-rw-r--r-- | src/bin/dhcp6/dhcp6_parser.cc | 6553 |
1 files changed, 6553 insertions, 0 deletions
diff --git a/src/bin/dhcp6/dhcp6_parser.cc b/src/bin/dhcp6/dhcp6_parser.cc new file mode 100644 index 0000000..383806f --- /dev/null +++ b/src/bin/dhcp6/dhcp6_parser.cc @@ -0,0 +1,6553 @@ +// A Bison parser, made by GNU Bison 3.8.2. + +// Skeleton implementation for Bison LALR(1) parsers in C++ + +// Copyright (C) 2002-2015, 2018-2021 Free Software Foundation, Inc. + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with this program. If not, see <https://www.gnu.org/licenses/>. + +// As a special exception, you may create a larger work that contains +// part or all of the Bison parser skeleton and distribute that work +// under terms of your choice, so long as that work isn't itself a +// parser generator using the skeleton or a modified version thereof +// as a parser skeleton. Alternatively, if you modify or redistribute +// the parser skeleton itself, you may (at your option) remove this +// special exception, which will cause the skeleton and the resulting +// Bison output files to be licensed under the GNU General Public +// License without this special exception. + +// This special exception was added by the Free Software Foundation in +// version 2.2 of Bison. + +// DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, +// especially those whose name start with YY_ or yy_. They are +// private implementation details that can be changed or removed. + + +// Take the name prefix into account. +#define yylex parser6_lex + + + +#include "dhcp6_parser.h" + + +// Unqualified %code blocks. +#line 34 "dhcp6_parser.yy" + +#include <dhcp6/parser_context.h> + +// Avoid warnings with the error counter. +#if defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic ignored "-Wunused-but-set-variable" +#endif + +#line 57 "dhcp6_parser.cc" + + +#ifndef YY_ +# if defined YYENABLE_NLS && YYENABLE_NLS +# if ENABLE_NLS +# include <libintl.h> // FIXME: INFRINGES ON USER NAME SPACE. +# define YY_(msgid) dgettext ("bison-runtime", msgid) +# endif +# endif +# ifndef YY_ +# define YY_(msgid) msgid +# endif +#endif + + +// Whether we are compiled with exception support. +#ifndef YY_EXCEPTIONS +# if defined __GNUC__ && !defined __EXCEPTIONS +# define YY_EXCEPTIONS 0 +# else +# define YY_EXCEPTIONS 1 +# endif +#endif + +#define YYRHSLOC(Rhs, K) ((Rhs)[K].location) +/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. + If N is 0, then set CURRENT to the empty location which ends + the previous symbol: RHS[0] (always defined). */ + +# ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + do \ + if (N) \ + { \ + (Current).begin = YYRHSLOC (Rhs, 1).begin; \ + (Current).end = YYRHSLOC (Rhs, N).end; \ + } \ + else \ + { \ + (Current).begin = (Current).end = YYRHSLOC (Rhs, 0).end; \ + } \ + while (false) +# endif + + +// Enable debugging if requested. +#if PARSER6_DEBUG + +// A pseudo ostream that takes yydebug_ into account. +# define YYCDEBUG if (yydebug_) (*yycdebug_) + +# define YY_SYMBOL_PRINT(Title, Symbol) \ + do { \ + if (yydebug_) \ + { \ + *yycdebug_ << Title << ' '; \ + yy_print_ (*yycdebug_, Symbol); \ + *yycdebug_ << '\n'; \ + } \ + } while (false) + +# define YY_REDUCE_PRINT(Rule) \ + do { \ + if (yydebug_) \ + yy_reduce_print_ (Rule); \ + } while (false) + +# define YY_STACK_PRINT() \ + do { \ + if (yydebug_) \ + yy_stack_print_ (); \ + } while (false) + +#else // !PARSER6_DEBUG + +# define YYCDEBUG if (false) std::cerr +# define YY_SYMBOL_PRINT(Title, Symbol) YY_USE (Symbol) +# define YY_REDUCE_PRINT(Rule) static_cast<void> (0) +# define YY_STACK_PRINT() static_cast<void> (0) + +#endif // !PARSER6_DEBUG + +#define yyerrok (yyerrstatus_ = 0) +#define yyclearin (yyla.clear ()) + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab +#define YYRECOVERING() (!!yyerrstatus_) + +#line 14 "dhcp6_parser.yy" +namespace isc { namespace dhcp { +#line 150 "dhcp6_parser.cc" + + /// Build a parser object. + Dhcp6Parser::Dhcp6Parser (isc::dhcp::Parser6Context& ctx_yyarg) +#if PARSER6_DEBUG + : yydebug_ (false), + yycdebug_ (&std::cerr), +#else + : +#endif + ctx (ctx_yyarg) + {} + + Dhcp6Parser::~Dhcp6Parser () + {} + + Dhcp6Parser::syntax_error::~syntax_error () YY_NOEXCEPT YY_NOTHROW + {} + + /*---------. + | symbol. | + `---------*/ + + + + // by_state. + Dhcp6Parser::by_state::by_state () YY_NOEXCEPT + : state (empty_state) + {} + + Dhcp6Parser::by_state::by_state (const by_state& that) YY_NOEXCEPT + : state (that.state) + {} + + void + Dhcp6Parser::by_state::clear () YY_NOEXCEPT + { + state = empty_state; + } + + void + Dhcp6Parser::by_state::move (by_state& that) + { + state = that.state; + that.clear (); + } + + Dhcp6Parser::by_state::by_state (state_type s) YY_NOEXCEPT + : state (s) + {} + + Dhcp6Parser::symbol_kind_type + Dhcp6Parser::by_state::kind () const YY_NOEXCEPT + { + if (state == empty_state) + return symbol_kind::S_YYEMPTY; + else + return YY_CAST (symbol_kind_type, yystos_[+state]); + } + + Dhcp6Parser::stack_symbol_type::stack_symbol_type () + {} + + Dhcp6Parser::stack_symbol_type::stack_symbol_type (YY_RVREF (stack_symbol_type) that) + : super_type (YY_MOVE (that.state), YY_MOVE (that.location)) + { + switch (that.kind ()) + { + case symbol_kind::S_value: // value + case symbol_kind::S_map_value: // map_value + case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value + case symbol_kind::S_db_type: // db_type + case symbol_kind::S_on_fail_mode: // on_fail_mode + case symbol_kind::S_hr_mode: // hr_mode + case symbol_kind::S_duid_type: // duid_type + case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value + value.YY_MOVE_OR_COPY< ElementPtr > (YY_MOVE (that.value)); + break; + + case symbol_kind::S_BOOLEAN: // "boolean" + value.YY_MOVE_OR_COPY< bool > (YY_MOVE (that.value)); + break; + + case symbol_kind::S_FLOAT: // "floating point" + value.YY_MOVE_OR_COPY< double > (YY_MOVE (that.value)); + break; + + case symbol_kind::S_INTEGER: // "integer" + value.YY_MOVE_OR_COPY< int64_t > (YY_MOVE (that.value)); + break; + + case symbol_kind::S_STRING: // "constant string" + value.YY_MOVE_OR_COPY< std::string > (YY_MOVE (that.value)); + break; + + default: + break; + } + +#if 201103L <= YY_CPLUSPLUS + // that is emptied. + that.state = empty_state; +#endif + } + + Dhcp6Parser::stack_symbol_type::stack_symbol_type (state_type s, YY_MOVE_REF (symbol_type) that) + : super_type (s, YY_MOVE (that.location)) + { + switch (that.kind ()) + { + case symbol_kind::S_value: // value + case symbol_kind::S_map_value: // map_value + case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value + case symbol_kind::S_db_type: // db_type + case symbol_kind::S_on_fail_mode: // on_fail_mode + case symbol_kind::S_hr_mode: // hr_mode + case symbol_kind::S_duid_type: // duid_type + case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value + value.move< ElementPtr > (YY_MOVE (that.value)); + break; + + case symbol_kind::S_BOOLEAN: // "boolean" + value.move< bool > (YY_MOVE (that.value)); + break; + + case symbol_kind::S_FLOAT: // "floating point" + value.move< double > (YY_MOVE (that.value)); + break; + + case symbol_kind::S_INTEGER: // "integer" + value.move< int64_t > (YY_MOVE (that.value)); + break; + + case symbol_kind::S_STRING: // "constant string" + value.move< std::string > (YY_MOVE (that.value)); + break; + + default: + break; + } + + // that is emptied. + that.kind_ = symbol_kind::S_YYEMPTY; + } + +#if YY_CPLUSPLUS < 201103L + Dhcp6Parser::stack_symbol_type& + Dhcp6Parser::stack_symbol_type::operator= (const stack_symbol_type& that) + { + state = that.state; + switch (that.kind ()) + { + case symbol_kind::S_value: // value + case symbol_kind::S_map_value: // map_value + case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value + case symbol_kind::S_db_type: // db_type + case symbol_kind::S_on_fail_mode: // on_fail_mode + case symbol_kind::S_hr_mode: // hr_mode + case symbol_kind::S_duid_type: // duid_type + case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value + value.copy< ElementPtr > (that.value); + break; + + case symbol_kind::S_BOOLEAN: // "boolean" + value.copy< bool > (that.value); + break; + + case symbol_kind::S_FLOAT: // "floating point" + value.copy< double > (that.value); + break; + + case symbol_kind::S_INTEGER: // "integer" + value.copy< int64_t > (that.value); + break; + + case symbol_kind::S_STRING: // "constant string" + value.copy< std::string > (that.value); + break; + + default: + break; + } + + location = that.location; + return *this; + } + + Dhcp6Parser::stack_symbol_type& + Dhcp6Parser::stack_symbol_type::operator= (stack_symbol_type& that) + { + state = that.state; + switch (that.kind ()) + { + case symbol_kind::S_value: // value + case symbol_kind::S_map_value: // map_value + case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value + case symbol_kind::S_db_type: // db_type + case symbol_kind::S_on_fail_mode: // on_fail_mode + case symbol_kind::S_hr_mode: // hr_mode + case symbol_kind::S_duid_type: // duid_type + case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value + value.move< ElementPtr > (that.value); + break; + + case symbol_kind::S_BOOLEAN: // "boolean" + value.move< bool > (that.value); + break; + + case symbol_kind::S_FLOAT: // "floating point" + value.move< double > (that.value); + break; + + case symbol_kind::S_INTEGER: // "integer" + value.move< int64_t > (that.value); + break; + + case symbol_kind::S_STRING: // "constant string" + value.move< std::string > (that.value); + break; + + default: + break; + } + + location = that.location; + // that is emptied. + that.state = empty_state; + return *this; + } +#endif + + template <typename Base> + void + Dhcp6Parser::yy_destroy_ (const char* yymsg, basic_symbol<Base>& yysym) const + { + if (yymsg) + YY_SYMBOL_PRINT (yymsg, yysym); + } + +#if PARSER6_DEBUG + template <typename Base> + void + Dhcp6Parser::yy_print_ (std::ostream& yyo, const basic_symbol<Base>& yysym) const + { + std::ostream& yyoutput = yyo; + YY_USE (yyoutput); + if (yysym.empty ()) + yyo << "empty symbol"; + else + { + symbol_kind_type yykind = yysym.kind (); + yyo << (yykind < YYNTOKENS ? "token" : "nterm") + << ' ' << yysym.name () << " (" + << yysym.location << ": "; + switch (yykind) + { + case symbol_kind::S_STRING: // "constant string" +#line 308 "dhcp6_parser.yy" + { yyoutput << yysym.value.template as < std::string > (); } +#line 409 "dhcp6_parser.cc" + break; + + case symbol_kind::S_INTEGER: // "integer" +#line 308 "dhcp6_parser.yy" + { yyoutput << yysym.value.template as < int64_t > (); } +#line 415 "dhcp6_parser.cc" + break; + + case symbol_kind::S_FLOAT: // "floating point" +#line 308 "dhcp6_parser.yy" + { yyoutput << yysym.value.template as < double > (); } +#line 421 "dhcp6_parser.cc" + break; + + case symbol_kind::S_BOOLEAN: // "boolean" +#line 308 "dhcp6_parser.yy" + { yyoutput << yysym.value.template as < bool > (); } +#line 427 "dhcp6_parser.cc" + break; + + case symbol_kind::S_value: // value +#line 308 "dhcp6_parser.yy" + { yyoutput << yysym.value.template as < ElementPtr > (); } +#line 433 "dhcp6_parser.cc" + break; + + case symbol_kind::S_map_value: // map_value +#line 308 "dhcp6_parser.yy" + { yyoutput << yysym.value.template as < ElementPtr > (); } +#line 439 "dhcp6_parser.cc" + break; + + case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value +#line 308 "dhcp6_parser.yy" + { yyoutput << yysym.value.template as < ElementPtr > (); } +#line 445 "dhcp6_parser.cc" + break; + + case symbol_kind::S_db_type: // db_type +#line 308 "dhcp6_parser.yy" + { yyoutput << yysym.value.template as < ElementPtr > (); } +#line 451 "dhcp6_parser.cc" + break; + + case symbol_kind::S_on_fail_mode: // on_fail_mode +#line 308 "dhcp6_parser.yy" + { yyoutput << yysym.value.template as < ElementPtr > (); } +#line 457 "dhcp6_parser.cc" + break; + + case symbol_kind::S_hr_mode: // hr_mode +#line 308 "dhcp6_parser.yy" + { yyoutput << yysym.value.template as < ElementPtr > (); } +#line 463 "dhcp6_parser.cc" + break; + + case symbol_kind::S_duid_type: // duid_type +#line 308 "dhcp6_parser.yy" + { yyoutput << yysym.value.template as < ElementPtr > (); } +#line 469 "dhcp6_parser.cc" + break; + + case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value +#line 308 "dhcp6_parser.yy" + { yyoutput << yysym.value.template as < ElementPtr > (); } +#line 475 "dhcp6_parser.cc" + break; + + default: + break; + } + yyo << ')'; + } + } +#endif + + void + Dhcp6Parser::yypush_ (const char* m, YY_MOVE_REF (stack_symbol_type) sym) + { + if (m) + YY_SYMBOL_PRINT (m, sym); + yystack_.push (YY_MOVE (sym)); + } + + void + Dhcp6Parser::yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym) + { +#if 201103L <= YY_CPLUSPLUS + yypush_ (m, stack_symbol_type (s, std::move (sym))); +#else + stack_symbol_type ss (s, sym); + yypush_ (m, ss); +#endif + } + + void + Dhcp6Parser::yypop_ (int n) YY_NOEXCEPT + { + yystack_.pop (n); + } + +#if PARSER6_DEBUG + std::ostream& + Dhcp6Parser::debug_stream () const + { + return *yycdebug_; + } + + void + Dhcp6Parser::set_debug_stream (std::ostream& o) + { + yycdebug_ = &o; + } + + + Dhcp6Parser::debug_level_type + Dhcp6Parser::debug_level () const + { + return yydebug_; + } + + void + Dhcp6Parser::set_debug_level (debug_level_type l) + { + yydebug_ = l; + } +#endif // PARSER6_DEBUG + + Dhcp6Parser::state_type + Dhcp6Parser::yy_lr_goto_state_ (state_type yystate, int yysym) + { + int yyr = yypgoto_[yysym - YYNTOKENS] + yystate; + if (0 <= yyr && yyr <= yylast_ && yycheck_[yyr] == yystate) + return yytable_[yyr]; + else + return yydefgoto_[yysym - YYNTOKENS]; + } + + bool + Dhcp6Parser::yy_pact_value_is_default_ (int yyvalue) YY_NOEXCEPT + { + return yyvalue == yypact_ninf_; + } + + bool + Dhcp6Parser::yy_table_value_is_error_ (int yyvalue) YY_NOEXCEPT + { + return yyvalue == yytable_ninf_; + } + + int + Dhcp6Parser::operator() () + { + return parse (); + } + + int + Dhcp6Parser::parse () + { + int yyn; + /// Length of the RHS of the rule being reduced. + int yylen = 0; + + // Error handling. + int yynerrs_ = 0; + int yyerrstatus_ = 0; + + /// The lookahead symbol. + symbol_type yyla; + + /// The locations where the error started and ended. + stack_symbol_type yyerror_range[3]; + + /// The return value of parse (). + int yyresult; + +#if YY_EXCEPTIONS + try +#endif // YY_EXCEPTIONS + { + YYCDEBUG << "Starting parse\n"; + + + /* Initialize the stack. The initial state will be set in + yynewstate, since the latter expects the semantical and the + location values to have been already stored, initialize these + stacks with a primary value. */ + yystack_.clear (); + yypush_ (YY_NULLPTR, 0, YY_MOVE (yyla)); + + /*-----------------------------------------------. + | yynewstate -- push a new symbol on the stack. | + `-----------------------------------------------*/ + yynewstate: + YYCDEBUG << "Entering state " << int (yystack_[0].state) << '\n'; + YY_STACK_PRINT (); + + // Accept? + if (yystack_[0].state == yyfinal_) + YYACCEPT; + + goto yybackup; + + + /*-----------. + | yybackup. | + `-----------*/ + yybackup: + // Try to take a decision without lookahead. + yyn = yypact_[+yystack_[0].state]; + if (yy_pact_value_is_default_ (yyn)) + goto yydefault; + + // Read a lookahead token. + if (yyla.empty ()) + { + YYCDEBUG << "Reading a token\n"; +#if YY_EXCEPTIONS + try +#endif // YY_EXCEPTIONS + { + symbol_type yylookahead (yylex (ctx)); + yyla.move (yylookahead); + } +#if YY_EXCEPTIONS + catch (const syntax_error& yyexc) + { + YYCDEBUG << "Caught exception: " << yyexc.what() << '\n'; + error (yyexc); + goto yyerrlab1; + } +#endif // YY_EXCEPTIONS + } + YY_SYMBOL_PRINT ("Next token is", yyla); + + if (yyla.kind () == symbol_kind::S_YYerror) + { + // The scanner already issued an error message, process directly + // to error recovery. But do not keep the error token as + // lookahead, it is too special and may lead us to an endless + // loop in error recovery. */ + yyla.kind_ = symbol_kind::S_YYUNDEF; + goto yyerrlab1; + } + + /* If the proper action on seeing token YYLA.TYPE is to reduce or + to detect an error, take that action. */ + yyn += yyla.kind (); + if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.kind ()) + { + goto yydefault; + } + + // Reduce or error. + yyn = yytable_[yyn]; + if (yyn <= 0) + { + if (yy_table_value_is_error_ (yyn)) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + + // Count tokens shifted since error; after three, turn off error status. + if (yyerrstatus_) + --yyerrstatus_; + + // Shift the lookahead token. + yypush_ ("Shifting", state_type (yyn), YY_MOVE (yyla)); + goto yynewstate; + + + /*-----------------------------------------------------------. + | yydefault -- do the default action for the current state. | + `-----------------------------------------------------------*/ + yydefault: + yyn = yydefact_[+yystack_[0].state]; + if (yyn == 0) + goto yyerrlab; + goto yyreduce; + + + /*-----------------------------. + | yyreduce -- do a reduction. | + `-----------------------------*/ + yyreduce: + yylen = yyr2_[yyn]; + { + stack_symbol_type yylhs; + yylhs.state = yy_lr_goto_state_ (yystack_[yylen].state, yyr1_[yyn]); + /* Variants are always initialized to an empty instance of the + correct type. The default '$$ = $1' action is NOT applied + when using variants. */ + switch (yyr1_[yyn]) + { + case symbol_kind::S_value: // value + case symbol_kind::S_map_value: // map_value + case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value + case symbol_kind::S_db_type: // db_type + case symbol_kind::S_on_fail_mode: // on_fail_mode + case symbol_kind::S_hr_mode: // hr_mode + case symbol_kind::S_duid_type: // duid_type + case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value + yylhs.value.emplace< ElementPtr > (); + break; + + case symbol_kind::S_BOOLEAN: // "boolean" + yylhs.value.emplace< bool > (); + break; + + case symbol_kind::S_FLOAT: // "floating point" + yylhs.value.emplace< double > (); + break; + + case symbol_kind::S_INTEGER: // "integer" + yylhs.value.emplace< int64_t > (); + break; + + case symbol_kind::S_STRING: // "constant string" + yylhs.value.emplace< std::string > (); + break; + + default: + break; + } + + + // Default location. + { + stack_type::slice range (yystack_, yylen); + YYLLOC_DEFAULT (yylhs.location, range, yylen); + yyerror_range[1].location = yylhs.location; + } + + // Perform the reduction. + YY_REDUCE_PRINT (yyn); +#if YY_EXCEPTIONS + try +#endif // YY_EXCEPTIONS + { + switch (yyn) + { + case 2: // $@1: %empty +#line 317 "dhcp6_parser.yy" + { ctx.ctx_ = ctx.NO_KEYWORD; } +#line 755 "dhcp6_parser.cc" + break; + + case 4: // $@2: %empty +#line 318 "dhcp6_parser.yy" + { ctx.ctx_ = ctx.CONFIG; } +#line 761 "dhcp6_parser.cc" + break; + + case 6: // $@3: %empty +#line 319 "dhcp6_parser.yy" + { ctx.ctx_ = ctx.DHCP6; } +#line 767 "dhcp6_parser.cc" + break; + + case 8: // $@4: %empty +#line 320 "dhcp6_parser.yy" + { ctx.ctx_ = ctx.INTERFACES_CONFIG; } +#line 773 "dhcp6_parser.cc" + break; + + case 10: // $@5: %empty +#line 321 "dhcp6_parser.yy" + { ctx.ctx_ = ctx.SUBNET6; } +#line 779 "dhcp6_parser.cc" + break; + + case 12: // $@6: %empty +#line 322 "dhcp6_parser.yy" + { ctx.ctx_ = ctx.POOLS; } +#line 785 "dhcp6_parser.cc" + break; + + case 14: // $@7: %empty +#line 323 "dhcp6_parser.yy" + { ctx.ctx_ = ctx.PD_POOLS; } +#line 791 "dhcp6_parser.cc" + break; + + case 16: // $@8: %empty +#line 324 "dhcp6_parser.yy" + { ctx.ctx_ = ctx.RESERVATIONS; } +#line 797 "dhcp6_parser.cc" + break; + + case 18: // $@9: %empty +#line 325 "dhcp6_parser.yy" + { ctx.ctx_ = ctx.DHCP6; } +#line 803 "dhcp6_parser.cc" + break; + + case 20: // $@10: %empty +#line 326 "dhcp6_parser.yy" + { ctx.ctx_ = ctx.OPTION_DEF; } +#line 809 "dhcp6_parser.cc" + break; + + case 22: // $@11: %empty +#line 327 "dhcp6_parser.yy" + { ctx.ctx_ = ctx.OPTION_DATA; } +#line 815 "dhcp6_parser.cc" + break; + + case 24: // $@12: %empty +#line 328 "dhcp6_parser.yy" + { ctx.ctx_ = ctx.HOOKS_LIBRARIES; } +#line 821 "dhcp6_parser.cc" + break; + + case 26: // $@13: %empty +#line 329 "dhcp6_parser.yy" + { ctx.ctx_ = ctx.DHCP_DDNS; } +#line 827 "dhcp6_parser.cc" + break; + + case 28: // $@14: %empty +#line 330 "dhcp6_parser.yy" + { ctx.ctx_ = ctx.CONFIG_CONTROL; } +#line 833 "dhcp6_parser.cc" + break; + + case 30: // value: "integer" +#line 338 "dhcp6_parser.yy" + { yylhs.value.as < ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); } +#line 839 "dhcp6_parser.cc" + break; + + case 31: // value: "floating point" +#line 339 "dhcp6_parser.yy" + { yylhs.value.as < ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); } +#line 845 "dhcp6_parser.cc" + break; + + case 32: // value: "boolean" +#line 340 "dhcp6_parser.yy" + { yylhs.value.as < ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); } +#line 851 "dhcp6_parser.cc" + break; + + case 33: // value: "constant string" +#line 341 "dhcp6_parser.yy" + { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); } +#line 857 "dhcp6_parser.cc" + break; + + case 34: // value: "null" +#line 342 "dhcp6_parser.yy" + { yylhs.value.as < ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); } +#line 863 "dhcp6_parser.cc" + break; + + case 35: // value: map2 +#line 343 "dhcp6_parser.yy" + { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } +#line 869 "dhcp6_parser.cc" + break; + + case 36: // value: list_generic +#line 344 "dhcp6_parser.yy" + { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } +#line 875 "dhcp6_parser.cc" + break; + + case 37: // sub_json: value +#line 347 "dhcp6_parser.yy" + { + // Push back the JSON value on the stack + ctx.stack_.push_back(yystack_[0].value.as < ElementPtr > ()); +} +#line 884 "dhcp6_parser.cc" + break; + + case 38: // $@15: %empty +#line 352 "dhcp6_parser.yy" + { + // This code is executed when we're about to start parsing + // the content of the map + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.push_back(m); +} +#line 895 "dhcp6_parser.cc" + break; + + case 39: // map2: "{" $@15 map_content "}" +#line 357 "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 + // for it. +} +#line 905 "dhcp6_parser.cc" + break; + + case 40: // map_value: map2 +#line 363 "dhcp6_parser.yy" + { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } +#line 911 "dhcp6_parser.cc" + break; + + case 43: // not_empty_map: "constant string" ":" value +#line 370 "dhcp6_parser.yy" + { + // map containing a single entry + ctx.unique(yystack_[2].value.as < std::string > (), ctx.loc2pos(yystack_[2].location)); + ctx.stack_.back()->set(yystack_[2].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ()); + } +#line 921 "dhcp6_parser.cc" + break; + + case 44: // not_empty_map: not_empty_map "," "constant string" ":" value +#line 375 "dhcp6_parser.yy" + { + // map consisting of a shorter map followed by + // comma and string:value + ctx.unique(yystack_[2].value.as < std::string > (), ctx.loc2pos(yystack_[2].location)); + ctx.stack_.back()->set(yystack_[2].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ()); + } +#line 932 "dhcp6_parser.cc" + break; + + case 45: // not_empty_map: not_empty_map "," +#line 381 "dhcp6_parser.yy" + { + ctx.warnAboutExtraCommas(yystack_[0].location); + } +#line 940 "dhcp6_parser.cc" + break; + + case 46: // $@16: %empty +#line 386 "dhcp6_parser.yy" + { + ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.push_back(l); +} +#line 949 "dhcp6_parser.cc" + break; + + case 47: // list_generic: "[" $@16 list_content "]" +#line 389 "dhcp6_parser.yy" + { + // list parsing complete. Put any sanity checking here +} +#line 957 "dhcp6_parser.cc" + break; + + case 50: // not_empty_list: value +#line 397 "dhcp6_parser.yy" + { + // List consisting of a single element. + ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ()); + } +#line 966 "dhcp6_parser.cc" + break; + + case 51: // not_empty_list: not_empty_list "," value +#line 401 "dhcp6_parser.yy" + { + // List ending with , and a value. + ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ()); + } +#line 975 "dhcp6_parser.cc" + break; + + case 52: // not_empty_list: not_empty_list "," +#line 405 "dhcp6_parser.yy" + { + ctx.warnAboutExtraCommas(yystack_[0].location); + } +#line 983 "dhcp6_parser.cc" + break; + + case 53: // $@17: %empty +#line 411 "dhcp6_parser.yy" + { + // List parsing about to start +} +#line 991 "dhcp6_parser.cc" + break; + + case 54: // list_strings: "[" $@17 list_strings_content "]" +#line 413 "dhcp6_parser.yy" + { + // list parsing complete. Put any sanity checking here + //ctx.stack_.pop_back(); +} +#line 1000 "dhcp6_parser.cc" + break; + + case 57: // not_empty_list_strings: "constant string" +#line 422 "dhcp6_parser.yy" + { + ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->add(s); + } +#line 1009 "dhcp6_parser.cc" + break; + + case 58: // not_empty_list_strings: not_empty_list_strings "," "constant string" +#line 426 "dhcp6_parser.yy" + { + ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->add(s); + } +#line 1018 "dhcp6_parser.cc" + break; + + case 59: // not_empty_list_strings: not_empty_list_strings "," +#line 430 "dhcp6_parser.yy" + { + ctx.warnAboutExtraCommas(yystack_[0].location); + } +#line 1026 "dhcp6_parser.cc" + break; + + case 60: // unknown_map_entry: "constant string" ":" +#line 440 "dhcp6_parser.yy" + { + const std::string& where = ctx.contextName(); + const std::string& keyword = yystack_[1].value.as < std::string > (); + error(yystack_[1].location, + "got unexpected keyword \"" + keyword + "\" in " + where + " map."); +} +#line 1037 "dhcp6_parser.cc" + break; + + case 61: // $@18: %empty +#line 449 "dhcp6_parser.yy" + { + // This code is executed when we're about to start parsing + // the content of the map + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.push_back(m); +} +#line 1048 "dhcp6_parser.cc" + break; + + case 62: // syntax_map: "{" $@18 global_object "}" +#line 454 "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 + // for it. + + // Dhcp6 is required + ctx.require("Dhcp6", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); +} +#line 1061 "dhcp6_parser.cc" + break; + + case 63: // $@19: %empty +#line 464 "dhcp6_parser.yy" + { + // This code is executed when we're about to start parsing + // the content of the map + // Prevent against duplicate. + ctx.unique("Dhcp6", ctx.loc2pos(yystack_[0].location)); + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("Dhcp6", m); + ctx.stack_.push_back(m); + ctx.enter(ctx.DHCP6); +} +#line 1076 "dhcp6_parser.cc" + break; + + case 64: // global_object: "Dhcp6" $@19 ":" "{" global_params "}" +#line 473 "dhcp6_parser.yy" + { + // No global parameter is required + ctx.stack_.pop_back(); + ctx.leave(); +} +#line 1086 "dhcp6_parser.cc" + break; + + case 66: // global_object_comma: global_object "," +#line 481 "dhcp6_parser.yy" + { + ctx.warnAboutExtraCommas(yystack_[0].location); +} +#line 1094 "dhcp6_parser.cc" + break; + + case 67: // $@20: %empty +#line 487 "dhcp6_parser.yy" + { + // Parse the Dhcp6 map + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.push_back(m); +} +#line 1104 "dhcp6_parser.cc" + break; + + case 68: // sub_dhcp6: "{" $@20 global_params "}" +#line 491 "dhcp6_parser.yy" + { + // No global parameter is required + // parsing completed +} +#line 1113 "dhcp6_parser.cc" + break; + + case 71: // global_params: global_params "," +#line 498 "dhcp6_parser.yy" + { + ctx.warnAboutExtraCommas(yystack_[0].location); + } +#line 1121 "dhcp6_parser.cc" + break; + + case 140: // $@21: %empty +#line 575 "dhcp6_parser.yy" + { + ctx.unique("data-directory", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 1130 "dhcp6_parser.cc" + break; + + case 141: // data_directory: "data-directory" $@21 ":" "constant string" +#line 578 "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); + ctx.leave(); +} +#line 1140 "dhcp6_parser.cc" + break; + + case 142: // preferred_lifetime: "preferred-lifetime" ":" "integer" +#line 584 "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))); + ctx.stack_.back()->set("preferred-lifetime", prf); +} +#line 1150 "dhcp6_parser.cc" + break; + + case 143: // min_preferred_lifetime: "min-preferred-lifetime" ":" "integer" +#line 590 "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))); + ctx.stack_.back()->set("min-preferred-lifetime", prf); +} +#line 1160 "dhcp6_parser.cc" + break; + + case 144: // max_preferred_lifetime: "max-preferred-lifetime" ":" "integer" +#line 596 "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))); + ctx.stack_.back()->set("max-preferred-lifetime", prf); +} +#line 1170 "dhcp6_parser.cc" + break; + + case 145: // valid_lifetime: "valid-lifetime" ":" "integer" +#line 602 "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))); + ctx.stack_.back()->set("valid-lifetime", prf); +} +#line 1180 "dhcp6_parser.cc" + break; + + case 146: // min_valid_lifetime: "min-valid-lifetime" ":" "integer" +#line 608 "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))); + ctx.stack_.back()->set("min-valid-lifetime", prf); +} +#line 1190 "dhcp6_parser.cc" + break; + + case 147: // max_valid_lifetime: "max-valid-lifetime" ":" "integer" +#line 614 "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))); + ctx.stack_.back()->set("max-valid-lifetime", prf); +} +#line 1200 "dhcp6_parser.cc" + break; + + case 148: // renew_timer: "renew-timer" ":" "integer" +#line 620 "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))); + ctx.stack_.back()->set("renew-timer", prf); +} +#line 1210 "dhcp6_parser.cc" + break; + + case 149: // rebind_timer: "rebind-timer" ":" "integer" +#line 626 "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))); + ctx.stack_.back()->set("rebind-timer", prf); +} +#line 1220 "dhcp6_parser.cc" + break; + + case 150: // calculate_tee_times: "calculate-tee-times" ":" "boolean" +#line 632 "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))); + ctx.stack_.back()->set("calculate-tee-times", ctt); +} +#line 1230 "dhcp6_parser.cc" + break; + + case 151: // t1_percent: "t1-percent" ":" "floating point" +#line 638 "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))); + ctx.stack_.back()->set("t1-percent", t1); +} +#line 1240 "dhcp6_parser.cc" + break; + + case 152: // t2_percent: "t2-percent" ":" "floating point" +#line 644 "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))); + ctx.stack_.back()->set("t2-percent", t2); +} +#line 1250 "dhcp6_parser.cc" + break; + + case 153: // cache_threshold: "cache-threshold" ":" "floating point" +#line 650 "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))); + ctx.stack_.back()->set("cache-threshold", ct); +} +#line 1260 "dhcp6_parser.cc" + break; + + case 154: // cache_max_age: "cache-max-age" ":" "integer" +#line 656 "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))); + ctx.stack_.back()->set("cache-max-age", cm); +} +#line 1270 "dhcp6_parser.cc" + break; + + case 155: // decline_probation_period: "decline-probation-period" ":" "integer" +#line 662 "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))); + ctx.stack_.back()->set("decline-probation-period", dpp); +} +#line 1280 "dhcp6_parser.cc" + break; + + case 156: // ddns_send_updates: "ddns-send-updates" ":" "boolean" +#line 668 "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))); + ctx.stack_.back()->set("ddns-send-updates", b); +} +#line 1290 "dhcp6_parser.cc" + break; + + case 157: // ddns_override_no_update: "ddns-override-no-update" ":" "boolean" +#line 674 "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))); + ctx.stack_.back()->set("ddns-override-no-update", b); +} +#line 1300 "dhcp6_parser.cc" + break; + + case 158: // ddns_override_client_update: "ddns-override-client-update" ":" "boolean" +#line 680 "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))); + ctx.stack_.back()->set("ddns-override-client-update", b); +} +#line 1310 "dhcp6_parser.cc" + break; + + case 159: // $@22: %empty +#line 686 "dhcp6_parser.yy" + { + ctx.unique("ddns-replace-client-name", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.REPLACE_CLIENT_NAME); +} +#line 1319 "dhcp6_parser.cc" + break; + + case 160: // ddns_replace_client_name: "ddns-replace-client-name" $@22 ":" ddns_replace_client_name_value +#line 689 "dhcp6_parser.yy" + { + ctx.stack_.back()->set("ddns-replace-client-name", yystack_[0].value.as < ElementPtr > ()); + ctx.leave(); +} +#line 1328 "dhcp6_parser.cc" + break; + + case 161: // ddns_replace_client_name_value: "when-present" +#line 695 "dhcp6_parser.yy" + { + yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location))); + } +#line 1336 "dhcp6_parser.cc" + break; + + case 162: // ddns_replace_client_name_value: "never" +#line 698 "dhcp6_parser.yy" + { + yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location))); + } +#line 1344 "dhcp6_parser.cc" + break; + + case 163: // ddns_replace_client_name_value: "always" +#line 701 "dhcp6_parser.yy" + { + yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location))); + } +#line 1352 "dhcp6_parser.cc" + break; + + case 164: // ddns_replace_client_name_value: "when-not-present" +#line 704 "dhcp6_parser.yy" + { + yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location))); + } +#line 1360 "dhcp6_parser.cc" + break; + + case 165: // ddns_replace_client_name_value: "boolean" +#line 707 "dhcp6_parser.yy" + { + error(yystack_[0].location, "boolean values for the replace-client-name are " + "no longer supported"); + } +#line 1369 "dhcp6_parser.cc" + break; + + case 166: // $@23: %empty +#line 713 "dhcp6_parser.yy" + { + ctx.unique("ddns-generated-prefix", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 1378 "dhcp6_parser.cc" + break; + + case 167: // ddns_generated_prefix: "ddns-generated-prefix" $@23 ":" "constant string" +#line 716 "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); + ctx.leave(); +} +#line 1388 "dhcp6_parser.cc" + break; + + case 168: // $@24: %empty +#line 722 "dhcp6_parser.yy" + { + ctx.unique("ddns-qualifying-suffix", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 1397 "dhcp6_parser.cc" + break; + + case 169: // ddns_qualifying_suffix: "ddns-qualifying-suffix" $@24 ":" "constant string" +#line 725 "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); + ctx.leave(); +} +#line 1407 "dhcp6_parser.cc" + break; + + case 170: // ddns_update_on_renew: "ddns-update-on-renew" ":" "boolean" +#line 731 "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))); + ctx.stack_.back()->set("ddns-update-on-renew", b); +} +#line 1417 "dhcp6_parser.cc" + break; + + case 171: // ddns_use_conflict_resolution: "ddns-use-conflict-resolution" ":" "boolean" +#line 737 "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))); + ctx.stack_.back()->set("ddns-use-conflict-resolution", b); +} +#line 1427 "dhcp6_parser.cc" + break; + + case 172: // ddns_ttl_percent: "ddns-ttl-percent" ":" "floating point" +#line 743 "dhcp6_parser.yy" + { + ctx.unique("ddns-ttl-percent", ctx.loc2pos(yystack_[2].location)); + ElementPtr ttl(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("ddns-ttl-percent", ttl); +} +#line 1437 "dhcp6_parser.cc" + break; + + case 173: // $@25: %empty +#line 749 "dhcp6_parser.yy" + { + ctx.unique("hostname-char-set", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 1446 "dhcp6_parser.cc" + break; + + case 174: // hostname_char_set: "hostname-char-set" $@25 ":" "constant string" +#line 752 "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 1456 "dhcp6_parser.cc" + break; + + case 175: // $@26: %empty +#line 758 "dhcp6_parser.yy" + { + ctx.unique("hostname-char-replacement", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 1465 "dhcp6_parser.cc" + break; + + case 176: // hostname_char_replacement: "hostname-char-replacement" $@26 ":" "constant string" +#line 761 "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 1475 "dhcp6_parser.cc" + break; + + case 177: // store_extended_info: "store-extended-info" ":" "boolean" +#line 767 "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))); + ctx.stack_.back()->set("store-extended-info", b); +} +#line 1485 "dhcp6_parser.cc" + break; + + case 178: // statistic_default_sample_count: "statistic-default-sample-count" ":" "integer" +#line 773 "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))); + ctx.stack_.back()->set("statistic-default-sample-count", count); +} +#line 1495 "dhcp6_parser.cc" + break; + + case 179: // statistic_default_sample_age: "statistic-default-sample-age" ":" "integer" +#line 779 "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))); + ctx.stack_.back()->set("statistic-default-sample-age", age); +} +#line 1505 "dhcp6_parser.cc" + break; + + case 180: // $@27: %empty +#line 785 "dhcp6_parser.yy" + { + ctx.unique("server-tag", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 1514 "dhcp6_parser.cc" + break; + + case 181: // server_tag: "server-tag" $@27 ":" "constant string" +#line 788 "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); + ctx.leave(); +} +#line 1524 "dhcp6_parser.cc" + break; + + case 182: // parked_packet_limit: "parked-packet-limit" ":" "integer" +#line 794 "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))); + ctx.stack_.back()->set("parked-packet-limit", ppl); +} +#line 1534 "dhcp6_parser.cc" + break; + + case 183: // $@28: %empty +#line 800 "dhcp6_parser.yy" + { + ctx.unique("allocator", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 1543 "dhcp6_parser.cc" + break; + + case 184: // allocator: "allocator" $@28 ":" "constant string" +#line 803 "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 1553 "dhcp6_parser.cc" + break; + + case 185: // $@29: %empty +#line 809 "dhcp6_parser.yy" + { + ctx.unique("pd-allocator", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 1562 "dhcp6_parser.cc" + break; + + case 186: // pd_allocator: "pd-allocator" $@29 ":" "constant string" +#line 812 "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 1572 "dhcp6_parser.cc" + break; + + case 187: // early_global_reservations_lookup: "early-global-reservations-lookup" ":" "boolean" +#line 818 "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 1582 "dhcp6_parser.cc" + break; + + case 188: // ip_reservations_unique: "ip-reservations-unique" ":" "boolean" +#line 824 "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 1592 "dhcp6_parser.cc" + break; + + case 189: // reservations_lookup_first: "reservations-lookup-first" ":" "boolean" +#line 830 "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 1602 "dhcp6_parser.cc" + break; + + case 190: // $@30: %empty +#line 836 "dhcp6_parser.yy" + { + ctx.unique("interfaces-config", ctx.loc2pos(yystack_[0].location)); + ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("interfaces-config", i); + ctx.stack_.push_back(i); + ctx.enter(ctx.INTERFACES_CONFIG); +} +#line 1614 "dhcp6_parser.cc" + break; + + case 191: // interfaces_config: "interfaces-config" $@30 ":" "{" interfaces_config_params "}" +#line 842 "dhcp6_parser.yy" + { + // No interfaces config param is required + ctx.stack_.pop_back(); + ctx.leave(); +} +#line 1624 "dhcp6_parser.cc" + break; + + case 192: // $@31: %empty +#line 848 "dhcp6_parser.yy" + { + // Parse the interfaces-config map + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.push_back(m); +} +#line 1634 "dhcp6_parser.cc" + break; + + case 193: // sub_interfaces6: "{" $@31 interfaces_config_params "}" +#line 852 "dhcp6_parser.yy" + { + // No interfaces config param is required + // parsing completed +} +#line 1643 "dhcp6_parser.cc" + break; + + case 196: // interfaces_config_params: interfaces_config_params "," +#line 859 "dhcp6_parser.yy" + { + ctx.warnAboutExtraCommas(yystack_[0].location); + } +#line 1651 "dhcp6_parser.cc" + break; + + case 205: // $@32: %empty +#line 874 "dhcp6_parser.yy" + { + ctx.unique("interfaces", ctx.loc2pos(yystack_[0].location)); + ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("interfaces", l); + ctx.stack_.push_back(l); + ctx.enter(ctx.NO_KEYWORD); +} +#line 1663 "dhcp6_parser.cc" + break; + + case 206: // interfaces_list: "interfaces" $@32 ":" list_strings +#line 880 "dhcp6_parser.yy" + { + ctx.stack_.pop_back(); + ctx.leave(); +} +#line 1672 "dhcp6_parser.cc" + break; + + case 207: // re_detect: "re-detect" ":" "boolean" +#line 885 "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 1682 "dhcp6_parser.cc" + break; + + case 208: // service_sockets_require_all: "service-sockets-require-all" ":" "boolean" +#line 891 "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 1692 "dhcp6_parser.cc" + break; + + case 209: // service_sockets_retry_wait_time: "service-sockets-retry-wait-time" ":" "integer" +#line 897 "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 1702 "dhcp6_parser.cc" + break; + + case 210: // service_sockets_max_retries: "service-sockets-max-retries" ":" "integer" +#line 903 "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 1712 "dhcp6_parser.cc" + break; + + case 211: // $@33: %empty +#line 909 "dhcp6_parser.yy" + { + ctx.unique("lease-database", ctx.loc2pos(yystack_[0].location)); + ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("lease-database", i); + ctx.stack_.push_back(i); + ctx.enter(ctx.LEASE_DATABASE); +} +#line 1724 "dhcp6_parser.cc" + break; + + case 212: // lease_database: "lease-database" $@33 ":" "{" database_map_params "}" +#line 915 "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 1735 "dhcp6_parser.cc" + break; + + case 213: // $@34: %empty +#line 922 "dhcp6_parser.yy" + { + ctx.unique("hosts-database", ctx.loc2pos(yystack_[0].location)); + ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("hosts-database", i); + ctx.stack_.push_back(i); + ctx.enter(ctx.HOSTS_DATABASE); +} +#line 1747 "dhcp6_parser.cc" + break; + + case 214: // hosts_database: "hosts-database" $@34 ":" "{" database_map_params "}" +#line 928 "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 1758 "dhcp6_parser.cc" + break; + + case 215: // $@35: %empty +#line 935 "dhcp6_parser.yy" + { + ctx.unique("hosts-databases", ctx.loc2pos(yystack_[0].location)); + ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("hosts-databases", l); + ctx.stack_.push_back(l); + ctx.enter(ctx.HOSTS_DATABASE); +} +#line 1770 "dhcp6_parser.cc" + break; + + case 216: // hosts_databases: "hosts-databases" $@35 ":" "[" database_list "]" +#line 941 "dhcp6_parser.yy" + { + ctx.stack_.pop_back(); + ctx.leave(); +} +#line 1779 "dhcp6_parser.cc" + break; + + case 221: // not_empty_database_list: not_empty_database_list "," +#line 952 "dhcp6_parser.yy" + { + ctx.warnAboutExtraCommas(yystack_[0].location); + } +#line 1787 "dhcp6_parser.cc" + break; + + case 222: // $@36: %empty +#line 957 "dhcp6_parser.yy" + { + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->add(m); + ctx.stack_.push_back(m); +} +#line 1797 "dhcp6_parser.cc" + break; + + case 223: // database: "{" $@36 database_map_params "}" +#line 961 "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 1807 "dhcp6_parser.cc" + break; + + case 226: // database_map_params: database_map_params "," +#line 969 "dhcp6_parser.yy" + { + ctx.warnAboutExtraCommas(yystack_[0].location); + } +#line 1815 "dhcp6_parser.cc" + break; + + case 249: // $@37: %empty +#line 998 "dhcp6_parser.yy" + { + ctx.unique("type", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.DATABASE_TYPE); +} +#line 1824 "dhcp6_parser.cc" + break; + + case 250: // database_type: "type" $@37 ":" db_type +#line 1001 "dhcp6_parser.yy" + { + ctx.stack_.back()->set("type", yystack_[0].value.as < ElementPtr > ()); + ctx.leave(); +} +#line 1833 "dhcp6_parser.cc" + break; + + case 251: // db_type: "memfile" +#line 1006 "dhcp6_parser.yy" + { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("memfile", ctx.loc2pos(yystack_[0].location))); } +#line 1839 "dhcp6_parser.cc" + break; + + case 252: // db_type: "mysql" +#line 1007 "dhcp6_parser.yy" + { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("mysql", ctx.loc2pos(yystack_[0].location))); } +#line 1845 "dhcp6_parser.cc" + break; + + case 253: // db_type: "postgresql" +#line 1008 "dhcp6_parser.yy" + { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("postgresql", ctx.loc2pos(yystack_[0].location))); } +#line 1851 "dhcp6_parser.cc" + break; + + case 254: // $@38: %empty +#line 1011 "dhcp6_parser.yy" + { + ctx.unique("user", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 1860 "dhcp6_parser.cc" + break; + + case 255: // user: "user" $@38 ":" "constant string" +#line 1014 "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 1870 "dhcp6_parser.cc" + break; + + case 256: // $@39: %empty +#line 1020 "dhcp6_parser.yy" + { + ctx.unique("password", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 1879 "dhcp6_parser.cc" + break; + + case 257: // password: "password" $@39 ":" "constant string" +#line 1023 "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 1889 "dhcp6_parser.cc" + break; + + case 258: // $@40: %empty +#line 1029 "dhcp6_parser.yy" + { + ctx.unique("host", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 1898 "dhcp6_parser.cc" + break; + + case 259: // host: "host" $@40 ":" "constant string" +#line 1032 "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 1908 "dhcp6_parser.cc" + break; + + case 260: // port: "port" ":" "integer" +#line 1038 "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 1918 "dhcp6_parser.cc" + break; + + case 261: // $@41: %empty +#line 1044 "dhcp6_parser.yy" + { + ctx.unique("name", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 1927 "dhcp6_parser.cc" + break; + + case 262: // name: "name" $@41 ":" "constant string" +#line 1047 "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 1937 "dhcp6_parser.cc" + break; + + case 263: // persist: "persist" ":" "boolean" +#line 1053 "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 1947 "dhcp6_parser.cc" + break; + + case 264: // lfc_interval: "lfc-interval" ":" "integer" +#line 1059 "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 1957 "dhcp6_parser.cc" + break; + + case 265: // readonly: "readonly" ":" "boolean" +#line 1065 "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 1967 "dhcp6_parser.cc" + break; + + case 266: // connect_timeout: "connect-timeout" ":" "integer" +#line 1071 "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 1977 "dhcp6_parser.cc" + break; + + case 267: // read_timeout: "read-timeout" ":" "integer" +#line 1077 "dhcp6_parser.yy" + { + ctx.unique("read-timeout", ctx.loc2pos(yystack_[2].location)); + ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("read-timeout", n); +} +#line 1987 "dhcp6_parser.cc" + break; + + case 268: // write_timeout: "write-timeout" ":" "integer" +#line 1083 "dhcp6_parser.yy" + { + ctx.unique("write-timeout", ctx.loc2pos(yystack_[2].location)); + ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("write-timeout", n); +} +#line 1997 "dhcp6_parser.cc" + break; + + case 269: // tcp_user_timeout: "tcp-user-timeout" ":" "integer" +#line 1089 "dhcp6_parser.yy" + { + ctx.unique("tcp-user-timeout", ctx.loc2pos(yystack_[2].location)); + ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("tcp-user-timeout", n); +} +#line 2007 "dhcp6_parser.cc" + break; + + case 270: // reconnect_wait_time: "reconnect-wait-time" ":" "integer" +#line 1096 "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 2017 "dhcp6_parser.cc" + break; + + case 271: // $@42: %empty +#line 1102 "dhcp6_parser.yy" + { + ctx.unique("on-fail", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.DATABASE_ON_FAIL); +} +#line 2026 "dhcp6_parser.cc" + break; + + case 272: // on_fail: "on-fail" $@42 ":" on_fail_mode +#line 1105 "dhcp6_parser.yy" + { + ctx.stack_.back()->set("on-fail", yystack_[0].value.as < ElementPtr > ()); + ctx.leave(); +} +#line 2035 "dhcp6_parser.cc" + break; + + case 273: // on_fail_mode: "stop-retry-exit" +#line 1110 "dhcp6_parser.yy" + { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("stop-retry-exit", ctx.loc2pos(yystack_[0].location))); } +#line 2041 "dhcp6_parser.cc" + break; + + case 274: // on_fail_mode: "serve-retry-exit" +#line 1111 "dhcp6_parser.yy" + { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("serve-retry-exit", ctx.loc2pos(yystack_[0].location))); } +#line 2047 "dhcp6_parser.cc" + break; + + case 275: // on_fail_mode: "serve-retry-continue" +#line 1112 "dhcp6_parser.yy" + { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("serve-retry-continue", ctx.loc2pos(yystack_[0].location))); } +#line 2053 "dhcp6_parser.cc" + break; + + case 276: // max_row_errors: "max-row-errors" ":" "integer" +#line 1115 "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 2063 "dhcp6_parser.cc" + break; + + case 277: // max_reconnect_tries: "max-reconnect-tries" ":" "integer" +#line 1121 "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 2073 "dhcp6_parser.cc" + break; + + case 278: // $@43: %empty +#line 1127 "dhcp6_parser.yy" + { + ctx.unique("trust-anchor", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 2082 "dhcp6_parser.cc" + break; + + case 279: // trust_anchor: "trust-anchor" $@43 ":" "constant string" +#line 1130 "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 2092 "dhcp6_parser.cc" + break; + + case 280: // $@44: %empty +#line 1136 "dhcp6_parser.yy" + { + ctx.unique("cert-file", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 2101 "dhcp6_parser.cc" + break; + + case 281: // cert_file: "cert-file" $@44 ":" "constant string" +#line 1139 "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 2111 "dhcp6_parser.cc" + break; + + case 282: // $@45: %empty +#line 1145 "dhcp6_parser.yy" + { + ctx.unique("key-file", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 2120 "dhcp6_parser.cc" + break; + + case 283: // key_file: "key-file" $@45 ":" "constant string" +#line 1148 "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 2130 "dhcp6_parser.cc" + break; + + case 284: // $@46: %empty +#line 1154 "dhcp6_parser.yy" + { + ctx.unique("cipher-list", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 2139 "dhcp6_parser.cc" + break; + + case 285: // cipher_list: "cipher-list" $@46 ":" "constant string" +#line 1157 "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 2149 "dhcp6_parser.cc" + break; + + case 286: // $@47: %empty +#line 1163 "dhcp6_parser.yy" + { + ctx.unique("sanity-checks", ctx.loc2pos(yystack_[0].location)); + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("sanity-checks", m); + ctx.stack_.push_back(m); + ctx.enter(ctx.SANITY_CHECKS); +} +#line 2161 "dhcp6_parser.cc" + break; + + case 287: // sanity_checks: "sanity-checks" $@47 ":" "{" sanity_checks_params "}" +#line 1169 "dhcp6_parser.yy" + { + ctx.stack_.pop_back(); + ctx.leave(); +} +#line 2170 "dhcp6_parser.cc" + break; + + case 290: // sanity_checks_params: sanity_checks_params "," +#line 1176 "dhcp6_parser.yy" + { + ctx.warnAboutExtraCommas(yystack_[0].location); + } +#line 2178 "dhcp6_parser.cc" + break; + + case 293: // $@48: %empty +#line 1185 "dhcp6_parser.yy" + { + ctx.unique("lease-checks", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 2187 "dhcp6_parser.cc" + break; + + case 294: // lease_checks: "lease-checks" $@48 ":" "constant string" +#line 1188 "dhcp6_parser.yy" + { + + if ( (string(yystack_[0].value.as < std::string > ()) == "none") || + (string(yystack_[0].value.as < std::string > ()) == "warn") || + (string(yystack_[0].value.as < std::string > ()) == "fix") || + (string(yystack_[0].value.as < std::string > ()) == "fix-del") || + (string(yystack_[0].value.as < std::string > ()) == "del")) { + ElementPtr user(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("lease-checks", user); + ctx.leave(); + } else { + error(yystack_[0].location, "Unsupported 'lease-checks value: " + string(yystack_[0].value.as < std::string > ()) + + ", supported values are: none, warn, fix, fix-del, del"); + } +} +#line 2207 "dhcp6_parser.cc" + break; + + case 295: // $@49: %empty +#line 1204 "dhcp6_parser.yy" + { + ctx.unique("extended-info-checks", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 2216 "dhcp6_parser.cc" + break; + + case 296: // extended_info_checks: "extended-info-checks" $@49 ":" "constant string" +#line 1207 "dhcp6_parser.yy" + { + + if ( (string(yystack_[0].value.as < std::string > ()) == "none") || + (string(yystack_[0].value.as < std::string > ()) == "fix") || + (string(yystack_[0].value.as < std::string > ()) == "strict") || + (string(yystack_[0].value.as < std::string > ()) == "pedantic")) { + ElementPtr user(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("extended-info-checks", user); + ctx.leave(); + } else { + error(yystack_[0].location, "Unsupported 'extended-info-checks value: " + string(yystack_[0].value.as < std::string > ()) + + ", supported values are: none, fix, strict, pedantic"); + } +} +#line 2235 "dhcp6_parser.cc" + break; + + case 297: // $@50: %empty +#line 1222 "dhcp6_parser.yy" + { + ctx.unique("mac-sources", ctx.loc2pos(yystack_[0].location)); + ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("mac-sources", l); + ctx.stack_.push_back(l); + ctx.enter(ctx.MAC_SOURCES); +} +#line 2247 "dhcp6_parser.cc" + break; + + case 298: // mac_sources: "mac-sources" $@50 ":" "[" mac_sources_list "]" +#line 1228 "dhcp6_parser.yy" + { + ctx.stack_.pop_back(); + ctx.leave(); +} +#line 2256 "dhcp6_parser.cc" + break; + + case 301: // mac_sources_list: mac_sources_list "," +#line 1235 "dhcp6_parser.yy" + { + ctx.warnAboutExtraCommas(yystack_[0].location); + } +#line 2264 "dhcp6_parser.cc" + break; + + case 304: // duid_id: "duid" +#line 1244 "dhcp6_parser.yy" + { + ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->add(duid); +} +#line 2273 "dhcp6_parser.cc" + break; + + case 305: // string_id: "constant string" +#line 1249 "dhcp6_parser.yy" + { + ElementPtr duid(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->add(duid); +} +#line 2282 "dhcp6_parser.cc" + break; + + case 306: // $@51: %empty +#line 1254 "dhcp6_parser.yy" + { + ctx.unique("host-reservation-identifiers", ctx.loc2pos(yystack_[0].location)); + ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("host-reservation-identifiers", l); + ctx.stack_.push_back(l); + ctx.enter(ctx.HOST_RESERVATION_IDENTIFIERS); +} +#line 2294 "dhcp6_parser.cc" + break; + + case 307: // host_reservation_identifiers: "host-reservation-identifiers" $@51 ":" "[" host_reservation_identifiers_list "]" +#line 1260 "dhcp6_parser.yy" + { + ctx.stack_.pop_back(); + ctx.leave(); +} +#line 2303 "dhcp6_parser.cc" + break; + + case 310: // host_reservation_identifiers_list: host_reservation_identifiers_list "," +#line 1267 "dhcp6_parser.yy" + { + ctx.warnAboutExtraCommas(yystack_[0].location); + } +#line 2311 "dhcp6_parser.cc" + break; + + case 314: // hw_address_id: "hw-address" +#line 1277 "dhcp6_parser.yy" + { + ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->add(hwaddr); +} +#line 2320 "dhcp6_parser.cc" + break; + + case 315: // flex_id: "flex-id" +#line 1282 "dhcp6_parser.yy" + { + ElementPtr flex_id(new StringElement("flex-id", ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->add(flex_id); +} +#line 2329 "dhcp6_parser.cc" + break; + + case 316: // $@52: %empty +#line 1289 "dhcp6_parser.yy" + { + ctx.unique("relay-supplied-options", ctx.loc2pos(yystack_[0].location)); + ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("relay-supplied-options", l); + ctx.stack_.push_back(l); + ctx.enter(ctx.NO_KEYWORD); +} +#line 2341 "dhcp6_parser.cc" + break; + + case 317: // relay_supplied_options: "relay-supplied-options" $@52 ":" "[" list_content "]" +#line 1295 "dhcp6_parser.yy" + { + ctx.stack_.pop_back(); + ctx.leave(); +} +#line 2350 "dhcp6_parser.cc" + break; + + case 318: // $@53: %empty +#line 1302 "dhcp6_parser.yy" + { + ctx.unique("multi-threading", ctx.loc2pos(yystack_[0].location)); + ElementPtr mt(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("multi-threading", mt); + ctx.stack_.push_back(mt); + ctx.enter(ctx.DHCP_MULTI_THREADING); +} +#line 2362 "dhcp6_parser.cc" + break; + + case 319: // dhcp_multi_threading: "multi-threading" $@53 ":" "{" multi_threading_params "}" +#line 1308 "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 2373 "dhcp6_parser.cc" + break; + + case 322: // multi_threading_params: multi_threading_params "," +#line 1317 "dhcp6_parser.yy" + { + ctx.warnAboutExtraCommas(yystack_[0].location); + } +#line 2381 "dhcp6_parser.cc" + break; + + case 329: // enable_multi_threading: "enable-multi-threading" ":" "boolean" +#line 1330 "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 2391 "dhcp6_parser.cc" + break; + + case 330: // thread_pool_size: "thread-pool-size" ":" "integer" +#line 1336 "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 2401 "dhcp6_parser.cc" + break; + + case 331: // packet_queue_size: "packet-queue-size" ":" "integer" +#line 1342 "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 2411 "dhcp6_parser.cc" + break; + + case 332: // $@54: %empty +#line 1348 "dhcp6_parser.yy" + { + ctx.unique("hooks-libraries", ctx.loc2pos(yystack_[0].location)); + ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("hooks-libraries", l); + ctx.stack_.push_back(l); + ctx.enter(ctx.HOOKS_LIBRARIES); +} +#line 2423 "dhcp6_parser.cc" + break; + + case 333: // hooks_libraries: "hooks-libraries" $@54 ":" "[" hooks_libraries_list "]" +#line 1354 "dhcp6_parser.yy" + { + ctx.stack_.pop_back(); + ctx.leave(); +} +#line 2432 "dhcp6_parser.cc" + break; + + case 338: // not_empty_hooks_libraries_list: not_empty_hooks_libraries_list "," +#line 1365 "dhcp6_parser.yy" + { + ctx.warnAboutExtraCommas(yystack_[0].location); + } +#line 2440 "dhcp6_parser.cc" + break; + + case 339: // $@55: %empty +#line 1370 "dhcp6_parser.yy" + { + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->add(m); + ctx.stack_.push_back(m); +} +#line 2450 "dhcp6_parser.cc" + break; + + case 340: // hooks_library: "{" $@55 hooks_params "}" +#line 1374 "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 2460 "dhcp6_parser.cc" + break; + + case 341: // $@56: %empty +#line 1380 "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 2470 "dhcp6_parser.cc" + break; + + case 342: // sub_hooks_library: "{" $@56 hooks_params "}" +#line 1384 "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 2480 "dhcp6_parser.cc" + break; + + case 345: // hooks_params: hooks_params "," +#line 1392 "dhcp6_parser.yy" + { + ctx.warnAboutExtraCommas(yystack_[0].location); + } +#line 2488 "dhcp6_parser.cc" + break; + + case 349: // $@57: %empty +#line 1402 "dhcp6_parser.yy" + { + ctx.unique("library", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 2497 "dhcp6_parser.cc" + break; + + case 350: // library: "library" $@57 ":" "constant string" +#line 1405 "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 2507 "dhcp6_parser.cc" + break; + + case 351: // $@58: %empty +#line 1411 "dhcp6_parser.yy" + { + ctx.unique("parameters", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 2516 "dhcp6_parser.cc" + break; + + case 352: // parameters: "parameters" $@58 ":" map_value +#line 1414 "dhcp6_parser.yy" + { + ctx.stack_.back()->set("parameters", yystack_[0].value.as < ElementPtr > ()); + ctx.leave(); +} +#line 2525 "dhcp6_parser.cc" + break; + + case 353: // $@59: %empty +#line 1420 "dhcp6_parser.yy" + { + ctx.unique("expired-leases-processing", ctx.loc2pos(yystack_[0].location)); + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("expired-leases-processing", m); + ctx.stack_.push_back(m); + ctx.enter(ctx.EXPIRED_LEASES_PROCESSING); +} +#line 2537 "dhcp6_parser.cc" + break; + + case 354: // expired_leases_processing: "expired-leases-processing" $@59 ":" "{" expired_leases_params "}" +#line 1426 "dhcp6_parser.yy" + { + // No expired lease parameter is required + ctx.stack_.pop_back(); + ctx.leave(); +} +#line 2547 "dhcp6_parser.cc" + break; + + case 357: // expired_leases_params: expired_leases_params "," +#line 1434 "dhcp6_parser.yy" + { + ctx.warnAboutExtraCommas(yystack_[0].location); + } +#line 2555 "dhcp6_parser.cc" + break; + + case 364: // reclaim_timer_wait_time: "reclaim-timer-wait-time" ":" "integer" +#line 1447 "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 2565 "dhcp6_parser.cc" + break; + + case 365: // flush_reclaimed_timer_wait_time: "flush-reclaimed-timer-wait-time" ":" "integer" +#line 1453 "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 2575 "dhcp6_parser.cc" + break; + + case 366: // hold_reclaimed_time: "hold-reclaimed-time" ":" "integer" +#line 1459 "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 2585 "dhcp6_parser.cc" + break; + + case 367: // max_reclaim_leases: "max-reclaim-leases" ":" "integer" +#line 1465 "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 2595 "dhcp6_parser.cc" + break; + + case 368: // max_reclaim_time: "max-reclaim-time" ":" "integer" +#line 1471 "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 2605 "dhcp6_parser.cc" + break; + + case 369: // unwarned_reclaim_cycles: "unwarned-reclaim-cycles" ":" "integer" +#line 1477 "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 2615 "dhcp6_parser.cc" + break; + + case 370: // $@60: %empty +#line 1486 "dhcp6_parser.yy" + { + ctx.unique("subnet6", ctx.loc2pos(yystack_[0].location)); + ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("subnet6", l); + ctx.stack_.push_back(l); + ctx.enter(ctx.SUBNET6); +} +#line 2627 "dhcp6_parser.cc" + break; + + case 371: // subnet6_list: "subnet6" $@60 ":" "[" subnet6_list_content "]" +#line 1492 "dhcp6_parser.yy" + { + ctx.stack_.pop_back(); + ctx.leave(); +} +#line 2636 "dhcp6_parser.cc" + break; + + case 376: // not_empty_subnet6_list: not_empty_subnet6_list "," +#line 1506 "dhcp6_parser.yy" + { + ctx.warnAboutExtraCommas(yystack_[0].location); + } +#line 2644 "dhcp6_parser.cc" + break; + + case 377: // $@61: %empty +#line 1515 "dhcp6_parser.yy" + { + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->add(m); + ctx.stack_.push_back(m); +} +#line 2654 "dhcp6_parser.cc" + break; + + case 378: // subnet6: "{" $@61 subnet6_params "}" +#line 1519 "dhcp6_parser.yy" + { + // Once we reached this place, the subnet parsing is now complete. + // If we want to, we can implement default values here. + // In particular we can do things like this: + // if (!ctx.stack_.back()->get("interface")) { + // ctx.stack_.back()->set("interface", StringElement("loopback")); + // } + // + // We can also stack up one level (Dhcp6) and copy over whatever + // global parameters we want to: + // if (!ctx.stack_.back()->get("renew-timer")) { + // ElementPtr renew = ctx_stack_[...].get("renew-timer"); + // if (renew) { + // ctx.stack_.back()->set("renew-timer", renew); + // } + // } + + // The subnet subnet6 parameter is required + ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); + ctx.stack_.pop_back(); +} +#line 2680 "dhcp6_parser.cc" + break; + + case 379: // $@62: %empty +#line 1541 "dhcp6_parser.yy" + { + // Parse the subnet6 list entry map + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.push_back(m); +} +#line 2690 "dhcp6_parser.cc" + break; + + case 380: // sub_subnet6: "{" $@62 subnet6_params "}" +#line 1545 "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 2700 "dhcp6_parser.cc" + break; + + case 383: // subnet6_params: subnet6_params "," +#line 1554 "dhcp6_parser.yy" + { + ctx.warnAboutExtraCommas(yystack_[0].location); + } +#line 2708 "dhcp6_parser.cc" + break; + + case 430: // $@63: %empty +#line 1608 "dhcp6_parser.yy" + { + ctx.unique("subnet", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 2717 "dhcp6_parser.cc" + break; + + case 431: // subnet: "subnet" $@63 ":" "constant string" +#line 1611 "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 2727 "dhcp6_parser.cc" + break; + + case 432: // $@64: %empty +#line 1617 "dhcp6_parser.yy" + { + ctx.unique("interface", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 2736 "dhcp6_parser.cc" + break; + + case 433: // interface: "interface" $@64 ":" "constant string" +#line 1620 "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 2746 "dhcp6_parser.cc" + break; + + case 434: // $@65: %empty +#line 1626 "dhcp6_parser.yy" + { + ctx.unique("interface-id", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 2755 "dhcp6_parser.cc" + break; + + case 435: // interface_id: "interface-id" $@65 ":" "constant string" +#line 1629 "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 2765 "dhcp6_parser.cc" + break; + + case 436: // $@66: %empty +#line 1635 "dhcp6_parser.yy" + { + ctx.unique("client-class", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 2774 "dhcp6_parser.cc" + break; + + case 437: // client_class: "client-class" $@66 ":" "constant string" +#line 1638 "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 2784 "dhcp6_parser.cc" + break; + + case 438: // $@67: %empty +#line 1644 "dhcp6_parser.yy" + { + ctx.unique("require-client-classes", ctx.loc2pos(yystack_[0].location)); + ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("require-client-classes", c); + ctx.stack_.push_back(c); + ctx.enter(ctx.NO_KEYWORD); +} +#line 2796 "dhcp6_parser.cc" + break; + + case 439: // require_client_classes: "require-client-classes" $@67 ":" list_strings +#line 1650 "dhcp6_parser.yy" + { + ctx.stack_.pop_back(); + ctx.leave(); +} +#line 2805 "dhcp6_parser.cc" + break; + + case 440: // reservations_global: "reservations-global" ":" "boolean" +#line 1655 "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 2815 "dhcp6_parser.cc" + break; + + case 441: // reservations_in_subnet: "reservations-in-subnet" ":" "boolean" +#line 1661 "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 2825 "dhcp6_parser.cc" + break; + + case 442: // reservations_out_of_pool: "reservations-out-of-pool" ":" "boolean" +#line 1667 "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 2835 "dhcp6_parser.cc" + break; + + case 443: // $@68: %empty +#line 1673 "dhcp6_parser.yy" + { + ctx.unique("reservation-mode", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.RESERVATION_MODE); +} +#line 2844 "dhcp6_parser.cc" + break; + + case 444: // reservation_mode: "reservation-mode" $@68 ":" hr_mode +#line 1676 "dhcp6_parser.yy" + { + ctx.stack_.back()->set("reservation-mode", yystack_[0].value.as < ElementPtr > ()); + ctx.leave(); +} +#line 2853 "dhcp6_parser.cc" + break; + + case 445: // hr_mode: "disabled" +#line 1681 "dhcp6_parser.yy" + { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("disabled", ctx.loc2pos(yystack_[0].location))); } +#line 2859 "dhcp6_parser.cc" + break; + + case 446: // hr_mode: "out-of-pool" +#line 1682 "dhcp6_parser.yy" + { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(yystack_[0].location))); } +#line 2865 "dhcp6_parser.cc" + break; + + case 447: // hr_mode: "global" +#line 1683 "dhcp6_parser.yy" + { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("global", ctx.loc2pos(yystack_[0].location))); } +#line 2871 "dhcp6_parser.cc" + break; + + case 448: // hr_mode: "all" +#line 1684 "dhcp6_parser.yy" + { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("all", ctx.loc2pos(yystack_[0].location))); } +#line 2877 "dhcp6_parser.cc" + break; + + case 449: // id: "id" ":" "integer" +#line 1687 "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 2887 "dhcp6_parser.cc" + break; + + case 450: // rapid_commit: "rapid-commit" ":" "boolean" +#line 1693 "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 2897 "dhcp6_parser.cc" + break; + + case 451: // $@69: %empty +#line 1701 "dhcp6_parser.yy" + { + ctx.unique("shared-networks", ctx.loc2pos(yystack_[0].location)); + ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("shared-networks", l); + ctx.stack_.push_back(l); + ctx.enter(ctx.SHARED_NETWORK); +} +#line 2909 "dhcp6_parser.cc" + break; + + case 452: // shared_networks: "shared-networks" $@69 ":" "[" shared_networks_content "]" +#line 1707 "dhcp6_parser.yy" + { + ctx.stack_.pop_back(); + ctx.leave(); +} +#line 2918 "dhcp6_parser.cc" + break; + + case 457: // shared_networks_list: shared_networks_list "," +#line 1720 "dhcp6_parser.yy" + { + ctx.warnAboutExtraCommas(yystack_[0].location); + } +#line 2926 "dhcp6_parser.cc" + break; + + case 458: // $@70: %empty +#line 1725 "dhcp6_parser.yy" + { + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->add(m); + ctx.stack_.push_back(m); +} +#line 2936 "dhcp6_parser.cc" + break; + + case 459: // shared_network: "{" $@70 shared_network_params "}" +#line 1729 "dhcp6_parser.yy" + { + ctx.stack_.pop_back(); +} +#line 2944 "dhcp6_parser.cc" + break; + + case 462: // shared_network_params: shared_network_params "," +#line 1735 "dhcp6_parser.yy" + { + ctx.warnAboutExtraCommas(yystack_[0].location); + } +#line 2952 "dhcp6_parser.cc" + break; + + case 506: // $@71: %empty +#line 1789 "dhcp6_parser.yy" + { + ctx.unique("option-def", ctx.loc2pos(yystack_[0].location)); + ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("option-def", l); + ctx.stack_.push_back(l); + ctx.enter(ctx.OPTION_DEF); +} +#line 2964 "dhcp6_parser.cc" + break; + + case 507: // option_def_list: "option-def" $@71 ":" "[" option_def_list_content "]" +#line 1795 "dhcp6_parser.yy" + { + ctx.stack_.pop_back(); + ctx.leave(); +} +#line 2973 "dhcp6_parser.cc" + break; + + case 508: // $@72: %empty +#line 1803 "dhcp6_parser.yy" + { + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.push_back(m); +} +#line 2982 "dhcp6_parser.cc" + break; + + case 509: // sub_option_def_list: "{" $@72 option_def_list "}" +#line 1806 "dhcp6_parser.yy" + { + // parsing completed +} +#line 2990 "dhcp6_parser.cc" + break; + + case 514: // not_empty_option_def_list: not_empty_option_def_list "," +#line 1818 "dhcp6_parser.yy" + { + ctx.warnAboutExtraCommas(yystack_[0].location); + } +#line 2998 "dhcp6_parser.cc" + break; + + case 515: // $@73: %empty +#line 1825 "dhcp6_parser.yy" + { + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->add(m); + ctx.stack_.push_back(m); +} +#line 3008 "dhcp6_parser.cc" + break; + + case 516: // option_def_entry: "{" $@73 option_def_params "}" +#line 1829 "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)); + ctx.require("code", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); + ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); + ctx.stack_.pop_back(); +} +#line 3020 "dhcp6_parser.cc" + break; + + case 517: // $@74: %empty +#line 1840 "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 3030 "dhcp6_parser.cc" + break; + + case 518: // sub_option_def: "{" $@74 option_def_params "}" +#line 1844 "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)); + ctx.require("code", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); + ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); + // parsing completed +} +#line 3042 "dhcp6_parser.cc" + break; + + case 523: // not_empty_option_def_params: not_empty_option_def_params "," +#line 1860 "dhcp6_parser.yy" + { + ctx.warnAboutExtraCommas(yystack_[0].location); + } +#line 3050 "dhcp6_parser.cc" + break; + + case 535: // code: "code" ":" "integer" +#line 1879 "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 3060 "dhcp6_parser.cc" + break; + + case 537: // $@75: %empty +#line 1887 "dhcp6_parser.yy" + { + ctx.unique("type", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 3069 "dhcp6_parser.cc" + break; + + case 538: // option_def_type: "type" $@75 ":" "constant string" +#line 1890 "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 3079 "dhcp6_parser.cc" + break; + + case 539: // $@76: %empty +#line 1896 "dhcp6_parser.yy" + { + ctx.unique("record-types", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 3088 "dhcp6_parser.cc" + break; + + case 540: // option_def_record_types: "record-types" $@76 ":" "constant string" +#line 1899 "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 3098 "dhcp6_parser.cc" + break; + + case 541: // $@77: %empty +#line 1905 "dhcp6_parser.yy" + { + ctx.unique("space", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 3107 "dhcp6_parser.cc" + break; + + case 542: // space: "space" $@77 ":" "constant string" +#line 1908 "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 3117 "dhcp6_parser.cc" + break; + + case 544: // $@78: %empty +#line 1916 "dhcp6_parser.yy" + { + ctx.unique("encapsulate", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 3126 "dhcp6_parser.cc" + break; + + case 545: // option_def_encapsulate: "encapsulate" $@78 ":" "constant string" +#line 1919 "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 3136 "dhcp6_parser.cc" + break; + + case 546: // option_def_array: "array" ":" "boolean" +#line 1925 "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 3146 "dhcp6_parser.cc" + break; + + case 547: // $@79: %empty +#line 1935 "dhcp6_parser.yy" + { + ctx.unique("option-data", ctx.loc2pos(yystack_[0].location)); + ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("option-data", l); + ctx.stack_.push_back(l); + ctx.enter(ctx.OPTION_DATA); +} +#line 3158 "dhcp6_parser.cc" + break; + + case 548: // option_data_list: "option-data" $@79 ":" "[" option_data_list_content "]" +#line 1941 "dhcp6_parser.yy" + { + ctx.stack_.pop_back(); + ctx.leave(); +} +#line 3167 "dhcp6_parser.cc" + break; + + case 553: // not_empty_option_data_list: not_empty_option_data_list "," +#line 1956 "dhcp6_parser.yy" + { + ctx.warnAboutExtraCommas(yystack_[0].location); + } +#line 3175 "dhcp6_parser.cc" + break; + + case 554: // $@80: %empty +#line 1963 "dhcp6_parser.yy" + { + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->add(m); + ctx.stack_.push_back(m); +} +#line 3185 "dhcp6_parser.cc" + break; + + case 555: // option_data_entry: "{" $@80 option_data_params "}" +#line 1967 "dhcp6_parser.yy" + { + /// @todo: the code or name parameters are required. + ctx.stack_.pop_back(); +} +#line 3194 "dhcp6_parser.cc" + break; + + case 556: // $@81: %empty +#line 1975 "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 3204 "dhcp6_parser.cc" + break; + + case 557: // sub_option_data: "{" $@81 option_data_params "}" +#line 1979 "dhcp6_parser.yy" + { + /// @todo: the code or name parameters are required. + // parsing completed +} +#line 3213 "dhcp6_parser.cc" + break; + + case 562: // not_empty_option_data_params: not_empty_option_data_params "," +#line 1995 "dhcp6_parser.yy" + { + ctx.warnAboutExtraCommas(yystack_[0].location); + } +#line 3221 "dhcp6_parser.cc" + break; + + case 574: // $@82: %empty +#line 2016 "dhcp6_parser.yy" + { + ctx.unique("data", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 3230 "dhcp6_parser.cc" + break; + + case 575: // option_data_data: "data" $@82 ":" "constant string" +#line 2019 "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 3240 "dhcp6_parser.cc" + break; + + case 578: // option_data_csv_format: "csv-format" ":" "boolean" +#line 2029 "dhcp6_parser.yy" + { + ctx.unique("csv-format", ctx.loc2pos(yystack_[2].location)); + ElementPtr csv(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("csv-format", csv); +} +#line 3250 "dhcp6_parser.cc" + break; + + case 579: // option_data_always_send: "always-send" ":" "boolean" +#line 2035 "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 3260 "dhcp6_parser.cc" + break; + + case 580: // option_data_never_send: "never-send" ":" "boolean" +#line 2041 "dhcp6_parser.yy" + { + ctx.unique("never-send", ctx.loc2pos(yystack_[2].location)); + ElementPtr cancel(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("never-send", cancel); +} +#line 3270 "dhcp6_parser.cc" + break; + + case 581: // $@83: %empty +#line 2050 "dhcp6_parser.yy" + { + ctx.unique("pools", ctx.loc2pos(yystack_[0].location)); + ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("pools", l); + ctx.stack_.push_back(l); + ctx.enter(ctx.POOLS); +} +#line 3282 "dhcp6_parser.cc" + break; + + case 582: // pools_list: "pools" $@83 ":" "[" pools_list_content "]" +#line 2056 "dhcp6_parser.yy" + { + ctx.stack_.pop_back(); + ctx.leave(); +} +#line 3291 "dhcp6_parser.cc" + break; + + case 587: // not_empty_pools_list: not_empty_pools_list "," +#line 2069 "dhcp6_parser.yy" + { + ctx.warnAboutExtraCommas(yystack_[0].location); + } +#line 3299 "dhcp6_parser.cc" + break; + + case 588: // $@84: %empty +#line 2074 "dhcp6_parser.yy" + { + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->add(m); + ctx.stack_.push_back(m); +} +#line 3309 "dhcp6_parser.cc" + break; + + case 589: // pool_list_entry: "{" $@84 pool_params "}" +#line 2078 "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 3319 "dhcp6_parser.cc" + break; + + case 590: // $@85: %empty +#line 2084 "dhcp6_parser.yy" + { + // Parse the pool list entry map + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.push_back(m); +} +#line 3329 "dhcp6_parser.cc" + break; + + case 591: // sub_pool6: "{" $@85 pool_params "}" +#line 2088 "dhcp6_parser.yy" + { + // The pool parameter is required. + ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); + // parsing completed +} +#line 3339 "dhcp6_parser.cc" + break; + + case 594: // pool_params: pool_params "," +#line 2096 "dhcp6_parser.yy" + { + ctx.warnAboutExtraCommas(yystack_[0].location); + } +#line 3347 "dhcp6_parser.cc" + break; + + case 603: // $@86: %empty +#line 2111 "dhcp6_parser.yy" + { + ctx.unique("pool", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 3356 "dhcp6_parser.cc" + break; + + case 604: // pool_entry: "pool" $@86 ":" "constant string" +#line 2114 "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 3366 "dhcp6_parser.cc" + break; + + case 605: // pool_id: "pool-id" ":" "integer" +#line 2120 "dhcp6_parser.yy" + { + ctx.unique("pool-id", ctx.loc2pos(yystack_[2].location)); + ElementPtr id(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("pool-id", id); +} +#line 3376 "dhcp6_parser.cc" + break; + + case 606: // $@87: %empty +#line 2126 "dhcp6_parser.yy" + { + ctx.enter(ctx.NO_KEYWORD); +} +#line 3384 "dhcp6_parser.cc" + break; + + case 607: // user_context: "user-context" $@87 ":" map_value +#line 2128 "dhcp6_parser.yy" + { + ElementPtr parent = ctx.stack_.back(); + ElementPtr user_context = yystack_[0].value.as < ElementPtr > (); + ConstElementPtr old = parent->get("user-context"); + + // Handle already existing user context + if (old) { + // Check if it was a comment or a duplicate + if ((old->size() != 1) || !old->contains("comment")) { + std::stringstream msg; + msg << "duplicate user-context entries (previous at " + << old->getPosition().str() << ")"; + error(yystack_[3].location, msg.str()); + } + // Merge the comment + user_context->set("comment", old->get("comment")); + } + + // Set the user context + parent->set("user-context", user_context); + ctx.leave(); +} +#line 3411 "dhcp6_parser.cc" + break; + + case 608: // $@88: %empty +#line 2151 "dhcp6_parser.yy" + { + ctx.enter(ctx.NO_KEYWORD); +} +#line 3419 "dhcp6_parser.cc" + break; + + case 609: // comment: "comment" $@88 ":" "constant string" +#line 2153 "dhcp6_parser.yy" + { + ElementPtr parent = ctx.stack_.back(); + ElementPtr user_context(new MapElement(ctx.loc2pos(yystack_[3].location))); + ElementPtr comment(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + user_context->set("comment", comment); + + // Handle already existing user context + ConstElementPtr old = parent->get("user-context"); + if (old) { + // Check for duplicate comment + if (old->contains("comment")) { + std::stringstream msg; + msg << "duplicate user-context/comment entries (previous at " + << old->getPosition().str() << ")"; + error(yystack_[3].location, msg.str()); + } + // Merge the user context in the comment + merge(user_context, old); + } + + // Set the user context + parent->set("user-context", user_context); + ctx.leave(); +} +#line 3448 "dhcp6_parser.cc" + break; + + case 610: // $@89: %empty +#line 2181 "dhcp6_parser.yy" + { + ctx.unique("pd-pools", ctx.loc2pos(yystack_[0].location)); + ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("pd-pools", l); + ctx.stack_.push_back(l); + ctx.enter(ctx.PD_POOLS); +} +#line 3460 "dhcp6_parser.cc" + break; + + case 611: // pd_pools_list: "pd-pools" $@89 ":" "[" pd_pools_list_content "]" +#line 2187 "dhcp6_parser.yy" + { + ctx.stack_.pop_back(); + ctx.leave(); +} +#line 3469 "dhcp6_parser.cc" + break; + + case 616: // not_empty_pd_pools_list: not_empty_pd_pools_list "," +#line 2200 "dhcp6_parser.yy" + { + ctx.warnAboutExtraCommas(yystack_[0].location); + } +#line 3477 "dhcp6_parser.cc" + break; + + case 617: // $@90: %empty +#line 2205 "dhcp6_parser.yy" + { + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->add(m); + ctx.stack_.push_back(m); +} +#line 3487 "dhcp6_parser.cc" + break; + + case 618: // pd_pool_entry: "{" $@90 pd_pool_params "}" +#line 2209 "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)); + ctx.require("prefix-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); + ctx.require("delegated-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); + ctx.stack_.pop_back(); +} +#line 3499 "dhcp6_parser.cc" + break; + + case 619: // $@91: %empty +#line 2217 "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 3509 "dhcp6_parser.cc" + break; + + case 620: // sub_pd_pool: "{" $@91 pd_pool_params "}" +#line 2221 "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)); + ctx.require("prefix-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); + ctx.require("delegated-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); + // parsing completed +} +#line 3521 "dhcp6_parser.cc" + break; + + case 623: // pd_pool_params: pd_pool_params "," +#line 2231 "dhcp6_parser.yy" + { + ctx.warnAboutExtraCommas(yystack_[0].location); + } +#line 3529 "dhcp6_parser.cc" + break; + + case 635: // $@92: %empty +#line 2249 "dhcp6_parser.yy" + { + ctx.unique("prefix", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 3538 "dhcp6_parser.cc" + break; + + case 636: // pd_prefix: "prefix" $@92 ":" "constant string" +#line 2252 "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 3548 "dhcp6_parser.cc" + break; + + case 637: // pd_prefix_len: "prefix-len" ":" "integer" +#line 2258 "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 3558 "dhcp6_parser.cc" + break; + + case 638: // $@93: %empty +#line 2264 "dhcp6_parser.yy" + { + ctx.unique("excluded-prefix", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 3567 "dhcp6_parser.cc" + break; + + case 639: // excluded_prefix: "excluded-prefix" $@93 ":" "constant string" +#line 2267 "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 3577 "dhcp6_parser.cc" + break; + + case 640: // excluded_prefix_len: "excluded-prefix-len" ":" "integer" +#line 2273 "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 3587 "dhcp6_parser.cc" + break; + + case 641: // pd_delegated_len: "delegated-len" ":" "integer" +#line 2279 "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 3597 "dhcp6_parser.cc" + break; + + case 642: // $@94: %empty +#line 2288 "dhcp6_parser.yy" + { + ctx.unique("reservations", ctx.loc2pos(yystack_[0].location)); + ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("reservations", l); + ctx.stack_.push_back(l); + ctx.enter(ctx.RESERVATIONS); +} +#line 3609 "dhcp6_parser.cc" + break; + + case 643: // reservations: "reservations" $@94 ":" "[" reservations_list "]" +#line 2294 "dhcp6_parser.yy" + { + ctx.stack_.pop_back(); + ctx.leave(); +} +#line 3618 "dhcp6_parser.cc" + break; + + case 648: // not_empty_reservations_list: not_empty_reservations_list "," +#line 2305 "dhcp6_parser.yy" + { + ctx.warnAboutExtraCommas(yystack_[0].location); + } +#line 3626 "dhcp6_parser.cc" + break; + + case 649: // $@95: %empty +#line 2310 "dhcp6_parser.yy" + { + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->add(m); + ctx.stack_.push_back(m); +} +#line 3636 "dhcp6_parser.cc" + break; + + case 650: // reservation: "{" $@95 reservation_params "}" +#line 2314 "dhcp6_parser.yy" + { + /// @todo: an identifier parameter is required. + ctx.stack_.pop_back(); +} +#line 3645 "dhcp6_parser.cc" + break; + + case 651: // $@96: %empty +#line 2319 "dhcp6_parser.yy" + { + // Parse the reservations list entry map + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.push_back(m); +} +#line 3655 "dhcp6_parser.cc" + break; + + case 652: // sub_reservation: "{" $@96 reservation_params "}" +#line 2323 "dhcp6_parser.yy" + { + /// @todo: an identifier parameter is required. + // parsing completed +} +#line 3664 "dhcp6_parser.cc" + break; + + case 657: // not_empty_reservation_params: not_empty_reservation_params "," +#line 2334 "dhcp6_parser.yy" + { + ctx.warnAboutExtraCommas(yystack_[0].location); + } +#line 3672 "dhcp6_parser.cc" + break; + + case 669: // $@97: %empty +#line 2353 "dhcp6_parser.yy" + { + ctx.unique("ip-addresses", ctx.loc2pos(yystack_[0].location)); + ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("ip-addresses", l); + ctx.stack_.push_back(l); + ctx.enter(ctx.NO_KEYWORD); +} +#line 3684 "dhcp6_parser.cc" + break; + + case 670: // ip_addresses: "ip-addresses" $@97 ":" list_strings +#line 2359 "dhcp6_parser.yy" + { + ctx.stack_.pop_back(); + ctx.leave(); +} +#line 3693 "dhcp6_parser.cc" + break; + + case 671: // $@98: %empty +#line 2364 "dhcp6_parser.yy" + { + ctx.unique("prefixes", ctx.loc2pos(yystack_[0].location)); + ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("prefixes", l); + ctx.stack_.push_back(l); + ctx.enter(ctx.NO_KEYWORD); +} +#line 3705 "dhcp6_parser.cc" + break; + + case 672: // prefixes: "prefixes" $@98 ":" list_strings +#line 2370 "dhcp6_parser.yy" + { + ctx.stack_.pop_back(); + ctx.leave(); +} +#line 3714 "dhcp6_parser.cc" + break; + + case 673: // $@99: %empty +#line 2375 "dhcp6_parser.yy" + { + ctx.unique("duid", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 3723 "dhcp6_parser.cc" + break; + + case 674: // duid: "duid" $@99 ":" "constant string" +#line 2378 "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 3733 "dhcp6_parser.cc" + break; + + case 675: // $@100: %empty +#line 2384 "dhcp6_parser.yy" + { + ctx.unique("hw-address", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 3742 "dhcp6_parser.cc" + break; + + case 676: // hw_address: "hw-address" $@100 ":" "constant string" +#line 2387 "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 3752 "dhcp6_parser.cc" + break; + + case 677: // $@101: %empty +#line 2393 "dhcp6_parser.yy" + { + ctx.unique("hostname", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 3761 "dhcp6_parser.cc" + break; + + case 678: // hostname: "hostname" $@101 ":" "constant string" +#line 2396 "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 3771 "dhcp6_parser.cc" + break; + + case 679: // $@102: %empty +#line 2402 "dhcp6_parser.yy" + { + ctx.unique("flex-id", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 3780 "dhcp6_parser.cc" + break; + + case 680: // flex_id_value: "flex-id" $@102 ":" "constant string" +#line 2405 "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 3790 "dhcp6_parser.cc" + break; + + case 681: // $@103: %empty +#line 2411 "dhcp6_parser.yy" + { + ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location)); + ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("client-classes", c); + ctx.stack_.push_back(c); + ctx.enter(ctx.NO_KEYWORD); +} +#line 3802 "dhcp6_parser.cc" + break; + + case 682: // reservation_client_classes: "client-classes" $@103 ":" list_strings +#line 2417 "dhcp6_parser.yy" + { + ctx.stack_.pop_back(); + ctx.leave(); +} +#line 3811 "dhcp6_parser.cc" + break; + + case 683: // $@104: %empty +#line 2425 "dhcp6_parser.yy" + { + ctx.unique("relay", ctx.loc2pos(yystack_[0].location)); + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("relay", m); + ctx.stack_.push_back(m); + ctx.enter(ctx.RELAY); +} +#line 3823 "dhcp6_parser.cc" + break; + + case 684: // relay: "relay" $@104 ":" "{" relay_map "}" +#line 2431 "dhcp6_parser.yy" + { + ctx.stack_.pop_back(); + ctx.leave(); +} +#line 3832 "dhcp6_parser.cc" + break; + + case 687: // $@105: %empty +#line 2440 "dhcp6_parser.yy" + { + ctx.unique("ip-address", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 3841 "dhcp6_parser.cc" + break; + + case 688: // ip_address: "ip-address" $@105 ":" "constant string" +#line 2443 "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 3851 "dhcp6_parser.cc" + break; + + case 689: // $@106: %empty +#line 2452 "dhcp6_parser.yy" + { + ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location)); + ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("client-classes", l); + ctx.stack_.push_back(l); + ctx.enter(ctx.CLIENT_CLASSES); +} +#line 3863 "dhcp6_parser.cc" + break; + + case 690: // client_classes: "client-classes" $@106 ":" "[" client_classes_list "]" +#line 2458 "dhcp6_parser.yy" + { + ctx.stack_.pop_back(); + ctx.leave(); +} +#line 3872 "dhcp6_parser.cc" + break; + + case 693: // client_classes_list: client_classes_list "," +#line 2465 "dhcp6_parser.yy" + { + ctx.warnAboutExtraCommas(yystack_[0].location); + } +#line 3880 "dhcp6_parser.cc" + break; + + case 694: // $@107: %empty +#line 2470 "dhcp6_parser.yy" + { + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->add(m); + ctx.stack_.push_back(m); +} +#line 3890 "dhcp6_parser.cc" + break; + + case 695: // client_class_entry: "{" $@107 client_class_params "}" +#line 2474 "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 3900 "dhcp6_parser.cc" + break; + + case 700: // not_empty_client_class_params: not_empty_client_class_params "," +#line 2486 "dhcp6_parser.yy" + { + ctx.warnAboutExtraCommas(yystack_[0].location); + } +#line 3908 "dhcp6_parser.cc" + break; + + case 716: // $@108: %empty +#line 2509 "dhcp6_parser.yy" + { + ctx.unique("test", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 3917 "dhcp6_parser.cc" + break; + + case 717: // client_class_test: "test" $@108 ":" "constant string" +#line 2512 "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 3927 "dhcp6_parser.cc" + break; + + case 718: // $@109: %empty +#line 2518 "dhcp6_parser.yy" + { + ctx.unique("template-test", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 3936 "dhcp6_parser.cc" + break; + + case 719: // client_class_template_test: "template-test" $@109 ":" "constant string" +#line 2521 "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 3946 "dhcp6_parser.cc" + break; + + case 720: // only_if_required: "only-if-required" ":" "boolean" +#line 2527 "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 3956 "dhcp6_parser.cc" + break; + + case 721: // $@110: %empty +#line 2536 "dhcp6_parser.yy" + { + ctx.unique("server-id", ctx.loc2pos(yystack_[0].location)); + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("server-id", m); + ctx.stack_.push_back(m); + ctx.enter(ctx.SERVER_ID); +} +#line 3968 "dhcp6_parser.cc" + break; + + case 722: // server_id: "server-id" $@110 ":" "{" server_id_params "}" +#line 2542 "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 3979 "dhcp6_parser.cc" + break; + + case 725: // server_id_params: server_id_params "," +#line 2551 "dhcp6_parser.yy" + { + ctx.warnAboutExtraCommas(yystack_[0].location); + } +#line 3987 "dhcp6_parser.cc" + break; + + case 735: // $@111: %empty +#line 2567 "dhcp6_parser.yy" + { + ctx.unique("type", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.DUID_TYPE); +} +#line 3996 "dhcp6_parser.cc" + break; + + case 736: // server_id_type: "type" $@111 ":" duid_type +#line 2570 "dhcp6_parser.yy" + { + ctx.stack_.back()->set("type", yystack_[0].value.as < ElementPtr > ()); + ctx.leave(); +} +#line 4005 "dhcp6_parser.cc" + break; + + case 737: // duid_type: "LLT" +#line 2575 "dhcp6_parser.yy" + { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("LLT", ctx.loc2pos(yystack_[0].location))); } +#line 4011 "dhcp6_parser.cc" + break; + + case 738: // duid_type: "EN" +#line 2576 "dhcp6_parser.yy" + { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("EN", ctx.loc2pos(yystack_[0].location))); } +#line 4017 "dhcp6_parser.cc" + break; + + case 739: // duid_type: "LL" +#line 2577 "dhcp6_parser.yy" + { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("LL", ctx.loc2pos(yystack_[0].location))); } +#line 4023 "dhcp6_parser.cc" + break; + + case 740: // htype: "htype" ":" "integer" +#line 2580 "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 4033 "dhcp6_parser.cc" + break; + + case 741: // $@112: %empty +#line 2586 "dhcp6_parser.yy" + { + ctx.unique("identifier", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 4042 "dhcp6_parser.cc" + break; + + case 742: // identifier: "identifier" $@112 ":" "constant string" +#line 2589 "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 4052 "dhcp6_parser.cc" + break; + + case 743: // time: "time" ":" "integer" +#line 2595 "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 4062 "dhcp6_parser.cc" + break; + + case 744: // enterprise_id: "enterprise-id" ":" "integer" +#line 2601 "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 4072 "dhcp6_parser.cc" + break; + + case 745: // dhcp4o6_port: "dhcp4o6-port" ":" "integer" +#line 2609 "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 4082 "dhcp6_parser.cc" + break; + + case 746: // $@113: %empty +#line 2617 "dhcp6_parser.yy" + { + ctx.unique("control-socket", ctx.loc2pos(yystack_[0].location)); + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("control-socket", m); + ctx.stack_.push_back(m); + ctx.enter(ctx.CONTROL_SOCKET); +} +#line 4094 "dhcp6_parser.cc" + break; + + case 747: // control_socket: "control-socket" $@113 ":" "{" control_socket_params "}" +#line 2623 "dhcp6_parser.yy" + { + ctx.stack_.pop_back(); + ctx.leave(); +} +#line 4103 "dhcp6_parser.cc" + break; + + case 750: // control_socket_params: control_socket_params "," +#line 2630 "dhcp6_parser.yy" + { + ctx.warnAboutExtraCommas(yystack_[0].location); + } +#line 4111 "dhcp6_parser.cc" + break; + + case 756: // $@114: %empty +#line 2642 "dhcp6_parser.yy" + { + ctx.unique("socket-type", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 4120 "dhcp6_parser.cc" + break; + + case 757: // socket_type: "socket-type" $@114 ":" "constant string" +#line 2645 "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 4130 "dhcp6_parser.cc" + break; + + case 758: // $@115: %empty +#line 2651 "dhcp6_parser.yy" + { + ctx.unique("socket-name", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 4139 "dhcp6_parser.cc" + break; + + case 759: // socket_name: "socket-name" $@115 ":" "constant string" +#line 2654 "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 4149 "dhcp6_parser.cc" + break; + + case 760: // $@116: %empty +#line 2663 "dhcp6_parser.yy" + { + ctx.unique("dhcp-queue-control", ctx.loc2pos(yystack_[0].location)); + ElementPtr qc(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("dhcp-queue-control", qc); + ctx.stack_.push_back(qc); + ctx.enter(ctx.DHCP_QUEUE_CONTROL); +} +#line 4161 "dhcp6_parser.cc" + break; + + case 761: // dhcp_queue_control: "dhcp-queue-control" $@116 ":" "{" queue_control_params "}" +#line 2669 "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 4172 "dhcp6_parser.cc" + break; + + case 764: // queue_control_params: queue_control_params "," +#line 2678 "dhcp6_parser.yy" + { + ctx.warnAboutExtraCommas(yystack_[0].location); + } +#line 4180 "dhcp6_parser.cc" + break; + + case 771: // enable_queue: "enable-queue" ":" "boolean" +#line 2691 "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 4190 "dhcp6_parser.cc" + break; + + case 772: // $@117: %empty +#line 2697 "dhcp6_parser.yy" + { + ctx.unique("queue-type", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 4199 "dhcp6_parser.cc" + break; + + case 773: // queue_type: "queue-type" $@117 ":" "constant string" +#line 2700 "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 4209 "dhcp6_parser.cc" + break; + + case 774: // capacity: "capacity" ":" "integer" +#line 2706 "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 4219 "dhcp6_parser.cc" + break; + + case 775: // $@118: %empty +#line 2712 "dhcp6_parser.yy" + { + ctx.unique(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 4228 "dhcp6_parser.cc" + break; + + case 776: // arbitrary_map_entry: "constant string" $@118 ":" value +#line 2715 "dhcp6_parser.yy" + { + ctx.stack_.back()->set(yystack_[3].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ()); + ctx.leave(); +} +#line 4237 "dhcp6_parser.cc" + break; + + case 777: // $@119: %empty +#line 2722 "dhcp6_parser.yy" + { + ctx.unique("dhcp-ddns", ctx.loc2pos(yystack_[0].location)); + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("dhcp-ddns", m); + ctx.stack_.push_back(m); + ctx.enter(ctx.DHCP_DDNS); +} +#line 4249 "dhcp6_parser.cc" + break; + + case 778: // dhcp_ddns: "dhcp-ddns" $@119 ":" "{" dhcp_ddns_params "}" +#line 2728 "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 4260 "dhcp6_parser.cc" + break; + + case 779: // $@120: %empty +#line 2735 "dhcp6_parser.yy" + { + // Parse the dhcp-ddns map + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.push_back(m); +} +#line 4270 "dhcp6_parser.cc" + break; + + case 780: // sub_dhcp_ddns: "{" $@120 dhcp_ddns_params "}" +#line 2739 "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 4280 "dhcp6_parser.cc" + break; + + case 783: // dhcp_ddns_params: dhcp_ddns_params "," +#line 2747 "dhcp6_parser.yy" + { + ctx.warnAboutExtraCommas(yystack_[0].location); + } +#line 4288 "dhcp6_parser.cc" + break; + + case 802: // enable_updates: "enable-updates" ":" "boolean" +#line 2772 "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 4298 "dhcp6_parser.cc" + break; + + case 803: // $@121: %empty +#line 2779 "dhcp6_parser.yy" + { + ctx.unique("qualifying-suffix", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 4307 "dhcp6_parser.cc" + break; + + case 804: // dep_qualifying_suffix: "qualifying-suffix" $@121 ":" "constant string" +#line 2782 "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 4317 "dhcp6_parser.cc" + break; + + case 805: // $@122: %empty +#line 2788 "dhcp6_parser.yy" + { + ctx.unique("server-ip", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 4326 "dhcp6_parser.cc" + break; + + case 806: // server_ip: "server-ip" $@122 ":" "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("server-ip", s); + ctx.leave(); +} +#line 4336 "dhcp6_parser.cc" + break; + + case 807: // server_port: "server-port" ":" "integer" +#line 2797 "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 4346 "dhcp6_parser.cc" + break; + + case 808: // $@123: %empty +#line 2803 "dhcp6_parser.yy" + { + ctx.unique("sender-ip", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 4355 "dhcp6_parser.cc" + break; + + case 809: // sender_ip: "sender-ip" $@123 ":" "constant string" +#line 2806 "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 4365 "dhcp6_parser.cc" + break; + + case 810: // sender_port: "sender-port" ":" "integer" +#line 2812 "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 4375 "dhcp6_parser.cc" + break; + + case 811: // max_queue_size: "max-queue-size" ":" "integer" +#line 2818 "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 4385 "dhcp6_parser.cc" + break; + + case 812: // $@124: %empty +#line 2824 "dhcp6_parser.yy" + { + ctx.unique("ncr-protocol", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NCR_PROTOCOL); +} +#line 4394 "dhcp6_parser.cc" + break; + + case 813: // ncr_protocol: "ncr-protocol" $@124 ":" ncr_protocol_value +#line 2827 "dhcp6_parser.yy" + { + ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as < ElementPtr > ()); + ctx.leave(); +} +#line 4403 "dhcp6_parser.cc" + break; + + case 814: // ncr_protocol_value: "UDP" +#line 2833 "dhcp6_parser.yy" + { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); } +#line 4409 "dhcp6_parser.cc" + break; + + case 815: // ncr_protocol_value: "TCP" +#line 2834 "dhcp6_parser.yy" + { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); } +#line 4415 "dhcp6_parser.cc" + break; + + case 816: // $@125: %empty +#line 2837 "dhcp6_parser.yy" + { + ctx.unique("ncr-format", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NCR_FORMAT); +} +#line 4424 "dhcp6_parser.cc" + break; + + case 817: // ncr_format: "ncr-format" $@125 ":" "JSON" +#line 2840 "dhcp6_parser.yy" + { + ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("ncr-format", json); + ctx.leave(); +} +#line 4434 "dhcp6_parser.cc" + break; + + case 818: // dep_override_no_update: "override-no-update" ":" "boolean" +#line 2847 "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 4444 "dhcp6_parser.cc" + break; + + case 819: // dep_override_client_update: "override-client-update" ":" "boolean" +#line 2854 "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 4454 "dhcp6_parser.cc" + break; + + case 820: // $@126: %empty +#line 2861 "dhcp6_parser.yy" + { + ctx.unique("replace-client-name", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.REPLACE_CLIENT_NAME); +} +#line 4463 "dhcp6_parser.cc" + break; + + case 821: // dep_replace_client_name: "replace-client-name" $@126 ":" ddns_replace_client_name_value +#line 2864 "dhcp6_parser.yy" + { + ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as < ElementPtr > ()); + ctx.leave(); +} +#line 4472 "dhcp6_parser.cc" + break; + + case 822: // $@127: %empty +#line 2870 "dhcp6_parser.yy" + { + ctx.unique("generated-prefix", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 4481 "dhcp6_parser.cc" + break; + + case 823: // dep_generated_prefix: "generated-prefix" $@127 ":" "constant string" +#line 2873 "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 4491 "dhcp6_parser.cc" + break; + + case 824: // $@128: %empty +#line 2880 "dhcp6_parser.yy" + { + ctx.unique("hostname-char-set", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 4500 "dhcp6_parser.cc" + break; + + case 825: // dep_hostname_char_set: "hostname-char-set" $@128 ":" "constant string" +#line 2883 "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 4510 "dhcp6_parser.cc" + break; + + case 826: // $@129: %empty +#line 2890 "dhcp6_parser.yy" + { + ctx.unique("hostname-char-replacement", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 4519 "dhcp6_parser.cc" + break; + + case 827: // dep_hostname_char_replacement: "hostname-char-replacement" $@129 ":" "constant string" +#line 2893 "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 4529 "dhcp6_parser.cc" + break; + + case 828: // $@130: %empty +#line 2902 "dhcp6_parser.yy" + { + ctx.unique("config-control", ctx.loc2pos(yystack_[0].location)); + ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("config-control", i); + ctx.stack_.push_back(i); + ctx.enter(ctx.CONFIG_CONTROL); +} +#line 4541 "dhcp6_parser.cc" + break; + + case 829: // config_control: "config-control" $@130 ":" "{" config_control_params "}" +#line 2908 "dhcp6_parser.yy" + { + // No config control params are required + ctx.stack_.pop_back(); + ctx.leave(); +} +#line 4551 "dhcp6_parser.cc" + break; + + case 830: // $@131: %empty +#line 2914 "dhcp6_parser.yy" + { + // Parse the config-control map + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.push_back(m); +} +#line 4561 "dhcp6_parser.cc" + break; + + case 831: // sub_config_control: "{" $@131 config_control_params "}" +#line 2918 "dhcp6_parser.yy" + { + // No config_control params are required + // parsing completed +} +#line 4570 "dhcp6_parser.cc" + break; + + case 834: // config_control_params: config_control_params "," +#line 2926 "dhcp6_parser.yy" + { + ctx.warnAboutExtraCommas(yystack_[0].location); + } +#line 4578 "dhcp6_parser.cc" + break; + + case 837: // $@132: %empty +#line 2936 "dhcp6_parser.yy" + { + ctx.unique("config-databases", ctx.loc2pos(yystack_[0].location)); + ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("config-databases", l); + ctx.stack_.push_back(l); + ctx.enter(ctx.CONFIG_DATABASE); +} +#line 4590 "dhcp6_parser.cc" + break; + + case 838: // config_databases: "config-databases" $@132 ":" "[" database_list "]" +#line 2942 "dhcp6_parser.yy" + { + ctx.stack_.pop_back(); + ctx.leave(); +} +#line 4599 "dhcp6_parser.cc" + break; + + case 839: // config_fetch_wait_time: "config-fetch-wait-time" ":" "integer" +#line 2947 "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 4609 "dhcp6_parser.cc" + break; + + case 840: // $@133: %empty +#line 2955 "dhcp6_parser.yy" + { + ctx.unique("loggers", ctx.loc2pos(yystack_[0].location)); + ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("loggers", l); + ctx.stack_.push_back(l); + ctx.enter(ctx.LOGGERS); +} +#line 4621 "dhcp6_parser.cc" + break; + + case 841: // loggers: "loggers" $@133 ":" "[" loggers_entries "]" +#line 2961 "dhcp6_parser.yy" + { + ctx.stack_.pop_back(); + ctx.leave(); +} +#line 4630 "dhcp6_parser.cc" + break; + + case 844: // loggers_entries: loggers_entries "," +#line 2970 "dhcp6_parser.yy" + { + ctx.warnAboutExtraCommas(yystack_[0].location); + } +#line 4638 "dhcp6_parser.cc" + break; + + case 845: // $@134: %empty +#line 2976 "dhcp6_parser.yy" + { + ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->add(l); + ctx.stack_.push_back(l); +} +#line 4648 "dhcp6_parser.cc" + break; + + case 846: // logger_entry: "{" $@134 logger_params "}" +#line 2980 "dhcp6_parser.yy" + { + ctx.stack_.pop_back(); +} +#line 4656 "dhcp6_parser.cc" + break; + + case 849: // logger_params: logger_params "," +#line 2986 "dhcp6_parser.yy" + { + ctx.warnAboutExtraCommas(yystack_[0].location); + } +#line 4664 "dhcp6_parser.cc" + break; + + case 857: // debuglevel: "debuglevel" ":" "integer" +#line 3000 "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 4674 "dhcp6_parser.cc" + break; + + case 858: // $@135: %empty +#line 3006 "dhcp6_parser.yy" + { + ctx.unique("severity", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 4683 "dhcp6_parser.cc" + break; + + case 859: // severity: "severity" $@135 ":" "constant string" +#line 3009 "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 4693 "dhcp6_parser.cc" + break; + + case 860: // $@136: %empty +#line 3015 "dhcp6_parser.yy" + { + ctx.unique("output_options", ctx.loc2pos(yystack_[0].location)); + ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("output_options", l); + ctx.stack_.push_back(l); + ctx.enter(ctx.OUTPUT_OPTIONS); +} +#line 4705 "dhcp6_parser.cc" + break; + + case 861: // output_options_list: "output_options" $@136 ":" "[" output_options_list_content "]" +#line 3021 "dhcp6_parser.yy" + { + ctx.stack_.pop_back(); + ctx.leave(); +} +#line 4714 "dhcp6_parser.cc" + break; + + case 864: // output_options_list_content: output_options_list_content "," +#line 3028 "dhcp6_parser.yy" + { + ctx.warnAboutExtraCommas(yystack_[0].location); + } +#line 4722 "dhcp6_parser.cc" + break; + + case 865: // $@137: %empty +#line 3033 "dhcp6_parser.yy" + { + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->add(m); + ctx.stack_.push_back(m); +} +#line 4732 "dhcp6_parser.cc" + break; + + case 866: // output_entry: "{" $@137 output_params_list "}" +#line 3037 "dhcp6_parser.yy" + { + ctx.stack_.pop_back(); +} +#line 4740 "dhcp6_parser.cc" + break; + + case 869: // output_params_list: output_params_list "," +#line 3043 "dhcp6_parser.yy" + { + ctx.warnAboutExtraCommas(yystack_[0].location); + } +#line 4748 "dhcp6_parser.cc" + break; + + case 875: // $@138: %empty +#line 3055 "dhcp6_parser.yy" + { + ctx.unique("output", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 4757 "dhcp6_parser.cc" + break; + + case 876: // output: "output" $@138 ":" "constant string" +#line 3058 "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 4767 "dhcp6_parser.cc" + break; + + case 877: // flush: "flush" ":" "boolean" +#line 3064 "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 4777 "dhcp6_parser.cc" + break; + + case 878: // maxsize: "maxsize" ":" "integer" +#line 3070 "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 4787 "dhcp6_parser.cc" + break; + + case 879: // maxver: "maxver" ":" "integer" +#line 3076 "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 4797 "dhcp6_parser.cc" + break; + + case 880: // $@139: %empty +#line 3082 "dhcp6_parser.yy" + { + ctx.unique("pattern", ctx.loc2pos(yystack_[0].location)); + ctx.enter(ctx.NO_KEYWORD); +} +#line 4806 "dhcp6_parser.cc" + break; + + case 881: // pattern: "pattern" $@139 ":" "constant string" +#line 3085 "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 4816 "dhcp6_parser.cc" + break; + + case 882: // $@140: %empty +#line 3091 "dhcp6_parser.yy" + { + ctx.unique("compatibility", ctx.loc2pos(yystack_[0].location)); + ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("compatibility", i); + ctx.stack_.push_back(i); + ctx.enter(ctx.COMPATIBILITY); +} +#line 4828 "dhcp6_parser.cc" + break; + + case 883: // compatibility: "compatibility" $@140 ":" "{" compatibility_params "}" +#line 3097 "dhcp6_parser.yy" + { + ctx.stack_.pop_back(); + ctx.leave(); +} +#line 4837 "dhcp6_parser.cc" + break; + + case 886: // compatibility_params: compatibility_params "," +#line 3104 "dhcp6_parser.yy" + { + ctx.warnAboutExtraCommas(yystack_[0].location); + } +#line 4845 "dhcp6_parser.cc" + break; + + case 889: // lenient_option_parsing: "lenient-option-parsing" ":" "boolean" +#line 3113 "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 4855 "dhcp6_parser.cc" + break; + + +#line 4859 "dhcp6_parser.cc" + + default: + break; + } + } +#if YY_EXCEPTIONS + catch (const syntax_error& yyexc) + { + YYCDEBUG << "Caught exception: " << yyexc.what() << '\n'; + error (yyexc); + YYERROR; + } +#endif // YY_EXCEPTIONS + YY_SYMBOL_PRINT ("-> $$ =", yylhs); + yypop_ (yylen); + yylen = 0; + + // Shift the result of the reduction. + yypush_ (YY_NULLPTR, YY_MOVE (yylhs)); + } + goto yynewstate; + + + /*--------------------------------------. + | yyerrlab -- here on detecting error. | + `--------------------------------------*/ + yyerrlab: + // If not already recovering from an error, report this error. + if (!yyerrstatus_) + { + ++yynerrs_; + context yyctx (*this, yyla); + std::string msg = yysyntax_error_ (yyctx); + error (yyla.location, YY_MOVE (msg)); + } + + + yyerror_range[1].location = yyla.location; + if (yyerrstatus_ == 3) + { + /* If just tried and failed to reuse lookahead token after an + error, discard it. */ + + // Return failure if at end of input. + if (yyla.kind () == symbol_kind::S_YYEOF) + YYABORT; + else if (!yyla.empty ()) + { + yy_destroy_ ("Error: discarding", yyla); + yyla.clear (); + } + } + + // Else will try to reuse lookahead token after shifting the error token. + goto yyerrlab1; + + + /*---------------------------------------------------. + | yyerrorlab -- error raised explicitly by YYERROR. | + `---------------------------------------------------*/ + yyerrorlab: + /* Pacify compilers when the user code never invokes YYERROR and + the label yyerrorlab therefore never appears in user code. */ + if (false) + YYERROR; + + /* Do not reclaim the symbols of the rule whose action triggered + this YYERROR. */ + yypop_ (yylen); + yylen = 0; + YY_STACK_PRINT (); + goto yyerrlab1; + + + /*-------------------------------------------------------------. + | yyerrlab1 -- common code for both syntax error and YYERROR. | + `-------------------------------------------------------------*/ + yyerrlab1: + yyerrstatus_ = 3; // Each real token shifted decrements this. + // Pop stack until we find a state that shifts the error token. + for (;;) + { + yyn = yypact_[+yystack_[0].state]; + if (!yy_pact_value_is_default_ (yyn)) + { + yyn += symbol_kind::S_YYerror; + if (0 <= yyn && yyn <= yylast_ + && yycheck_[yyn] == symbol_kind::S_YYerror) + { + yyn = yytable_[yyn]; + if (0 < yyn) + break; + } + } + + // Pop the current state because it cannot handle the error token. + if (yystack_.size () == 1) + YYABORT; + + yyerror_range[1].location = yystack_[0].location; + yy_destroy_ ("Error: popping", yystack_[0]); + yypop_ (); + YY_STACK_PRINT (); + } + { + stack_symbol_type error_token; + + yyerror_range[2].location = yyla.location; + YYLLOC_DEFAULT (error_token.location, yyerror_range, 2); + + // Shift the error token. + error_token.state = state_type (yyn); + yypush_ ("Shifting", YY_MOVE (error_token)); + } + goto yynewstate; + + + /*-------------------------------------. + | yyacceptlab -- YYACCEPT comes here. | + `-------------------------------------*/ + yyacceptlab: + yyresult = 0; + goto yyreturn; + + + /*-----------------------------------. + | yyabortlab -- YYABORT comes here. | + `-----------------------------------*/ + yyabortlab: + yyresult = 1; + goto yyreturn; + + + /*-----------------------------------------------------. + | yyreturn -- parsing is finished, return the result. | + `-----------------------------------------------------*/ + yyreturn: + if (!yyla.empty ()) + yy_destroy_ ("Cleanup: discarding lookahead", yyla); + + /* Do not reclaim the symbols of the rule whose action triggered + this YYABORT or YYACCEPT. */ + yypop_ (yylen); + YY_STACK_PRINT (); + while (1 < yystack_.size ()) + { + yy_destroy_ ("Cleanup: popping", yystack_[0]); + yypop_ (); + } + + return yyresult; + } +#if YY_EXCEPTIONS + catch (...) + { + YYCDEBUG << "Exception caught: cleaning lookahead and stack\n"; + // Do not try to display the values of the reclaimed symbols, + // as their printers might throw an exception. + if (!yyla.empty ()) + yy_destroy_ (YY_NULLPTR, yyla); + + while (1 < yystack_.size ()) + { + yy_destroy_ (YY_NULLPTR, yystack_[0]); + yypop_ (); + } + throw; + } +#endif // YY_EXCEPTIONS + } + + void + Dhcp6Parser::error (const syntax_error& yyexc) + { + error (yyexc.location, yyexc.what ()); + } + + /* Return YYSTR after stripping away unnecessary quotes and + backslashes, so that it's suitable for yyerror. The heuristic is + that double-quoting is unnecessary unless the string contains an + apostrophe, a comma, or backslash (other than backslash-backslash). + YYSTR is taken from yytname. */ + std::string + Dhcp6Parser::yytnamerr_ (const char *yystr) + { + if (*yystr == '"') + { + std::string yyr; + char const *yyp = yystr; + + for (;;) + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + else + goto append; + + append: + default: + yyr += *yyp; + break; + + case '"': + return yyr; + } + do_not_strip_quotes: ; + } + + return yystr; + } + + std::string + Dhcp6Parser::symbol_name (symbol_kind_type yysymbol) + { + return yytnamerr_ (yytname_[yysymbol]); + } + + + + // Dhcp6Parser::context. + Dhcp6Parser::context::context (const Dhcp6Parser& yyparser, const symbol_type& yyla) + : yyparser_ (yyparser) + , yyla_ (yyla) + {} + + int + Dhcp6Parser::context::expected_tokens (symbol_kind_type yyarg[], int yyargn) const + { + // Actual number of expected tokens + int yycount = 0; + + 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. */ + const int yyxbegin = yyn < 0 ? -yyn : 0; + // Stay within bounds of both yycheck and yytname. + 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])) + { + if (!yyarg) + ++yycount; + else if (yycount == yyargn) + return 0; + else + yyarg[yycount++] = YY_CAST (symbol_kind_type, yyx); + } + } + + if (yyarg && yycount == 0 && 0 < yyargn) + yyarg[0] = symbol_kind::S_YYEMPTY; + return yycount; + } + + + + + + + int + Dhcp6Parser::yy_syntax_error_arguments_ (const context& yyctx, + symbol_kind_type yyarg[], int yyargn) const + { + /* There are many possibilities here to consider: + - If this state is a consistent state with a default action, then + the only way this function was invoked is if the default action + is an error action. In that case, don't check for expected + tokens because there are none. + - The only way there can be no lookahead present (in yyla) is + if this state is a consistent state with a default action. + Thus, detecting the absence of a lookahead is sufficient to + determine that there is no unexpected or expected token to + report. In that case, just report a simple "syntax error". + - Don't assume there isn't a lookahead just because this state is + a consistent state with a default action. There might have + been a previous inconsistent state, consistent state with a + non-default action, or user semantic action that manipulated + yyla. (However, yyla is currently not documented for users.) + - Of course, the expected token list depends on states to have + correct lookahead information, and it depends on the parser not + to perform extra reductions after fetching a lookahead from the + scanner and before detecting a syntax error. Thus, state merging + (from LALR or IELR) and default reductions corrupt the expected + token list. However, the list is correct for canonical LR with + one exception: it will still contain any token that will not be + accepted due to an error action in a later state. + */ + + if (!yyctx.lookahead ().empty ()) + { + if (yyarg) + yyarg[0] = yyctx.token (); + int yyn = yyctx.expected_tokens (yyarg ? yyarg + 1 : yyarg, yyargn - 1); + return yyn + 1; + } + return 0; + } + + // Generate an error message. + std::string + Dhcp6Parser::yysyntax_error_ (const context& yyctx) const + { + // Its maximum. + enum { YYARGS_MAX = 5 }; + // Arguments of yyformat. + symbol_kind_type yyarg[YYARGS_MAX]; + int yycount = yy_syntax_error_arguments_ (yyctx, yyarg, YYARGS_MAX); + + char const* yyformat = YY_NULLPTR; + switch (yycount) + { +#define YYCASE_(N, S) \ + case N: \ + yyformat = S; \ + break + default: // Avoid compiler warnings. + YYCASE_ (0, YY_("syntax error")); + YYCASE_ (1, YY_("syntax error, unexpected %s")); + YYCASE_ (2, YY_("syntax error, unexpected %s, expecting %s")); + YYCASE_ (3, YY_("syntax error, unexpected %s, expecting %s or %s")); + YYCASE_ (4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); + YYCASE_ (5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); +#undef YYCASE_ + } + + std::string yyres; + // Argument number. + std::ptrdiff_t yyi = 0; + for (char const* yyp = yyformat; *yyp; ++yyp) + if (yyp[0] == '%' && yyp[1] == 's' && yyi < yycount) + { + yyres += symbol_name (yyarg[yyi++]); + ++yyp; + } + else + yyres += *yyp; + return yyres; + } + + + const short Dhcp6Parser::yypact_ninf_ = -1032; + + const signed char Dhcp6Parser::yytable_ninf_ = -1; + + const short + Dhcp6Parser::yypact_[] = + { + 629, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, -1032, -1032, -1032, -1032, 42, 34, 60, 67, 91, + 95, 97, 107, 111, 133, 212, 245, 252, 263, 265, + -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, 34, -176, + 178, 172, 77, 697, 181, 225, -2, 200, 83, 118, + -105, 244, 72, -1032, 292, 297, 302, 300, 309, -1032, + 105, -1032, -1032, -1032, -1032, -1032, -1032, -1032, 329, 338, + 347, 348, 356, 357, 389, 390, 396, 406, 455, 456, + 458, 459, -1032, 461, 462, 463, 464, 465, -1032, -1032, + -1032, 467, 469, 478, 479, -1032, -1032, -1032, 481, -1032, + -1032, -1032, -1032, -1032, -1032, 482, 483, 485, -1032, -1032, + -1032, -1032, -1032, -1032, -1032, -1032, -1032, 486, -1032, -1032, + -1032, -1032, -1032, -1032, 488, 489, 490, -1032, -1032, 493, + -1032, 143, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, 495, 496, 499, 500, -1032, 147, -1032, -1032, -1032, + -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + 502, 504, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, -1032, -1032, 159, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, -1032, -1032, -1032, 505, -1032, -1032, -1032, -1032, 161, + -1032, -1032, -1032, -1032, -1032, -1032, 506, -1032, 507, 510, + -1032, -1032, -1032, -1032, -1032, -1032, 170, -1032, -1032, -1032, + -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, -1032, -1032, -1032, 324, 366, -1032, -1032, -1032, -1032, + -1032, -1032, -1032, -1032, 363, -1032, -1032, 512, -1032, -1032, + -1032, 514, -1032, -1032, 432, 516, -1032, -1032, -1032, -1032, + -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, 518, + 519, 524, -1032, -1032, -1032, -1032, 527, 536, -1032, -1032, + -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, 173, -1032, -1032, -1032, 539, -1032, -1032, 540, -1032, + 541, 543, -1032, -1032, 544, 546, -1032, -1032, -1032, -1032, + -1032, -1032, -1032, 174, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, 548, 188, -1032, -1032, -1032, -1032, 34, 34, -1032, + 320, 549, -1032, -1032, 550, 553, 556, 557, 558, 559, + 343, 344, 345, 346, 355, 358, 359, 360, 354, 361, + 364, 368, 375, 376, 564, 377, 378, 371, 379, 388, + 578, 583, 585, 391, 392, 386, 393, 596, 597, 608, + 398, 609, 619, 620, 622, 624, 625, 407, 408, 409, + 631, 632, 633, 647, 648, 649, 650, 662, 665, 412, + 666, 667, 668, 669, 670, 672, 454, 460, 466, 677, + 678, -1032, 172, -1032, 680, 472, 475, 480, 484, 77, + -1032, 681, 682, 683, 684, 695, 487, 477, 702, 703, + 705, 697, -1032, 706, 497, 181, -1032, 707, 498, 716, + 501, 503, 225, -1032, 719, 722, 728, 729, 730, 732, + 733, -1032, -2, -1032, 734, 735, 520, 736, 738, 739, + 521, -1032, 83, 741, 537, 538, 551, -1032, 118, 758, + 759, -49, -1032, 552, 773, 776, 565, 783, 569, 571, + 790, 791, 573, 574, 794, 803, 805, 806, 244, -1032, + 810, 594, 72, -1032, -1032, -1032, 812, 811, 599, 813, + 815, 816, 817, 821, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, 610, -1032, + -1032, -1032, -1032, -1032, -141, 611, 612, -1032, -1032, -1032, + -1032, 823, 824, 828, -1032, 630, 634, 844, 845, 635, + -47, -1032, -1032, -1032, 846, 848, 851, 850, 853, 854, + 855, 856, 857, -1032, 858, 859, 860, 861, 641, 642, + -1032, -1032, -1032, 864, 863, -1032, 866, -1032, -1032, -1032, + -1032, -1032, 867, 868, 654, 655, 656, -1032, -1032, 866, + 657, 871, -1032, 659, -1032, -1032, 660, -1032, 661, -1032, + -1032, -1032, 866, 866, 866, 663, 664, 671, 673, -1032, + 674, 675, -1032, 676, 679, 685, -1032, -1032, 686, -1032, + -1032, -1032, -1032, 687, 845, -1032, -1032, 688, 689, -1032, + 690, -1032, -1032, -9, 700, -1032, -1032, -141, 691, 692, + 693, -1032, 877, -1032, -1032, 34, 172, -1032, 72, 77, + 350, 350, 879, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, -1032, 882, 883, 885, -1032, -1032, 890, -1032, -1032, + -1032, -1032, -1032, -1032, -1032, -1032, -101, 34, 56, 85, + 891, 893, 894, 211, 57, 373, -52, -23, 244, -1032, + -1032, 895, -121, -1032, -1032, 896, 897, -1032, -1032, -1032, + -1032, -1032, -70, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, -1032, 879, -1032, 206, 250, 258, -1032, -1032, -1032, + -1032, 910, 911, 912, 914, 915, 916, 917, 918, 919, + 920, -1032, 921, -1032, -1032, -1032, -1032, -1032, 277, -1032, + -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, 291, -1032, 922, 814, -1032, -1032, 923, 924, -1032, + -1032, 925, 927, -1032, -1032, 926, 930, -1032, -1032, 928, + 932, -1032, -1032, -1032, 155, -1032, -1032, -1032, 931, -1032, + -1032, -1032, 202, -1032, -1032, -1032, -1032, -1032, 293, -1032, + -1032, -1032, -1032, 276, -1032, -1032, 933, 935, -1032, -1032, + 934, 938, -1032, 939, 940, 941, 942, 943, 944, 328, + -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, 945, + 946, 947, -1032, -1032, -1032, -1032, 332, -1032, -1032, -1032, + -1032, -1032, -1032, 948, 949, 950, -1032, 336, -1032, -1032, + -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, 340, + -1032, -1032, -1032, 951, -1032, 952, -1032, -1032, -1032, 342, + -1032, -1032, -1032, -1032, -1032, 365, -1032, 443, -1032, 953, + -1032, 367, -1032, -1032, 740, -1032, 936, 955, -1032, -1032, + 956, 958, -1032, -1032, -1032, 957, -1032, 960, -1032, -1032, + -1032, 959, 963, 964, 965, 715, 747, 743, 748, 751, + 752, 753, 754, 756, 757, 976, 760, 979, 980, 985, + 987, 350, -1032, -1032, 350, -1032, 879, 697, -1032, 882, + 83, -1032, 883, 118, -1032, 885, 588, -1032, 890, -101, + -1032, -1032, 56, -1032, 988, 990, 85, -1032, 352, 891, + -1032, -2, -1032, 893, -105, -1032, 894, 777, 780, 784, + 785, 786, 789, 211, -1032, 1012, 1014, 799, 800, 801, + 57, -1032, 820, 833, 835, 373, -1032, 1030, 1054, -52, + -1032, 836, 1065, 874, 1068, -23, -1032, -1032, 213, 895, + -1032, 852, -121, -1032, -1032, 1070, 1071, 181, -1032, 896, + 225, -1032, 897, 1077, -1032, -1032, 190, 888, 913, 929, + -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + 385, -1032, 937, 954, 961, 962, -1032, 369, -1032, 405, + -1032, 1122, -1032, 1123, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, -1032, -1032, -1032, 433, -1032, -1032, -1032, -1032, -1032, + -1032, -1032, -1032, 966, 967, -1032, -1032, -1032, 1130, -1032, + -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + 1131, 1137, -1032, -1032, -1032, -1032, -1032, -1032, 1133, -1032, + 436, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, 168, + 968, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, 969, + 971, -1032, -1032, 972, -1032, 34, -1032, -1032, 1138, -1032, + -1032, -1032, -1032, -1032, 439, -1032, -1032, -1032, -1032, -1032, + -1032, -1032, -1032, 974, 440, -1032, 449, -1032, 975, -1032, + -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, 588, -1032, + -1032, -1032, 1139, 1140, 973, -1032, 352, -1032, -1032, -1032, + -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, 1141, 977, + 1142, 213, -1032, -1032, -1032, -1032, -1032, -1032, 981, 983, + -1032, -1032, 1143, -1032, 984, -1032, -1032, -1032, 1144, -1032, + -1032, 447, -1032, -75, 1144, -1032, -1032, 1146, 1148, 1149, + -1032, 453, -1032, -1032, -1032, -1032, -1032, -1032, -1032, 1150, + 982, 986, 989, 1151, -75, -1032, 991, -1032, -1032, -1032, + 992, -1032, -1032, -1032 + }; + + const short + Dhcp6Parser::yydefact_[] = + { + 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, + 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, 192, 9, 379, 11, + 590, 13, 619, 15, 651, 17, 508, 19, 517, 21, + 556, 23, 341, 25, 779, 27, 830, 29, 48, 41, + 0, 0, 0, 0, 0, 0, 653, 0, 519, 558, + 0, 0, 0, 50, 0, 49, 0, 0, 42, 63, + 0, 65, 140, 828, 190, 211, 213, 215, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 180, 0, 0, 0, 0, 0, 159, 166, + 168, 0, 0, 0, 0, 370, 506, 547, 0, 183, + 185, 451, 606, 608, 443, 0, 0, 0, 297, 316, + 306, 286, 689, 642, 332, 353, 721, 0, 318, 746, + 760, 777, 173, 175, 0, 0, 0, 840, 882, 0, + 139, 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, 127, 117, 118, 128, + 129, 130, 106, 136, 137, 138, 132, 133, 134, 84, + 85, 86, 87, 103, 88, 90, 89, 131, 94, 95, + 82, 108, 109, 110, 107, 83, 92, 93, 101, 102, + 104, 91, 96, 97, 98, 99, 100, 105, 116, 135, + 205, 0, 0, 0, 0, 204, 0, 194, 197, 198, + 199, 200, 201, 202, 203, 581, 610, 430, 432, 434, + 0, 0, 438, 436, 683, 429, 384, 385, 386, 387, + 388, 389, 390, 391, 410, 411, 412, 413, 414, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 415, 416, + 426, 427, 428, 0, 381, 395, 396, 397, 400, 401, + 404, 405, 406, 403, 398, 399, 392, 393, 408, 409, + 394, 402, 407, 603, 0, 602, 598, 599, 597, 0, + 592, 595, 596, 600, 601, 635, 0, 638, 0, 0, + 634, 628, 629, 627, 632, 633, 0, 621, 624, 625, + 630, 631, 626, 681, 669, 671, 673, 675, 677, 679, + 668, 665, 666, 667, 0, 654, 655, 660, 661, 658, + 662, 663, 664, 659, 0, 537, 261, 0, 541, 539, + 544, 0, 533, 534, 0, 520, 521, 524, 536, 525, + 526, 527, 543, 528, 529, 530, 531, 532, 574, 0, + 0, 0, 572, 573, 576, 577, 0, 559, 560, 563, + 564, 565, 566, 567, 568, 569, 570, 571, 349, 351, + 346, 0, 343, 347, 348, 0, 803, 805, 0, 808, + 0, 0, 812, 816, 0, 0, 820, 822, 824, 826, + 801, 799, 800, 0, 781, 784, 796, 785, 786, 787, + 788, 789, 790, 791, 792, 793, 794, 795, 797, 798, + 837, 0, 0, 832, 835, 836, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 60, 71, 68, 0, 0, 0, 0, 0, 196, + 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 383, 380, 0, 0, 594, 591, 0, 0, 0, + 0, 0, 623, 620, 0, 0, 0, 0, 0, 0, + 0, 652, 657, 509, 0, 0, 0, 0, 0, 0, + 0, 518, 523, 0, 0, 0, 0, 557, 562, 0, + 0, 345, 342, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 783, 780, + 0, 0, 834, 831, 51, 43, 0, 0, 0, 0, + 0, 0, 0, 0, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 0, 178, + 179, 156, 157, 158, 0, 0, 0, 170, 171, 172, + 177, 0, 0, 0, 182, 0, 0, 0, 0, 0, + 0, 440, 441, 442, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 745, 0, 0, 0, 0, 0, 0, + 187, 188, 189, 0, 0, 70, 0, 207, 208, 209, + 210, 195, 0, 0, 0, 0, 0, 449, 450, 0, + 0, 0, 382, 0, 605, 593, 0, 637, 0, 640, + 641, 622, 0, 0, 0, 0, 0, 0, 0, 656, + 0, 0, 535, 0, 0, 0, 546, 522, 0, 578, + 579, 580, 561, 0, 0, 344, 802, 0, 0, 807, + 0, 810, 811, 0, 0, 818, 819, 0, 0, 0, + 0, 782, 0, 839, 833, 0, 0, 141, 0, 0, + 0, 0, 217, 181, 161, 162, 163, 164, 165, 160, + 167, 169, 372, 510, 549, 184, 186, 453, 40, 607, + 609, 445, 446, 447, 448, 444, 0, 48, 0, 0, + 0, 644, 334, 0, 0, 0, 0, 0, 0, 174, + 176, 0, 0, 53, 206, 583, 612, 431, 433, 435, + 439, 437, 0, 604, 636, 639, 682, 670, 672, 674, + 676, 678, 680, 538, 262, 542, 540, 545, 575, 350, + 352, 804, 806, 809, 814, 815, 813, 817, 821, 823, + 825, 827, 217, 44, 0, 0, 0, 249, 254, 256, + 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 271, 0, 278, 280, 282, 284, 248, 0, 224, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 241, 242, 243, 240, 244, 245, 246, + 247, 0, 222, 0, 218, 219, 377, 0, 373, 374, + 515, 0, 511, 512, 554, 0, 550, 551, 458, 0, + 454, 455, 304, 305, 0, 299, 302, 303, 0, 314, + 315, 311, 0, 308, 312, 313, 293, 295, 0, 288, + 291, 292, 694, 0, 691, 649, 0, 645, 646, 339, + 0, 335, 336, 0, 0, 0, 0, 0, 0, 0, + 355, 358, 359, 360, 361, 362, 363, 735, 741, 0, + 0, 0, 734, 731, 732, 733, 0, 723, 726, 729, + 727, 728, 730, 0, 0, 0, 328, 0, 320, 323, + 324, 325, 326, 327, 756, 758, 755, 753, 754, 0, + 748, 751, 752, 0, 772, 0, 775, 768, 769, 0, + 762, 765, 766, 767, 770, 0, 845, 0, 842, 0, + 888, 0, 884, 887, 55, 588, 0, 584, 585, 617, + 0, 613, 614, 687, 686, 0, 685, 0, 64, 829, + 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 226, 212, 214, 0, 216, 221, 0, 371, 376, + 519, 507, 514, 558, 548, 553, 0, 452, 457, 301, + 298, 317, 310, 307, 0, 0, 290, 287, 696, 693, + 690, 653, 643, 648, 0, 333, 338, 0, 0, 0, + 0, 0, 0, 357, 354, 0, 0, 0, 0, 0, + 725, 722, 0, 0, 0, 322, 319, 0, 0, 750, + 747, 0, 0, 0, 0, 764, 761, 778, 0, 844, + 841, 0, 886, 883, 57, 0, 56, 0, 582, 587, + 0, 611, 616, 0, 684, 838, 0, 0, 0, 0, + 260, 263, 264, 265, 266, 267, 268, 269, 277, 270, + 0, 276, 0, 0, 0, 0, 225, 0, 220, 0, + 375, 0, 513, 0, 552, 505, 477, 478, 479, 481, + 482, 483, 467, 468, 486, 487, 488, 489, 490, 493, + 494, 495, 496, 497, 498, 499, 500, 501, 491, 492, + 502, 503, 504, 463, 464, 465, 466, 475, 476, 472, + 473, 474, 471, 480, 0, 460, 469, 484, 485, 470, + 456, 300, 309, 0, 0, 289, 716, 718, 0, 714, + 708, 709, 710, 711, 712, 713, 715, 705, 706, 707, + 0, 697, 698, 701, 702, 703, 704, 692, 0, 647, + 0, 337, 364, 365, 366, 367, 368, 369, 356, 0, + 0, 740, 743, 744, 724, 329, 330, 331, 321, 0, + 0, 749, 771, 0, 774, 0, 763, 860, 0, 858, + 856, 850, 854, 855, 0, 847, 852, 853, 851, 843, + 889, 885, 54, 59, 0, 586, 0, 615, 0, 251, + 252, 253, 250, 255, 257, 259, 273, 274, 275, 272, + 279, 281, 283, 285, 223, 378, 516, 555, 462, 459, + 294, 296, 0, 0, 0, 695, 700, 650, 340, 737, + 738, 739, 736, 742, 757, 759, 773, 776, 0, 0, + 0, 849, 846, 58, 589, 618, 688, 461, 0, 0, + 720, 699, 0, 857, 0, 848, 717, 719, 0, 859, + 865, 0, 862, 0, 864, 861, 875, 0, 0, 0, + 880, 0, 867, 870, 871, 872, 873, 874, 863, 0, + 0, 0, 0, 0, 869, 866, 0, 877, 878, 879, + 0, 868, 876, 881 + }; + + const short + Dhcp6Parser::yypgoto_[] = + { + -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, -1032, -1032, -1032, -1032, -1032, -10, -1032, -615, -1032, + 235, -1032, -1032, -1032, -1032, 149, -1032, -649, -1032, -1032, + -1032, -71, -1032, -1032, -1032, -1032, -1032, -1032, -1032, 401, + 636, -1032, -1032, -43, -39, 10, 14, 15, 17, -61, + -24, -21, -17, -11, 30, 32, -1032, 33, 37, 43, + 44, -1032, 419, 47, -1032, 50, -1032, 51, 62, 63, + 64, -1032, 65, -1032, 66, -1032, -1032, -1032, -1032, -1032, + 68, -1032, 69, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, 410, 637, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, -1032, -1032, -1032, -1032, 330, -1032, 114, -1032, -731, + 120, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, -41, -1032, -773, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, -1032, -1032, -1032, -1032, -1032, -1032, 98, -1032, -1032, + -1032, -1032, -1032, -1032, -1032, 104, -755, -1032, -1032, -1032, + -1032, 103, -1032, -1032, -1032, -1032, -1032, -1032, -1032, 74, + -1032, -1032, -1032, -1032, -1032, -1032, -1032, 92, -1032, -1032, + -1032, 93, 589, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + 88, -1032, -1032, -1032, -1032, -1032, -1032, -1031, -1032, -1032, + -1032, 123, -1032, -1032, -1032, 126, 638, -1032, -1032, -1030, + -1032, -1029, -1032, 73, -1032, 82, -1032, 76, 79, 80, + 81, -1032, -1032, -1032, -1027, -1032, -1032, -1032, -1032, 117, + -1032, -1032, -122, 1100, -1032, -1032, -1032, -1032, -1032, 128, + -1032, -1032, -1032, 134, -1032, 606, -1032, -66, -1032, -1032, + -1032, -1032, -1032, -65, -1032, -1032, -1032, -1032, -1032, -16, + -1032, -1032, -1032, 130, -1032, -1032, -1032, 144, -1032, 605, + -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, -1032, 87, -1032, -1032, -1032, 96, 694, -1032, -1032, + -1032, -57, -1032, -3, -1032, -1032, -1032, -1032, -1032, 78, + -1032, -1032, -1032, 89, 696, -1032, -1032, -1032, -1032, -1032, + -1032, -1032, -45, -1032, -1032, -1032, 135, -1032, -1032, -1032, + 145, -1032, 652, 413, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1025, -1032, -1032, + -1032, -1032, -1032, -1032, -1032, 148, -1032, -1032, -1032, -88, + -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, 129, + -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, -1032, 121, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + 116, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, 434, 626, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, -1032, 492, 621, -1032, -1032, -1032, -1032, -1032, -1032, + 119, -1032, -1032, -96, -1032, -1032, -1032, -1032, -1032, -1032, + -118, -1032, -1032, -135, -1032, -1032, -1032, -1032, -1032, -1032, + -1032, -1032, -1032, -1032, 122, -1032 + }; + + const short + Dhcp6Parser::yydefgoto_[] = + { + 0, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 83, 39, 40, 69, + 769, 87, 88, 41, 68, 84, 85, 794, 1004, 1115, + 1116, 857, 43, 70, 90, 451, 91, 45, 71, 161, + 162, 163, 454, 164, 165, 166, 167, 168, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 480, 759, 182, 481, 183, 482, 184, 185, 186, + 187, 514, 188, 515, 189, 190, 191, 192, 474, 193, + 194, 491, 195, 492, 196, 197, 198, 199, 456, 47, + 72, 236, 237, 238, 524, 239, 240, 241, 242, 200, + 457, 201, 458, 202, 459, 883, 884, 885, 1044, 858, + 859, 860, 1021, 1282, 861, 1022, 862, 1023, 863, 1024, + 864, 865, 565, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 1035, 1289, 875, 876, 877, 1037, 878, 1038, + 879, 1039, 880, 1040, 203, 503, 918, 919, 920, 1064, + 921, 1065, 204, 500, 904, 905, 906, 907, 205, 502, + 912, 913, 914, 915, 206, 501, 207, 510, 967, 968, + 969, 970, 971, 208, 506, 930, 931, 932, 1074, 63, + 80, 401, 402, 403, 579, 404, 580, 209, 507, 939, + 940, 941, 942, 943, 944, 945, 946, 210, 487, 887, + 888, 889, 1047, 49, 73, 283, 284, 285, 533, 286, + 534, 287, 535, 288, 539, 289, 538, 211, 212, 213, + 214, 496, 775, 294, 295, 215, 493, 899, 900, 901, + 1056, 1194, 1195, 216, 488, 57, 77, 891, 892, 893, + 1050, 59, 78, 364, 365, 366, 367, 368, 369, 370, + 564, 371, 568, 372, 567, 373, 374, 569, 375, 217, + 489, 895, 896, 897, 1053, 61, 79, 386, 387, 388, + 389, 390, 573, 391, 392, 393, 394, 395, 297, 531, + 1006, 1007, 1008, 1117, 51, 74, 309, 310, 311, 543, + 312, 218, 494, 219, 495, 300, 532, 1010, 1011, 1012, + 1120, 53, 75, 326, 327, 328, 547, 329, 330, 549, + 331, 332, 220, 505, 926, 927, 928, 1071, 55, 76, + 344, 345, 346, 347, 555, 348, 556, 349, 557, 350, + 558, 351, 559, 352, 560, 353, 554, 302, 540, 1015, + 1016, 1123, 221, 504, 923, 924, 1068, 1220, 1221, 1222, + 1223, 1224, 1302, 1225, 1303, 1226, 222, 508, 956, 957, + 958, 1085, 1312, 959, 960, 1086, 961, 962, 223, 224, + 511, 979, 980, 981, 1097, 982, 1098, 225, 512, 989, + 990, 991, 992, 1102, 993, 994, 1104, 226, 513, 65, + 81, 423, 424, 425, 426, 584, 427, 585, 428, 429, + 587, 430, 431, 432, 590, 826, 433, 591, 434, 435, + 436, 594, 437, 595, 438, 596, 439, 597, 227, 455, + 67, 82, 442, 443, 444, 600, 445, 228, 519, 997, + 998, 1108, 1264, 1265, 1266, 1267, 1320, 1268, 1318, 1341, + 1342, 1343, 1351, 1352, 1353, 1359, 1354, 1355, 1356, 1357, + 1363, 229, 520, 1001, 1002, 1003 + }; + + const short + Dhcp6Parser::yytable_[] = + { + 160, 235, 255, 305, 320, 340, 38, 362, 382, 400, + 420, 953, 262, 384, 385, 243, 298, 313, 324, 342, + 881, 376, 396, 911, 421, 1184, 1185, 1186, 301, 1193, + 256, 1199, 902, 768, 257, 398, 399, 363, 383, 31, + 800, 32, 30, 33, 86, 754, 755, 756, 757, 263, + 132, 133, 264, 806, 807, 808, 265, 296, 308, 323, + 341, 334, 266, 771, 772, 773, 774, 42, 1013, 244, + 299, 314, 325, 343, 44, 377, 397, 127, 422, 132, + 133, 947, 758, 258, 999, 440, 441, 259, 260, 842, + 261, 398, 399, 230, 231, 232, 233, 234, 46, 159, + 132, 133, 48, 267, 50, 268, 269, 355, 452, 768, + 270, 974, 975, 453, 52, 159, 271, 272, 54, 903, + 273, 333, 1346, 274, 275, 1347, 1348, 1349, 1350, 334, + 335, 336, 337, 338, 339, 276, 277, 278, 279, 280, + 56, 281, 282, 983, 984, 985, 522, 306, 321, 290, + 529, 523, 291, 292, 293, 530, 307, 322, 1059, 132, + 133, 1060, 541, 356, 545, 357, 358, 542, 159, 546, + 359, 360, 361, 552, 824, 825, 581, 598, 553, 132, + 133, 582, 599, 92, 93, 132, 133, 94, 89, 902, + 909, 602, 910, 95, 96, 97, 603, 986, 356, 378, + 357, 358, 379, 380, 381, 1062, 916, 917, 1063, 522, + 948, 949, 950, 951, 1018, 1279, 1280, 1281, 159, 58, + 132, 133, 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, 127, 60, 602, 34, 35, 36, 37, 1019, 62, + 127, 529, 128, 129, 130, 131, 1020, 1184, 1185, 1186, + 64, 1193, 66, 1199, 132, 133, 303, 159, 126, 1069, + 1041, 134, 1070, 132, 133, 1042, 135, 136, 137, 138, + 139, 140, 141, 356, 1041, 142, 1066, 159, 446, 1043, + 447, 1067, 143, 159, 127, 252, 448, 911, 449, 253, + 304, 144, 450, 1147, 145, 132, 133, 953, 1309, 1310, + 1311, 146, 315, 316, 317, 318, 319, 132, 133, 147, + 148, 1083, 561, 460, 149, 1090, 1084, 150, 159, 1095, + 1091, 151, 461, 1099, 1096, 1105, 132, 133, 1100, 252, + 1106, 462, 463, 253, 933, 934, 935, 936, 937, 938, + 464, 465, 152, 153, 154, 155, 156, 157, 598, 562, + 1112, 563, 1041, 1107, 837, 1113, 158, 1294, 838, 839, + 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, + 850, 851, 159, 466, 467, 852, 853, 854, 855, 856, + 468, 159, 98, 99, 100, 101, 102, 103, 541, 1257, + 469, 1258, 1259, 1295, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 1286, 1287, 1288, + 356, 127, 356, 159, 418, 419, 1298, 604, 605, 581, + 571, 1299, 1321, 545, 1308, 159, 1109, 1322, 1324, 1110, + 1344, 160, 552, 1345, 132, 133, 1364, 1325, 235, 470, + 471, 1365, 472, 473, 159, 475, 476, 477, 478, 479, + 255, 483, 243, 484, 305, 132, 133, 1206, 1207, 1208, + 262, 320, 485, 486, 298, 490, 497, 498, 313, 499, + 509, 340, 516, 517, 518, 324, 301, 521, 256, 525, + 526, 362, 257, 527, 528, 342, 536, 382, 537, 544, + 548, 550, 384, 385, 551, 376, 566, 263, 570, 572, + 264, 396, 574, 575, 265, 296, 244, 420, 576, 308, + 266, 363, 963, 964, 965, 577, 323, 383, 299, 578, + 606, 421, 314, 583, 586, 588, 341, 589, 592, 325, + 593, 258, 601, 607, 608, 259, 260, 609, 261, 343, + 610, 611, 612, 613, 614, 615, 616, 617, 628, 377, + 159, 267, 159, 268, 269, 397, 618, 622, 270, 619, + 620, 621, 634, 623, 271, 272, 624, 635, 273, 636, + 625, 274, 275, 159, 631, 422, 626, 627, 629, 630, + 641, 642, 632, 276, 277, 278, 279, 280, 639, 281, + 282, 633, 643, 645, 637, 638, 640, 290, 306, 644, + 291, 292, 293, 646, 647, 321, 648, 307, 649, 650, + 651, 652, 653, 663, 322, 654, 655, 656, 98, 99, + 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 657, 658, 659, 660, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, 661, 127, 356, 662, + 664, 665, 666, 667, 668, 160, 669, 670, 235, 129, + 130, 673, 674, 671, 676, 682, 683, 684, 685, 672, + 132, 133, 243, 248, 249, 677, 251, 134, 678, 686, + 688, 679, 135, 136, 137, 680, 689, 690, 687, 691, + 693, 696, 252, 952, 966, 976, 253, 420, 694, 697, + 698, 1000, 699, 702, 700, 254, 703, 954, 972, 977, + 987, 421, 704, 705, 706, 833, 707, 708, 710, 711, + 713, 712, 714, 715, 716, 718, 244, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, + 719, 720, 723, 724, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 721, 726, 127, 727, 152, 153, + 728, 955, 973, 978, 988, 422, 729, 730, 129, 130, + 731, 245, 732, 246, 733, 734, 735, 736, 737, 132, + 133, 247, 248, 249, 250, 251, 134, 738, 159, 739, + 740, 135, 136, 137, 742, 743, 745, 1046, 746, 747, + 748, 252, 749, 750, 751, 253, 752, 143, 762, 763, + 753, 760, 761, 764, 254, 1, 2, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 767, + 765, 776, 32, 777, 766, 770, 778, 779, 780, 781, + 782, 789, 790, 783, 784, 785, 786, 787, 788, 791, + 792, 793, 795, 796, 797, 798, 799, 801, 802, 803, + 804, 805, 832, 809, 810, 827, 882, 152, 153, 886, + 890, 811, 894, 812, 813, 814, 815, 898, 922, 816, + 925, 929, 996, 1005, 1009, 817, 818, 819, 821, 822, + 823, 829, 830, 831, 1025, 1026, 1027, 159, 1028, 1029, + 1030, 1031, 1032, 1033, 1034, 1036, 908, 1049, 1045, 1048, + 1052, 1051, 1054, 1055, 1057, 1058, 1130, 1061, 1073, 1072, + 1075, 1076, 1118, 1077, 1078, 1079, 1080, 1081, 1082, 1087, + 1088, 1089, 1092, 1093, 1094, 1101, 1103, 1111, 1119, 820, + 1114, 1122, 1121, 1126, 1132, 1124, 1125, 1127, 1128, 1129, + 1131, 1133, 1134, 1135, 1136, 1137, 255, 1138, 1139, 362, + 1140, 1141, 382, 1142, 1143, 1155, 262, 384, 385, 1144, + 298, 1145, 1203, 376, 1204, 1162, 396, 1209, 1232, 1197, + 340, 1233, 301, 400, 256, 1234, 1235, 1236, 257, 363, + 1237, 1218, 383, 1156, 342, 1183, 1239, 1157, 1240, 952, + 1241, 1242, 1243, 263, 966, 1210, 264, 1216, 976, 1211, + 265, 296, 1163, 954, 1249, 1164, 266, 1260, 972, 1165, + 1196, 1000, 977, 1245, 299, 1166, 305, 377, 987, 320, + 397, 1262, 1217, 1198, 1246, 341, 1247, 258, 1250, 1252, + 313, 259, 260, 324, 261, 1219, 1158, 1261, 343, 1253, + 1159, 1160, 1255, 1161, 1273, 1270, 1272, 267, 1212, 268, + 269, 1278, 1213, 1214, 270, 1215, 1167, 955, 1168, 1169, + 271, 272, 973, 1170, 273, 1254, 978, 274, 275, 1171, + 1172, 308, 988, 1173, 323, 1263, 1174, 1175, 1283, 276, + 277, 278, 279, 280, 314, 281, 282, 325, 1176, 1177, + 1178, 1179, 1180, 290, 1181, 1182, 291, 292, 293, 1187, + 1296, 1297, 1189, 1284, 1304, 1190, 1191, 1192, 1188, 1305, + 1306, 1307, 1319, 1328, 1329, 1332, 1334, 834, 1338, 1285, + 1360, 1340, 1361, 1362, 1366, 1370, 828, 1290, 675, 836, + 1148, 1146, 1017, 1201, 1205, 1202, 681, 1230, 1231, 1248, + 725, 1238, 1150, 1149, 1291, 1200, 1327, 354, 717, 692, + 1152, 1292, 1293, 722, 1151, 1154, 1300, 1301, 1313, 1314, + 306, 1315, 1316, 321, 1323, 1326, 1330, 1153, 1333, 307, + 1277, 1336, 322, 1337, 1339, 1367, 1275, 1368, 1229, 1276, + 1369, 1372, 1373, 1274, 709, 1014, 1228, 1227, 1331, 1244, + 1251, 1256, 995, 744, 741, 1335, 1358, 1155, 1269, 1371, + 0, 0, 0, 0, 1271, 1209, 0, 1162, 0, 695, + 835, 1197, 0, 0, 0, 1317, 0, 0, 701, 1218, + 1260, 0, 0, 0, 0, 1156, 0, 1183, 0, 1157, + 0, 0, 0, 1210, 1262, 1216, 0, 1211, 0, 0, + 0, 0, 0, 0, 1163, 0, 0, 1164, 0, 0, + 1261, 1165, 1196, 0, 0, 0, 0, 1166, 0, 0, + 1217, 0, 0, 0, 0, 1198, 0, 0, 0, 0, + 0, 0, 0, 1219, 0, 0, 0, 0, 1158, 0, + 0, 0, 1159, 1160, 0, 1161, 1212, 0, 1263, 0, + 1213, 1214, 0, 1215, 0, 0, 0, 0, 1167, 0, + 1168, 1169, 0, 0, 0, 1170, 0, 0, 0, 0, + 0, 1171, 1172, 0, 0, 1173, 0, 0, 1174, 1175, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1176, 1177, 1178, 1179, 1180, 0, 1181, 1182, 0, 0, + 0, 1187, 0, 0, 1189, 0, 0, 1190, 1191, 1192, + 1188 + }; + + const short + Dhcp6Parser::yycheck_[] = + { + 71, 72, 73, 74, 75, 76, 16, 78, 79, 80, + 81, 784, 73, 79, 79, 72, 73, 74, 75, 76, + 751, 78, 79, 778, 81, 1056, 1056, 1056, 73, 1056, + 73, 1056, 133, 648, 73, 140, 141, 78, 79, 5, + 689, 7, 0, 9, 220, 186, 187, 188, 189, 73, + 102, 103, 73, 702, 703, 704, 73, 73, 74, 75, + 76, 131, 73, 110, 111, 112, 113, 7, 138, 72, + 73, 74, 75, 76, 7, 78, 79, 79, 81, 102, + 103, 24, 223, 73, 205, 13, 14, 73, 73, 32, + 73, 140, 141, 16, 17, 18, 19, 20, 7, 220, + 102, 103, 7, 73, 7, 73, 73, 24, 3, 724, + 73, 163, 164, 8, 7, 220, 73, 73, 7, 220, + 73, 123, 197, 73, 73, 200, 201, 202, 203, 131, + 132, 133, 134, 135, 136, 73, 73, 73, 73, 73, + 7, 73, 73, 166, 167, 168, 3, 74, 75, 73, + 3, 8, 73, 73, 73, 8, 74, 75, 3, 102, + 103, 6, 3, 80, 3, 82, 83, 8, 220, 8, + 87, 88, 89, 3, 183, 184, 3, 3, 8, 102, + 103, 8, 8, 11, 12, 102, 103, 15, 10, 133, + 134, 3, 136, 21, 22, 23, 8, 220, 80, 81, + 82, 83, 84, 85, 86, 3, 121, 122, 6, 3, + 153, 154, 155, 156, 8, 25, 26, 27, 220, 7, + 102, 103, 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, 76, 77, + 78, 79, 7, 3, 220, 221, 222, 223, 8, 7, + 79, 3, 90, 91, 92, 93, 8, 1298, 1298, 1298, + 7, 1298, 7, 1298, 102, 103, 95, 220, 78, 3, + 3, 109, 6, 102, 103, 8, 114, 115, 116, 117, + 118, 119, 120, 80, 3, 123, 3, 220, 6, 8, + 3, 8, 130, 220, 79, 124, 4, 1062, 8, 128, + 129, 139, 3, 1044, 142, 102, 103, 1090, 150, 151, + 152, 149, 97, 98, 99, 100, 101, 102, 103, 157, + 158, 3, 8, 4, 162, 3, 8, 165, 220, 3, + 8, 169, 4, 3, 8, 3, 102, 103, 8, 124, + 8, 4, 4, 128, 143, 144, 145, 146, 147, 148, + 4, 4, 190, 191, 192, 193, 194, 195, 3, 3, + 3, 8, 3, 8, 24, 8, 204, 8, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 220, 4, 4, 45, 46, 47, 48, 49, + 4, 220, 50, 51, 52, 53, 54, 55, 3, 196, + 4, 198, 199, 8, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 42, 43, 44, + 80, 79, 80, 220, 190, 191, 3, 447, 448, 3, + 8, 8, 3, 3, 8, 220, 3, 8, 8, 6, + 3, 522, 3, 6, 102, 103, 3, 8, 529, 4, + 4, 8, 4, 4, 220, 4, 4, 4, 4, 4, + 541, 4, 529, 4, 545, 102, 103, 125, 126, 127, + 541, 552, 4, 4, 541, 4, 4, 4, 545, 4, + 4, 562, 4, 4, 4, 552, 541, 4, 541, 4, + 4, 572, 541, 4, 4, 562, 4, 578, 4, 4, + 4, 4, 578, 578, 4, 572, 4, 541, 4, 3, + 541, 578, 4, 4, 541, 541, 529, 598, 4, 545, + 541, 572, 159, 160, 161, 8, 552, 578, 541, 3, + 220, 598, 545, 4, 4, 4, 562, 4, 4, 552, + 4, 541, 4, 4, 4, 541, 541, 4, 541, 562, + 4, 4, 4, 4, 221, 221, 221, 221, 4, 572, + 220, 541, 220, 541, 541, 578, 221, 223, 541, 221, + 221, 221, 4, 222, 541, 541, 222, 4, 541, 4, + 222, 541, 541, 220, 223, 598, 221, 221, 221, 221, + 4, 4, 223, 541, 541, 541, 541, 541, 222, 541, + 541, 223, 4, 4, 223, 223, 223, 541, 545, 221, + 541, 541, 541, 4, 4, 552, 4, 545, 4, 4, + 223, 223, 223, 221, 552, 4, 4, 4, 50, 51, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 4, 4, 4, 4, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 4, 79, 80, 4, + 4, 4, 4, 4, 4, 746, 4, 223, 749, 91, + 92, 4, 4, 223, 4, 4, 4, 4, 4, 223, + 102, 103, 749, 105, 106, 223, 108, 109, 223, 4, + 223, 221, 114, 115, 116, 221, 4, 4, 221, 4, + 4, 4, 124, 784, 785, 786, 128, 788, 221, 221, + 4, 792, 221, 4, 221, 137, 4, 784, 785, 786, + 787, 788, 4, 4, 4, 745, 4, 4, 4, 4, + 4, 221, 4, 4, 223, 4, 749, 50, 51, 52, + 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 223, 223, 4, 4, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 223, 223, 79, 4, 190, 191, + 4, 784, 785, 786, 787, 788, 221, 4, 91, 92, + 221, 94, 221, 96, 4, 4, 223, 223, 4, 102, + 103, 104, 105, 106, 107, 108, 109, 4, 220, 4, + 4, 114, 115, 116, 4, 221, 4, 3, 7, 220, + 7, 124, 7, 7, 7, 128, 5, 130, 5, 5, + 220, 220, 220, 5, 137, 206, 207, 208, 209, 210, + 211, 212, 213, 214, 215, 216, 217, 218, 219, 5, + 220, 5, 7, 5, 220, 220, 5, 7, 5, 5, + 5, 220, 220, 7, 7, 7, 7, 7, 7, 5, + 7, 5, 5, 5, 220, 220, 220, 220, 7, 220, + 220, 220, 5, 220, 220, 185, 7, 190, 191, 7, + 7, 220, 7, 220, 220, 220, 220, 7, 7, 220, + 7, 7, 7, 7, 7, 220, 220, 220, 220, 220, + 220, 220, 220, 220, 4, 4, 4, 220, 4, 4, + 4, 4, 4, 4, 4, 4, 777, 3, 6, 6, + 3, 6, 6, 3, 6, 3, 221, 6, 3, 6, + 6, 3, 6, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 3, 724, + 220, 3, 6, 4, 221, 8, 6, 4, 4, 4, + 223, 223, 221, 221, 221, 221, 1047, 221, 221, 1050, + 4, 221, 1053, 4, 4, 1056, 1047, 1053, 1053, 4, + 1047, 4, 4, 1050, 4, 1056, 1053, 1068, 221, 1056, + 1071, 221, 1047, 1074, 1047, 221, 221, 221, 1047, 1050, + 221, 1068, 1053, 1056, 1071, 1056, 4, 1056, 4, 1090, + 221, 221, 221, 1047, 1095, 1068, 1047, 1068, 1099, 1068, + 1047, 1047, 1056, 1090, 4, 1056, 1047, 1108, 1095, 1056, + 1056, 1112, 1099, 223, 1047, 1056, 1117, 1050, 1105, 1120, + 1053, 1108, 1068, 1056, 221, 1071, 221, 1047, 4, 223, + 1117, 1047, 1047, 1120, 1047, 1068, 1056, 1108, 1071, 4, + 1056, 1056, 4, 1056, 3, 223, 6, 1047, 1068, 1047, + 1047, 4, 1068, 1068, 1047, 1068, 1056, 1090, 1056, 1056, + 1047, 1047, 1095, 1056, 1047, 221, 1099, 1047, 1047, 1056, + 1056, 1117, 1105, 1056, 1120, 1108, 1056, 1056, 220, 1047, + 1047, 1047, 1047, 1047, 1117, 1047, 1047, 1120, 1056, 1056, + 1056, 1056, 1056, 1047, 1056, 1056, 1047, 1047, 1047, 1056, + 8, 8, 1056, 220, 4, 1056, 1056, 1056, 1056, 8, + 3, 8, 4, 4, 4, 4, 4, 746, 5, 220, + 4, 7, 4, 4, 4, 4, 737, 220, 522, 749, + 1046, 1041, 832, 1059, 1066, 1062, 529, 1074, 1076, 1095, + 581, 1083, 1049, 1047, 220, 1058, 1298, 77, 572, 541, + 1052, 220, 220, 578, 1050, 1055, 220, 220, 220, 220, + 1117, 220, 220, 1120, 220, 220, 223, 1053, 221, 1117, + 1122, 220, 1120, 220, 220, 223, 1119, 221, 1073, 1120, + 221, 220, 220, 1117, 562, 802, 1071, 1069, 1306, 1090, + 1099, 1105, 788, 602, 598, 1321, 1344, 1298, 1109, 1364, + -1, -1, -1, -1, 1112, 1306, -1, 1298, -1, 545, + 748, 1298, -1, -1, -1, 1255, -1, -1, 552, 1306, + 1321, -1, -1, -1, -1, 1298, -1, 1298, -1, 1298, + -1, -1, -1, 1306, 1321, 1306, -1, 1306, -1, -1, + -1, -1, -1, -1, 1298, -1, -1, 1298, -1, -1, + 1321, 1298, 1298, -1, -1, -1, -1, 1298, -1, -1, + 1306, -1, -1, -1, -1, 1298, -1, -1, -1, -1, + -1, -1, -1, 1306, -1, -1, -1, -1, 1298, -1, + -1, -1, 1298, 1298, -1, 1298, 1306, -1, 1321, -1, + 1306, 1306, -1, 1306, -1, -1, -1, -1, 1298, -1, + 1298, 1298, -1, -1, -1, 1298, -1, -1, -1, -1, + -1, 1298, 1298, -1, -1, 1298, -1, -1, 1298, 1298, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 1298, 1298, 1298, 1298, 1298, -1, 1298, 1298, -1, -1, + -1, 1298, -1, -1, 1298, -1, -1, 1298, 1298, 1298, + 1298 + }; + + const short + Dhcp6Parser::yystos_[] = + { + 0, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 225, 226, 227, 228, 229, + 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 0, 5, 7, 9, 220, 221, 222, 223, 240, 241, + 242, 247, 7, 256, 7, 261, 7, 313, 7, 427, + 7, 508, 7, 525, 7, 542, 7, 459, 7, 465, + 7, 489, 7, 403, 7, 613, 7, 644, 248, 243, + 257, 262, 314, 428, 509, 526, 543, 460, 466, 490, + 404, 614, 645, 240, 249, 250, 220, 245, 246, 10, + 258, 260, 11, 12, 15, 21, 22, 23, 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, 76, 77, 78, 79, 90, 91, + 92, 93, 102, 103, 109, 114, 115, 116, 117, 118, + 119, 120, 123, 130, 139, 142, 149, 157, 158, 162, + 165, 169, 190, 191, 192, 193, 194, 195, 204, 220, + 255, 263, 264, 265, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 287, 289, 291, 292, 293, 294, 296, 298, + 299, 300, 301, 303, 304, 306, 308, 309, 310, 311, + 323, 325, 327, 368, 376, 382, 388, 390, 397, 411, + 421, 441, 442, 443, 444, 449, 457, 483, 515, 517, + 536, 566, 580, 592, 593, 601, 611, 642, 651, 675, + 16, 17, 18, 19, 20, 255, 315, 316, 317, 319, + 320, 321, 322, 515, 517, 94, 96, 104, 105, 106, + 107, 108, 124, 128, 137, 255, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 281, + 282, 283, 284, 287, 289, 291, 292, 293, 294, 296, + 298, 304, 306, 429, 430, 431, 433, 435, 437, 439, + 441, 442, 443, 444, 447, 448, 483, 502, 515, 517, + 519, 536, 561, 95, 129, 255, 437, 439, 483, 510, + 511, 512, 514, 515, 517, 97, 98, 99, 100, 101, + 255, 437, 439, 483, 515, 517, 527, 528, 529, 531, + 532, 534, 535, 123, 131, 132, 133, 134, 135, 136, + 255, 483, 515, 517, 544, 545, 546, 547, 549, 551, + 553, 555, 557, 559, 457, 24, 80, 82, 83, 87, + 88, 89, 255, 345, 467, 468, 469, 470, 471, 472, + 473, 475, 477, 479, 480, 482, 515, 517, 81, 84, + 85, 86, 255, 345, 471, 477, 491, 492, 493, 494, + 495, 497, 498, 499, 500, 501, 515, 517, 140, 141, + 255, 405, 406, 407, 409, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 190, 191, + 255, 515, 517, 615, 616, 617, 618, 620, 622, 623, + 625, 626, 627, 630, 632, 633, 634, 636, 638, 640, + 13, 14, 646, 647, 648, 650, 6, 3, 4, 8, + 3, 259, 3, 8, 266, 643, 312, 324, 326, 328, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 302, 4, 4, 4, 4, 4, + 285, 288, 290, 4, 4, 4, 4, 422, 458, 484, + 4, 305, 307, 450, 516, 518, 445, 4, 4, 4, + 377, 389, 383, 369, 567, 537, 398, 412, 581, 4, + 391, 594, 602, 612, 295, 297, 4, 4, 4, 652, + 676, 4, 3, 8, 318, 4, 4, 4, 4, 3, + 8, 503, 520, 432, 434, 436, 4, 4, 440, 438, + 562, 3, 8, 513, 4, 3, 8, 530, 4, 533, + 4, 4, 3, 8, 560, 548, 550, 552, 554, 556, + 558, 8, 3, 8, 474, 346, 4, 478, 476, 481, + 4, 8, 3, 496, 4, 4, 4, 8, 3, 408, + 410, 3, 8, 4, 619, 621, 4, 624, 4, 4, + 628, 631, 4, 4, 635, 637, 639, 641, 3, 8, + 649, 4, 3, 8, 240, 240, 220, 4, 4, 4, + 4, 4, 4, 4, 221, 221, 221, 221, 221, 221, + 221, 221, 223, 222, 222, 222, 221, 221, 4, 221, + 221, 223, 223, 223, 4, 4, 4, 223, 223, 222, + 223, 4, 4, 4, 221, 4, 4, 4, 4, 4, + 4, 223, 223, 223, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 221, 4, 4, 4, 4, 4, 4, + 223, 223, 223, 4, 4, 264, 4, 223, 223, 221, + 221, 316, 4, 4, 4, 4, 4, 221, 223, 4, + 4, 4, 430, 4, 221, 511, 4, 221, 4, 221, + 221, 528, 4, 4, 4, 4, 4, 4, 4, 546, + 4, 4, 221, 4, 4, 4, 223, 469, 4, 223, + 223, 223, 493, 4, 4, 406, 223, 4, 4, 221, + 4, 221, 221, 4, 4, 223, 223, 4, 4, 4, + 4, 616, 4, 221, 647, 4, 7, 220, 7, 7, + 7, 7, 5, 220, 186, 187, 188, 189, 223, 286, + 220, 220, 5, 5, 5, 220, 220, 5, 242, 244, + 220, 110, 111, 112, 113, 446, 5, 5, 5, 7, + 5, 5, 5, 7, 7, 7, 7, 7, 7, 220, + 220, 5, 7, 5, 251, 5, 5, 220, 220, 220, + 251, 220, 7, 220, 220, 220, 251, 251, 251, 220, + 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, + 244, 220, 220, 220, 183, 184, 629, 185, 286, 220, + 220, 220, 5, 240, 263, 646, 315, 24, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 45, 46, 47, 48, 49, 255, 333, 334, + 335, 338, 340, 342, 344, 345, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 358, 359, 360, 362, 364, + 366, 333, 7, 329, 330, 331, 7, 423, 424, 425, + 7, 461, 462, 463, 7, 485, 486, 487, 7, 451, + 452, 453, 133, 220, 378, 379, 380, 381, 249, 134, + 136, 380, 384, 385, 386, 387, 121, 122, 370, 371, + 372, 374, 7, 568, 569, 7, 538, 539, 540, 7, + 399, 400, 401, 143, 144, 145, 146, 147, 148, 413, + 414, 415, 416, 417, 418, 419, 420, 24, 153, 154, + 155, 156, 255, 347, 515, 517, 582, 583, 584, 587, + 588, 590, 591, 159, 160, 161, 255, 392, 393, 394, + 395, 396, 515, 517, 163, 164, 255, 515, 517, 595, + 596, 597, 599, 166, 167, 168, 220, 515, 517, 603, + 604, 605, 606, 608, 609, 615, 7, 653, 654, 205, + 255, 677, 678, 679, 252, 7, 504, 505, 506, 7, + 521, 522, 523, 138, 547, 563, 564, 329, 8, 8, + 8, 336, 339, 341, 343, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 356, 4, 361, 363, 365, + 367, 3, 8, 8, 332, 6, 3, 426, 6, 3, + 464, 6, 3, 488, 6, 3, 454, 6, 3, 3, + 6, 6, 3, 6, 373, 375, 3, 8, 570, 3, + 6, 541, 6, 3, 402, 6, 3, 4, 4, 4, + 4, 4, 4, 3, 8, 585, 589, 4, 4, 4, + 3, 8, 4, 4, 4, 3, 8, 598, 600, 3, + 8, 4, 607, 4, 610, 3, 8, 8, 655, 3, + 6, 4, 3, 8, 220, 253, 254, 507, 6, 3, + 524, 6, 3, 565, 8, 6, 4, 4, 4, 4, + 221, 223, 221, 223, 221, 221, 221, 221, 221, 221, + 4, 221, 4, 4, 4, 4, 334, 333, 331, 429, + 425, 467, 463, 491, 487, 255, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 281, + 282, 283, 284, 287, 289, 291, 292, 293, 294, 296, + 298, 304, 306, 345, 421, 433, 435, 437, 439, 441, + 442, 443, 444, 448, 455, 456, 483, 515, 517, 561, + 453, 379, 385, 4, 4, 371, 125, 126, 127, 255, + 267, 268, 269, 270, 271, 272, 345, 483, 515, 517, + 571, 572, 573, 574, 575, 577, 579, 569, 544, 540, + 405, 401, 221, 221, 221, 221, 221, 221, 414, 4, + 4, 221, 221, 221, 583, 223, 221, 221, 393, 4, + 4, 596, 223, 4, 221, 4, 604, 196, 198, 199, + 255, 345, 515, 517, 656, 657, 658, 659, 661, 654, + 223, 678, 6, 3, 510, 506, 527, 523, 4, 25, + 26, 27, 337, 220, 220, 220, 42, 43, 44, 357, + 220, 220, 220, 220, 8, 8, 8, 8, 3, 8, + 220, 220, 576, 578, 4, 8, 3, 8, 8, 150, + 151, 152, 586, 220, 220, 220, 220, 240, 662, 4, + 660, 3, 8, 220, 8, 8, 220, 456, 4, 4, + 223, 573, 4, 221, 4, 657, 220, 220, 5, 220, + 7, 663, 664, 665, 3, 6, 197, 200, 201, 202, + 203, 666, 667, 668, 670, 671, 672, 673, 664, 669, + 4, 4, 4, 674, 3, 8, 4, 223, 221, 221, + 4, 667, 220, 220 + }; + + const short + Dhcp6Parser::yyr1_[] = + { + 0, 224, 226, 225, 227, 225, 228, 225, 229, 225, + 230, 225, 231, 225, 232, 225, 233, 225, 234, 225, + 235, 225, 236, 225, 237, 225, 238, 225, 239, 225, + 240, 240, 240, 240, 240, 240, 240, 241, 243, 242, + 244, 245, 245, 246, 246, 246, 248, 247, 249, 249, + 250, 250, 250, 252, 251, 253, 253, 254, 254, 254, + 255, 257, 256, 259, 258, 258, 260, 262, 261, 263, + 263, 263, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 266, 265, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 285, + 284, 286, 286, 286, 286, 286, 288, 287, 290, 289, + 291, 292, 293, 295, 294, 297, 296, 298, 299, 300, + 302, 301, 303, 305, 304, 307, 306, 308, 309, 310, + 312, 311, 314, 313, 315, 315, 315, 316, 316, 316, + 316, 316, 316, 316, 316, 318, 317, 319, 320, 321, + 322, 324, 323, 326, 325, 328, 327, 329, 329, 330, + 330, 330, 332, 331, 333, 333, 333, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, + 334, 334, 334, 334, 334, 334, 334, 334, 334, 336, + 335, 337, 337, 337, 339, 338, 341, 340, 343, 342, + 344, 346, 345, 347, 348, 349, 350, 351, 352, 353, + 354, 356, 355, 357, 357, 357, 358, 359, 361, 360, + 363, 362, 365, 364, 367, 366, 369, 368, 370, 370, + 370, 371, 371, 373, 372, 375, 374, 377, 376, 378, + 378, 378, 379, 379, 380, 381, 383, 382, 384, 384, + 384, 385, 385, 385, 386, 387, 389, 388, 391, 390, + 392, 392, 392, 393, 393, 393, 393, 393, 393, 394, + 395, 396, 398, 397, 399, 399, 400, 400, 400, 402, + 401, 404, 403, 405, 405, 405, 405, 406, 406, 408, + 407, 410, 409, 412, 411, 413, 413, 413, 414, 414, + 414, 414, 414, 414, 415, 416, 417, 418, 419, 420, + 422, 421, 423, 423, 424, 424, 424, 426, 425, 428, + 427, 429, 429, 429, 430, 430, 430, 430, 430, 430, + 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, + 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, + 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, + 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, + 432, 431, 434, 433, 436, 435, 438, 437, 440, 439, + 441, 442, 443, 445, 444, 446, 446, 446, 446, 447, + 448, 450, 449, 451, 451, 452, 452, 452, 454, 453, + 455, 455, 455, 456, 456, 456, 456, 456, 456, 456, + 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, + 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, + 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, + 456, 456, 456, 456, 456, 456, 458, 457, 460, 459, + 461, 461, 462, 462, 462, 464, 463, 466, 465, 467, + 467, 468, 468, 468, 469, 469, 469, 469, 469, 469, + 469, 469, 469, 469, 470, 471, 472, 474, 473, 476, + 475, 478, 477, 479, 481, 480, 482, 484, 483, 485, + 485, 486, 486, 486, 488, 487, 490, 489, 491, 491, + 492, 492, 492, 493, 493, 493, 493, 493, 493, 493, + 493, 493, 493, 494, 496, 495, 497, 498, 499, 500, + 501, 503, 502, 504, 504, 505, 505, 505, 507, 506, + 509, 508, 510, 510, 510, 511, 511, 511, 511, 511, + 511, 511, 511, 513, 512, 514, 516, 515, 518, 517, + 520, 519, 521, 521, 522, 522, 522, 524, 523, 526, + 525, 527, 527, 527, 528, 528, 528, 528, 528, 528, + 528, 528, 528, 528, 528, 530, 529, 531, 533, 532, + 534, 535, 537, 536, 538, 538, 539, 539, 539, 541, + 540, 543, 542, 544, 544, 545, 545, 545, 546, 546, + 546, 546, 546, 546, 546, 546, 546, 546, 546, 548, + 547, 550, 549, 552, 551, 554, 553, 556, 555, 558, + 557, 560, 559, 562, 561, 563, 563, 565, 564, 567, + 566, 568, 568, 568, 570, 569, 571, 571, 572, 572, + 572, 573, 573, 573, 573, 573, 573, 573, 573, 573, + 573, 573, 573, 573, 573, 574, 576, 575, 578, 577, + 579, 581, 580, 582, 582, 582, 583, 583, 583, 583, + 583, 583, 583, 583, 583, 585, 584, 586, 586, 586, + 587, 589, 588, 590, 591, 592, 594, 593, 595, 595, + 595, 596, 596, 596, 596, 596, 598, 597, 600, 599, + 602, 601, 603, 603, 603, 604, 604, 604, 604, 604, + 604, 605, 607, 606, 608, 610, 609, 612, 611, 614, + 613, 615, 615, 615, 616, 616, 616, 616, 616, 616, + 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, + 616, 616, 617, 619, 618, 621, 620, 622, 624, 623, + 625, 626, 628, 627, 629, 629, 631, 630, 632, 633, + 635, 634, 637, 636, 639, 638, 641, 640, 643, 642, + 645, 644, 646, 646, 646, 647, 647, 649, 648, 650, + 652, 651, 653, 653, 653, 655, 654, 656, 656, 656, + 657, 657, 657, 657, 657, 657, 657, 658, 660, 659, + 662, 661, 663, 663, 663, 665, 664, 666, 666, 666, + 667, 667, 667, 667, 667, 669, 668, 670, 671, 672, + 674, 673, 676, 675, 677, 677, 677, 678, 678, 679 + }; + + const signed char + Dhcp6Parser::yyr2_[] = + { + 0, 2, 0, 3, 0, 3, 0, 3, 0, 3, + 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, + 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, + 1, 1, 1, 1, 1, 1, 1, 1, 0, 4, + 1, 0, 1, 3, 5, 2, 0, 4, 0, 1, + 1, 3, 2, 0, 4, 0, 1, 1, 3, 2, + 2, 0, 4, 0, 6, 1, 2, 0, 4, 1, + 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 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, 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, 0, + 4, 1, 1, 1, 0, 4, 0, 4, 0, 4, + 3, 0, 4, 3, 3, 3, 3, 3, 3, 3, + 3, 0, 4, 1, 1, 1, 3, 3, 0, 4, + 0, 4, 0, 4, 0, 4, 0, 6, 1, 3, + 2, 1, 1, 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, + 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, 1, + 1, 1, 1, 1, 1, 1, 0, 6, 0, 4, + 0, 1, 1, 3, 2, 0, 4, 0, 4, 0, + 1, 1, 3, 2, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 3, 1, 0, 4, 0, + 4, 0, 4, 1, 0, 4, 3, 0, 6, 0, + 1, 1, 3, 2, 0, 4, 0, 4, 0, 1, + 1, 3, 2, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 0, 4, 1, 1, 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, 0, 4, 3, 0, 4, 0, 4, + 0, 6, 0, 1, 1, 3, 2, 0, 4, 0, + 4, 1, 3, 2, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 0, 4, 3, 0, 4, + 3, 3, 0, 6, 0, 1, 1, 3, 2, 0, + 4, 0, 4, 0, 1, 1, 3, 2, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, + 4, 0, 4, 0, 6, 1, 1, 0, 4, 0, + 6, 1, 3, 2, 0, 4, 0, 1, 1, 3, + 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 4, 0, 4, + 3, 0, 6, 1, 3, 2, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 0, 4, 1, 1, 1, + 3, 0, 4, 3, 3, 3, 0, 6, 1, 3, + 2, 1, 1, 1, 1, 1, 0, 4, 0, 4, + 0, 6, 1, 3, 2, 1, 1, 1, 1, 1, + 1, 3, 0, 4, 3, 0, 4, 0, 6, 0, + 4, 1, 3, 2, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 3, 0, 4, 0, 4, 3, 0, 4, + 3, 3, 0, 4, 1, 1, 0, 4, 3, 3, + 0, 4, 0, 4, 0, 4, 0, 4, 0, 6, + 0, 4, 1, 3, 2, 1, 1, 0, 6, 3, + 0, 6, 1, 3, 2, 0, 4, 1, 3, 2, + 1, 1, 1, 1, 1, 1, 1, 3, 0, 4, + 0, 6, 1, 3, 2, 0, 4, 1, 3, 2, + 1, 1, 1, 1, 1, 0, 4, 3, 3, 3, + 0, 4, 0, 6, 1, 3, 2, 1, 1, 3 + }; + + +#if PARSER6_DEBUG || 1 + // YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + // First, the terminals, then, starting at \a YYNTOKENS, nonterminals. + const char* + const Dhcp6Parser::yytname_[] = + { + "\"end of file\"", "error", "\"invalid token\"", "\",\"", "\":\"", + "\"[\"", "\"]\"", "\"{\"", "\"}\"", "\"null\"", "\"Dhcp6\"", + "\"data-directory\"", "\"config-control\"", "\"config-databases\"", + "\"config-fetch-wait-time\"", "\"interfaces-config\"", "\"interfaces\"", + "\"re-detect\"", "\"service-sockets-require-all\"", + "\"service-sockets-retry-wait-time\"", "\"service-sockets-max-retries\"", + "\"lease-database\"", "\"hosts-database\"", "\"hosts-databases\"", + "\"type\"", "\"memfile\"", "\"mysql\"", "\"postgresql\"", "\"user\"", + "\"password\"", "\"host\"", "\"port\"", "\"persist\"", + "\"lfc-interval\"", "\"readonly\"", "\"connect-timeout\"", + "\"read-timeout\"", "\"write-timeout\"", "\"tcp-user-timeout\"", + "\"max-reconnect-tries\"", "\"reconnect-wait-time\"", "\"on-fail\"", + "\"stop-retry-exit\"", "\"serve-retry-exit\"", + "\"serve-retry-continue\"", "\"max-row-errors\"", "\"trust-anchor\"", + "\"cert-file\"", "\"key-file\"", "\"cipher-list\"", + "\"preferred-lifetime\"", "\"min-preferred-lifetime\"", + "\"max-preferred-lifetime\"", "\"valid-lifetime\"", + "\"min-valid-lifetime\"", "\"max-valid-lifetime\"", "\"renew-timer\"", + "\"rebind-timer\"", "\"calculate-tee-times\"", "\"t1-percent\"", + "\"t2-percent\"", "\"cache-threshold\"", "\"cache-max-age\"", + "\"decline-probation-period\"", "\"server-tag\"", + "\"statistic-default-sample-count\"", "\"statistic-default-sample-age\"", + "\"ddns-send-updates\"", "\"ddns-override-no-update\"", + "\"ddns-override-client-update\"", "\"ddns-replace-client-name\"", + "\"ddns-generated-prefix\"", "\"ddns-qualifying-suffix\"", + "\"ddns-update-on-renew\"", "\"ddns-use-conflict-resolution\"", + "\"ddns-ttl-percent\"", "\"store-extended-info\"", "\"subnet6\"", + "\"option-def\"", "\"option-data\"", "\"name\"", "\"data\"", "\"code\"", + "\"space\"", "\"csv-format\"", "\"always-send\"", "\"never-send\"", + "\"record-types\"", "\"encapsulate\"", "\"array\"", + "\"parked-packet-limit\"", "\"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\"", "\"pool-id\"", + "\"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\"", + "\"unwarned-reclaim-cycles\"", "\"server-id\"", "\"LLT\"", "\"EN\"", + "\"LL\"", "\"identifier\"", "\"htype\"", "\"time\"", "\"enterprise-id\"", + "\"dhcp4o6-port\"", "\"multi-threading\"", "\"enable-multi-threading\"", + "\"thread-pool-size\"", "\"packet-queue-size\"", "\"control-socket\"", + "\"socket-type\"", "\"socket-name\"", "\"dhcp-queue-control\"", + "\"enable-queue\"", "\"queue-type\"", "\"capacity\"", "\"dhcp-ddns\"", + "\"enable-updates\"", "\"qualifying-suffix\"", "\"server-ip\"", + "\"server-port\"", "\"sender-ip\"", "\"sender-port\"", + "\"max-queue-size\"", "\"ncr-protocol\"", "\"ncr-format\"", + "\"override-no-update\"", "\"override-client-update\"", + "\"replace-client-name\"", "\"generated-prefix\"", "\"UDP\"", "\"TCP\"", + "\"JSON\"", "\"when-present\"", "\"never\"", "\"always\"", + "\"when-not-present\"", "\"hostname-char-set\"", + "\"hostname-char-replacement\"", "\"early-global-reservations-lookup\"", + "\"ip-reservations-unique\"", "\"reservations-lookup-first\"", + "\"loggers\"", "\"output_options\"", "\"output\"", "\"debuglevel\"", + "\"severity\"", "\"flush\"", "\"maxsize\"", "\"maxver\"", "\"pattern\"", + "\"compatibility\"", "\"lenient-option-parsing\"", "TOPLEVEL_JSON", + "TOPLEVEL_DHCP6", "SUB_DHCP6", "SUB_INTERFACES6", "SUB_SUBNET6", + "SUB_POOL6", "SUB_PD_POOL", "SUB_RESERVATION", "SUB_OPTION_DEFS", + "SUB_OPTION_DEF", "SUB_OPTION_DATA", "SUB_HOOKS_LIBRARY", + "SUB_DHCP_DDNS", "SUB_CONFIG_CONTROL", "\"constant string\"", + "\"integer\"", "\"floating point\"", "\"boolean\"", "$accept", "start", + "$@1", "$@2", "$@3", "$@4", "$@5", "$@6", "$@7", "$@8", "$@9", "$@10", + "$@11", "$@12", "$@13", "$@14", "value", "sub_json", "map2", "$@15", + "map_value", "map_content", "not_empty_map", "list_generic", "$@16", + "list_content", "not_empty_list", "list_strings", "$@17", + "list_strings_content", "not_empty_list_strings", "unknown_map_entry", + "syntax_map", "$@18", "global_object", "$@19", "global_object_comma", + "sub_dhcp6", "$@20", "global_params", "global_param", "data_directory", + "$@21", "preferred_lifetime", "min_preferred_lifetime", + "max_preferred_lifetime", "valid_lifetime", "min_valid_lifetime", + "max_valid_lifetime", "renew_timer", "rebind_timer", + "calculate_tee_times", "t1_percent", "t2_percent", "cache_threshold", + "cache_max_age", "decline_probation_period", "ddns_send_updates", + "ddns_override_no_update", "ddns_override_client_update", + "ddns_replace_client_name", "$@22", "ddns_replace_client_name_value", + "ddns_generated_prefix", "$@23", "ddns_qualifying_suffix", "$@24", + "ddns_update_on_renew", "ddns_use_conflict_resolution", + "ddns_ttl_percent", "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", "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", + "read_timeout", "write_timeout", "tcp_user_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", "$@52", + "dhcp_multi_threading", "$@53", "multi_threading_params", + "multi_threading_param", "enable_multi_threading", "thread_pool_size", + "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", "$@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", + "$@68", "hr_mode", "id", "rapid_commit", "shared_networks", "$@69", + "shared_networks_content", "shared_networks_list", "shared_network", + "$@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", "$@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", "$@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", "$@82", + "option_data_code", "option_data_space", "option_data_csv_format", + "option_data_always_send", "option_data_never_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", "pool_id", "user_context", "$@87", "comment", "$@88", + "pd_pools_list", "$@89", "pd_pools_list_content", + "not_empty_pd_pools_list", "pd_pool_entry", "$@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", "$@95", "sub_reservation", + "$@96", "reservation_params", "not_empty_reservation_params", + "reservation_param", "ip_addresses", "$@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", "$@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", "$@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 + + +#if PARSER6_DEBUG + const short + Dhcp6Parser::yyrline_[] = + { + 0, 317, 317, 317, 318, 318, 319, 319, 320, 320, + 321, 321, 322, 322, 323, 323, 324, 324, 325, 325, + 326, 326, 327, 327, 328, 328, 329, 329, 330, 330, + 338, 339, 340, 341, 342, 343, 344, 347, 352, 352, + 363, 366, 367, 370, 375, 381, 386, 386, 393, 394, + 397, 401, 405, 411, 411, 418, 419, 422, 426, 430, + 440, 449, 449, 464, 464, 478, 481, 487, 487, 496, + 497, 498, 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, 561, 562, + 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 575, 575, 584, 590, 596, 602, 608, 614, 620, 626, + 632, 638, 644, 650, 656, 662, 668, 674, 680, 686, + 686, 695, 698, 701, 704, 707, 713, 713, 722, 722, + 731, 737, 743, 749, 749, 758, 758, 767, 773, 779, + 785, 785, 794, 800, 800, 809, 809, 818, 824, 830, + 836, 836, 848, 848, 857, 858, 859, 864, 865, 866, + 867, 868, 869, 870, 871, 874, 874, 885, 891, 897, + 903, 909, 909, 922, 922, 935, 935, 946, 947, 950, + 951, 952, 957, 957, 967, 968, 969, 974, 975, 976, + 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, + 987, 988, 989, 990, 991, 992, 993, 994, 995, 998, + 998, 1006, 1007, 1008, 1011, 1011, 1020, 1020, 1029, 1029, + 1038, 1044, 1044, 1053, 1059, 1065, 1071, 1077, 1083, 1089, + 1096, 1102, 1102, 1110, 1111, 1112, 1115, 1121, 1127, 1127, + 1136, 1136, 1145, 1145, 1154, 1154, 1163, 1163, 1174, 1175, + 1176, 1181, 1182, 1185, 1185, 1204, 1204, 1222, 1222, 1233, + 1234, 1235, 1240, 1241, 1244, 1249, 1254, 1254, 1265, 1266, + 1267, 1272, 1273, 1274, 1277, 1282, 1289, 1289, 1302, 1302, + 1315, 1316, 1317, 1322, 1323, 1324, 1325, 1326, 1327, 1330, + 1336, 1342, 1348, 1348, 1359, 1360, 1363, 1364, 1365, 1370, + 1370, 1380, 1380, 1390, 1391, 1392, 1395, 1398, 1399, 1402, + 1402, 1411, 1411, 1420, 1420, 1432, 1433, 1434, 1439, 1440, + 1441, 1442, 1443, 1444, 1447, 1453, 1459, 1465, 1471, 1477, + 1486, 1486, 1500, 1501, 1504, 1505, 1506, 1515, 1515, 1541, + 1541, 1552, 1553, 1554, 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, 1592, 1593, 1594, 1595, + 1596, 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, + 1608, 1608, 1617, 1617, 1626, 1626, 1635, 1635, 1644, 1644, + 1655, 1661, 1667, 1673, 1673, 1681, 1682, 1683, 1684, 1687, + 1693, 1701, 1701, 1713, 1714, 1718, 1719, 1720, 1725, 1725, + 1733, 1734, 1735, 1740, 1741, 1742, 1743, 1744, 1745, 1746, + 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, + 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, + 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, + 1777, 1778, 1779, 1780, 1781, 1782, 1789, 1789, 1803, 1803, + 1812, 1813, 1816, 1817, 1818, 1825, 1825, 1840, 1840, 1854, + 1855, 1858, 1859, 1860, 1865, 1866, 1867, 1868, 1869, 1870, + 1871, 1872, 1873, 1874, 1877, 1879, 1885, 1887, 1887, 1896, + 1896, 1905, 1905, 1914, 1916, 1916, 1925, 1935, 1935, 1948, + 1949, 1954, 1955, 1956, 1963, 1963, 1975, 1975, 1987, 1988, + 1993, 1994, 1995, 2002, 2003, 2004, 2005, 2006, 2007, 2008, + 2009, 2010, 2011, 2014, 2016, 2016, 2025, 2027, 2029, 2035, + 2041, 2050, 2050, 2063, 2064, 2067, 2068, 2069, 2074, 2074, + 2084, 2084, 2094, 2095, 2096, 2101, 2102, 2103, 2104, 2105, + 2106, 2107, 2108, 2111, 2111, 2120, 2126, 2126, 2151, 2151, + 2181, 2181, 2194, 2195, 2198, 2199, 2200, 2205, 2205, 2217, + 2217, 2229, 2230, 2231, 2236, 2237, 2238, 2239, 2240, 2241, + 2242, 2243, 2244, 2245, 2246, 2249, 2249, 2258, 2264, 2264, + 2273, 2279, 2288, 2288, 2299, 2300, 2303, 2304, 2305, 2310, + 2310, 2319, 2319, 2328, 2329, 2332, 2333, 2334, 2340, 2341, + 2342, 2343, 2344, 2345, 2346, 2347, 2348, 2349, 2350, 2353, + 2353, 2364, 2364, 2375, 2375, 2384, 2384, 2393, 2393, 2402, + 2402, 2411, 2411, 2425, 2425, 2436, 2437, 2440, 2440, 2452, + 2452, 2463, 2464, 2465, 2470, 2470, 2480, 2481, 2484, 2485, + 2486, 2491, 2492, 2493, 2494, 2495, 2496, 2497, 2498, 2499, + 2500, 2501, 2502, 2503, 2504, 2507, 2509, 2509, 2518, 2518, + 2527, 2536, 2536, 2549, 2550, 2551, 2556, 2557, 2558, 2559, + 2560, 2561, 2562, 2563, 2564, 2567, 2567, 2575, 2576, 2577, + 2580, 2586, 2586, 2595, 2601, 2609, 2617, 2617, 2628, 2629, + 2630, 2635, 2636, 2637, 2638, 2639, 2642, 2642, 2651, 2651, + 2663, 2663, 2676, 2677, 2678, 2683, 2684, 2685, 2686, 2687, + 2688, 2691, 2697, 2697, 2706, 2712, 2712, 2722, 2722, 2735, + 2735, 2745, 2746, 2747, 2752, 2753, 2754, 2755, 2756, 2757, + 2758, 2759, 2760, 2761, 2762, 2763, 2764, 2765, 2766, 2767, + 2768, 2769, 2772, 2779, 2779, 2788, 2788, 2797, 2803, 2803, + 2812, 2818, 2824, 2824, 2833, 2834, 2837, 2837, 2847, 2854, + 2861, 2861, 2870, 2870, 2880, 2880, 2890, 2890, 2902, 2902, + 2914, 2914, 2924, 2925, 2926, 2932, 2933, 2936, 2936, 2947, + 2955, 2955, 2968, 2969, 2970, 2976, 2976, 2984, 2985, 2986, + 2991, 2992, 2993, 2994, 2995, 2996, 2997, 3000, 3006, 3006, + 3015, 3015, 3026, 3027, 3028, 3033, 3033, 3041, 3042, 3043, + 3048, 3049, 3050, 3051, 3052, 3055, 3055, 3064, 3070, 3076, + 3082, 3082, 3091, 3091, 3102, 3103, 3104, 3109, 3110, 3113 + }; + + void + Dhcp6Parser::yy_stack_print_ () const + { + *yycdebug_ << "Stack now"; + for (stack_type::const_iterator + i = yystack_.begin (), + i_end = yystack_.end (); + i != i_end; ++i) + *yycdebug_ << ' ' << int (i->state); + *yycdebug_ << '\n'; + } + + void + Dhcp6Parser::yy_reduce_print_ (int yyrule) const + { + int yylno = yyrline_[yyrule]; + int yynrhs = yyr2_[yyrule]; + // Print the symbols being reduced, and their result. + *yycdebug_ << "Reducing stack by rule " << yyrule - 1 + << " (line " << yylno << "):\n"; + // The symbols being reduced. + for (int yyi = 0; yyi < yynrhs; yyi++) + YY_SYMBOL_PRINT (" $" << yyi + 1 << " =", + yystack_[(yynrhs) - (yyi + 1)]); + } +#endif // PARSER6_DEBUG + + +#line 14 "dhcp6_parser.yy" +} } // isc::dhcp +#line 6544 "dhcp6_parser.cc" + +#line 3119 "dhcp6_parser.yy" + + +void +isc::dhcp::Dhcp6Parser::error(const location_type& loc, + const std::string& what) +{ + ctx.error(loc, what); +} |