// 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 . // 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 #line 52 "dhcp6_parser.cc" #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include // 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 (0) # define YY_STACK_PRINT() static_cast (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 145 "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 void Dhcp6Parser::yy_destroy_ (const char* yymsg, basic_symbol& yysym) const { if (yymsg) YY_SYMBOL_PRINT (yymsg, yysym); } #if PARSER6_DEBUG template void Dhcp6Parser::yy_print_ (std::ostream& yyo, const basic_symbol& 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 293 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < std::string > (); } #line 404 "dhcp6_parser.cc" break; case symbol_kind::S_INTEGER: // "integer" #line 293 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < int64_t > (); } #line 410 "dhcp6_parser.cc" break; case symbol_kind::S_FLOAT: // "floating point" #line 293 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < double > (); } #line 416 "dhcp6_parser.cc" break; case symbol_kind::S_BOOLEAN: // "boolean" #line 293 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < bool > (); } #line 422 "dhcp6_parser.cc" break; case symbol_kind::S_value: // value #line 293 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 428 "dhcp6_parser.cc" break; case symbol_kind::S_map_value: // map_value #line 293 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 434 "dhcp6_parser.cc" break; case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value #line 293 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 440 "dhcp6_parser.cc" break; case symbol_kind::S_db_type: // db_type #line 293 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 446 "dhcp6_parser.cc" break; case symbol_kind::S_on_fail_mode: // on_fail_mode #line 293 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 452 "dhcp6_parser.cc" break; case symbol_kind::S_hr_mode: // hr_mode #line 293 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 458 "dhcp6_parser.cc" break; case symbol_kind::S_duid_type: // duid_type #line 293 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 464 "dhcp6_parser.cc" break; case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value #line 293 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 470 "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 302 "dhcp6_parser.yy" { ctx.ctx_ = ctx.NO_KEYWORD; } #line 750 "dhcp6_parser.cc" break; case 4: // $@2: %empty #line 303 "dhcp6_parser.yy" { ctx.ctx_ = ctx.CONFIG; } #line 756 "dhcp6_parser.cc" break; case 6: // $@3: %empty #line 304 "dhcp6_parser.yy" { ctx.ctx_ = ctx.DHCP6; } #line 762 "dhcp6_parser.cc" break; case 8: // $@4: %empty #line 305 "dhcp6_parser.yy" { ctx.ctx_ = ctx.INTERFACES_CONFIG; } #line 768 "dhcp6_parser.cc" break; case 10: // $@5: %empty #line 306 "dhcp6_parser.yy" { ctx.ctx_ = ctx.SUBNET6; } #line 774 "dhcp6_parser.cc" break; case 12: // $@6: %empty #line 307 "dhcp6_parser.yy" { ctx.ctx_ = ctx.POOLS; } #line 780 "dhcp6_parser.cc" break; case 14: // $@7: %empty #line 308 "dhcp6_parser.yy" { ctx.ctx_ = ctx.PD_POOLS; } #line 786 "dhcp6_parser.cc" break; case 16: // $@8: %empty #line 309 "dhcp6_parser.yy" { ctx.ctx_ = ctx.RESERVATIONS; } #line 792 "dhcp6_parser.cc" break; case 18: // $@9: %empty #line 310 "dhcp6_parser.yy" { ctx.ctx_ = ctx.DHCP6; } #line 798 "dhcp6_parser.cc" break; case 20: // $@10: %empty #line 311 "dhcp6_parser.yy" { ctx.ctx_ = ctx.OPTION_DEF; } #line 804 "dhcp6_parser.cc" break; case 22: // $@11: %empty #line 312 "dhcp6_parser.yy" { ctx.ctx_ = ctx.OPTION_DATA; } #line 810 "dhcp6_parser.cc" break; case 24: // $@12: %empty #line 313 "dhcp6_parser.yy" { ctx.ctx_ = ctx.HOOKS_LIBRARIES; } #line 816 "dhcp6_parser.cc" break; case 26: // $@13: %empty #line 314 "dhcp6_parser.yy" { ctx.ctx_ = ctx.DHCP_DDNS; } #line 822 "dhcp6_parser.cc" break; case 28: // $@14: %empty #line 315 "dhcp6_parser.yy" { ctx.ctx_ = ctx.CONFIG_CONTROL; } #line 828 "dhcp6_parser.cc" break; case 30: // value: "integer" #line 323 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); } #line 834 "dhcp6_parser.cc" break; case 31: // value: "floating point" #line 324 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); } #line 840 "dhcp6_parser.cc" break; case 32: // value: "boolean" #line 325 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); } #line 846 "dhcp6_parser.cc" break; case 33: // value: "constant string" #line 326 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); } #line 852 "dhcp6_parser.cc" break; case 34: // value: "null" #line 327 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); } #line 858 "dhcp6_parser.cc" break; case 35: // value: map2 #line 328 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } #line 864 "dhcp6_parser.cc" break; case 36: // value: list_generic #line 329 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } #line 870 "dhcp6_parser.cc" break; case 37: // sub_json: value #line 332 "dhcp6_parser.yy" { // Push back the JSON value on the stack ctx.stack_.push_back(yystack_[0].value.as < ElementPtr > ()); } #line 879 "dhcp6_parser.cc" break; case 38: // $@15: %empty #line 337 "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 890 "dhcp6_parser.cc" break; case 39: // map2: "{" $@15 map_content "}" #line 342 "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 900 "dhcp6_parser.cc" break; case 40: // map_value: map2 #line 348 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } #line 906 "dhcp6_parser.cc" break; case 43: // not_empty_map: "constant string" ":" value #line 355 "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 916 "dhcp6_parser.cc" break; case 44: // not_empty_map: not_empty_map "," "constant string" ":" value #line 360 "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 927 "dhcp6_parser.cc" break; case 45: // not_empty_map: not_empty_map "," #line 366 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 935 "dhcp6_parser.cc" break; case 46: // $@16: %empty #line 371 "dhcp6_parser.yy" { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(l); } #line 944 "dhcp6_parser.cc" break; case 47: // list_generic: "[" $@16 list_content "]" #line 374 "dhcp6_parser.yy" { // list parsing complete. Put any sanity checking here } #line 952 "dhcp6_parser.cc" break; case 50: // not_empty_list: value #line 382 "dhcp6_parser.yy" { // List consisting of a single element. ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ()); } #line 961 "dhcp6_parser.cc" break; case 51: // not_empty_list: not_empty_list "," value #line 386 "dhcp6_parser.yy" { // List ending with , and a value. ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ()); } #line 970 "dhcp6_parser.cc" break; case 52: // not_empty_list: not_empty_list "," #line 390 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 978 "dhcp6_parser.cc" break; case 53: // $@17: %empty #line 396 "dhcp6_parser.yy" { // List parsing about to start } #line 986 "dhcp6_parser.cc" break; case 54: // list_strings: "[" $@17 list_strings_content "]" #line 398 "dhcp6_parser.yy" { // list parsing complete. Put any sanity checking here //ctx.stack_.pop_back(); } #line 995 "dhcp6_parser.cc" break; case 57: // not_empty_list_strings: "constant string" #line 407 "dhcp6_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(s); } #line 1004 "dhcp6_parser.cc" break; case 58: // not_empty_list_strings: not_empty_list_strings "," "constant string" #line 411 "dhcp6_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(s); } #line 1013 "dhcp6_parser.cc" break; case 59: // not_empty_list_strings: not_empty_list_strings "," #line 415 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 1021 "dhcp6_parser.cc" break; case 60: // unknown_map_entry: "constant string" ":" #line 425 "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 1032 "dhcp6_parser.cc" break; case 61: // $@18: %empty #line 434 "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 1043 "dhcp6_parser.cc" break; case 62: // syntax_map: "{" $@18 global_object "}" #line 439 "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 1056 "dhcp6_parser.cc" break; case 63: // $@19: %empty #line 449 "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 1071 "dhcp6_parser.cc" break; case 64: // global_object: "Dhcp6" $@19 ":" "{" global_params "}" #line 458 "dhcp6_parser.yy" { // No global parameter is required ctx.stack_.pop_back(); ctx.leave(); } #line 1081 "dhcp6_parser.cc" break; case 66: // global_object_comma: global_object "," #line 466 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 1089 "dhcp6_parser.cc" break; case 67: // $@20: %empty #line 472 "dhcp6_parser.yy" { // Parse the Dhcp6 map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } #line 1099 "dhcp6_parser.cc" break; case 68: // sub_dhcp6: "{" $@20 global_params "}" #line 476 "dhcp6_parser.yy" { // No global parameter is required // parsing completed } #line 1108 "dhcp6_parser.cc" break; case 71: // global_params: global_params "," #line 483 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 1116 "dhcp6_parser.cc" break; case 137: // $@21: %empty #line 557 "dhcp6_parser.yy" { ctx.unique("data-directory", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 1125 "dhcp6_parser.cc" break; case 138: // data_directory: "data-directory" $@21 ":" "constant string" #line 560 "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 1135 "dhcp6_parser.cc" break; case 139: // preferred_lifetime: "preferred-lifetime" ":" "integer" #line 566 "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 1145 "dhcp6_parser.cc" break; case 140: // min_preferred_lifetime: "min-preferred-lifetime" ":" "integer" #line 572 "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 1155 "dhcp6_parser.cc" break; case 141: // max_preferred_lifetime: "max-preferred-lifetime" ":" "integer" #line 578 "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 1165 "dhcp6_parser.cc" break; case 142: // valid_lifetime: "valid-lifetime" ":" "integer" #line 584 "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 1175 "dhcp6_parser.cc" break; case 143: // min_valid_lifetime: "min-valid-lifetime" ":" "integer" #line 590 "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 1185 "dhcp6_parser.cc" break; case 144: // max_valid_lifetime: "max-valid-lifetime" ":" "integer" #line 596 "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 1195 "dhcp6_parser.cc" break; case 145: // renew_timer: "renew-timer" ":" "integer" #line 602 "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 1205 "dhcp6_parser.cc" break; case 146: // rebind_timer: "rebind-timer" ":" "integer" #line 608 "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 1215 "dhcp6_parser.cc" break; case 147: // calculate_tee_times: "calculate-tee-times" ":" "boolean" #line 614 "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 1225 "dhcp6_parser.cc" break; case 148: // t1_percent: "t1-percent" ":" "floating point" #line 620 "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 1235 "dhcp6_parser.cc" break; case 149: // t2_percent: "t2-percent" ":" "floating point" #line 626 "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 1245 "dhcp6_parser.cc" break; case 150: // cache_threshold: "cache-threshold" ":" "floating point" #line 632 "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 1255 "dhcp6_parser.cc" break; case 151: // cache_max_age: "cache-max-age" ":" "integer" #line 638 "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 1265 "dhcp6_parser.cc" break; case 152: // decline_probation_period: "decline-probation-period" ":" "integer" #line 644 "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 1275 "dhcp6_parser.cc" break; case 153: // ddns_send_updates: "ddns-send-updates" ":" "boolean" #line 650 "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 1285 "dhcp6_parser.cc" break; case 154: // ddns_override_no_update: "ddns-override-no-update" ":" "boolean" #line 656 "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 1295 "dhcp6_parser.cc" break; case 155: // ddns_override_client_update: "ddns-override-client-update" ":" "boolean" #line 662 "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 1305 "dhcp6_parser.cc" break; case 156: // $@22: %empty #line 668 "dhcp6_parser.yy" { ctx.unique("ddns-replace-client-name", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.REPLACE_CLIENT_NAME); } #line 1314 "dhcp6_parser.cc" break; case 157: // ddns_replace_client_name: "ddns-replace-client-name" $@22 ":" ddns_replace_client_name_value #line 671 "dhcp6_parser.yy" { ctx.stack_.back()->set("ddns-replace-client-name", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } #line 1323 "dhcp6_parser.cc" break; case 158: // ddns_replace_client_name_value: "when-present" #line 677 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location))); } #line 1331 "dhcp6_parser.cc" break; case 159: // ddns_replace_client_name_value: "never" #line 680 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location))); } #line 1339 "dhcp6_parser.cc" break; case 160: // ddns_replace_client_name_value: "always" #line 683 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location))); } #line 1347 "dhcp6_parser.cc" break; case 161: // ddns_replace_client_name_value: "when-not-present" #line 686 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location))); } #line 1355 "dhcp6_parser.cc" break; case 162: // ddns_replace_client_name_value: "boolean" #line 689 "dhcp6_parser.yy" { error(yystack_[0].location, "boolean values for the replace-client-name are " "no longer supported"); } #line 1364 "dhcp6_parser.cc" break; case 163: // $@23: %empty #line 695 "dhcp6_parser.yy" { ctx.unique("ddns-generated-prefix", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 1373 "dhcp6_parser.cc" break; case 164: // ddns_generated_prefix: "ddns-generated-prefix" $@23 ":" "constant string" #line 698 "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 1383 "dhcp6_parser.cc" break; case 165: // $@24: %empty #line 704 "dhcp6_parser.yy" { ctx.unique("ddns-qualifying-suffix", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 1392 "dhcp6_parser.cc" break; case 166: // ddns_qualifying_suffix: "ddns-qualifying-suffix" $@24 ":" "constant string" #line 707 "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 1402 "dhcp6_parser.cc" break; case 167: // ddns_update_on_renew: "ddns-update-on-renew" ":" "boolean" #line 713 "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 1412 "dhcp6_parser.cc" break; case 168: // ddns_use_conflict_resolution: "ddns-use-conflict-resolution" ":" "boolean" #line 719 "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 1422 "dhcp6_parser.cc" break; case 169: // $@25: %empty #line 725 "dhcp6_parser.yy" { ctx.unique("hostname-char-set", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 1431 "dhcp6_parser.cc" break; case 170: // hostname_char_set: "hostname-char-set" $@25 ":" "constant string" #line 728 "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 1441 "dhcp6_parser.cc" break; case 171: // $@26: %empty #line 734 "dhcp6_parser.yy" { ctx.unique("hostname-char-replacement", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 1450 "dhcp6_parser.cc" break; case 172: // hostname_char_replacement: "hostname-char-replacement" $@26 ":" "constant string" #line 737 "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 1460 "dhcp6_parser.cc" break; case 173: // store_extended_info: "store-extended-info" ":" "boolean" #line 743 "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 1470 "dhcp6_parser.cc" break; case 174: // statistic_default_sample_count: "statistic-default-sample-count" ":" "integer" #line 749 "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 1480 "dhcp6_parser.cc" break; case 175: // statistic_default_sample_age: "statistic-default-sample-age" ":" "integer" #line 755 "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 1490 "dhcp6_parser.cc" break; case 176: // $@27: %empty #line 761 "dhcp6_parser.yy" { ctx.unique("server-tag", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 1499 "dhcp6_parser.cc" break; case 177: // server_tag: "server-tag" $@27 ":" "constant string" #line 764 "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 1509 "dhcp6_parser.cc" break; case 178: // parked_packet_limit: "parked-packet-limit" ":" "integer" #line 770 "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 1519 "dhcp6_parser.cc" break; case 179: // early_global_reservations_lookup: "early-global-reservations-lookup" ":" "boolean" #line 776 "dhcp6_parser.yy" { ctx.unique("early-global-reservations-lookup", ctx.loc2pos(yystack_[2].location)); ElementPtr early(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("early-global-reservations-lookup", early); } #line 1529 "dhcp6_parser.cc" break; case 180: // ip_reservations_unique: "ip-reservations-unique" ":" "boolean" #line 782 "dhcp6_parser.yy" { ctx.unique("ip-reservations-unique", ctx.loc2pos(yystack_[2].location)); ElementPtr unique(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ip-reservations-unique", unique); } #line 1539 "dhcp6_parser.cc" break; case 181: // reservations_lookup_first: "reservations-lookup-first" ":" "boolean" #line 788 "dhcp6_parser.yy" { ctx.unique("reservations-lookup-first", ctx.loc2pos(yystack_[2].location)); ElementPtr first(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("reservations-lookup-first", first); } #line 1549 "dhcp6_parser.cc" break; case 182: // $@28: %empty #line 794 "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 1561 "dhcp6_parser.cc" break; case 183: // interfaces_config: "interfaces-config" $@28 ":" "{" interfaces_config_params "}" #line 800 "dhcp6_parser.yy" { // No interfaces config param is required ctx.stack_.pop_back(); ctx.leave(); } #line 1571 "dhcp6_parser.cc" break; case 184: // $@29: %empty #line 806 "dhcp6_parser.yy" { // Parse the interfaces-config map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } #line 1581 "dhcp6_parser.cc" break; case 185: // sub_interfaces6: "{" $@29 interfaces_config_params "}" #line 810 "dhcp6_parser.yy" { // No interfaces config param is required // parsing completed } #line 1590 "dhcp6_parser.cc" break; case 188: // interfaces_config_params: interfaces_config_params "," #line 817 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 1598 "dhcp6_parser.cc" break; case 197: // $@30: %empty #line 832 "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 1610 "dhcp6_parser.cc" break; case 198: // interfaces_list: "interfaces" $@30 ":" list_strings #line 838 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } #line 1619 "dhcp6_parser.cc" break; case 199: // re_detect: "re-detect" ":" "boolean" #line 843 "dhcp6_parser.yy" { ctx.unique("re-detect", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("re-detect", b); } #line 1629 "dhcp6_parser.cc" break; case 200: // service_sockets_require_all: "service-sockets-require-all" ":" "boolean" #line 849 "dhcp6_parser.yy" { ctx.unique("service-sockets-require-all", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("service-sockets-require-all", b); } #line 1639 "dhcp6_parser.cc" break; case 201: // service_sockets_retry_wait_time: "service-sockets-retry-wait-time" ":" "integer" #line 855 "dhcp6_parser.yy" { ctx.unique("service-sockets-retry-wait-time", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("service-sockets-retry-wait-time", n); } #line 1649 "dhcp6_parser.cc" break; case 202: // service_sockets_max_retries: "service-sockets-max-retries" ":" "integer" #line 861 "dhcp6_parser.yy" { ctx.unique("service-sockets-max-retries", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("service-sockets-max-retries", n); } #line 1659 "dhcp6_parser.cc" break; case 203: // $@31: %empty #line 867 "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 1671 "dhcp6_parser.cc" break; case 204: // lease_database: "lease-database" $@31 ":" "{" database_map_params "}" #line 873 "dhcp6_parser.yy" { // The type parameter is required ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); ctx.leave(); } #line 1682 "dhcp6_parser.cc" break; case 205: // $@32: %empty #line 880 "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 1694 "dhcp6_parser.cc" break; case 206: // hosts_database: "hosts-database" $@32 ":" "{" database_map_params "}" #line 886 "dhcp6_parser.yy" { // The type parameter is required ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); ctx.leave(); } #line 1705 "dhcp6_parser.cc" break; case 207: // $@33: %empty #line 893 "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 1717 "dhcp6_parser.cc" break; case 208: // hosts_databases: "hosts-databases" $@33 ":" "[" database_list "]" #line 899 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } #line 1726 "dhcp6_parser.cc" break; case 213: // not_empty_database_list: not_empty_database_list "," #line 910 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 1734 "dhcp6_parser.cc" break; case 214: // $@34: %empty #line 915 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } #line 1744 "dhcp6_parser.cc" break; case 215: // database: "{" $@34 database_map_params "}" #line 919 "dhcp6_parser.yy" { // The type parameter is required ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } #line 1754 "dhcp6_parser.cc" break; case 218: // database_map_params: database_map_params "," #line 927 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 1762 "dhcp6_parser.cc" break; case 238: // $@35: %empty #line 953 "dhcp6_parser.yy" { ctx.unique("type", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.DATABASE_TYPE); } #line 1771 "dhcp6_parser.cc" break; case 239: // database_type: "type" $@35 ":" db_type #line 956 "dhcp6_parser.yy" { ctx.stack_.back()->set("type", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } #line 1780 "dhcp6_parser.cc" break; case 240: // db_type: "memfile" #line 961 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("memfile", ctx.loc2pos(yystack_[0].location))); } #line 1786 "dhcp6_parser.cc" break; case 241: // db_type: "mysql" #line 962 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("mysql", ctx.loc2pos(yystack_[0].location))); } #line 1792 "dhcp6_parser.cc" break; case 242: // db_type: "postgresql" #line 963 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("postgresql", ctx.loc2pos(yystack_[0].location))); } #line 1798 "dhcp6_parser.cc" break; case 243: // $@36: %empty #line 966 "dhcp6_parser.yy" { ctx.unique("user", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 1807 "dhcp6_parser.cc" break; case 244: // user: "user" $@36 ":" "constant string" #line 969 "dhcp6_parser.yy" { ElementPtr user(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("user", user); ctx.leave(); } #line 1817 "dhcp6_parser.cc" break; case 245: // $@37: %empty #line 975 "dhcp6_parser.yy" { ctx.unique("password", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 1826 "dhcp6_parser.cc" break; case 246: // password: "password" $@37 ":" "constant string" #line 978 "dhcp6_parser.yy" { ElementPtr pwd(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("password", pwd); ctx.leave(); } #line 1836 "dhcp6_parser.cc" break; case 247: // $@38: %empty #line 984 "dhcp6_parser.yy" { ctx.unique("host", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 1845 "dhcp6_parser.cc" break; case 248: // host: "host" $@38 ":" "constant string" #line 987 "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 1855 "dhcp6_parser.cc" break; case 249: // port: "port" ":" "integer" #line 993 "dhcp6_parser.yy" { ctx.unique("port", ctx.loc2pos(yystack_[2].location)); ElementPtr p(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("port", p); } #line 1865 "dhcp6_parser.cc" break; case 250: // $@39: %empty #line 999 "dhcp6_parser.yy" { ctx.unique("name", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 1874 "dhcp6_parser.cc" break; case 251: // name: "name" $@39 ":" "constant string" #line 1002 "dhcp6_parser.yy" { ElementPtr name(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("name", name); ctx.leave(); } #line 1884 "dhcp6_parser.cc" break; case 252: // persist: "persist" ":" "boolean" #line 1008 "dhcp6_parser.yy" { ctx.unique("persist", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("persist", n); } #line 1894 "dhcp6_parser.cc" break; case 253: // lfc_interval: "lfc-interval" ":" "integer" #line 1014 "dhcp6_parser.yy" { ctx.unique("lfc-interval", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("lfc-interval", n); } #line 1904 "dhcp6_parser.cc" break; case 254: // readonly: "readonly" ":" "boolean" #line 1020 "dhcp6_parser.yy" { ctx.unique("readonly", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("readonly", n); } #line 1914 "dhcp6_parser.cc" break; case 255: // connect_timeout: "connect-timeout" ":" "integer" #line 1026 "dhcp6_parser.yy" { ctx.unique("connect-timeout", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("connect-timeout", n); } #line 1924 "dhcp6_parser.cc" break; case 256: // reconnect_wait_time: "reconnect-wait-time" ":" "integer" #line 1032 "dhcp6_parser.yy" { ctx.unique("reconnect-wait-time", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("reconnect-wait-time", n); } #line 1934 "dhcp6_parser.cc" break; case 257: // $@40: %empty #line 1038 "dhcp6_parser.yy" { ctx.unique("on-fail", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.DATABASE_ON_FAIL); } #line 1943 "dhcp6_parser.cc" break; case 258: // on_fail: "on-fail" $@40 ":" on_fail_mode #line 1041 "dhcp6_parser.yy" { ctx.stack_.back()->set("on-fail", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } #line 1952 "dhcp6_parser.cc" break; case 259: // on_fail_mode: "stop-retry-exit" #line 1046 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("stop-retry-exit", ctx.loc2pos(yystack_[0].location))); } #line 1958 "dhcp6_parser.cc" break; case 260: // on_fail_mode: "serve-retry-exit" #line 1047 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("serve-retry-exit", ctx.loc2pos(yystack_[0].location))); } #line 1964 "dhcp6_parser.cc" break; case 261: // on_fail_mode: "serve-retry-continue" #line 1048 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("serve-retry-continue", ctx.loc2pos(yystack_[0].location))); } #line 1970 "dhcp6_parser.cc" break; case 262: // max_row_errors: "max-row-errors" ":" "integer" #line 1051 "dhcp6_parser.yy" { ctx.unique("max-row-errors", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-row-errors", n); } #line 1980 "dhcp6_parser.cc" break; case 263: // max_reconnect_tries: "max-reconnect-tries" ":" "integer" #line 1057 "dhcp6_parser.yy" { ctx.unique("max-reconnect-tries", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-reconnect-tries", n); } #line 1990 "dhcp6_parser.cc" break; case 264: // $@41: %empty #line 1063 "dhcp6_parser.yy" { ctx.unique("trust-anchor", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 1999 "dhcp6_parser.cc" break; case 265: // trust_anchor: "trust-anchor" $@41 ":" "constant string" #line 1066 "dhcp6_parser.yy" { ElementPtr ca(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("trust-anchor", ca); ctx.leave(); } #line 2009 "dhcp6_parser.cc" break; case 266: // $@42: %empty #line 1072 "dhcp6_parser.yy" { ctx.unique("cert-file", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 2018 "dhcp6_parser.cc" break; case 267: // cert_file: "cert-file" $@42 ":" "constant string" #line 1075 "dhcp6_parser.yy" { ElementPtr cert(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("cert-file", cert); ctx.leave(); } #line 2028 "dhcp6_parser.cc" break; case 268: // $@43: %empty #line 1081 "dhcp6_parser.yy" { ctx.unique("key-file", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 2037 "dhcp6_parser.cc" break; case 269: // key_file: "key-file" $@43 ":" "constant string" #line 1084 "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 2047 "dhcp6_parser.cc" break; case 270: // $@44: %empty #line 1090 "dhcp6_parser.yy" { ctx.unique("cipher-list", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 2056 "dhcp6_parser.cc" break; case 271: // cipher_list: "cipher-list" $@44 ":" "constant string" #line 1093 "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 2066 "dhcp6_parser.cc" break; case 272: // $@45: %empty #line 1099 "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 2078 "dhcp6_parser.cc" break; case 273: // sanity_checks: "sanity-checks" $@45 ":" "{" sanity_checks_params "}" #line 1105 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } #line 2087 "dhcp6_parser.cc" break; case 276: // sanity_checks_params: sanity_checks_params "," #line 1112 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 2095 "dhcp6_parser.cc" break; case 278: // $@46: %empty #line 1119 "dhcp6_parser.yy" { ctx.unique("lease-checks", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 2104 "dhcp6_parser.cc" break; case 279: // lease_checks: "lease-checks" $@46 ":" "constant string" #line 1122 "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 2124 "dhcp6_parser.cc" break; case 280: // $@47: %empty #line 1138 "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 2136 "dhcp6_parser.cc" break; case 281: // mac_sources: "mac-sources" $@47 ":" "[" mac_sources_list "]" #line 1144 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } #line 2145 "dhcp6_parser.cc" break; case 284: // mac_sources_list: mac_sources_list "," #line 1151 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 2153 "dhcp6_parser.cc" break; case 287: // duid_id: "duid" #line 1160 "dhcp6_parser.yy" { ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(duid); } #line 2162 "dhcp6_parser.cc" break; case 288: // string_id: "constant string" #line 1165 "dhcp6_parser.yy" { ElementPtr duid(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(duid); } #line 2171 "dhcp6_parser.cc" break; case 289: // $@48: %empty #line 1170 "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 2183 "dhcp6_parser.cc" break; case 290: // host_reservation_identifiers: "host-reservation-identifiers" $@48 ":" "[" host_reservation_identifiers_list "]" #line 1176 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } #line 2192 "dhcp6_parser.cc" break; case 293: // host_reservation_identifiers_list: host_reservation_identifiers_list "," #line 1183 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 2200 "dhcp6_parser.cc" break; case 297: // hw_address_id: "hw-address" #line 1193 "dhcp6_parser.yy" { ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(hwaddr); } #line 2209 "dhcp6_parser.cc" break; case 298: // flex_id: "flex-id" #line 1198 "dhcp6_parser.yy" { ElementPtr flex_id(new StringElement("flex-id", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(flex_id); } #line 2218 "dhcp6_parser.cc" break; case 299: // $@49: %empty #line 1205 "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 2230 "dhcp6_parser.cc" break; case 300: // relay_supplied_options: "relay-supplied-options" $@49 ":" "[" list_content "]" #line 1211 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } #line 2239 "dhcp6_parser.cc" break; case 301: // $@50: %empty #line 1218 "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 2251 "dhcp6_parser.cc" break; case 302: // dhcp_multi_threading: "multi-threading" $@50 ":" "{" multi_threading_params "}" #line 1224 "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 2262 "dhcp6_parser.cc" break; case 305: // multi_threading_params: multi_threading_params "," #line 1233 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 2270 "dhcp6_parser.cc" break; case 312: // enable_multi_threading: "enable-multi-threading" ":" "boolean" #line 1246 "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 2280 "dhcp6_parser.cc" break; case 313: // thread_pool_size: "thread-pool-size" ":" "integer" #line 1252 "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 2290 "dhcp6_parser.cc" break; case 314: // packet_queue_size: "packet-queue-size" ":" "integer" #line 1258 "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 2300 "dhcp6_parser.cc" break; case 315: // $@51: %empty #line 1264 "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 2312 "dhcp6_parser.cc" break; case 316: // hooks_libraries: "hooks-libraries" $@51 ":" "[" hooks_libraries_list "]" #line 1270 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } #line 2321 "dhcp6_parser.cc" break; case 321: // not_empty_hooks_libraries_list: not_empty_hooks_libraries_list "," #line 1281 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 2329 "dhcp6_parser.cc" break; case 322: // $@52: %empty #line 1286 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } #line 2339 "dhcp6_parser.cc" break; case 323: // hooks_library: "{" $@52 hooks_params "}" #line 1290 "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 2349 "dhcp6_parser.cc" break; case 324: // $@53: %empty #line 1296 "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 2359 "dhcp6_parser.cc" break; case 325: // sub_hooks_library: "{" $@53 hooks_params "}" #line 1300 "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 2369 "dhcp6_parser.cc" break; case 328: // hooks_params: hooks_params "," #line 1308 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 2377 "dhcp6_parser.cc" break; case 332: // $@54: %empty #line 1318 "dhcp6_parser.yy" { ctx.unique("library", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 2386 "dhcp6_parser.cc" break; case 333: // library: "library" $@54 ":" "constant string" #line 1321 "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 2396 "dhcp6_parser.cc" break; case 334: // $@55: %empty #line 1327 "dhcp6_parser.yy" { ctx.unique("parameters", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 2405 "dhcp6_parser.cc" break; case 335: // parameters: "parameters" $@55 ":" map_value #line 1330 "dhcp6_parser.yy" { ctx.stack_.back()->set("parameters", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } #line 2414 "dhcp6_parser.cc" break; case 336: // $@56: %empty #line 1336 "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 2426 "dhcp6_parser.cc" break; case 337: // expired_leases_processing: "expired-leases-processing" $@56 ":" "{" expired_leases_params "}" #line 1342 "dhcp6_parser.yy" { // No expired lease parameter is required ctx.stack_.pop_back(); ctx.leave(); } #line 2436 "dhcp6_parser.cc" break; case 340: // expired_leases_params: expired_leases_params "," #line 1350 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 2444 "dhcp6_parser.cc" break; case 347: // reclaim_timer_wait_time: "reclaim-timer-wait-time" ":" "integer" #line 1363 "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 2454 "dhcp6_parser.cc" break; case 348: // flush_reclaimed_timer_wait_time: "flush-reclaimed-timer-wait-time" ":" "integer" #line 1369 "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 2464 "dhcp6_parser.cc" break; case 349: // hold_reclaimed_time: "hold-reclaimed-time" ":" "integer" #line 1375 "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 2474 "dhcp6_parser.cc" break; case 350: // max_reclaim_leases: "max-reclaim-leases" ":" "integer" #line 1381 "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 2484 "dhcp6_parser.cc" break; case 351: // max_reclaim_time: "max-reclaim-time" ":" "integer" #line 1387 "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 2494 "dhcp6_parser.cc" break; case 352: // unwarned_reclaim_cycles: "unwarned-reclaim-cycles" ":" "integer" #line 1393 "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 2504 "dhcp6_parser.cc" break; case 353: // $@57: %empty #line 1402 "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 2516 "dhcp6_parser.cc" break; case 354: // subnet6_list: "subnet6" $@57 ":" "[" subnet6_list_content "]" #line 1408 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } #line 2525 "dhcp6_parser.cc" break; case 359: // not_empty_subnet6_list: not_empty_subnet6_list "," #line 1422 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 2533 "dhcp6_parser.cc" break; case 360: // $@58: %empty #line 1431 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } #line 2543 "dhcp6_parser.cc" break; case 361: // subnet6: "{" $@58 subnet6_params "}" #line 1435 "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 2569 "dhcp6_parser.cc" break; case 362: // $@59: %empty #line 1457 "dhcp6_parser.yy" { // Parse the subnet6 list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } #line 2579 "dhcp6_parser.cc" break; case 363: // sub_subnet6: "{" $@59 subnet6_params "}" #line 1461 "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 2589 "dhcp6_parser.cc" break; case 366: // subnet6_params: subnet6_params "," #line 1470 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 2597 "dhcp6_parser.cc" break; case 410: // $@60: %empty #line 1521 "dhcp6_parser.yy" { ctx.unique("subnet", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 2606 "dhcp6_parser.cc" break; case 411: // subnet: "subnet" $@60 ":" "constant string" #line 1524 "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 2616 "dhcp6_parser.cc" break; case 412: // $@61: %empty #line 1530 "dhcp6_parser.yy" { ctx.unique("interface", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 2625 "dhcp6_parser.cc" break; case 413: // interface: "interface" $@61 ":" "constant string" #line 1533 "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 2635 "dhcp6_parser.cc" break; case 414: // $@62: %empty #line 1539 "dhcp6_parser.yy" { ctx.unique("interface-id", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 2644 "dhcp6_parser.cc" break; case 415: // interface_id: "interface-id" $@62 ":" "constant string" #line 1542 "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 2654 "dhcp6_parser.cc" break; case 416: // $@63: %empty #line 1548 "dhcp6_parser.yy" { ctx.unique("client-class", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 2663 "dhcp6_parser.cc" break; case 417: // client_class: "client-class" $@63 ":" "constant string" #line 1551 "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 2673 "dhcp6_parser.cc" break; case 418: // $@64: %empty #line 1557 "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 2685 "dhcp6_parser.cc" break; case 419: // require_client_classes: "require-client-classes" $@64 ":" list_strings #line 1563 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } #line 2694 "dhcp6_parser.cc" break; case 420: // reservations_global: "reservations-global" ":" "boolean" #line 1568 "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 2704 "dhcp6_parser.cc" break; case 421: // reservations_in_subnet: "reservations-in-subnet" ":" "boolean" #line 1574 "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 2714 "dhcp6_parser.cc" break; case 422: // reservations_out_of_pool: "reservations-out-of-pool" ":" "boolean" #line 1580 "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 2724 "dhcp6_parser.cc" break; case 423: // $@65: %empty #line 1586 "dhcp6_parser.yy" { ctx.unique("reservation-mode", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.RESERVATION_MODE); } #line 2733 "dhcp6_parser.cc" break; case 424: // reservation_mode: "reservation-mode" $@65 ":" hr_mode #line 1589 "dhcp6_parser.yy" { ctx.stack_.back()->set("reservation-mode", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } #line 2742 "dhcp6_parser.cc" break; case 425: // hr_mode: "disabled" #line 1594 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("disabled", ctx.loc2pos(yystack_[0].location))); } #line 2748 "dhcp6_parser.cc" break; case 426: // hr_mode: "out-of-pool" #line 1595 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(yystack_[0].location))); } #line 2754 "dhcp6_parser.cc" break; case 427: // hr_mode: "global" #line 1596 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("global", ctx.loc2pos(yystack_[0].location))); } #line 2760 "dhcp6_parser.cc" break; case 428: // hr_mode: "all" #line 1597 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("all", ctx.loc2pos(yystack_[0].location))); } #line 2766 "dhcp6_parser.cc" break; case 429: // id: "id" ":" "integer" #line 1600 "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 2776 "dhcp6_parser.cc" break; case 430: // rapid_commit: "rapid-commit" ":" "boolean" #line 1606 "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 2786 "dhcp6_parser.cc" break; case 431: // $@66: %empty #line 1614 "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 2798 "dhcp6_parser.cc" break; case 432: // shared_networks: "shared-networks" $@66 ":" "[" shared_networks_content "]" #line 1620 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } #line 2807 "dhcp6_parser.cc" break; case 437: // shared_networks_list: shared_networks_list "," #line 1633 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 2815 "dhcp6_parser.cc" break; case 438: // $@67: %empty #line 1638 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } #line 2825 "dhcp6_parser.cc" break; case 439: // shared_network: "{" $@67 shared_network_params "}" #line 1642 "dhcp6_parser.yy" { ctx.stack_.pop_back(); } #line 2833 "dhcp6_parser.cc" break; case 442: // shared_network_params: shared_network_params "," #line 1648 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 2841 "dhcp6_parser.cc" break; case 483: // $@68: %empty #line 1699 "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 2853 "dhcp6_parser.cc" break; case 484: // option_def_list: "option-def" $@68 ":" "[" option_def_list_content "]" #line 1705 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } #line 2862 "dhcp6_parser.cc" break; case 485: // $@69: %empty #line 1713 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } #line 2871 "dhcp6_parser.cc" break; case 486: // sub_option_def_list: "{" $@69 option_def_list "}" #line 1716 "dhcp6_parser.yy" { // parsing completed } #line 2879 "dhcp6_parser.cc" break; case 491: // not_empty_option_def_list: not_empty_option_def_list "," #line 1728 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 2887 "dhcp6_parser.cc" break; case 492: // $@70: %empty #line 1735 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } #line 2897 "dhcp6_parser.cc" break; case 493: // option_def_entry: "{" $@70 option_def_params "}" #line 1739 "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 2909 "dhcp6_parser.cc" break; case 494: // $@71: %empty #line 1750 "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 2919 "dhcp6_parser.cc" break; case 495: // sub_option_def: "{" $@71 option_def_params "}" #line 1754 "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 2931 "dhcp6_parser.cc" break; case 500: // not_empty_option_def_params: not_empty_option_def_params "," #line 1770 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 2939 "dhcp6_parser.cc" break; case 512: // code: "code" ":" "integer" #line 1789 "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 2949 "dhcp6_parser.cc" break; case 514: // $@72: %empty #line 1797 "dhcp6_parser.yy" { ctx.unique("type", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 2958 "dhcp6_parser.cc" break; case 515: // option_def_type: "type" $@72 ":" "constant string" #line 1800 "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 2968 "dhcp6_parser.cc" break; case 516: // $@73: %empty #line 1806 "dhcp6_parser.yy" { ctx.unique("record-types", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 2977 "dhcp6_parser.cc" break; case 517: // option_def_record_types: "record-types" $@73 ":" "constant string" #line 1809 "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 2987 "dhcp6_parser.cc" break; case 518: // $@74: %empty #line 1815 "dhcp6_parser.yy" { ctx.unique("space", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 2996 "dhcp6_parser.cc" break; case 519: // space: "space" $@74 ":" "constant string" #line 1818 "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 3006 "dhcp6_parser.cc" break; case 521: // $@75: %empty #line 1826 "dhcp6_parser.yy" { ctx.unique("encapsulate", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 3015 "dhcp6_parser.cc" break; case 522: // option_def_encapsulate: "encapsulate" $@75 ":" "constant string" #line 1829 "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 3025 "dhcp6_parser.cc" break; case 523: // option_def_array: "array" ":" "boolean" #line 1835 "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 3035 "dhcp6_parser.cc" break; case 524: // $@76: %empty #line 1845 "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 3047 "dhcp6_parser.cc" break; case 525: // option_data_list: "option-data" $@76 ":" "[" option_data_list_content "]" #line 1851 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } #line 3056 "dhcp6_parser.cc" break; case 530: // not_empty_option_data_list: not_empty_option_data_list "," #line 1866 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 3064 "dhcp6_parser.cc" break; case 531: // $@77: %empty #line 1873 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } #line 3074 "dhcp6_parser.cc" break; case 532: // option_data_entry: "{" $@77 option_data_params "}" #line 1877 "dhcp6_parser.yy" { /// @todo: the code or name parameters are required. ctx.stack_.pop_back(); } #line 3083 "dhcp6_parser.cc" break; case 533: // $@78: %empty #line 1885 "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 3093 "dhcp6_parser.cc" break; case 534: // sub_option_data: "{" $@78 option_data_params "}" #line 1889 "dhcp6_parser.yy" { /// @todo: the code or name parameters are required. // parsing completed } #line 3102 "dhcp6_parser.cc" break; case 539: // not_empty_option_data_params: not_empty_option_data_params "," #line 1905 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 3110 "dhcp6_parser.cc" break; case 550: // $@79: %empty #line 1925 "dhcp6_parser.yy" { ctx.unique("data", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 3119 "dhcp6_parser.cc" break; case 551: // option_data_data: "data" $@79 ":" "constant string" #line 1928 "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 3129 "dhcp6_parser.cc" break; case 554: // option_data_csv_format: "csv-format" ":" "boolean" #line 1938 "dhcp6_parser.yy" { ctx.unique("csv-format", ctx.loc2pos(yystack_[2].location)); ElementPtr space(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("csv-format", space); } #line 3139 "dhcp6_parser.cc" break; case 555: // option_data_always_send: "always-send" ":" "boolean" #line 1944 "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 3149 "dhcp6_parser.cc" break; case 556: // $@80: %empty #line 1953 "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 3161 "dhcp6_parser.cc" break; case 557: // pools_list: "pools" $@80 ":" "[" pools_list_content "]" #line 1959 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } #line 3170 "dhcp6_parser.cc" break; case 562: // not_empty_pools_list: not_empty_pools_list "," #line 1972 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 3178 "dhcp6_parser.cc" break; case 563: // $@81: %empty #line 1977 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } #line 3188 "dhcp6_parser.cc" break; case 564: // pool_list_entry: "{" $@81 pool_params "}" #line 1981 "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 3198 "dhcp6_parser.cc" break; case 565: // $@82: %empty #line 1987 "dhcp6_parser.yy" { // Parse the pool list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } #line 3208 "dhcp6_parser.cc" break; case 566: // sub_pool6: "{" $@82 pool_params "}" #line 1991 "dhcp6_parser.yy" { // The pool parameter is required. ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } #line 3218 "dhcp6_parser.cc" break; case 569: // pool_params: pool_params "," #line 1999 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 3226 "dhcp6_parser.cc" break; case 577: // $@83: %empty #line 2013 "dhcp6_parser.yy" { ctx.unique("pool", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 3235 "dhcp6_parser.cc" break; case 578: // pool_entry: "pool" $@83 ":" "constant string" #line 2016 "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 3245 "dhcp6_parser.cc" break; case 579: // $@84: %empty #line 2022 "dhcp6_parser.yy" { ctx.enter(ctx.NO_KEYWORD); } #line 3253 "dhcp6_parser.cc" break; case 580: // user_context: "user-context" $@84 ":" map_value #line 2024 "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 3280 "dhcp6_parser.cc" break; case 581: // $@85: %empty #line 2047 "dhcp6_parser.yy" { ctx.enter(ctx.NO_KEYWORD); } #line 3288 "dhcp6_parser.cc" break; case 582: // comment: "comment" $@85 ":" "constant string" #line 2049 "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 3317 "dhcp6_parser.cc" break; case 583: // $@86: %empty #line 2077 "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 3329 "dhcp6_parser.cc" break; case 584: // pd_pools_list: "pd-pools" $@86 ":" "[" pd_pools_list_content "]" #line 2083 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } #line 3338 "dhcp6_parser.cc" break; case 589: // not_empty_pd_pools_list: not_empty_pd_pools_list "," #line 2096 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 3346 "dhcp6_parser.cc" break; case 590: // $@87: %empty #line 2101 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } #line 3356 "dhcp6_parser.cc" break; case 591: // pd_pool_entry: "{" $@87 pd_pool_params "}" #line 2105 "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 3368 "dhcp6_parser.cc" break; case 592: // $@88: %empty #line 2113 "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 3378 "dhcp6_parser.cc" break; case 593: // sub_pd_pool: "{" $@88 pd_pool_params "}" #line 2117 "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 3390 "dhcp6_parser.cc" break; case 596: // pd_pool_params: pd_pool_params "," #line 2127 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 3398 "dhcp6_parser.cc" break; case 608: // $@89: %empty #line 2145 "dhcp6_parser.yy" { ctx.unique("prefix", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 3407 "dhcp6_parser.cc" break; case 609: // pd_prefix: "prefix" $@89 ":" "constant string" #line 2148 "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 3417 "dhcp6_parser.cc" break; case 610: // pd_prefix_len: "prefix-len" ":" "integer" #line 2154 "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 3427 "dhcp6_parser.cc" break; case 611: // $@90: %empty #line 2160 "dhcp6_parser.yy" { ctx.unique("excluded-prefix", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 3436 "dhcp6_parser.cc" break; case 612: // excluded_prefix: "excluded-prefix" $@90 ":" "constant string" #line 2163 "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 3446 "dhcp6_parser.cc" break; case 613: // excluded_prefix_len: "excluded-prefix-len" ":" "integer" #line 2169 "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 3456 "dhcp6_parser.cc" break; case 614: // pd_delegated_len: "delegated-len" ":" "integer" #line 2175 "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 3466 "dhcp6_parser.cc" break; case 615: // $@91: %empty #line 2184 "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 3478 "dhcp6_parser.cc" break; case 616: // reservations: "reservations" $@91 ":" "[" reservations_list "]" #line 2190 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } #line 3487 "dhcp6_parser.cc" break; case 621: // not_empty_reservations_list: not_empty_reservations_list "," #line 2201 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 3495 "dhcp6_parser.cc" break; case 622: // $@92: %empty #line 2206 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } #line 3505 "dhcp6_parser.cc" break; case 623: // reservation: "{" $@92 reservation_params "}" #line 2210 "dhcp6_parser.yy" { /// @todo: an identifier parameter is required. ctx.stack_.pop_back(); } #line 3514 "dhcp6_parser.cc" break; case 624: // $@93: %empty #line 2215 "dhcp6_parser.yy" { // Parse the reservations list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } #line 3524 "dhcp6_parser.cc" break; case 625: // sub_reservation: "{" $@93 reservation_params "}" #line 2219 "dhcp6_parser.yy" { /// @todo: an identifier parameter is required. // parsing completed } #line 3533 "dhcp6_parser.cc" break; case 630: // not_empty_reservation_params: not_empty_reservation_params "," #line 2230 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 3541 "dhcp6_parser.cc" break; case 642: // $@94: %empty #line 2249 "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 3553 "dhcp6_parser.cc" break; case 643: // ip_addresses: "ip-addresses" $@94 ":" list_strings #line 2255 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } #line 3562 "dhcp6_parser.cc" break; case 644: // $@95: %empty #line 2260 "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 3574 "dhcp6_parser.cc" break; case 645: // prefixes: "prefixes" $@95 ":" list_strings #line 2266 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } #line 3583 "dhcp6_parser.cc" break; case 646: // $@96: %empty #line 2271 "dhcp6_parser.yy" { ctx.unique("duid", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 3592 "dhcp6_parser.cc" break; case 647: // duid: "duid" $@96 ":" "constant string" #line 2274 "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 3602 "dhcp6_parser.cc" break; case 648: // $@97: %empty #line 2280 "dhcp6_parser.yy" { ctx.unique("hw-address", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 3611 "dhcp6_parser.cc" break; case 649: // hw_address: "hw-address" $@97 ":" "constant string" #line 2283 "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 3621 "dhcp6_parser.cc" break; case 650: // $@98: %empty #line 2289 "dhcp6_parser.yy" { ctx.unique("hostname", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 3630 "dhcp6_parser.cc" break; case 651: // hostname: "hostname" $@98 ":" "constant string" #line 2292 "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 3640 "dhcp6_parser.cc" break; case 652: // $@99: %empty #line 2298 "dhcp6_parser.yy" { ctx.unique("flex-id", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 3649 "dhcp6_parser.cc" break; case 653: // flex_id_value: "flex-id" $@99 ":" "constant string" #line 2301 "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 3659 "dhcp6_parser.cc" break; case 654: // $@100: %empty #line 2307 "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 3671 "dhcp6_parser.cc" break; case 655: // reservation_client_classes: "client-classes" $@100 ":" list_strings #line 2313 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } #line 3680 "dhcp6_parser.cc" break; case 656: // $@101: %empty #line 2321 "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 3692 "dhcp6_parser.cc" break; case 657: // relay: "relay" $@101 ":" "{" relay_map "}" #line 2327 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } #line 3701 "dhcp6_parser.cc" break; case 660: // $@102: %empty #line 2336 "dhcp6_parser.yy" { ctx.unique("ip-address", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 3710 "dhcp6_parser.cc" break; case 661: // ip_address: "ip-address" $@102 ":" "constant string" #line 2339 "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 3720 "dhcp6_parser.cc" break; case 662: // $@103: %empty #line 2348 "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 3732 "dhcp6_parser.cc" break; case 663: // client_classes: "client-classes" $@103 ":" "[" client_classes_list "]" #line 2354 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } #line 3741 "dhcp6_parser.cc" break; case 666: // client_classes_list: client_classes_list "," #line 2361 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 3749 "dhcp6_parser.cc" break; case 667: // $@104: %empty #line 2366 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } #line 3759 "dhcp6_parser.cc" break; case 668: // client_class_entry: "{" $@104 client_class_params "}" #line 2370 "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 3769 "dhcp6_parser.cc" break; case 673: // not_empty_client_class_params: not_empty_client_class_params "," #line 2382 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 3777 "dhcp6_parser.cc" break; case 688: // $@105: %empty #line 2404 "dhcp6_parser.yy" { ctx.unique("test", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 3786 "dhcp6_parser.cc" break; case 689: // client_class_test: "test" $@105 ":" "constant string" #line 2407 "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 3796 "dhcp6_parser.cc" break; case 690: // only_if_required: "only-if-required" ":" "boolean" #line 2413 "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 3806 "dhcp6_parser.cc" break; case 691: // $@106: %empty #line 2422 "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 3818 "dhcp6_parser.cc" break; case 692: // server_id: "server-id" $@106 ":" "{" server_id_params "}" #line 2428 "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 3829 "dhcp6_parser.cc" break; case 695: // server_id_params: server_id_params "," #line 2437 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 3837 "dhcp6_parser.cc" break; case 705: // $@107: %empty #line 2453 "dhcp6_parser.yy" { ctx.unique("type", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.DUID_TYPE); } #line 3846 "dhcp6_parser.cc" break; case 706: // server_id_type: "type" $@107 ":" duid_type #line 2456 "dhcp6_parser.yy" { ctx.stack_.back()->set("type", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } #line 3855 "dhcp6_parser.cc" break; case 707: // duid_type: "LLT" #line 2461 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("LLT", ctx.loc2pos(yystack_[0].location))); } #line 3861 "dhcp6_parser.cc" break; case 708: // duid_type: "EN" #line 2462 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("EN", ctx.loc2pos(yystack_[0].location))); } #line 3867 "dhcp6_parser.cc" break; case 709: // duid_type: "LL" #line 2463 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("LL", ctx.loc2pos(yystack_[0].location))); } #line 3873 "dhcp6_parser.cc" break; case 710: // htype: "htype" ":" "integer" #line 2466 "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 3883 "dhcp6_parser.cc" break; case 711: // $@108: %empty #line 2472 "dhcp6_parser.yy" { ctx.unique("identifier", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 3892 "dhcp6_parser.cc" break; case 712: // identifier: "identifier" $@108 ":" "constant string" #line 2475 "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 3902 "dhcp6_parser.cc" break; case 713: // time: "time" ":" "integer" #line 2481 "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 3912 "dhcp6_parser.cc" break; case 714: // enterprise_id: "enterprise-id" ":" "integer" #line 2487 "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 3922 "dhcp6_parser.cc" break; case 715: // dhcp4o6_port: "dhcp4o6-port" ":" "integer" #line 2495 "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 3932 "dhcp6_parser.cc" break; case 716: // $@109: %empty #line 2503 "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 3944 "dhcp6_parser.cc" break; case 717: // control_socket: "control-socket" $@109 ":" "{" control_socket_params "}" #line 2509 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } #line 3953 "dhcp6_parser.cc" break; case 720: // control_socket_params: control_socket_params "," #line 2516 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 3961 "dhcp6_parser.cc" break; case 726: // $@110: %empty #line 2528 "dhcp6_parser.yy" { ctx.unique("socket-type", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 3970 "dhcp6_parser.cc" break; case 727: // socket_type: "socket-type" $@110 ":" "constant string" #line 2531 "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 3980 "dhcp6_parser.cc" break; case 728: // $@111: %empty #line 2537 "dhcp6_parser.yy" { ctx.unique("socket-name", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 3989 "dhcp6_parser.cc" break; case 729: // socket_name: "socket-name" $@111 ":" "constant string" #line 2540 "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 3999 "dhcp6_parser.cc" break; case 730: // $@112: %empty #line 2549 "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 4011 "dhcp6_parser.cc" break; case 731: // dhcp_queue_control: "dhcp-queue-control" $@112 ":" "{" queue_control_params "}" #line 2555 "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 4022 "dhcp6_parser.cc" break; case 734: // queue_control_params: queue_control_params "," #line 2564 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 4030 "dhcp6_parser.cc" break; case 741: // enable_queue: "enable-queue" ":" "boolean" #line 2577 "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 4040 "dhcp6_parser.cc" break; case 742: // $@113: %empty #line 2583 "dhcp6_parser.yy" { ctx.unique("queue-type", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 4049 "dhcp6_parser.cc" break; case 743: // queue_type: "queue-type" $@113 ":" "constant string" #line 2586 "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 4059 "dhcp6_parser.cc" break; case 744: // capacity: "capacity" ":" "integer" #line 2592 "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 4069 "dhcp6_parser.cc" break; case 745: // $@114: %empty #line 2598 "dhcp6_parser.yy" { ctx.unique(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 4078 "dhcp6_parser.cc" break; case 746: // arbitrary_map_entry: "constant string" $@114 ":" value #line 2601 "dhcp6_parser.yy" { ctx.stack_.back()->set(yystack_[3].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } #line 4087 "dhcp6_parser.cc" break; case 747: // $@115: %empty #line 2608 "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 4099 "dhcp6_parser.cc" break; case 748: // dhcp_ddns: "dhcp-ddns" $@115 ":" "{" dhcp_ddns_params "}" #line 2614 "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 4110 "dhcp6_parser.cc" break; case 749: // $@116: %empty #line 2621 "dhcp6_parser.yy" { // Parse the dhcp-ddns map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } #line 4120 "dhcp6_parser.cc" break; case 750: // sub_dhcp_ddns: "{" $@116 dhcp_ddns_params "}" #line 2625 "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 4130 "dhcp6_parser.cc" break; case 753: // dhcp_ddns_params: dhcp_ddns_params "," #line 2633 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 4138 "dhcp6_parser.cc" break; case 772: // enable_updates: "enable-updates" ":" "boolean" #line 2658 "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 4148 "dhcp6_parser.cc" break; case 773: // $@117: %empty #line 2665 "dhcp6_parser.yy" { ctx.unique("qualifying-suffix", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 4157 "dhcp6_parser.cc" break; case 774: // dep_qualifying_suffix: "qualifying-suffix" $@117 ":" "constant string" #line 2668 "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 4167 "dhcp6_parser.cc" break; case 775: // $@118: %empty #line 2674 "dhcp6_parser.yy" { ctx.unique("server-ip", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 4176 "dhcp6_parser.cc" break; case 776: // server_ip: "server-ip" $@118 ":" "constant string" #line 2677 "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 4186 "dhcp6_parser.cc" break; case 777: // server_port: "server-port" ":" "integer" #line 2683 "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 4196 "dhcp6_parser.cc" break; case 778: // $@119: %empty #line 2689 "dhcp6_parser.yy" { ctx.unique("sender-ip", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 4205 "dhcp6_parser.cc" break; case 779: // sender_ip: "sender-ip" $@119 ":" "constant string" #line 2692 "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 4215 "dhcp6_parser.cc" break; case 780: // sender_port: "sender-port" ":" "integer" #line 2698 "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 4225 "dhcp6_parser.cc" break; case 781: // max_queue_size: "max-queue-size" ":" "integer" #line 2704 "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 4235 "dhcp6_parser.cc" break; case 782: // $@120: %empty #line 2710 "dhcp6_parser.yy" { ctx.unique("ncr-protocol", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NCR_PROTOCOL); } #line 4244 "dhcp6_parser.cc" break; case 783: // ncr_protocol: "ncr-protocol" $@120 ":" ncr_protocol_value #line 2713 "dhcp6_parser.yy" { ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } #line 4253 "dhcp6_parser.cc" break; case 784: // ncr_protocol_value: "UDP" #line 2719 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); } #line 4259 "dhcp6_parser.cc" break; case 785: // ncr_protocol_value: "TCP" #line 2720 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); } #line 4265 "dhcp6_parser.cc" break; case 786: // $@121: %empty #line 2723 "dhcp6_parser.yy" { ctx.unique("ncr-format", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NCR_FORMAT); } #line 4274 "dhcp6_parser.cc" break; case 787: // ncr_format: "ncr-format" $@121 ":" "JSON" #line 2726 "dhcp6_parser.yy" { ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ncr-format", json); ctx.leave(); } #line 4284 "dhcp6_parser.cc" break; case 788: // dep_override_no_update: "override-no-update" ":" "boolean" #line 2733 "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 4294 "dhcp6_parser.cc" break; case 789: // dep_override_client_update: "override-client-update" ":" "boolean" #line 2740 "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 4304 "dhcp6_parser.cc" break; case 790: // $@122: %empty #line 2747 "dhcp6_parser.yy" { ctx.unique("replace-client-name", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.REPLACE_CLIENT_NAME); } #line 4313 "dhcp6_parser.cc" break; case 791: // dep_replace_client_name: "replace-client-name" $@122 ":" ddns_replace_client_name_value #line 2750 "dhcp6_parser.yy" { ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } #line 4322 "dhcp6_parser.cc" break; case 792: // $@123: %empty #line 2756 "dhcp6_parser.yy" { ctx.unique("generated-prefix", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 4331 "dhcp6_parser.cc" break; case 793: // dep_generated_prefix: "generated-prefix" $@123 ":" "constant string" #line 2759 "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 4341 "dhcp6_parser.cc" break; case 794: // $@124: %empty #line 2766 "dhcp6_parser.yy" { ctx.unique("hostname-char-set", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 4350 "dhcp6_parser.cc" break; case 795: // dep_hostname_char_set: "hostname-char-set" $@124 ":" "constant string" #line 2769 "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 4360 "dhcp6_parser.cc" break; case 796: // $@125: %empty #line 2776 "dhcp6_parser.yy" { ctx.unique("hostname-char-replacement", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 4369 "dhcp6_parser.cc" break; case 797: // dep_hostname_char_replacement: "hostname-char-replacement" $@125 ":" "constant string" #line 2779 "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 4379 "dhcp6_parser.cc" break; case 798: // $@126: %empty #line 2788 "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 4391 "dhcp6_parser.cc" break; case 799: // config_control: "config-control" $@126 ":" "{" config_control_params "}" #line 2794 "dhcp6_parser.yy" { // No config control params are required ctx.stack_.pop_back(); ctx.leave(); } #line 4401 "dhcp6_parser.cc" break; case 800: // $@127: %empty #line 2800 "dhcp6_parser.yy" { // Parse the config-control map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } #line 4411 "dhcp6_parser.cc" break; case 801: // sub_config_control: "{" $@127 config_control_params "}" #line 2804 "dhcp6_parser.yy" { // No config_control params are required // parsing completed } #line 4420 "dhcp6_parser.cc" break; case 804: // config_control_params: config_control_params "," #line 2812 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 4428 "dhcp6_parser.cc" break; case 807: // $@128: %empty #line 2822 "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 4440 "dhcp6_parser.cc" break; case 808: // config_databases: "config-databases" $@128 ":" "[" database_list "]" #line 2828 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } #line 4449 "dhcp6_parser.cc" break; case 809: // config_fetch_wait_time: "config-fetch-wait-time" ":" "integer" #line 2833 "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 4459 "dhcp6_parser.cc" break; case 810: // $@129: %empty #line 2841 "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 4471 "dhcp6_parser.cc" break; case 811: // loggers: "loggers" $@129 ":" "[" loggers_entries "]" #line 2847 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } #line 4480 "dhcp6_parser.cc" break; case 814: // loggers_entries: loggers_entries "," #line 2856 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 4488 "dhcp6_parser.cc" break; case 815: // $@130: %empty #line 2862 "dhcp6_parser.yy" { ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(l); ctx.stack_.push_back(l); } #line 4498 "dhcp6_parser.cc" break; case 816: // logger_entry: "{" $@130 logger_params "}" #line 2866 "dhcp6_parser.yy" { ctx.stack_.pop_back(); } #line 4506 "dhcp6_parser.cc" break; case 819: // logger_params: logger_params "," #line 2872 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 4514 "dhcp6_parser.cc" break; case 827: // debuglevel: "debuglevel" ":" "integer" #line 2886 "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 4524 "dhcp6_parser.cc" break; case 828: // $@131: %empty #line 2892 "dhcp6_parser.yy" { ctx.unique("severity", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 4533 "dhcp6_parser.cc" break; case 829: // severity: "severity" $@131 ":" "constant string" #line 2895 "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 4543 "dhcp6_parser.cc" break; case 830: // $@132: %empty #line 2901 "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 4555 "dhcp6_parser.cc" break; case 831: // output_options_list: "output_options" $@132 ":" "[" output_options_list_content "]" #line 2907 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } #line 4564 "dhcp6_parser.cc" break; case 834: // output_options_list_content: output_options_list_content "," #line 2914 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 4572 "dhcp6_parser.cc" break; case 835: // $@133: %empty #line 2919 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } #line 4582 "dhcp6_parser.cc" break; case 836: // output_entry: "{" $@133 output_params_list "}" #line 2923 "dhcp6_parser.yy" { ctx.stack_.pop_back(); } #line 4590 "dhcp6_parser.cc" break; case 839: // output_params_list: output_params_list "," #line 2929 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 4598 "dhcp6_parser.cc" break; case 845: // $@134: %empty #line 2941 "dhcp6_parser.yy" { ctx.unique("output", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 4607 "dhcp6_parser.cc" break; case 846: // output: "output" $@134 ":" "constant string" #line 2944 "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 4617 "dhcp6_parser.cc" break; case 847: // flush: "flush" ":" "boolean" #line 2950 "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 4627 "dhcp6_parser.cc" break; case 848: // maxsize: "maxsize" ":" "integer" #line 2956 "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 4637 "dhcp6_parser.cc" break; case 849: // maxver: "maxver" ":" "integer" #line 2962 "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 4647 "dhcp6_parser.cc" break; case 850: // $@135: %empty #line 2968 "dhcp6_parser.yy" { ctx.unique("pattern", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } #line 4656 "dhcp6_parser.cc" break; case 851: // pattern: "pattern" $@135 ":" "constant string" #line 2971 "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 4666 "dhcp6_parser.cc" break; case 852: // $@136: %empty #line 2977 "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 4678 "dhcp6_parser.cc" break; case 853: // compatibility: "compatibility" $@136 ":" "{" compatibility_params "}" #line 2983 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } #line 4687 "dhcp6_parser.cc" break; case 856: // compatibility_params: compatibility_params "," #line 2990 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 4695 "dhcp6_parser.cc" break; case 859: // lenient_option_parsing: "lenient-option-parsing" ":" "boolean" #line 2999 "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 4705 "dhcp6_parser.cc" break; #line 4709 "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_ = -996; const signed char Dhcp6Parser::yytable_ninf_ = -1; const short Dhcp6Parser::yypact_[] = { 437, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, 36, 30, 93, 94, 106, 108, 137, 155, 171, 173, 180, 182, 192, 193, 199, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, 30, -166, 130, 160, 78, 668, 42, 296, 71, -2, 81, -25, -90, 451, 35, -996, 244, 248, 260, 257, 297, -996, 65, -996, -996, -996, -996, -996, -996, -996, 306, 328, 329, 335, 349, 359, 362, 369, 370, 377, 379, 389, 397, 398, -996, 399, 416, 434, 436, 439, -996, -996, -996, 440, 441, 442, -996, -996, -996, 443, -996, -996, -996, -996, 444, 445, 446, -996, -996, -996, -996, -996, -996, -996, -996, -996, 447, -996, -996, -996, -996, -996, -996, 448, 449, 452, -996, -996, 455, -996, 96, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, 456, 457, 459, 463, -996, 100, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, 464, 465, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, 113, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, 123, -996, -996, -996, -996, -996, 467, -996, 468, 471, -996, -996, -996, -996, -996, -996, 133, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, 323, 438, -996, -996, -996, -996, -996, -996, -996, -996, 357, -996, -996, 472, -996, -996, -996, 473, -996, -996, 470, 476, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, 477, 479, -996, -996, -996, -996, 478, 482, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, 176, -996, -996, -996, 483, -996, -996, 484, -996, 487, 488, -996, -996, 499, 500, -996, -996, -996, -996, -996, -996, -996, 236, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, 503, 246, -996, -996, -996, -996, 30, 30, -996, 245, 504, -996, -996, 508, 510, 513, 514, 516, 517, 315, 316, 317, 319, 320, 324, 325, 331, 321, 312, 326, 338, 340, 341, 518, 342, 344, 348, 351, 352, 536, 550, 552, 354, 356, 358, 553, 556, 566, 365, 568, 569, 571, 574, 373, 375, 376, 578, 579, 581, 586, 588, 589, 592, 594, 595, 393, 596, 598, 601, 602, 603, 605, 412, 415, 417, 620, 622, -996, 160, -996, 623, 435, 450, 418, 453, 78, -996, 643, 645, 646, 647, 649, 454, 460, 650, 652, 653, 668, -996, 654, 42, -996, 655, 458, 656, 461, 466, 296, -996, 658, 662, 663, 664, 666, 670, 671, -996, 71, -996, 672, 674, 469, 675, 677, 678, 474, -996, 81, 679, 480, 481, -996, -25, 680, 681, -73, -996, 485, 682, 687, 486, 691, 489, 490, 695, 698, 496, 497, 699, 707, 709, 724, 451, -996, 725, 519, 35, -996, -996, -996, 727, 734, 532, 737, 738, 739, 745, 748, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, 544, -996, -996, -996, -996, -996, -95, 546, 548, -996, -996, -996, 754, 755, 756, -996, 766, 765, 563, 327, -996, -996, -996, 769, 773, 774, 775, 776, 778, 780, 779, 782, -996, 783, 784, 785, 786, 570, 584, -996, -996, -996, 791, 790, -996, 793, -996, -996, -996, -996, -996, 794, 795, 591, 593, 607, -996, -996, 793, 608, 812, -996, 610, -996, 621, -996, 624, -996, -996, -996, 793, 793, 793, 625, 626, 627, 628, -996, 629, 630, -996, 631, 632, 633, -996, -996, 634, -996, -996, -996, 635, 765, -996, -996, 636, 637, -996, 640, -996, -996, -50, 587, -996, -996, -95, 641, 644, 651, -996, 797, -996, -996, 30, 160, -996, 35, 78, 292, 292, 850, -996, -996, -996, -996, -996, -996, -996, -996, -996, 853, 855, 856, 860, -996, -996, -996, -996, -996, -996, -996, -996, -91, 30, 313, 758, 861, 862, 863, 273, 252, 152, -20, -5, 451, -996, -996, 864, -145, -996, -996, 867, 868, -996, -996, -996, -996, -996, -19, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, 850, -996, 250, 271, 274, -996, -996, -996, -996, 873, 875, 876, 877, 878, 879, 881, -996, 882, -996, -996, -996, -996, -996, 275, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, 290, -996, 883, 884, -996, -996, 885, 887, -996, -996, 886, 890, -996, -996, 888, 892, -996, -996, 891, 893, -996, -996, -996, 185, -996, -996, -996, 894, -996, -996, -996, 284, -996, -996, -996, -996, 301, -996, -996, -996, 291, -996, -996, 895, 896, -996, -996, 897, 899, -996, 900, 901, 902, 903, 904, 905, 303, -996, -996, -996, -996, -996, -996, -996, -996, -996, 906, 907, 908, -996, -996, -996, -996, 310, -996, -996, -996, -996, -996, -996, 909, 910, 911, -996, 343, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, 347, -996, -996, -996, 912, -996, 913, -996, -996, -996, 361, -996, -996, -996, -996, -996, 364, -996, 311, -996, 914, -996, 372, -996, -996, 688, -996, 915, 916, -996, -996, 917, 919, -996, -996, -996, 880, -996, 918, -996, -996, -996, 921, 922, 923, 924, 718, 717, 720, 719, 722, 723, 728, 931, 730, 932, 938, 940, 941, 292, -996, -996, 292, -996, 850, 668, -996, 853, 81, -996, 855, -25, -996, 856, 757, -996, 860, -91, -996, -996, 313, -996, 943, 758, -996, 309, 861, -996, 71, -996, 862, -90, -996, 863, 743, 744, 746, 747, 753, 759, 273, -996, 944, 967, 762, 763, 767, 252, -996, 788, 799, 800, 152, -996, 991, 992, -20, -996, 801, 1014, 809, 1017, -5, -996, -996, 190, 864, -996, 816, -145, -996, -996, 1027, 1031, 42, -996, 867, 296, -996, 868, 1033, -996, -996, 129, 710, 832, 845, -996, -996, -996, -996, -996, -996, -996, 197, -996, 852, 889, 898, 920, -996, 374, -996, 391, -996, 1070, -996, 1077, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, 410, -996, -996, -996, -996, -996, -996, -996, -996, 925, -996, -996, 1084, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, 1083, 1091, -996, -996, -996, -996, -996, 1088, -996, 411, -996, -996, -996, -996, -996, -996, -996, -996, 28, 926, -996, -996, -996, -996, -996, -996, -996, -996, 927, 928, -996, -996, 929, -996, 30, -996, -996, 1093, -996, -996, -996, -996, -996, 413, -996, -996, -996, -996, -996, -996, -996, -996, 930, 414, -996, 420, -996, 933, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, 757, -996, -996, 1094, 934, -996, 309, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, 1096, 935, 1097, 190, -996, -996, -996, -996, -996, -996, 939, -996, -996, 1098, -996, 942, -996, -996, 1095, -996, -996, 346, -996, 11, 1095, -996, -996, 1100, 1101, 1102, -996, 426, -996, -996, -996, -996, -996, -996, -996, 1103, 937, 946, 948, 1105, 11, -996, 950, -996, -996, -996, 951, -996, -996, -996 }; 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, 184, 9, 362, 11, 565, 13, 592, 15, 624, 17, 485, 19, 494, 21, 533, 23, 324, 25, 749, 27, 800, 29, 48, 41, 0, 0, 0, 0, 0, 0, 626, 0, 496, 535, 0, 0, 0, 50, 0, 49, 0, 0, 42, 63, 0, 65, 137, 798, 182, 203, 205, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 156, 163, 165, 0, 0, 0, 353, 483, 524, 0, 431, 579, 581, 423, 0, 0, 0, 280, 299, 289, 272, 662, 615, 315, 336, 691, 0, 301, 716, 730, 747, 169, 171, 0, 0, 0, 810, 852, 0, 136, 0, 69, 72, 73, 74, 75, 76, 77, 78, 79, 80, 111, 112, 113, 114, 115, 81, 119, 120, 121, 122, 123, 124, 125, 126, 117, 118, 127, 128, 129, 106, 135, 131, 132, 133, 84, 85, 86, 87, 103, 88, 90, 89, 130, 94, 95, 82, 108, 109, 110, 107, 83, 92, 93, 101, 102, 104, 91, 96, 97, 98, 99, 100, 105, 116, 134, 197, 0, 0, 0, 0, 196, 0, 186, 189, 190, 191, 192, 193, 194, 195, 556, 583, 410, 412, 414, 0, 0, 418, 416, 656, 409, 367, 368, 369, 370, 371, 372, 373, 374, 393, 394, 395, 396, 397, 400, 401, 402, 403, 404, 405, 406, 407, 398, 399, 408, 0, 364, 378, 379, 380, 383, 384, 387, 388, 389, 386, 381, 382, 375, 376, 391, 392, 377, 385, 390, 577, 576, 572, 573, 571, 0, 567, 570, 574, 575, 608, 0, 611, 0, 0, 607, 601, 602, 600, 605, 606, 0, 594, 597, 598, 603, 604, 599, 654, 642, 644, 646, 648, 650, 652, 641, 638, 639, 640, 0, 627, 628, 633, 634, 631, 635, 636, 637, 632, 0, 514, 250, 0, 518, 516, 521, 0, 510, 511, 0, 497, 498, 501, 513, 502, 503, 504, 520, 505, 506, 507, 508, 509, 550, 0, 0, 548, 549, 552, 553, 0, 536, 537, 540, 541, 542, 543, 544, 545, 546, 547, 332, 334, 329, 0, 326, 330, 331, 0, 773, 775, 0, 778, 0, 0, 782, 786, 0, 0, 790, 792, 794, 796, 771, 769, 770, 0, 751, 754, 766, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 767, 768, 807, 0, 0, 802, 805, 806, 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, 60, 71, 68, 0, 0, 0, 0, 0, 188, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 366, 363, 0, 569, 566, 0, 0, 0, 0, 0, 596, 593, 0, 0, 0, 0, 0, 0, 0, 625, 630, 486, 0, 0, 0, 0, 0, 0, 0, 495, 500, 0, 0, 0, 534, 539, 0, 0, 328, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 753, 750, 0, 0, 804, 801, 51, 43, 0, 0, 0, 0, 0, 0, 0, 0, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 0, 174, 175, 153, 154, 155, 0, 0, 0, 167, 168, 173, 0, 0, 0, 178, 0, 0, 0, 0, 420, 421, 422, 0, 0, 0, 0, 0, 0, 0, 0, 0, 715, 0, 0, 0, 0, 0, 0, 179, 180, 181, 0, 0, 70, 0, 199, 200, 201, 202, 187, 0, 0, 0, 0, 0, 429, 430, 0, 0, 0, 365, 0, 568, 0, 610, 0, 613, 614, 595, 0, 0, 0, 0, 0, 0, 0, 629, 0, 0, 512, 0, 0, 0, 523, 499, 0, 554, 555, 538, 0, 0, 327, 772, 0, 0, 777, 0, 780, 781, 0, 0, 788, 789, 0, 0, 0, 0, 752, 0, 809, 803, 0, 0, 138, 0, 0, 0, 0, 209, 177, 158, 159, 160, 161, 162, 157, 164, 166, 355, 487, 526, 433, 40, 580, 582, 425, 426, 427, 428, 424, 0, 48, 0, 0, 0, 617, 317, 0, 0, 0, 0, 0, 0, 170, 172, 0, 0, 53, 198, 558, 585, 411, 413, 415, 419, 417, 0, 578, 609, 612, 655, 643, 645, 647, 649, 651, 653, 515, 251, 519, 517, 522, 551, 333, 335, 774, 776, 779, 784, 785, 783, 787, 791, 793, 795, 797, 209, 44, 0, 0, 0, 238, 243, 245, 247, 0, 0, 0, 0, 0, 0, 0, 257, 0, 264, 266, 268, 270, 237, 0, 216, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 230, 231, 232, 229, 233, 234, 235, 236, 0, 214, 0, 210, 211, 360, 0, 356, 357, 492, 0, 488, 489, 531, 0, 527, 528, 438, 0, 434, 435, 287, 288, 0, 282, 285, 286, 0, 297, 298, 294, 0, 291, 295, 296, 278, 0, 274, 277, 667, 0, 664, 622, 0, 618, 619, 322, 0, 318, 319, 0, 0, 0, 0, 0, 0, 0, 338, 341, 342, 343, 344, 345, 346, 705, 711, 0, 0, 0, 704, 701, 702, 703, 0, 693, 696, 699, 697, 698, 700, 0, 0, 0, 311, 0, 303, 306, 307, 308, 309, 310, 726, 728, 725, 723, 724, 0, 718, 721, 722, 0, 742, 0, 745, 738, 739, 0, 732, 735, 736, 737, 740, 0, 815, 0, 812, 0, 858, 0, 854, 857, 55, 563, 0, 559, 560, 590, 0, 586, 587, 660, 659, 0, 658, 0, 64, 799, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 218, 204, 206, 0, 208, 213, 0, 354, 359, 496, 484, 491, 535, 525, 530, 0, 432, 437, 284, 281, 300, 293, 290, 0, 276, 273, 669, 666, 663, 626, 616, 621, 0, 316, 321, 0, 0, 0, 0, 0, 0, 340, 337, 0, 0, 0, 0, 0, 695, 692, 0, 0, 0, 305, 302, 0, 0, 720, 717, 0, 0, 0, 0, 734, 731, 748, 0, 814, 811, 0, 856, 853, 57, 0, 56, 0, 557, 562, 0, 584, 589, 0, 657, 808, 0, 0, 0, 0, 249, 252, 253, 254, 255, 263, 256, 0, 262, 0, 0, 0, 0, 217, 0, 212, 0, 358, 0, 490, 0, 529, 482, 457, 458, 459, 461, 462, 463, 447, 448, 466, 467, 468, 469, 470, 473, 474, 475, 476, 477, 478, 479, 480, 471, 472, 481, 443, 444, 445, 446, 455, 456, 452, 453, 454, 451, 460, 0, 440, 449, 464, 465, 450, 436, 283, 292, 0, 275, 688, 0, 686, 680, 681, 682, 683, 684, 685, 687, 677, 678, 679, 0, 670, 671, 674, 675, 676, 665, 0, 620, 0, 320, 347, 348, 349, 350, 351, 352, 339, 0, 0, 710, 713, 714, 694, 312, 313, 314, 304, 0, 0, 719, 741, 0, 744, 0, 733, 830, 0, 828, 826, 820, 824, 825, 0, 817, 822, 823, 821, 813, 859, 855, 54, 59, 0, 561, 0, 588, 0, 240, 241, 242, 239, 244, 246, 248, 259, 260, 261, 258, 265, 267, 269, 271, 215, 361, 493, 532, 442, 439, 279, 0, 0, 668, 673, 623, 323, 707, 708, 709, 706, 712, 727, 729, 743, 746, 0, 0, 0, 819, 816, 58, 564, 591, 661, 441, 0, 690, 672, 0, 827, 0, 818, 689, 0, 829, 835, 0, 832, 0, 834, 831, 845, 0, 0, 0, 850, 0, 837, 840, 841, 842, 843, 844, 833, 0, 0, 0, 0, 0, 839, 836, 0, 847, 848, 849, 0, 838, 846, 851 }; const short Dhcp6Parser::yypgoto_[] = { -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -10, -996, -589, -996, 409, -996, -996, -996, -996, 360, -996, -594, -996, -996, -996, -71, -996, -996, -996, -996, -996, -996, -996, 388, 609, -996, -996, -43, -14, 12, 16, 20, 33, -59, -31, -30, -28, -27, -26, 19, -996, 34, 37, 38, 41, -996, 400, 49, -996, 52, -996, 54, 55, 56, -996, 59, -996, 62, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, 387, 604, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, 314, -996, 109, -996, -712, 111, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -45, -996, -748, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, 89, -996, -996, -996, -996, -996, 97, -731, -996, -996, -996, -996, 98, -996, -996, -996, -996, -996, -996, -996, 64, -996, -996, -996, -996, -996, -996, -996, 84, -996, -996, -996, 88, 564, -996, -996, -996, -996, -996, -996, -996, 80, -996, -996, -996, -996, -996, -996, -995, -996, -996, -996, 115, -996, -996, -996, 118, 606, -996, -996, -993, -996, -992, -996, 73, -996, 75, -996, 66, 69, 70, 72, -996, -996, -996, -991, -996, -996, -996, -996, 110, -996, -996, -119, 1057, -996, -996, -996, -996, -996, 125, -996, -996, -996, 128, -996, 590, -996, -67, -996, -996, -996, -996, -996, -64, -996, -996, -996, -996, -996, 4, -996, -996, -996, 132, -996, -996, -996, 127, -996, 611, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, 82, -996, -996, -996, 68, 638, -996, -996, -55, -996, -12, -996, -996, -996, -996, -996, 77, -996, -996, -996, 85, 619, -996, -996, -996, -996, -996, -996, -996, -60, -996, -996, -996, 131, -996, -996, -996, 135, -996, 618, 395, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -989, -996, -996, -996, -996, -996, -996, -996, 138, -996, -996, -996, -93, -996, -996, -996, -996, -996, -996, -996, 120, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, 112, -996, -996, -996, -996, -996, -996, -996, 107, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, 419, 597, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, 475, 599, -996, -996, -996, -996, -996, -996, 104, -996, -996, -94, -996, -996, -996, -996, -996, -996, -116, -996, -996, -134, -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, 114, -996 }; const short Dhcp6Parser::yydefgoto_[] = { 0, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 83, 39, 40, 69, 744, 87, 88, 41, 68, 84, 85, 769, 971, 1078, 1079, 829, 43, 70, 90, 438, 91, 45, 71, 158, 159, 160, 441, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 467, 736, 179, 468, 180, 469, 181, 182, 183, 498, 184, 499, 185, 186, 187, 188, 461, 189, 190, 191, 192, 193, 443, 47, 72, 230, 231, 232, 508, 233, 234, 235, 236, 194, 444, 195, 445, 196, 446, 852, 853, 854, 1008, 830, 831, 832, 988, 1236, 833, 989, 834, 990, 835, 991, 836, 837, 548, 838, 839, 840, 841, 842, 843, 999, 1243, 844, 845, 846, 1001, 847, 1002, 848, 1003, 849, 1004, 197, 487, 886, 887, 888, 1028, 198, 484, 873, 874, 875, 876, 199, 486, 881, 882, 883, 884, 200, 485, 201, 494, 934, 935, 936, 937, 938, 202, 490, 897, 898, 899, 1037, 63, 80, 388, 389, 390, 561, 391, 562, 203, 491, 906, 907, 908, 909, 910, 911, 912, 913, 204, 473, 856, 857, 858, 1011, 49, 73, 274, 275, 276, 517, 277, 518, 278, 519, 279, 523, 280, 522, 205, 206, 207, 208, 480, 750, 285, 286, 209, 477, 868, 869, 870, 1020, 1151, 1152, 210, 474, 57, 77, 860, 861, 862, 1014, 59, 78, 353, 354, 355, 356, 357, 358, 359, 547, 360, 551, 361, 550, 362, 363, 552, 364, 211, 475, 864, 865, 866, 1017, 61, 79, 374, 375, 376, 377, 378, 556, 379, 380, 381, 382, 288, 515, 973, 974, 975, 1080, 51, 74, 299, 300, 301, 527, 212, 478, 213, 479, 291, 516, 977, 978, 979, 1083, 53, 75, 315, 316, 317, 530, 318, 319, 532, 320, 321, 214, 489, 893, 894, 895, 1034, 55, 76, 333, 334, 335, 336, 538, 337, 539, 338, 540, 339, 541, 340, 542, 341, 543, 342, 537, 293, 524, 982, 983, 1086, 215, 488, 890, 891, 1031, 1175, 1176, 1177, 1178, 1179, 1255, 1180, 216, 492, 923, 924, 925, 1048, 1264, 926, 927, 1049, 928, 929, 217, 218, 495, 946, 947, 948, 1060, 949, 1061, 219, 496, 956, 957, 958, 959, 1065, 960, 961, 1067, 220, 497, 65, 81, 410, 411, 412, 413, 566, 414, 567, 415, 416, 569, 417, 418, 419, 572, 801, 420, 573, 421, 422, 423, 576, 424, 577, 425, 578, 426, 579, 221, 442, 67, 82, 429, 430, 431, 582, 432, 222, 503, 964, 965, 1071, 1218, 1219, 1220, 1221, 1272, 1222, 1270, 1291, 1292, 1293, 1301, 1302, 1303, 1309, 1304, 1305, 1306, 1307, 1313, 223, 504, 968, 969, 970 }; const short Dhcp6Parser::yytable_[] = { 157, 229, 249, 295, 309, 329, 38, 351, 370, 387, 407, 920, 372, 292, 256, 373, 850, 237, 289, 302, 313, 331, 880, 365, 383, 1141, 408, 1142, 1143, 1150, 250, 1156, 871, 352, 371, 31, 30, 32, 743, 33, 385, 386, 257, 258, 86, 259, 260, 261, 427, 428, 966, 345, 367, 346, 347, 368, 369, 385, 386, 251, 238, 290, 303, 314, 332, 156, 366, 384, 439, 409, 129, 130, 125, 440, 775, 129, 130, 287, 298, 312, 330, 731, 732, 733, 734, 252, 781, 782, 783, 253, 129, 130, 262, 254, 224, 225, 226, 227, 228, 506, 42, 44, 323, 513, 507, 344, 255, 263, 514, 980, 264, 265, 743, 46, 266, 48, 525, 126, 735, 872, 156, 526, 267, 799, 800, 268, 528, 269, 270, 271, 294, 529, 272, 941, 942, 273, 535, 129, 130, 281, 89, 536, 282, 283, 50, 284, 126, 296, 310, 297, 311, 950, 951, 952, 1233, 1234, 1235, 345, 246, 346, 347, 247, 52, 348, 349, 350, 129, 130, 1261, 1262, 1263, 92, 93, 129, 130, 94, 129, 130, 54, 563, 56, 95, 96, 97, 564, 156, 322, 58, 1023, 60, 156, 1024, 323, 324, 325, 326, 327, 328, 1296, 62, 64, 1297, 1298, 1299, 1300, 953, 66, 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, 1240, 1241, 1242, 580, 34, 35, 36, 37, 581, 127, 128, 129, 130, 584, 433, 434, 156, 506, 585, 129, 130, 1141, 985, 1142, 1143, 1150, 131, 1156, 435, 436, 345, 132, 133, 134, 135, 136, 137, 138, 584, 139, 914, 513, 1005, 986, 140, 156, 987, 1006, 817, 129, 130, 1026, 156, 141, 1027, 156, 142, 1005, 1032, 880, 1107, 1033, 1007, 143, 437, 930, 931, 932, 1029, 920, 1046, 144, 145, 1030, 447, 1047, 146, 1053, 1072, 147, 812, 1073, 1054, 148, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 544, 448, 449, 824, 825, 826, 827, 828, 450, 149, 150, 151, 152, 153, 154, 1058, 129, 130, 1294, 1062, 1059, 1295, 451, 155, 1063, 98, 99, 100, 101, 102, 103, 156, 452, 1068, 546, 453, 580, 345, 1069, 156, 126, 1070, 454, 455, 1075, 1211, 1005, 1212, 1213, 1076, 456, 1248, 457, 126, 345, 304, 305, 306, 307, 308, 129, 130, 458, 525, 915, 916, 917, 918, 1249, 156, 459, 460, 462, 129, 130, 900, 901, 902, 903, 904, 905, 246, 1252, 563, 247, 1273, 528, 1253, 1260, 463, 1274, 1276, 535, 586, 587, 1162, 1163, 1277, 1314, 746, 747, 748, 749, 1315, 157, 871, 878, 464, 879, 465, 545, 229, 466, 470, 471, 472, 476, 481, 482, 483, 493, 500, 501, 249, 588, 502, 295, 237, 505, 509, 510, 156, 511, 309, 292, 256, 512, 520, 521, 289, 531, 533, 302, 329, 534, 549, 553, 554, 555, 313, 557, 250, 558, 351, 560, 559, 565, 568, 370, 331, 570, 571, 372, 257, 258, 373, 259, 260, 261, 365, 238, 156, 574, 575, 383, 156, 583, 589, 407, 352, 251, 590, 290, 591, 371, 303, 592, 593, 156, 594, 595, 610, 314, 605, 408, 596, 597, 598, 287, 599, 600, 298, 332, 604, 601, 602, 252, 606, 312, 616, 253, 603, 366, 262, 254, 129, 130, 384, 330, 607, 608, 609, 611, 617, 612, 618, 622, 255, 263, 623, 613, 264, 265, 614, 615, 266, 619, 409, 620, 624, 621, 626, 627, 267, 628, 625, 268, 629, 269, 270, 271, 633, 634, 272, 635, 630, 273, 631, 632, 636, 281, 637, 638, 282, 283, 639, 284, 640, 641, 643, 296, 644, 297, 642, 645, 646, 647, 310, 648, 311, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 652, 649, 653, 655, 650, 658, 651, 405, 406, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 661, 656, 662, 663, 664, 157, 665, 668, 229, 669, 670, 672, 674, 676, 156, 680, 657, 659, 666, 681, 682, 683, 675, 684, 237, 677, 667, 685, 686, 688, 678, 689, 691, 690, 692, 693, 696, 700, 701, 704, 694, 919, 933, 943, 705, 407, 697, 698, 707, 967, 706, 703, 710, 708, 709, 711, 714, 921, 939, 944, 954, 408, 712, 713, 715, 808, 716, 238, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 717, 719, 720, 722, 115, 116, 117, 118, 119, 120, 121, 122, 123, 723, 724, 126, 725, 726, 727, 922, 940, 945, 955, 409, 728, 729, 730, 239, 737, 240, 738, 739, 740, 741, 802, 129, 130, 241, 242, 243, 244, 245, 131, 742, 32, 745, 751, 132, 133, 134, 752, 753, 764, 755, 754, 756, 246, 757, 758, 247, 140, 759, 760, 761, 762, 763, 765, 248, 766, 767, 768, 770, 771, 772, 807, 773, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 774, 776, 777, 778, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 779, 126, 345, 780, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 796, 797, 149, 150, 798, 804, 129, 130, 805, 242, 243, 851, 245, 131, 855, 806, 859, 863, 132, 133, 134, 867, 889, 892, 896, 963, 885, 246, 972, 976, 247, 992, 156, 993, 994, 995, 996, 997, 248, 998, 1000, 1010, 1087, 1009, 1013, 1012, 1015, 1016, 1018, 1019, 1022, 1021, 1077, 1036, 1025, 1035, 1039, 1038, 1040, 1041, 1042, 1043, 1044, 1045, 1050, 1051, 1052, 1055, 1056, 1057, 1064, 1066, 1074, 1082, 1237, 1081, 1085, 1084, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1100, 1102, 149, 150, 1099, 249, 1101, 1103, 351, 1104, 1105, 370, 1160, 1193, 1115, 372, 292, 256, 373, 1186, 1187, 289, 1188, 1189, 365, 1164, 1122, 383, 329, 1190, 1154, 387, 156, 250, 352, 1191, 1194, 371, 1195, 1196, 1140, 1173, 1116, 1197, 331, 257, 258, 919, 259, 260, 261, 1171, 933, 1165, 1123, 1124, 943, 1125, 1126, 1127, 1203, 1204, 251, 921, 290, 1214, 1199, 366, 939, 967, 384, 1117, 944, 1155, 295, 1200, 1201, 309, 954, 1206, 287, 1216, 1166, 1207, 1174, 1208, 1209, 332, 252, 1153, 302, 1215, 253, 313, 1224, 262, 254, 1118, 1226, 1227, 1172, 1119, 1232, 330, 1128, 1120, 922, 1238, 1167, 255, 263, 940, 1168, 264, 265, 945, 1169, 266, 1121, 1129, 1239, 955, 1130, 1131, 1217, 267, 1132, 1244, 268, 1170, 269, 270, 271, 303, 1133, 272, 314, 1134, 273, 1135, 1136, 1137, 281, 1250, 1138, 282, 283, 1139, 284, 298, 1251, 1146, 312, 1256, 1147, 1148, 1257, 1149, 1144, 1258, 1145, 1259, 1271, 1280, 1245, 1283, 1285, 1290, 1288, 1310, 1311, 1312, 1316, 1246, 1320, 795, 809, 877, 811, 803, 654, 1106, 660, 1161, 1108, 1158, 984, 1202, 1185, 1159, 1184, 1192, 702, 1110, 1109, 1247, 671, 1157, 1279, 343, 1254, 1265, 1266, 1267, 1268, 1275, 1112, 1111, 1278, 1113, 695, 1284, 1281, 1228, 1287, 1317, 1114, 1289, 296, 679, 297, 310, 1318, 311, 1319, 1322, 1323, 1231, 687, 1229, 1282, 673, 1183, 1230, 1182, 1181, 699, 981, 1198, 1205, 1210, 1223, 718, 1308, 1286, 1321, 1115, 962, 721, 0, 0, 0, 1164, 0, 1225, 0, 0, 0, 1122, 0, 0, 0, 1154, 0, 1269, 810, 0, 1214, 1173, 0, 0, 0, 1140, 0, 1116, 0, 0, 0, 1171, 0, 1165, 0, 0, 1216, 0, 0, 1123, 1124, 0, 1125, 1126, 1127, 0, 1215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1117, 0, 1155, 0, 0, 0, 1166, 0, 1174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1153, 0, 0, 0, 0, 1217, 1172, 0, 1118, 0, 0, 0, 1119, 0, 1167, 1128, 1120, 0, 1168, 0, 0, 0, 1169, 0, 0, 0, 0, 0, 0, 1121, 1129, 0, 0, 1130, 1131, 1170, 0, 1132, 0, 0, 0, 0, 0, 0, 0, 1133, 0, 0, 1134, 0, 1135, 1136, 1137, 0, 0, 1138, 0, 0, 1139, 0, 0, 0, 1146, 0, 0, 1147, 1148, 0, 1149, 1144, 0, 1145 }; const short Dhcp6Parser::yycheck_[] = { 71, 72, 73, 74, 75, 76, 16, 78, 79, 80, 81, 759, 79, 73, 73, 79, 728, 72, 73, 74, 75, 76, 753, 78, 79, 1020, 81, 1020, 1020, 1020, 73, 1020, 123, 78, 79, 5, 0, 7, 627, 9, 130, 131, 73, 73, 210, 73, 73, 73, 13, 14, 195, 76, 77, 78, 79, 80, 81, 130, 131, 73, 72, 73, 74, 75, 76, 210, 78, 79, 3, 81, 95, 96, 74, 8, 668, 95, 96, 73, 74, 75, 76, 176, 177, 178, 179, 73, 680, 681, 682, 73, 95, 96, 73, 73, 16, 17, 18, 19, 20, 3, 7, 7, 121, 3, 8, 24, 73, 73, 8, 128, 73, 73, 701, 7, 73, 7, 3, 75, 213, 210, 210, 8, 73, 173, 174, 73, 3, 73, 73, 73, 88, 8, 73, 153, 154, 73, 3, 95, 96, 73, 10, 8, 73, 73, 7, 73, 75, 74, 75, 74, 75, 156, 157, 158, 25, 26, 27, 76, 116, 78, 79, 119, 7, 82, 83, 84, 95, 96, 140, 141, 142, 11, 12, 95, 96, 15, 95, 96, 7, 3, 7, 21, 22, 23, 8, 210, 115, 7, 3, 7, 210, 6, 121, 122, 123, 124, 125, 126, 187, 7, 7, 190, 191, 192, 193, 210, 7, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 39, 40, 41, 3, 210, 211, 212, 213, 8, 85, 86, 95, 96, 3, 6, 3, 210, 3, 8, 95, 96, 1252, 8, 1252, 1252, 1252, 102, 1252, 4, 8, 76, 107, 108, 109, 110, 111, 112, 113, 3, 115, 24, 3, 3, 8, 120, 210, 8, 8, 32, 95, 96, 3, 210, 129, 6, 210, 132, 3, 3, 1026, 1008, 6, 8, 139, 3, 149, 150, 151, 3, 1053, 3, 147, 148, 8, 4, 8, 152, 3, 3, 155, 24, 6, 8, 159, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 8, 4, 4, 42, 43, 44, 45, 46, 4, 180, 181, 182, 183, 184, 185, 3, 95, 96, 3, 3, 8, 6, 4, 194, 8, 47, 48, 49, 50, 51, 52, 210, 4, 3, 8, 4, 3, 76, 8, 210, 75, 8, 4, 4, 3, 186, 3, 188, 189, 8, 4, 8, 4, 75, 76, 90, 91, 92, 93, 94, 95, 96, 4, 3, 143, 144, 145, 146, 8, 210, 4, 4, 4, 95, 96, 133, 134, 135, 136, 137, 138, 116, 3, 3, 119, 3, 3, 8, 8, 4, 8, 8, 3, 434, 435, 117, 118, 8, 3, 103, 104, 105, 106, 8, 506, 123, 124, 4, 126, 4, 3, 513, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 525, 210, 4, 528, 513, 4, 4, 4, 210, 4, 535, 525, 525, 4, 4, 4, 525, 4, 4, 528, 545, 4, 4, 4, 8, 3, 535, 4, 525, 4, 555, 3, 8, 4, 4, 560, 545, 4, 4, 560, 525, 525, 560, 525, 525, 525, 555, 513, 210, 4, 4, 560, 210, 4, 4, 580, 555, 525, 4, 525, 4, 560, 528, 4, 4, 210, 4, 4, 4, 535, 212, 580, 211, 211, 211, 525, 211, 211, 528, 545, 213, 211, 211, 525, 212, 535, 4, 525, 211, 555, 525, 525, 95, 96, 560, 545, 212, 211, 211, 211, 4, 211, 4, 4, 525, 525, 4, 213, 525, 525, 213, 213, 525, 213, 580, 213, 4, 213, 4, 4, 525, 4, 211, 525, 4, 525, 525, 525, 4, 4, 525, 4, 213, 525, 213, 213, 4, 525, 4, 4, 525, 525, 4, 525, 4, 4, 4, 528, 4, 528, 211, 4, 4, 4, 535, 4, 535, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 4, 213, 4, 4, 213, 211, 213, 180, 181, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 4, 213, 4, 4, 4, 723, 4, 4, 726, 4, 4, 4, 4, 4, 210, 4, 213, 211, 211, 4, 4, 4, 211, 4, 726, 211, 213, 4, 4, 4, 211, 4, 4, 211, 4, 4, 4, 4, 4, 4, 213, 759, 760, 761, 4, 763, 213, 213, 4, 767, 211, 213, 4, 211, 211, 4, 4, 759, 760, 761, 762, 763, 213, 213, 4, 722, 4, 726, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 4, 4, 211, 4, 64, 65, 66, 67, 68, 69, 70, 71, 72, 7, 210, 75, 7, 7, 7, 759, 760, 761, 762, 763, 7, 5, 210, 87, 210, 89, 210, 5, 5, 5, 175, 95, 96, 97, 98, 99, 100, 101, 102, 5, 7, 210, 5, 107, 108, 109, 5, 5, 210, 5, 7, 5, 116, 5, 7, 119, 120, 7, 7, 7, 7, 7, 210, 127, 5, 7, 5, 5, 5, 210, 5, 210, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 210, 210, 7, 210, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 210, 75, 76, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 180, 181, 210, 210, 95, 96, 210, 98, 99, 7, 101, 102, 7, 210, 7, 7, 107, 108, 109, 7, 7, 7, 7, 7, 114, 116, 7, 7, 119, 4, 210, 4, 4, 4, 4, 4, 127, 4, 4, 3, 8, 6, 3, 6, 6, 3, 6, 3, 3, 6, 210, 3, 6, 6, 3, 6, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 210, 6, 3, 6, 6, 4, 4, 4, 4, 211, 213, 211, 213, 211, 211, 4, 4, 180, 181, 211, 1011, 211, 4, 1014, 4, 4, 1017, 4, 4, 1020, 1017, 1011, 1011, 1017, 211, 211, 1011, 211, 211, 1014, 1031, 1020, 1017, 1034, 211, 1020, 1037, 210, 1011, 1014, 211, 4, 1017, 211, 211, 1020, 1031, 1020, 211, 1034, 1011, 1011, 1053, 1011, 1011, 1011, 1031, 1058, 1031, 1020, 1020, 1062, 1020, 1020, 1020, 4, 4, 1011, 1053, 1011, 1071, 213, 1014, 1058, 1075, 1017, 1020, 1062, 1020, 1080, 211, 211, 1083, 1068, 213, 1011, 1071, 1031, 4, 1031, 211, 4, 1034, 1011, 1020, 1080, 1071, 1011, 1083, 213, 1011, 1011, 1020, 6, 3, 1031, 1020, 4, 1034, 1020, 1020, 1053, 210, 1031, 1011, 1011, 1058, 1031, 1011, 1011, 1062, 1031, 1011, 1020, 1020, 210, 1068, 1020, 1020, 1071, 1011, 1020, 210, 1011, 1031, 1011, 1011, 1011, 1080, 1020, 1011, 1083, 1020, 1011, 1020, 1020, 1020, 1011, 8, 1020, 1011, 1011, 1020, 1011, 1080, 8, 1020, 1083, 4, 1020, 1020, 8, 1020, 1020, 3, 1020, 8, 4, 4, 210, 4, 4, 7, 5, 4, 4, 4, 4, 210, 4, 701, 723, 752, 726, 714, 506, 1005, 513, 1029, 1010, 1023, 807, 1058, 1039, 1026, 1037, 1046, 563, 1013, 1011, 210, 525, 1022, 1252, 77, 210, 210, 210, 210, 210, 210, 1016, 1014, 210, 1017, 555, 211, 213, 1080, 210, 213, 1019, 210, 1080, 535, 1080, 1083, 211, 1083, 211, 210, 210, 1085, 545, 1082, 1258, 528, 1036, 1083, 1034, 1032, 560, 777, 1053, 1062, 1068, 1072, 580, 1294, 1273, 1314, 1252, 763, 584, -1, -1, -1, 1258, -1, 1075, -1, -1, -1, 1252, -1, -1, -1, 1252, -1, 1209, 725, -1, 1273, 1258, -1, -1, -1, 1252, -1, 1252, -1, -1, -1, 1258, -1, 1258, -1, -1, 1273, -1, -1, 1252, 1252, -1, 1252, 1252, 1252, -1, 1273, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1252, -1, 1252, -1, -1, -1, 1258, -1, 1258, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1252, -1, -1, -1, -1, 1273, 1258, -1, 1252, -1, -1, -1, 1252, -1, 1258, 1252, 1252, -1, 1258, -1, -1, -1, 1258, -1, -1, -1, -1, -1, -1, 1252, 1252, -1, -1, 1252, 1252, 1258, -1, 1252, -1, -1, -1, -1, -1, -1, -1, 1252, -1, -1, 1252, -1, 1252, 1252, 1252, -1, -1, 1252, -1, -1, 1252, -1, -1, -1, 1252, -1, -1, 1252, 1252, -1, 1252, 1252, -1, 1252 }; const short Dhcp6Parser::yystos_[] = { 0, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 0, 5, 7, 9, 210, 211, 212, 213, 230, 231, 232, 237, 7, 246, 7, 251, 7, 298, 7, 407, 7, 487, 7, 503, 7, 520, 7, 439, 7, 445, 7, 469, 7, 383, 7, 589, 7, 620, 238, 233, 247, 252, 299, 408, 488, 504, 521, 440, 446, 470, 384, 590, 621, 230, 239, 240, 210, 235, 236, 10, 248, 250, 11, 12, 15, 21, 22, 23, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 85, 86, 95, 96, 102, 107, 108, 109, 110, 111, 112, 113, 115, 120, 129, 132, 139, 147, 148, 152, 155, 159, 180, 181, 182, 183, 184, 185, 194, 210, 245, 253, 254, 255, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 277, 279, 281, 282, 283, 285, 287, 288, 289, 290, 292, 293, 294, 295, 296, 308, 310, 312, 350, 356, 362, 368, 370, 377, 391, 401, 421, 422, 423, 424, 429, 437, 463, 493, 495, 514, 544, 556, 568, 569, 577, 587, 618, 627, 651, 16, 17, 18, 19, 20, 245, 300, 301, 302, 304, 305, 306, 307, 493, 495, 87, 89, 97, 98, 99, 100, 101, 116, 119, 127, 245, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 271, 272, 273, 274, 277, 279, 281, 282, 283, 285, 287, 409, 410, 411, 413, 415, 417, 419, 421, 422, 423, 424, 427, 428, 463, 481, 493, 495, 497, 514, 539, 88, 245, 417, 419, 463, 489, 490, 491, 493, 495, 90, 91, 92, 93, 94, 245, 417, 419, 463, 493, 495, 505, 506, 507, 509, 510, 512, 513, 115, 121, 122, 123, 124, 125, 126, 245, 463, 493, 495, 522, 523, 524, 525, 527, 529, 531, 533, 535, 537, 437, 24, 76, 78, 79, 82, 83, 84, 245, 330, 447, 448, 449, 450, 451, 452, 453, 455, 457, 459, 460, 462, 493, 495, 77, 80, 81, 245, 330, 451, 457, 471, 472, 473, 474, 475, 477, 478, 479, 480, 493, 495, 130, 131, 245, 385, 386, 387, 389, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 180, 181, 245, 493, 495, 591, 592, 593, 594, 596, 598, 599, 601, 602, 603, 606, 608, 609, 610, 612, 614, 616, 13, 14, 622, 623, 624, 626, 6, 3, 4, 8, 3, 249, 3, 8, 256, 619, 297, 309, 311, 313, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 291, 4, 4, 4, 4, 4, 275, 278, 280, 4, 4, 4, 402, 438, 464, 4, 430, 494, 496, 425, 4, 4, 4, 357, 369, 363, 351, 545, 515, 378, 392, 557, 4, 371, 570, 578, 588, 284, 286, 4, 4, 4, 628, 652, 4, 3, 8, 303, 4, 4, 4, 4, 3, 8, 482, 498, 412, 414, 416, 4, 4, 420, 418, 540, 3, 8, 492, 3, 8, 508, 4, 511, 4, 4, 3, 8, 538, 526, 528, 530, 532, 534, 536, 8, 3, 8, 454, 331, 4, 458, 456, 461, 4, 8, 3, 476, 4, 4, 8, 3, 388, 390, 3, 8, 4, 595, 597, 4, 600, 4, 4, 604, 607, 4, 4, 611, 613, 615, 617, 3, 8, 625, 4, 3, 8, 230, 230, 210, 4, 4, 4, 4, 4, 4, 4, 211, 211, 211, 211, 211, 211, 211, 211, 213, 212, 212, 212, 211, 211, 4, 211, 211, 213, 213, 213, 4, 4, 4, 213, 213, 213, 4, 4, 4, 211, 4, 4, 4, 4, 213, 213, 213, 4, 4, 4, 4, 4, 4, 4, 4, 4, 211, 4, 4, 4, 4, 4, 4, 213, 213, 213, 4, 4, 254, 4, 213, 213, 211, 211, 301, 4, 4, 4, 4, 4, 211, 213, 4, 4, 4, 410, 4, 490, 4, 211, 4, 211, 211, 506, 4, 4, 4, 4, 4, 4, 4, 524, 4, 4, 211, 4, 4, 4, 213, 449, 4, 213, 213, 473, 4, 4, 386, 213, 4, 4, 211, 4, 211, 211, 4, 4, 213, 213, 4, 4, 4, 4, 592, 4, 211, 623, 4, 7, 210, 7, 7, 7, 7, 5, 210, 176, 177, 178, 179, 213, 276, 210, 210, 5, 5, 5, 5, 232, 234, 210, 103, 104, 105, 106, 426, 5, 5, 5, 7, 5, 5, 5, 7, 7, 7, 7, 7, 7, 210, 210, 5, 7, 5, 241, 5, 5, 210, 210, 210, 241, 210, 7, 210, 210, 210, 241, 241, 241, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 234, 210, 210, 210, 173, 174, 605, 175, 276, 210, 210, 210, 5, 230, 253, 622, 300, 24, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 42, 43, 44, 45, 46, 245, 318, 319, 320, 323, 325, 327, 329, 330, 332, 333, 334, 335, 336, 337, 340, 341, 342, 344, 346, 348, 318, 7, 314, 315, 316, 7, 403, 404, 405, 7, 441, 442, 443, 7, 465, 466, 467, 7, 431, 432, 433, 123, 210, 358, 359, 360, 361, 239, 124, 126, 360, 364, 365, 366, 367, 114, 352, 353, 354, 7, 546, 547, 7, 516, 517, 518, 7, 379, 380, 381, 133, 134, 135, 136, 137, 138, 393, 394, 395, 396, 397, 398, 399, 400, 24, 143, 144, 145, 146, 245, 332, 493, 495, 558, 559, 560, 563, 564, 566, 567, 149, 150, 151, 245, 372, 373, 374, 375, 376, 493, 495, 153, 154, 245, 493, 495, 571, 572, 573, 575, 156, 157, 158, 210, 493, 495, 579, 580, 581, 582, 584, 585, 591, 7, 629, 630, 195, 245, 653, 654, 655, 242, 7, 483, 484, 485, 7, 499, 500, 501, 128, 525, 541, 542, 314, 8, 8, 8, 321, 324, 326, 328, 4, 4, 4, 4, 4, 4, 4, 338, 4, 343, 345, 347, 349, 3, 8, 8, 317, 6, 3, 406, 6, 3, 444, 6, 3, 468, 6, 3, 434, 6, 3, 3, 6, 6, 3, 6, 355, 3, 8, 548, 3, 6, 519, 6, 3, 382, 6, 3, 4, 4, 4, 4, 4, 4, 3, 8, 561, 565, 4, 4, 4, 3, 8, 4, 4, 4, 3, 8, 574, 576, 3, 8, 4, 583, 4, 586, 3, 8, 8, 631, 3, 6, 4, 3, 8, 210, 243, 244, 486, 6, 3, 502, 6, 3, 543, 8, 6, 4, 4, 4, 4, 211, 213, 211, 213, 211, 211, 211, 4, 211, 4, 4, 4, 4, 319, 318, 316, 409, 405, 447, 443, 471, 467, 245, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 271, 272, 273, 274, 277, 279, 281, 282, 283, 285, 287, 330, 401, 413, 415, 417, 419, 421, 422, 423, 424, 428, 435, 436, 463, 493, 495, 539, 433, 359, 365, 4, 353, 117, 118, 245, 257, 258, 259, 260, 261, 262, 330, 463, 493, 495, 549, 550, 551, 552, 553, 555, 547, 522, 518, 385, 381, 211, 211, 211, 211, 211, 211, 394, 4, 4, 211, 211, 211, 559, 213, 211, 211, 373, 4, 4, 572, 213, 4, 211, 4, 580, 186, 188, 189, 245, 330, 493, 495, 632, 633, 634, 635, 637, 630, 213, 654, 6, 3, 489, 485, 505, 501, 4, 25, 26, 27, 322, 210, 210, 210, 39, 40, 41, 339, 210, 210, 210, 210, 8, 8, 8, 8, 3, 8, 210, 554, 4, 8, 3, 8, 8, 140, 141, 142, 562, 210, 210, 210, 210, 230, 638, 4, 636, 3, 8, 210, 8, 8, 210, 436, 4, 213, 551, 4, 211, 4, 633, 210, 5, 210, 7, 639, 640, 641, 3, 6, 187, 190, 191, 192, 193, 642, 643, 644, 646, 647, 648, 649, 640, 645, 4, 4, 4, 650, 3, 8, 4, 213, 211, 211, 4, 643, 210, 210 }; const short Dhcp6Parser::yyr1_[] = { 0, 214, 216, 215, 217, 215, 218, 215, 219, 215, 220, 215, 221, 215, 222, 215, 223, 215, 224, 215, 225, 215, 226, 215, 227, 215, 228, 215, 229, 215, 230, 230, 230, 230, 230, 230, 230, 231, 233, 232, 234, 235, 235, 236, 236, 236, 238, 237, 239, 239, 240, 240, 240, 242, 241, 243, 243, 244, 244, 244, 245, 247, 246, 249, 248, 248, 250, 252, 251, 253, 253, 253, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 256, 255, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 275, 274, 276, 276, 276, 276, 276, 278, 277, 280, 279, 281, 282, 284, 283, 286, 285, 287, 288, 289, 291, 290, 292, 293, 294, 295, 297, 296, 299, 298, 300, 300, 300, 301, 301, 301, 301, 301, 301, 301, 301, 303, 302, 304, 305, 306, 307, 309, 308, 311, 310, 313, 312, 314, 314, 315, 315, 315, 317, 316, 318, 318, 318, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 321, 320, 322, 322, 322, 324, 323, 326, 325, 328, 327, 329, 331, 330, 332, 333, 334, 335, 336, 338, 337, 339, 339, 339, 340, 341, 343, 342, 345, 344, 347, 346, 349, 348, 351, 350, 352, 352, 352, 353, 355, 354, 357, 356, 358, 358, 358, 359, 359, 360, 361, 363, 362, 364, 364, 364, 365, 365, 365, 366, 367, 369, 368, 371, 370, 372, 372, 372, 373, 373, 373, 373, 373, 373, 374, 375, 376, 378, 377, 379, 379, 380, 380, 380, 382, 381, 384, 383, 385, 385, 385, 385, 386, 386, 388, 387, 390, 389, 392, 391, 393, 393, 393, 394, 394, 394, 394, 394, 394, 395, 396, 397, 398, 399, 400, 402, 401, 403, 403, 404, 404, 404, 406, 405, 408, 407, 409, 409, 409, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, 412, 411, 414, 413, 416, 415, 418, 417, 420, 419, 421, 422, 423, 425, 424, 426, 426, 426, 426, 427, 428, 430, 429, 431, 431, 432, 432, 432, 434, 433, 435, 435, 435, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, 438, 437, 440, 439, 441, 441, 442, 442, 442, 444, 443, 446, 445, 447, 447, 448, 448, 448, 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, 450, 451, 452, 454, 453, 456, 455, 458, 457, 459, 461, 460, 462, 464, 463, 465, 465, 466, 466, 466, 468, 467, 470, 469, 471, 471, 472, 472, 472, 473, 473, 473, 473, 473, 473, 473, 473, 473, 474, 476, 475, 477, 478, 479, 480, 482, 481, 483, 483, 484, 484, 484, 486, 485, 488, 487, 489, 489, 489, 490, 490, 490, 490, 490, 490, 490, 492, 491, 494, 493, 496, 495, 498, 497, 499, 499, 500, 500, 500, 502, 501, 504, 503, 505, 505, 505, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 508, 507, 509, 511, 510, 512, 513, 515, 514, 516, 516, 517, 517, 517, 519, 518, 521, 520, 522, 522, 523, 523, 523, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 526, 525, 528, 527, 530, 529, 532, 531, 534, 533, 536, 535, 538, 537, 540, 539, 541, 541, 543, 542, 545, 544, 546, 546, 546, 548, 547, 549, 549, 550, 550, 550, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 552, 554, 553, 555, 557, 556, 558, 558, 558, 559, 559, 559, 559, 559, 559, 559, 559, 559, 561, 560, 562, 562, 562, 563, 565, 564, 566, 567, 568, 570, 569, 571, 571, 571, 572, 572, 572, 572, 572, 574, 573, 576, 575, 578, 577, 579, 579, 579, 580, 580, 580, 580, 580, 580, 581, 583, 582, 584, 586, 585, 588, 587, 590, 589, 591, 591, 591, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 593, 595, 594, 597, 596, 598, 600, 599, 601, 602, 604, 603, 605, 605, 607, 606, 608, 609, 611, 610, 613, 612, 615, 614, 617, 616, 619, 618, 621, 620, 622, 622, 622, 623, 623, 625, 624, 626, 628, 627, 629, 629, 629, 631, 630, 632, 632, 632, 633, 633, 633, 633, 633, 633, 633, 634, 636, 635, 638, 637, 639, 639, 639, 641, 640, 642, 642, 642, 643, 643, 643, 643, 643, 645, 644, 646, 647, 648, 650, 649, 652, 651, 653, 653, 653, 654, 654, 655 }; 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, 0, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 4, 1, 1, 1, 1, 1, 0, 4, 0, 4, 3, 3, 0, 4, 0, 4, 3, 3, 3, 0, 4, 3, 3, 3, 3, 0, 6, 0, 4, 1, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 0, 4, 3, 3, 3, 3, 0, 6, 0, 6, 0, 6, 0, 1, 1, 3, 2, 0, 4, 1, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 4, 1, 1, 1, 0, 4, 0, 4, 0, 4, 3, 0, 4, 3, 3, 3, 3, 3, 0, 4, 1, 1, 1, 3, 3, 0, 4, 0, 4, 0, 4, 0, 4, 0, 6, 1, 3, 2, 1, 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, 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, 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, 0, 4, 1, 1, 3, 3, 0, 6, 0, 1, 1, 3, 2, 0, 4, 0, 4, 1, 3, 2, 1, 1, 1, 1, 1, 1, 1, 0, 4, 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, 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\"", "\"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\"", "\"store-extended-info\"", "\"subnet6\"", "\"option-def\"", "\"option-data\"", "\"name\"", "\"data\"", "\"code\"", "\"space\"", "\"csv-format\"", "\"always-send\"", "\"record-types\"", "\"encapsulate\"", "\"array\"", "\"parked-packet-limit\"", "\"shared-networks\"", "\"pools\"", "\"pool\"", "\"pd-pools\"", "\"prefix\"", "\"prefix-len\"", "\"excluded-prefix\"", "\"excluded-prefix-len\"", "\"delegated-len\"", "\"user-context\"", "\"comment\"", "\"subnet\"", "\"interface\"", "\"interface-id\"", "\"id\"", "\"rapid-commit\"", "\"reservation-mode\"", "\"disabled\"", "\"out-of-pool\"", "\"global\"", "\"all\"", "\"reservations-global\"", "\"reservations-in-subnet\"", "\"reservations-out-of-pool\"", "\"mac-sources\"", "\"relay-supplied-options\"", "\"host-reservation-identifiers\"", "\"sanity-checks\"", "\"lease-checks\"", "\"client-classes\"", "\"require-client-classes\"", "\"test\"", "\"only-if-required\"", "\"client-class\"", "\"reservations\"", "\"ip-addresses\"", "\"prefixes\"", "\"duid\"", "\"hw-address\"", "\"hostname\"", "\"flex-id\"", "\"relay\"", "\"ip-address\"", "\"hooks-libraries\"", "\"library\"", "\"parameters\"", "\"expired-leases-processing\"", "\"reclaim-timer-wait-time\"", "\"flush-reclaimed-timer-wait-time\"", "\"hold-reclaimed-time\"", "\"max-reclaim-leases\"", "\"max-reclaim-time\"", "\"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", "hostname_char_set", "$@25", "hostname_char_replacement", "$@26", "store_extended_info", "statistic_default_sample_count", "statistic_default_sample_age", "server_tag", "$@27", "parked_packet_limit", "early_global_reservations_lookup", "ip_reservations_unique", "reservations_lookup_first", "interfaces_config", "$@28", "sub_interfaces6", "$@29", "interfaces_config_params", "interfaces_config_param", "interfaces_list", "$@30", "re_detect", "service_sockets_require_all", "service_sockets_retry_wait_time", "service_sockets_max_retries", "lease_database", "$@31", "hosts_database", "$@32", "hosts_databases", "$@33", "database_list", "not_empty_database_list", "database", "$@34", "database_map_params", "database_map_param", "database_type", "$@35", "db_type", "user", "$@36", "password", "$@37", "host", "$@38", "port", "name", "$@39", "persist", "lfc_interval", "readonly", "connect_timeout", "reconnect_wait_time", "on_fail", "$@40", "on_fail_mode", "max_row_errors", "max_reconnect_tries", "trust_anchor", "$@41", "cert_file", "$@42", "key_file", "$@43", "cipher_list", "$@44", "sanity_checks", "$@45", "sanity_checks_params", "sanity_checks_param", "lease_checks", "$@46", "mac_sources", "$@47", "mac_sources_list", "mac_sources_value", "duid_id", "string_id", "host_reservation_identifiers", "$@48", "host_reservation_identifiers_list", "host_reservation_identifier", "hw_address_id", "flex_id", "relay_supplied_options", "$@49", "dhcp_multi_threading", "$@50", "multi_threading_params", "multi_threading_param", "enable_multi_threading", "thread_pool_size", "packet_queue_size", "hooks_libraries", "$@51", "hooks_libraries_list", "not_empty_hooks_libraries_list", "hooks_library", "$@52", "sub_hooks_library", "$@53", "hooks_params", "hooks_param", "library", "$@54", "parameters", "$@55", "expired_leases_processing", "$@56", "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", "$@57", "subnet6_list_content", "not_empty_subnet6_list", "subnet6", "$@58", "sub_subnet6", "$@59", "subnet6_params", "subnet6_param", "subnet", "$@60", "interface", "$@61", "interface_id", "$@62", "client_class", "$@63", "require_client_classes", "$@64", "reservations_global", "reservations_in_subnet", "reservations_out_of_pool", "reservation_mode", "$@65", "hr_mode", "id", "rapid_commit", "shared_networks", "$@66", "shared_networks_content", "shared_networks_list", "shared_network", "$@67", "shared_network_params", "shared_network_param", "option_def_list", "$@68", "sub_option_def_list", "$@69", "option_def_list_content", "not_empty_option_def_list", "option_def_entry", "$@70", "sub_option_def", "$@71", "option_def_params", "not_empty_option_def_params", "option_def_param", "option_def_name", "code", "option_def_code", "option_def_type", "$@72", "option_def_record_types", "$@73", "space", "$@74", "option_def_space", "option_def_encapsulate", "$@75", "option_def_array", "option_data_list", "$@76", "option_data_list_content", "not_empty_option_data_list", "option_data_entry", "$@77", "sub_option_data", "$@78", "option_data_params", "not_empty_option_data_params", "option_data_param", "option_data_name", "option_data_data", "$@79", "option_data_code", "option_data_space", "option_data_csv_format", "option_data_always_send", "pools_list", "$@80", "pools_list_content", "not_empty_pools_list", "pool_list_entry", "$@81", "sub_pool6", "$@82", "pool_params", "pool_param", "pool_entry", "$@83", "user_context", "$@84", "comment", "$@85", "pd_pools_list", "$@86", "pd_pools_list_content", "not_empty_pd_pools_list", "pd_pool_entry", "$@87", "sub_pd_pool", "$@88", "pd_pool_params", "pd_pool_param", "pd_prefix", "$@89", "pd_prefix_len", "excluded_prefix", "$@90", "excluded_prefix_len", "pd_delegated_len", "reservations", "$@91", "reservations_list", "not_empty_reservations_list", "reservation", "$@92", "sub_reservation", "$@93", "reservation_params", "not_empty_reservation_params", "reservation_param", "ip_addresses", "$@94", "prefixes", "$@95", "duid", "$@96", "hw_address", "$@97", "hostname", "$@98", "flex_id_value", "$@99", "reservation_client_classes", "$@100", "relay", "$@101", "relay_map", "ip_address", "$@102", "client_classes", "$@103", "client_classes_list", "client_class_entry", "$@104", "client_class_params", "not_empty_client_class_params", "client_class_param", "client_class_name", "client_class_test", "$@105", "only_if_required", "server_id", "$@106", "server_id_params", "server_id_param", "server_id_type", "$@107", "duid_type", "htype", "identifier", "$@108", "time", "enterprise_id", "dhcp4o6_port", "control_socket", "$@109", "control_socket_params", "control_socket_param", "socket_type", "$@110", "socket_name", "$@111", "dhcp_queue_control", "$@112", "queue_control_params", "queue_control_param", "enable_queue", "queue_type", "$@113", "capacity", "arbitrary_map_entry", "$@114", "dhcp_ddns", "$@115", "sub_dhcp_ddns", "$@116", "dhcp_ddns_params", "dhcp_ddns_param", "enable_updates", "dep_qualifying_suffix", "$@117", "server_ip", "$@118", "server_port", "sender_ip", "$@119", "sender_port", "max_queue_size", "ncr_protocol", "$@120", "ncr_protocol_value", "ncr_format", "$@121", "dep_override_no_update", "dep_override_client_update", "dep_replace_client_name", "$@122", "dep_generated_prefix", "$@123", "dep_hostname_char_set", "$@124", "dep_hostname_char_replacement", "$@125", "config_control", "$@126", "sub_config_control", "$@127", "config_control_params", "config_control_param", "config_databases", "$@128", "config_fetch_wait_time", "loggers", "$@129", "loggers_entries", "logger_entry", "$@130", "logger_params", "logger_param", "debuglevel", "severity", "$@131", "output_options_list", "$@132", "output_options_list_content", "output_entry", "$@133", "output_params_list", "output_params", "output", "$@134", "flush", "maxsize", "maxver", "pattern", "$@135", "compatibility", "$@136", "compatibility_params", "compatibility_param", "lenient_option_parsing", YY_NULLPTR }; #endif #if PARSER6_DEBUG const short Dhcp6Parser::yyrline_[] = { 0, 302, 302, 302, 303, 303, 304, 304, 305, 305, 306, 306, 307, 307, 308, 308, 309, 309, 310, 310, 311, 311, 312, 312, 313, 313, 314, 314, 315, 315, 323, 324, 325, 326, 327, 328, 329, 332, 337, 337, 348, 351, 352, 355, 360, 366, 371, 371, 378, 379, 382, 386, 390, 396, 396, 403, 404, 407, 411, 415, 425, 434, 434, 449, 449, 463, 466, 472, 472, 481, 482, 483, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 557, 557, 566, 572, 578, 584, 590, 596, 602, 608, 614, 620, 626, 632, 638, 644, 650, 656, 662, 668, 668, 677, 680, 683, 686, 689, 695, 695, 704, 704, 713, 719, 725, 725, 734, 734, 743, 749, 755, 761, 761, 770, 776, 782, 788, 794, 794, 806, 806, 815, 816, 817, 822, 823, 824, 825, 826, 827, 828, 829, 832, 832, 843, 849, 855, 861, 867, 867, 880, 880, 893, 893, 904, 905, 908, 909, 910, 915, 915, 925, 926, 927, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 953, 953, 961, 962, 963, 966, 966, 975, 975, 984, 984, 993, 999, 999, 1008, 1014, 1020, 1026, 1032, 1038, 1038, 1046, 1047, 1048, 1051, 1057, 1063, 1063, 1072, 1072, 1081, 1081, 1090, 1090, 1099, 1099, 1110, 1111, 1112, 1117, 1119, 1119, 1138, 1138, 1149, 1150, 1151, 1156, 1157, 1160, 1165, 1170, 1170, 1181, 1182, 1183, 1188, 1189, 1190, 1193, 1198, 1205, 1205, 1218, 1218, 1231, 1232, 1233, 1238, 1239, 1240, 1241, 1242, 1243, 1246, 1252, 1258, 1264, 1264, 1275, 1276, 1279, 1280, 1281, 1286, 1286, 1296, 1296, 1306, 1307, 1308, 1311, 1314, 1315, 1318, 1318, 1327, 1327, 1336, 1336, 1348, 1349, 1350, 1355, 1356, 1357, 1358, 1359, 1360, 1363, 1369, 1375, 1381, 1387, 1393, 1402, 1402, 1416, 1417, 1420, 1421, 1422, 1431, 1431, 1457, 1457, 1468, 1469, 1470, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1521, 1521, 1530, 1530, 1539, 1539, 1548, 1548, 1557, 1557, 1568, 1574, 1580, 1586, 1586, 1594, 1595, 1596, 1597, 1600, 1606, 1614, 1614, 1626, 1627, 1631, 1632, 1633, 1638, 1638, 1646, 1647, 1648, 1653, 1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1699, 1699, 1713, 1713, 1722, 1723, 1726, 1727, 1728, 1735, 1735, 1750, 1750, 1764, 1765, 1768, 1769, 1770, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1787, 1789, 1795, 1797, 1797, 1806, 1806, 1815, 1815, 1824, 1826, 1826, 1835, 1845, 1845, 1858, 1859, 1864, 1865, 1866, 1873, 1873, 1885, 1885, 1897, 1898, 1903, 1904, 1905, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1923, 1925, 1925, 1934, 1936, 1938, 1944, 1953, 1953, 1966, 1967, 1970, 1971, 1972, 1977, 1977, 1987, 1987, 1997, 1998, 1999, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2013, 2013, 2022, 2022, 2047, 2047, 2077, 2077, 2090, 2091, 2094, 2095, 2096, 2101, 2101, 2113, 2113, 2125, 2126, 2127, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2145, 2145, 2154, 2160, 2160, 2169, 2175, 2184, 2184, 2195, 2196, 2199, 2200, 2201, 2206, 2206, 2215, 2215, 2224, 2225, 2228, 2229, 2230, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2249, 2249, 2260, 2260, 2271, 2271, 2280, 2280, 2289, 2289, 2298, 2298, 2307, 2307, 2321, 2321, 2332, 2333, 2336, 2336, 2348, 2348, 2359, 2360, 2361, 2366, 2366, 2376, 2377, 2380, 2381, 2382, 2387, 2388, 2389, 2390, 2391, 2392, 2393, 2394, 2395, 2396, 2397, 2398, 2399, 2402, 2404, 2404, 2413, 2422, 2422, 2435, 2436, 2437, 2442, 2443, 2444, 2445, 2446, 2447, 2448, 2449, 2450, 2453, 2453, 2461, 2462, 2463, 2466, 2472, 2472, 2481, 2487, 2495, 2503, 2503, 2514, 2515, 2516, 2521, 2522, 2523, 2524, 2525, 2528, 2528, 2537, 2537, 2549, 2549, 2562, 2563, 2564, 2569, 2570, 2571, 2572, 2573, 2574, 2577, 2583, 2583, 2592, 2598, 2598, 2608, 2608, 2621, 2621, 2631, 2632, 2633, 2638, 2639, 2640, 2641, 2642, 2643, 2644, 2645, 2646, 2647, 2648, 2649, 2650, 2651, 2652, 2653, 2654, 2655, 2658, 2665, 2665, 2674, 2674, 2683, 2689, 2689, 2698, 2704, 2710, 2710, 2719, 2720, 2723, 2723, 2733, 2740, 2747, 2747, 2756, 2756, 2766, 2766, 2776, 2776, 2788, 2788, 2800, 2800, 2810, 2811, 2812, 2818, 2819, 2822, 2822, 2833, 2841, 2841, 2854, 2855, 2856, 2862, 2862, 2870, 2871, 2872, 2877, 2878, 2879, 2880, 2881, 2882, 2883, 2886, 2892, 2892, 2901, 2901, 2912, 2913, 2914, 2919, 2919, 2927, 2928, 2929, 2934, 2935, 2936, 2937, 2938, 2941, 2941, 2950, 2956, 2962, 2968, 2968, 2977, 2977, 2988, 2989, 2990, 2995, 2996, 2999 }; 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 6350 "dhcp6_parser.cc" #line 3005 "dhcp6_parser.yy" void isc::dhcp::Dhcp6Parser::error(const location_type& loc, const std::string& what) { ctx.error(loc, what); }