mirror of
https://gitlab.isc.org/isc-projects/kea
synced 2025-09-05 08:25:16 +00:00
6142 lines
237 KiB
C++
6142 lines
237 KiB
C++
// A Bison parser, made by GNU Bison 3.8.2.
|
|
|
|
// Skeleton implementation for Bison LALR(1) parsers in C++
|
|
|
|
// Copyright (C) 2002-2015, 2018-2021 Free Software Foundation, Inc.
|
|
|
|
// This program is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
// As a special exception, you may create a larger work that contains
|
|
// part or all of the Bison parser skeleton and distribute that work
|
|
// under terms of your choice, so long as that work isn't itself a
|
|
// parser generator using the skeleton or a modified version thereof
|
|
// as a parser skeleton. Alternatively, if you modify or redistribute
|
|
// the parser skeleton itself, you may (at your option) remove this
|
|
// special exception, which will cause the skeleton and the resulting
|
|
// Bison output files to be licensed under the GNU General Public
|
|
// License without this special exception.
|
|
|
|
// This special exception was added by the Free Software Foundation in
|
|
// version 2.2 of Bison.
|
|
|
|
// DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
|
|
// especially those whose name start with YY_ or yy_. They are
|
|
// private implementation details that can be changed or removed.
|
|
|
|
|
|
// Take the name prefix into account.
|
|
#define yylex parser4_lex
|
|
|
|
|
|
|
|
#include "dhcp4_parser.h"
|
|
|
|
|
|
// Unqualified %code blocks.
|
|
#line 34 "dhcp4_parser.yy"
|
|
|
|
#include <dhcp4/parser_context.h>
|
|
|
|
#line 52 "dhcp4_parser.cc"
|
|
|
|
|
|
#ifndef YY_
|
|
# if defined YYENABLE_NLS && YYENABLE_NLS
|
|
# if ENABLE_NLS
|
|
# include <libintl.h> // FIXME: INFRINGES ON USER NAME SPACE.
|
|
# define YY_(msgid) dgettext ("bison-runtime", msgid)
|
|
# endif
|
|
# endif
|
|
# ifndef YY_
|
|
# define YY_(msgid) msgid
|
|
# endif
|
|
#endif
|
|
|
|
|
|
// Whether we are compiled with exception support.
|
|
#ifndef YY_EXCEPTIONS
|
|
# if defined __GNUC__ && !defined __EXCEPTIONS
|
|
# define YY_EXCEPTIONS 0
|
|
# else
|
|
# define YY_EXCEPTIONS 1
|
|
# endif
|
|
#endif
|
|
|
|
#define YYRHSLOC(Rhs, K) ((Rhs)[K].location)
|
|
/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
|
|
If N is 0, then set CURRENT to the empty location which ends
|
|
the previous symbol: RHS[0] (always defined). */
|
|
|
|
# ifndef YYLLOC_DEFAULT
|
|
# define YYLLOC_DEFAULT(Current, Rhs, N) \
|
|
do \
|
|
if (N) \
|
|
{ \
|
|
(Current).begin = YYRHSLOC (Rhs, 1).begin; \
|
|
(Current).end = YYRHSLOC (Rhs, N).end; \
|
|
} \
|
|
else \
|
|
{ \
|
|
(Current).begin = (Current).end = YYRHSLOC (Rhs, 0).end; \
|
|
} \
|
|
while (false)
|
|
# endif
|
|
|
|
|
|
// Enable debugging if requested.
|
|
#if PARSER4_DEBUG
|
|
|
|
// A pseudo ostream that takes yydebug_ into account.
|
|
# define YYCDEBUG if (yydebug_) (*yycdebug_)
|
|
|
|
# define YY_SYMBOL_PRINT(Title, Symbol) \
|
|
do { \
|
|
if (yydebug_) \
|
|
{ \
|
|
*yycdebug_ << Title << ' '; \
|
|
yy_print_ (*yycdebug_, Symbol); \
|
|
*yycdebug_ << '\n'; \
|
|
} \
|
|
} while (false)
|
|
|
|
# define YY_REDUCE_PRINT(Rule) \
|
|
do { \
|
|
if (yydebug_) \
|
|
yy_reduce_print_ (Rule); \
|
|
} while (false)
|
|
|
|
# define YY_STACK_PRINT() \
|
|
do { \
|
|
if (yydebug_) \
|
|
yy_stack_print_ (); \
|
|
} while (false)
|
|
|
|
#else // !PARSER4_DEBUG
|
|
|
|
# define YYCDEBUG if (false) std::cerr
|
|
# define YY_SYMBOL_PRINT(Title, Symbol) YY_USE (Symbol)
|
|
# define YY_REDUCE_PRINT(Rule) static_cast<void> (0)
|
|
# define YY_STACK_PRINT() static_cast<void> (0)
|
|
|
|
#endif // !PARSER4_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 "dhcp4_parser.yy"
|
|
namespace isc { namespace dhcp {
|
|
#line 145 "dhcp4_parser.cc"
|
|
|
|
/// Build a parser object.
|
|
Dhcp4Parser::Dhcp4Parser (isc::dhcp::Parser4Context& ctx_yyarg)
|
|
#if PARSER4_DEBUG
|
|
: yydebug_ (false),
|
|
yycdebug_ (&std::cerr),
|
|
#else
|
|
:
|
|
#endif
|
|
ctx (ctx_yyarg)
|
|
{}
|
|
|
|
Dhcp4Parser::~Dhcp4Parser ()
|
|
{}
|
|
|
|
Dhcp4Parser::syntax_error::~syntax_error () YY_NOEXCEPT YY_NOTHROW
|
|
{}
|
|
|
|
/*---------.
|
|
| symbol. |
|
|
`---------*/
|
|
|
|
|
|
|
|
// by_state.
|
|
Dhcp4Parser::by_state::by_state () YY_NOEXCEPT
|
|
: state (empty_state)
|
|
{}
|
|
|
|
Dhcp4Parser::by_state::by_state (const by_state& that) YY_NOEXCEPT
|
|
: state (that.state)
|
|
{}
|
|
|
|
void
|
|
Dhcp4Parser::by_state::clear () YY_NOEXCEPT
|
|
{
|
|
state = empty_state;
|
|
}
|
|
|
|
void
|
|
Dhcp4Parser::by_state::move (by_state& that)
|
|
{
|
|
state = that.state;
|
|
that.clear ();
|
|
}
|
|
|
|
Dhcp4Parser::by_state::by_state (state_type s) YY_NOEXCEPT
|
|
: state (s)
|
|
{}
|
|
|
|
Dhcp4Parser::symbol_kind_type
|
|
Dhcp4Parser::by_state::kind () const YY_NOEXCEPT
|
|
{
|
|
if (state == empty_state)
|
|
return symbol_kind::S_YYEMPTY;
|
|
else
|
|
return YY_CAST (symbol_kind_type, yystos_[+state]);
|
|
}
|
|
|
|
Dhcp4Parser::stack_symbol_type::stack_symbol_type ()
|
|
{}
|
|
|
|
Dhcp4Parser::stack_symbol_type::stack_symbol_type (YY_RVREF (stack_symbol_type) that)
|
|
: super_type (YY_MOVE (that.state), YY_MOVE (that.location))
|
|
{
|
|
switch (that.kind ())
|
|
{
|
|
case symbol_kind::S_value: // value
|
|
case symbol_kind::S_map_value: // map_value
|
|
case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value
|
|
case symbol_kind::S_socket_type: // socket_type
|
|
case symbol_kind::S_outbound_interface_value: // outbound_interface_value
|
|
case symbol_kind::S_db_type: // db_type
|
|
case symbol_kind::S_on_fail_mode: // on_fail_mode
|
|
case symbol_kind::S_hr_mode: // hr_mode
|
|
case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value
|
|
value.YY_MOVE_OR_COPY< ElementPtr > (YY_MOVE (that.value));
|
|
break;
|
|
|
|
case symbol_kind::S_BOOLEAN: // "boolean"
|
|
value.YY_MOVE_OR_COPY< bool > (YY_MOVE (that.value));
|
|
break;
|
|
|
|
case symbol_kind::S_FLOAT: // "floating point"
|
|
value.YY_MOVE_OR_COPY< double > (YY_MOVE (that.value));
|
|
break;
|
|
|
|
case symbol_kind::S_INTEGER: // "integer"
|
|
value.YY_MOVE_OR_COPY< int64_t > (YY_MOVE (that.value));
|
|
break;
|
|
|
|
case symbol_kind::S_STRING: // "constant string"
|
|
value.YY_MOVE_OR_COPY< std::string > (YY_MOVE (that.value));
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
#if 201103L <= YY_CPLUSPLUS
|
|
// that is emptied.
|
|
that.state = empty_state;
|
|
#endif
|
|
}
|
|
|
|
Dhcp4Parser::stack_symbol_type::stack_symbol_type (state_type s, YY_MOVE_REF (symbol_type) that)
|
|
: super_type (s, YY_MOVE (that.location))
|
|
{
|
|
switch (that.kind ())
|
|
{
|
|
case symbol_kind::S_value: // value
|
|
case symbol_kind::S_map_value: // map_value
|
|
case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value
|
|
case symbol_kind::S_socket_type: // socket_type
|
|
case symbol_kind::S_outbound_interface_value: // outbound_interface_value
|
|
case symbol_kind::S_db_type: // db_type
|
|
case symbol_kind::S_on_fail_mode: // on_fail_mode
|
|
case symbol_kind::S_hr_mode: // hr_mode
|
|
case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value
|
|
value.move< ElementPtr > (YY_MOVE (that.value));
|
|
break;
|
|
|
|
case symbol_kind::S_BOOLEAN: // "boolean"
|
|
value.move< bool > (YY_MOVE (that.value));
|
|
break;
|
|
|
|
case symbol_kind::S_FLOAT: // "floating point"
|
|
value.move< double > (YY_MOVE (that.value));
|
|
break;
|
|
|
|
case symbol_kind::S_INTEGER: // "integer"
|
|
value.move< int64_t > (YY_MOVE (that.value));
|
|
break;
|
|
|
|
case symbol_kind::S_STRING: // "constant string"
|
|
value.move< std::string > (YY_MOVE (that.value));
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
// that is emptied.
|
|
that.kind_ = symbol_kind::S_YYEMPTY;
|
|
}
|
|
|
|
#if YY_CPLUSPLUS < 201103L
|
|
Dhcp4Parser::stack_symbol_type&
|
|
Dhcp4Parser::stack_symbol_type::operator= (const stack_symbol_type& that)
|
|
{
|
|
state = that.state;
|
|
switch (that.kind ())
|
|
{
|
|
case symbol_kind::S_value: // value
|
|
case symbol_kind::S_map_value: // map_value
|
|
case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value
|
|
case symbol_kind::S_socket_type: // socket_type
|
|
case symbol_kind::S_outbound_interface_value: // outbound_interface_value
|
|
case symbol_kind::S_db_type: // db_type
|
|
case symbol_kind::S_on_fail_mode: // on_fail_mode
|
|
case symbol_kind::S_hr_mode: // hr_mode
|
|
case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value
|
|
value.copy< ElementPtr > (that.value);
|
|
break;
|
|
|
|
case symbol_kind::S_BOOLEAN: // "boolean"
|
|
value.copy< bool > (that.value);
|
|
break;
|
|
|
|
case symbol_kind::S_FLOAT: // "floating point"
|
|
value.copy< double > (that.value);
|
|
break;
|
|
|
|
case symbol_kind::S_INTEGER: // "integer"
|
|
value.copy< int64_t > (that.value);
|
|
break;
|
|
|
|
case symbol_kind::S_STRING: // "constant string"
|
|
value.copy< std::string > (that.value);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
location = that.location;
|
|
return *this;
|
|
}
|
|
|
|
Dhcp4Parser::stack_symbol_type&
|
|
Dhcp4Parser::stack_symbol_type::operator= (stack_symbol_type& that)
|
|
{
|
|
state = that.state;
|
|
switch (that.kind ())
|
|
{
|
|
case symbol_kind::S_value: // value
|
|
case symbol_kind::S_map_value: // map_value
|
|
case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value
|
|
case symbol_kind::S_socket_type: // socket_type
|
|
case symbol_kind::S_outbound_interface_value: // outbound_interface_value
|
|
case symbol_kind::S_db_type: // db_type
|
|
case symbol_kind::S_on_fail_mode: // on_fail_mode
|
|
case symbol_kind::S_hr_mode: // hr_mode
|
|
case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value
|
|
value.move< ElementPtr > (that.value);
|
|
break;
|
|
|
|
case symbol_kind::S_BOOLEAN: // "boolean"
|
|
value.move< bool > (that.value);
|
|
break;
|
|
|
|
case symbol_kind::S_FLOAT: // "floating point"
|
|
value.move< double > (that.value);
|
|
break;
|
|
|
|
case symbol_kind::S_INTEGER: // "integer"
|
|
value.move< int64_t > (that.value);
|
|
break;
|
|
|
|
case symbol_kind::S_STRING: // "constant string"
|
|
value.move< std::string > (that.value);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
location = that.location;
|
|
// that is emptied.
|
|
that.state = empty_state;
|
|
return *this;
|
|
}
|
|
#endif
|
|
|
|
template <typename Base>
|
|
void
|
|
Dhcp4Parser::yy_destroy_ (const char* yymsg, basic_symbol<Base>& yysym) const
|
|
{
|
|
if (yymsg)
|
|
YY_SYMBOL_PRINT (yymsg, yysym);
|
|
}
|
|
|
|
#if PARSER4_DEBUG
|
|
template <typename Base>
|
|
void
|
|
Dhcp4Parser::yy_print_ (std::ostream& yyo, const basic_symbol<Base>& yysym) const
|
|
{
|
|
std::ostream& yyoutput = yyo;
|
|
YY_USE (yyoutput);
|
|
if (yysym.empty ())
|
|
yyo << "empty symbol";
|
|
else
|
|
{
|
|
symbol_kind_type yykind = yysym.kind ();
|
|
yyo << (yykind < YYNTOKENS ? "token" : "nterm")
|
|
<< ' ' << yysym.name () << " ("
|
|
<< yysym.location << ": ";
|
|
switch (yykind)
|
|
{
|
|
case symbol_kind::S_STRING: // "constant string"
|
|
#line 283 "dhcp4_parser.yy"
|
|
{ yyoutput << yysym.value.template as < std::string > (); }
|
|
#line 408 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case symbol_kind::S_INTEGER: // "integer"
|
|
#line 283 "dhcp4_parser.yy"
|
|
{ yyoutput << yysym.value.template as < int64_t > (); }
|
|
#line 414 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case symbol_kind::S_FLOAT: // "floating point"
|
|
#line 283 "dhcp4_parser.yy"
|
|
{ yyoutput << yysym.value.template as < double > (); }
|
|
#line 420 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case symbol_kind::S_BOOLEAN: // "boolean"
|
|
#line 283 "dhcp4_parser.yy"
|
|
{ yyoutput << yysym.value.template as < bool > (); }
|
|
#line 426 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case symbol_kind::S_value: // value
|
|
#line 283 "dhcp4_parser.yy"
|
|
{ yyoutput << yysym.value.template as < ElementPtr > (); }
|
|
#line 432 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case symbol_kind::S_map_value: // map_value
|
|
#line 283 "dhcp4_parser.yy"
|
|
{ yyoutput << yysym.value.template as < ElementPtr > (); }
|
|
#line 438 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value
|
|
#line 283 "dhcp4_parser.yy"
|
|
{ yyoutput << yysym.value.template as < ElementPtr > (); }
|
|
#line 444 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case symbol_kind::S_socket_type: // socket_type
|
|
#line 283 "dhcp4_parser.yy"
|
|
{ yyoutput << yysym.value.template as < ElementPtr > (); }
|
|
#line 450 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case symbol_kind::S_outbound_interface_value: // outbound_interface_value
|
|
#line 283 "dhcp4_parser.yy"
|
|
{ yyoutput << yysym.value.template as < ElementPtr > (); }
|
|
#line 456 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case symbol_kind::S_db_type: // db_type
|
|
#line 283 "dhcp4_parser.yy"
|
|
{ yyoutput << yysym.value.template as < ElementPtr > (); }
|
|
#line 462 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case symbol_kind::S_on_fail_mode: // on_fail_mode
|
|
#line 283 "dhcp4_parser.yy"
|
|
{ yyoutput << yysym.value.template as < ElementPtr > (); }
|
|
#line 468 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case symbol_kind::S_hr_mode: // hr_mode
|
|
#line 283 "dhcp4_parser.yy"
|
|
{ yyoutput << yysym.value.template as < ElementPtr > (); }
|
|
#line 474 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value
|
|
#line 283 "dhcp4_parser.yy"
|
|
{ yyoutput << yysym.value.template as < ElementPtr > (); }
|
|
#line 480 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
yyo << ')';
|
|
}
|
|
}
|
|
#endif
|
|
|
|
void
|
|
Dhcp4Parser::yypush_ (const char* m, YY_MOVE_REF (stack_symbol_type) sym)
|
|
{
|
|
if (m)
|
|
YY_SYMBOL_PRINT (m, sym);
|
|
yystack_.push (YY_MOVE (sym));
|
|
}
|
|
|
|
void
|
|
Dhcp4Parser::yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym)
|
|
{
|
|
#if 201103L <= YY_CPLUSPLUS
|
|
yypush_ (m, stack_symbol_type (s, std::move (sym)));
|
|
#else
|
|
stack_symbol_type ss (s, sym);
|
|
yypush_ (m, ss);
|
|
#endif
|
|
}
|
|
|
|
void
|
|
Dhcp4Parser::yypop_ (int n) YY_NOEXCEPT
|
|
{
|
|
yystack_.pop (n);
|
|
}
|
|
|
|
#if PARSER4_DEBUG
|
|
std::ostream&
|
|
Dhcp4Parser::debug_stream () const
|
|
{
|
|
return *yycdebug_;
|
|
}
|
|
|
|
void
|
|
Dhcp4Parser::set_debug_stream (std::ostream& o)
|
|
{
|
|
yycdebug_ = &o;
|
|
}
|
|
|
|
|
|
Dhcp4Parser::debug_level_type
|
|
Dhcp4Parser::debug_level () const
|
|
{
|
|
return yydebug_;
|
|
}
|
|
|
|
void
|
|
Dhcp4Parser::set_debug_level (debug_level_type l)
|
|
{
|
|
yydebug_ = l;
|
|
}
|
|
#endif // PARSER4_DEBUG
|
|
|
|
Dhcp4Parser::state_type
|
|
Dhcp4Parser::yy_lr_goto_state_ (state_type yystate, int yysym)
|
|
{
|
|
int yyr = yypgoto_[yysym - YYNTOKENS] + yystate;
|
|
if (0 <= yyr && yyr <= yylast_ && yycheck_[yyr] == yystate)
|
|
return yytable_[yyr];
|
|
else
|
|
return yydefgoto_[yysym - YYNTOKENS];
|
|
}
|
|
|
|
bool
|
|
Dhcp4Parser::yy_pact_value_is_default_ (int yyvalue) YY_NOEXCEPT
|
|
{
|
|
return yyvalue == yypact_ninf_;
|
|
}
|
|
|
|
bool
|
|
Dhcp4Parser::yy_table_value_is_error_ (int yyvalue) YY_NOEXCEPT
|
|
{
|
|
return yyvalue == yytable_ninf_;
|
|
}
|
|
|
|
int
|
|
Dhcp4Parser::operator() ()
|
|
{
|
|
return parse ();
|
|
}
|
|
|
|
int
|
|
Dhcp4Parser::parse ()
|
|
{
|
|
int yyn;
|
|
/// Length of the RHS of the rule being reduced.
|
|
int yylen = 0;
|
|
|
|
// Error handling.
|
|
int yynerrs_ = 0;
|
|
int yyerrstatus_ = 0;
|
|
|
|
/// The lookahead symbol.
|
|
symbol_type yyla;
|
|
|
|
/// The locations where the error started and ended.
|
|
stack_symbol_type yyerror_range[3];
|
|
|
|
/// The return value of parse ().
|
|
int yyresult;
|
|
|
|
#if YY_EXCEPTIONS
|
|
try
|
|
#endif // YY_EXCEPTIONS
|
|
{
|
|
YYCDEBUG << "Starting parse\n";
|
|
|
|
|
|
/* Initialize the stack. The initial state will be set in
|
|
yynewstate, since the latter expects the semantical and the
|
|
location values to have been already stored, initialize these
|
|
stacks with a primary value. */
|
|
yystack_.clear ();
|
|
yypush_ (YY_NULLPTR, 0, YY_MOVE (yyla));
|
|
|
|
/*-----------------------------------------------.
|
|
| yynewstate -- push a new symbol on the stack. |
|
|
`-----------------------------------------------*/
|
|
yynewstate:
|
|
YYCDEBUG << "Entering state " << int (yystack_[0].state) << '\n';
|
|
YY_STACK_PRINT ();
|
|
|
|
// Accept?
|
|
if (yystack_[0].state == yyfinal_)
|
|
YYACCEPT;
|
|
|
|
goto yybackup;
|
|
|
|
|
|
/*-----------.
|
|
| yybackup. |
|
|
`-----------*/
|
|
yybackup:
|
|
// Try to take a decision without lookahead.
|
|
yyn = yypact_[+yystack_[0].state];
|
|
if (yy_pact_value_is_default_ (yyn))
|
|
goto yydefault;
|
|
|
|
// Read a lookahead token.
|
|
if (yyla.empty ())
|
|
{
|
|
YYCDEBUG << "Reading a token\n";
|
|
#if YY_EXCEPTIONS
|
|
try
|
|
#endif // YY_EXCEPTIONS
|
|
{
|
|
symbol_type yylookahead (yylex (ctx));
|
|
yyla.move (yylookahead);
|
|
}
|
|
#if YY_EXCEPTIONS
|
|
catch (const syntax_error& yyexc)
|
|
{
|
|
YYCDEBUG << "Caught exception: " << yyexc.what() << '\n';
|
|
error (yyexc);
|
|
goto yyerrlab1;
|
|
}
|
|
#endif // YY_EXCEPTIONS
|
|
}
|
|
YY_SYMBOL_PRINT ("Next token is", yyla);
|
|
|
|
if (yyla.kind () == symbol_kind::S_YYerror)
|
|
{
|
|
// The scanner already issued an error message, process directly
|
|
// to error recovery. But do not keep the error token as
|
|
// lookahead, it is too special and may lead us to an endless
|
|
// loop in error recovery. */
|
|
yyla.kind_ = symbol_kind::S_YYUNDEF;
|
|
goto yyerrlab1;
|
|
}
|
|
|
|
/* If the proper action on seeing token YYLA.TYPE is to reduce or
|
|
to detect an error, take that action. */
|
|
yyn += yyla.kind ();
|
|
if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.kind ())
|
|
{
|
|
goto yydefault;
|
|
}
|
|
|
|
// Reduce or error.
|
|
yyn = yytable_[yyn];
|
|
if (yyn <= 0)
|
|
{
|
|
if (yy_table_value_is_error_ (yyn))
|
|
goto yyerrlab;
|
|
yyn = -yyn;
|
|
goto yyreduce;
|
|
}
|
|
|
|
// Count tokens shifted since error; after three, turn off error status.
|
|
if (yyerrstatus_)
|
|
--yyerrstatus_;
|
|
|
|
// Shift the lookahead token.
|
|
yypush_ ("Shifting", state_type (yyn), YY_MOVE (yyla));
|
|
goto yynewstate;
|
|
|
|
|
|
/*-----------------------------------------------------------.
|
|
| yydefault -- do the default action for the current state. |
|
|
`-----------------------------------------------------------*/
|
|
yydefault:
|
|
yyn = yydefact_[+yystack_[0].state];
|
|
if (yyn == 0)
|
|
goto yyerrlab;
|
|
goto yyreduce;
|
|
|
|
|
|
/*-----------------------------.
|
|
| yyreduce -- do a reduction. |
|
|
`-----------------------------*/
|
|
yyreduce:
|
|
yylen = yyr2_[yyn];
|
|
{
|
|
stack_symbol_type yylhs;
|
|
yylhs.state = yy_lr_goto_state_ (yystack_[yylen].state, yyr1_[yyn]);
|
|
/* Variants are always initialized to an empty instance of the
|
|
correct type. The default '$$ = $1' action is NOT applied
|
|
when using variants. */
|
|
switch (yyr1_[yyn])
|
|
{
|
|
case symbol_kind::S_value: // value
|
|
case symbol_kind::S_map_value: // map_value
|
|
case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value
|
|
case symbol_kind::S_socket_type: // socket_type
|
|
case symbol_kind::S_outbound_interface_value: // outbound_interface_value
|
|
case symbol_kind::S_db_type: // db_type
|
|
case symbol_kind::S_on_fail_mode: // on_fail_mode
|
|
case symbol_kind::S_hr_mode: // hr_mode
|
|
case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value
|
|
yylhs.value.emplace< ElementPtr > ();
|
|
break;
|
|
|
|
case symbol_kind::S_BOOLEAN: // "boolean"
|
|
yylhs.value.emplace< bool > ();
|
|
break;
|
|
|
|
case symbol_kind::S_FLOAT: // "floating point"
|
|
yylhs.value.emplace< double > ();
|
|
break;
|
|
|
|
case symbol_kind::S_INTEGER: // "integer"
|
|
yylhs.value.emplace< int64_t > ();
|
|
break;
|
|
|
|
case symbol_kind::S_STRING: // "constant string"
|
|
yylhs.value.emplace< std::string > ();
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
|
|
// Default location.
|
|
{
|
|
stack_type::slice range (yystack_, yylen);
|
|
YYLLOC_DEFAULT (yylhs.location, range, yylen);
|
|
yyerror_range[1].location = yylhs.location;
|
|
}
|
|
|
|
// Perform the reduction.
|
|
YY_REDUCE_PRINT (yyn);
|
|
#if YY_EXCEPTIONS
|
|
try
|
|
#endif // YY_EXCEPTIONS
|
|
{
|
|
switch (yyn)
|
|
{
|
|
case 2: // $@1: %empty
|
|
#line 292 "dhcp4_parser.yy"
|
|
{ ctx.ctx_ = ctx.NO_KEYWORD; }
|
|
#line 761 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 4: // $@2: %empty
|
|
#line 293 "dhcp4_parser.yy"
|
|
{ ctx.ctx_ = ctx.CONFIG; }
|
|
#line 767 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 6: // $@3: %empty
|
|
#line 294 "dhcp4_parser.yy"
|
|
{ ctx.ctx_ = ctx.DHCP4; }
|
|
#line 773 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 8: // $@4: %empty
|
|
#line 295 "dhcp4_parser.yy"
|
|
{ ctx.ctx_ = ctx.INTERFACES_CONFIG; }
|
|
#line 779 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 10: // $@5: %empty
|
|
#line 296 "dhcp4_parser.yy"
|
|
{ ctx.ctx_ = ctx.SUBNET4; }
|
|
#line 785 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 12: // $@6: %empty
|
|
#line 297 "dhcp4_parser.yy"
|
|
{ ctx.ctx_ = ctx.POOLS; }
|
|
#line 791 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 14: // $@7: %empty
|
|
#line 298 "dhcp4_parser.yy"
|
|
{ ctx.ctx_ = ctx.RESERVATIONS; }
|
|
#line 797 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 16: // $@8: %empty
|
|
#line 299 "dhcp4_parser.yy"
|
|
{ ctx.ctx_ = ctx.DHCP4; }
|
|
#line 803 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 18: // $@9: %empty
|
|
#line 300 "dhcp4_parser.yy"
|
|
{ ctx.ctx_ = ctx.OPTION_DEF; }
|
|
#line 809 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 20: // $@10: %empty
|
|
#line 301 "dhcp4_parser.yy"
|
|
{ ctx.ctx_ = ctx.OPTION_DATA; }
|
|
#line 815 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 22: // $@11: %empty
|
|
#line 302 "dhcp4_parser.yy"
|
|
{ ctx.ctx_ = ctx.HOOKS_LIBRARIES; }
|
|
#line 821 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 24: // $@12: %empty
|
|
#line 303 "dhcp4_parser.yy"
|
|
{ ctx.ctx_ = ctx.DHCP_DDNS; }
|
|
#line 827 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 26: // $@13: %empty
|
|
#line 304 "dhcp4_parser.yy"
|
|
{ ctx.ctx_ = ctx.CONFIG_CONTROL; }
|
|
#line 833 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 28: // value: "integer"
|
|
#line 312 "dhcp4_parser.yy"
|
|
{ yylhs.value.as < ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); }
|
|
#line 839 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 29: // value: "floating point"
|
|
#line 313 "dhcp4_parser.yy"
|
|
{ yylhs.value.as < ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); }
|
|
#line 845 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 30: // value: "boolean"
|
|
#line 314 "dhcp4_parser.yy"
|
|
{ yylhs.value.as < ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); }
|
|
#line 851 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 31: // value: "constant string"
|
|
#line 315 "dhcp4_parser.yy"
|
|
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); }
|
|
#line 857 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 32: // value: "null"
|
|
#line 316 "dhcp4_parser.yy"
|
|
{ yylhs.value.as < ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
|
|
#line 863 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 33: // value: map2
|
|
#line 317 "dhcp4_parser.yy"
|
|
{ yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
|
|
#line 869 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 34: // value: list_generic
|
|
#line 318 "dhcp4_parser.yy"
|
|
{ yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
|
|
#line 875 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 35: // sub_json: value
|
|
#line 321 "dhcp4_parser.yy"
|
|
{
|
|
// Push back the JSON value on the stack
|
|
ctx.stack_.push_back(yystack_[0].value.as < ElementPtr > ());
|
|
}
|
|
#line 884 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 36: // $@14: %empty
|
|
#line 326 "dhcp4_parser.yy"
|
|
{
|
|
// This code is executed when we're about to start parsing
|
|
// the content of the map
|
|
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.push_back(m);
|
|
}
|
|
#line 895 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 37: // map2: "{" $@14 map_content "}"
|
|
#line 331 "dhcp4_parser.yy"
|
|
{
|
|
// map parsing completed. If we ever want to do any wrap up
|
|
// (maybe some sanity checking), this would be the best place
|
|
// for it.
|
|
}
|
|
#line 905 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 38: // map_value: map2
|
|
#line 337 "dhcp4_parser.yy"
|
|
{ yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
|
|
#line 911 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 41: // not_empty_map: "constant string" ":" value
|
|
#line 344 "dhcp4_parser.yy"
|
|
{
|
|
// map containing a single entry
|
|
ctx.unique(yystack_[2].value.as < std::string > (), ctx.loc2pos(yystack_[2].location));
|
|
ctx.stack_.back()->set(yystack_[2].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ());
|
|
}
|
|
#line 921 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 42: // not_empty_map: not_empty_map "," "constant string" ":" value
|
|
#line 349 "dhcp4_parser.yy"
|
|
{
|
|
// map consisting of a shorter map followed by
|
|
// comma and string:value
|
|
ctx.unique(yystack_[2].value.as < std::string > (), ctx.loc2pos(yystack_[2].location));
|
|
ctx.stack_.back()->set(yystack_[2].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ());
|
|
}
|
|
#line 932 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 43: // not_empty_map: not_empty_map ","
|
|
#line 355 "dhcp4_parser.yy"
|
|
{
|
|
ctx.warnAboutExtraCommas(yystack_[0].location);
|
|
}
|
|
#line 940 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 44: // $@15: %empty
|
|
#line 360 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.push_back(l);
|
|
}
|
|
#line 949 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 45: // list_generic: "[" $@15 list_content "]"
|
|
#line 363 "dhcp4_parser.yy"
|
|
{
|
|
// list parsing complete. Put any sanity checking here
|
|
}
|
|
#line 957 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 48: // not_empty_list: value
|
|
#line 371 "dhcp4_parser.yy"
|
|
{
|
|
// List consisting of a single element.
|
|
ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ());
|
|
}
|
|
#line 966 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 49: // not_empty_list: not_empty_list "," value
|
|
#line 375 "dhcp4_parser.yy"
|
|
{
|
|
// List ending with , and a value.
|
|
ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ());
|
|
}
|
|
#line 975 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 50: // not_empty_list: not_empty_list ","
|
|
#line 379 "dhcp4_parser.yy"
|
|
{
|
|
ctx.warnAboutExtraCommas(yystack_[0].location);
|
|
}
|
|
#line 983 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 51: // $@16: %empty
|
|
#line 385 "dhcp4_parser.yy"
|
|
{
|
|
// List parsing about to start
|
|
}
|
|
#line 991 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 52: // list_strings: "[" $@16 list_strings_content "]"
|
|
#line 387 "dhcp4_parser.yy"
|
|
{
|
|
// list parsing complete. Put any sanity checking here
|
|
//ctx.stack_.pop_back();
|
|
}
|
|
#line 1000 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 55: // not_empty_list_strings: "constant string"
|
|
#line 396 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->add(s);
|
|
}
|
|
#line 1009 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 56: // not_empty_list_strings: not_empty_list_strings "," "constant string"
|
|
#line 400 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->add(s);
|
|
}
|
|
#line 1018 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 57: // not_empty_list_strings: not_empty_list_strings ","
|
|
#line 404 "dhcp4_parser.yy"
|
|
{
|
|
ctx.warnAboutExtraCommas(yystack_[0].location);
|
|
}
|
|
#line 1026 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 58: // unknown_map_entry: "constant string" ":"
|
|
#line 414 "dhcp4_parser.yy"
|
|
{
|
|
const std::string& where = ctx.contextName();
|
|
const std::string& keyword = yystack_[1].value.as < std::string > ();
|
|
error(yystack_[1].location,
|
|
"got unexpected keyword \"" + keyword + "\" in " + where + " map.");
|
|
}
|
|
#line 1037 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 59: // $@17: %empty
|
|
#line 423 "dhcp4_parser.yy"
|
|
{
|
|
// This code is executed when we're about to start parsing
|
|
// the content of the map
|
|
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.push_back(m);
|
|
}
|
|
#line 1048 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 60: // syntax_map: "{" $@17 global_object "}"
|
|
#line 428 "dhcp4_parser.yy"
|
|
{
|
|
// map parsing completed. If we ever want to do any wrap up
|
|
// (maybe some sanity checking), this would be the best place
|
|
// for it.
|
|
|
|
// Dhcp4 is required
|
|
ctx.require("Dhcp4", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
|
|
}
|
|
#line 1061 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 61: // $@18: %empty
|
|
#line 438 "dhcp4_parser.yy"
|
|
{
|
|
// This code is executed when we're about to start parsing
|
|
// the content of the map
|
|
// Prevent against duplicate.
|
|
ctx.unique("Dhcp4", ctx.loc2pos(yystack_[0].location));
|
|
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("Dhcp4", m);
|
|
ctx.stack_.push_back(m);
|
|
ctx.enter(ctx.DHCP4);
|
|
}
|
|
#line 1076 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 62: // global_object: "Dhcp4" $@18 ":" "{" global_params "}"
|
|
#line 447 "dhcp4_parser.yy"
|
|
{
|
|
// No global parameter is required
|
|
ctx.stack_.pop_back();
|
|
ctx.leave();
|
|
}
|
|
#line 1086 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 64: // global_object_comma: global_object ","
|
|
#line 455 "dhcp4_parser.yy"
|
|
{
|
|
ctx.warnAboutExtraCommas(yystack_[0].location);
|
|
}
|
|
#line 1094 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 65: // $@19: %empty
|
|
#line 461 "dhcp4_parser.yy"
|
|
{
|
|
// Parse the Dhcp4 map
|
|
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.push_back(m);
|
|
}
|
|
#line 1104 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 66: // sub_dhcp4: "{" $@19 global_params "}"
|
|
#line 465 "dhcp4_parser.yy"
|
|
{
|
|
// No global parameter is required
|
|
// parsing completed
|
|
}
|
|
#line 1113 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 69: // global_params: global_params ","
|
|
#line 472 "dhcp4_parser.yy"
|
|
{
|
|
ctx.warnAboutExtraCommas(yystack_[0].location);
|
|
}
|
|
#line 1121 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 134: // valid_lifetime: "valid-lifetime" ":" "integer"
|
|
#line 545 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("valid-lifetime", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("valid-lifetime", prf);
|
|
}
|
|
#line 1131 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 135: // min_valid_lifetime: "min-valid-lifetime" ":" "integer"
|
|
#line 551 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("min-valid-lifetime", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("min-valid-lifetime", prf);
|
|
}
|
|
#line 1141 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 136: // max_valid_lifetime: "max-valid-lifetime" ":" "integer"
|
|
#line 557 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("max-valid-lifetime", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("max-valid-lifetime", prf);
|
|
}
|
|
#line 1151 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 137: // renew_timer: "renew-timer" ":" "integer"
|
|
#line 563 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("renew-timer", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("renew-timer", prf);
|
|
}
|
|
#line 1161 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 138: // rebind_timer: "rebind-timer" ":" "integer"
|
|
#line 569 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("rebind-timer", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("rebind-timer", prf);
|
|
}
|
|
#line 1171 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 139: // calculate_tee_times: "calculate-tee-times" ":" "boolean"
|
|
#line 575 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("calculate-tee-times", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr ctt(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("calculate-tee-times", ctt);
|
|
}
|
|
#line 1181 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 140: // t1_percent: "t1-percent" ":" "floating point"
|
|
#line 581 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("t1-percent", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr t1(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("t1-percent", t1);
|
|
}
|
|
#line 1191 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 141: // t2_percent: "t2-percent" ":" "floating point"
|
|
#line 587 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("t2-percent", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr t2(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("t2-percent", t2);
|
|
}
|
|
#line 1201 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 142: // cache_threshold: "cache-threshold" ":" "floating point"
|
|
#line 593 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("cache-threshold", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr ct(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("cache-threshold", ct);
|
|
}
|
|
#line 1211 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 143: // cache_max_age: "cache-max-age" ":" "integer"
|
|
#line 599 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("cache-max-age", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr cm(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("cache-max-age", cm);
|
|
}
|
|
#line 1221 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 144: // decline_probation_period: "decline-probation-period" ":" "integer"
|
|
#line 605 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("decline-probation-period", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr dpp(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("decline-probation-period", dpp);
|
|
}
|
|
#line 1231 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 145: // $@20: %empty
|
|
#line 611 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("server-tag", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 1240 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 146: // server_tag: "server-tag" $@20 ":" "constant string"
|
|
#line 614 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr stag(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("server-tag", stag);
|
|
ctx.leave();
|
|
}
|
|
#line 1250 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 147: // parked_packet_limit: "parked-packet-limit" ":" "integer"
|
|
#line 620 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("parked-packet-limit", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr ppl(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("parked-packet-limit", ppl);
|
|
}
|
|
#line 1260 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 148: // echo_client_id: "echo-client-id" ":" "boolean"
|
|
#line 626 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("echo-client-id", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr echo(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("echo-client-id", echo);
|
|
}
|
|
#line 1270 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 149: // match_client_id: "match-client-id" ":" "boolean"
|
|
#line 632 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("match-client-id", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr match(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("match-client-id", match);
|
|
}
|
|
#line 1280 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 150: // authoritative: "authoritative" ":" "boolean"
|
|
#line 638 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("authoritative", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr prf(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("authoritative", prf);
|
|
}
|
|
#line 1290 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 151: // ddns_send_updates: "ddns-send-updates" ":" "boolean"
|
|
#line 644 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("ddns-send-updates", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("ddns-send-updates", b);
|
|
}
|
|
#line 1300 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 152: // ddns_override_no_update: "ddns-override-no-update" ":" "boolean"
|
|
#line 650 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("ddns-override-no-update", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("ddns-override-no-update", b);
|
|
}
|
|
#line 1310 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 153: // ddns_override_client_update: "ddns-override-client-update" ":" "boolean"
|
|
#line 656 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("ddns-override-client-update", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("ddns-override-client-update", b);
|
|
}
|
|
#line 1320 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 154: // $@21: %empty
|
|
#line 662 "dhcp4_parser.yy"
|
|
{
|
|
ctx.enter(ctx.REPLACE_CLIENT_NAME);
|
|
ctx.unique("ddns-replace-client-name", ctx.loc2pos(yystack_[0].location));
|
|
}
|
|
#line 1329 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 155: // ddns_replace_client_name: "ddns-replace-client-name" $@21 ":" ddns_replace_client_name_value
|
|
#line 665 "dhcp4_parser.yy"
|
|
{
|
|
ctx.stack_.back()->set("ddns-replace-client-name", yystack_[0].value.as < ElementPtr > ());
|
|
ctx.leave();
|
|
}
|
|
#line 1338 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 156: // ddns_replace_client_name_value: "when-present"
|
|
#line 671 "dhcp4_parser.yy"
|
|
{
|
|
yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location)));
|
|
}
|
|
#line 1346 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 157: // ddns_replace_client_name_value: "never"
|
|
#line 674 "dhcp4_parser.yy"
|
|
{
|
|
yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location)));
|
|
}
|
|
#line 1354 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 158: // ddns_replace_client_name_value: "always"
|
|
#line 677 "dhcp4_parser.yy"
|
|
{
|
|
yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location)));
|
|
}
|
|
#line 1362 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 159: // ddns_replace_client_name_value: "when-not-present"
|
|
#line 680 "dhcp4_parser.yy"
|
|
{
|
|
yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location)));
|
|
}
|
|
#line 1370 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 160: // ddns_replace_client_name_value: "boolean"
|
|
#line 683 "dhcp4_parser.yy"
|
|
{
|
|
error(yystack_[0].location, "boolean values for the replace-client-name are "
|
|
"no longer supported");
|
|
}
|
|
#line 1379 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 161: // $@22: %empty
|
|
#line 689 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("ddns-generated-prefix", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 1388 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 162: // ddns_generated_prefix: "ddns-generated-prefix" $@22 ":" "constant string"
|
|
#line 692 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("ddns-generated-prefix", s);
|
|
ctx.leave();
|
|
}
|
|
#line 1398 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 163: // $@23: %empty
|
|
#line 698 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("ddns-qualifying-suffix", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 1407 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 164: // ddns_qualifying_suffix: "ddns-qualifying-suffix" $@23 ":" "constant string"
|
|
#line 701 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("ddns-qualifying-suffix", s);
|
|
ctx.leave();
|
|
}
|
|
#line 1417 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 165: // ddns_update_on_renew: "ddns-update-on-renew" ":" "boolean"
|
|
#line 707 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("ddns-update-on-renew", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("ddns-update-on-renew", b);
|
|
}
|
|
#line 1427 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 166: // ddns_use_conflict_resolution: "ddns-use-conflict-resolution" ":" "boolean"
|
|
#line 713 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("ddns-use-conflict-resolution", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("ddns-use-conflict-resolution", b);
|
|
}
|
|
#line 1437 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 167: // $@24: %empty
|
|
#line 719 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("hostname-char-set", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 1446 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 168: // hostname_char_set: "hostname-char-set" $@24 ":" "constant string"
|
|
#line 722 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("hostname-char-set", s);
|
|
ctx.leave();
|
|
}
|
|
#line 1456 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 169: // $@25: %empty
|
|
#line 728 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("hostname-char-replacement", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 1465 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 170: // hostname_char_replacement: "hostname-char-replacement" $@25 ":" "constant string"
|
|
#line 731 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("hostname-char-replacement", s);
|
|
ctx.leave();
|
|
}
|
|
#line 1475 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 171: // store_extended_info: "store-extended-info" ":" "boolean"
|
|
#line 737 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("store-extended-info", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("store-extended-info", b);
|
|
}
|
|
#line 1485 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 172: // statistic_default_sample_count: "statistic-default-sample-count" ":" "integer"
|
|
#line 743 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("statistic-default-sample-count", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr count(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("statistic-default-sample-count", count);
|
|
}
|
|
#line 1495 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 173: // statistic_default_sample_age: "statistic-default-sample-age" ":" "integer"
|
|
#line 749 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("statistic-default-sample-age", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr age(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("statistic-default-sample-age", age);
|
|
}
|
|
#line 1505 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 174: // early_global_reservations_lookup: "early-global-reservations-lookup" ":" "boolean"
|
|
#line 755 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("early-global-reservations-lookup", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr early(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("early-global-reservations-lookup", early);
|
|
}
|
|
#line 1515 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 175: // ip_reservations_unique: "ip-reservations-unique" ":" "boolean"
|
|
#line 761 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("ip-reservations-unique", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr unique(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("ip-reservations-unique", unique);
|
|
}
|
|
#line 1525 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 176: // reservations_lookup_first: "reservations-lookup-first" ":" "boolean"
|
|
#line 767 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("reservations-lookup-first", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr first(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("reservations-lookup-first", first);
|
|
}
|
|
#line 1535 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 177: // $@26: %empty
|
|
#line 773 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("interfaces-config", ctx.loc2pos(yystack_[0].location));
|
|
ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("interfaces-config", i);
|
|
ctx.stack_.push_back(i);
|
|
ctx.enter(ctx.INTERFACES_CONFIG);
|
|
}
|
|
#line 1547 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 178: // interfaces_config: "interfaces-config" $@26 ":" "{" interfaces_config_params "}"
|
|
#line 779 "dhcp4_parser.yy"
|
|
{
|
|
// No interfaces config param is required
|
|
ctx.stack_.pop_back();
|
|
ctx.leave();
|
|
}
|
|
#line 1557 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 181: // interfaces_config_params: interfaces_config_params ","
|
|
#line 787 "dhcp4_parser.yy"
|
|
{
|
|
ctx.warnAboutExtraCommas(yystack_[0].location);
|
|
}
|
|
#line 1565 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 189: // $@27: %empty
|
|
#line 801 "dhcp4_parser.yy"
|
|
{
|
|
// Parse the interfaces-config map
|
|
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.push_back(m);
|
|
}
|
|
#line 1575 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 190: // sub_interfaces4: "{" $@27 interfaces_config_params "}"
|
|
#line 805 "dhcp4_parser.yy"
|
|
{
|
|
// No interfaces config param is required
|
|
// parsing completed
|
|
}
|
|
#line 1584 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 191: // $@28: %empty
|
|
#line 810 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("interfaces", ctx.loc2pos(yystack_[0].location));
|
|
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("interfaces", l);
|
|
ctx.stack_.push_back(l);
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 1596 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 192: // interfaces_list: "interfaces" $@28 ":" list_strings
|
|
#line 816 "dhcp4_parser.yy"
|
|
{
|
|
ctx.stack_.pop_back();
|
|
ctx.leave();
|
|
}
|
|
#line 1605 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 193: // $@29: %empty
|
|
#line 821 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("dhcp-socket-type", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.DHCP_SOCKET_TYPE);
|
|
}
|
|
#line 1614 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 194: // dhcp_socket_type: "dhcp-socket-type" $@29 ":" socket_type
|
|
#line 824 "dhcp4_parser.yy"
|
|
{
|
|
ctx.stack_.back()->set("dhcp-socket-type", yystack_[0].value.as < ElementPtr > ());
|
|
ctx.leave();
|
|
}
|
|
#line 1623 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 195: // socket_type: "raw"
|
|
#line 829 "dhcp4_parser.yy"
|
|
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("raw", ctx.loc2pos(yystack_[0].location))); }
|
|
#line 1629 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 196: // socket_type: "udp"
|
|
#line 830 "dhcp4_parser.yy"
|
|
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("udp", ctx.loc2pos(yystack_[0].location))); }
|
|
#line 1635 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 197: // $@30: %empty
|
|
#line 833 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("outbound-interface", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.OUTBOUND_INTERFACE);
|
|
}
|
|
#line 1644 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 198: // outbound_interface: "outbound-interface" $@30 ":" outbound_interface_value
|
|
#line 836 "dhcp4_parser.yy"
|
|
{
|
|
ctx.stack_.back()->set("outbound-interface", yystack_[0].value.as < ElementPtr > ());
|
|
ctx.leave();
|
|
}
|
|
#line 1653 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 199: // outbound_interface_value: "same-as-inbound"
|
|
#line 841 "dhcp4_parser.yy"
|
|
{
|
|
yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("same-as-inbound", ctx.loc2pos(yystack_[0].location)));
|
|
}
|
|
#line 1661 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 200: // outbound_interface_value: "use-routing"
|
|
#line 843 "dhcp4_parser.yy"
|
|
{
|
|
yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("use-routing", ctx.loc2pos(yystack_[0].location)));
|
|
}
|
|
#line 1669 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 201: // re_detect: "re-detect" ":" "boolean"
|
|
#line 847 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("re-detect", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("re-detect", b);
|
|
}
|
|
#line 1679 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 202: // $@31: %empty
|
|
#line 854 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("lease-database", ctx.loc2pos(yystack_[0].location));
|
|
ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("lease-database", i);
|
|
ctx.stack_.push_back(i);
|
|
ctx.enter(ctx.LEASE_DATABASE);
|
|
}
|
|
#line 1691 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 203: // lease_database: "lease-database" $@31 ":" "{" database_map_params "}"
|
|
#line 860 "dhcp4_parser.yy"
|
|
{
|
|
// The type parameter is required
|
|
ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
|
|
ctx.stack_.pop_back();
|
|
ctx.leave();
|
|
}
|
|
#line 1702 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 204: // $@32: %empty
|
|
#line 867 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("sanity-checks", ctx.loc2pos(yystack_[0].location));
|
|
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("sanity-checks", m);
|
|
ctx.stack_.push_back(m);
|
|
ctx.enter(ctx.SANITY_CHECKS);
|
|
}
|
|
#line 1714 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 205: // sanity_checks: "sanity-checks" $@32 ":" "{" sanity_checks_params "}"
|
|
#line 873 "dhcp4_parser.yy"
|
|
{
|
|
ctx.stack_.pop_back();
|
|
ctx.leave();
|
|
}
|
|
#line 1723 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 208: // sanity_checks_params: sanity_checks_params ","
|
|
#line 880 "dhcp4_parser.yy"
|
|
{
|
|
ctx.warnAboutExtraCommas(yystack_[0].location);
|
|
}
|
|
#line 1731 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 210: // $@33: %empty
|
|
#line 887 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("lease-checks", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 1740 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 211: // lease_checks: "lease-checks" $@33 ":" "constant string"
|
|
#line 890 "dhcp4_parser.yy"
|
|
{
|
|
|
|
if ( (string(yystack_[0].value.as < std::string > ()) == "none") ||
|
|
(string(yystack_[0].value.as < std::string > ()) == "warn") ||
|
|
(string(yystack_[0].value.as < std::string > ()) == "fix") ||
|
|
(string(yystack_[0].value.as < std::string > ()) == "fix-del") ||
|
|
(string(yystack_[0].value.as < std::string > ()) == "del")) {
|
|
ElementPtr user(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("lease-checks", user);
|
|
ctx.leave();
|
|
} else {
|
|
error(yystack_[0].location, "Unsupported 'lease-checks value: " + string(yystack_[0].value.as < std::string > ()) +
|
|
", supported values are: none, warn, fix, fix-del, del");
|
|
}
|
|
}
|
|
#line 1760 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 212: // $@34: %empty
|
|
#line 906 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("hosts-database", ctx.loc2pos(yystack_[0].location));
|
|
ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("hosts-database", i);
|
|
ctx.stack_.push_back(i);
|
|
ctx.enter(ctx.HOSTS_DATABASE);
|
|
}
|
|
#line 1772 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 213: // hosts_database: "hosts-database" $@34 ":" "{" database_map_params "}"
|
|
#line 912 "dhcp4_parser.yy"
|
|
{
|
|
// The type parameter is required
|
|
ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
|
|
ctx.stack_.pop_back();
|
|
ctx.leave();
|
|
}
|
|
#line 1783 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 214: // $@35: %empty
|
|
#line 919 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("hosts-databases", ctx.loc2pos(yystack_[0].location));
|
|
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("hosts-databases", l);
|
|
ctx.stack_.push_back(l);
|
|
ctx.enter(ctx.HOSTS_DATABASE);
|
|
}
|
|
#line 1795 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 215: // hosts_databases: "hosts-databases" $@35 ":" "[" database_list "]"
|
|
#line 925 "dhcp4_parser.yy"
|
|
{
|
|
ctx.stack_.pop_back();
|
|
ctx.leave();
|
|
}
|
|
#line 1804 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 220: // not_empty_database_list: not_empty_database_list ","
|
|
#line 936 "dhcp4_parser.yy"
|
|
{
|
|
ctx.warnAboutExtraCommas(yystack_[0].location);
|
|
}
|
|
#line 1812 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 221: // $@36: %empty
|
|
#line 941 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->add(m);
|
|
ctx.stack_.push_back(m);
|
|
}
|
|
#line 1822 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 222: // database: "{" $@36 database_map_params "}"
|
|
#line 945 "dhcp4_parser.yy"
|
|
{
|
|
// The type parameter is required
|
|
ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
|
|
ctx.stack_.pop_back();
|
|
}
|
|
#line 1832 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 225: // database_map_params: database_map_params ","
|
|
#line 953 "dhcp4_parser.yy"
|
|
{
|
|
ctx.warnAboutExtraCommas(yystack_[0].location);
|
|
}
|
|
#line 1840 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 245: // $@37: %empty
|
|
#line 979 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("type", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.DATABASE_TYPE);
|
|
}
|
|
#line 1849 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 246: // database_type: "type" $@37 ":" db_type
|
|
#line 982 "dhcp4_parser.yy"
|
|
{
|
|
ctx.stack_.back()->set("type", yystack_[0].value.as < ElementPtr > ());
|
|
ctx.leave();
|
|
}
|
|
#line 1858 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 247: // db_type: "memfile"
|
|
#line 987 "dhcp4_parser.yy"
|
|
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("memfile", ctx.loc2pos(yystack_[0].location))); }
|
|
#line 1864 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 248: // db_type: "mysql"
|
|
#line 988 "dhcp4_parser.yy"
|
|
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("mysql", ctx.loc2pos(yystack_[0].location))); }
|
|
#line 1870 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 249: // db_type: "postgresql"
|
|
#line 989 "dhcp4_parser.yy"
|
|
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("postgresql", ctx.loc2pos(yystack_[0].location))); }
|
|
#line 1876 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 250: // $@38: %empty
|
|
#line 992 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("user", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 1885 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 251: // user: "user" $@38 ":" "constant string"
|
|
#line 995 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr user(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("user", user);
|
|
ctx.leave();
|
|
}
|
|
#line 1895 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 252: // $@39: %empty
|
|
#line 1001 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("password", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 1904 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 253: // password: "password" $@39 ":" "constant string"
|
|
#line 1004 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr pwd(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("password", pwd);
|
|
ctx.leave();
|
|
}
|
|
#line 1914 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 254: // $@40: %empty
|
|
#line 1010 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("host", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 1923 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 255: // host: "host" $@40 ":" "constant string"
|
|
#line 1013 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr h(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("host", h);
|
|
ctx.leave();
|
|
}
|
|
#line 1933 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 256: // port: "port" ":" "integer"
|
|
#line 1019 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("port", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr p(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("port", p);
|
|
}
|
|
#line 1943 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 257: // $@41: %empty
|
|
#line 1025 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("name", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 1952 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 258: // name: "name" $@41 ":" "constant string"
|
|
#line 1028 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr name(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("name", name);
|
|
ctx.leave();
|
|
}
|
|
#line 1962 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 259: // persist: "persist" ":" "boolean"
|
|
#line 1034 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("persist", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("persist", n);
|
|
}
|
|
#line 1972 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 260: // lfc_interval: "lfc-interval" ":" "integer"
|
|
#line 1040 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("lfc-interval", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("lfc-interval", n);
|
|
}
|
|
#line 1982 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 261: // readonly: "readonly" ":" "boolean"
|
|
#line 1046 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("readonly", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("readonly", n);
|
|
}
|
|
#line 1992 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 262: // connect_timeout: "connect-timeout" ":" "integer"
|
|
#line 1052 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("connect-timeout", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("connect-timeout", n);
|
|
}
|
|
#line 2002 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 263: // max_reconnect_tries: "max-reconnect-tries" ":" "integer"
|
|
#line 1058 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("max-reconnect-tries", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("max-reconnect-tries", n);
|
|
}
|
|
#line 2012 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 264: // reconnect_wait_time: "reconnect-wait-time" ":" "integer"
|
|
#line 1064 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("reconnect-wait-time", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("reconnect-wait-time", n);
|
|
}
|
|
#line 2022 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 265: // $@42: %empty
|
|
#line 1070 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("on-fail", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.DATABASE_ON_FAIL);
|
|
}
|
|
#line 2031 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 266: // on_fail: "on-fail" $@42 ":" on_fail_mode
|
|
#line 1073 "dhcp4_parser.yy"
|
|
{
|
|
ctx.stack_.back()->set("on-fail", yystack_[0].value.as < ElementPtr > ());
|
|
ctx.leave();
|
|
}
|
|
#line 2040 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 267: // on_fail_mode: "stop-retry-exit"
|
|
#line 1078 "dhcp4_parser.yy"
|
|
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("stop-retry-exit", ctx.loc2pos(yystack_[0].location))); }
|
|
#line 2046 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 268: // on_fail_mode: "serve-retry-exit"
|
|
#line 1079 "dhcp4_parser.yy"
|
|
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("serve-retry-exit", ctx.loc2pos(yystack_[0].location))); }
|
|
#line 2052 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 269: // on_fail_mode: "serve-retry-continue"
|
|
#line 1080 "dhcp4_parser.yy"
|
|
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("serve-retry-continue", ctx.loc2pos(yystack_[0].location))); }
|
|
#line 2058 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 270: // max_row_errors: "max-row-errors" ":" "integer"
|
|
#line 1083 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("max-row-errors", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("max-row-errors", n);
|
|
}
|
|
#line 2068 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 271: // $@43: %empty
|
|
#line 1089 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("trust-anchor", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 2077 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 272: // trust_anchor: "trust-anchor" $@43 ":" "constant string"
|
|
#line 1092 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr ca(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("trust-anchor", ca);
|
|
ctx.leave();
|
|
}
|
|
#line 2087 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 273: // $@44: %empty
|
|
#line 1098 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("cert-file", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 2096 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 274: // cert_file: "cert-file" $@44 ":" "constant string"
|
|
#line 1101 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr cert(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("cert-file", cert);
|
|
ctx.leave();
|
|
}
|
|
#line 2106 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 275: // $@45: %empty
|
|
#line 1107 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("key-file", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 2115 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 276: // key_file: "key-file" $@45 ":" "constant string"
|
|
#line 1110 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr key(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("key-file", key);
|
|
ctx.leave();
|
|
}
|
|
#line 2125 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 277: // $@46: %empty
|
|
#line 1116 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("cipher-list", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 2134 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 278: // cipher_list: "cipher-list" $@46 ":" "constant string"
|
|
#line 1119 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr cl(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("cipher-list", cl);
|
|
ctx.leave();
|
|
}
|
|
#line 2144 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 279: // $@47: %empty
|
|
#line 1125 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("host-reservation-identifiers", ctx.loc2pos(yystack_[0].location));
|
|
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("host-reservation-identifiers", l);
|
|
ctx.stack_.push_back(l);
|
|
ctx.enter(ctx.HOST_RESERVATION_IDENTIFIERS);
|
|
}
|
|
#line 2156 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 280: // host_reservation_identifiers: "host-reservation-identifiers" $@47 ":" "[" host_reservation_identifiers_list "]"
|
|
#line 1131 "dhcp4_parser.yy"
|
|
{
|
|
ctx.stack_.pop_back();
|
|
ctx.leave();
|
|
}
|
|
#line 2165 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 283: // host_reservation_identifiers_list: host_reservation_identifiers_list ","
|
|
#line 1138 "dhcp4_parser.yy"
|
|
{
|
|
ctx.warnAboutExtraCommas(yystack_[0].location);
|
|
}
|
|
#line 2173 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 289: // duid_id: "duid"
|
|
#line 1150 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->add(duid);
|
|
}
|
|
#line 2182 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 290: // hw_address_id: "hw-address"
|
|
#line 1155 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->add(hwaddr);
|
|
}
|
|
#line 2191 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 291: // circuit_id: "circuit-id"
|
|
#line 1160 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr circuit(new StringElement("circuit-id", ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->add(circuit);
|
|
}
|
|
#line 2200 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 292: // client_id: "client-id"
|
|
#line 1165 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr client(new StringElement("client-id", ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->add(client);
|
|
}
|
|
#line 2209 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 293: // flex_id: "flex-id"
|
|
#line 1170 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr flex_id(new StringElement("flex-id", ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->add(flex_id);
|
|
}
|
|
#line 2218 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 294: // $@48: %empty
|
|
#line 1177 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("multi-threading", ctx.loc2pos(yystack_[0].location));
|
|
ElementPtr mt(new MapElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("multi-threading", mt);
|
|
ctx.stack_.push_back(mt);
|
|
ctx.enter(ctx.DHCP_MULTI_THREADING);
|
|
}
|
|
#line 2230 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 295: // dhcp_multi_threading: "multi-threading" $@48 ":" "{" multi_threading_params "}"
|
|
#line 1183 "dhcp4_parser.yy"
|
|
{
|
|
// The enable parameter is required.
|
|
ctx.require("enable-multi-threading", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
|
|
ctx.stack_.pop_back();
|
|
ctx.leave();
|
|
}
|
|
#line 2241 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 298: // multi_threading_params: multi_threading_params ","
|
|
#line 1192 "dhcp4_parser.yy"
|
|
{
|
|
ctx.warnAboutExtraCommas(yystack_[0].location);
|
|
}
|
|
#line 2249 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 305: // enable_multi_threading: "enable-multi-threading" ":" "boolean"
|
|
#line 1205 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("enable-multi-threading", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("enable-multi-threading", b);
|
|
}
|
|
#line 2259 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 306: // thread_pool_size: "thread-pool-size" ":" "integer"
|
|
#line 1211 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("thread-pool-size", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("thread-pool-size", prf);
|
|
}
|
|
#line 2269 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 307: // packet_queue_size: "packet-queue-size" ":" "integer"
|
|
#line 1217 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("packet-queue-size", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("packet-queue-size", prf);
|
|
}
|
|
#line 2279 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 308: // $@49: %empty
|
|
#line 1223 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("hooks-libraries", ctx.loc2pos(yystack_[0].location));
|
|
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("hooks-libraries", l);
|
|
ctx.stack_.push_back(l);
|
|
ctx.enter(ctx.HOOKS_LIBRARIES);
|
|
}
|
|
#line 2291 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 309: // hooks_libraries: "hooks-libraries" $@49 ":" "[" hooks_libraries_list "]"
|
|
#line 1229 "dhcp4_parser.yy"
|
|
{
|
|
ctx.stack_.pop_back();
|
|
ctx.leave();
|
|
}
|
|
#line 2300 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 314: // not_empty_hooks_libraries_list: not_empty_hooks_libraries_list ","
|
|
#line 1240 "dhcp4_parser.yy"
|
|
{
|
|
ctx.warnAboutExtraCommas(yystack_[0].location);
|
|
}
|
|
#line 2308 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 315: // $@50: %empty
|
|
#line 1245 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->add(m);
|
|
ctx.stack_.push_back(m);
|
|
}
|
|
#line 2318 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 316: // hooks_library: "{" $@50 hooks_params "}"
|
|
#line 1249 "dhcp4_parser.yy"
|
|
{
|
|
// The library hooks parameter is required
|
|
ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
|
|
ctx.stack_.pop_back();
|
|
}
|
|
#line 2328 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 317: // $@51: %empty
|
|
#line 1255 "dhcp4_parser.yy"
|
|
{
|
|
// Parse the hooks-libraries list entry map
|
|
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.push_back(m);
|
|
}
|
|
#line 2338 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 318: // sub_hooks_library: "{" $@51 hooks_params "}"
|
|
#line 1259 "dhcp4_parser.yy"
|
|
{
|
|
// The library hooks parameter is required
|
|
ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
|
|
// parsing completed
|
|
}
|
|
#line 2348 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 321: // hooks_params: hooks_params ","
|
|
#line 1267 "dhcp4_parser.yy"
|
|
{
|
|
ctx.warnAboutExtraCommas(yystack_[0].location);
|
|
}
|
|
#line 2356 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 325: // $@52: %empty
|
|
#line 1277 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("library", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 2365 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 326: // library: "library" $@52 ":" "constant string"
|
|
#line 1280 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr lib(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("library", lib);
|
|
ctx.leave();
|
|
}
|
|
#line 2375 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 327: // $@53: %empty
|
|
#line 1286 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("parameters", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 2384 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 328: // parameters: "parameters" $@53 ":" map_value
|
|
#line 1289 "dhcp4_parser.yy"
|
|
{
|
|
ctx.stack_.back()->set("parameters", yystack_[0].value.as < ElementPtr > ());
|
|
ctx.leave();
|
|
}
|
|
#line 2393 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 329: // $@54: %empty
|
|
#line 1295 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("expired-leases-processing", ctx.loc2pos(yystack_[0].location));
|
|
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("expired-leases-processing", m);
|
|
ctx.stack_.push_back(m);
|
|
ctx.enter(ctx.EXPIRED_LEASES_PROCESSING);
|
|
}
|
|
#line 2405 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 330: // expired_leases_processing: "expired-leases-processing" $@54 ":" "{" expired_leases_params "}"
|
|
#line 1301 "dhcp4_parser.yy"
|
|
{
|
|
// No expired lease parameter is required
|
|
ctx.stack_.pop_back();
|
|
ctx.leave();
|
|
}
|
|
#line 2415 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 333: // expired_leases_params: expired_leases_params ","
|
|
#line 1309 "dhcp4_parser.yy"
|
|
{
|
|
ctx.warnAboutExtraCommas(yystack_[0].location);
|
|
}
|
|
#line 2423 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 340: // reclaim_timer_wait_time: "reclaim-timer-wait-time" ":" "integer"
|
|
#line 1322 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("reclaim-timer-wait-time", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("reclaim-timer-wait-time", value);
|
|
}
|
|
#line 2433 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 341: // flush_reclaimed_timer_wait_time: "flush-reclaimed-timer-wait-time" ":" "integer"
|
|
#line 1328 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("flush-reclaimed-timer-wait-time", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("flush-reclaimed-timer-wait-time", value);
|
|
}
|
|
#line 2443 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 342: // hold_reclaimed_time: "hold-reclaimed-time" ":" "integer"
|
|
#line 1334 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("hold-reclaimed-time", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("hold-reclaimed-time", value);
|
|
}
|
|
#line 2453 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 343: // max_reclaim_leases: "max-reclaim-leases" ":" "integer"
|
|
#line 1340 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("max-reclaim-leases", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("max-reclaim-leases", value);
|
|
}
|
|
#line 2463 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 344: // max_reclaim_time: "max-reclaim-time" ":" "integer"
|
|
#line 1346 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("max-reclaim-time", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("max-reclaim-time", value);
|
|
}
|
|
#line 2473 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 345: // unwarned_reclaim_cycles: "unwarned-reclaim-cycles" ":" "integer"
|
|
#line 1352 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("unwarned-reclaim-cycles", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("unwarned-reclaim-cycles", value);
|
|
}
|
|
#line 2483 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 346: // $@55: %empty
|
|
#line 1361 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("subnet4", ctx.loc2pos(yystack_[0].location));
|
|
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("subnet4", l);
|
|
ctx.stack_.push_back(l);
|
|
ctx.enter(ctx.SUBNET4);
|
|
}
|
|
#line 2495 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 347: // subnet4_list: "subnet4" $@55 ":" "[" subnet4_list_content "]"
|
|
#line 1367 "dhcp4_parser.yy"
|
|
{
|
|
ctx.stack_.pop_back();
|
|
ctx.leave();
|
|
}
|
|
#line 2504 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 352: // not_empty_subnet4_list: not_empty_subnet4_list ","
|
|
#line 1381 "dhcp4_parser.yy"
|
|
{
|
|
ctx.warnAboutExtraCommas(yystack_[0].location);
|
|
}
|
|
#line 2512 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 353: // $@56: %empty
|
|
#line 1390 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->add(m);
|
|
ctx.stack_.push_back(m);
|
|
}
|
|
#line 2522 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 354: // subnet4: "{" $@56 subnet4_params "}"
|
|
#line 1394 "dhcp4_parser.yy"
|
|
{
|
|
// Once we reached this place, the subnet parsing is now complete.
|
|
// If we want to, we can implement default values here.
|
|
// In particular we can do things like this:
|
|
// if (!ctx.stack_.back()->get("interface")) {
|
|
// ctx.stack_.back()->set("interface", StringElement("loopback"));
|
|
// }
|
|
//
|
|
// We can also stack up one level (Dhcp4) and copy over whatever
|
|
// global parameters we want to:
|
|
// if (!ctx.stack_.back()->get("renew-timer")) {
|
|
// ElementPtr renew = ctx_stack_[...].get("renew-timer");
|
|
// if (renew) {
|
|
// ctx.stack_.back()->set("renew-timer", renew);
|
|
// }
|
|
// }
|
|
|
|
// The subnet subnet4 parameter is required
|
|
ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
|
|
ctx.stack_.pop_back();
|
|
}
|
|
#line 2548 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 355: // $@57: %empty
|
|
#line 1416 "dhcp4_parser.yy"
|
|
{
|
|
// Parse the subnet4 list entry map
|
|
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.push_back(m);
|
|
}
|
|
#line 2558 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 356: // sub_subnet4: "{" $@57 subnet4_params "}"
|
|
#line 1420 "dhcp4_parser.yy"
|
|
{
|
|
// The subnet subnet4 parameter is required
|
|
ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
|
|
// parsing completed
|
|
}
|
|
#line 2568 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 359: // subnet4_params: subnet4_params ","
|
|
#line 1429 "dhcp4_parser.yy"
|
|
{
|
|
ctx.warnAboutExtraCommas(yystack_[0].location);
|
|
}
|
|
#line 2576 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 405: // $@58: %empty
|
|
#line 1482 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("subnet", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 2585 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 406: // subnet: "subnet" $@58 ":" "constant string"
|
|
#line 1485 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr subnet(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("subnet", subnet);
|
|
ctx.leave();
|
|
}
|
|
#line 2595 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 407: // $@59: %empty
|
|
#line 1491 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("4o6-interface", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 2604 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 408: // subnet_4o6_interface: "4o6-interface" $@59 ":" "constant string"
|
|
#line 1494 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("4o6-interface", iface);
|
|
ctx.leave();
|
|
}
|
|
#line 2614 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 409: // $@60: %empty
|
|
#line 1500 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("4o6-interface-id", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 2623 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 410: // subnet_4o6_interface_id: "4o6-interface-id" $@60 ":" "constant string"
|
|
#line 1503 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("4o6-interface-id", iface);
|
|
ctx.leave();
|
|
}
|
|
#line 2633 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 411: // $@61: %empty
|
|
#line 1509 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("4o6-subnet", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 2642 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 412: // subnet_4o6_subnet: "4o6-subnet" $@61 ":" "constant string"
|
|
#line 1512 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("4o6-subnet", iface);
|
|
ctx.leave();
|
|
}
|
|
#line 2652 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 413: // $@62: %empty
|
|
#line 1518 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("interface", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 2661 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 414: // interface: "interface" $@62 ":" "constant string"
|
|
#line 1521 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("interface", iface);
|
|
ctx.leave();
|
|
}
|
|
#line 2671 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 415: // $@63: %empty
|
|
#line 1527 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("client-class", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 2680 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 416: // client_class: "client-class" $@63 ":" "constant string"
|
|
#line 1530 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr cls(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("client-class", cls);
|
|
ctx.leave();
|
|
}
|
|
#line 2690 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 417: // $@64: %empty
|
|
#line 1536 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("require-client-classes", ctx.loc2pos(yystack_[0].location));
|
|
ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("require-client-classes", c);
|
|
ctx.stack_.push_back(c);
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 2702 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 418: // require_client_classes: "require-client-classes" $@64 ":" list_strings
|
|
#line 1542 "dhcp4_parser.yy"
|
|
{
|
|
ctx.stack_.pop_back();
|
|
ctx.leave();
|
|
}
|
|
#line 2711 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 419: // reservations_global: "reservations-global" ":" "boolean"
|
|
#line 1547 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("reservations-global", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("reservations-global", b);
|
|
}
|
|
#line 2721 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 420: // reservations_in_subnet: "reservations-in-subnet" ":" "boolean"
|
|
#line 1553 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("reservations-in-subnet", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("reservations-in-subnet", b);
|
|
}
|
|
#line 2731 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 421: // reservations_out_of_pool: "reservations-out-of-pool" ":" "boolean"
|
|
#line 1559 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("reservations-out-of-pool", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("reservations-out-of-pool", b);
|
|
}
|
|
#line 2741 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 422: // $@65: %empty
|
|
#line 1565 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("reservation-mode", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.RESERVATION_MODE);
|
|
}
|
|
#line 2750 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 423: // reservation_mode: "reservation-mode" $@65 ":" hr_mode
|
|
#line 1568 "dhcp4_parser.yy"
|
|
{
|
|
ctx.stack_.back()->set("reservation-mode", yystack_[0].value.as < ElementPtr > ());
|
|
ctx.leave();
|
|
}
|
|
#line 2759 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 424: // hr_mode: "disabled"
|
|
#line 1573 "dhcp4_parser.yy"
|
|
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("disabled", ctx.loc2pos(yystack_[0].location))); }
|
|
#line 2765 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 425: // hr_mode: "out-of-pool"
|
|
#line 1574 "dhcp4_parser.yy"
|
|
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(yystack_[0].location))); }
|
|
#line 2771 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 426: // hr_mode: "global"
|
|
#line 1575 "dhcp4_parser.yy"
|
|
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("global", ctx.loc2pos(yystack_[0].location))); }
|
|
#line 2777 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 427: // hr_mode: "all"
|
|
#line 1576 "dhcp4_parser.yy"
|
|
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("all", ctx.loc2pos(yystack_[0].location))); }
|
|
#line 2783 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 428: // id: "id" ":" "integer"
|
|
#line 1579 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("id", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr id(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("id", id);
|
|
}
|
|
#line 2793 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 429: // $@66: %empty
|
|
#line 1587 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("shared-networks", ctx.loc2pos(yystack_[0].location));
|
|
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("shared-networks", l);
|
|
ctx.stack_.push_back(l);
|
|
ctx.enter(ctx.SHARED_NETWORK);
|
|
}
|
|
#line 2805 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 430: // shared_networks: "shared-networks" $@66 ":" "[" shared_networks_content "]"
|
|
#line 1593 "dhcp4_parser.yy"
|
|
{
|
|
ctx.stack_.pop_back();
|
|
ctx.leave();
|
|
}
|
|
#line 2814 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 435: // shared_networks_list: shared_networks_list ","
|
|
#line 1606 "dhcp4_parser.yy"
|
|
{
|
|
ctx.warnAboutExtraCommas(yystack_[0].location);
|
|
}
|
|
#line 2822 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 436: // $@67: %empty
|
|
#line 1611 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->add(m);
|
|
ctx.stack_.push_back(m);
|
|
}
|
|
#line 2832 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 437: // shared_network: "{" $@67 shared_network_params "}"
|
|
#line 1615 "dhcp4_parser.yy"
|
|
{
|
|
ctx.stack_.pop_back();
|
|
}
|
|
#line 2840 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 440: // shared_network_params: shared_network_params ","
|
|
#line 1621 "dhcp4_parser.yy"
|
|
{
|
|
ctx.warnAboutExtraCommas(yystack_[0].location);
|
|
}
|
|
#line 2848 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 481: // $@68: %empty
|
|
#line 1672 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("option-def", ctx.loc2pos(yystack_[0].location));
|
|
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("option-def", l);
|
|
ctx.stack_.push_back(l);
|
|
ctx.enter(ctx.OPTION_DEF);
|
|
}
|
|
#line 2860 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 482: // option_def_list: "option-def" $@68 ":" "[" option_def_list_content "]"
|
|
#line 1678 "dhcp4_parser.yy"
|
|
{
|
|
ctx.stack_.pop_back();
|
|
ctx.leave();
|
|
}
|
|
#line 2869 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 483: // $@69: %empty
|
|
#line 1686 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.push_back(m);
|
|
}
|
|
#line 2878 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 484: // sub_option_def_list: "{" $@69 option_def_list "}"
|
|
#line 1689 "dhcp4_parser.yy"
|
|
{
|
|
// parsing completed
|
|
}
|
|
#line 2886 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 489: // not_empty_option_def_list: not_empty_option_def_list ","
|
|
#line 1701 "dhcp4_parser.yy"
|
|
{
|
|
ctx.warnAboutExtraCommas(yystack_[0].location);
|
|
}
|
|
#line 2894 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 490: // $@70: %empty
|
|
#line 1708 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->add(m);
|
|
ctx.stack_.push_back(m);
|
|
}
|
|
#line 2904 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 491: // option_def_entry: "{" $@70 option_def_params "}"
|
|
#line 1712 "dhcp4_parser.yy"
|
|
{
|
|
// The name, code and type option def parameters are required.
|
|
ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
|
|
ctx.require("code", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
|
|
ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
|
|
ctx.stack_.pop_back();
|
|
}
|
|
#line 2916 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 492: // $@71: %empty
|
|
#line 1723 "dhcp4_parser.yy"
|
|
{
|
|
// Parse the option-def list entry map
|
|
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.push_back(m);
|
|
}
|
|
#line 2926 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 493: // sub_option_def: "{" $@71 option_def_params "}"
|
|
#line 1727 "dhcp4_parser.yy"
|
|
{
|
|
// The name, code and type option def parameters are required.
|
|
ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
|
|
ctx.require("code", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
|
|
ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
|
|
// parsing completed
|
|
}
|
|
#line 2938 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 498: // not_empty_option_def_params: not_empty_option_def_params ","
|
|
#line 1743 "dhcp4_parser.yy"
|
|
{
|
|
ctx.warnAboutExtraCommas(yystack_[0].location);
|
|
}
|
|
#line 2946 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 510: // code: "code" ":" "integer"
|
|
#line 1762 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("code", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr code(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("code", code);
|
|
}
|
|
#line 2956 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 512: // $@72: %empty
|
|
#line 1770 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("type", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 2965 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 513: // option_def_type: "type" $@72 ":" "constant string"
|
|
#line 1773 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr prf(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("type", prf);
|
|
ctx.leave();
|
|
}
|
|
#line 2975 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 514: // $@73: %empty
|
|
#line 1779 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("record-types", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 2984 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 515: // option_def_record_types: "record-types" $@73 ":" "constant string"
|
|
#line 1782 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr rtypes(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("record-types", rtypes);
|
|
ctx.leave();
|
|
}
|
|
#line 2994 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 516: // $@74: %empty
|
|
#line 1788 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("space", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 3003 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 517: // space: "space" $@74 ":" "constant string"
|
|
#line 1791 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr space(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("space", space);
|
|
ctx.leave();
|
|
}
|
|
#line 3013 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 519: // $@75: %empty
|
|
#line 1799 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("encapsulate", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 3022 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 520: // option_def_encapsulate: "encapsulate" $@75 ":" "constant string"
|
|
#line 1802 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr encap(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("encapsulate", encap);
|
|
ctx.leave();
|
|
}
|
|
#line 3032 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 521: // option_def_array: "array" ":" "boolean"
|
|
#line 1808 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("array", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr array(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("array", array);
|
|
}
|
|
#line 3042 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 522: // $@76: %empty
|
|
#line 1818 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("option-data", ctx.loc2pos(yystack_[0].location));
|
|
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("option-data", l);
|
|
ctx.stack_.push_back(l);
|
|
ctx.enter(ctx.OPTION_DATA);
|
|
}
|
|
#line 3054 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 523: // option_data_list: "option-data" $@76 ":" "[" option_data_list_content "]"
|
|
#line 1824 "dhcp4_parser.yy"
|
|
{
|
|
ctx.stack_.pop_back();
|
|
ctx.leave();
|
|
}
|
|
#line 3063 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 528: // not_empty_option_data_list: not_empty_option_data_list ","
|
|
#line 1839 "dhcp4_parser.yy"
|
|
{
|
|
ctx.warnAboutExtraCommas(yystack_[0].location);
|
|
}
|
|
#line 3071 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 529: // $@77: %empty
|
|
#line 1846 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->add(m);
|
|
ctx.stack_.push_back(m);
|
|
}
|
|
#line 3081 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 530: // option_data_entry: "{" $@77 option_data_params "}"
|
|
#line 1850 "dhcp4_parser.yy"
|
|
{
|
|
/// @todo: the code or name parameters are required.
|
|
ctx.stack_.pop_back();
|
|
}
|
|
#line 3090 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 531: // $@78: %empty
|
|
#line 1858 "dhcp4_parser.yy"
|
|
{
|
|
// Parse the option-data list entry map
|
|
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.push_back(m);
|
|
}
|
|
#line 3100 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 532: // sub_option_data: "{" $@78 option_data_params "}"
|
|
#line 1862 "dhcp4_parser.yy"
|
|
{
|
|
/// @todo: the code or name parameters are required.
|
|
// parsing completed
|
|
}
|
|
#line 3109 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 537: // not_empty_option_data_params: not_empty_option_data_params ","
|
|
#line 1878 "dhcp4_parser.yy"
|
|
{
|
|
ctx.warnAboutExtraCommas(yystack_[0].location);
|
|
}
|
|
#line 3117 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 548: // $@79: %empty
|
|
#line 1898 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("data", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 3126 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 549: // option_data_data: "data" $@79 ":" "constant string"
|
|
#line 1901 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr data(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("data", data);
|
|
ctx.leave();
|
|
}
|
|
#line 3136 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 552: // option_data_csv_format: "csv-format" ":" "boolean"
|
|
#line 1911 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("csv-format", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr space(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("csv-format", space);
|
|
}
|
|
#line 3146 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 553: // option_data_always_send: "always-send" ":" "boolean"
|
|
#line 1917 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("always-send", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr persist(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("always-send", persist);
|
|
}
|
|
#line 3156 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 554: // $@80: %empty
|
|
#line 1926 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("pools", ctx.loc2pos(yystack_[0].location));
|
|
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("pools", l);
|
|
ctx.stack_.push_back(l);
|
|
ctx.enter(ctx.POOLS);
|
|
}
|
|
#line 3168 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 555: // pools_list: "pools" $@80 ":" "[" pools_list_content "]"
|
|
#line 1932 "dhcp4_parser.yy"
|
|
{
|
|
ctx.stack_.pop_back();
|
|
ctx.leave();
|
|
}
|
|
#line 3177 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 560: // not_empty_pools_list: not_empty_pools_list ","
|
|
#line 1945 "dhcp4_parser.yy"
|
|
{
|
|
ctx.warnAboutExtraCommas(yystack_[0].location);
|
|
}
|
|
#line 3185 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 561: // $@81: %empty
|
|
#line 1950 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->add(m);
|
|
ctx.stack_.push_back(m);
|
|
}
|
|
#line 3195 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 562: // pool_list_entry: "{" $@81 pool_params "}"
|
|
#line 1954 "dhcp4_parser.yy"
|
|
{
|
|
// The pool parameter is required.
|
|
ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
|
|
ctx.stack_.pop_back();
|
|
}
|
|
#line 3205 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 563: // $@82: %empty
|
|
#line 1960 "dhcp4_parser.yy"
|
|
{
|
|
// Parse the pool list entry map
|
|
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.push_back(m);
|
|
}
|
|
#line 3215 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 564: // sub_pool4: "{" $@82 pool_params "}"
|
|
#line 1964 "dhcp4_parser.yy"
|
|
{
|
|
// The pool parameter is required.
|
|
ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
|
|
// parsing completed
|
|
}
|
|
#line 3225 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 567: // pool_params: pool_params ","
|
|
#line 1972 "dhcp4_parser.yy"
|
|
{
|
|
ctx.warnAboutExtraCommas(yystack_[0].location);
|
|
}
|
|
#line 3233 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 575: // $@83: %empty
|
|
#line 1986 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("pool", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 3242 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 576: // pool_entry: "pool" $@83 ":" "constant string"
|
|
#line 1989 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr pool(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("pool", pool);
|
|
ctx.leave();
|
|
}
|
|
#line 3252 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 577: // $@84: %empty
|
|
#line 1995 "dhcp4_parser.yy"
|
|
{
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 3260 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 578: // user_context: "user-context" $@84 ":" map_value
|
|
#line 1997 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr parent = ctx.stack_.back();
|
|
ElementPtr user_context = yystack_[0].value.as < ElementPtr > ();
|
|
ConstElementPtr old = parent->get("user-context");
|
|
|
|
// Handle already existing user context
|
|
if (old) {
|
|
// Check if it was a comment or a duplicate
|
|
if ((old->size() != 1) || !old->contains("comment")) {
|
|
std::stringstream msg;
|
|
msg << "duplicate user-context entries (previous at "
|
|
<< old->getPosition().str() << ")";
|
|
error(yystack_[3].location, msg.str());
|
|
}
|
|
// Merge the comment
|
|
user_context->set("comment", old->get("comment"));
|
|
}
|
|
|
|
// Set the user context
|
|
parent->set("user-context", user_context);
|
|
ctx.leave();
|
|
}
|
|
#line 3287 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 579: // $@85: %empty
|
|
#line 2020 "dhcp4_parser.yy"
|
|
{
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 3295 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 580: // comment: "comment" $@85 ":" "constant string"
|
|
#line 2022 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr parent = ctx.stack_.back();
|
|
ElementPtr user_context(new MapElement(ctx.loc2pos(yystack_[3].location)));
|
|
ElementPtr comment(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
user_context->set("comment", comment);
|
|
|
|
// Handle already existing user context
|
|
ConstElementPtr old = parent->get("user-context");
|
|
if (old) {
|
|
// Check for duplicate comment
|
|
if (old->contains("comment")) {
|
|
std::stringstream msg;
|
|
msg << "duplicate user-context/comment entries (previous at "
|
|
<< old->getPosition().str() << ")";
|
|
error(yystack_[3].location, msg.str());
|
|
}
|
|
// Merge the user context in the comment
|
|
merge(user_context, old);
|
|
}
|
|
|
|
// Set the user context
|
|
parent->set("user-context", user_context);
|
|
ctx.leave();
|
|
}
|
|
#line 3324 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 581: // $@86: %empty
|
|
#line 2050 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("reservations", ctx.loc2pos(yystack_[0].location));
|
|
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("reservations", l);
|
|
ctx.stack_.push_back(l);
|
|
ctx.enter(ctx.RESERVATIONS);
|
|
}
|
|
#line 3336 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 582: // reservations: "reservations" $@86 ":" "[" reservations_list "]"
|
|
#line 2056 "dhcp4_parser.yy"
|
|
{
|
|
ctx.stack_.pop_back();
|
|
ctx.leave();
|
|
}
|
|
#line 3345 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 587: // not_empty_reservations_list: not_empty_reservations_list ","
|
|
#line 2067 "dhcp4_parser.yy"
|
|
{
|
|
ctx.warnAboutExtraCommas(yystack_[0].location);
|
|
}
|
|
#line 3353 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 588: // $@87: %empty
|
|
#line 2072 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->add(m);
|
|
ctx.stack_.push_back(m);
|
|
}
|
|
#line 3363 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 589: // reservation: "{" $@87 reservation_params "}"
|
|
#line 2076 "dhcp4_parser.yy"
|
|
{
|
|
/// @todo: an identifier parameter is required.
|
|
ctx.stack_.pop_back();
|
|
}
|
|
#line 3372 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 590: // $@88: %empty
|
|
#line 2081 "dhcp4_parser.yy"
|
|
{
|
|
// Parse the reservations list entry map
|
|
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.push_back(m);
|
|
}
|
|
#line 3382 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 591: // sub_reservation: "{" $@88 reservation_params "}"
|
|
#line 2085 "dhcp4_parser.yy"
|
|
{
|
|
/// @todo: an identifier parameter is required.
|
|
// parsing completed
|
|
}
|
|
#line 3391 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 596: // not_empty_reservation_params: not_empty_reservation_params ","
|
|
#line 2096 "dhcp4_parser.yy"
|
|
{
|
|
ctx.warnAboutExtraCommas(yystack_[0].location);
|
|
}
|
|
#line 3399 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 612: // $@89: %empty
|
|
#line 2119 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("next-server", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 3408 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 613: // next_server: "next-server" $@89 ":" "constant string"
|
|
#line 2122 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr next_server(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("next-server", next_server);
|
|
ctx.leave();
|
|
}
|
|
#line 3418 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 614: // $@90: %empty
|
|
#line 2128 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("server-hostname", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 3427 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 615: // server_hostname: "server-hostname" $@90 ":" "constant string"
|
|
#line 2131 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr srv(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("server-hostname", srv);
|
|
ctx.leave();
|
|
}
|
|
#line 3437 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 616: // $@91: %empty
|
|
#line 2137 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("boot-file-name", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 3446 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 617: // boot_file_name: "boot-file-name" $@91 ":" "constant string"
|
|
#line 2140 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr bootfile(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("boot-file-name", bootfile);
|
|
ctx.leave();
|
|
}
|
|
#line 3456 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 618: // $@92: %empty
|
|
#line 2146 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("ip-address", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 3465 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 619: // ip_address: "ip-address" $@92 ":" "constant string"
|
|
#line 2149 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr addr(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("ip-address", addr);
|
|
ctx.leave();
|
|
}
|
|
#line 3475 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 620: // $@93: %empty
|
|
#line 2155 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("ip-addresses", ctx.loc2pos(yystack_[0].location));
|
|
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("ip-addresses", l);
|
|
ctx.stack_.push_back(l);
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 3487 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 621: // ip_addresses: "ip-addresses" $@93 ":" list_strings
|
|
#line 2161 "dhcp4_parser.yy"
|
|
{
|
|
ctx.stack_.pop_back();
|
|
ctx.leave();
|
|
}
|
|
#line 3496 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 622: // $@94: %empty
|
|
#line 2166 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("duid", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 3505 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 623: // duid: "duid" $@94 ":" "constant string"
|
|
#line 2169 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr d(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("duid", d);
|
|
ctx.leave();
|
|
}
|
|
#line 3515 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 624: // $@95: %empty
|
|
#line 2175 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("hw-address", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 3524 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 625: // hw_address: "hw-address" $@95 ":" "constant string"
|
|
#line 2178 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr hw(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("hw-address", hw);
|
|
ctx.leave();
|
|
}
|
|
#line 3534 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 626: // $@96: %empty
|
|
#line 2184 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("client-id", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 3543 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 627: // client_id_value: "client-id" $@96 ":" "constant string"
|
|
#line 2187 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr hw(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("client-id", hw);
|
|
ctx.leave();
|
|
}
|
|
#line 3553 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 628: // $@97: %empty
|
|
#line 2193 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("circuit-id", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 3562 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 629: // circuit_id_value: "circuit-id" $@97 ":" "constant string"
|
|
#line 2196 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr hw(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("circuit-id", hw);
|
|
ctx.leave();
|
|
}
|
|
#line 3572 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 630: // $@98: %empty
|
|
#line 2202 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("flex-id", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 3581 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 631: // flex_id_value: "flex-id" $@98 ":" "constant string"
|
|
#line 2205 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr hw(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("flex-id", hw);
|
|
ctx.leave();
|
|
}
|
|
#line 3591 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 632: // $@99: %empty
|
|
#line 2211 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("hostname", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 3600 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 633: // hostname: "hostname" $@99 ":" "constant string"
|
|
#line 2214 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr host(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("hostname", host);
|
|
ctx.leave();
|
|
}
|
|
#line 3610 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 634: // $@100: %empty
|
|
#line 2220 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location));
|
|
ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("client-classes", c);
|
|
ctx.stack_.push_back(c);
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 3622 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 635: // reservation_client_classes: "client-classes" $@100 ":" list_strings
|
|
#line 2226 "dhcp4_parser.yy"
|
|
{
|
|
ctx.stack_.pop_back();
|
|
ctx.leave();
|
|
}
|
|
#line 3631 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 636: // $@101: %empty
|
|
#line 2234 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("relay", ctx.loc2pos(yystack_[0].location));
|
|
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("relay", m);
|
|
ctx.stack_.push_back(m);
|
|
ctx.enter(ctx.RELAY);
|
|
}
|
|
#line 3643 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 637: // relay: "relay" $@101 ":" "{" relay_map "}"
|
|
#line 2240 "dhcp4_parser.yy"
|
|
{
|
|
ctx.stack_.pop_back();
|
|
ctx.leave();
|
|
}
|
|
#line 3652 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 640: // $@102: %empty
|
|
#line 2252 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location));
|
|
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("client-classes", l);
|
|
ctx.stack_.push_back(l);
|
|
ctx.enter(ctx.CLIENT_CLASSES);
|
|
}
|
|
#line 3664 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 641: // client_classes: "client-classes" $@102 ":" "[" client_classes_list "]"
|
|
#line 2258 "dhcp4_parser.yy"
|
|
{
|
|
ctx.stack_.pop_back();
|
|
ctx.leave();
|
|
}
|
|
#line 3673 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 644: // client_classes_list: client_classes_list ","
|
|
#line 2265 "dhcp4_parser.yy"
|
|
{
|
|
ctx.warnAboutExtraCommas(yystack_[0].location);
|
|
}
|
|
#line 3681 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 645: // $@103: %empty
|
|
#line 2270 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->add(m);
|
|
ctx.stack_.push_back(m);
|
|
}
|
|
#line 3691 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 646: // client_class_entry: "{" $@103 client_class_params "}"
|
|
#line 2274 "dhcp4_parser.yy"
|
|
{
|
|
// The name client class parameter is required.
|
|
ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
|
|
ctx.stack_.pop_back();
|
|
}
|
|
#line 3701 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 651: // not_empty_client_class_params: not_empty_client_class_params ","
|
|
#line 2286 "dhcp4_parser.yy"
|
|
{
|
|
ctx.warnAboutExtraCommas(yystack_[0].location);
|
|
}
|
|
#line 3709 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 667: // $@104: %empty
|
|
#line 2309 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("test", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 3718 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 668: // client_class_test: "test" $@104 ":" "constant string"
|
|
#line 2312 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr test(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("test", test);
|
|
ctx.leave();
|
|
}
|
|
#line 3728 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 669: // only_if_required: "only-if-required" ":" "boolean"
|
|
#line 2318 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("only-if-required", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("only-if-required", b);
|
|
}
|
|
#line 3738 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 670: // dhcp4o6_port: "dhcp4o6-port" ":" "integer"
|
|
#line 2326 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("dhcp4o6-port", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr time(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("dhcp4o6-port", time);
|
|
}
|
|
#line 3748 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 671: // $@105: %empty
|
|
#line 2334 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("control-socket", ctx.loc2pos(yystack_[0].location));
|
|
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("control-socket", m);
|
|
ctx.stack_.push_back(m);
|
|
ctx.enter(ctx.CONTROL_SOCKET);
|
|
}
|
|
#line 3760 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 672: // control_socket: "control-socket" $@105 ":" "{" control_socket_params "}"
|
|
#line 2340 "dhcp4_parser.yy"
|
|
{
|
|
ctx.stack_.pop_back();
|
|
ctx.leave();
|
|
}
|
|
#line 3769 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 675: // control_socket_params: control_socket_params ","
|
|
#line 2347 "dhcp4_parser.yy"
|
|
{
|
|
ctx.warnAboutExtraCommas(yystack_[0].location);
|
|
}
|
|
#line 3777 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 681: // $@106: %empty
|
|
#line 2359 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("socket-type", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 3786 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 682: // control_socket_type: "socket-type" $@106 ":" "constant string"
|
|
#line 2362 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr stype(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("socket-type", stype);
|
|
ctx.leave();
|
|
}
|
|
#line 3796 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 683: // $@107: %empty
|
|
#line 2368 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("socket-name", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 3805 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 684: // control_socket_name: "socket-name" $@107 ":" "constant string"
|
|
#line 2371 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr name(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("socket-name", name);
|
|
ctx.leave();
|
|
}
|
|
#line 3815 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 685: // $@108: %empty
|
|
#line 2380 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("dhcp-queue-control", ctx.loc2pos(yystack_[0].location));
|
|
ElementPtr qc(new MapElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("dhcp-queue-control", qc);
|
|
ctx.stack_.push_back(qc);
|
|
ctx.enter(ctx.DHCP_QUEUE_CONTROL);
|
|
}
|
|
#line 3827 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 686: // dhcp_queue_control: "dhcp-queue-control" $@108 ":" "{" queue_control_params "}"
|
|
#line 2386 "dhcp4_parser.yy"
|
|
{
|
|
// The enable queue parameter is required.
|
|
ctx.require("enable-queue", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
|
|
ctx.stack_.pop_back();
|
|
ctx.leave();
|
|
}
|
|
#line 3838 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 689: // queue_control_params: queue_control_params ","
|
|
#line 2395 "dhcp4_parser.yy"
|
|
{
|
|
ctx.warnAboutExtraCommas(yystack_[0].location);
|
|
}
|
|
#line 3846 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 696: // enable_queue: "enable-queue" ":" "boolean"
|
|
#line 2408 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("enable-queue", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("enable-queue", b);
|
|
}
|
|
#line 3856 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 697: // $@109: %empty
|
|
#line 2414 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("queue-type", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 3865 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 698: // queue_type: "queue-type" $@109 ":" "constant string"
|
|
#line 2417 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr qt(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("queue-type", qt);
|
|
ctx.leave();
|
|
}
|
|
#line 3875 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 699: // capacity: "capacity" ":" "integer"
|
|
#line 2423 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("capacity", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr c(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("capacity", c);
|
|
}
|
|
#line 3885 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 700: // $@110: %empty
|
|
#line 2429 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 3894 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 701: // arbitrary_map_entry: "constant string" $@110 ":" value
|
|
#line 2432 "dhcp4_parser.yy"
|
|
{
|
|
ctx.stack_.back()->set(yystack_[3].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ());
|
|
ctx.leave();
|
|
}
|
|
#line 3903 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 702: // $@111: %empty
|
|
#line 2439 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("dhcp-ddns", ctx.loc2pos(yystack_[0].location));
|
|
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("dhcp-ddns", m);
|
|
ctx.stack_.push_back(m);
|
|
ctx.enter(ctx.DHCP_DDNS);
|
|
}
|
|
#line 3915 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 703: // dhcp_ddns: "dhcp-ddns" $@111 ":" "{" dhcp_ddns_params "}"
|
|
#line 2445 "dhcp4_parser.yy"
|
|
{
|
|
// The enable updates DHCP DDNS parameter is required.
|
|
ctx.require("enable-updates", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
|
|
ctx.stack_.pop_back();
|
|
ctx.leave();
|
|
}
|
|
#line 3926 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 704: // $@112: %empty
|
|
#line 2452 "dhcp4_parser.yy"
|
|
{
|
|
// Parse the dhcp-ddns map
|
|
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.push_back(m);
|
|
}
|
|
#line 3936 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 705: // sub_dhcp_ddns: "{" $@112 dhcp_ddns_params "}"
|
|
#line 2456 "dhcp4_parser.yy"
|
|
{
|
|
// The enable updates DHCP DDNS parameter is required.
|
|
ctx.require("enable-updates", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
|
|
// parsing completed
|
|
}
|
|
#line 3946 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 708: // dhcp_ddns_params: dhcp_ddns_params ","
|
|
#line 2464 "dhcp4_parser.yy"
|
|
{
|
|
ctx.warnAboutExtraCommas(yystack_[0].location);
|
|
}
|
|
#line 3954 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 727: // enable_updates: "enable-updates" ":" "boolean"
|
|
#line 2489 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("enable-updates", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("enable-updates", b);
|
|
}
|
|
#line 3964 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 728: // $@113: %empty
|
|
#line 2495 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("server-ip", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 3973 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 729: // server_ip: "server-ip" $@113 ":" "constant string"
|
|
#line 2498 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("server-ip", s);
|
|
ctx.leave();
|
|
}
|
|
#line 3983 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 730: // server_port: "server-port" ":" "integer"
|
|
#line 2504 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("server-port", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("server-port", i);
|
|
}
|
|
#line 3993 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 731: // $@114: %empty
|
|
#line 2510 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("sender-ip", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 4002 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 732: // sender_ip: "sender-ip" $@114 ":" "constant string"
|
|
#line 2513 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("sender-ip", s);
|
|
ctx.leave();
|
|
}
|
|
#line 4012 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 733: // sender_port: "sender-port" ":" "integer"
|
|
#line 2519 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("sender-port", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("sender-port", i);
|
|
}
|
|
#line 4022 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 734: // max_queue_size: "max-queue-size" ":" "integer"
|
|
#line 2525 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("max-queue-size", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("max-queue-size", i);
|
|
}
|
|
#line 4032 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 735: // $@115: %empty
|
|
#line 2531 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("ncr-protocol", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NCR_PROTOCOL);
|
|
}
|
|
#line 4041 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 736: // ncr_protocol: "ncr-protocol" $@115 ":" ncr_protocol_value
|
|
#line 2534 "dhcp4_parser.yy"
|
|
{
|
|
ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as < ElementPtr > ());
|
|
ctx.leave();
|
|
}
|
|
#line 4050 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 737: // ncr_protocol_value: "udp"
|
|
#line 2540 "dhcp4_parser.yy"
|
|
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); }
|
|
#line 4056 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 738: // ncr_protocol_value: "tcp"
|
|
#line 2541 "dhcp4_parser.yy"
|
|
{ yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); }
|
|
#line 4062 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 739: // $@116: %empty
|
|
#line 2544 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("ncr-format", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NCR_FORMAT);
|
|
}
|
|
#line 4071 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 740: // ncr_format: "ncr-format" $@116 ":" "JSON"
|
|
#line 2547 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("ncr-format", json);
|
|
ctx.leave();
|
|
}
|
|
#line 4081 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 741: // $@117: %empty
|
|
#line 2554 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("qualifying-suffix", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 4090 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 742: // dep_qualifying_suffix: "qualifying-suffix" $@117 ":" "constant string"
|
|
#line 2557 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("qualifying-suffix", s);
|
|
ctx.leave();
|
|
}
|
|
#line 4100 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 743: // dep_override_no_update: "override-no-update" ":" "boolean"
|
|
#line 2564 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("override-no-update", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("override-no-update", b);
|
|
}
|
|
#line 4110 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 744: // dep_override_client_update: "override-client-update" ":" "boolean"
|
|
#line 2571 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("override-client-update", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("override-client-update", b);
|
|
}
|
|
#line 4120 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 745: // $@118: %empty
|
|
#line 2578 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("replace-client-name", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.REPLACE_CLIENT_NAME);
|
|
}
|
|
#line 4129 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 746: // dep_replace_client_name: "replace-client-name" $@118 ":" ddns_replace_client_name_value
|
|
#line 2581 "dhcp4_parser.yy"
|
|
{
|
|
ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as < ElementPtr > ());
|
|
ctx.leave();
|
|
}
|
|
#line 4138 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 747: // $@119: %empty
|
|
#line 2587 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("generated-prefix", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 4147 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 748: // dep_generated_prefix: "generated-prefix" $@119 ":" "constant string"
|
|
#line 2590 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("generated-prefix", s);
|
|
ctx.leave();
|
|
}
|
|
#line 4157 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 749: // $@120: %empty
|
|
#line 2597 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("hostname-char-set", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 4166 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 750: // dep_hostname_char_set: "hostname-char-set" $@120 ":" "constant string"
|
|
#line 2600 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("hostname-char-set", s);
|
|
ctx.leave();
|
|
}
|
|
#line 4176 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 751: // $@121: %empty
|
|
#line 2607 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("hostname-char-replacement", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 4185 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 752: // dep_hostname_char_replacement: "hostname-char-replacement" $@121 ":" "constant string"
|
|
#line 2610 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("hostname-char-replacement", s);
|
|
ctx.leave();
|
|
}
|
|
#line 4195 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 753: // $@122: %empty
|
|
#line 2619 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("config-control", ctx.loc2pos(yystack_[0].location));
|
|
ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("config-control", i);
|
|
ctx.stack_.push_back(i);
|
|
ctx.enter(ctx.CONFIG_CONTROL);
|
|
}
|
|
#line 4207 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 754: // config_control: "config-control" $@122 ":" "{" config_control_params "}"
|
|
#line 2625 "dhcp4_parser.yy"
|
|
{
|
|
// No config control params are required
|
|
ctx.stack_.pop_back();
|
|
ctx.leave();
|
|
}
|
|
#line 4217 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 755: // $@123: %empty
|
|
#line 2631 "dhcp4_parser.yy"
|
|
{
|
|
// Parse the config-control map
|
|
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.push_back(m);
|
|
}
|
|
#line 4227 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 756: // sub_config_control: "{" $@123 config_control_params "}"
|
|
#line 2635 "dhcp4_parser.yy"
|
|
{
|
|
// No config_control params are required
|
|
// parsing completed
|
|
}
|
|
#line 4236 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 759: // config_control_params: config_control_params ","
|
|
#line 2643 "dhcp4_parser.yy"
|
|
{
|
|
ctx.warnAboutExtraCommas(yystack_[0].location);
|
|
}
|
|
#line 4244 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 762: // $@124: %empty
|
|
#line 2653 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("config-databases", ctx.loc2pos(yystack_[0].location));
|
|
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("config-databases", l);
|
|
ctx.stack_.push_back(l);
|
|
ctx.enter(ctx.CONFIG_DATABASE);
|
|
}
|
|
#line 4256 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 763: // config_databases: "config-databases" $@124 ":" "[" database_list "]"
|
|
#line 2659 "dhcp4_parser.yy"
|
|
{
|
|
ctx.stack_.pop_back();
|
|
ctx.leave();
|
|
}
|
|
#line 4265 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 764: // config_fetch_wait_time: "config-fetch-wait-time" ":" "integer"
|
|
#line 2664 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("config-fetch-wait-time", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("config-fetch-wait-time", value);
|
|
}
|
|
#line 4275 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 765: // $@125: %empty
|
|
#line 2672 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("loggers", ctx.loc2pos(yystack_[0].location));
|
|
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("loggers", l);
|
|
ctx.stack_.push_back(l);
|
|
ctx.enter(ctx.LOGGERS);
|
|
}
|
|
#line 4287 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 766: // loggers: "loggers" $@125 ":" "[" loggers_entries "]"
|
|
#line 2678 "dhcp4_parser.yy"
|
|
{
|
|
ctx.stack_.pop_back();
|
|
ctx.leave();
|
|
}
|
|
#line 4296 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 769: // loggers_entries: loggers_entries ","
|
|
#line 2687 "dhcp4_parser.yy"
|
|
{
|
|
ctx.warnAboutExtraCommas(yystack_[0].location);
|
|
}
|
|
#line 4304 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 770: // $@126: %empty
|
|
#line 2693 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->add(l);
|
|
ctx.stack_.push_back(l);
|
|
}
|
|
#line 4314 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 771: // logger_entry: "{" $@126 logger_params "}"
|
|
#line 2697 "dhcp4_parser.yy"
|
|
{
|
|
ctx.stack_.pop_back();
|
|
}
|
|
#line 4322 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 774: // logger_params: logger_params ","
|
|
#line 2703 "dhcp4_parser.yy"
|
|
{
|
|
ctx.warnAboutExtraCommas(yystack_[0].location);
|
|
}
|
|
#line 4330 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 782: // debuglevel: "debuglevel" ":" "integer"
|
|
#line 2717 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("debuglevel", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr dl(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("debuglevel", dl);
|
|
}
|
|
#line 4340 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 783: // $@127: %empty
|
|
#line 2723 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("severity", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 4349 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 784: // severity: "severity" $@127 ":" "constant string"
|
|
#line 2726 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("severity", sev);
|
|
ctx.leave();
|
|
}
|
|
#line 4359 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 785: // $@128: %empty
|
|
#line 2732 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("output_options", ctx.loc2pos(yystack_[0].location));
|
|
ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("output_options", l);
|
|
ctx.stack_.push_back(l);
|
|
ctx.enter(ctx.OUTPUT_OPTIONS);
|
|
}
|
|
#line 4371 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 786: // output_options_list: "output_options" $@128 ":" "[" output_options_list_content "]"
|
|
#line 2738 "dhcp4_parser.yy"
|
|
{
|
|
ctx.stack_.pop_back();
|
|
ctx.leave();
|
|
}
|
|
#line 4380 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 789: // output_options_list_content: output_options_list_content ","
|
|
#line 2745 "dhcp4_parser.yy"
|
|
{
|
|
ctx.warnAboutExtraCommas(yystack_[0].location);
|
|
}
|
|
#line 4388 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 790: // $@129: %empty
|
|
#line 2750 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->add(m);
|
|
ctx.stack_.push_back(m);
|
|
}
|
|
#line 4398 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 791: // output_entry: "{" $@129 output_params_list "}"
|
|
#line 2754 "dhcp4_parser.yy"
|
|
{
|
|
ctx.stack_.pop_back();
|
|
}
|
|
#line 4406 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 794: // output_params_list: output_params_list ","
|
|
#line 2760 "dhcp4_parser.yy"
|
|
{
|
|
ctx.warnAboutExtraCommas(yystack_[0].location);
|
|
}
|
|
#line 4414 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 800: // $@130: %empty
|
|
#line 2772 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("output", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 4423 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 801: // output: "output" $@130 ":" "constant string"
|
|
#line 2775 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("output", sev);
|
|
ctx.leave();
|
|
}
|
|
#line 4433 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 802: // flush: "flush" ":" "boolean"
|
|
#line 2781 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("flush", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr flush(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("flush", flush);
|
|
}
|
|
#line 4443 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 803: // maxsize: "maxsize" ":" "integer"
|
|
#line 2787 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("maxsize", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr maxsize(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("maxsize", maxsize);
|
|
}
|
|
#line 4453 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 804: // maxver: "maxver" ":" "integer"
|
|
#line 2793 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("maxver", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr maxver(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("maxver", maxver);
|
|
}
|
|
#line 4463 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 805: // $@131: %empty
|
|
#line 2799 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("pattern", ctx.loc2pos(yystack_[0].location));
|
|
ctx.enter(ctx.NO_KEYWORD);
|
|
}
|
|
#line 4472 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 806: // pattern: "pattern" $@131 ":" "constant string"
|
|
#line 2802 "dhcp4_parser.yy"
|
|
{
|
|
ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("pattern", sev);
|
|
ctx.leave();
|
|
}
|
|
#line 4482 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 807: // $@132: %empty
|
|
#line 2808 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("compatibility", ctx.loc2pos(yystack_[0].location));
|
|
ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("compatibility", i);
|
|
ctx.stack_.push_back(i);
|
|
ctx.enter(ctx.COMPATIBILITY);
|
|
}
|
|
#line 4494 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 808: // compatibility: "compatibility" $@132 ":" "{" compatibility_params "}"
|
|
#line 2814 "dhcp4_parser.yy"
|
|
{
|
|
ctx.stack_.pop_back();
|
|
ctx.leave();
|
|
}
|
|
#line 4503 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 811: // compatibility_params: compatibility_params ","
|
|
#line 2821 "dhcp4_parser.yy"
|
|
{
|
|
ctx.warnAboutExtraCommas(yystack_[0].location);
|
|
}
|
|
#line 4511 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
case 814: // lenient_option_parsing: "lenient-option-parsing" ":" "boolean"
|
|
#line 2830 "dhcp4_parser.yy"
|
|
{
|
|
ctx.unique("lenient-option-parsing", ctx.loc2pos(yystack_[2].location));
|
|
ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
|
|
ctx.stack_.back()->set("lenient-option-parsing", b);
|
|
}
|
|
#line 4521 "dhcp4_parser.cc"
|
|
break;
|
|
|
|
|
|
#line 4525 "dhcp4_parser.cc"
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
#if YY_EXCEPTIONS
|
|
catch (const syntax_error& yyexc)
|
|
{
|
|
YYCDEBUG << "Caught exception: " << yyexc.what() << '\n';
|
|
error (yyexc);
|
|
YYERROR;
|
|
}
|
|
#endif // YY_EXCEPTIONS
|
|
YY_SYMBOL_PRINT ("-> $$ =", yylhs);
|
|
yypop_ (yylen);
|
|
yylen = 0;
|
|
|
|
// Shift the result of the reduction.
|
|
yypush_ (YY_NULLPTR, YY_MOVE (yylhs));
|
|
}
|
|
goto yynewstate;
|
|
|
|
|
|
/*--------------------------------------.
|
|
| yyerrlab -- here on detecting error. |
|
|
`--------------------------------------*/
|
|
yyerrlab:
|
|
// If not already recovering from an error, report this error.
|
|
if (!yyerrstatus_)
|
|
{
|
|
++yynerrs_;
|
|
context yyctx (*this, yyla);
|
|
std::string msg = yysyntax_error_ (yyctx);
|
|
error (yyla.location, YY_MOVE (msg));
|
|
}
|
|
|
|
|
|
yyerror_range[1].location = yyla.location;
|
|
if (yyerrstatus_ == 3)
|
|
{
|
|
/* If just tried and failed to reuse lookahead token after an
|
|
error, discard it. */
|
|
|
|
// Return failure if at end of input.
|
|
if (yyla.kind () == symbol_kind::S_YYEOF)
|
|
YYABORT;
|
|
else if (!yyla.empty ())
|
|
{
|
|
yy_destroy_ ("Error: discarding", yyla);
|
|
yyla.clear ();
|
|
}
|
|
}
|
|
|
|
// Else will try to reuse lookahead token after shifting the error token.
|
|
goto yyerrlab1;
|
|
|
|
|
|
/*---------------------------------------------------.
|
|
| yyerrorlab -- error raised explicitly by YYERROR. |
|
|
`---------------------------------------------------*/
|
|
yyerrorlab:
|
|
/* Pacify compilers when the user code never invokes YYERROR and
|
|
the label yyerrorlab therefore never appears in user code. */
|
|
if (false)
|
|
YYERROR;
|
|
|
|
/* Do not reclaim the symbols of the rule whose action triggered
|
|
this YYERROR. */
|
|
yypop_ (yylen);
|
|
yylen = 0;
|
|
YY_STACK_PRINT ();
|
|
goto yyerrlab1;
|
|
|
|
|
|
/*-------------------------------------------------------------.
|
|
| yyerrlab1 -- common code for both syntax error and YYERROR. |
|
|
`-------------------------------------------------------------*/
|
|
yyerrlab1:
|
|
yyerrstatus_ = 3; // Each real token shifted decrements this.
|
|
// Pop stack until we find a state that shifts the error token.
|
|
for (;;)
|
|
{
|
|
yyn = yypact_[+yystack_[0].state];
|
|
if (!yy_pact_value_is_default_ (yyn))
|
|
{
|
|
yyn += symbol_kind::S_YYerror;
|
|
if (0 <= yyn && yyn <= yylast_
|
|
&& yycheck_[yyn] == symbol_kind::S_YYerror)
|
|
{
|
|
yyn = yytable_[yyn];
|
|
if (0 < yyn)
|
|
break;
|
|
}
|
|
}
|
|
|
|
// Pop the current state because it cannot handle the error token.
|
|
if (yystack_.size () == 1)
|
|
YYABORT;
|
|
|
|
yyerror_range[1].location = yystack_[0].location;
|
|
yy_destroy_ ("Error: popping", yystack_[0]);
|
|
yypop_ ();
|
|
YY_STACK_PRINT ();
|
|
}
|
|
{
|
|
stack_symbol_type error_token;
|
|
|
|
yyerror_range[2].location = yyla.location;
|
|
YYLLOC_DEFAULT (error_token.location, yyerror_range, 2);
|
|
|
|
// Shift the error token.
|
|
error_token.state = state_type (yyn);
|
|
yypush_ ("Shifting", YY_MOVE (error_token));
|
|
}
|
|
goto yynewstate;
|
|
|
|
|
|
/*-------------------------------------.
|
|
| yyacceptlab -- YYACCEPT comes here. |
|
|
`-------------------------------------*/
|
|
yyacceptlab:
|
|
yyresult = 0;
|
|
goto yyreturn;
|
|
|
|
|
|
/*-----------------------------------.
|
|
| yyabortlab -- YYABORT comes here. |
|
|
`-----------------------------------*/
|
|
yyabortlab:
|
|
yyresult = 1;
|
|
goto yyreturn;
|
|
|
|
|
|
/*-----------------------------------------------------.
|
|
| yyreturn -- parsing is finished, return the result. |
|
|
`-----------------------------------------------------*/
|
|
yyreturn:
|
|
if (!yyla.empty ())
|
|
yy_destroy_ ("Cleanup: discarding lookahead", yyla);
|
|
|
|
/* Do not reclaim the symbols of the rule whose action triggered
|
|
this YYABORT or YYACCEPT. */
|
|
yypop_ (yylen);
|
|
YY_STACK_PRINT ();
|
|
while (1 < yystack_.size ())
|
|
{
|
|
yy_destroy_ ("Cleanup: popping", yystack_[0]);
|
|
yypop_ ();
|
|
}
|
|
|
|
return yyresult;
|
|
}
|
|
#if YY_EXCEPTIONS
|
|
catch (...)
|
|
{
|
|
YYCDEBUG << "Exception caught: cleaning lookahead and stack\n";
|
|
// Do not try to display the values of the reclaimed symbols,
|
|
// as their printers might throw an exception.
|
|
if (!yyla.empty ())
|
|
yy_destroy_ (YY_NULLPTR, yyla);
|
|
|
|
while (1 < yystack_.size ())
|
|
{
|
|
yy_destroy_ (YY_NULLPTR, yystack_[0]);
|
|
yypop_ ();
|
|
}
|
|
throw;
|
|
}
|
|
#endif // YY_EXCEPTIONS
|
|
}
|
|
|
|
void
|
|
Dhcp4Parser::error (const syntax_error& yyexc)
|
|
{
|
|
error (yyexc.location, yyexc.what ());
|
|
}
|
|
|
|
/* Return YYSTR after stripping away unnecessary quotes and
|
|
backslashes, so that it's suitable for yyerror. The heuristic is
|
|
that double-quoting is unnecessary unless the string contains an
|
|
apostrophe, a comma, or backslash (other than backslash-backslash).
|
|
YYSTR is taken from yytname. */
|
|
std::string
|
|
Dhcp4Parser::yytnamerr_ (const char *yystr)
|
|
{
|
|
if (*yystr == '"')
|
|
{
|
|
std::string yyr;
|
|
char const *yyp = yystr;
|
|
|
|
for (;;)
|
|
switch (*++yyp)
|
|
{
|
|
case '\'':
|
|
case ',':
|
|
goto do_not_strip_quotes;
|
|
|
|
case '\\':
|
|
if (*++yyp != '\\')
|
|
goto do_not_strip_quotes;
|
|
else
|
|
goto append;
|
|
|
|
append:
|
|
default:
|
|
yyr += *yyp;
|
|
break;
|
|
|
|
case '"':
|
|
return yyr;
|
|
}
|
|
do_not_strip_quotes: ;
|
|
}
|
|
|
|
return yystr;
|
|
}
|
|
|
|
std::string
|
|
Dhcp4Parser::symbol_name (symbol_kind_type yysymbol)
|
|
{
|
|
return yytnamerr_ (yytname_[yysymbol]);
|
|
}
|
|
|
|
|
|
|
|
// Dhcp4Parser::context.
|
|
Dhcp4Parser::context::context (const Dhcp4Parser& yyparser, const symbol_type& yyla)
|
|
: yyparser_ (yyparser)
|
|
, yyla_ (yyla)
|
|
{}
|
|
|
|
int
|
|
Dhcp4Parser::context::expected_tokens (symbol_kind_type yyarg[], int yyargn) const
|
|
{
|
|
// Actual number of expected tokens
|
|
int yycount = 0;
|
|
|
|
const int yyn = yypact_[+yyparser_.yystack_[0].state];
|
|
if (!yy_pact_value_is_default_ (yyn))
|
|
{
|
|
/* Start YYX at -YYN if negative to avoid negative indexes in
|
|
YYCHECK. In other words, skip the first -YYN actions for
|
|
this state because they are default actions. */
|
|
const int yyxbegin = yyn < 0 ? -yyn : 0;
|
|
// Stay within bounds of both yycheck and yytname.
|
|
const int yychecklim = yylast_ - yyn + 1;
|
|
const int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
|
|
for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
|
|
if (yycheck_[yyx + yyn] == yyx && yyx != symbol_kind::S_YYerror
|
|
&& !yy_table_value_is_error_ (yytable_[yyx + yyn]))
|
|
{
|
|
if (!yyarg)
|
|
++yycount;
|
|
else if (yycount == yyargn)
|
|
return 0;
|
|
else
|
|
yyarg[yycount++] = YY_CAST (symbol_kind_type, yyx);
|
|
}
|
|
}
|
|
|
|
if (yyarg && yycount == 0 && 0 < yyargn)
|
|
yyarg[0] = symbol_kind::S_YYEMPTY;
|
|
return yycount;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int
|
|
Dhcp4Parser::yy_syntax_error_arguments_ (const context& yyctx,
|
|
symbol_kind_type yyarg[], int yyargn) const
|
|
{
|
|
/* There are many possibilities here to consider:
|
|
- If this state is a consistent state with a default action, then
|
|
the only way this function was invoked is if the default action
|
|
is an error action. In that case, don't check for expected
|
|
tokens because there are none.
|
|
- The only way there can be no lookahead present (in yyla) is
|
|
if this state is a consistent state with a default action.
|
|
Thus, detecting the absence of a lookahead is sufficient to
|
|
determine that there is no unexpected or expected token to
|
|
report. In that case, just report a simple "syntax error".
|
|
- Don't assume there isn't a lookahead just because this state is
|
|
a consistent state with a default action. There might have
|
|
been a previous inconsistent state, consistent state with a
|
|
non-default action, or user semantic action that manipulated
|
|
yyla. (However, yyla is currently not documented for users.)
|
|
- Of course, the expected token list depends on states to have
|
|
correct lookahead information, and it depends on the parser not
|
|
to perform extra reductions after fetching a lookahead from the
|
|
scanner and before detecting a syntax error. Thus, state merging
|
|
(from LALR or IELR) and default reductions corrupt the expected
|
|
token list. However, the list is correct for canonical LR with
|
|
one exception: it will still contain any token that will not be
|
|
accepted due to an error action in a later state.
|
|
*/
|
|
|
|
if (!yyctx.lookahead ().empty ())
|
|
{
|
|
if (yyarg)
|
|
yyarg[0] = yyctx.token ();
|
|
int yyn = yyctx.expected_tokens (yyarg ? yyarg + 1 : yyarg, yyargn - 1);
|
|
return yyn + 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
// Generate an error message.
|
|
std::string
|
|
Dhcp4Parser::yysyntax_error_ (const context& yyctx) const
|
|
{
|
|
// Its maximum.
|
|
enum { YYARGS_MAX = 5 };
|
|
// Arguments of yyformat.
|
|
symbol_kind_type yyarg[YYARGS_MAX];
|
|
int yycount = yy_syntax_error_arguments_ (yyctx, yyarg, YYARGS_MAX);
|
|
|
|
char const* yyformat = YY_NULLPTR;
|
|
switch (yycount)
|
|
{
|
|
#define YYCASE_(N, S) \
|
|
case N: \
|
|
yyformat = S; \
|
|
break
|
|
default: // Avoid compiler warnings.
|
|
YYCASE_ (0, YY_("syntax error"));
|
|
YYCASE_ (1, YY_("syntax error, unexpected %s"));
|
|
YYCASE_ (2, YY_("syntax error, unexpected %s, expecting %s"));
|
|
YYCASE_ (3, YY_("syntax error, unexpected %s, expecting %s or %s"));
|
|
YYCASE_ (4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
|
|
YYCASE_ (5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
|
|
#undef YYCASE_
|
|
}
|
|
|
|
std::string yyres;
|
|
// Argument number.
|
|
std::ptrdiff_t yyi = 0;
|
|
for (char const* yyp = yyformat; *yyp; ++yyp)
|
|
if (yyp[0] == '%' && yyp[1] == 's' && yyi < yycount)
|
|
{
|
|
yyres += symbol_name (yyarg[yyi++]);
|
|
++yyp;
|
|
}
|
|
else
|
|
yyres += *yyp;
|
|
return yyres;
|
|
}
|
|
|
|
|
|
const short Dhcp4Parser::yypact_ninf_ = -959;
|
|
|
|
const signed char Dhcp4Parser::yytable_ninf_ = -1;
|
|
|
|
const short
|
|
Dhcp4Parser::yypact_[] =
|
|
{
|
|
391, -959, -959, -959, -959, -959, -959, -959, -959, -959,
|
|
-959, -959, -959, -959, 28, 38, 26, 82, 92, 94,
|
|
110, 122, 161, 187, 201, 214, 225, 266, -959, -959,
|
|
-959, -959, -959, -959, -959, -959, -959, -959, -959, -959,
|
|
-959, -959, -959, -959, -959, -959, -959, -959, -959, -959,
|
|
-959, -959, -959, -959, -959, -959, -959, -959, -959, -959,
|
|
-959, -959, -959, -959, 38, -151, 186, 184, 36, 626,
|
|
-14, 67, -34, 252, 285, -92, 250, 171, -959, 275,
|
|
282, 288, 59, 286, -959, 41, -959, -959, -959, -959,
|
|
307, 313, 335, -959, -959, -959, -959, -959, -959, 338,
|
|
339, 343, 344, 349, 361, 362, 385, 387, 388, 413,
|
|
-959, 415, 418, 419, 421, 422, -959, -959, -959, 423,
|
|
424, 425, -959, -959, -959, 426, -959, -959, -959, -959,
|
|
427, 428, 429, -959, -959, -959, -959, -959, 430, -959,
|
|
-959, -959, -959, -959, -959, 431, 433, 434, -959, -959,
|
|
438, -959, 56, -959, -959, -959, -959, -959, -959, -959,
|
|
-959, -959, -959, -959, -959, -959, -959, -959, -959, -959,
|
|
-959, -959, -959, -959, -959, -959, -959, -959, -959, -959,
|
|
-959, -959, -959, -959, -959, -959, -959, -959, -959, -959,
|
|
-959, -959, -959, -959, -959, -959, -959, -959, -959, -959,
|
|
-959, -959, -959, -959, -959, -959, -959, -959, -959, -959,
|
|
-959, -959, -959, -959, -959, -959, -959, -959, -959, -959,
|
|
439, -959, 85, -959, -959, -959, -959, -959, -959, -959,
|
|
-959, -959, -959, -959, -959, -959, 440, -959, -959, -959,
|
|
-959, -959, -959, -959, -959, -959, -959, -959, -959, -959,
|
|
-959, -959, -959, -959, -959, -959, -959, -959, -959, -959,
|
|
-959, -959, -959, -959, 102, -959, -959, -959, -959, -959,
|
|
-959, -959, -959, -959, -959, -959, -959, -959, -959, -959,
|
|
-959, -959, -959, -959, -959, -959, -959, -959, -959, -959,
|
|
-959, -959, 105, -959, -959, -959, -959, -959, -959, -959,
|
|
-959, -959, -959, -959, -959, -959, -959, -959, -959, 293,
|
|
326, -959, -959, -959, -959, -959, -959, -959, -959, -959,
|
|
-959, -959, -959, 302, -959, -959, 441, -959, -959, -959,
|
|
442, -959, -959, 445, 444, -959, -959, -959, -959, -959,
|
|
-959, -959, -959, -959, -959, -959, -959, -959, 450, 452,
|
|
-959, -959, -959, -959, 449, 455, -959, -959, -959, -959,
|
|
-959, -959, -959, -959, -959, -959, -959, -959, 138, -959,
|
|
-959, -959, 457, -959, -959, 463, -959, 466, 468, -959,
|
|
-959, 469, 470, -959, -959, -959, -959, -959, -959, -959,
|
|
145, -959, -959, -959, -959, -959, -959, -959, -959, -959,
|
|
-959, -959, -959, -959, -959, -959, -959, -959, 471, 146,
|
|
-959, -959, -959, -959, 38, 38, -959, 260, 474, -959,
|
|
-959, 475, 482, 483, 287, 290, 291, 492, 493, 496,
|
|
499, 500, 501, 308, 311, 312, 314, 315, 319, 309,
|
|
321, 322, 327, 329, 512, 330, 331, 332, 333, 337,
|
|
513, 514, 529, 345, 350, 353, 533, 536, 537, 357,
|
|
541, 547, 554, 555, 360, 363, 367, 559, 566, 569,
|
|
570, 571, 390, 587, 588, 589, 590, 591, 592, 395,
|
|
396, 397, 596, 597, -959, 184, -959, 598, 599, 600,
|
|
403, 36, -959, 602, 603, 604, 605, 606, 607, 412,
|
|
609, 610, 611, 626, -959, 612, -14, -959, 613, 614,
|
|
615, 616, 618, 620, 621, 622, -959, 67, -959, 623,
|
|
624, 432, 625, 627, 630, 435, -959, 252, 631, 436,
|
|
443, -959, 285, 632, 636, -60, -959, 446, 637, 638,
|
|
447, 639, 451, 459, 640, 642, 448, 460, 645, 657,
|
|
659, 661, 250, -959, 662, 467, 171, -959, -959, -959,
|
|
664, 663, 665, 670, 671, -959, -959, -959, 472, 480,
|
|
481, 674, 686, 689, -959, -959, -959, -959, -959, -959,
|
|
-959, -959, -959, -959, -959, 497, -959, -959, -959, -959,
|
|
-959, -91, 507, 511, -959, -959, -959, 690, 707, 708,
|
|
-959, 709, 713, 516, 274, -959, -959, -959, 716, 717,
|
|
719, 726, 725, -959, 727, 731, 732, 734, 534, 543,
|
|
-959, -959, -959, 740, 739, -959, 742, 188, 60, -959,
|
|
-959, 549, 550, 551, 747, 556, 557, -959, 742, 558,
|
|
746, -959, 560, -959, 742, 561, 562, 563, 564, 565,
|
|
567, 568, -959, 572, 573, -959, 574, 575, 576, -959,
|
|
-959, 577, -959, -959, -959, 578, 713, -959, -959, 579,
|
|
580, -959, 581, -959, -959, 13, 465, -959, -959, -91,
|
|
582, 583, 584, -959, 749, -959, -959, 38, 184, 171,
|
|
36, 741, -959, -959, -959, 117, 117, 751, -959, -959,
|
|
-959, -959, -959, -959, -959, -959, -959, 761, 762, 763,
|
|
777, -959, -959, -959, -959, -959, -959, -959, -959, 80,
|
|
778, 779, 780, 263, -17, 75, 79, 250, -959, -959,
|
|
781, -146, -959, -959, -959, -959, -959, -959, -959, -959,
|
|
-959, -959, -959, 782, -959, -959, -959, -959, 205, -959,
|
|
-959, -959, -959, -959, -959, -959, -959, -959, -959, -959,
|
|
-959, -959, -959, -959, -959, -959, -959, -959, -959, -959,
|
|
-959, -959, -959, -959, -959, -959, -959, 751, -959, 173,
|
|
189, 215, -959, 222, -959, -959, -959, -959, -959, -959,
|
|
786, 787, 788, 789, 790, 791, 794, -959, 795, -959,
|
|
-959, -959, -959, -959, 226, -959, -959, -959, -959, -959,
|
|
-959, -959, -959, -959, -959, -959, -959, -959, -959, -959,
|
|
-959, -959, -959, -959, 228, -959, 796, 666, -959, -959,
|
|
797, 798, -959, -959, 799, 801, -959, -959, 800, 804,
|
|
-959, -959, 802, 806, -959, -959, -959, -959, -959, -959,
|
|
84, -959, -959, -959, -959, -959, -959, -959, 115, -959,
|
|
-959, 805, 807, -959, -959, 808, 809, -959, 811, 812,
|
|
813, 814, 815, 816, 262, -959, -959, -959, -959, -959,
|
|
-959, -959, 817, 818, 819, -959, 264, -959, -959, -959,
|
|
-959, -959, -959, -959, -959, -959, -959, -959, 268, -959,
|
|
-959, -959, 820, -959, 822, -959, -959, -959, 279, -959,
|
|
-959, -959, -959, -959, 295, -959, 125, -959, 823, -959,
|
|
296, -959, -959, 601, -959, 824, 810, -959, -959, -959,
|
|
-959, 821, 825, -959, -959, -959, 828, 741, -959, 829,
|
|
830, 831, 832, 628, 635, 641, 643, 644, 646, 647,
|
|
834, 648, 835, 836, 838, 839, 117, -959, -959, 117,
|
|
-959, 751, 626, -959, 761, 252, -959, 762, 285, -959,
|
|
763, 1225, -959, 777, 80, -959, 278, 778, -959, 67,
|
|
-959, 779, -92, -959, 780, 649, 650, 651, 652, 653,
|
|
654, 263, -959, 655, 656, 658, -17, -959, 851, 855,
|
|
75, -959, 660, 856, 667, 857, 79, -959, -959, 191,
|
|
781, -959, 668, -146, -959, -959, 858, 860, -14, -959,
|
|
782, 861, -959, -959, 669, -959, 351, 672, 673, 675,
|
|
-959, -959, -959, -959, -959, -959, -959, 365, -959, 676,
|
|
677, 678, 679, -959, 297, -959, 306, -959, 865, -959,
|
|
871, -959, -959, -959, -959, -959, -959, -959, -959, -959,
|
|
-959, -959, -959, -959, -959, -959, -959, -959, -959, -959,
|
|
-959, -959, -959, -959, -959, -959, -959, -959, -959, -959,
|
|
-959, -959, -959, -959, -959, 310, -959, -959, -959, -959,
|
|
-959, -959, -959, -959, -959, -959, -959, 862, -959, -959,
|
|
-959, -959, -959, -959, -959, -959, -959, -959, -959, -959,
|
|
872, 866, -959, -959, -959, -959, -959, 873, -959, 316,
|
|
-959, -959, -959, -959, -959, -959, -959, -959, -959, -959,
|
|
-959, -959, 683, 684, -959, -959, 685, -959, 38, -959,
|
|
-959, 881, -959, -959, -959, -959, -959, 317, -959, -959,
|
|
-959, -959, -959, -959, -959, -959, 687, 318, -959, 742,
|
|
-959, -959, -959, -959, -959, -959, -959, -959, -959, -959,
|
|
-959, -959, -959, -959, -959, -959, -959, -959, -959, -959,
|
|
1225, -959, 883, 688, -959, 278, -959, -959, -959, -959,
|
|
-959, -959, 884, 691, 885, 191, -959, -959, -959, -959,
|
|
-959, 693, -959, -959, 888, -959, 695, -959, -959, 889,
|
|
-959, -959, 144, -959, -38, 889, -959, -959, 893, 895,
|
|
896, -959, 325, -959, -959, -959, -959, -959, -959, -959,
|
|
898, 701, 710, 718, 904, -38, -959, 714, -959, -959,
|
|
-959, 720, -959, -959, -959
|
|
};
|
|
|
|
const short
|
|
Dhcp4Parser::yydefact_[] =
|
|
{
|
|
0, 2, 4, 6, 8, 10, 12, 14, 16, 18,
|
|
20, 22, 24, 26, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 1, 44,
|
|
36, 32, 31, 28, 29, 30, 35, 3, 33, 34,
|
|
59, 5, 65, 7, 189, 9, 355, 11, 563, 13,
|
|
590, 15, 483, 17, 492, 19, 531, 21, 317, 23,
|
|
704, 25, 755, 27, 46, 39, 0, 0, 0, 0,
|
|
0, 592, 0, 494, 533, 0, 0, 0, 48, 0,
|
|
47, 0, 0, 40, 61, 0, 63, 753, 177, 204,
|
|
0, 0, 0, 612, 614, 616, 202, 212, 214, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
145, 0, 0, 0, 0, 0, 154, 161, 163, 0,
|
|
0, 0, 346, 481, 522, 0, 429, 577, 579, 422,
|
|
0, 0, 0, 279, 640, 581, 308, 329, 0, 294,
|
|
671, 685, 702, 167, 169, 0, 0, 0, 765, 807,
|
|
0, 133, 0, 67, 70, 71, 72, 73, 74, 108,
|
|
109, 110, 111, 112, 75, 103, 132, 92, 93, 94,
|
|
116, 117, 118, 119, 120, 121, 122, 123, 114, 115,
|
|
124, 125, 126, 128, 129, 130, 78, 79, 100, 80,
|
|
81, 82, 127, 86, 87, 76, 105, 106, 107, 104,
|
|
77, 84, 85, 98, 99, 101, 95, 96, 97, 83,
|
|
88, 89, 90, 91, 102, 113, 131, 191, 193, 197,
|
|
0, 188, 0, 179, 182, 183, 184, 185, 186, 187,
|
|
407, 409, 411, 554, 405, 413, 0, 417, 415, 636,
|
|
404, 360, 361, 362, 363, 364, 388, 389, 390, 391,
|
|
392, 378, 379, 393, 394, 395, 396, 397, 398, 399,
|
|
400, 401, 402, 403, 0, 357, 367, 383, 384, 385,
|
|
368, 370, 371, 374, 375, 376, 373, 369, 365, 366,
|
|
386, 387, 372, 380, 381, 382, 377, 575, 574, 570,
|
|
571, 569, 0, 565, 568, 572, 573, 634, 622, 624,
|
|
628, 626, 632, 630, 618, 611, 605, 609, 610, 0,
|
|
593, 594, 606, 607, 608, 602, 597, 603, 599, 600,
|
|
601, 604, 598, 0, 512, 257, 0, 516, 514, 519,
|
|
0, 508, 509, 0, 495, 496, 499, 511, 500, 501,
|
|
502, 518, 503, 504, 505, 506, 507, 548, 0, 0,
|
|
546, 547, 550, 551, 0, 534, 535, 538, 539, 540,
|
|
541, 542, 543, 544, 545, 325, 327, 322, 0, 319,
|
|
323, 324, 0, 741, 728, 0, 731, 0, 0, 735,
|
|
739, 0, 0, 745, 747, 749, 751, 726, 724, 725,
|
|
0, 706, 709, 710, 711, 712, 713, 714, 715, 716,
|
|
721, 717, 718, 719, 720, 722, 723, 762, 0, 0,
|
|
757, 760, 761, 45, 50, 0, 37, 43, 0, 64,
|
|
60, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 58, 69, 66, 0, 0, 0,
|
|
0, 181, 190, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 359, 356, 0, 567, 564, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 591, 596, 484, 0,
|
|
0, 0, 0, 0, 0, 0, 493, 498, 0, 0,
|
|
0, 532, 537, 0, 0, 321, 318, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 708, 705, 0, 0, 759, 756, 49, 41,
|
|
0, 0, 0, 0, 0, 148, 149, 150, 0, 0,
|
|
0, 0, 0, 0, 134, 135, 136, 137, 138, 139,
|
|
140, 141, 142, 143, 144, 0, 172, 173, 151, 152,
|
|
153, 0, 0, 0, 165, 166, 171, 0, 0, 0,
|
|
147, 0, 0, 0, 0, 419, 420, 421, 0, 0,
|
|
0, 0, 0, 670, 0, 0, 0, 0, 0, 0,
|
|
174, 175, 176, 0, 0, 68, 0, 0, 0, 201,
|
|
180, 0, 0, 0, 0, 0, 0, 428, 0, 0,
|
|
0, 358, 0, 566, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 595, 0, 0, 510, 0, 0, 0, 521,
|
|
497, 0, 552, 553, 536, 0, 0, 320, 727, 0,
|
|
0, 730, 0, 733, 734, 0, 0, 743, 744, 0,
|
|
0, 0, 0, 707, 0, 764, 758, 0, 0, 0,
|
|
0, 0, 613, 615, 617, 0, 0, 216, 146, 156,
|
|
157, 158, 159, 160, 155, 162, 164, 348, 485, 524,
|
|
431, 38, 578, 580, 424, 425, 426, 427, 423, 0,
|
|
0, 583, 310, 0, 0, 0, 0, 0, 168, 170,
|
|
0, 0, 51, 192, 195, 196, 194, 199, 200, 198,
|
|
408, 410, 412, 556, 406, 414, 418, 416, 0, 576,
|
|
635, 623, 625, 629, 627, 633, 631, 619, 513, 258,
|
|
517, 515, 520, 549, 326, 328, 742, 729, 732, 737,
|
|
738, 736, 740, 746, 748, 750, 752, 216, 42, 0,
|
|
0, 0, 210, 0, 206, 209, 245, 250, 252, 254,
|
|
0, 0, 0, 0, 0, 0, 0, 265, 0, 271,
|
|
273, 275, 277, 244, 0, 223, 226, 227, 228, 229,
|
|
230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
|
|
240, 241, 242, 243, 0, 221, 0, 217, 218, 353,
|
|
0, 349, 350, 490, 0, 486, 487, 529, 0, 525,
|
|
526, 436, 0, 432, 433, 289, 290, 291, 292, 293,
|
|
0, 281, 284, 285, 286, 287, 288, 645, 0, 642,
|
|
588, 0, 584, 585, 315, 0, 311, 312, 0, 0,
|
|
0, 0, 0, 0, 0, 331, 334, 335, 336, 337,
|
|
338, 339, 0, 0, 0, 304, 0, 296, 299, 300,
|
|
301, 302, 303, 681, 683, 680, 678, 679, 0, 673,
|
|
676, 677, 0, 697, 0, 700, 693, 694, 0, 687,
|
|
690, 691, 692, 695, 0, 770, 0, 767, 0, 813,
|
|
0, 809, 812, 53, 561, 0, 557, 558, 620, 638,
|
|
639, 0, 0, 62, 754, 178, 0, 208, 205, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 225, 203, 213, 0,
|
|
215, 220, 0, 347, 352, 494, 482, 489, 533, 523,
|
|
528, 0, 430, 435, 283, 280, 647, 644, 641, 592,
|
|
582, 587, 0, 309, 314, 0, 0, 0, 0, 0,
|
|
0, 333, 330, 0, 0, 0, 298, 295, 0, 0,
|
|
675, 672, 0, 0, 0, 0, 689, 686, 703, 0,
|
|
769, 766, 0, 811, 808, 55, 0, 54, 0, 555,
|
|
560, 0, 637, 763, 0, 207, 0, 0, 0, 0,
|
|
256, 259, 260, 261, 262, 263, 264, 0, 270, 0,
|
|
0, 0, 0, 224, 0, 219, 0, 351, 0, 488,
|
|
0, 527, 480, 459, 460, 461, 444, 445, 464, 465,
|
|
466, 467, 468, 447, 448, 469, 470, 471, 472, 473,
|
|
474, 475, 476, 477, 478, 479, 441, 442, 443, 457,
|
|
458, 454, 455, 456, 453, 0, 438, 446, 462, 463,
|
|
449, 450, 451, 452, 434, 282, 667, 0, 662, 663,
|
|
664, 665, 666, 655, 656, 660, 661, 657, 658, 659,
|
|
0, 648, 649, 652, 653, 654, 643, 0, 586, 0,
|
|
313, 340, 341, 342, 343, 344, 345, 332, 305, 306,
|
|
307, 297, 0, 0, 674, 696, 0, 699, 0, 688,
|
|
785, 0, 783, 781, 775, 779, 780, 0, 772, 777,
|
|
778, 776, 768, 814, 810, 52, 57, 0, 559, 0,
|
|
211, 247, 248, 249, 246, 251, 253, 255, 267, 268,
|
|
269, 266, 272, 274, 276, 278, 222, 354, 491, 530,
|
|
440, 437, 0, 0, 646, 651, 589, 316, 682, 684,
|
|
698, 701, 0, 0, 0, 774, 771, 56, 562, 621,
|
|
439, 0, 669, 650, 0, 782, 0, 773, 668, 0,
|
|
784, 790, 0, 787, 0, 789, 786, 800, 0, 0,
|
|
0, 805, 0, 792, 795, 796, 797, 798, 799, 788,
|
|
0, 0, 0, 0, 0, 794, 791, 0, 802, 803,
|
|
804, 0, 793, 801, 806
|
|
};
|
|
|
|
const short
|
|
Dhcp4Parser::yypgoto_[] =
|
|
{
|
|
-959, -959, -959, -959, -959, -959, -959, -959, -959, -959,
|
|
-959, -959, -959, -959, -959, -54, -959, -560, -959, 271,
|
|
-959, -959, -959, -959, -959, -959, -617, -959, -959, -959,
|
|
-67, -959, -959, -959, -959, -959, -959, -959, 246, 477,
|
|
4, 10, 23, -40, -23, -12, 22, 25, 29, 33,
|
|
-959, -959, -959, -959, -959, 35, 40, 43, 45, 46,
|
|
47, -959, 261, 50, -959, 51, -959, 53, 57, 58,
|
|
-959, 61, -959, 63, -959, -959, -959, -959, -959, -959,
|
|
-959, 280, 461, -959, -959, -959, -959, -959, -959, -959,
|
|
-959, -959, -959, -959, -959, -959, -959, -959, -959, 32,
|
|
-959, -959, -959, -959, -959, -959, 196, -959, 16, -959,
|
|
-684, 34, -959, -959, -959, -959, -959, -959, -959, -959,
|
|
-959, -959, -33, -959, -959, -959, -959, -959, -959, -959,
|
|
-959, -959, -959, -959, -959, -959, -959, -959, -959, -959,
|
|
-959, -959, -959, -959, -959, 15, -959, -959, -959, -959,
|
|
-959, -959, -959, -959, -18, -959, -959, -959, -959, -959,
|
|
-959, -959, 19, -959, -959, -959, 55, 498, -959, -959,
|
|
-959, -959, -959, -959, -959, 52, -959, -959, -959, -959,
|
|
-959, -959, -958, -959, -959, -959, 74, -959, -959, -959,
|
|
83, 539, -959, -959, -959, -959, -959, -959, -959, -959,
|
|
-956, -959, -65, -959, 70, -959, 64, 65, 68, 69,
|
|
-959, -959, -959, -959, -959, -959, -959, 71, -959, -959,
|
|
-134, -46, -959, -959, -959, -959, -959, 81, -959, -959,
|
|
-959, 86, -959, 520, -959, -63, -959, -959, -959, -959,
|
|
-959, -42, -959, -959, -959, -959, -959, -35, -959, -959,
|
|
-959, 87, -959, -959, -959, 88, -959, 517, -959, -959,
|
|
-959, -959, -959, -959, -959, -959, -959, -959, -959, 30,
|
|
-959, -959, -959, 37, 546, -959, -959, -51, -959, -8,
|
|
-959, -39, -959, -959, -959, 72, -959, -959, -959, 89,
|
|
-959, 542, -55, -959, -15, -959, 3, -959, 323, -959,
|
|
-959, -959, -959, -959, -959, -959, -959, -959, -959, -959,
|
|
-959, -959, -959, -959, -959, -959, -947, -959, -959, -959,
|
|
-959, -959, 77, -959, -959, -959, -127, -959, -959, -959,
|
|
-959, -959, -959, -959, -959, 62, -959, -959, -959, -959,
|
|
-959, -959, -959, 54, -959, -959, -959, -959, -959, -959,
|
|
-959, -959, -959, -959, 334, 515, -959, -959, -959, -959,
|
|
-959, -959, -959, -959, -959, -959, -959, -959, -959, -959,
|
|
-959, -959, -959, -959, -959, -959, -959, -959, -959, -959,
|
|
-959, -959, -959, -959, -959, 374, 508, -959, -959, -959,
|
|
-959, -959, -959, 66, -959, -959, -130, -959, -959, -959,
|
|
-959, -959, -959, -149, -959, -959, -166, -959, -959, -959,
|
|
-959, -959, -959, -959, -959, -959, -959, 73, -959
|
|
};
|
|
|
|
const short
|
|
Dhcp4Parser::yydefgoto_[] =
|
|
{
|
|
0, 14, 15, 16, 17, 18, 19, 20, 21, 22,
|
|
23, 24, 25, 26, 27, 36, 37, 38, 65, 712,
|
|
82, 83, 39, 64, 79, 80, 733, 923, 1016, 1017,
|
|
803, 41, 66, 85, 418, 86, 43, 67, 152, 153,
|
|
154, 155, 156, 157, 158, 159, 160, 161, 162, 163,
|
|
164, 165, 444, 166, 167, 168, 169, 170, 171, 172,
|
|
173, 450, 704, 174, 451, 175, 452, 176, 177, 178,
|
|
477, 179, 478, 180, 181, 182, 183, 184, 185, 186,
|
|
422, 222, 223, 45, 68, 224, 487, 225, 488, 736,
|
|
226, 489, 739, 227, 187, 430, 188, 423, 783, 784,
|
|
785, 936, 189, 431, 190, 432, 826, 827, 828, 959,
|
|
804, 805, 806, 939, 1164, 807, 940, 808, 941, 809,
|
|
942, 810, 811, 520, 812, 813, 814, 815, 816, 817,
|
|
818, 950, 1171, 819, 820, 952, 821, 953, 822, 954,
|
|
823, 955, 191, 467, 850, 851, 852, 853, 854, 855,
|
|
856, 192, 473, 886, 887, 888, 889, 890, 193, 470,
|
|
865, 866, 867, 982, 59, 75, 368, 369, 370, 533,
|
|
371, 534, 194, 471, 874, 875, 876, 877, 878, 879,
|
|
880, 881, 195, 456, 830, 831, 832, 962, 47, 69,
|
|
264, 265, 266, 497, 267, 493, 268, 494, 269, 495,
|
|
270, 498, 271, 501, 272, 500, 196, 197, 198, 199,
|
|
463, 718, 277, 200, 460, 842, 843, 844, 971, 1085,
|
|
1086, 201, 457, 53, 72, 834, 835, 836, 965, 55,
|
|
73, 333, 334, 335, 336, 337, 338, 339, 519, 340,
|
|
523, 341, 522, 342, 343, 524, 344, 202, 458, 838,
|
|
839, 840, 968, 57, 74, 354, 355, 356, 357, 358,
|
|
528, 359, 360, 361, 362, 279, 496, 925, 926, 927,
|
|
1018, 49, 70, 292, 293, 294, 505, 203, 461, 204,
|
|
462, 205, 469, 861, 862, 863, 979, 51, 71, 309,
|
|
310, 311, 206, 427, 207, 428, 208, 429, 315, 515,
|
|
930, 1021, 316, 509, 317, 510, 318, 512, 319, 511,
|
|
320, 514, 321, 513, 322, 508, 286, 502, 931, 209,
|
|
468, 858, 859, 976, 1110, 1111, 1112, 1113, 1114, 1182,
|
|
1115, 210, 211, 474, 898, 899, 900, 998, 901, 999,
|
|
212, 475, 908, 909, 910, 911, 1003, 912, 913, 1005,
|
|
213, 476, 61, 76, 390, 391, 392, 393, 539, 394,
|
|
395, 541, 396, 397, 398, 544, 771, 399, 545, 400,
|
|
538, 401, 402, 403, 548, 404, 549, 405, 550, 406,
|
|
551, 214, 421, 63, 77, 409, 410, 411, 554, 412,
|
|
215, 482, 916, 917, 1009, 1147, 1148, 1149, 1150, 1194,
|
|
1151, 1192, 1212, 1213, 1214, 1222, 1223, 1224, 1230, 1225,
|
|
1226, 1227, 1228, 1234, 216, 483, 920, 921, 922
|
|
};
|
|
|
|
const short
|
|
Dhcp4Parser::yytable_[] =
|
|
{
|
|
151, 221, 240, 288, 305, 289, 331, 350, 367, 387,
|
|
78, 352, 824, 1077, 283, 1078, 312, 228, 280, 295,
|
|
307, 746, 345, 363, 1093, 388, 323, 750, 28, 244,
|
|
282, 769, 353, 40, 278, 291, 306, 365, 366, 918,
|
|
332, 351, 711, 29, 419, 30, 245, 31, 81, 420,
|
|
123, 217, 218, 150, 284, 219, 313, 246, 220, 485,
|
|
229, 281, 296, 308, 486, 346, 364, 416, 389, 365,
|
|
366, 124, 285, 241, 314, 699, 700, 701, 702, 242,
|
|
737, 738, 127, 128, 287, 127, 128, 974, 491, 42,
|
|
975, 247, 243, 492, 248, 93, 94, 95, 249, 44,
|
|
237, 46, 250, 238, 251, 503, 711, 150, 506, 252,
|
|
504, 703, 253, 507, 254, 255, 256, 48, 977, 257,
|
|
258, 978, 259, 882, 883, 884, 260, 261, 1010, 50,
|
|
262, 1011, 263, 273, 274, 127, 128, 275, 276, 1217,
|
|
290, 535, 1218, 1219, 1220, 1221, 536, 1215, 552, 556,
|
|
1216, 786, 124, 553, 557, 787, 788, 789, 790, 791,
|
|
792, 793, 794, 795, 796, 797, 127, 128, 52, 798,
|
|
799, 800, 801, 802, 127, 128, 485, 770, 127, 128,
|
|
297, 933, 150, 407, 408, 150, 298, 299, 300, 301,
|
|
302, 303, 556, 304, 54, 87, 84, 934, 88, 845,
|
|
846, 847, 848, 325, 849, 734, 735, 89, 56, 90,
|
|
91, 92, 93, 94, 95, 96, 97, 98, 491, 893,
|
|
894, 58, 1077, 935, 1078, 937, 902, 903, 904, 956,
|
|
938, 956, 60, 1093, 957, 150, 958, 32, 33, 34,
|
|
35, 99, 100, 101, 102, 103, 104, 105, 106, 107,
|
|
108, 109, 110, 111, 112, 113, 114, 115, 116, 117,
|
|
118, 119, 120, 121, 122, 991, 150, 996, 123, 124,
|
|
992, 1000, 997, 62, 150, 1044, 1001, 325, 905, 125,
|
|
126, 413, 1006, 127, 128, 414, 324, 1007, 129, 417,
|
|
127, 128, 415, 130, 131, 132, 133, 134, 552, 1013,
|
|
956, 516, 135, 1008, 1014, 1176, 93, 94, 95, 503,
|
|
518, 424, 136, 1180, 1177, 137, 150, 425, 1181, 535,
|
|
1195, 506, 138, 139, 1187, 1196, 1198, 140, 1235, 517,
|
|
141, 304, 928, 1236, 142, 99, 100, 101, 325, 426,
|
|
326, 327, 433, 434, 328, 329, 330, 435, 436, 127,
|
|
128, 127, 128, 437, 143, 144, 145, 146, 147, 148,
|
|
558, 559, 123, 124, 325, 438, 439, 1140, 149, 1141,
|
|
1142, 325, 347, 326, 327, 348, 349, 127, 128, 714,
|
|
715, 716, 717, 150, 127, 128, 1161, 1162, 1163, 440,
|
|
150, 441, 442, 1096, 1097, 868, 869, 870, 871, 872,
|
|
873, 372, 373, 374, 375, 376, 377, 378, 379, 380,
|
|
381, 382, 383, 384, 1168, 1169, 1170, 443, 151, 445,
|
|
385, 386, 446, 447, 221, 448, 449, 453, 454, 455,
|
|
459, 464, 465, 466, 472, 479, 240, 480, 481, 288,
|
|
228, 289, 484, 490, 499, 521, 525, 527, 283, 150,
|
|
305, 150, 280, 526, 529, 295, 530, 531, 532, 560,
|
|
331, 537, 312, 244, 282, 350, 307, 540, 278, 352,
|
|
542, 291, 543, 546, 547, 555, 345, 150, 561, 562,
|
|
245, 363, 306, 229, 150, 387, 563, 564, 284, 565,
|
|
353, 246, 566, 567, 332, 281, 568, 569, 296, 351,
|
|
570, 388, 313, 571, 572, 573, 285, 241, 574, 308,
|
|
580, 575, 576, 242, 577, 578, 585, 591, 592, 346,
|
|
314, 579, 581, 582, 364, 247, 243, 583, 248, 584,
|
|
586, 587, 249, 593, 588, 589, 250, 597, 251, 590,
|
|
598, 599, 1199, 252, 389, 601, 253, 594, 254, 255,
|
|
256, 602, 595, 257, 258, 596, 259, 600, 603, 604,
|
|
260, 261, 605, 608, 262, 606, 263, 273, 274, 607,
|
|
609, 275, 276, 610, 611, 612, 290, 1, 2, 3,
|
|
4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
|
|
613, 614, 615, 616, 617, 618, 619, 620, 621, 622,
|
|
623, 624, 626, 627, 628, 629, 631, 632, 633, 634,
|
|
635, 636, 637, 638, 639, 640, 642, 644, 645, 646,
|
|
647, 151, 648, 221, 649, 650, 651, 653, 654, 656,
|
|
772, 657, 655, 778, 658, 661, 665, 659, 662, 228,
|
|
666, 669, 670, 672, 675, 663, 676, 671, 668, 679,
|
|
677, 673, 91, 92, 93, 94, 95, 885, 895, 674,
|
|
387, 680, 678, 681, 919, 682, 684, 685, 687, 961,
|
|
688, 692, 689, 891, 896, 906, 388, 690, 691, 693,
|
|
694, 695, 229, 99, 100, 101, 102, 103, 104, 105,
|
|
106, 107, 108, 696, 697, 707, 698, 113, 114, 115,
|
|
116, 117, 118, 119, 120, 121, 705, 230, 231, 232,
|
|
706, 124, 708, 709, 710, 713, 892, 897, 907, 389,
|
|
30, 719, 720, 233, 721, 127, 128, 234, 235, 236,
|
|
129, 722, 723, 728, 724, 130, 131, 132, 725, 726,
|
|
237, 727, 729, 238, 135, 730, 731, 732, 740, 741,
|
|
742, 239, 743, 748, 777, 744, 745, 747, 825, 749,
|
|
751, 752, 753, 754, 755, 782, 756, 757, 829, 833,
|
|
837, 758, 759, 760, 761, 762, 763, 764, 766, 767,
|
|
768, 774, 775, 776, 841, 857, 860, 864, 915, 924,
|
|
943, 944, 945, 946, 947, 948, 143, 144, 949, 951,
|
|
1015, 964, 960, 963, 967, 966, 969, 970, 972, 973,
|
|
981, 980, 984, 1020, 983, 985, 986, 987, 988, 989,
|
|
990, 993, 994, 995, 1002, 150, 1004, 1012, 1030, 1022,
|
|
1019, 1023, 1024, 1026, 1027, 1028, 1029, 1031, 1037, 1039,
|
|
1040, 1032, 1041, 1042, 1034, 1033, 1035, 1036, 1038, 1121,
|
|
1122, 1123, 1124, 1125, 1126, 1132, 1129, 1128, 1130, 1133,
|
|
1136, 1138, 1135, 1156, 1155, 1159, 1183, 1137, 1160, 1185,
|
|
1153, 1165, 1166, 1178, 1167, 1172, 1173, 1174, 1175, 1179,
|
|
1184, 1186, 1188, 1189, 1190, 1193, 1197, 1201, 1204, 1206,
|
|
1202, 1205, 1208, 1209, 1210, 240, 1211, 1231, 331, 1232,
|
|
1233, 350, 1237, 1238, 1052, 352, 1079, 283, 1241, 1098,
|
|
1239, 280, 305, 1243, 345, 367, 1090, 363, 1240, 1244,
|
|
1088, 1107, 244, 282, 312, 1105, 353, 278, 307, 885,
|
|
1103, 1056, 332, 895, 779, 351, 1087, 765, 1076, 245,
|
|
773, 1104, 1143, 1102, 306, 891, 919, 284, 1057, 896,
|
|
246, 288, 630, 289, 281, 906, 1091, 346, 1145, 1058,
|
|
364, 1108, 625, 1089, 313, 285, 241, 295, 1106, 1025,
|
|
781, 308, 242, 932, 1092, 1053, 1144, 1045, 1131, 1109,
|
|
1099, 1054, 314, 291, 247, 243, 1100, 248, 892, 1095,
|
|
1043, 249, 897, 1059, 1055, 250, 1060, 251, 907, 1101,
|
|
1061, 1146, 252, 1120, 1062, 253, 1063, 254, 255, 256,
|
|
296, 1064, 257, 258, 1065, 259, 1066, 1067, 1068, 260,
|
|
261, 1069, 1070, 262, 1071, 263, 273, 274, 1072, 1073,
|
|
275, 276, 1074, 667, 1075, 1081, 1082, 1119, 1047, 1083,
|
|
1084, 1080, 641, 1127, 1094, 1046, 1200, 660, 1049, 664,
|
|
1158, 1048, 643, 1118, 1116, 1157, 1050, 1051, 1203, 652,
|
|
1139, 914, 1134, 780, 686, 1207, 1229, 683, 1117, 1242,
|
|
0, 929, 0, 0, 0, 0, 1152, 0, 0, 0,
|
|
0, 0, 0, 0, 1191, 0, 1154, 0, 290, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 1052, 0, 1079, 0, 0, 1098, 0,
|
|
0, 0, 0, 0, 0, 1090, 0, 0, 1143, 1088,
|
|
1107, 0, 0, 0, 1105, 0, 0, 0, 0, 1103,
|
|
1056, 0, 0, 0, 1145, 1087, 0, 1076, 0, 0,
|
|
1104, 0, 1102, 0, 0, 0, 0, 1057, 0, 0,
|
|
0, 0, 1144, 0, 0, 1091, 0, 0, 1058, 0,
|
|
1108, 0, 1089, 0, 0, 0, 0, 1106, 0, 0,
|
|
0, 0, 0, 1092, 1053, 0, 0, 1146, 1109, 1099,
|
|
1054, 0, 0, 0, 0, 1100, 0, 0, 0, 0,
|
|
0, 0, 1059, 1055, 0, 1060, 0, 0, 1101, 1061,
|
|
0, 0, 0, 1062, 0, 1063, 0, 0, 0, 0,
|
|
1064, 0, 0, 1065, 0, 1066, 1067, 1068, 0, 0,
|
|
1069, 1070, 0, 1071, 0, 0, 0, 1072, 1073, 0,
|
|
0, 1074, 0, 1075, 1081, 1082, 0, 0, 1083, 1084,
|
|
1080, 91, 92, 93, 94, 95, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 99, 100, 101, 102, 103, 104, 105, 106,
|
|
107, 108, 0, 0, 0, 0, 113, 114, 115, 116,
|
|
117, 118, 119, 120, 121, 122, 0, 0, 0, 0,
|
|
124, 325, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 127, 128, 0, 235, 0, 129,
|
|
0, 0, 0, 0, 130, 131, 132, 0, 0, 237,
|
|
0, 0, 238, 0, 0, 0, 0, 0, 0, 0,
|
|
239, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 143, 144, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0, 0, 150
|
|
};
|
|
|
|
const short
|
|
Dhcp4Parser::yycheck_[] =
|
|
{
|
|
67, 68, 69, 70, 71, 70, 73, 74, 75, 76,
|
|
64, 74, 696, 971, 69, 971, 71, 68, 69, 70,
|
|
71, 638, 73, 74, 971, 76, 72, 644, 0, 69,
|
|
69, 18, 74, 7, 69, 70, 71, 129, 130, 185,
|
|
73, 74, 602, 5, 3, 7, 69, 9, 199, 8,
|
|
84, 15, 16, 199, 69, 19, 71, 69, 22, 3,
|
|
68, 69, 70, 71, 8, 73, 74, 8, 76, 129,
|
|
130, 85, 69, 69, 71, 166, 167, 168, 169, 69,
|
|
20, 21, 99, 100, 98, 99, 100, 3, 3, 7,
|
|
6, 69, 69, 8, 69, 28, 29, 30, 69, 7,
|
|
114, 7, 69, 117, 69, 3, 666, 199, 3, 69,
|
|
8, 202, 69, 8, 69, 69, 69, 7, 3, 69,
|
|
69, 6, 69, 140, 141, 142, 69, 69, 3, 7,
|
|
69, 6, 69, 69, 69, 99, 100, 69, 69, 177,
|
|
70, 3, 180, 181, 182, 183, 8, 3, 3, 3,
|
|
6, 34, 85, 8, 8, 38, 39, 40, 41, 42,
|
|
43, 44, 45, 46, 47, 48, 99, 100, 7, 52,
|
|
53, 54, 55, 56, 99, 100, 3, 164, 99, 100,
|
|
113, 8, 199, 12, 13, 199, 119, 120, 121, 122,
|
|
123, 124, 3, 126, 7, 11, 10, 8, 14, 119,
|
|
120, 121, 122, 86, 124, 17, 18, 23, 7, 25,
|
|
26, 27, 28, 29, 30, 31, 32, 33, 3, 144,
|
|
145, 7, 1180, 8, 1180, 3, 147, 148, 149, 3,
|
|
8, 3, 7, 1180, 8, 199, 8, 199, 200, 201,
|
|
202, 57, 58, 59, 60, 61, 62, 63, 64, 65,
|
|
66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
|
|
76, 77, 78, 79, 80, 3, 199, 3, 84, 85,
|
|
8, 3, 8, 7, 199, 959, 8, 86, 199, 95,
|
|
96, 6, 3, 99, 100, 3, 34, 8, 104, 3,
|
|
99, 100, 4, 109, 110, 111, 112, 113, 3, 3,
|
|
3, 8, 118, 8, 8, 8, 28, 29, 30, 3,
|
|
8, 4, 128, 3, 8, 131, 199, 4, 8, 3,
|
|
3, 3, 138, 139, 8, 8, 8, 143, 3, 3,
|
|
146, 126, 127, 8, 150, 57, 58, 59, 86, 4,
|
|
88, 89, 4, 4, 92, 93, 94, 4, 4, 99,
|
|
100, 99, 100, 4, 170, 171, 172, 173, 174, 175,
|
|
414, 415, 84, 85, 86, 4, 4, 176, 184, 178,
|
|
179, 86, 87, 88, 89, 90, 91, 99, 100, 105,
|
|
106, 107, 108, 199, 99, 100, 35, 36, 37, 4,
|
|
199, 4, 4, 115, 116, 132, 133, 134, 135, 136,
|
|
137, 151, 152, 153, 154, 155, 156, 157, 158, 159,
|
|
160, 161, 162, 163, 49, 50, 51, 4, 485, 4,
|
|
170, 171, 4, 4, 491, 4, 4, 4, 4, 4,
|
|
4, 4, 4, 4, 4, 4, 503, 4, 4, 506,
|
|
491, 506, 4, 4, 4, 4, 4, 3, 503, 199,
|
|
517, 199, 503, 8, 4, 506, 4, 8, 3, 199,
|
|
527, 4, 517, 503, 503, 532, 517, 4, 503, 532,
|
|
4, 506, 4, 4, 4, 4, 527, 199, 4, 4,
|
|
503, 532, 517, 491, 199, 552, 4, 4, 503, 202,
|
|
532, 503, 202, 202, 527, 503, 4, 4, 506, 532,
|
|
4, 552, 517, 4, 4, 4, 503, 503, 200, 517,
|
|
201, 200, 200, 503, 200, 200, 4, 4, 4, 527,
|
|
517, 202, 201, 201, 532, 503, 503, 200, 503, 200,
|
|
200, 200, 503, 4, 202, 202, 503, 4, 503, 202,
|
|
4, 4, 1159, 503, 552, 4, 503, 202, 503, 503,
|
|
503, 4, 202, 503, 503, 202, 503, 200, 4, 4,
|
|
503, 503, 202, 4, 503, 202, 503, 503, 503, 202,
|
|
4, 503, 503, 4, 4, 4, 506, 186, 187, 188,
|
|
189, 190, 191, 192, 193, 194, 195, 196, 197, 198,
|
|
200, 4, 4, 4, 4, 4, 4, 202, 202, 202,
|
|
4, 4, 4, 4, 4, 202, 4, 4, 4, 4,
|
|
4, 4, 200, 4, 4, 4, 4, 4, 4, 4,
|
|
4, 688, 4, 690, 4, 4, 4, 4, 4, 4,
|
|
165, 4, 200, 687, 4, 4, 4, 202, 202, 690,
|
|
4, 4, 4, 4, 4, 202, 4, 200, 202, 4,
|
|
202, 200, 26, 27, 28, 29, 30, 724, 725, 200,
|
|
727, 4, 202, 4, 731, 4, 4, 200, 4, 3,
|
|
7, 199, 7, 724, 725, 726, 727, 7, 7, 199,
|
|
199, 7, 690, 57, 58, 59, 60, 61, 62, 63,
|
|
64, 65, 66, 7, 5, 5, 199, 71, 72, 73,
|
|
74, 75, 76, 77, 78, 79, 199, 81, 82, 83,
|
|
199, 85, 5, 5, 5, 199, 724, 725, 726, 727,
|
|
7, 5, 5, 97, 5, 99, 100, 101, 102, 103,
|
|
104, 5, 7, 199, 7, 109, 110, 111, 7, 7,
|
|
114, 7, 199, 117, 118, 5, 7, 5, 199, 199,
|
|
199, 125, 5, 7, 5, 199, 199, 199, 7, 199,
|
|
199, 199, 199, 199, 199, 24, 199, 199, 7, 7,
|
|
7, 199, 199, 199, 199, 199, 199, 199, 199, 199,
|
|
199, 199, 199, 199, 7, 7, 7, 7, 7, 7,
|
|
4, 4, 4, 4, 4, 4, 170, 171, 4, 4,
|
|
199, 3, 6, 6, 3, 6, 6, 3, 6, 3,
|
|
3, 6, 3, 3, 6, 4, 4, 4, 4, 4,
|
|
4, 4, 4, 4, 4, 199, 4, 4, 200, 8,
|
|
6, 6, 4, 4, 4, 4, 4, 202, 4, 4,
|
|
4, 200, 4, 4, 200, 202, 200, 200, 200, 200,
|
|
200, 200, 200, 200, 200, 4, 200, 202, 200, 4,
|
|
4, 4, 202, 3, 6, 4, 4, 200, 199, 3,
|
|
202, 199, 199, 8, 199, 199, 199, 199, 199, 8,
|
|
8, 8, 199, 199, 199, 4, 199, 4, 4, 4,
|
|
202, 200, 199, 5, 199, 962, 7, 4, 965, 4,
|
|
4, 968, 4, 202, 971, 968, 971, 962, 4, 976,
|
|
200, 962, 979, 199, 965, 982, 971, 968, 200, 199,
|
|
971, 976, 962, 962, 979, 976, 968, 962, 979, 996,
|
|
976, 971, 965, 1000, 688, 968, 971, 666, 971, 962,
|
|
679, 976, 1009, 976, 979, 996, 1013, 962, 971, 1000,
|
|
962, 1018, 491, 1018, 962, 1006, 971, 965, 1009, 971,
|
|
968, 976, 485, 971, 979, 962, 962, 1018, 976, 937,
|
|
690, 979, 962, 777, 971, 971, 1009, 961, 996, 976,
|
|
976, 971, 979, 1018, 962, 962, 976, 962, 996, 974,
|
|
956, 962, 1000, 971, 971, 962, 971, 962, 1006, 976,
|
|
971, 1009, 962, 984, 971, 962, 971, 962, 962, 962,
|
|
1018, 971, 962, 962, 971, 962, 971, 971, 971, 962,
|
|
962, 971, 971, 962, 971, 962, 962, 962, 971, 971,
|
|
962, 962, 971, 535, 971, 971, 971, 982, 964, 971,
|
|
971, 971, 503, 991, 973, 962, 1180, 527, 967, 532,
|
|
1020, 965, 506, 981, 977, 1018, 968, 970, 1185, 517,
|
|
1006, 727, 1000, 689, 556, 1195, 1215, 552, 979, 1235,
|
|
-1, 748, -1, -1, -1, -1, 1010, -1, -1, -1,
|
|
-1, -1, -1, -1, 1138, -1, 1013, -1, 1018, -1,
|
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
|
-1, -1, -1, 1180, -1, 1180, -1, -1, 1185, -1,
|
|
-1, -1, -1, -1, -1, 1180, -1, -1, 1195, 1180,
|
|
1185, -1, -1, -1, 1185, -1, -1, -1, -1, 1185,
|
|
1180, -1, -1, -1, 1195, 1180, -1, 1180, -1, -1,
|
|
1185, -1, 1185, -1, -1, -1, -1, 1180, -1, -1,
|
|
-1, -1, 1195, -1, -1, 1180, -1, -1, 1180, -1,
|
|
1185, -1, 1180, -1, -1, -1, -1, 1185, -1, -1,
|
|
-1, -1, -1, 1180, 1180, -1, -1, 1195, 1185, 1185,
|
|
1180, -1, -1, -1, -1, 1185, -1, -1, -1, -1,
|
|
-1, -1, 1180, 1180, -1, 1180, -1, -1, 1185, 1180,
|
|
-1, -1, -1, 1180, -1, 1180, -1, -1, -1, -1,
|
|
1180, -1, -1, 1180, -1, 1180, 1180, 1180, -1, -1,
|
|
1180, 1180, -1, 1180, -1, -1, -1, 1180, 1180, -1,
|
|
-1, 1180, -1, 1180, 1180, 1180, -1, -1, 1180, 1180,
|
|
1180, 26, 27, 28, 29, 30, -1, -1, -1, -1,
|
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
|
-1, -1, 57, 58, 59, 60, 61, 62, 63, 64,
|
|
65, 66, -1, -1, -1, -1, 71, 72, 73, 74,
|
|
75, 76, 77, 78, 79, 80, -1, -1, -1, -1,
|
|
85, 86, -1, -1, -1, -1, -1, -1, -1, -1,
|
|
-1, -1, -1, -1, 99, 100, -1, 102, -1, 104,
|
|
-1, -1, -1, -1, 109, 110, 111, -1, -1, 114,
|
|
-1, -1, 117, -1, -1, -1, -1, -1, -1, -1,
|
|
125, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
|
-1, -1, -1, -1, -1, 170, 171, -1, -1, -1,
|
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
|
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
|
-1, -1, -1, -1, 199
|
|
};
|
|
|
|
const short
|
|
Dhcp4Parser::yystos_[] =
|
|
{
|
|
0, 186, 187, 188, 189, 190, 191, 192, 193, 194,
|
|
195, 196, 197, 198, 204, 205, 206, 207, 208, 209,
|
|
210, 211, 212, 213, 214, 215, 216, 217, 0, 5,
|
|
7, 9, 199, 200, 201, 202, 218, 219, 220, 225,
|
|
7, 234, 7, 239, 7, 286, 7, 391, 7, 474,
|
|
7, 490, 7, 426, 7, 432, 7, 456, 7, 367,
|
|
7, 555, 7, 586, 226, 221, 235, 240, 287, 392,
|
|
475, 491, 427, 433, 457, 368, 556, 587, 218, 227,
|
|
228, 199, 223, 224, 10, 236, 238, 11, 14, 23,
|
|
25, 26, 27, 28, 29, 30, 31, 32, 33, 57,
|
|
58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
|
|
68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
|
|
78, 79, 80, 84, 85, 95, 96, 99, 100, 104,
|
|
109, 110, 111, 112, 113, 118, 128, 131, 138, 139,
|
|
143, 146, 150, 170, 171, 172, 173, 174, 175, 184,
|
|
199, 233, 241, 242, 243, 244, 245, 246, 247, 248,
|
|
249, 250, 251, 252, 253, 254, 256, 257, 258, 259,
|
|
260, 261, 262, 263, 266, 268, 270, 271, 272, 274,
|
|
276, 277, 278, 279, 280, 281, 282, 297, 299, 305,
|
|
307, 345, 354, 361, 375, 385, 409, 410, 411, 412,
|
|
416, 424, 450, 480, 482, 484, 495, 497, 499, 522,
|
|
534, 535, 543, 553, 584, 593, 617, 15, 16, 19,
|
|
22, 233, 284, 285, 288, 290, 293, 296, 480, 482,
|
|
81, 82, 83, 97, 101, 102, 103, 114, 117, 125,
|
|
233, 243, 244, 245, 246, 247, 248, 249, 250, 251,
|
|
252, 258, 259, 260, 261, 262, 263, 266, 268, 270,
|
|
271, 272, 274, 276, 393, 394, 395, 397, 399, 401,
|
|
403, 405, 407, 409, 410, 411, 412, 415, 450, 468,
|
|
480, 482, 484, 495, 497, 499, 519, 98, 233, 405,
|
|
407, 450, 476, 477, 478, 480, 482, 113, 119, 120,
|
|
121, 122, 123, 124, 126, 233, 450, 480, 482, 492,
|
|
493, 494, 495, 497, 499, 501, 505, 507, 509, 511,
|
|
513, 515, 517, 424, 34, 86, 88, 89, 92, 93,
|
|
94, 233, 325, 434, 435, 436, 437, 438, 439, 440,
|
|
442, 444, 446, 447, 449, 480, 482, 87, 90, 91,
|
|
233, 325, 438, 444, 458, 459, 460, 461, 462, 464,
|
|
465, 466, 467, 480, 482, 129, 130, 233, 369, 370,
|
|
371, 373, 151, 152, 153, 154, 155, 156, 157, 158,
|
|
159, 160, 161, 162, 163, 170, 171, 233, 480, 482,
|
|
557, 558, 559, 560, 562, 563, 565, 566, 567, 570,
|
|
572, 574, 575, 576, 578, 580, 582, 12, 13, 588,
|
|
589, 590, 592, 6, 3, 4, 8, 3, 237, 3,
|
|
8, 585, 283, 300, 4, 4, 4, 496, 498, 500,
|
|
298, 306, 308, 4, 4, 4, 4, 4, 4, 4,
|
|
4, 4, 4, 4, 255, 4, 4, 4, 4, 4,
|
|
264, 267, 269, 4, 4, 4, 386, 425, 451, 4,
|
|
417, 481, 483, 413, 4, 4, 4, 346, 523, 485,
|
|
362, 376, 4, 355, 536, 544, 554, 273, 275, 4,
|
|
4, 4, 594, 618, 4, 3, 8, 289, 291, 294,
|
|
4, 3, 8, 398, 400, 402, 469, 396, 404, 4,
|
|
408, 406, 520, 3, 8, 479, 3, 8, 518, 506,
|
|
508, 512, 510, 516, 514, 502, 8, 3, 8, 441,
|
|
326, 4, 445, 443, 448, 4, 8, 3, 463, 4,
|
|
4, 8, 3, 372, 374, 3, 8, 4, 573, 561,
|
|
4, 564, 4, 4, 568, 571, 4, 4, 577, 579,
|
|
581, 583, 3, 8, 591, 4, 3, 8, 218, 218,
|
|
199, 4, 4, 4, 4, 202, 202, 202, 4, 4,
|
|
4, 4, 4, 4, 200, 200, 200, 200, 200, 202,
|
|
201, 201, 201, 200, 200, 4, 200, 200, 202, 202,
|
|
202, 4, 4, 4, 202, 202, 202, 4, 4, 4,
|
|
200, 4, 4, 4, 4, 202, 202, 202, 4, 4,
|
|
4, 4, 4, 200, 4, 4, 4, 4, 4, 4,
|
|
202, 202, 202, 4, 4, 242, 4, 4, 4, 202,
|
|
285, 4, 4, 4, 4, 4, 4, 200, 4, 4,
|
|
4, 394, 4, 477, 4, 4, 4, 4, 4, 4,
|
|
4, 4, 494, 4, 4, 200, 4, 4, 4, 202,
|
|
436, 4, 202, 202, 460, 4, 4, 370, 202, 4,
|
|
4, 200, 4, 200, 200, 4, 4, 202, 202, 4,
|
|
4, 4, 4, 558, 4, 200, 589, 4, 7, 7,
|
|
7, 7, 199, 199, 199, 7, 7, 5, 199, 166,
|
|
167, 168, 169, 202, 265, 199, 199, 5, 5, 5,
|
|
5, 220, 222, 199, 105, 106, 107, 108, 414, 5,
|
|
5, 5, 5, 7, 7, 7, 7, 7, 199, 199,
|
|
5, 7, 5, 229, 17, 18, 292, 20, 21, 295,
|
|
199, 199, 199, 5, 199, 199, 229, 199, 7, 199,
|
|
229, 199, 199, 199, 199, 199, 199, 199, 199, 199,
|
|
199, 199, 199, 199, 199, 222, 199, 199, 199, 18,
|
|
164, 569, 165, 265, 199, 199, 199, 5, 218, 241,
|
|
588, 284, 24, 301, 302, 303, 34, 38, 39, 40,
|
|
41, 42, 43, 44, 45, 46, 47, 48, 52, 53,
|
|
54, 55, 56, 233, 313, 314, 315, 318, 320, 322,
|
|
324, 325, 327, 328, 329, 330, 331, 332, 333, 336,
|
|
337, 339, 341, 343, 313, 7, 309, 310, 311, 7,
|
|
387, 388, 389, 7, 428, 429, 430, 7, 452, 453,
|
|
454, 7, 418, 419, 420, 119, 120, 121, 122, 124,
|
|
347, 348, 349, 350, 351, 352, 353, 7, 524, 525,
|
|
7, 486, 487, 488, 7, 363, 364, 365, 132, 133,
|
|
134, 135, 136, 137, 377, 378, 379, 380, 381, 382,
|
|
383, 384, 140, 141, 142, 233, 356, 357, 358, 359,
|
|
360, 480, 482, 144, 145, 233, 480, 482, 537, 538,
|
|
539, 541, 147, 148, 149, 199, 480, 482, 545, 546,
|
|
547, 548, 550, 551, 557, 7, 595, 596, 185, 233,
|
|
619, 620, 621, 230, 7, 470, 471, 472, 127, 501,
|
|
503, 521, 309, 8, 8, 8, 304, 3, 8, 316,
|
|
319, 321, 323, 4, 4, 4, 4, 4, 4, 4,
|
|
334, 4, 338, 340, 342, 344, 3, 8, 8, 312,
|
|
6, 3, 390, 6, 3, 431, 6, 3, 455, 6,
|
|
3, 421, 6, 3, 3, 6, 526, 3, 6, 489,
|
|
6, 3, 366, 6, 3, 4, 4, 4, 4, 4,
|
|
4, 3, 8, 4, 4, 4, 3, 8, 540, 542,
|
|
3, 8, 4, 549, 4, 552, 3, 8, 8, 597,
|
|
3, 6, 4, 3, 8, 199, 231, 232, 473, 6,
|
|
3, 504, 8, 6, 4, 302, 4, 4, 4, 4,
|
|
200, 202, 200, 202, 200, 200, 200, 4, 200, 4,
|
|
4, 4, 4, 314, 313, 311, 393, 389, 434, 430,
|
|
458, 454, 233, 243, 244, 245, 246, 247, 248, 249,
|
|
250, 251, 252, 258, 259, 260, 261, 262, 263, 266,
|
|
268, 270, 271, 272, 274, 276, 325, 385, 403, 405,
|
|
407, 409, 410, 411, 412, 422, 423, 450, 480, 482,
|
|
495, 497, 499, 519, 420, 348, 115, 116, 233, 243,
|
|
244, 245, 325, 424, 450, 480, 482, 495, 497, 499,
|
|
527, 528, 529, 530, 531, 533, 525, 492, 488, 369,
|
|
365, 200, 200, 200, 200, 200, 200, 378, 202, 200,
|
|
200, 357, 4, 4, 538, 202, 4, 200, 4, 546,
|
|
176, 178, 179, 233, 325, 480, 482, 598, 599, 600,
|
|
601, 603, 596, 202, 620, 6, 3, 476, 472, 4,
|
|
199, 35, 36, 37, 317, 199, 199, 199, 49, 50,
|
|
51, 335, 199, 199, 199, 199, 8, 8, 8, 8,
|
|
3, 8, 532, 4, 8, 3, 8, 8, 199, 199,
|
|
199, 218, 604, 4, 602, 3, 8, 199, 8, 229,
|
|
423, 4, 202, 529, 4, 200, 4, 599, 199, 5,
|
|
199, 7, 605, 606, 607, 3, 6, 177, 180, 181,
|
|
182, 183, 608, 609, 610, 612, 613, 614, 615, 606,
|
|
611, 4, 4, 4, 616, 3, 8, 4, 202, 200,
|
|
200, 4, 609, 199, 199
|
|
};
|
|
|
|
const short
|
|
Dhcp4Parser::yyr1_[] =
|
|
{
|
|
0, 203, 205, 204, 206, 204, 207, 204, 208, 204,
|
|
209, 204, 210, 204, 211, 204, 212, 204, 213, 204,
|
|
214, 204, 215, 204, 216, 204, 217, 204, 218, 218,
|
|
218, 218, 218, 218, 218, 219, 221, 220, 222, 223,
|
|
223, 224, 224, 224, 226, 225, 227, 227, 228, 228,
|
|
228, 230, 229, 231, 231, 232, 232, 232, 233, 235,
|
|
234, 237, 236, 236, 238, 240, 239, 241, 241, 241,
|
|
242, 242, 242, 242, 242, 242, 242, 242, 242, 242,
|
|
242, 242, 242, 242, 242, 242, 242, 242, 242, 242,
|
|
242, 242, 242, 242, 242, 242, 242, 242, 242, 242,
|
|
242, 242, 242, 242, 242, 242, 242, 242, 242, 242,
|
|
242, 242, 242, 242, 242, 242, 242, 242, 242, 242,
|
|
242, 242, 242, 242, 242, 242, 242, 242, 242, 242,
|
|
242, 242, 242, 242, 243, 244, 245, 246, 247, 248,
|
|
249, 250, 251, 252, 253, 255, 254, 256, 257, 258,
|
|
259, 260, 261, 262, 264, 263, 265, 265, 265, 265,
|
|
265, 267, 266, 269, 268, 270, 271, 273, 272, 275,
|
|
274, 276, 277, 278, 279, 280, 281, 283, 282, 284,
|
|
284, 284, 285, 285, 285, 285, 285, 285, 285, 287,
|
|
286, 289, 288, 291, 290, 292, 292, 294, 293, 295,
|
|
295, 296, 298, 297, 300, 299, 301, 301, 301, 302,
|
|
304, 303, 306, 305, 308, 307, 309, 309, 310, 310,
|
|
310, 312, 311, 313, 313, 313, 314, 314, 314, 314,
|
|
314, 314, 314, 314, 314, 314, 314, 314, 314, 314,
|
|
314, 314, 314, 314, 314, 316, 315, 317, 317, 317,
|
|
319, 318, 321, 320, 323, 322, 324, 326, 325, 327,
|
|
328, 329, 330, 331, 332, 334, 333, 335, 335, 335,
|
|
336, 338, 337, 340, 339, 342, 341, 344, 343, 346,
|
|
345, 347, 347, 347, 348, 348, 348, 348, 348, 349,
|
|
350, 351, 352, 353, 355, 354, 356, 356, 356, 357,
|
|
357, 357, 357, 357, 357, 358, 359, 360, 362, 361,
|
|
363, 363, 364, 364, 364, 366, 365, 368, 367, 369,
|
|
369, 369, 369, 370, 370, 372, 371, 374, 373, 376,
|
|
375, 377, 377, 377, 378, 378, 378, 378, 378, 378,
|
|
379, 380, 381, 382, 383, 384, 386, 385, 387, 387,
|
|
388, 388, 388, 390, 389, 392, 391, 393, 393, 393,
|
|
394, 394, 394, 394, 394, 394, 394, 394, 394, 394,
|
|
394, 394, 394, 394, 394, 394, 394, 394, 394, 394,
|
|
394, 394, 394, 394, 394, 394, 394, 394, 394, 394,
|
|
394, 394, 394, 394, 394, 394, 394, 394, 394, 394,
|
|
394, 394, 394, 394, 394, 396, 395, 398, 397, 400,
|
|
399, 402, 401, 404, 403, 406, 405, 408, 407, 409,
|
|
410, 411, 413, 412, 414, 414, 414, 414, 415, 417,
|
|
416, 418, 418, 419, 419, 419, 421, 420, 422, 422,
|
|
422, 423, 423, 423, 423, 423, 423, 423, 423, 423,
|
|
423, 423, 423, 423, 423, 423, 423, 423, 423, 423,
|
|
423, 423, 423, 423, 423, 423, 423, 423, 423, 423,
|
|
423, 423, 423, 423, 423, 423, 423, 423, 423, 423,
|
|
423, 425, 424, 427, 426, 428, 428, 429, 429, 429,
|
|
431, 430, 433, 432, 434, 434, 435, 435, 435, 436,
|
|
436, 436, 436, 436, 436, 436, 436, 436, 436, 437,
|
|
438, 439, 441, 440, 443, 442, 445, 444, 446, 448,
|
|
447, 449, 451, 450, 452, 452, 453, 453, 453, 455,
|
|
454, 457, 456, 458, 458, 459, 459, 459, 460, 460,
|
|
460, 460, 460, 460, 460, 460, 460, 461, 463, 462,
|
|
464, 465, 466, 467, 469, 468, 470, 470, 471, 471,
|
|
471, 473, 472, 475, 474, 476, 476, 476, 477, 477,
|
|
477, 477, 477, 477, 477, 479, 478, 481, 480, 483,
|
|
482, 485, 484, 486, 486, 487, 487, 487, 489, 488,
|
|
491, 490, 492, 492, 493, 493, 493, 494, 494, 494,
|
|
494, 494, 494, 494, 494, 494, 494, 494, 494, 494,
|
|
494, 494, 496, 495, 498, 497, 500, 499, 502, 501,
|
|
504, 503, 506, 505, 508, 507, 510, 509, 512, 511,
|
|
514, 513, 516, 515, 518, 517, 520, 519, 521, 521,
|
|
523, 522, 524, 524, 524, 526, 525, 527, 527, 528,
|
|
528, 528, 529, 529, 529, 529, 529, 529, 529, 529,
|
|
529, 529, 529, 529, 529, 529, 530, 532, 531, 533,
|
|
534, 536, 535, 537, 537, 537, 538, 538, 538, 538,
|
|
538, 540, 539, 542, 541, 544, 543, 545, 545, 545,
|
|
546, 546, 546, 546, 546, 546, 547, 549, 548, 550,
|
|
552, 551, 554, 553, 556, 555, 557, 557, 557, 558,
|
|
558, 558, 558, 558, 558, 558, 558, 558, 558, 558,
|
|
558, 558, 558, 558, 558, 558, 558, 559, 561, 560,
|
|
562, 564, 563, 565, 566, 568, 567, 569, 569, 571,
|
|
570, 573, 572, 574, 575, 577, 576, 579, 578, 581,
|
|
580, 583, 582, 585, 584, 587, 586, 588, 588, 588,
|
|
589, 589, 591, 590, 592, 594, 593, 595, 595, 595,
|
|
597, 596, 598, 598, 598, 599, 599, 599, 599, 599,
|
|
599, 599, 600, 602, 601, 604, 603, 605, 605, 605,
|
|
607, 606, 608, 608, 608, 609, 609, 609, 609, 609,
|
|
611, 610, 612, 613, 614, 616, 615, 618, 617, 619,
|
|
619, 619, 620, 620, 621
|
|
};
|
|
|
|
const signed char
|
|
Dhcp4Parser::yyr2_[] =
|
|
{
|
|
0, 2, 0, 3, 0, 3, 0, 3, 0, 3,
|
|
0, 3, 0, 3, 0, 3, 0, 3, 0, 3,
|
|
0, 3, 0, 3, 0, 3, 0, 3, 1, 1,
|
|
1, 1, 1, 1, 1, 1, 0, 4, 1, 0,
|
|
1, 3, 5, 2, 0, 4, 0, 1, 1, 3,
|
|
2, 0, 4, 0, 1, 1, 3, 2, 2, 0,
|
|
4, 0, 6, 1, 2, 0, 4, 1, 3, 2,
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
1, 1, 1, 1, 3, 3, 3, 3, 3, 3,
|
|
3, 3, 3, 3, 3, 0, 4, 3, 3, 3,
|
|
3, 3, 3, 3, 0, 4, 1, 1, 1, 1,
|
|
1, 0, 4, 0, 4, 3, 3, 0, 4, 0,
|
|
4, 3, 3, 3, 3, 3, 3, 0, 6, 1,
|
|
3, 2, 1, 1, 1, 1, 1, 1, 1, 0,
|
|
4, 0, 4, 0, 4, 1, 1, 0, 4, 1,
|
|
1, 3, 0, 6, 0, 6, 1, 3, 2, 1,
|
|
0, 4, 0, 6, 0, 6, 0, 1, 1, 3,
|
|
2, 0, 4, 1, 3, 2, 1, 1, 1, 1,
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
1, 1, 1, 1, 1, 0, 4, 1, 1, 1,
|
|
0, 4, 0, 4, 0, 4, 3, 0, 4, 3,
|
|
3, 3, 3, 3, 3, 0, 4, 1, 1, 1,
|
|
3, 0, 4, 0, 4, 0, 4, 0, 4, 0,
|
|
6, 1, 3, 2, 1, 1, 1, 1, 1, 1,
|
|
1, 1, 1, 1, 0, 6, 1, 3, 2, 1,
|
|
1, 1, 1, 1, 1, 3, 3, 3, 0, 6,
|
|
0, 1, 1, 3, 2, 0, 4, 0, 4, 1,
|
|
3, 2, 1, 1, 1, 0, 4, 0, 4, 0,
|
|
6, 1, 3, 2, 1, 1, 1, 1, 1, 1,
|
|
3, 3, 3, 3, 3, 3, 0, 6, 0, 1,
|
|
1, 3, 2, 0, 4, 0, 4, 1, 3, 2,
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
1, 1, 1, 1, 1, 0, 4, 0, 4, 0,
|
|
4, 0, 4, 0, 4, 0, 4, 0, 4, 3,
|
|
3, 3, 0, 4, 1, 1, 1, 1, 3, 0,
|
|
6, 0, 1, 1, 3, 2, 0, 4, 1, 3,
|
|
2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
1, 0, 6, 0, 4, 0, 1, 1, 3, 2,
|
|
0, 4, 0, 4, 0, 1, 1, 3, 2, 1,
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
3, 1, 0, 4, 0, 4, 0, 4, 1, 0,
|
|
4, 3, 0, 6, 0, 1, 1, 3, 2, 0,
|
|
4, 0, 4, 0, 1, 1, 3, 2, 1, 1,
|
|
1, 1, 1, 1, 1, 1, 1, 1, 0, 4,
|
|
1, 1, 3, 3, 0, 6, 0, 1, 1, 3,
|
|
2, 0, 4, 0, 4, 1, 3, 2, 1, 1,
|
|
1, 1, 1, 1, 1, 0, 4, 0, 4, 0,
|
|
4, 0, 6, 0, 1, 1, 3, 2, 0, 4,
|
|
0, 4, 0, 1, 1, 3, 2, 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, 0, 4, 0, 4, 0, 4, 0, 4,
|
|
0, 4, 0, 4, 0, 4, 0, 6, 1, 1,
|
|
0, 6, 1, 3, 2, 0, 4, 0, 1, 1,
|
|
3, 2, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
1, 1, 1, 1, 1, 1, 1, 0, 4, 3,
|
|
3, 0, 6, 1, 3, 2, 1, 1, 1, 1,
|
|
1, 0, 4, 0, 4, 0, 6, 1, 3, 2,
|
|
1, 1, 1, 1, 1, 1, 3, 0, 4, 3,
|
|
0, 4, 0, 6, 0, 4, 1, 3, 2, 1,
|
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
1, 1, 1, 1, 1, 1, 1, 3, 0, 4,
|
|
3, 0, 4, 3, 3, 0, 4, 1, 1, 0,
|
|
4, 0, 4, 3, 3, 0, 4, 0, 4, 0,
|
|
4, 0, 4, 0, 6, 0, 4, 1, 3, 2,
|
|
1, 1, 0, 6, 3, 0, 6, 1, 3, 2,
|
|
0, 4, 1, 3, 2, 1, 1, 1, 1, 1,
|
|
1, 1, 3, 0, 4, 0, 6, 1, 3, 2,
|
|
0, 4, 1, 3, 2, 1, 1, 1, 1, 1,
|
|
0, 4, 3, 3, 3, 0, 4, 0, 6, 1,
|
|
3, 2, 1, 1, 3
|
|
};
|
|
|
|
|
|
#if PARSER4_DEBUG || 1
|
|
// YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
|
|
// First, the terminals, then, starting at \a YYNTOKENS, nonterminals.
|
|
const char*
|
|
const Dhcp4Parser::yytname_[] =
|
|
{
|
|
"\"end of file\"", "error", "\"invalid token\"", "\",\"", "\":\"",
|
|
"\"[\"", "\"]\"", "\"{\"", "\"}\"", "\"null\"", "\"Dhcp4\"",
|
|
"\"config-control\"", "\"config-databases\"",
|
|
"\"config-fetch-wait-time\"", "\"interfaces-config\"", "\"interfaces\"",
|
|
"\"dhcp-socket-type\"", "\"raw\"", "\"udp\"", "\"outbound-interface\"",
|
|
"\"same-as-inbound\"", "\"use-routing\"", "\"re-detect\"",
|
|
"\"sanity-checks\"", "\"lease-checks\"", "\"echo-client-id\"",
|
|
"\"match-client-id\"", "\"authoritative\"", "\"next-server\"",
|
|
"\"server-hostname\"", "\"boot-file-name\"", "\"lease-database\"",
|
|
"\"hosts-database\"", "\"hosts-databases\"", "\"type\"", "\"memfile\"",
|
|
"\"mysql\"", "\"postgresql\"", "\"user\"", "\"password\"", "\"host\"",
|
|
"\"port\"", "\"persist\"", "\"lfc-interval\"", "\"readonly\"",
|
|
"\"connect-timeout\"", "\"max-reconnect-tries\"",
|
|
"\"reconnect-wait-time\"", "\"on-fail\"", "\"stop-retry-exit\"",
|
|
"\"serve-retry-exit\"", "\"serve-retry-continue\"", "\"max-row-errors\"",
|
|
"\"trust-anchor\"", "\"cert-file\"", "\"key-file\"", "\"cipher-list\"",
|
|
"\"valid-lifetime\"", "\"min-valid-lifetime\"", "\"max-valid-lifetime\"",
|
|
"\"renew-timer\"", "\"rebind-timer\"", "\"calculate-tee-times\"",
|
|
"\"t1-percent\"", "\"t2-percent\"", "\"cache-threshold\"",
|
|
"\"cache-max-age\"", "\"decline-probation-period\"", "\"server-tag\"",
|
|
"\"statistic-default-sample-count\"", "\"statistic-default-sample-age\"",
|
|
"\"ddns-send-updates\"", "\"ddns-override-no-update\"",
|
|
"\"ddns-override-client-update\"", "\"ddns-replace-client-name\"",
|
|
"\"ddns-generated-prefix\"", "\"ddns-qualifying-suffix\"",
|
|
"\"ddns-update-on-renew\"", "\"ddns-use-conflict-resolution\"",
|
|
"\"store-extended-info\"", "\"subnet4\"", "\"4o6-interface\"",
|
|
"\"4o6-interface-id\"", "\"4o6-subnet\"", "\"option-def\"",
|
|
"\"option-data\"", "\"name\"", "\"data\"", "\"code\"", "\"space\"",
|
|
"\"csv-format\"", "\"always-send\"", "\"record-types\"",
|
|
"\"encapsulate\"", "\"array\"", "\"parked-packet-limit\"",
|
|
"\"shared-networks\"", "\"pools\"", "\"pool\"", "\"user-context\"",
|
|
"\"comment\"", "\"subnet\"", "\"interface\"", "\"id\"",
|
|
"\"reservation-mode\"", "\"disabled\"", "\"out-of-pool\"", "\"global\"",
|
|
"\"all\"", "\"reservations-global\"", "\"reservations-in-subnet\"",
|
|
"\"reservations-out-of-pool\"", "\"host-reservation-identifiers\"",
|
|
"\"client-classes\"", "\"require-client-classes\"", "\"test\"",
|
|
"\"only-if-required\"", "\"client-class\"", "\"reservations\"",
|
|
"\"duid\"", "\"hw-address\"", "\"circuit-id\"", "\"client-id\"",
|
|
"\"hostname\"", "\"flex-id\"", "\"relay\"", "\"ip-address\"",
|
|
"\"ip-addresses\"", "\"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\"",
|
|
"\"dhcp4o6-port\"", "\"multi-threading\"", "\"enable-multi-threading\"",
|
|
"\"thread-pool-size\"", "\"packet-queue-size\"", "\"control-socket\"",
|
|
"\"socket-type\"", "\"socket-name\"", "\"dhcp-queue-control\"",
|
|
"\"enable-queue\"", "\"queue-type\"", "\"capacity\"", "\"dhcp-ddns\"",
|
|
"\"enable-updates\"", "\"qualifying-suffix\"", "\"server-ip\"",
|
|
"\"server-port\"", "\"sender-ip\"", "\"sender-port\"",
|
|
"\"max-queue-size\"", "\"ncr-protocol\"", "\"ncr-format\"",
|
|
"\"override-no-update\"", "\"override-client-update\"",
|
|
"\"replace-client-name\"", "\"generated-prefix\"", "\"tcp\"", "\"JSON\"",
|
|
"\"when-present\"", "\"never\"", "\"always\"", "\"when-not-present\"",
|
|
"\"hostname-char-set\"", "\"hostname-char-replacement\"",
|
|
"\"early-global-reservations-lookup\"", "\"ip-reservations-unique\"",
|
|
"\"reservations-lookup-first\"", "\"loggers\"", "\"output_options\"",
|
|
"\"output\"", "\"debuglevel\"", "\"severity\"", "\"flush\"",
|
|
"\"maxsize\"", "\"maxver\"", "\"pattern\"", "\"compatibility\"",
|
|
"\"lenient-option-parsing\"", "TOPLEVEL_JSON", "TOPLEVEL_DHCP4",
|
|
"SUB_DHCP4", "SUB_INTERFACES4", "SUB_SUBNET4", "SUB_POOL4",
|
|
"SUB_RESERVATION", "SUB_OPTION_DEFS", "SUB_OPTION_DEF",
|
|
"SUB_OPTION_DATA", "SUB_HOOKS_LIBRARY", "SUB_DHCP_DDNS",
|
|
"SUB_CONFIG_CONTROL", "\"constant string\"", "\"integer\"",
|
|
"\"floating point\"", "\"boolean\"", "$accept", "start", "$@1", "$@2",
|
|
"$@3", "$@4", "$@5", "$@6", "$@7", "$@8", "$@9", "$@10", "$@11", "$@12",
|
|
"$@13", "value", "sub_json", "map2", "$@14", "map_value", "map_content",
|
|
"not_empty_map", "list_generic", "$@15", "list_content",
|
|
"not_empty_list", "list_strings", "$@16", "list_strings_content",
|
|
"not_empty_list_strings", "unknown_map_entry", "syntax_map", "$@17",
|
|
"global_object", "$@18", "global_object_comma", "sub_dhcp4", "$@19",
|
|
"global_params", "global_param", "valid_lifetime", "min_valid_lifetime",
|
|
"max_valid_lifetime", "renew_timer", "rebind_timer",
|
|
"calculate_tee_times", "t1_percent", "t2_percent", "cache_threshold",
|
|
"cache_max_age", "decline_probation_period", "server_tag", "$@20",
|
|
"parked_packet_limit", "echo_client_id", "match_client_id",
|
|
"authoritative", "ddns_send_updates", "ddns_override_no_update",
|
|
"ddns_override_client_update", "ddns_replace_client_name", "$@21",
|
|
"ddns_replace_client_name_value", "ddns_generated_prefix", "$@22",
|
|
"ddns_qualifying_suffix", "$@23", "ddns_update_on_renew",
|
|
"ddns_use_conflict_resolution", "hostname_char_set", "$@24",
|
|
"hostname_char_replacement", "$@25", "store_extended_info",
|
|
"statistic_default_sample_count", "statistic_default_sample_age",
|
|
"early_global_reservations_lookup", "ip_reservations_unique",
|
|
"reservations_lookup_first", "interfaces_config", "$@26",
|
|
"interfaces_config_params", "interfaces_config_param", "sub_interfaces4",
|
|
"$@27", "interfaces_list", "$@28", "dhcp_socket_type", "$@29",
|
|
"socket_type", "outbound_interface", "$@30", "outbound_interface_value",
|
|
"re_detect", "lease_database", "$@31", "sanity_checks", "$@32",
|
|
"sanity_checks_params", "sanity_checks_param", "lease_checks", "$@33",
|
|
"hosts_database", "$@34", "hosts_databases", "$@35", "database_list",
|
|
"not_empty_database_list", "database", "$@36", "database_map_params",
|
|
"database_map_param", "database_type", "$@37", "db_type", "user", "$@38",
|
|
"password", "$@39", "host", "$@40", "port", "name", "$@41", "persist",
|
|
"lfc_interval", "readonly", "connect_timeout", "max_reconnect_tries",
|
|
"reconnect_wait_time", "on_fail", "$@42", "on_fail_mode",
|
|
"max_row_errors", "trust_anchor", "$@43", "cert_file", "$@44",
|
|
"key_file", "$@45", "cipher_list", "$@46",
|
|
"host_reservation_identifiers", "$@47",
|
|
"host_reservation_identifiers_list", "host_reservation_identifier",
|
|
"duid_id", "hw_address_id", "circuit_id", "client_id", "flex_id",
|
|
"dhcp_multi_threading", "$@48", "multi_threading_params",
|
|
"multi_threading_param", "enable_multi_threading", "thread_pool_size",
|
|
"packet_queue_size", "hooks_libraries", "$@49", "hooks_libraries_list",
|
|
"not_empty_hooks_libraries_list", "hooks_library", "$@50",
|
|
"sub_hooks_library", "$@51", "hooks_params", "hooks_param", "library",
|
|
"$@52", "parameters", "$@53", "expired_leases_processing", "$@54",
|
|
"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", "subnet4_list", "$@55",
|
|
"subnet4_list_content", "not_empty_subnet4_list", "subnet4", "$@56",
|
|
"sub_subnet4", "$@57", "subnet4_params", "subnet4_param", "subnet",
|
|
"$@58", "subnet_4o6_interface", "$@59", "subnet_4o6_interface_id",
|
|
"$@60", "subnet_4o6_subnet", "$@61", "interface", "$@62", "client_class",
|
|
"$@63", "require_client_classes", "$@64", "reservations_global",
|
|
"reservations_in_subnet", "reservations_out_of_pool", "reservation_mode",
|
|
"$@65", "hr_mode", "id", "shared_networks", "$@66",
|
|
"shared_networks_content", "shared_networks_list", "shared_network",
|
|
"$@67", "shared_network_params", "shared_network_param",
|
|
"option_def_list", "$@68", "sub_option_def_list", "$@69",
|
|
"option_def_list_content", "not_empty_option_def_list",
|
|
"option_def_entry", "$@70", "sub_option_def", "$@71",
|
|
"option_def_params", "not_empty_option_def_params", "option_def_param",
|
|
"option_def_name", "code", "option_def_code", "option_def_type", "$@72",
|
|
"option_def_record_types", "$@73", "space", "$@74", "option_def_space",
|
|
"option_def_encapsulate", "$@75", "option_def_array", "option_data_list",
|
|
"$@76", "option_data_list_content", "not_empty_option_data_list",
|
|
"option_data_entry", "$@77", "sub_option_data", "$@78",
|
|
"option_data_params", "not_empty_option_data_params",
|
|
"option_data_param", "option_data_name", "option_data_data", "$@79",
|
|
"option_data_code", "option_data_space", "option_data_csv_format",
|
|
"option_data_always_send", "pools_list", "$@80", "pools_list_content",
|
|
"not_empty_pools_list", "pool_list_entry", "$@81", "sub_pool4", "$@82",
|
|
"pool_params", "pool_param", "pool_entry", "$@83", "user_context",
|
|
"$@84", "comment", "$@85", "reservations", "$@86", "reservations_list",
|
|
"not_empty_reservations_list", "reservation", "$@87", "sub_reservation",
|
|
"$@88", "reservation_params", "not_empty_reservation_params",
|
|
"reservation_param", "next_server", "$@89", "server_hostname", "$@90",
|
|
"boot_file_name", "$@91", "ip_address", "$@92", "ip_addresses", "$@93",
|
|
"duid", "$@94", "hw_address", "$@95", "client_id_value", "$@96",
|
|
"circuit_id_value", "$@97", "flex_id_value", "$@98", "hostname", "$@99",
|
|
"reservation_client_classes", "$@100", "relay", "$@101", "relay_map",
|
|
"client_classes", "$@102", "client_classes_list", "client_class_entry",
|
|
"$@103", "client_class_params", "not_empty_client_class_params",
|
|
"client_class_param", "client_class_name", "client_class_test", "$@104",
|
|
"only_if_required", "dhcp4o6_port", "control_socket", "$@105",
|
|
"control_socket_params", "control_socket_param", "control_socket_type",
|
|
"$@106", "control_socket_name", "$@107", "dhcp_queue_control", "$@108",
|
|
"queue_control_params", "queue_control_param", "enable_queue",
|
|
"queue_type", "$@109", "capacity", "arbitrary_map_entry", "$@110",
|
|
"dhcp_ddns", "$@111", "sub_dhcp_ddns", "$@112", "dhcp_ddns_params",
|
|
"dhcp_ddns_param", "enable_updates", "server_ip", "$@113", "server_port",
|
|
"sender_ip", "$@114", "sender_port", "max_queue_size", "ncr_protocol",
|
|
"$@115", "ncr_protocol_value", "ncr_format", "$@116",
|
|
"dep_qualifying_suffix", "$@117", "dep_override_no_update",
|
|
"dep_override_client_update", "dep_replace_client_name", "$@118",
|
|
"dep_generated_prefix", "$@119", "dep_hostname_char_set", "$@120",
|
|
"dep_hostname_char_replacement", "$@121", "config_control", "$@122",
|
|
"sub_config_control", "$@123", "config_control_params",
|
|
"config_control_param", "config_databases", "$@124",
|
|
"config_fetch_wait_time", "loggers", "$@125", "loggers_entries",
|
|
"logger_entry", "$@126", "logger_params", "logger_param", "debuglevel",
|
|
"severity", "$@127", "output_options_list", "$@128",
|
|
"output_options_list_content", "output_entry", "$@129",
|
|
"output_params_list", "output_params", "output", "$@130", "flush",
|
|
"maxsize", "maxver", "pattern", "$@131", "compatibility", "$@132",
|
|
"compatibility_params", "compatibility_param", "lenient_option_parsing", YY_NULLPTR
|
|
};
|
|
#endif
|
|
|
|
|
|
#if PARSER4_DEBUG
|
|
const short
|
|
Dhcp4Parser::yyrline_[] =
|
|
{
|
|
0, 292, 292, 292, 293, 293, 294, 294, 295, 295,
|
|
296, 296, 297, 297, 298, 298, 299, 299, 300, 300,
|
|
301, 301, 302, 302, 303, 303, 304, 304, 312, 313,
|
|
314, 315, 316, 317, 318, 321, 326, 326, 337, 340,
|
|
341, 344, 349, 355, 360, 360, 367, 368, 371, 375,
|
|
379, 385, 385, 392, 393, 396, 400, 404, 414, 423,
|
|
423, 438, 438, 452, 455, 461, 461, 470, 471, 472,
|
|
479, 480, 481, 482, 483, 484, 485, 486, 487, 488,
|
|
489, 490, 491, 492, 493, 494, 495, 496, 497, 498,
|
|
499, 500, 501, 502, 503, 504, 505, 506, 507, 508,
|
|
509, 510, 511, 512, 513, 514, 515, 516, 517, 518,
|
|
519, 520, 521, 522, 523, 524, 525, 526, 527, 528,
|
|
529, 530, 531, 532, 533, 534, 535, 536, 537, 538,
|
|
539, 540, 541, 542, 545, 551, 557, 563, 569, 575,
|
|
581, 587, 593, 599, 605, 611, 611, 620, 626, 632,
|
|
638, 644, 650, 656, 662, 662, 671, 674, 677, 680,
|
|
683, 689, 689, 698, 698, 707, 713, 719, 719, 728,
|
|
728, 737, 743, 749, 755, 761, 767, 773, 773, 785,
|
|
786, 787, 792, 793, 794, 795, 796, 797, 798, 801,
|
|
801, 810, 810, 821, 821, 829, 830, 833, 833, 841,
|
|
843, 847, 854, 854, 867, 867, 878, 879, 880, 885,
|
|
887, 887, 906, 906, 919, 919, 930, 931, 934, 935,
|
|
936, 941, 941, 951, 952, 953, 958, 959, 960, 961,
|
|
962, 963, 964, 965, 966, 967, 968, 969, 970, 971,
|
|
972, 973, 974, 975, 976, 979, 979, 987, 988, 989,
|
|
992, 992, 1001, 1001, 1010, 1010, 1019, 1025, 1025, 1034,
|
|
1040, 1046, 1052, 1058, 1064, 1070, 1070, 1078, 1079, 1080,
|
|
1083, 1089, 1089, 1098, 1098, 1107, 1107, 1116, 1116, 1125,
|
|
1125, 1136, 1137, 1138, 1143, 1144, 1145, 1146, 1147, 1150,
|
|
1155, 1160, 1165, 1170, 1177, 1177, 1190, 1191, 1192, 1197,
|
|
1198, 1199, 1200, 1201, 1202, 1205, 1211, 1217, 1223, 1223,
|
|
1234, 1235, 1238, 1239, 1240, 1245, 1245, 1255, 1255, 1265,
|
|
1266, 1267, 1270, 1273, 1274, 1277, 1277, 1286, 1286, 1295,
|
|
1295, 1307, 1308, 1309, 1314, 1315, 1316, 1317, 1318, 1319,
|
|
1322, 1328, 1334, 1340, 1346, 1352, 1361, 1361, 1375, 1376,
|
|
1379, 1380, 1381, 1390, 1390, 1416, 1416, 1427, 1428, 1429,
|
|
1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444,
|
|
1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454,
|
|
1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464,
|
|
1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474,
|
|
1475, 1476, 1477, 1478, 1479, 1482, 1482, 1491, 1491, 1500,
|
|
1500, 1509, 1509, 1518, 1518, 1527, 1527, 1536, 1536, 1547,
|
|
1553, 1559, 1565, 1565, 1573, 1574, 1575, 1576, 1579, 1587,
|
|
1587, 1599, 1600, 1604, 1605, 1606, 1611, 1611, 1619, 1620,
|
|
1621, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634,
|
|
1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644,
|
|
1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654,
|
|
1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664,
|
|
1665, 1672, 1672, 1686, 1686, 1695, 1696, 1699, 1700, 1701,
|
|
1708, 1708, 1723, 1723, 1737, 1738, 1741, 1742, 1743, 1748,
|
|
1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1760,
|
|
1762, 1768, 1770, 1770, 1779, 1779, 1788, 1788, 1797, 1799,
|
|
1799, 1808, 1818, 1818, 1831, 1832, 1837, 1838, 1839, 1846,
|
|
1846, 1858, 1858, 1870, 1871, 1876, 1877, 1878, 1885, 1886,
|
|
1887, 1888, 1889, 1890, 1891, 1892, 1893, 1896, 1898, 1898,
|
|
1907, 1909, 1911, 1917, 1926, 1926, 1939, 1940, 1943, 1944,
|
|
1945, 1950, 1950, 1960, 1960, 1970, 1971, 1972, 1977, 1978,
|
|
1979, 1980, 1981, 1982, 1983, 1986, 1986, 1995, 1995, 2020,
|
|
2020, 2050, 2050, 2061, 2062, 2065, 2066, 2067, 2072, 2072,
|
|
2081, 2081, 2090, 2091, 2094, 2095, 2096, 2102, 2103, 2104,
|
|
2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2114,
|
|
2115, 2116, 2119, 2119, 2128, 2128, 2137, 2137, 2146, 2146,
|
|
2155, 2155, 2166, 2166, 2175, 2175, 2184, 2184, 2193, 2193,
|
|
2202, 2202, 2211, 2211, 2220, 2220, 2234, 2234, 2245, 2246,
|
|
2252, 2252, 2263, 2264, 2265, 2270, 2270, 2280, 2281, 2284,
|
|
2285, 2286, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298,
|
|
2299, 2300, 2301, 2302, 2303, 2304, 2307, 2309, 2309, 2318,
|
|
2326, 2334, 2334, 2345, 2346, 2347, 2352, 2353, 2354, 2355,
|
|
2356, 2359, 2359, 2368, 2368, 2380, 2380, 2393, 2394, 2395,
|
|
2400, 2401, 2402, 2403, 2404, 2405, 2408, 2414, 2414, 2423,
|
|
2429, 2429, 2439, 2439, 2452, 2452, 2462, 2463, 2464, 2469,
|
|
2470, 2471, 2472, 2473, 2474, 2475, 2476, 2477, 2478, 2479,
|
|
2480, 2481, 2482, 2483, 2484, 2485, 2486, 2489, 2495, 2495,
|
|
2504, 2510, 2510, 2519, 2525, 2531, 2531, 2540, 2541, 2544,
|
|
2544, 2554, 2554, 2564, 2571, 2578, 2578, 2587, 2587, 2597,
|
|
2597, 2607, 2607, 2619, 2619, 2631, 2631, 2641, 2642, 2643,
|
|
2649, 2650, 2653, 2653, 2664, 2672, 2672, 2685, 2686, 2687,
|
|
2693, 2693, 2701, 2702, 2703, 2708, 2709, 2710, 2711, 2712,
|
|
2713, 2714, 2717, 2723, 2723, 2732, 2732, 2743, 2744, 2745,
|
|
2750, 2750, 2758, 2759, 2760, 2765, 2766, 2767, 2768, 2769,
|
|
2772, 2772, 2781, 2787, 2793, 2799, 2799, 2808, 2808, 2819,
|
|
2820, 2821, 2826, 2827, 2830
|
|
};
|
|
|
|
void
|
|
Dhcp4Parser::yy_stack_print_ () const
|
|
{
|
|
*yycdebug_ << "Stack now";
|
|
for (stack_type::const_iterator
|
|
i = yystack_.begin (),
|
|
i_end = yystack_.end ();
|
|
i != i_end; ++i)
|
|
*yycdebug_ << ' ' << int (i->state);
|
|
*yycdebug_ << '\n';
|
|
}
|
|
|
|
void
|
|
Dhcp4Parser::yy_reduce_print_ (int yyrule) const
|
|
{
|
|
int yylno = yyrline_[yyrule];
|
|
int yynrhs = yyr2_[yyrule];
|
|
// Print the symbols being reduced, and their result.
|
|
*yycdebug_ << "Reducing stack by rule " << yyrule - 1
|
|
<< " (line " << yylno << "):\n";
|
|
// The symbols being reduced.
|
|
for (int yyi = 0; yyi < yynrhs; yyi++)
|
|
YY_SYMBOL_PRINT (" $" << yyi + 1 << " =",
|
|
yystack_[(yynrhs) - (yyi + 1)]);
|
|
}
|
|
#endif // PARSER4_DEBUG
|
|
|
|
|
|
#line 14 "dhcp4_parser.yy"
|
|
} } // isc::dhcp
|
|
#line 6132 "dhcp4_parser.cc"
|
|
|
|
#line 2836 "dhcp4_parser.yy"
|
|
|
|
|
|
void
|
|
isc::dhcp::Dhcp4Parser::error(const location_type& loc,
|
|
const std::string& what)
|
|
{
|
|
ctx.error(loc, what);
|
|
}
|