diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-04 11:36:04 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-04 11:36:04 +0000 |
commit | 040eee1aa49b49df4698d83a05af57c220127fd1 (patch) | |
tree | f635435954e6ccde5eee9893889e24f30ca68346 /src/bin/dhcp6/dhcp6_parser.cc | |
parent | Initial commit. (diff) | |
download | isc-kea-040eee1aa49b49df4698d83a05af57c220127fd1.tar.xz isc-kea-040eee1aa49b49df4698d83a05af57c220127fd1.zip |
Adding upstream version 2.2.0.upstream/2.2.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/bin/dhcp6/dhcp6_parser.cc')
-rw-r--r-- | src/bin/dhcp6/dhcp6_parser.cc | 6359 |
1 files changed, 6359 insertions, 0 deletions
diff --git a/src/bin/dhcp6/dhcp6_parser.cc b/src/bin/dhcp6/dhcp6_parser.cc new file mode 100644 index 0000000..07b11ee --- /dev/null +++ b/src/bin/dhcp6/dhcp6_parser.cc @@ -0,0 +1,6359 @@ +// A Bison parser, made by GNU Bison 3.8.2. + +// Skeleton implementation for Bison LALR(1) parsers in C++ + +// Copyright (C) 2002-2015, 2018-2021 Free Software Foundation, Inc. + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with this program. If not, see <https://www.gnu.org/licenses/>. + +// As a special exception, you may create a larger work that contains +// part or all of the Bison parser skeleton and distribute that work +// under terms of your choice, so long as that work isn't itself a +// parser generator using the skeleton or a modified version thereof +// as a parser skeleton. Alternatively, if you modify or redistribute +// the parser skeleton itself, you may (at your option) remove this +// special exception, which will cause the skeleton and the resulting +// Bison output files to be licensed under the GNU General Public +// License without this special exception. + +// This special exception was added by the Free Software Foundation in +// version 2.2 of Bison. + +// DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, +// especially those whose name start with YY_ or yy_. They are +// private implementation details that can be changed or removed. + + +// Take the name prefix into account. +#define yylex parser6_lex + + + +#include "dhcp6_parser.h" + + +// Unqualified %code blocks. +#line 34 "dhcp6_parser.yy" + +#include <dhcp6/parser_context.h> + +#line 52 "dhcp6_parser.cc" + + +#ifndef YY_ +# if defined YYENABLE_NLS && YYENABLE_NLS +# if ENABLE_NLS +# include <libintl.h> // FIXME: INFRINGES ON USER NAME SPACE. +# define YY_(msgid) dgettext ("bison-runtime", msgid) +# endif +# endif +# ifndef YY_ +# define YY_(msgid) msgid +# endif +#endif + + +// Whether we are compiled with exception support. +#ifndef YY_EXCEPTIONS +# if defined __GNUC__ && !defined __EXCEPTIONS +# define YY_EXCEPTIONS 0 +# else +# define YY_EXCEPTIONS 1 +# endif +#endif + +#define YYRHSLOC(Rhs, K) ((Rhs)[K].location) +/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. + If N is 0, then set CURRENT to the empty location which ends + the previous symbol: RHS[0] (always defined). */ + +# ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + do \ + if (N) \ + { \ + (Current).begin = YYRHSLOC (Rhs, 1).begin; \ + (Current).end = YYRHSLOC (Rhs, N).end; \ + } \ + else \ + { \ + (Current).begin = (Current).end = YYRHSLOC (Rhs, 0).end; \ + } \ + while (false) +# endif + + +// Enable debugging if requested. +#if PARSER6_DEBUG + +// A pseudo ostream that takes yydebug_ into account. +# define YYCDEBUG if (yydebug_) (*yycdebug_) + +# define YY_SYMBOL_PRINT(Title, Symbol) \ + do { \ + if (yydebug_) \ + { \ + *yycdebug_ << Title << ' '; \ + yy_print_ (*yycdebug_, Symbol); \ + *yycdebug_ << '\n'; \ + } \ + } while (false) + +# define YY_REDUCE_PRINT(Rule) \ + do { \ + if (yydebug_) \ + yy_reduce_print_ (Rule); \ + } while (false) + +# define YY_STACK_PRINT() \ + do { \ + if (yydebug_) \ + yy_stack_print_ (); \ + } while (false) + +#else // !PARSER6_DEBUG + +# define YYCDEBUG if (false) std::cerr +# define YY_SYMBOL_PRINT(Title, Symbol) YY_USE (Symbol) +# define YY_REDUCE_PRINT(Rule) static_cast<void> (0) +# define YY_STACK_PRINT() static_cast<void> (0) + +#endif // !PARSER6_DEBUG + +#define yyerrok (yyerrstatus_ = 0) +#define yyclearin (yyla.clear ()) + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab +#define YYRECOVERING() (!!yyerrstatus_) + +#line 14 "dhcp6_parser.yy" +namespace isc { namespace dhcp { +#line 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 <typename Base> + void + Dhcp6Parser::yy_destroy_ (const char* yymsg, basic_symbol<Base>& yysym) const + { + if (yymsg) + YY_SYMBOL_PRINT (yymsg, yysym); + } + +#if PARSER6_DEBUG + template <typename Base> + void + Dhcp6Parser::yy_print_ (std::ostream& yyo, const basic_symbol<Base>& yysym) const + { + std::ostream& yyoutput = yyo; + YY_USE (yyoutput); + if (yysym.empty ()) + yyo << "empty symbol"; + else + { + symbol_kind_type yykind = yysym.kind (); + yyo << (yykind < YYNTOKENS ? "token" : "nterm") + << ' ' << yysym.name () << " (" + << yysym.location << ": "; + switch (yykind) + { + case symbol_kind::S_STRING: // "constant string" +#line 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); +} |