// A Bison parser, made by GNU Bison 3.0.4.
// Skeleton implementation for Bison LALR(1) parsers in C++
// Copyright (C) 2002-2015 Free Software Foundation, Inc.
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
// As a special exception, you may create a larger work that contains
// part or all of the Bison parser skeleton and distribute that work
// under terms of your choice, so long as that work isn't itself a
// parser generator using the skeleton or a modified version thereof
// as a parser skeleton. Alternatively, if you modify or redistribute
// the parser skeleton itself, you may (at your option) remove this
// special exception, which will cause the skeleton and the resulting
// Bison output files to be licensed under the GNU General Public
// License without this special exception.
// This special exception was added by the Free Software Foundation in
// version 2.2 of Bison.
// Take the name prefix into account.
#define yylex parser6_lex
// First part of user declarations.
#line 39 "dhcp6_parser.cc" // lalr1.cc:404
# ifndef YY_NULLPTR
# if defined __cplusplus && 201103L <= __cplusplus
# define YY_NULLPTR nullptr
# else
# define YY_NULLPTR 0
# endif
# endif
#include "dhcp6_parser.h"
// User implementation prologue.
#line 53 "dhcp6_parser.cc" // lalr1.cc:412
// Unqualified %code blocks.
#line 34 "dhcp6_parser.yy" // lalr1.cc:413
#include
#line 59 "dhcp6_parser.cc" // lalr1.cc:413
#ifndef YY_
# if defined YYENABLE_NLS && YYENABLE_NLS
# if ENABLE_NLS
# include // FIXME: INFRINGES ON USER NAME SPACE.
# define YY_(msgid) dgettext ("bison-runtime", msgid)
# endif
# endif
# ifndef YY_
# define YY_(msgid) msgid
# endif
#endif
#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 (/*CONSTCOND*/ false)
# endif
// Suppress unused-variable warnings by "using" E.
#define YYUSE(E) ((void) (E))
// 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_ << std::endl; \
} \
} while (false)
# define YY_REDUCE_PRINT(Rule) \
do { \
if (yydebug_) \
yy_reduce_print_ (Rule); \
} while (false)
# define YY_STACK_PRINT() \
do { \
if (yydebug_) \
yystack_print_ (); \
} while (false)
#else // !PARSER6_DEBUG
# define YYCDEBUG if (false) std::cerr
# define YY_SYMBOL_PRINT(Title, Symbol) YYUSE(Symbol)
# define YY_REDUCE_PRINT(Rule) static_cast(0)
# define YY_STACK_PRINT() static_cast(0)
#endif // !PARSER6_DEBUG
#define yyerrok (yyerrstatus_ = 0)
#define yyclearin (yyla.clear ())
#define YYACCEPT goto yyacceptlab
#define YYABORT goto yyabortlab
#define YYERROR goto yyerrorlab
#define YYRECOVERING() (!!yyerrstatus_)
#line 14 "dhcp6_parser.yy" // lalr1.cc:479
namespace isc { namespace dhcp {
#line 145 "dhcp6_parser.cc" // lalr1.cc:479
/* 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;
// Fall through.
default:
yyr += *yyp;
break;
case '"':
return yyr;
}
do_not_strip_quotes: ;
}
return yystr;
}
/// Build a parser object.
Dhcp6Parser::Dhcp6Parser (isc::dhcp::Parser6Context& ctx_yyarg)
:
#if PARSER6_DEBUG
yydebug_ (false),
yycdebug_ (&std::cerr),
#endif
ctx (ctx_yyarg)
{}
Dhcp6Parser::~Dhcp6Parser ()
{}
/*---------------.
| Symbol types. |
`---------------*/
// by_state.
inline
Dhcp6Parser::by_state::by_state ()
: state (empty_state)
{}
inline
Dhcp6Parser::by_state::by_state (const by_state& other)
: state (other.state)
{}
inline
void
Dhcp6Parser::by_state::clear ()
{
state = empty_state;
}
inline
void
Dhcp6Parser::by_state::move (by_state& that)
{
state = that.state;
that.clear ();
}
inline
Dhcp6Parser::by_state::by_state (state_type s)
: state (s)
{}
inline
Dhcp6Parser::symbol_number_type
Dhcp6Parser::by_state::type_get () const
{
if (state == empty_state)
return empty_symbol;
else
return yystos_[state];
}
inline
Dhcp6Parser::stack_symbol_type::stack_symbol_type ()
{}
inline
Dhcp6Parser::stack_symbol_type::stack_symbol_type (state_type s, symbol_type& that)
: super_type (s, that.location)
{
switch (that.type_get ())
{
case 168: // value
case 172: // map_value
case 216: // db_type
case 292: // hr_mode
case 421: // duid_type
case 454: // ncr_protocol_value
case 462: // replace_client_name_value
value.move< ElementPtr > (that.value);
break;
case 153: // "boolean"
value.move< bool > (that.value);
break;
case 152: // "floating point"
value.move< double > (that.value);
break;
case 151: // "integer"
value.move< int64_t > (that.value);
break;
case 150: // "constant string"
value.move< std::string > (that.value);
break;
default:
break;
}
// that is emptied.
that.type = empty_symbol;
}
inline
Dhcp6Parser::stack_symbol_type&
Dhcp6Parser::stack_symbol_type::operator= (const stack_symbol_type& that)
{
state = that.state;
switch (that.type_get ())
{
case 168: // value
case 172: // map_value
case 216: // db_type
case 292: // hr_mode
case 421: // duid_type
case 454: // ncr_protocol_value
case 462: // replace_client_name_value
value.copy< ElementPtr > (that.value);
break;
case 153: // "boolean"
value.copy< bool > (that.value);
break;
case 152: // "floating point"
value.copy< double > (that.value);
break;
case 151: // "integer"
value.copy< int64_t > (that.value);
break;
case 150: // "constant string"
value.copy< std::string > (that.value);
break;
default:
break;
}
location = that.location;
return *this;
}
template
inline
void
Dhcp6Parser::yy_destroy_ (const char* yymsg, basic_symbol& yysym) const
{
if (yymsg)
YY_SYMBOL_PRINT (yymsg, yysym);
}
#if PARSER6_DEBUG
template
void
Dhcp6Parser::yy_print_ (std::ostream& yyo,
const basic_symbol& yysym) const
{
std::ostream& yyoutput = yyo;
YYUSE (yyoutput);
symbol_number_type yytype = yysym.type_get ();
// Avoid a (spurious) G++ 4.8 warning about "array subscript is
// below array bounds".
if (yysym.empty ())
std::abort ();
yyo << (yytype < yyntokens_ ? "token" : "nterm")
<< ' ' << yytname_[yytype] << " ("
<< yysym.location << ": ";
switch (yytype)
{
case 150: // "constant string"
#line 226 "dhcp6_parser.yy" // lalr1.cc:636
{ yyoutput << yysym.value.template as< std::string > (); }
#line 364 "dhcp6_parser.cc" // lalr1.cc:636
break;
case 151: // "integer"
#line 226 "dhcp6_parser.yy" // lalr1.cc:636
{ yyoutput << yysym.value.template as< int64_t > (); }
#line 371 "dhcp6_parser.cc" // lalr1.cc:636
break;
case 152: // "floating point"
#line 226 "dhcp6_parser.yy" // lalr1.cc:636
{ yyoutput << yysym.value.template as< double > (); }
#line 378 "dhcp6_parser.cc" // lalr1.cc:636
break;
case 153: // "boolean"
#line 226 "dhcp6_parser.yy" // lalr1.cc:636
{ yyoutput << yysym.value.template as< bool > (); }
#line 385 "dhcp6_parser.cc" // lalr1.cc:636
break;
case 168: // value
#line 226 "dhcp6_parser.yy" // lalr1.cc:636
{ yyoutput << yysym.value.template as< ElementPtr > (); }
#line 392 "dhcp6_parser.cc" // lalr1.cc:636
break;
case 172: // map_value
#line 226 "dhcp6_parser.yy" // lalr1.cc:636
{ yyoutput << yysym.value.template as< ElementPtr > (); }
#line 399 "dhcp6_parser.cc" // lalr1.cc:636
break;
case 216: // db_type
#line 226 "dhcp6_parser.yy" // lalr1.cc:636
{ yyoutput << yysym.value.template as< ElementPtr > (); }
#line 406 "dhcp6_parser.cc" // lalr1.cc:636
break;
case 292: // hr_mode
#line 226 "dhcp6_parser.yy" // lalr1.cc:636
{ yyoutput << yysym.value.template as< ElementPtr > (); }
#line 413 "dhcp6_parser.cc" // lalr1.cc:636
break;
case 421: // duid_type
#line 226 "dhcp6_parser.yy" // lalr1.cc:636
{ yyoutput << yysym.value.template as< ElementPtr > (); }
#line 420 "dhcp6_parser.cc" // lalr1.cc:636
break;
case 454: // ncr_protocol_value
#line 226 "dhcp6_parser.yy" // lalr1.cc:636
{ yyoutput << yysym.value.template as< ElementPtr > (); }
#line 427 "dhcp6_parser.cc" // lalr1.cc:636
break;
case 462: // replace_client_name_value
#line 226 "dhcp6_parser.yy" // lalr1.cc:636
{ yyoutput << yysym.value.template as< ElementPtr > (); }
#line 434 "dhcp6_parser.cc" // lalr1.cc:636
break;
default:
break;
}
yyo << ')';
}
#endif
inline
void
Dhcp6Parser::yypush_ (const char* m, state_type s, symbol_type& sym)
{
stack_symbol_type t (s, sym);
yypush_ (m, t);
}
inline
void
Dhcp6Parser::yypush_ (const char* m, stack_symbol_type& s)
{
if (m)
YY_SYMBOL_PRINT (m, s);
yystack_.push (s);
}
inline
void
Dhcp6Parser::yypop_ (unsigned int n)
{
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
inline 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_];
}
inline bool
Dhcp6Parser::yy_pact_value_is_default_ (int yyvalue)
{
return yyvalue == yypact_ninf_;
}
inline bool
Dhcp6Parser::yy_table_value_is_error_ (int yyvalue)
{
return yyvalue == yytable_ninf_;
}
int
Dhcp6Parser::parse ()
{
// State.
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;
// FIXME: This shoud be completely indented. It is not yet to
// avoid gratuitous conflicts when merging into the master branch.
try
{
YYCDEBUG << "Starting parse" << std::endl;
/* 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, yyla);
// A new symbol was pushed on the stack.
yynewstate:
YYCDEBUG << "Entering state " << yystack_[0].state << std::endl;
// Accept?
if (yystack_[0].state == yyfinal_)
goto yyacceptlab;
goto yybackup;
// Backup.
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: ";
try
{
symbol_type yylookahead (yylex (ctx));
yyla.move (yylookahead);
}
catch (const syntax_error& yyexc)
{
error (yyexc);
goto yyerrlab1;
}
}
YY_SYMBOL_PRINT ("Next token is", yyla);
/* If the proper action on seeing token YYLA.TYPE is to reduce or
to detect an error, take that action. */
yyn += yyla.type_get ();
if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.type_get ())
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", yyn, 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 168: // value
case 172: // map_value
case 216: // db_type
case 292: // hr_mode
case 421: // duid_type
case 454: // ncr_protocol_value
case 462: // replace_client_name_value
yylhs.value.build< ElementPtr > ();
break;
case 153: // "boolean"
yylhs.value.build< bool > ();
break;
case 152: // "floating point"
yylhs.value.build< double > ();
break;
case 151: // "integer"
yylhs.value.build< int64_t > ();
break;
case 150: // "constant string"
yylhs.value.build< std::string > ();
break;
default:
break;
}
// Compute the default @$.
{
slice slice (yystack_, yylen);
YYLLOC_DEFAULT (yylhs.location, slice, yylen);
}
// Perform the reduction.
YY_REDUCE_PRINT (yyn);
try
{
switch (yyn)
{
case 2:
#line 235 "dhcp6_parser.yy" // lalr1.cc:859
{ ctx.ctx_ = ctx.NO_KEYWORD; }
#line 680 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 4:
#line 236 "dhcp6_parser.yy" // lalr1.cc:859
{ ctx.ctx_ = ctx.CONFIG; }
#line 686 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 6:
#line 237 "dhcp6_parser.yy" // lalr1.cc:859
{ ctx.ctx_ = ctx.DHCP6; }
#line 692 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 8:
#line 238 "dhcp6_parser.yy" // lalr1.cc:859
{ ctx.ctx_ = ctx.INTERFACES_CONFIG; }
#line 698 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 10:
#line 239 "dhcp6_parser.yy" // lalr1.cc:859
{ ctx.ctx_ = ctx.SUBNET6; }
#line 704 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 12:
#line 240 "dhcp6_parser.yy" // lalr1.cc:859
{ ctx.ctx_ = ctx.POOLS; }
#line 710 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 14:
#line 241 "dhcp6_parser.yy" // lalr1.cc:859
{ ctx.ctx_ = ctx.PD_POOLS; }
#line 716 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 16:
#line 242 "dhcp6_parser.yy" // lalr1.cc:859
{ ctx.ctx_ = ctx.RESERVATIONS; }
#line 722 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 18:
#line 243 "dhcp6_parser.yy" // lalr1.cc:859
{ ctx.ctx_ = ctx.OPTION_DEF; }
#line 728 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 20:
#line 244 "dhcp6_parser.yy" // lalr1.cc:859
{ ctx.ctx_ = ctx.OPTION_DATA; }
#line 734 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 22:
#line 245 "dhcp6_parser.yy" // lalr1.cc:859
{ ctx.ctx_ = ctx.HOOKS_LIBRARIES; }
#line 740 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 24:
#line 246 "dhcp6_parser.yy" // lalr1.cc:859
{ ctx.ctx_ = ctx.DHCP_DDNS; }
#line 746 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 26:
#line 254 "dhcp6_parser.yy" // lalr1.cc:859
{ yylhs.value.as< ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); }
#line 752 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 27:
#line 255 "dhcp6_parser.yy" // lalr1.cc:859
{ yylhs.value.as< ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as< double > (), ctx.loc2pos(yystack_[0].location))); }
#line 758 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 28:
#line 256 "dhcp6_parser.yy" // lalr1.cc:859
{ yylhs.value.as< ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); }
#line 764 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 29:
#line 257 "dhcp6_parser.yy" // lalr1.cc:859
{ yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); }
#line 770 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 30:
#line 258 "dhcp6_parser.yy" // lalr1.cc:859
{ yylhs.value.as< ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
#line 776 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 31:
#line 259 "dhcp6_parser.yy" // lalr1.cc:859
{ yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
#line 782 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 32:
#line 260 "dhcp6_parser.yy" // lalr1.cc:859
{ yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
#line 788 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 33:
#line 263 "dhcp6_parser.yy" // lalr1.cc:859
{
// Push back the JSON value on the stack
ctx.stack_.push_back(yystack_[0].value.as< ElementPtr > ());
}
#line 797 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 34:
#line 268 "dhcp6_parser.yy" // lalr1.cc:859
{
// 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 808 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 35:
#line 273 "dhcp6_parser.yy" // lalr1.cc:859
{
// 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 818 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 36:
#line 279 "dhcp6_parser.yy" // lalr1.cc:859
{ yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
#line 824 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 39:
#line 286 "dhcp6_parser.yy" // lalr1.cc:859
{
// map containing a single entry
ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ());
}
#line 833 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 40:
#line 290 "dhcp6_parser.yy" // lalr1.cc:859
{
// map consisting of a shorter map followed by
// comma and string:value
ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ());
}
#line 843 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 41:
#line 297 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(l);
}
#line 852 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 42:
#line 300 "dhcp6_parser.yy" // lalr1.cc:859
{
// list parsing complete. Put any sanity checking here
}
#line 860 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 45:
#line 308 "dhcp6_parser.yy" // lalr1.cc:859
{
// List consisting of a single element.
ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
}
#line 869 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 46:
#line 312 "dhcp6_parser.yy" // lalr1.cc:859
{
// List ending with , and a value.
ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
}
#line 878 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 47:
#line 319 "dhcp6_parser.yy" // lalr1.cc:859
{
// List parsing about to start
}
#line 886 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 48:
#line 321 "dhcp6_parser.yy" // lalr1.cc:859
{
// list parsing complete. Put any sanity checking here
//ctx.stack_.pop_back();
}
#line 895 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 51:
#line 330 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(s);
}
#line 904 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 52:
#line 334 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(s);
}
#line 913 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 53:
#line 345 "dhcp6_parser.yy" // lalr1.cc:859
{
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 924 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 54:
#line 355 "dhcp6_parser.yy" // lalr1.cc:859
{
// 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 935 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 55:
#line 360 "dhcp6_parser.yy" // lalr1.cc:859
{
// 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 945 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 64:
#line 380 "dhcp6_parser.yy" // lalr1.cc:859
{
// 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_.back()->set("Dhcp6", m);
ctx.stack_.push_back(m);
ctx.enter(ctx.DHCP6);
}
#line 958 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 65:
#line 387 "dhcp6_parser.yy" // lalr1.cc:859
{
// map parsing completed. If we ever want to do any wrap up
// (maybe some sanity checking), this would be the best place
// for it.
ctx.stack_.pop_back();
ctx.leave();
}
#line 970 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 66:
#line 397 "dhcp6_parser.yy" // lalr1.cc:859
{
// Parse the Dhcp6 map
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
#line 980 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 67:
#line 401 "dhcp6_parser.yy" // lalr1.cc:859
{
// parsing completed
}
#line 988 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 93:
#line 436 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("preferred-lifetime", prf);
}
#line 997 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 94:
#line 441 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("valid-lifetime", prf);
}
#line 1006 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 95:
#line 446 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("renew-timer", prf);
}
#line 1015 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 96:
#line 451 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("rebind-timer", prf);
}
#line 1024 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 97:
#line 456 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr dpp(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("decline-probation-period", dpp);
}
#line 1033 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 98:
#line 461 "dhcp6_parser.yy" // lalr1.cc:859
{
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 1044 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 99:
#line 466 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
}
#line 1053 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 100:
#line 471 "dhcp6_parser.yy" // lalr1.cc:859
{
// Parse the interfaces-config map
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
#line 1063 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 101:
#line 475 "dhcp6_parser.yy" // lalr1.cc:859
{
// parsing completed
}
#line 1071 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 106:
#line 487 "dhcp6_parser.yy" // lalr1.cc:859
{
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 1082 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 107:
#line 492 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
}
#line 1091 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 108:
#line 497 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("re-detect", b);
}
#line 1100 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 109:
#line 503 "dhcp6_parser.yy" // lalr1.cc:859
{
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 1111 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 110:
#line 508 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
}
#line 1120 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 111:
#line 513 "dhcp6_parser.yy" // lalr1.cc:859
{
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 1131 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 112:
#line 518 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
}
#line 1140 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 128:
#line 542 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.DATABASE_TYPE);
}
#line 1148 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 129:
#line 544 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.back()->set("type", yystack_[0].value.as< ElementPtr > ());
ctx.leave();
}
#line 1157 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 130:
#line 549 "dhcp6_parser.yy" // lalr1.cc:859
{ yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("memfile", ctx.loc2pos(yystack_[0].location))); }
#line 1163 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 131:
#line 550 "dhcp6_parser.yy" // lalr1.cc:859
{ yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("mysql", ctx.loc2pos(yystack_[0].location))); }
#line 1169 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 132:
#line 551 "dhcp6_parser.yy" // lalr1.cc:859
{ yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("postgresql", ctx.loc2pos(yystack_[0].location))); }
#line 1175 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 133:
#line 552 "dhcp6_parser.yy" // lalr1.cc:859
{ yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("cql", ctx.loc2pos(yystack_[0].location))); }
#line 1181 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 134:
#line 555 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
#line 1189 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 135:
#line 557 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr user(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("user", user);
ctx.leave();
}
#line 1199 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 136:
#line 563 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
#line 1207 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 137:
#line 565 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr pwd(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("password", pwd);
ctx.leave();
}
#line 1217 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 138:
#line 571 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
#line 1225 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 139:
#line 573 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr h(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("host", h);
ctx.leave();
}
#line 1235 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 140:
#line 579 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr p(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("port", p);
}
#line 1244 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 141:
#line 584 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
#line 1252 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 142:
#line 586 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("name", name);
ctx.leave();
}
#line 1262 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 143:
#line 592 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("persist", n);
}
#line 1271 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 144:
#line 597 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("lfc-interval", n);
}
#line 1280 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 145:
#line 602 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("readonly", n);
}
#line 1289 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 146:
#line 607 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("connect-timeout", n);
}
#line 1298 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 147:
#line 612 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
#line 1306 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 148:
#line 614 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr cp(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("contact-points", cp);
ctx.leave();
}
#line 1316 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 149:
#line 620 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
#line 1324 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 150:
#line 622 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr ks(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("keyspace", ks);
ctx.leave();
}
#line 1334 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 151:
#line 629 "dhcp6_parser.yy" // lalr1.cc:859
{
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 1345 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 152:
#line 634 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
}
#line 1354 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 157:
#line 647 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(duid);
}
#line 1363 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 158:
#line 652 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr duid(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(duid);
}
#line 1372 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 159:
#line 657 "dhcp6_parser.yy" // lalr1.cc:859
{
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 1383 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 160:
#line 662 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
}
#line 1392 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 166:
#line 676 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(hwaddr);
}
#line 1401 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 167:
#line 681 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr flex_id(new StringElement("flex-id", ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(flex_id);
}
#line 1410 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 168:
#line 688 "dhcp6_parser.yy" // lalr1.cc:859
{
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 1421 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 169:
#line 693 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
}
#line 1430 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 170:
#line 698 "dhcp6_parser.yy" // lalr1.cc:859
{
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 1441 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 171:
#line 703 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
}
#line 1450 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 176:
#line 716 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
#line 1460 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 177:
#line 720 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
}
#line 1468 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 178:
#line 724 "dhcp6_parser.yy" // lalr1.cc:859
{
// Parse the hooks-libraries list entry map
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
#line 1478 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 179:
#line 728 "dhcp6_parser.yy" // lalr1.cc:859
{
// parsing completed
}
#line 1486 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 185:
#line 741 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
#line 1494 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 186:
#line 743 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr lib(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("library", lib);
ctx.leave();
}
#line 1504 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 187:
#line 749 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
#line 1512 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 188:
#line 751 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.back()->set("parameters", yystack_[0].value.as< ElementPtr > ());
ctx.leave();
}
#line 1521 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 189:
#line 757 "dhcp6_parser.yy" // lalr1.cc:859
{
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 1532 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 190:
#line 762 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
}
#line 1541 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 199:
#line 779 "dhcp6_parser.yy" // lalr1.cc:859
{
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 1550 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 200:
#line 784 "dhcp6_parser.yy" // lalr1.cc:859
{
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 1559 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 201:
#line 789 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("hold-reclaimed-time", value);
}
#line 1568 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 202:
#line 794 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("max-reclaim-leases", value);
}
#line 1577 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 203:
#line 799 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("max-reclaim-time", value);
}
#line 1586 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 204:
#line 804 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("unwarned-reclaim-cycles", value);
}
#line 1595 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 205:
#line 812 "dhcp6_parser.yy" // lalr1.cc:859
{
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 1606 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 206:
#line 817 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
}
#line 1615 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 211:
#line 837 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
#line 1625 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 212:
#line 841 "dhcp6_parser.yy" // lalr1.cc:859
{
// 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);
// }
// }
ctx.stack_.pop_back();
}
#line 1648 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 213:
#line 860 "dhcp6_parser.yy" // lalr1.cc:859
{
// Parse the subnet6 list entry map
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
#line 1658 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 214:
#line 864 "dhcp6_parser.yy" // lalr1.cc:859
{
// parsing completed
}
#line 1666 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 234:
#line 893 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
#line 1674 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 235:
#line 895 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr subnet(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("subnet", subnet);
ctx.leave();
}
#line 1684 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 236:
#line 901 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
#line 1692 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 237:
#line 903 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("interface", iface);
ctx.leave();
}
#line 1702 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 238:
#line 909 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
#line 1710 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 239:
#line 911 "dhcp6_parser.yy" // lalr1.cc:859
{
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 1720 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 240:
#line 917 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.CLIENT_CLASS);
}
#line 1728 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 241:
#line 919 "dhcp6_parser.yy" // lalr1.cc:859
{
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 1738 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 242:
#line 925 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.RESERVATION_MODE);
}
#line 1746 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 243:
#line 927 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.back()->set("reservation-mode", yystack_[0].value.as< ElementPtr > ());
ctx.leave();
}
#line 1755 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 244:
#line 932 "dhcp6_parser.yy" // lalr1.cc:859
{ yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("disabled", ctx.loc2pos(yystack_[0].location))); }
#line 1761 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 245:
#line 933 "dhcp6_parser.yy" // lalr1.cc:859
{ yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(yystack_[0].location))); }
#line 1767 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 246:
#line 934 "dhcp6_parser.yy" // lalr1.cc:859
{ yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("all", ctx.loc2pos(yystack_[0].location))); }
#line 1773 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 247:
#line 937 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr id(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("id", id);
}
#line 1782 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 248:
#line 942 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr rc(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("rapid-commit", rc);
}
#line 1791 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 249:
#line 950 "dhcp6_parser.yy" // lalr1.cc:859
{
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 1802 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 250:
#line 955 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
}
#line 1811 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 255:
#line 970 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
#line 1821 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 256:
#line 974 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
}
#line 1829 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 273:
#line 1002 "dhcp6_parser.yy" // lalr1.cc:859
{
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 1840 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 274:
#line 1007 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
}
#line 1849 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 279:
#line 1024 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
#line 1859 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 280:
#line 1028 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
}
#line 1867 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 281:
#line 1035 "dhcp6_parser.yy" // lalr1.cc:859
{
// Parse the option-def list entry map
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
#line 1877 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 282:
#line 1039 "dhcp6_parser.yy" // lalr1.cc:859
{
// parsing completed
}
#line 1885 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 296:
#line 1065 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr code(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("code", code);
}
#line 1894 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 298:
#line 1072 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
#line 1902 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 299:
#line 1074 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("type", prf);
ctx.leave();
}
#line 1912 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 300:
#line 1080 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
#line 1920 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 301:
#line 1082 "dhcp6_parser.yy" // lalr1.cc:859
{
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 1930 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 302:
#line 1088 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
#line 1938 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 303:
#line 1090 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr space(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("space", space);
ctx.leave();
}
#line 1948 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 305:
#line 1098 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
#line 1956 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 306:
#line 1100 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr encap(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("encapsulate", encap);
ctx.leave();
}
#line 1966 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 307:
#line 1106 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr array(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("array", array);
}
#line 1975 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 308:
#line 1115 "dhcp6_parser.yy" // lalr1.cc:859
{
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 1986 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 309:
#line 1120 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
}
#line 1995 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 314:
#line 1139 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
#line 2005 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 315:
#line 1143 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
}
#line 2013 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 316:
#line 1150 "dhcp6_parser.yy" // lalr1.cc:859
{
// Parse the option-data list entry map
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
#line 2023 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 317:
#line 1154 "dhcp6_parser.yy" // lalr1.cc:859
{
// parsing completed
}
#line 2031 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 330:
#line 1184 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
#line 2039 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 331:
#line 1186 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr data(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("data", data);
ctx.leave();
}
#line 2049 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 334:
#line 1196 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr space(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("csv-format", space);
}
#line 2058 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 335:
#line 1201 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr persist(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("always-send", persist);
}
#line 2067 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 336:
#line 1209 "dhcp6_parser.yy" // lalr1.cc:859
{
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 2078 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 337:
#line 1214 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
}
#line 2087 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 342:
#line 1229 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
#line 2097 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 343:
#line 1233 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
}
#line 2105 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 344:
#line 1237 "dhcp6_parser.yy" // lalr1.cc:859
{
// Parse the pool list entry map
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
#line 2115 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 345:
#line 1241 "dhcp6_parser.yy" // lalr1.cc:859
{
// parsing completed
}
#line 2123 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 352:
#line 1255 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
#line 2131 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 353:
#line 1257 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr pool(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("pool", pool);
ctx.leave();
}
#line 2141 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 354:
#line 1263 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
#line 2149 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 355:
#line 1265 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.back()->set("user-context", yystack_[0].value.as< ElementPtr > ());
ctx.leave();
}
#line 2158 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 356:
#line 1273 "dhcp6_parser.yy" // lalr1.cc:859
{
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 2169 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 357:
#line 1278 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
}
#line 2178 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 362:
#line 1293 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
#line 2188 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 363:
#line 1297 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
}
#line 2196 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 364:
#line 1301 "dhcp6_parser.yy" // lalr1.cc:859
{
// Parse the pd-pool list entry map
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
#line 2206 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 365:
#line 1305 "dhcp6_parser.yy" // lalr1.cc:859
{
// parsing completed
}
#line 2214 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 376:
#line 1323 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
#line 2222 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 377:
#line 1325 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("prefix", prf);
ctx.leave();
}
#line 2232 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 378:
#line 1331 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("prefix-len", prf);
}
#line 2241 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 379:
#line 1336 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
#line 2249 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 380:
#line 1338 "dhcp6_parser.yy" // lalr1.cc:859
{
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 2259 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 381:
#line 1344 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("excluded-prefix-len", prf);
}
#line 2268 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 382:
#line 1349 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr deleg(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("delegated-len", deleg);
}
#line 2277 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 383:
#line 1357 "dhcp6_parser.yy" // lalr1.cc:859
{
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 2288 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 384:
#line 1362 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
}
#line 2297 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 389:
#line 1375 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
#line 2307 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 390:
#line 1379 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
}
#line 2315 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 391:
#line 1383 "dhcp6_parser.yy" // lalr1.cc:859
{
// Parse the reservations list entry map
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
#line 2325 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 392:
#line 1387 "dhcp6_parser.yy" // lalr1.cc:859
{
// parsing completed
}
#line 2333 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 406:
#line 1411 "dhcp6_parser.yy" // lalr1.cc:859
{
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 2344 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 407:
#line 1416 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
}
#line 2353 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 408:
#line 1421 "dhcp6_parser.yy" // lalr1.cc:859
{
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 2364 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 409:
#line 1426 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
}
#line 2373 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 410:
#line 1431 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
#line 2381 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 411:
#line 1433 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr d(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("duid", d);
ctx.leave();
}
#line 2391 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 412:
#line 1439 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
#line 2399 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 413:
#line 1441 "dhcp6_parser.yy" // lalr1.cc:859
{
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 2409 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 414:
#line 1447 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
#line 2417 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 415:
#line 1449 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr host(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("hostname", host);
ctx.leave();
}
#line 2427 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 416:
#line 1455 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
#line 2435 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 417:
#line 1457 "dhcp6_parser.yy" // lalr1.cc:859
{
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 2445 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 418:
#line 1463 "dhcp6_parser.yy" // lalr1.cc:859
{
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 2456 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 419:
#line 1468 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
}
#line 2465 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 420:
#line 1476 "dhcp6_parser.yy" // lalr1.cc:859
{
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 2476 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 421:
#line 1481 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
}
#line 2485 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 422:
#line 1486 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
#line 2493 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 423:
#line 1488 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr ip(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("ip-address", ip);
ctx.leave();
}
#line 2503 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 424:
#line 1497 "dhcp6_parser.yy" // lalr1.cc:859
{
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 2514 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 425:
#line 1502 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
}
#line 2523 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 428:
#line 1511 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
#line 2533 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 429:
#line 1515 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
}
#line 2541 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 439:
#line 1535 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
#line 2549 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 440:
#line 1537 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr test(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("test", test);
ctx.leave();
}
#line 2559 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 441:
#line 1546 "dhcp6_parser.yy" // lalr1.cc:859
{
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 2570 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 442:
#line 1551 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
}
#line 2579 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 452:
#line 1569 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.DUID_TYPE);
}
#line 2587 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 453:
#line 1571 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.back()->set("type", yystack_[0].value.as< ElementPtr > ());
ctx.leave();
}
#line 2596 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 454:
#line 1576 "dhcp6_parser.yy" // lalr1.cc:859
{ yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("LLT", ctx.loc2pos(yystack_[0].location))); }
#line 2602 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 455:
#line 1577 "dhcp6_parser.yy" // lalr1.cc:859
{ yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("EN", ctx.loc2pos(yystack_[0].location))); }
#line 2608 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 456:
#line 1578 "dhcp6_parser.yy" // lalr1.cc:859
{ yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("LL", ctx.loc2pos(yystack_[0].location))); }
#line 2614 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 457:
#line 1581 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr htype(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("htype", htype);
}
#line 2623 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 458:
#line 1586 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
#line 2631 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 459:
#line 1588 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr id(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("identifier", id);
ctx.leave();
}
#line 2641 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 460:
#line 1594 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("time", time);
}
#line 2650 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 461:
#line 1599 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("enterprise-id", time);
}
#line 2659 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 462:
#line 1606 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("dhcp4o6-port", time);
}
#line 2668 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 463:
#line 1613 "dhcp6_parser.yy" // lalr1.cc:859
{
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 2679 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 464:
#line 1618 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
}
#line 2688 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 469:
#line 1631 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
#line 2696 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 470:
#line 1633 "dhcp6_parser.yy" // lalr1.cc:859
{
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 2706 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 471:
#line 1639 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
#line 2714 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 472:
#line 1641 "dhcp6_parser.yy" // lalr1.cc:859
{
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 2724 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 473:
#line 1649 "dhcp6_parser.yy" // lalr1.cc:859
{
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 2735 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 474:
#line 1654 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
}
#line 2744 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 475:
#line 1659 "dhcp6_parser.yy" // lalr1.cc:859
{
// Parse the dhcp-ddns map
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.push_back(m);
}
#line 2754 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 476:
#line 1663 "dhcp6_parser.yy" // lalr1.cc:859
{
// parsing completed
}
#line 2762 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 494:
#line 1688 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("enable-updates", b);
}
#line 2771 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 495:
#line 1693 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
#line 2779 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 496:
#line 1695 "dhcp6_parser.yy" // lalr1.cc:859
{
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 2789 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 497:
#line 1701 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
#line 2797 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 498:
#line 1703 "dhcp6_parser.yy" // lalr1.cc:859
{
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 2807 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 499:
#line 1709 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("server-port", i);
}
#line 2816 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 500:
#line 1714 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
#line 2824 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 501:
#line 1716 "dhcp6_parser.yy" // lalr1.cc:859
{
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 2834 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 502:
#line 1722 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("sender-port", i);
}
#line 2843 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 503:
#line 1727 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("max-queue-size", i);
}
#line 2852 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 504:
#line 1732 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NCR_PROTOCOL);
}
#line 2860 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 505:
#line 1734 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as< ElementPtr > ());
ctx.leave();
}
#line 2869 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 506:
#line 1740 "dhcp6_parser.yy" // lalr1.cc:859
{ yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); }
#line 2875 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 507:
#line 1741 "dhcp6_parser.yy" // lalr1.cc:859
{ yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); }
#line 2881 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 508:
#line 1744 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NCR_FORMAT);
}
#line 2889 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 509:
#line 1746 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("ncr-format", json);
ctx.leave();
}
#line 2899 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 510:
#line 1752 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("always-include-fqdn", b);
}
#line 2908 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 511:
#line 1757 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("override-no-update", b);
}
#line 2917 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 512:
#line 1762 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("override-client-update", b);
}
#line 2926 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 513:
#line 1767 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.REPLACE_CLIENT_NAME);
}
#line 2934 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 514:
#line 1769 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as< ElementPtr > ());
ctx.leave();
}
#line 2943 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 515:
#line 1775 "dhcp6_parser.yy" // lalr1.cc:859
{
yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location)));
}
#line 2951 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 516:
#line 1778 "dhcp6_parser.yy" // lalr1.cc:859
{
yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location)));
}
#line 2959 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 517:
#line 1781 "dhcp6_parser.yy" // lalr1.cc:859
{
yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location)));
}
#line 2967 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 518:
#line 1784 "dhcp6_parser.yy" // lalr1.cc:859
{
yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location)));
}
#line 2975 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 519:
#line 1787 "dhcp6_parser.yy" // lalr1.cc:859
{
error(yystack_[0].location, "boolean values for the replace-client-name are "
"no longer supported");
}
#line 2984 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 520:
#line 1793 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
#line 2992 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 521:
#line 1795 "dhcp6_parser.yy" // lalr1.cc:859
{
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 3002 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 522:
#line 1803 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
#line 3010 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 523:
#line 1805 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.back()->set("Dhcp4", yystack_[0].value.as< ElementPtr > ());
ctx.leave();
}
#line 3019 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 524:
#line 1810 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
#line 3027 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 525:
#line 1812 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.back()->set("DhcpDdns", yystack_[0].value.as< ElementPtr > ());
ctx.leave();
}
#line 3036 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 526:
#line 1817 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
#line 3044 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 527:
#line 1819 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.back()->set("Control-agent", yystack_[0].value.as< ElementPtr > ());
ctx.leave();
}
#line 3053 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 528:
#line 1830 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("Logging", m);
ctx.stack_.push_back(m);
ctx.enter(ctx.LOGGING);
}
#line 3064 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 529:
#line 1835 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
}
#line 3073 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 533:
#line 1852 "dhcp6_parser.yy" // lalr1.cc:859
{
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 3084 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 534:
#line 1857 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
}
#line 3093 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 537:
#line 1869 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(l);
ctx.stack_.push_back(l);
}
#line 3103 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 538:
#line 1873 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
}
#line 3111 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 546:
#line 1888 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr dl(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("debuglevel", dl);
}
#line 3120 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 547:
#line 1893 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
#line 3128 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 548:
#line 1895 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("severity", sev);
ctx.leave();
}
#line 3138 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 549:
#line 1901 "dhcp6_parser.yy" // lalr1.cc:859
{
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 3149 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 550:
#line 1906 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
ctx.leave();
}
#line 3158 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 553:
#line 1915 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
}
#line 3168 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 554:
#line 1919 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.stack_.pop_back();
}
#line 3176 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 561:
#line 1933 "dhcp6_parser.yy" // lalr1.cc:859
{
ctx.enter(ctx.NO_KEYWORD);
}
#line 3184 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 562:
#line 1935 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("output", sev);
ctx.leave();
}
#line 3194 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 563:
#line 1941 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr flush(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("flush", flush);
}
#line 3203 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 564:
#line 1946 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr maxsize(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("maxsize", maxsize);
}
#line 3212 "dhcp6_parser.cc" // lalr1.cc:859
break;
case 565:
#line 1951 "dhcp6_parser.yy" // lalr1.cc:859
{
ElementPtr maxver(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
ctx.stack_.back()->set("maxver", maxver);
}
#line 3221 "dhcp6_parser.cc" // lalr1.cc:859
break;
#line 3225 "dhcp6_parser.cc" // lalr1.cc:859
default:
break;
}
}
catch (const syntax_error& yyexc)
{
error (yyexc);
YYERROR;
}
YY_SYMBOL_PRINT ("-> $$ =", yylhs);
yypop_ (yylen);
yylen = 0;
YY_STACK_PRINT ();
// Shift the result of the reduction.
yypush_ (YY_NULLPTR, yylhs);
}
goto yynewstate;
/*--------------------------------------.
| yyerrlab -- here on detecting error. |
`--------------------------------------*/
yyerrlab:
// If not already recovering from an error, report this error.
if (!yyerrstatus_)
{
++yynerrs_;
error (yyla.location, yysyntax_error_ (yystack_[0].state, yyla));
}
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.type_get () == 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 like GCC when the user code never invokes
YYERROR and the label yyerrorlab therefore never appears in user
code. */
if (false)
goto yyerrorlab;
yyerror_range[1].location = yystack_[yylen - 1].location;
/* Do not reclaim the symbols of the rule whose action triggered
this YYERROR. */
yypop_ (yylen);
yylen = 0;
goto yyerrlab1;
/*-------------------------------------------------------------.
| yyerrlab1 -- common code for both syntax error and YYERROR. |
`-------------------------------------------------------------*/
yyerrlab1:
yyerrstatus_ = 3; // Each real token shifted decrements this.
{
stack_symbol_type error_token;
for (;;)
{
yyn = yypact_[yystack_[0].state];
if (!yy_pact_value_is_default_ (yyn))
{
yyn += yyterror_;
if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yyterror_)
{
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 ();
}
yyerror_range[2].location = yyla.location;
YYLLOC_DEFAULT (error_token.location, yyerror_range, 2);
// Shift the error token.
error_token.state = yyn;
yypush_ ("Shifting", error_token);
}
goto yynewstate;
// Accept.
yyacceptlab:
yyresult = 0;
goto yyreturn;
// Abort.
yyabortlab:
yyresult = 1;
goto yyreturn;
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);
while (1 < yystack_.size ())
{
yy_destroy_ ("Cleanup: popping", yystack_[0]);
yypop_ ();
}
return yyresult;
}
catch (...)
{
YYCDEBUG << "Exception caught: cleaning lookahead and stack"
<< std::endl;
// Do not try to display the values of the reclaimed symbols,
// as their printer might throw an exception.
if (!yyla.empty ())
yy_destroy_ (YY_NULLPTR, yyla);
while (1 < yystack_.size ())
{
yy_destroy_ (YY_NULLPTR, yystack_[0]);
yypop_ ();
}
throw;
}
}
void
Dhcp6Parser::error (const syntax_error& yyexc)
{
error (yyexc.location, yyexc.what());
}
// Generate an error message.
std::string
Dhcp6Parser::yysyntax_error_ (state_type yystate, const symbol_type& yyla) const
{
// Number of reported tokens (one for the "unexpected", one per
// "expected").
size_t yycount = 0;
// Its maximum.
enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
// Arguments of yyformat.
char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
/* 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 (!yyla.empty ())
{
int yytoken = yyla.type_get ();
yyarg[yycount++] = yytname_[yytoken];
int yyn = yypact_[yystate];
if (!yy_pact_value_is_default_ (yyn))
{
/* Start YYX at -YYN if negative to avoid negative indexes in
YYCHECK. In other words, skip the first -YYN actions for
this state because they are default actions. */
int yyxbegin = yyn < 0 ? -yyn : 0;
// Stay within bounds of both yycheck and yytname.
int yychecklim = yylast_ - yyn + 1;
int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_;
for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
if (yycheck_[yyx + yyn] == yyx && yyx != yyterror_
&& !yy_table_value_is_error_ (yytable_[yyx + yyn]))
{
if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
{
yycount = 1;
break;
}
else
yyarg[yycount++] = yytname_[yyx];
}
}
}
char const* yyformat = YY_NULLPTR;
switch (yycount)
{
#define YYCASE_(N, S) \
case N: \
yyformat = S; \
break
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.
size_t yyi = 0;
for (char const* yyp = yyformat; *yyp; ++yyp)
if (yyp[0] == '%' && yyp[1] == 's' && yyi < yycount)
{
yyres += yytnamerr_ (yyarg[yyi++]);
++yyp;
}
else
yyres += *yyp;
return yyres;
}
const short int Dhcp6Parser::yypact_ninf_ = -702;
const signed char Dhcp6Parser::yytable_ninf_ = -1;
const short int
Dhcp6Parser::yypact_[] =
{
202, -702, -702, -702, -702, -702, -702, -702, -702, -702,
-702, -702, -702, 40, 18, 70, 78, 120, 122, 141,
147, 175, 183, 211, 219, 223, -702, -702, -702, -702,
-702, -702, -702, -702, -702, -702, -702, -702, -702, -702,
-702, -702, -702, -702, -702, -702, -702, -702, -702, -702,
-702, -702, -702, -702, -702, -702, -702, -702, -702, -702,
18, -120, 23, 30, 46, 22, 1, 35, 145, 62,
159, -37, 140, -702, 36, 72, 106, 154, 207, -702,
-702, -702, -702, -702, 228, -702, 66, -702, -702, -702,
-702, -702, -702, -702, -702, -702, 230, 274, 275, 297,
299, -702, -702, -702, -702, -702, -702, -702, -702, -702,
-702, -702, 306, -702, -702, -702, 68, -702, -702, -702,
-702, -702, -702, -702, -702, -702, -702, -702, -702, -702,
-702, -702, -702, -702, -702, -702, -702, -702, -702, -702,
-702, 312, 103, -702, -702, -702, -702, -702, -702, -702,
-702, -702, 328, 331, -702, -702, -702, -702, -702, -702,
-702, -702, -702, 125, -702, -702, -702, -702, -702, -702,
-702, -702, -702, -702, -702, -702, -702, -702, -702, -702,
-702, 144, -702, -702, -702, -702, 333, -702, 334, 358,
-702, -702, -702, 171, -702, -702, -702, -702, -702, -702,
-702, -702, -702, -702, -702, -702, -702, -702, -702, 284,
360, -702, -702, -702, -702, -702, -702, -702, -702, -702,
-702, 361, -702, -702, -702, 362, -702, -702, 356, 364,
-702, -702, -702, -702, -702, -702, -702, -702, -702, -702,
-702, 365, 366, -702, -702, -702, -702, 363, 369, -702,
-702, -702, -702, -702, -702, -702, -702, -702, -702, 201,
-702, -702, -702, 370, -702, -702, 371, -702, 372, 373,
-702, -702, 374, 375, 376, -702, -702, -702, 203, -702,
-702, -702, -702, -702, -702, -702, -702, -702, -702, -702,
-702, -702, -702, -702, -702, 18, 18, -702, 218, 377,
378, 379, 380, 381, -702, 23, -702, 382, 383, 384,
222, 238, 239, 240, 241, 389, 390, 391, 392, 393,
394, 395, 396, 397, 398, 399, 253, 401, 402, 30,
-702, 403, 255, 46, -702, 79, 405, 406, 407, 408,
409, 265, 261, 411, 413, 414, 415, 22, -702, 419,
420, 1, -702, 421, 276, 422, 277, 280, 35, -702,
425, 426, 428, 429, 430, 431, 432, -702, 145, 433,
434, 289, 435, 437, 438, 291, -702, 62, 439, 292,
293, -702, 159, 443, 444, 9, -702, 296, 446, 449,
303, 453, 307, 308, 456, 457, 313, 314, 315, 458,
460, 140, -702, -702, -702, 465, 464, 466, 18, 18,
18, -702, 468, 469, 470, -702, -702, -702, -702, -702,
467, 473, 474, 475, 476, 477, 478, 479, 481, 480,
482, -702, 483, 484, -702, 487, -702, -702, -702, -702,
-702, -702, 485, 491, -702, -702, -702, 490, 492, 338,
346, 348, -702, -702, 56, 349, 495, 496, -702, 352,
497, -702, 355, -702, 357, -702, -702, -702, 487, 487,
487, 359, 367, 385, 386, -702, 387, 388, -702, 400,
404, 410, -702, -702, 412, -702, -702, -702, 416, 18,
-702, -702, 417, 418, -702, 423, -702, -702, 16, 424,
-702, -702, -702, 115, 427, -702, 18, 30, 436, -702,
-702, -702, 46, 116, 116, 499, 501, 503, 504, -45,
18, 99, 42, 505, 173, 27, 139, 140, -702, -702,
509, -702, 79, 507, 508, -702, -702, -702, -702, -702,
-702, -702, -702, 512, 440, -702, -702, -702, -702, -702,
-702, -702, -702, -702, -702, -702, -702, -702, -702, -702,
-702, -702, -702, -702, -702, -702, -702, -702, -702, -702,
-702, -702, -702, -702, -702, -702, -702, -702, -702, -702,
225, -702, 262, -702, -702, 264, -702, -702, -702, -702,
516, 518, 519, 520, 521, -702, -702, -702, 266, -702,
-702, -702, -702, -702, -702, -702, -702, -702, -702, -702,
-702, -702, 268, -702, 510, 523, -702, -702, 522, 524,
-702, -702, 525, 526, -702, -702, 527, 529, -702, -702,
-702, 45, -702, -702, -702, 528, -702, -702, -702, 150,
-702, -702, -702, -702, 178, -702, 533, 537, -702, 538,
539, 540, 542, 543, 544, 272, -702, -702, -702, -702,
-702, -702, -702, -702, -702, 545, 547, 548, -702, -702,
278, -702, -702, -702, -702, -702, -702, -702, -702, 279,
-702, -702, -702, 290, 441, 442, -702, -702, 535, 550,
-702, -702, 549, 553, -702, -702, 551, 555, -702, -702,
556, -702, 557, 436, -702, -702, 561, 565, 566, 567,
445, 447, 448, 450, 451, 568, 570, 116, -702, -702,
22, -702, 499, 62, -702, 501, 159, -702, 503, 155,
-702, 504, -45, -702, -702, 99, -702, 42, -702, -37,
-702, 505, 454, 455, 459, 461, 462, 463, 173, -702,
571, 572, 471, 472, 486, 27, -702, 574, 575, 139,
-702, -702, -702, 576, 577, -702, 1, -702, 507, 35,
-702, 508, 145, -702, 512, 579, -702, 554, -702, 335,
488, 489, 493, -702, -702, -702, -702, -702, 494, 498,
-702, 309, -702, 573, -702, 578, -702, -702, -702, -702,
-702, -702, -702, -702, -702, -702, -702, -702, 310, -702,
-702, -702, -702, -702, -702, -702, -702, 311, -702, -702,
-702, -702, -702, -702, -702, -702, 263, 500, -702, -702,
-702, -702, 502, 513, -702, -702, 534, 319, -702, 320,
-702, 580, -702, 536, 582, -702, -702, -702, -702, -702,
-702, -702, -702, -702, -702, -702, -702, -702, 155, -702,
-702, -702, -702, -702, -702, -702, -702, -702, -702, -702,
-702, -702, -702, -702, 288, -702, -702, 77, 582, -702,
-702, 581, -702, -702, -702, 323, -702, -702, -702, -702,
-702, 583, 511, 586, 77, -702, 588, -702, 541, -702,
587, -702, -702, 327, -702, 63, 587, -702, -702, 591,
593, 594, 326, -702, -702, -702, -702, -702, -702, 597,
530, 546, 552, 63, -702, 558, -702, -702, -702, -702,
-702
};
const unsigned short int
Dhcp6Parser::yydefact_[] =
{
0, 2, 4, 6, 8, 10, 12, 14, 16, 18,
20, 22, 24, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 1, 41, 34, 30,
29, 26, 27, 28, 33, 3, 31, 32, 54, 5,
66, 7, 100, 9, 213, 11, 344, 13, 364, 15,
391, 17, 281, 19, 316, 21, 178, 23, 475, 25,
43, 37, 0, 0, 0, 0, 0, 0, 393, 283,
318, 0, 0, 45, 0, 44, 0, 0, 38, 64,
528, 522, 524, 526, 0, 63, 0, 56, 58, 60,
61, 62, 59, 98, 109, 111, 0, 0, 0, 0,
0, 205, 273, 308, 249, 151, 168, 159, 424, 170,
189, 441, 0, 463, 473, 92, 0, 68, 70, 71,
72, 73, 74, 77, 78, 79, 80, 82, 81, 86,
87, 75, 76, 84, 85, 83, 88, 89, 90, 91,
106, 0, 0, 102, 104, 105, 428, 336, 356, 234,
236, 238, 0, 0, 242, 240, 383, 420, 233, 217,
218, 219, 220, 0, 215, 224, 225, 226, 229, 231,
227, 228, 221, 222, 223, 230, 232, 352, 354, 351,
349, 0, 346, 348, 350, 376, 0, 379, 0, 0,
375, 371, 374, 0, 366, 368, 369, 372, 373, 370,
418, 406, 408, 410, 412, 414, 416, 405, 404, 0,
394, 395, 399, 400, 397, 401, 402, 403, 398, 298,
141, 0, 302, 300, 305, 0, 294, 295, 0, 284,
285, 287, 297, 288, 289, 290, 304, 291, 292, 293,
330, 0, 0, 328, 329, 332, 333, 0, 319, 320,
322, 323, 324, 325, 326, 327, 185, 187, 182, 0,
180, 183, 184, 0, 495, 497, 0, 500, 0, 0,
504, 508, 0, 0, 0, 513, 520, 493, 0, 477,
479, 480, 481, 482, 483, 484, 485, 486, 487, 488,
489, 490, 491, 492, 42, 0, 0, 35, 0, 0,
0, 0, 0, 0, 53, 0, 55, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
67, 0, 0, 0, 101, 430, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 214, 0,
0, 0, 345, 0, 0, 0, 0, 0, 0, 365,
0, 0, 0, 0, 0, 0, 0, 392, 0, 0,
0, 0, 0, 0, 0, 0, 282, 0, 0, 0,
0, 317, 0, 0, 0, 0, 179, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 476, 46, 39, 0, 0, 0, 0, 0,
0, 57, 0, 0, 0, 93, 94, 95, 96, 97,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 462, 0, 0, 69, 0, 108, 103, 439, 437,
438, 436, 0, 431, 432, 434, 435, 0, 0, 0,
0, 0, 247, 248, 0, 0, 0, 0, 216, 0,
0, 347, 0, 378, 0, 381, 382, 367, 0, 0,
0, 0, 0, 0, 0, 396, 0, 0, 296, 0,
0, 0, 307, 286, 0, 334, 335, 321, 0, 0,
181, 494, 0, 0, 499, 0, 502, 503, 0, 0,
510, 511, 512, 0, 0, 478, 0, 0, 0, 523,
525, 527, 0, 0, 0, 207, 275, 310, 251, 0,
43, 0, 0, 172, 0, 0, 0, 0, 47, 107,
0, 429, 0, 338, 358, 235, 237, 239, 244, 245,
246, 243, 241, 385, 0, 353, 36, 355, 377, 380,
419, 407, 409, 411, 413, 415, 417, 299, 142, 303,
301, 306, 331, 186, 188, 496, 498, 501, 506, 507,
505, 509, 515, 516, 517, 518, 519, 514, 521, 40,
0, 533, 0, 530, 532, 0, 128, 134, 136, 138,
0, 0, 0, 0, 0, 147, 149, 127, 0, 113,
115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
125, 126, 0, 211, 0, 208, 209, 279, 0, 276,
277, 314, 0, 311, 312, 255, 0, 252, 253, 157,
158, 0, 153, 155, 156, 0, 166, 167, 163, 0,
161, 164, 165, 426, 0, 176, 0, 173, 174, 0,
0, 0, 0, 0, 0, 0, 191, 193, 194, 195,
196, 197, 198, 452, 458, 0, 0, 0, 451, 450,
0, 443, 445, 448, 446, 447, 449, 469, 471, 0,
465, 467, 468, 0, 49, 0, 433, 342, 0, 339,
340, 362, 0, 359, 360, 389, 0, 386, 387, 422,
0, 65, 0, 0, 529, 99, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 110, 112,
0, 206, 0, 283, 274, 0, 318, 309, 0, 0,
250, 0, 0, 152, 169, 0, 160, 0, 425, 0,
171, 0, 0, 0, 0, 0, 0, 0, 0, 190,
0, 0, 0, 0, 0, 0, 442, 0, 0, 0,
464, 474, 51, 0, 50, 440, 0, 337, 0, 0,
357, 0, 393, 384, 0, 0, 421, 0, 531, 0,
0, 0, 0, 140, 143, 144, 145, 146, 0, 0,
114, 0, 210, 0, 278, 0, 313, 272, 269, 271,
263, 264, 259, 260, 261, 262, 267, 270, 0, 257,
265, 266, 268, 254, 154, 162, 427, 0, 175, 199,
200, 201, 202, 203, 204, 192, 0, 0, 457, 460,
461, 444, 0, 0, 466, 48, 0, 0, 341, 0,
361, 0, 388, 0, 0, 130, 131, 132, 133, 129,
135, 137, 139, 148, 150, 212, 280, 315, 0, 256,
177, 454, 455, 456, 453, 459, 470, 472, 52, 343,
363, 390, 423, 537, 0, 535, 258, 0, 0, 534,
549, 0, 547, 545, 541, 0, 539, 543, 544, 542,
536, 0, 0, 0, 0, 538, 0, 546, 0, 540,
0, 548, 553, 0, 551, 0, 0, 550, 561, 0,
0, 0, 0, 555, 557, 558, 559, 560, 552, 0,
0, 0, 0, 0, 554, 0, 563, 564, 565, 556,
562
};
const short int
Dhcp6Parser::yypgoto_[] =
{
-702, -702, -702, -702, -702, -702, -702, -702, -702, -702,
-702, -702, -702, -702, 12, -702, 124, -702, -702, -702,
-702, -702, -702, 10, -702, -109, -702, -702, -702, -62,
-702, -702, -702, 302, -702, -702, -702, -702, 97, 282,
-64, -63, -50, -48, -702, -702, -702, -702, -702, 96,
283, -702, -702, -702, -702, -702, -702, -702, 95, -102,
-702, -702, -702, -702, -702, -702, -702, -702, -702, -702,
-58, -702, -511, -702, -702, -702, -702, -702, -702, -702,
-702, -702, -702, -115, -499, -702, -702, -702, -702, -117,
-702, -702, -702, -702, -702, -702, -702, -702, -122, -702,
-702, -702, -119, 236, -702, -702, -702, -702, -702, -702,
-702, -124, -702, -702, -702, -702, -702, -702, -701, -702,
-702, -702, -97, -702, -702, -702, -94, 281, -702, -702,
-697, -702, -695, -702, -506, -702, -694, -702, -702, -702,
-693, -702, -702, -702, -702, -104, -702, -702, -229, -702,
-702, -702, -702, -95, -702, -702, -702, -92, -702, 256,
-702, -57, -702, -702, -702, -702, -702, -46, -702, -702,
-702, -702, -702, -47, -702, -702, -702, -96, -702, -702,
-702, -91, -702, 252, -702, -702, -702, -702, -702, -702,
-702, -702, -702, -702, -702, -132, -702, -702, -702, -126,
294, -702, -702, -56, -702, -702, -702, -702, -702, -130,
-702, -702, -702, -127, 295, -702, -702, -702, -702, -702,
-702, -702, -702, -702, -702, -702, -128, -702, -702, -702,
-125, -702, 286, -702, -702, -702, -702, -702, -702, -702,
-702, -702, -702, -702, -702, -702, -702, -692, -702, -702,
-702, -691, -702, -702, -702, -702, -702, 117, -702, -702,
-702, -702, -702, -702, -81, -702, -702, -702, -702, -702,
-702, -702, -702, -702, -702, -702, -702, -108, -702, -702,
-702, -702, -702, -702, -702, -702, 133, 287, -702, -702,
-702, -702, -702, -702, -702, -702, -702, -702, -702, -702,
-702, -702, -702, -702, -702, -702, -702, -702, -702, -702,
-702, -702, -702, -702, -702, -702, -702, -702, -702, -702,
-28, -702, -702, -702, -202, -702, -702, -216, -702, -702,
-702, -702, -702, -702, -221, -702, -702, -236, -702, -702,
-702, -702, -702
};
const short int
Dhcp6Parser::yydefgoto_[] =
{
-1, 13, 14, 15, 16, 17, 18, 19, 20, 21,
22, 23, 24, 25, 73, 35, 36, 61, 547, 77,
78, 37, 60, 74, 75, 529, 684, 763, 764, 115,
39, 62, 86, 87, 88, 299, 41, 63, 116, 117,
118, 119, 120, 121, 122, 123, 307, 43, 64, 142,
143, 144, 331, 145, 124, 308, 125, 309, 598, 599,
600, 706, 849, 601, 707, 602, 708, 603, 709, 604,
227, 370, 606, 607, 608, 609, 610, 715, 611, 716,
126, 319, 631, 632, 633, 634, 127, 321, 639, 640,
641, 642, 128, 320, 129, 323, 646, 647, 648, 739,
57, 71, 259, 260, 261, 383, 262, 384, 130, 324,
655, 656, 657, 658, 659, 660, 661, 662, 131, 315,
614, 615, 616, 720, 45, 65, 163, 164, 165, 338,
166, 339, 167, 340, 168, 344, 169, 343, 541, 170,
171, 132, 318, 626, 627, 628, 729, 808, 809, 133,
316, 618, 619, 620, 723, 53, 69, 228, 229, 230,
231, 232, 233, 234, 369, 235, 373, 236, 372, 237,
238, 374, 239, 134, 317, 622, 623, 624, 726, 55,
70, 247, 248, 249, 250, 251, 378, 252, 253, 254,
255, 173, 336, 688, 689, 690, 766, 47, 66, 181,
182, 183, 349, 184, 350, 174, 337, 692, 693, 694,
769, 49, 67, 193, 194, 195, 353, 196, 197, 355,
198, 199, 175, 345, 696, 697, 698, 772, 51, 68,
209, 210, 211, 212, 361, 213, 362, 214, 363, 215,
364, 216, 365, 217, 366, 218, 360, 176, 346, 700,
775, 135, 322, 644, 335, 442, 443, 444, 445, 446,
530, 136, 325, 670, 671, 672, 750, 864, 673, 674,
751, 675, 676, 137, 138, 327, 679, 680, 681, 757,
682, 758, 139, 328, 59, 72, 278, 279, 280, 281,
388, 282, 389, 283, 284, 391, 285, 286, 287, 394,
570, 288, 395, 289, 290, 291, 292, 399, 577, 293,
400, 89, 301, 90, 302, 91, 303, 92, 300, 582,
583, 584, 702, 874, 875, 877, 885, 886, 887, 888,
893, 889, 891, 903, 904, 905, 912, 913, 914, 919,
915, 916, 917
};
const unsigned short int
Dhcp6Parser::yytable_[] =
{
85, 159, 160, 158, 179, 190, 207, 226, 243, 258,
277, 192, 244, 245, 669, 161, 643, 162, 172, 180,
191, 208, 638, 27, 246, 28, 34, 29, 803, 146,
76, 629, 804, 79, 805, 806, 807, 811, 812, 103,
26, 93, 294, 663, 94, 95, 256, 257, 732, 146,
177, 733, 591, 96, 97, 98, 99, 178, 140, 141,
103, 96, 97, 98, 99, 100, 101, 102, 103, 305,
147, 329, 148, 103, 306, 295, 330, 38, 219, 149,
150, 151, 152, 153, 154, 40, 185, 186, 187, 188,
189, 178, 256, 257, 155, 156, 104, 105, 106, 107,
108, 220, 157, 221, 222, 630, 333, 223, 224, 225,
296, 334, 109, 84, 155, 110, 220, 103, 220, 538,
539, 540, 111, 664, 665, 666, 667, 42, 347, 44,
112, 113, 586, 348, 114, 568, 569, 587, 588, 589,
590, 591, 592, 593, 594, 595, 596, 351, 46, 80,
438, 84, 352, 735, 48, 220, 736, 803, 81, 82,
83, 804, 297, 805, 806, 807, 811, 812, 30, 31,
32, 33, 84, 84, 358, 629, 636, 84, 637, 359,
84, 737, 50, 103, 738, 84, 96, 97, 98, 99,
52, 101, 908, 103, 220, 909, 910, 911, 220, 240,
221, 222, 241, 242, 385, 880, 401, 881, 882, 386,
298, 402, 84, 150, 151, 200, 153, 154, 54, 201,
202, 203, 204, 205, 206, 108, 56, 84, 329, 84,
58, 816, 304, 701, 310, 157, 638, 572, 573, 574,
575, 677, 678, 85, 669, 263, 264, 265, 266, 267,
268, 269, 270, 271, 272, 273, 274, 275, 276, 649,
650, 651, 652, 653, 654, 703, 84, 333, 576, 717,
704, 717, 705, 439, 718, 748, 719, 440, 311, 312,
749, 755, 759, 159, 160, 158, 756, 760, 441, 179,
84, 878, 367, 401, 879, 84, 190, 161, 761, 162,
172, 313, 192, 314, 180, 84, 207, 403, 404, 84,
326, 191, 347, 858, 385, 226, 332, 855, 859, 860,
243, 208, 351, 358, 244, 245, 894, 869, 870, 923,
906, 895, 341, 907, 924, 342, 246, 354, 356, 277,
1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
11, 12, 845, 846, 847, 848, 861, 862, 863, 550,
551, 552, 357, 368, 376, 371, 375, 377, 405, 379,
380, 381, 382, 415, 387, 390, 392, 393, 396, 397,
398, 406, 407, 408, 409, 410, 412, 413, 414, 416,
417, 418, 419, 420, 421, 422, 423, 424, 425, 426,
427, 428, 429, 430, 431, 432, 433, 435, 436, 447,
448, 449, 450, 451, 453, 454, 452, 455, 456, 457,
509, 510, 511, 459, 460, 462, 464, 463, 465, 468,
469, 466, 470, 471, 472, 473, 474, 476, 477, 479,
478, 480, 481, 484, 482, 485, 486, 488, 489, 491,
492, 597, 597, 493, 494, 605, 605, 495, 496, 497,
498, 499, 503, 668, 504, 277, 500, 501, 502, 506,
439, 507, 515, 508, 440, 512, 513, 514, 516, 517,
518, 519, 520, 521, 522, 441, 523, 524, 535, 525,
526, 527, 528, 531, 532, 533, 536, 534, 537, 542,
543, 564, 545, 544, 28, 548, 613, 549, 617, 553,
621, 625, 645, 685, 687, 691, 721, 554, 579, 695,
710, 699, 711, 712, 713, 714, 722, 725, 724, 728,
635, 727, 731, 730, 734, 555, 556, 557, 558, 740,
741, 767, 742, 743, 744, 571, 745, 746, 747, 752,
559, 753, 754, 768, 560, 770, 771, 773, 774, 844,
561, 777, 562, 581, 776, 779, 563, 565, 566, 780,
781, 782, 788, 567, 789, 826, 827, 578, 832, 833,
836, 856, 835, 843, 546, 892, 857, 896, 871, 873,
898, 762, 765, 900, 902, 920, 783, 921, 922, 785,
784, 925, 787, 786, 580, 819, 820, 411, 585, 612,
821, 434, 822, 823, 824, 790, 437, 814, 815, 818,
817, 490, 828, 829, 825, 792, 791, 813, 458, 876,
794, 793, 796, 483, 487, 795, 838, 830, 850, 851,
837, 840, 839, 852, 853, 461, 842, 841, 854, 686,
865, 834, 866, 467, 475, 597, 159, 160, 158, 605,
683, 226, 897, 867, 243, 798, 799, 797, 244, 245,
161, 802, 162, 172, 831, 778, 890, 258, 899, 800,
246, 801, 810, 926, 868, 918, 872, 929, 505, 0,
0, 901, 0, 668, 0, 0, 0, 927, 0, 0,
0, 0, 0, 928, 179, 0, 0, 190, 930, 0,
207, 0, 0, 192, 0, 0, 0, 0, 0, 180,
0, 0, 191, 0, 0, 208, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 798, 799, 797, 0, 0, 0,
802, 0, 0, 0, 0, 0, 0, 0, 800, 0,
801, 810, 0, 0, 0, 883, 0, 0, 0, 884,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 883, 0, 0, 0, 884
};
const short int
Dhcp6Parser::yycheck_[] =
{
62, 65, 65, 65, 66, 67, 68, 69, 70, 71,
72, 67, 70, 70, 525, 65, 522, 65, 65, 66,
67, 68, 521, 5, 70, 7, 14, 9, 729, 7,
150, 76, 729, 10, 729, 729, 729, 729, 729, 38,
0, 11, 6, 16, 14, 15, 83, 84, 3, 7,
49, 6, 25, 31, 32, 33, 34, 56, 12, 13,
38, 31, 32, 33, 34, 35, 36, 37, 38, 3,
48, 3, 50, 38, 8, 3, 8, 7, 16, 57,
58, 59, 60, 61, 62, 7, 51, 52, 53, 54,
55, 56, 83, 84, 72, 73, 66, 67, 68, 69,
70, 39, 80, 41, 42, 150, 3, 45, 46, 47,
4, 8, 82, 150, 72, 85, 39, 38, 39, 63,
64, 65, 92, 96, 97, 98, 99, 7, 3, 7,
100, 101, 16, 8, 104, 119, 120, 21, 22, 23,
24, 25, 26, 27, 28, 29, 30, 3, 7, 126,
71, 150, 8, 3, 7, 39, 6, 858, 135, 136,
137, 858, 8, 858, 858, 858, 858, 858, 150, 151,
152, 153, 150, 150, 3, 76, 77, 150, 79, 8,
150, 3, 7, 38, 6, 150, 31, 32, 33, 34,
7, 36, 129, 38, 39, 132, 133, 134, 39, 40,
41, 42, 43, 44, 3, 128, 3, 130, 131, 8,
3, 8, 150, 58, 59, 70, 61, 62, 7, 74,
75, 76, 77, 78, 79, 70, 7, 150, 3, 150,
7, 737, 4, 8, 4, 80, 735, 122, 123, 124,
125, 102, 103, 305, 755, 105, 106, 107, 108, 109,
110, 111, 112, 113, 114, 115, 116, 117, 118, 86,
87, 88, 89, 90, 91, 3, 150, 3, 153, 3,
8, 3, 8, 335, 8, 3, 8, 335, 4, 4,
8, 3, 3, 347, 347, 347, 8, 8, 335, 351,
150, 3, 8, 3, 6, 150, 358, 347, 8, 347,
347, 4, 358, 4, 351, 150, 368, 295, 296, 150,
4, 358, 3, 3, 3, 377, 4, 8, 8, 8,
382, 368, 3, 3, 382, 382, 3, 8, 8, 3,
3, 8, 4, 6, 8, 4, 382, 4, 4, 401,
138, 139, 140, 141, 142, 143, 144, 145, 146, 147,
148, 149, 17, 18, 19, 20, 93, 94, 95, 468,
469, 470, 4, 3, 8, 4, 4, 3, 150, 4,
4, 8, 3, 151, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 151,
151, 151, 151, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 151, 4, 4, 4, 153, 4,
4, 4, 4, 4, 153, 4, 151, 4, 4, 4,
408, 409, 410, 4, 4, 4, 4, 151, 151, 4,
4, 151, 4, 4, 4, 4, 4, 4, 4, 4,
151, 4, 4, 4, 153, 153, 153, 4, 4, 153,
4, 513, 514, 4, 151, 513, 514, 4, 151, 151,
4, 4, 4, 525, 4, 527, 153, 153, 153, 4,
532, 7, 5, 7, 532, 7, 7, 7, 5, 5,
5, 5, 5, 5, 5, 532, 5, 7, 150, 7,
7, 7, 5, 8, 3, 5, 150, 5, 150, 150,
5, 489, 150, 7, 7, 150, 7, 150, 7, 150,
7, 7, 7, 4, 7, 7, 6, 150, 506, 7,
4, 81, 4, 4, 4, 4, 3, 3, 6, 3,
520, 6, 3, 6, 6, 150, 150, 150, 150, 6,
3, 6, 4, 4, 4, 121, 4, 4, 4, 4,
150, 4, 4, 3, 150, 6, 3, 6, 3, 5,
150, 4, 150, 127, 8, 4, 150, 150, 150, 4,
4, 4, 4, 150, 4, 4, 4, 150, 4, 4,
3, 8, 6, 4, 460, 4, 8, 4, 8, 7,
4, 150, 150, 5, 7, 4, 151, 4, 4, 151,
153, 4, 151, 153, 507, 151, 151, 305, 512, 514,
151, 329, 151, 151, 151, 717, 333, 732, 735, 741,
739, 385, 151, 151, 748, 722, 720, 731, 347, 858,
725, 723, 728, 377, 382, 726, 768, 151, 150, 150,
766, 771, 769, 150, 150, 351, 774, 772, 150, 532,
150, 759, 150, 358, 368, 717, 720, 720, 720, 717,
527, 723, 151, 150, 726, 729, 729, 729, 726, 726,
720, 729, 720, 720, 755, 703, 878, 739, 894, 729,
726, 729, 729, 153, 150, 906, 150, 923, 401, -1,
-1, 150, -1, 755, -1, -1, -1, 151, -1, -1,
-1, -1, -1, 151, 766, -1, -1, 769, 150, -1,
772, -1, -1, 769, -1, -1, -1, -1, -1, 766,
-1, -1, 769, -1, -1, 772, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, 858, 858, 858, -1, -1, -1,
858, -1, -1, -1, -1, -1, -1, -1, 858, -1,
858, 858, -1, -1, -1, 877, -1, -1, -1, 877,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, 894, -1, -1, -1, 894
};
const unsigned short int
Dhcp6Parser::yystos_[] =
{
0, 138, 139, 140, 141, 142, 143, 144, 145, 146,
147, 148, 149, 155, 156, 157, 158, 159, 160, 161,
162, 163, 164, 165, 166, 167, 0, 5, 7, 9,
150, 151, 152, 153, 168, 169, 170, 175, 7, 184,
7, 190, 7, 201, 7, 278, 7, 351, 7, 365,
7, 382, 7, 309, 7, 333, 7, 254, 7, 438,
176, 171, 185, 191, 202, 279, 352, 366, 383, 310,
334, 255, 439, 168, 177, 178, 150, 173, 174, 10,
126, 135, 136, 137, 150, 183, 186, 187, 188, 465,
467, 469, 471, 11, 14, 15, 31, 32, 33, 34,
35, 36, 37, 38, 66, 67, 68, 69, 70, 82,
85, 92, 100, 101, 104, 183, 192, 193, 194, 195,
196, 197, 198, 199, 208, 210, 234, 240, 246, 248,
262, 272, 295, 303, 327, 405, 415, 427, 428, 436,
12, 13, 203, 204, 205, 207, 7, 48, 50, 57,
58, 59, 60, 61, 62, 72, 73, 80, 183, 194,
195, 196, 197, 280, 281, 282, 284, 286, 288, 290,
293, 294, 327, 345, 359, 376, 401, 49, 56, 183,
327, 353, 354, 355, 357, 51, 52, 53, 54, 55,
183, 327, 357, 367, 368, 369, 371, 372, 374, 375,
70, 74, 75, 76, 77, 78, 79, 183, 327, 384,
385, 386, 387, 389, 391, 393, 395, 397, 399, 16,
39, 41, 42, 45, 46, 47, 183, 224, 311, 312,
313, 314, 315, 316, 317, 319, 321, 323, 324, 326,
40, 43, 44, 183, 224, 315, 321, 335, 336, 337,
338, 339, 341, 342, 343, 344, 83, 84, 183, 256,
257, 258, 260, 105, 106, 107, 108, 109, 110, 111,
112, 113, 114, 115, 116, 117, 118, 183, 440, 441,
442, 443, 445, 447, 448, 450, 451, 452, 455, 457,
458, 459, 460, 463, 6, 3, 4, 8, 3, 189,
472, 466, 468, 470, 4, 3, 8, 200, 209, 211,
4, 4, 4, 4, 4, 273, 304, 328, 296, 235,
247, 241, 406, 249, 263, 416, 4, 429, 437, 3,
8, 206, 4, 3, 8, 408, 346, 360, 283, 285,
287, 4, 4, 291, 289, 377, 402, 3, 8, 356,
358, 3, 8, 370, 4, 373, 4, 4, 3, 8,
400, 388, 390, 392, 394, 396, 398, 8, 3, 318,
225, 4, 322, 320, 325, 4, 8, 3, 340, 4,
4, 8, 3, 259, 261, 3, 8, 4, 444, 446,
4, 449, 4, 4, 453, 456, 4, 4, 4, 461,
464, 3, 8, 168, 168, 150, 4, 4, 4, 4,
4, 187, 4, 4, 4, 151, 151, 151, 151, 151,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 151, 4, 4, 193, 4, 153, 204, 71, 183,
224, 327, 409, 410, 411, 412, 413, 4, 4, 4,
4, 4, 151, 153, 4, 4, 4, 4, 281, 4,
4, 354, 4, 151, 4, 151, 151, 368, 4, 4,
4, 4, 4, 4, 4, 386, 4, 4, 151, 4,
4, 4, 153, 313, 4, 153, 153, 337, 4, 4,
257, 153, 4, 4, 151, 4, 151, 151, 4, 4,
153, 153, 153, 4, 4, 441, 4, 7, 7, 168,
168, 168, 7, 7, 7, 5, 5, 5, 5, 5,
5, 5, 5, 5, 7, 7, 7, 7, 5, 179,
414, 8, 3, 5, 5, 150, 150, 150, 63, 64,
65, 292, 150, 5, 7, 150, 170, 172, 150, 150,
179, 179, 179, 150, 150, 150, 150, 150, 150, 150,
150, 150, 150, 150, 168, 150, 150, 150, 119, 120,
454, 121, 122, 123, 124, 125, 153, 462, 150, 168,
192, 127, 473, 474, 475, 203, 16, 21, 22, 23,
24, 25, 26, 27, 28, 29, 30, 183, 212, 213,
214, 217, 219, 221, 223, 224, 226, 227, 228, 229,
230, 232, 212, 7, 274, 275, 276, 7, 305, 306,
307, 7, 329, 330, 331, 7, 297, 298, 299, 76,
150, 236, 237, 238, 239, 177, 77, 79, 238, 242,
243, 244, 245, 288, 407, 7, 250, 251, 252, 86,
87, 88, 89, 90, 91, 264, 265, 266, 267, 268,
269, 270, 271, 16, 96, 97, 98, 99, 183, 226,
417, 418, 419, 422, 423, 425, 426, 102, 103, 430,
431, 432, 434, 440, 180, 4, 411, 7, 347, 348,
349, 7, 361, 362, 363, 7, 378, 379, 380, 81,
403, 8, 476, 3, 8, 8, 215, 218, 220, 222,
4, 4, 4, 4, 4, 231, 233, 3, 8, 8,
277, 6, 3, 308, 6, 3, 332, 6, 3, 300,
6, 3, 3, 6, 6, 3, 6, 3, 6, 253,
6, 3, 4, 4, 4, 4, 4, 4, 3, 8,
420, 424, 4, 4, 4, 3, 8, 433, 435, 3,
8, 8, 150, 181, 182, 150, 350, 6, 3, 364,
6, 3, 381, 6, 3, 404, 8, 4, 474, 4,
4, 4, 4, 151, 153, 151, 153, 151, 4, 4,
213, 280, 276, 311, 307, 335, 331, 183, 194, 195,
196, 197, 224, 272, 284, 286, 290, 294, 301, 302,
327, 401, 405, 299, 237, 243, 288, 256, 252, 151,
151, 151, 151, 151, 151, 265, 4, 4, 151, 151,
151, 418, 4, 4, 431, 6, 3, 353, 349, 367,
363, 384, 380, 4, 5, 17, 18, 19, 20, 216,
150, 150, 150, 150, 150, 8, 8, 8, 3, 8,
8, 93, 94, 95, 421, 150, 150, 150, 150, 8,
8, 8, 150, 7, 477, 478, 302, 479, 3, 6,
128, 130, 131, 183, 224, 480, 481, 482, 483, 485,
478, 486, 4, 484, 3, 8, 4, 151, 4, 481,
5, 150, 7, 487, 488, 489, 3, 6, 129, 132,
133, 134, 490, 491, 492, 494, 495, 496, 488, 493,
4, 4, 4, 3, 8, 4, 153, 151, 151, 491,
150
};
const unsigned short int
Dhcp6Parser::yyr1_[] =
{
0, 154, 156, 155, 157, 155, 158, 155, 159, 155,
160, 155, 161, 155, 162, 155, 163, 155, 164, 155,
165, 155, 166, 155, 167, 155, 168, 168, 168, 168,
168, 168, 168, 169, 171, 170, 172, 173, 173, 174,
174, 176, 175, 177, 177, 178, 178, 180, 179, 181,
181, 182, 182, 183, 185, 184, 186, 186, 187, 187,
187, 187, 187, 187, 189, 188, 191, 190, 192, 192,
193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
193, 193, 193, 193, 193, 193, 193, 193, 193, 193,
193, 193, 193, 194, 195, 196, 197, 198, 200, 199,
202, 201, 203, 203, 204, 204, 206, 205, 207, 209,
208, 211, 210, 212, 212, 213, 213, 213, 213, 213,
213, 213, 213, 213, 213, 213, 213, 213, 215, 214,
216, 216, 216, 216, 218, 217, 220, 219, 222, 221,
223, 225, 224, 226, 227, 228, 229, 231, 230, 233,
232, 235, 234, 236, 236, 237, 237, 238, 239, 241,
240, 242, 242, 243, 243, 243, 244, 245, 247, 246,
249, 248, 250, 250, 251, 251, 253, 252, 255, 254,
256, 256, 256, 257, 257, 259, 258, 261, 260, 263,
262, 264, 264, 265, 265, 265, 265, 265, 265, 266,
267, 268, 269, 270, 271, 273, 272, 274, 274, 275,
275, 277, 276, 279, 278, 280, 280, 281, 281, 281,
281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
281, 281, 281, 281, 283, 282, 285, 284, 287, 286,
289, 288, 291, 290, 292, 292, 292, 293, 294, 296,
295, 297, 297, 298, 298, 300, 299, 301, 301, 302,
302, 302, 302, 302, 302, 302, 302, 302, 302, 302,
302, 302, 302, 304, 303, 305, 305, 306, 306, 308,
307, 310, 309, 311, 311, 312, 312, 313, 313, 313,
313, 313, 313, 313, 313, 314, 315, 316, 318, 317,
320, 319, 322, 321, 323, 325, 324, 326, 328, 327,
329, 329, 330, 330, 332, 331, 334, 333, 335, 335,
336, 336, 337, 337, 337, 337, 337, 337, 337, 338,
340, 339, 341, 342, 343, 344, 346, 345, 347, 347,
348, 348, 350, 349, 352, 351, 353, 353, 354, 354,
354, 354, 356, 355, 358, 357, 360, 359, 361, 361,
362, 362, 364, 363, 366, 365, 367, 367, 368, 368,
368, 368, 368, 368, 368, 368, 370, 369, 371, 373,
372, 374, 375, 377, 376, 378, 378, 379, 379, 381,
380, 383, 382, 384, 384, 385, 385, 386, 386, 386,
386, 386, 386, 386, 386, 386, 388, 387, 390, 389,
392, 391, 394, 393, 396, 395, 398, 397, 400, 399,
402, 401, 404, 403, 406, 405, 407, 407, 408, 288,
409, 409, 410, 410, 411, 411, 411, 411, 412, 414,
413, 416, 415, 417, 417, 418, 418, 418, 418, 418,
418, 418, 420, 419, 421, 421, 421, 422, 424, 423,
425, 426, 427, 429, 428, 430, 430, 431, 431, 433,
432, 435, 434, 437, 436, 439, 438, 440, 440, 441,
441, 441, 441, 441, 441, 441, 441, 441, 441, 441,
441, 441, 441, 441, 442, 444, 443, 446, 445, 447,
449, 448, 450, 451, 453, 452, 454, 454, 456, 455,
457, 458, 459, 461, 460, 462, 462, 462, 462, 462,
464, 463, 466, 465, 468, 467, 470, 469, 472, 471,
473, 473, 474, 476, 475, 477, 477, 479, 478, 480,
480, 481, 481, 481, 481, 481, 482, 484, 483, 486,
485, 487, 487, 489, 488, 490, 490, 491, 491, 491,
491, 493, 492, 494, 495, 496
};
const unsigned 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, 1, 1, 1, 1,
1, 1, 1, 1, 0, 4, 1, 0, 1, 3,
5, 0, 4, 0, 1, 1, 3, 0, 4, 0,
1, 1, 3, 2, 0, 4, 1, 3, 1, 1,
1, 1, 1, 1, 0, 6, 0, 4, 1, 3,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 3, 3, 3, 3, 3, 0, 6,
0, 4, 1, 3, 1, 1, 0, 4, 3, 0,
6, 0, 6, 1, 3, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 0, 4,
1, 1, 1, 1, 0, 4, 0, 4, 0, 4,
3, 0, 4, 3, 3, 3, 3, 0, 4, 0,
4, 0, 6, 1, 3, 1, 1, 1, 1, 0,
6, 1, 3, 1, 1, 1, 1, 1, 0, 6,
0, 6, 0, 1, 1, 3, 0, 4, 0, 4,
1, 3, 1, 1, 1, 0, 4, 0, 4, 0,
6, 1, 3, 1, 1, 1, 1, 1, 1, 3,
3, 3, 3, 3, 3, 0, 6, 0, 1, 1,
3, 0, 4, 0, 4, 1, 3, 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, 1, 1, 1, 3, 3, 0,
6, 0, 1, 1, 3, 0, 4, 1, 3, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 0, 6, 0, 1, 1, 3, 0,
4, 0, 4, 0, 1, 1, 3, 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, 0, 4, 0, 4, 0, 1,
1, 3, 1, 1, 1, 1, 1, 1, 1, 1,
0, 4, 1, 1, 3, 3, 0, 6, 0, 1,
1, 3, 0, 4, 0, 4, 1, 3, 1, 1,
1, 1, 0, 4, 0, 4, 0, 6, 0, 1,
1, 3, 0, 4, 0, 4, 1, 3, 1, 1,
1, 1, 1, 1, 1, 1, 0, 4, 3, 0,
4, 3, 3, 0, 6, 0, 1, 1, 3, 0,
4, 0, 4, 0, 1, 1, 3, 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, 0, 4, 0, 6, 1, 3, 0, 4,
0, 1, 1, 3, 1, 1, 1, 1, 1, 0,
4, 0, 6, 1, 3, 1, 1, 1, 1, 1,
1, 1, 0, 4, 1, 1, 1, 3, 0, 4,
3, 3, 3, 0, 6, 1, 3, 1, 1, 0,
4, 0, 4, 0, 6, 0, 4, 1, 3, 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, 3, 0, 4, 1, 1, 1, 1, 1,
0, 4, 0, 4, 0, 4, 0, 4, 0, 6,
1, 3, 1, 0, 6, 1, 3, 0, 4, 1,
3, 1, 1, 1, 1, 1, 3, 0, 4, 0,
6, 1, 3, 0, 4, 1, 3, 1, 1, 1,
1, 0, 4, 3, 3, 3
};
// 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", "$undefined", "\",\"", "\":\"", "\"[\"",
"\"]\"", "\"{\"", "\"}\"", "\"null\"", "\"Dhcp6\"",
"\"interfaces-config\"", "\"interfaces\"", "\"re-detect\"",
"\"lease-database\"", "\"hosts-database\"", "\"type\"", "\"memfile\"",
"\"mysql\"", "\"postgresql\"", "\"cql\"", "\"user\"", "\"password\"",
"\"host\"", "\"port\"", "\"persist\"", "\"lfc-interval\"",
"\"readonly\"", "\"connect-timeout\"", "\"contact-points\"",
"\"keyspace\"", "\"preferred-lifetime\"", "\"valid-lifetime\"",
"\"renew-timer\"", "\"rebind-timer\"", "\"decline-probation-period\"",
"\"subnet6\"", "\"option-def\"", "\"option-data\"", "\"name\"",
"\"data\"", "\"code\"", "\"space\"", "\"csv-format\"", "\"always-send\"",
"\"record-types\"", "\"encapsulate\"", "\"array\"", "\"pools\"",
"\"pool\"", "\"pd-pools\"", "\"prefix\"", "\"prefix-len\"",
"\"excluded-prefix\"", "\"excluded-prefix-len\"", "\"delegated-len\"",
"\"user-context\"", "\"subnet\"", "\"interface\"", "\"interface-id\"",
"\"id\"", "\"rapid-commit\"", "\"reservation-mode\"", "\"disabled\"",
"\"out-of-pool\"", "\"all\"", "\"shared-networks\"", "\"mac-sources\"",
"\"relay-supplied-options\"", "\"host-reservation-identifiers\"",
"\"client-classes\"", "\"test\"", "\"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\"", "\"control-socket\"", "\"socket-type\"",
"\"socket-name\"", "\"dhcp-ddns\"", "\"enable-updates\"",
"\"qualifying-suffix\"", "\"server-ip\"", "\"server-port\"",
"\"sender-ip\"", "\"sender-port\"", "\"max-queue-size\"",
"\"ncr-protocol\"", "\"ncr-format\"", "\"always-include-fqdn\"",
"\"override-no-update\"", "\"override-client-update\"",
"\"replace-client-name\"", "\"generated-prefix\"", "\"UDP\"", "\"TCP\"",
"\"JSON\"", "\"when-present\"", "\"never\"", "\"always\"",
"\"when-not-present\"", "\"Logging\"", "\"loggers\"",
"\"output_options\"", "\"output\"", "\"debuglevel\"", "\"severity\"",
"\"flush\"", "\"maxsize\"", "\"maxver\"", "\"Dhcp4\"", "\"DhcpDdns\"",
"\"Control-agent\"", "TOPLEVEL_JSON", "TOPLEVEL_DHCP6", "SUB_DHCP6",
"SUB_INTERFACES6", "SUB_SUBNET6", "SUB_POOL6", "SUB_PD_POOL",
"SUB_RESERVATION", "SUB_OPTION_DEF", "SUB_OPTION_DATA",
"SUB_HOOKS_LIBRARY", "SUB_DHCP_DDNS", "\"constant string\"",
"\"integer\"", "\"floating point\"", "\"boolean\"", "$accept", "start",
"$@1", "$@2", "$@3", "$@4", "$@5", "$@6", "$@7", "$@8", "$@9", "$@10",
"$@11", "$@12", "value", "sub_json", "map2", "$@13", "map_value",
"map_content", "not_empty_map", "list_generic", "$@14", "list_content",
"not_empty_list", "list_strings", "$@15", "list_strings_content",
"not_empty_list_strings", "unknown_map_entry", "syntax_map", "$@16",
"global_objects", "global_object", "dhcp6_object", "$@17", "sub_dhcp6",
"$@18", "global_params", "global_param", "preferred_lifetime",
"valid_lifetime", "renew_timer", "rebind_timer",
"decline_probation_period", "interfaces_config", "$@19",
"sub_interfaces6", "$@20", "interfaces_config_params",
"interfaces_config_param", "interfaces_list", "$@21", "re_detect",
"lease_database", "$@22", "hosts_database", "$@23",
"database_map_params", "database_map_param", "database_type", "$@24",
"db_type", "user", "$@25", "password", "$@26", "host", "$@27", "port",
"name", "$@28", "persist", "lfc_interval", "readonly", "connect_timeout",
"contact_points", "$@29", "keyspace", "$@30", "mac_sources", "$@31",
"mac_sources_list", "mac_sources_value", "duid_id", "string_id",
"host_reservation_identifiers", "$@32",
"host_reservation_identifiers_list", "host_reservation_identifier",
"hw_address_id", "flex_id", "relay_supplied_options", "$@33",
"hooks_libraries", "$@34", "hooks_libraries_list",
"not_empty_hooks_libraries_list", "hooks_library", "$@35",
"sub_hooks_library", "$@36", "hooks_params", "hooks_param", "library",
"$@37", "parameters", "$@38", "expired_leases_processing", "$@39",
"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", "$@40",
"subnet6_list_content", "not_empty_subnet6_list", "subnet6", "$@41",
"sub_subnet6", "$@42", "subnet6_params", "subnet6_param", "subnet",
"$@43", "interface", "$@44", "interface_id", "$@45", "client_class",
"$@46", "reservation_mode", "$@47", "hr_mode", "id", "rapid_commit",
"shared_networks", "$@48", "shared_networks_content",
"shared_networks_list", "shared_network", "$@49",
"shared_network_params", "shared_network_param", "option_def_list",
"$@50", "option_def_list_content", "not_empty_option_def_list",
"option_def_entry", "$@51", "sub_option_def", "$@52",
"option_def_params", "not_empty_option_def_params", "option_def_param",
"option_def_name", "code", "option_def_code", "option_def_type", "$@53",
"option_def_record_types", "$@54", "space", "$@55", "option_def_space",
"option_def_encapsulate", "$@56", "option_def_array", "option_data_list",
"$@57", "option_data_list_content", "not_empty_option_data_list",
"option_data_entry", "$@58", "sub_option_data", "$@59",
"option_data_params", "not_empty_option_data_params",
"option_data_param", "option_data_name", "option_data_data", "$@60",
"option_data_code", "option_data_space", "option_data_csv_format",
"option_data_always_send", "pools_list", "$@61", "pools_list_content",
"not_empty_pools_list", "pool_list_entry", "$@62", "sub_pool6", "$@63",
"pool_params", "pool_param", "pool_entry", "$@64", "user_context",
"$@65", "pd_pools_list", "$@66", "pd_pools_list_content",
"not_empty_pd_pools_list", "pd_pool_entry", "$@67", "sub_pd_pool",
"$@68", "pd_pool_params", "pd_pool_param", "pd_prefix", "$@69",
"pd_prefix_len", "excluded_prefix", "$@70", "excluded_prefix_len",
"pd_delegated_len", "reservations", "$@71", "reservations_list",
"not_empty_reservations_list", "reservation", "$@72", "sub_reservation",
"$@73", "reservation_params", "not_empty_reservation_params",
"reservation_param", "ip_addresses", "$@74", "prefixes", "$@75", "duid",
"$@76", "hw_address", "$@77", "hostname", "$@78", "flex_id_value",
"$@79", "reservation_client_classes", "$@80", "relay", "$@81",
"relay_map", "$@82", "client_classes", "$@83", "client_classes_list",
"$@84", "client_class_params", "not_empty_client_class_params",
"client_class_param", "client_class_name", "client_class_test", "$@85",
"server_id", "$@86", "server_id_params", "server_id_param",
"server_id_type", "$@87", "duid_type", "htype", "identifier", "$@88",
"time", "enterprise_id", "dhcp4o6_port", "control_socket", "$@89",
"control_socket_params", "control_socket_param", "socket_type", "$@90",
"socket_name", "$@91", "dhcp_ddns", "$@92", "sub_dhcp_ddns", "$@93",
"dhcp_ddns_params", "dhcp_ddns_param", "enable_updates",
"qualifying_suffix", "$@94", "server_ip", "$@95", "server_port",
"sender_ip", "$@96", "sender_port", "max_queue_size", "ncr_protocol",
"$@97", "ncr_protocol_value", "ncr_format", "$@98",
"always_include_fqdn", "override_no_update", "override_client_update",
"replace_client_name", "$@99", "replace_client_name_value",
"generated_prefix", "$@100", "dhcp4_json_object", "$@101",
"dhcpddns_json_object", "$@102", "control_agent_json_object", "$@103",
"logging_object", "$@104", "logging_params", "logging_param", "loggers",
"$@105", "loggers_entries", "logger_entry", "$@106", "logger_params",
"logger_param", "debuglevel", "severity", "$@107", "output_options_list",
"$@108", "output_options_list_content", "output_entry", "$@109",
"output_params_list", "output_params", "output", "$@110", "flush",
"maxsize", "maxver", YY_NULLPTR
};
#if PARSER6_DEBUG
const unsigned short int
Dhcp6Parser::yyrline_[] =
{
0, 235, 235, 235, 236, 236, 237, 237, 238, 238,
239, 239, 240, 240, 241, 241, 242, 242, 243, 243,
244, 244, 245, 245, 246, 246, 254, 255, 256, 257,
258, 259, 260, 263, 268, 268, 279, 282, 283, 286,
290, 297, 297, 304, 305, 308, 312, 319, 319, 326,
327, 330, 334, 345, 355, 355, 367, 368, 372, 373,
374, 375, 376, 377, 380, 380, 397, 397, 405, 406,
411, 412, 413, 414, 415, 416, 417, 418, 419, 420,
421, 422, 423, 424, 425, 426, 427, 428, 429, 430,
431, 432, 433, 436, 441, 446, 451, 456, 461, 461,
471, 471, 479, 480, 483, 484, 487, 487, 497, 503,
503, 513, 513, 523, 524, 527, 528, 529, 530, 531,
532, 533, 534, 535, 536, 537, 538, 539, 542, 542,
549, 550, 551, 552, 555, 555, 563, 563, 571, 571,
579, 584, 584, 592, 597, 602, 607, 612, 612, 620,
620, 629, 629, 639, 640, 643, 644, 647, 652, 657,
657, 667, 668, 671, 672, 673, 676, 681, 688, 688,
698, 698, 708, 709, 712, 713, 716, 716, 724, 724,
732, 733, 734, 737, 738, 741, 741, 749, 749, 757,
757, 767, 768, 771, 772, 773, 774, 775, 776, 779,
784, 789, 794, 799, 804, 812, 812, 825, 826, 829,
830, 837, 837, 860, 860, 869, 870, 874, 875, 876,
877, 878, 879, 880, 881, 882, 883, 884, 885, 886,
887, 888, 889, 890, 893, 893, 901, 901, 909, 909,
917, 917, 925, 925, 932, 933, 934, 937, 942, 950,
950, 961, 962, 966, 967, 970, 970, 978, 979, 982,
983, 984, 985, 986, 987, 988, 989, 990, 991, 992,
993, 994, 995, 1002, 1002, 1014, 1015, 1018, 1019, 1024,
1024, 1035, 1035, 1045, 1046, 1049, 1050, 1053, 1054, 1055,
1056, 1057, 1058, 1059, 1060, 1063, 1065, 1070, 1072, 1072,
1080, 1080, 1088, 1088, 1096, 1098, 1098, 1106, 1115, 1115,
1127, 1128, 1133, 1134, 1139, 1139, 1150, 1150, 1161, 1162,
1167, 1168, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1182,
1184, 1184, 1192, 1194, 1196, 1201, 1209, 1209, 1221, 1222,
1225, 1226, 1229, 1229, 1237, 1237, 1245, 1246, 1249, 1250,
1251, 1252, 1255, 1255, 1263, 1263, 1273, 1273, 1285, 1286,
1289, 1290, 1293, 1293, 1301, 1301, 1309, 1310, 1313, 1314,
1315, 1316, 1317, 1318, 1319, 1320, 1323, 1323, 1331, 1336,
1336, 1344, 1349, 1357, 1357, 1367, 1368, 1371, 1372, 1375,
1375, 1383, 1383, 1391, 1392, 1395, 1396, 1400, 1401, 1402,
1403, 1404, 1405, 1406, 1407, 1408, 1411, 1411, 1421, 1421,
1431, 1431, 1439, 1439, 1447, 1447, 1455, 1455, 1463, 1463,
1476, 1476, 1486, 1486, 1497, 1497, 1507, 1508, 1511, 1511,
1519, 1520, 1523, 1524, 1527, 1528, 1529, 1530, 1533, 1535,
1535, 1546, 1546, 1556, 1557, 1560, 1561, 1562, 1563, 1564,
1565, 1566, 1569, 1569, 1576, 1577, 1578, 1581, 1586, 1586,
1594, 1599, 1606, 1613, 1613, 1623, 1624, 1627, 1628, 1631,
1631, 1639, 1639, 1649, 1649, 1659, 1659, 1667, 1668, 1671,
1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681,
1682, 1683, 1684, 1685, 1688, 1693, 1693, 1701, 1701, 1709,
1714, 1714, 1722, 1727, 1732, 1732, 1740, 1741, 1744, 1744,
1752, 1757, 1762, 1767, 1767, 1775, 1778, 1781, 1784, 1787,
1793, 1793, 1803, 1803, 1810, 1810, 1817, 1817, 1830, 1830,
1843, 1844, 1848, 1852, 1852, 1864, 1865, 1869, 1869, 1877,
1878, 1881, 1882, 1883, 1884, 1885, 1888, 1893, 1893, 1901,
1901, 1911, 1912, 1915, 1915, 1923, 1924, 1927, 1928, 1929,
1930, 1933, 1933, 1941, 1946, 1951
};
// Print the state stack on the debug stream.
void
Dhcp6Parser::yystack_print_ ()
{
*yycdebug_ << "Stack now";
for (stack_type::const_iterator
i = yystack_.begin (),
i_end = yystack_.end ();
i != i_end; ++i)
*yycdebug_ << ' ' << i->state;
*yycdebug_ << std::endl;
}
// Report on the debug stream that the rule \a yyrule is going to be reduced.
void
Dhcp6Parser::yy_reduce_print_ (int yyrule)
{
unsigned 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 << "):" << std::endl;
// 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" // lalr1.cc:1167
} } // isc::dhcp
#line 4391 "dhcp6_parser.cc" // lalr1.cc:1167
#line 1956 "dhcp6_parser.yy" // lalr1.cc:1168
void
isc::dhcp::Dhcp6Parser::error(const location_type& loc,
const std::string& what)
{
ctx.error(loc, what);
}