Bug Summary

File:home/fedora/workspace/kea-dev/clang-static-analyzer/build/meson-private/tmp9kmrytkm/../../../src/bin/dhcp4/dhcp4_parser.cc
Warning:line 570, column 43
The left operand of '+' is a garbage value due to array index out of bounds

Annotated Source Code

Press '?' to see keyboard shortcuts

clang -cc1 -cc1 -triple x86_64-redhat-linux-gnu -O2 -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name dhcp4_parser.cc -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=cplusplus -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 2 -fhalf-no-semantic-interposition -mframe-pointer=none -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fdebug-compilation-dir=/home/fedora/workspace/kea-dev/clang-static-analyzer/build/meson-private/tmp9kmrytkm -fcoverage-compilation-dir=/home/fedora/workspace/kea-dev/clang-static-analyzer/build/meson-private/tmp9kmrytkm -resource-dir /usr/bin/../lib/clang/22 -I src/bin/dhcp4/libdhcp4.a.p -I src/bin/dhcp4 -I ../../../src/bin/dhcp4 -I . -I ../../.. -I src -I ../../../src -I src/bin -I ../../../src/bin -I src/lib -I ../../../src/lib -I /usr/include -D _GLIBCXX_ASSERTIONS=1 -D _FILE_OFFSET_BITS=64 -D BOOST_ALL_NO_LIB -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/16/../../../../include/c++/16 -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/16/../../../../include/c++/16/x86_64-redhat-linux -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/16/../../../../include/c++/16/backward -internal-isystem /usr/bin/../lib/clang/22/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/16/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -Wwrite-strings -Wno-missing-field-initializers -fdeprecated-macro -ferror-limit 19 -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fcxx-exceptions -fexceptions -fcolor-diagnostics -vectorize-loops -vectorize-slp -analyzer-output=html -faddrsig -fdwarf2-cfi-asm -o /home/fedora/workspace/kea-dev/clang-static-analyzer/build/meson-logs/scanbuild/2026-11-13-234852-4748-1 -x c++ ../../../src/bin/dhcp4/dhcp4_parser.cc
1// A Bison parser, made by GNU Bison 3.8.2.
2
3// Skeleton implementation for Bison LALR(1) parsers in C++
4
5// Copyright (C) 2002-2015, 2018-2021 Free Software Foundation, Inc.
6
7// This program is free software: you can redistribute it and/or modify
8// it under the terms of the GNU General Public License as published by
9// the Free Software Foundation, either version 3 of the License, or
10// (at your option) any later version.
11
12// This program is distributed in the hope that it will be useful,
13// but WITHOUT ANY WARRANTY; without even the implied warranty of
14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15// GNU General Public License for more details.
16
17// You should have received a copy of the GNU General Public License
18// along with this program. If not, see <https://www.gnu.org/licenses/>.
19
20// As a special exception, you may create a larger work that contains
21// part or all of the Bison parser skeleton and distribute that work
22// under terms of your choice, so long as that work isn't itself a
23// parser generator using the skeleton or a modified version thereof
24// as a parser skeleton. Alternatively, if you modify or redistribute
25// the parser skeleton itself, you may (at your option) remove this
26// special exception, which will cause the skeleton and the resulting
27// Bison output files to be licensed under the GNU General Public
28// License without this special exception.
29
30// This special exception was added by the Free Software Foundation in
31// version 2.2 of Bison.
32
33// DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
34// especially those whose name start with YY_ or yy_. They are
35// private implementation details that can be changed or removed.
36
37
38// Take the name prefix into account.
39#define yylexparser4_lex parser4_lex
40
41
42
43#include "dhcp4_parser.h"
44
45
46// Unqualified %code blocks.
47#line 34 "dhcp4_parser.yy"
48
49#include <dhcp4/parser_context.h>
50
51// Avoid warnings with the error counter.
52#if defined(__GNUC__4) || defined(__clang__1)
53#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
54#endif
55
56#line 57 "dhcp4_parser.cc"
57
58
59#ifndef YY_
60# if defined YYENABLE_NLS && YYENABLE_NLS
61# if ENABLE_NLS
62# include <libintl.h> // FIXME: INFRINGES ON USER NAME SPACE.
63# define YY_(msgid)msgid dgettext ("bison-runtime", msgid)
64# endif
65# endif
66# ifndef YY_
67# define YY_(msgid)msgid msgid
68# endif
69#endif
70
71
72// Whether we are compiled with exception support.
73#ifndef YY_EXCEPTIONS1
74# if defined __GNUC__4 && !defined __EXCEPTIONS1
75# define YY_EXCEPTIONS1 0
76# else
77# define YY_EXCEPTIONS1 1
78# endif
79#endif
80
81#define YYRHSLOC(Rhs, K)((Rhs)[K].location) ((Rhs)[K].location)
82/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
83 If N is 0, then set CURRENT to the empty location which ends
84 the previous symbol: RHS[0] (always defined). */
85
86# ifndef YYLLOC_DEFAULT
87# define YYLLOC_DEFAULT(Current, Rhs, N)do if (N) { (Current).begin = ((Rhs)[1].location).begin; (Current
).end = ((Rhs)[N].location).end; } else { (Current).begin = (
Current).end = ((Rhs)[0].location).end; } while (false)
\
88 do \
89 if (N) \
90 { \
91 (Current).begin = YYRHSLOC (Rhs, 1)((Rhs)[1].location).begin; \
92 (Current).end = YYRHSLOC (Rhs, N)((Rhs)[N].location).end; \
93 } \
94 else \
95 { \
96 (Current).begin = (Current).end = YYRHSLOC (Rhs, 0)((Rhs)[0].location).end; \
97 } \
98 while (false)
99# endif
100
101
102// Enable debugging if requested.
103#if PARSER4_DEBUG1
104
105// A pseudo ostream that takes yydebug_ into account.
106# define YYCDEBUGif (yydebug_) (*yycdebug_) if (yydebug_) (*yycdebug_)
107
108# define YY_SYMBOL_PRINT(Title, Symbol)do { if (yydebug_) { *yycdebug_ << Title << ' '; yy_print_
(*yycdebug_, Symbol); *yycdebug_ << '\n'; } } while (false
)
\
109 do { \
110 if (yydebug_) \
111 { \
112 *yycdebug_ << Title << ' '; \
113 yy_print_ (*yycdebug_, Symbol); \
114 *yycdebug_ << '\n'; \
115 } \
116 } while (false)
117
118# define YY_REDUCE_PRINT(Rule)do { if (yydebug_) yy_reduce_print_ (Rule); } while (false) \
119 do { \
120 if (yydebug_) \
121 yy_reduce_print_ (Rule); \
122 } while (false)
123
124# define YY_STACK_PRINT()do { if (yydebug_) yy_stack_print_ (); } while (false) \
125 do { \
126 if (yydebug_) \
127 yy_stack_print_ (); \
128 } while (false)
129
130#else // !PARSER4_DEBUG
131
132# define YYCDEBUGif (yydebug_) (*yycdebug_) if (false) std::cerr
133# define YY_SYMBOL_PRINT(Title, Symbol)do { if (yydebug_) { *yycdebug_ << Title << ' '; yy_print_
(*yycdebug_, Symbol); *yycdebug_ << '\n'; } } while (false
)
YY_USE (Symbol)((void) (Symbol))
134# define YY_REDUCE_PRINT(Rule)do { if (yydebug_) yy_reduce_print_ (Rule); } while (false) static_cast<void> (0)
135# define YY_STACK_PRINT()do { if (yydebug_) yy_stack_print_ (); } while (false) static_cast<void> (0)
136
137#endif // !PARSER4_DEBUG
138
139#define yyerrok(yyerrstatus_ = 0) (yyerrstatus_ = 0)
140#define yyclearin(yyla.clear ()) (yyla.clear ())
141
142#define YYACCEPTgoto yyacceptlab goto yyacceptlab
143#define YYABORTgoto yyabortlab goto yyabortlab
144#define YYERRORgoto yyerrorlab goto yyerrorlab
145#define YYRECOVERING()(!!yyerrstatus_) (!!yyerrstatus_)
146
147#line 14 "dhcp4_parser.yy"
148namespace isc { namespace dhcp {
149#line 150 "dhcp4_parser.cc"
150
151 /// Build a parser object.
152 Dhcp4Parser::Dhcp4Parser (isc::dhcp::Parser4Context& ctx_yyarg)
153#if PARSER4_DEBUG1
154 : yydebug_ (false),
155 yycdebug_ (&std::cerr),
156#else
157 :
158#endif
159 ctx (ctx_yyarg)
160 {}
161
162 Dhcp4Parser::~Dhcp4Parser ()
163 {}
164
165 Dhcp4Parser::syntax_error::~syntax_error () YY_NOEXCEPTnoexcept YY_NOTHROW
166 {}
167
168 /*---------.
169 | symbol. |
170 `---------*/
171
172
173
174 // by_state.
175 Dhcp4Parser::by_state::by_state () YY_NOEXCEPTnoexcept
176 : state (empty_state)
177 {}
178
179 Dhcp4Parser::by_state::by_state (const by_state& that) YY_NOEXCEPTnoexcept
180 : state (that.state)
181 {}
182
183 void
184 Dhcp4Parser::by_state::clear () YY_NOEXCEPTnoexcept
185 {
186 state = empty_state;
187 }
188
189 void
190 Dhcp4Parser::by_state::move (by_state& that)
191 {
192 state = that.state;
193 that.clear ();
194 }
195
196 Dhcp4Parser::by_state::by_state (state_type s) YY_NOEXCEPTnoexcept
197 : state (s)
198 {}
199
200 Dhcp4Parser::symbol_kind_type
201 Dhcp4Parser::by_state::kind () const YY_NOEXCEPTnoexcept
202 {
203 if (state == empty_state)
204 return symbol_kind::S_YYEMPTY;
205 else
206 return YY_CAST (symbol_kind_type, yystos_[+state])static_cast<symbol_kind_type> (yystos_[+state]);
207 }
208
209 Dhcp4Parser::stack_symbol_type::stack_symbol_type ()
210 {}
211
212 Dhcp4Parser::stack_symbol_type::stack_symbol_type (YY_RVREF (stack_symbol_type)stack_symbol_type&& that)
213 : super_type (YY_MOVEstd::move (that.state), YY_MOVEstd::move (that.location))
214 {
215 switch (that.kind ())
216 {
217 case symbol_kind::S_value: // value
218 case symbol_kind::S_map_value: // map_value
219 case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value
220 case symbol_kind::S_ddns_conflict_resolution_mode_value: // ddns_conflict_resolution_mode_value
221 case symbol_kind::S_socket_type: // socket_type
222 case symbol_kind::S_outbound_interface_value: // outbound_interface_value
223 case symbol_kind::S_on_fail_mode: // on_fail_mode
224 case symbol_kind::S_ssl_mode: // ssl_mode
225 case symbol_kind::S_control_socket_type_value: // control_socket_type_value
226 case symbol_kind::S_auth_type_value: // auth_type_value
227 case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value
228 value.YY_MOVE_OR_COPYmove< ElementPtr > (YY_MOVEstd::move (that.value));
229 break;
230
231 case symbol_kind::S_BOOLEAN: // "boolean"
232 value.YY_MOVE_OR_COPYmove< bool > (YY_MOVEstd::move (that.value));
233 break;
234
235 case symbol_kind::S_FLOAT: // "floating point"
236 value.YY_MOVE_OR_COPYmove< double > (YY_MOVEstd::move (that.value));
237 break;
238
239 case symbol_kind::S_INTEGER: // "integer"
240 value.YY_MOVE_OR_COPYmove< int64_t > (YY_MOVEstd::move (that.value));
241 break;
242
243 case symbol_kind::S_STRING: // "constant string"
244 value.YY_MOVE_OR_COPYmove< std::string > (YY_MOVEstd::move (that.value));
245 break;
246
247 default:
248 break;
249 }
250
251#if 201103L <= YY_CPLUSPLUS201703L
252 // that is emptied.
253 that.state = empty_state;
254#endif
255 }
256
257 Dhcp4Parser::stack_symbol_type::stack_symbol_type (state_type s, YY_MOVE_REF (symbol_type)symbol_type&& that)
258 : super_type (s, YY_MOVEstd::move (that.location))
259 {
260 switch (that.kind ())
261 {
262 case symbol_kind::S_value: // value
263 case symbol_kind::S_map_value: // map_value
264 case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value
265 case symbol_kind::S_ddns_conflict_resolution_mode_value: // ddns_conflict_resolution_mode_value
266 case symbol_kind::S_socket_type: // socket_type
267 case symbol_kind::S_outbound_interface_value: // outbound_interface_value
268 case symbol_kind::S_on_fail_mode: // on_fail_mode
269 case symbol_kind::S_ssl_mode: // ssl_mode
270 case symbol_kind::S_control_socket_type_value: // control_socket_type_value
271 case symbol_kind::S_auth_type_value: // auth_type_value
272 case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value
273 value.move< ElementPtr > (YY_MOVEstd::move (that.value));
274 break;
275
276 case symbol_kind::S_BOOLEAN: // "boolean"
277 value.move< bool > (YY_MOVEstd::move (that.value));
278 break;
279
280 case symbol_kind::S_FLOAT: // "floating point"
281 value.move< double > (YY_MOVEstd::move (that.value));
282 break;
283
284 case symbol_kind::S_INTEGER: // "integer"
285 value.move< int64_t > (YY_MOVEstd::move (that.value));
286 break;
287
288 case symbol_kind::S_STRING: // "constant string"
289 value.move< std::string > (YY_MOVEstd::move (that.value));
290 break;
291
292 default:
293 break;
294 }
295
296 // that is emptied.
297 that.kind_ = symbol_kind::S_YYEMPTY;
298 }
299
300#if YY_CPLUSPLUS201703L < 201103L
301 Dhcp4Parser::stack_symbol_type&
302 Dhcp4Parser::stack_symbol_type::operator= (const stack_symbol_type& that)
303 {
304 state = that.state;
305 switch (that.kind ())
306 {
307 case symbol_kind::S_value: // value
308 case symbol_kind::S_map_value: // map_value
309 case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value
310 case symbol_kind::S_ddns_conflict_resolution_mode_value: // ddns_conflict_resolution_mode_value
311 case symbol_kind::S_socket_type: // socket_type
312 case symbol_kind::S_outbound_interface_value: // outbound_interface_value
313 case symbol_kind::S_on_fail_mode: // on_fail_mode
314 case symbol_kind::S_ssl_mode: // ssl_mode
315 case symbol_kind::S_control_socket_type_value: // control_socket_type_value
316 case symbol_kind::S_auth_type_value: // auth_type_value
317 case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value
318 value.copy< ElementPtr > (that.value);
319 break;
320
321 case symbol_kind::S_BOOLEAN: // "boolean"
322 value.copy< bool > (that.value);
323 break;
324
325 case symbol_kind::S_FLOAT: // "floating point"
326 value.copy< double > (that.value);
327 break;
328
329 case symbol_kind::S_INTEGER: // "integer"
330 value.copy< int64_t > (that.value);
331 break;
332
333 case symbol_kind::S_STRING: // "constant string"
334 value.copy< std::string > (that.value);
335 break;
336
337 default:
338 break;
339 }
340
341 location = that.location;
342 return *this;
343 }
344
345 Dhcp4Parser::stack_symbol_type&
346 Dhcp4Parser::stack_symbol_type::operator= (stack_symbol_type& that)
347 {
348 state = that.state;
349 switch (that.kind ())
350 {
351 case symbol_kind::S_value: // value
352 case symbol_kind::S_map_value: // map_value
353 case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value
354 case symbol_kind::S_ddns_conflict_resolution_mode_value: // ddns_conflict_resolution_mode_value
355 case symbol_kind::S_socket_type: // socket_type
356 case symbol_kind::S_outbound_interface_value: // outbound_interface_value
357 case symbol_kind::S_on_fail_mode: // on_fail_mode
358 case symbol_kind::S_ssl_mode: // ssl_mode
359 case symbol_kind::S_control_socket_type_value: // control_socket_type_value
360 case symbol_kind::S_auth_type_value: // auth_type_value
361 case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value
362 value.move< ElementPtr > (that.value);
363 break;
364
365 case symbol_kind::S_BOOLEAN: // "boolean"
366 value.move< bool > (that.value);
367 break;
368
369 case symbol_kind::S_FLOAT: // "floating point"
370 value.move< double > (that.value);
371 break;
372
373 case symbol_kind::S_INTEGER: // "integer"
374 value.move< int64_t > (that.value);
375 break;
376
377 case symbol_kind::S_STRING: // "constant string"
378 value.move< std::string > (that.value);
379 break;
380
381 default:
382 break;
383 }
384
385 location = that.location;
386 // that is emptied.
387 that.state = empty_state;
388 return *this;
389 }
390#endif
391
392 template <typename Base>
393 void
394 Dhcp4Parser::yy_destroy_ (const char* yymsg, basic_symbol<Base>& yysym) const
395 {
396 if (yymsg)
397 YY_SYMBOL_PRINT (yymsg, yysym)do { if (yydebug_) { *yycdebug_ << yymsg << ' '; yy_print_
(*yycdebug_, yysym); *yycdebug_ << '\n'; } } while (false
)
;
398 }
399
400#if PARSER4_DEBUG1
401 template <typename Base>
402 void
403 Dhcp4Parser::yy_print_ (std::ostream& yyo, const basic_symbol<Base>& yysym) const
404 {
405 std::ostream& yyoutput = yyo;
406 YY_USE (yyoutput)((void) (yyoutput));
407 if (yysym.empty ())
408 yyo << "empty symbol";
409 else
410 {
411 symbol_kind_type yykind = yysym.kind ();
412 yyo << (yykind < YYNTOKENS ? "token" : "nterm")
413 << ' ' << yysym.name () << " ("
414 << yysym.location << ": ";
415 switch (yykind)
416 {
417 case symbol_kind::S_STRING: // "constant string"
418#line 325 "dhcp4_parser.yy"
419 { yyoutput << yysym.value.template as < std::string > (); }
420#line 421 "dhcp4_parser.cc"
421 break;
422
423 case symbol_kind::S_INTEGER: // "integer"
424#line 325 "dhcp4_parser.yy"
425 { yyoutput << yysym.value.template as < int64_t > (); }
426#line 427 "dhcp4_parser.cc"
427 break;
428
429 case symbol_kind::S_FLOAT: // "floating point"
430#line 325 "dhcp4_parser.yy"
431 { yyoutput << yysym.value.template as < double > (); }
432#line 433 "dhcp4_parser.cc"
433 break;
434
435 case symbol_kind::S_BOOLEAN: // "boolean"
436#line 325 "dhcp4_parser.yy"
437 { yyoutput << yysym.value.template as < bool > (); }
438#line 439 "dhcp4_parser.cc"
439 break;
440
441 case symbol_kind::S_value: // value
442#line 325 "dhcp4_parser.yy"
443 { yyoutput << yysym.value.template as < ElementPtr > (); }
444#line 445 "dhcp4_parser.cc"
445 break;
446
447 case symbol_kind::S_map_value: // map_value
448#line 325 "dhcp4_parser.yy"
449 { yyoutput << yysym.value.template as < ElementPtr > (); }
450#line 451 "dhcp4_parser.cc"
451 break;
452
453 case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value
454#line 325 "dhcp4_parser.yy"
455 { yyoutput << yysym.value.template as < ElementPtr > (); }
456#line 457 "dhcp4_parser.cc"
457 break;
458
459 case symbol_kind::S_ddns_conflict_resolution_mode_value: // ddns_conflict_resolution_mode_value
460#line 325 "dhcp4_parser.yy"
461 { yyoutput << yysym.value.template as < ElementPtr > (); }
462#line 463 "dhcp4_parser.cc"
463 break;
464
465 case symbol_kind::S_socket_type: // socket_type
466#line 325 "dhcp4_parser.yy"
467 { yyoutput << yysym.value.template as < ElementPtr > (); }
468#line 469 "dhcp4_parser.cc"
469 break;
470
471 case symbol_kind::S_outbound_interface_value: // outbound_interface_value
472#line 325 "dhcp4_parser.yy"
473 { yyoutput << yysym.value.template as < ElementPtr > (); }
474#line 475 "dhcp4_parser.cc"
475 break;
476
477 case symbol_kind::S_on_fail_mode: // on_fail_mode
478#line 325 "dhcp4_parser.yy"
479 { yyoutput << yysym.value.template as < ElementPtr > (); }
480#line 481 "dhcp4_parser.cc"
481 break;
482
483 case symbol_kind::S_ssl_mode: // ssl_mode
484#line 325 "dhcp4_parser.yy"
485 { yyoutput << yysym.value.template as < ElementPtr > (); }
486#line 487 "dhcp4_parser.cc"
487 break;
488
489 case symbol_kind::S_control_socket_type_value: // control_socket_type_value
490#line 325 "dhcp4_parser.yy"
491 { yyoutput << yysym.value.template as < ElementPtr > (); }
492#line 493 "dhcp4_parser.cc"
493 break;
494
495 case symbol_kind::S_auth_type_value: // auth_type_value
496#line 325 "dhcp4_parser.yy"
497 { yyoutput << yysym.value.template as < ElementPtr > (); }
498#line 499 "dhcp4_parser.cc"
499 break;
500
501 case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value
502#line 325 "dhcp4_parser.yy"
503 { yyoutput << yysym.value.template as < ElementPtr > (); }
504#line 505 "dhcp4_parser.cc"
505 break;
506
507 default:
508 break;
509 }
510 yyo << ')';
511 }
512 }
513#endif
514
515 void
516 Dhcp4Parser::yypush_ (const char* m, YY_MOVE_REF (stack_symbol_type)stack_symbol_type&& sym)
517 {
518 if (m)
519 YY_SYMBOL_PRINT (m, sym)do { if (yydebug_) { *yycdebug_ << m << ' '; yy_print_
(*yycdebug_, sym); *yycdebug_ << '\n'; } } while (false
)
;
520 yystack_.push (YY_MOVEstd::move (sym));
521 }
522
523 void
524 Dhcp4Parser::yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type)symbol_type&& sym)
525 {
526#if 201103L <= YY_CPLUSPLUS201703L
527 yypush_ (m, stack_symbol_type (s, std::move (sym)));
528#else
529 stack_symbol_type ss (s, sym);
530 yypush_ (m, ss);
531#endif
532 }
533
534 void
535 Dhcp4Parser::yypop_ (int n) YY_NOEXCEPTnoexcept
536 {
537 yystack_.pop (n);
538 }
539
540#if PARSER4_DEBUG1
541 std::ostream&
542 Dhcp4Parser::debug_stream () const
543 {
544 return *yycdebug_;
545 }
546
547 void
548 Dhcp4Parser::set_debug_stream (std::ostream& o)
549 {
550 yycdebug_ = &o;
551 }
552
553
554 Dhcp4Parser::debug_level_type
555 Dhcp4Parser::debug_level () const
556 {
557 return yydebug_;
558 }
559
560 void
561 Dhcp4Parser::set_debug_level (debug_level_type l)
562 {
563 yydebug_ = l;
564 }
565#endif // PARSER4_DEBUG
566
567 Dhcp4Parser::state_type
568 Dhcp4Parser::yy_lr_goto_state_ (state_type yystate, int yysym)
569 {
570 int yyr = yypgoto_[yysym - YYNTOKENS] + yystate;
27
The left operand of '+' is a garbage value due to array index out of bounds
571 if (0 <= yyr && yyr <= yylast_ && yycheck_[yyr] == yystate)
572 return yytable_[yyr];
573 else
574 return yydefgoto_[yysym - YYNTOKENS];
575 }
576
577 bool
578 Dhcp4Parser::yy_pact_value_is_default_ (int yyvalue) YY_NOEXCEPTnoexcept
579 {
580 return yyvalue == yypact_ninf_;
581 }
582
583 bool
584 Dhcp4Parser::yy_table_value_is_error_ (int yyvalue) YY_NOEXCEPTnoexcept
585 {
586 return yyvalue == yytable_ninf_;
587 }
588
589 int
590 Dhcp4Parser::operator() ()
591 {
592 return parse ();
593 }
594
595 int
596 Dhcp4Parser::parse ()
597 {
598 int yyn;
599 /// Length of the RHS of the rule being reduced.
600 int yylen = 0;
601
602 // Error handling.
603 int yynerrs_ = 0;
604 int yyerrstatus_ = 0;
605
606 /// The lookahead symbol.
607 symbol_type yyla;
608
609 /// The locations where the error started and ended.
610 stack_symbol_type yyerror_range[3];
611
612 /// The return value of parse ().
613 int yyresult;
614
615#if YY_EXCEPTIONS1
616 try
617#endif // YY_EXCEPTIONS
618 {
619 YYCDEBUGif (yydebug_) (*yycdebug_) << "Starting parse\n";
1
Assuming field 'yydebug_' is 0
2
Taking false branch
620
621
622 /* Initialize the stack. The initial state will be set in
623 yynewstate, since the latter expects the semantical and the
624 location values to have been already stored, initialize these
625 stacks with a primary value. */
626 yystack_.clear ();
627 yypush_ (YY_NULLPTRnullptr, 0, YY_MOVEstd::move (yyla));
628
629 /*-----------------------------------------------.
630 | yynewstate -- push a new symbol on the stack. |
631 `-----------------------------------------------*/
632 yynewstate:
633 YYCDEBUGif (yydebug_) (*yycdebug_) << "Entering state " << int (yystack_[0].state) << '\n';
3
Assuming field 'yydebug_' is 0
4
Taking false branch
634 YY_STACK_PRINT ()do { if (yydebug_) yy_stack_print_ (); } while (false);
5
Taking false branch
6
Loop condition is false. Exiting loop
635
636 // Accept?
637 if (yystack_[0].state == yyfinal_)
7
Assuming field 'state' is not equal to yyfinal_
8
Taking false branch
638 YYACCEPTgoto yyacceptlab;
639
640 goto yybackup;
9
Control jumps to line 648
641
642
643 /*-----------.
644 | yybackup. |
645 `-----------*/
646 yybackup:
647 // Try to take a decision without lookahead.
648 yyn = yypact_[+yystack_[0].state];
649 if (yy_pact_value_is_default_ (yyn))
10
Taking false branch
650 goto yydefault;
651
652 // Read a lookahead token.
653 if (yyla.empty ())
11
Taking true branch
654 {
655 YYCDEBUGif (yydebug_) (*yycdebug_) << "Reading a token\n";
12
Assuming field 'yydebug_' is 0
13
Taking false branch
656#if YY_EXCEPTIONS1
657 try
658#endif // YY_EXCEPTIONS
659 {
660 symbol_type yylookahead (yylexparser4_lex (ctx));
661 yyla.move (yylookahead);
662 }
663#if YY_EXCEPTIONS1
664 catch (const syntax_error& yyexc)
665 {
666 YYCDEBUGif (yydebug_) (*yycdebug_) << "Caught exception: " << yyexc.what() << '\n';
667 error (yyexc);
668 goto yyerrlab1;
669 }
670#endif // YY_EXCEPTIONS
671 }
672 YY_SYMBOL_PRINT ("Next token is", yyla)do { if (yydebug_) { *yycdebug_ << "Next token is" <<
' '; yy_print_ (*yycdebug_, yyla); *yycdebug_ << '\n';
} } while (false)
;
14
Taking false branch
15
Loop condition is false. Exiting loop
673
674 if (yyla.kind () == symbol_kind::S_YYerror)
16
Assuming the condition is false
17
Taking false branch
675 {
676 // The scanner already issued an error message, process directly
677 // to error recovery. But do not keep the error token as
678 // lookahead, it is too special and may lead us to an endless
679 // loop in error recovery. */
680 yyla.kind_ = symbol_kind::S_YYUNDEF;
681 goto yyerrlab1;
682 }
683
684 /* If the proper action on seeing token YYLA.TYPE is to reduce or
685 to detect an error, take that action. */
686 yyn += yyla.kind ();
687 if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.kind ())
18
Assuming 'yyn' is >= 0
19
Assuming 'yyn' is <= yylast_
20
Assuming the condition is false
21
Taking false branch
688 {
689 goto yydefault;
690 }
691
692 // Reduce or error.
693 yyn = yytable_[yyn];
694 if (yyn <= 0)
22
Assuming 'yyn' is <= 0
23
Taking true branch
695 {
696 if (yy_table_value_is_error_ (yyn))
24
Taking false branch
697 goto yyerrlab;
698 yyn = -yyn;
699 goto yyreduce;
25
Control jumps to line 725
700 }
701
702 // Count tokens shifted since error; after three, turn off error status.
703 if (yyerrstatus_)
704 --yyerrstatus_;
705
706 // Shift the lookahead token.
707 yypush_ ("Shifting", state_type (yyn), YY_MOVEstd::move (yyla));
708 goto yynewstate;
709
710
711 /*-----------------------------------------------------------.
712 | yydefault -- do the default action for the current state. |
713 `-----------------------------------------------------------*/
714 yydefault:
715 yyn = yydefact_[+yystack_[0].state];
716 if (yyn == 0)
717 goto yyerrlab;
718 goto yyreduce;
719
720
721 /*-----------------------------.
722 | yyreduce -- do a reduction. |
723 `-----------------------------*/
724 yyreduce:
725 yylen = yyr2_[yyn];
726 {
727 stack_symbol_type yylhs;
728 yylhs.state = yy_lr_goto_state_ (yystack_[yylen].state, yyr1_[yyn]);
26
Calling 'Dhcp4Parser::yy_lr_goto_state_'
729 /* Variants are always initialized to an empty instance of the
730 correct type. The default '$$ = $1' action is NOT applied
731 when using variants. */
732 switch (yyr1_[yyn])
733 {
734 case symbol_kind::S_value: // value
735 case symbol_kind::S_map_value: // map_value
736 case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value
737 case symbol_kind::S_ddns_conflict_resolution_mode_value: // ddns_conflict_resolution_mode_value
738 case symbol_kind::S_socket_type: // socket_type
739 case symbol_kind::S_outbound_interface_value: // outbound_interface_value
740 case symbol_kind::S_on_fail_mode: // on_fail_mode
741 case symbol_kind::S_ssl_mode: // ssl_mode
742 case symbol_kind::S_control_socket_type_value: // control_socket_type_value
743 case symbol_kind::S_auth_type_value: // auth_type_value
744 case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value
745 yylhs.value.emplace< ElementPtr > ();
746 break;
747
748 case symbol_kind::S_BOOLEAN: // "boolean"
749 yylhs.value.emplace< bool > ();
750 break;
751
752 case symbol_kind::S_FLOAT: // "floating point"
753 yylhs.value.emplace< double > ();
754 break;
755
756 case symbol_kind::S_INTEGER: // "integer"
757 yylhs.value.emplace< int64_t > ();
758 break;
759
760 case symbol_kind::S_STRING: // "constant string"
761 yylhs.value.emplace< std::string > ();
762 break;
763
764 default:
765 break;
766 }
767
768
769 // Default location.
770 {
771 stack_type::slice range (yystack_, yylen);
772 YYLLOC_DEFAULT (yylhs.location, range, yylen)do if (yylen) { (yylhs.location).begin = ((range)[1].location
).begin; (yylhs.location).end = ((range)[yylen].location).end
; } else { (yylhs.location).begin = (yylhs.location).end = ((
range)[0].location).end; } while (false)
;
773 yyerror_range[1].location = yylhs.location;
774 }
775
776 // Perform the reduction.
777 YY_REDUCE_PRINT (yyn)do { if (yydebug_) yy_reduce_print_ (yyn); } while (false);
778#if YY_EXCEPTIONS1
779 try
780#endif // YY_EXCEPTIONS
781 {
782 switch (yyn)
783 {
784 case 2: // $@1: %empty
785#line 334 "dhcp4_parser.yy"
786 { ctx.ctx_ = ctx.NO_KEYWORD; }
787#line 788 "dhcp4_parser.cc"
788 break;
789
790 case 4: // $@2: %empty
791#line 335 "dhcp4_parser.yy"
792 { ctx.ctx_ = ctx.CONFIG; }
793#line 794 "dhcp4_parser.cc"
794 break;
795
796 case 6: // $@3: %empty
797#line 336 "dhcp4_parser.yy"
798 { ctx.ctx_ = ctx.DHCP4; }
799#line 800 "dhcp4_parser.cc"
800 break;
801
802 case 8: // $@4: %empty
803#line 337 "dhcp4_parser.yy"
804 { ctx.ctx_ = ctx.INTERFACES_CONFIG; }
805#line 806 "dhcp4_parser.cc"
806 break;
807
808 case 10: // $@5: %empty
809#line 338 "dhcp4_parser.yy"
810 { ctx.ctx_ = ctx.SUBNET4; }
811#line 812 "dhcp4_parser.cc"
812 break;
813
814 case 12: // $@6: %empty
815#line 339 "dhcp4_parser.yy"
816 { ctx.ctx_ = ctx.POOLS; }
817#line 818 "dhcp4_parser.cc"
818 break;
819
820 case 14: // $@7: %empty
821#line 340 "dhcp4_parser.yy"
822 { ctx.ctx_ = ctx.RESERVATIONS; }
823#line 824 "dhcp4_parser.cc"
824 break;
825
826 case 16: // $@8: %empty
827#line 341 "dhcp4_parser.yy"
828 { ctx.ctx_ = ctx.DHCP4; }
829#line 830 "dhcp4_parser.cc"
830 break;
831
832 case 18: // $@9: %empty
833#line 342 "dhcp4_parser.yy"
834 { ctx.ctx_ = ctx.OPTION_DEF; }
835#line 836 "dhcp4_parser.cc"
836 break;
837
838 case 20: // $@10: %empty
839#line 343 "dhcp4_parser.yy"
840 { ctx.ctx_ = ctx.OPTION_DATA; }
841#line 842 "dhcp4_parser.cc"
842 break;
843
844 case 22: // $@11: %empty
845#line 344 "dhcp4_parser.yy"
846 { ctx.ctx_ = ctx.HOOKS_LIBRARIES; }
847#line 848 "dhcp4_parser.cc"
848 break;
849
850 case 24: // $@12: %empty
851#line 345 "dhcp4_parser.yy"
852 { ctx.ctx_ = ctx.DHCP_DDNS; }
853#line 854 "dhcp4_parser.cc"
854 break;
855
856 case 26: // $@13: %empty
857#line 346 "dhcp4_parser.yy"
858 { ctx.ctx_ = ctx.CONFIG_CONTROL; }
859#line 860 "dhcp4_parser.cc"
860 break;
861
862 case 28: // value: "integer"
863#line 354 "dhcp4_parser.yy"
864 { yylhs.value.as < ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); }
865#line 866 "dhcp4_parser.cc"
866 break;
867
868 case 29: // value: "floating point"
869#line 355 "dhcp4_parser.yy"
870 { yylhs.value.as < ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); }
871#line 872 "dhcp4_parser.cc"
872 break;
873
874 case 30: // value: "boolean"
875#line 356 "dhcp4_parser.yy"
876 { yylhs.value.as < ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); }
877#line 878 "dhcp4_parser.cc"
878 break;
879
880 case 31: // value: "constant string"
881#line 357 "dhcp4_parser.yy"
882 { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); }
883#line 884 "dhcp4_parser.cc"
884 break;
885
886 case 32: // value: "null"
887#line 358 "dhcp4_parser.yy"
888 { yylhs.value.as < ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
889#line 890 "dhcp4_parser.cc"
890 break;
891
892 case 33: // value: map2
893#line 359 "dhcp4_parser.yy"
894 { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
895#line 896 "dhcp4_parser.cc"
896 break;
897
898 case 34: // value: list_generic
899#line 360 "dhcp4_parser.yy"
900 { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
901#line 902 "dhcp4_parser.cc"
902 break;
903
904 case 35: // sub_json: value
905#line 363 "dhcp4_parser.yy"
906 {
907 // Push back the JSON value on the stack
908 ctx.stack_.push_back(yystack_[0].value.as < ElementPtr > ());
909}
910#line 911 "dhcp4_parser.cc"
911 break;
912
913 case 36: // $@14: %empty
914#line 368 "dhcp4_parser.yy"
915 {
916 // This code is executed when we're about to start parsing
917 // the content of the map
918 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
919 ctx.stack_.push_back(m);
920}
921#line 922 "dhcp4_parser.cc"
922 break;
923
924 case 37: // map2: "{" $@14 map_content "}"
925#line 373 "dhcp4_parser.yy"
926 {
927 // map parsing completed. If we ever want to do any wrap up
928 // (maybe some sanity checking), this would be the best place
929 // for it.
930}
931#line 932 "dhcp4_parser.cc"
932 break;
933
934 case 38: // map_value: map2
935#line 379 "dhcp4_parser.yy"
936 { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
937#line 938 "dhcp4_parser.cc"
938 break;
939
940 case 41: // not_empty_map: "constant string" ":" value
941#line 386 "dhcp4_parser.yy"
942 {
943 // map containing a single entry
944 ctx.unique(yystack_[2].value.as < std::string > (), ctx.loc2pos(yystack_[2].location));
945 ctx.stack_.back()->set(yystack_[2].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ());
946 }
947#line 948 "dhcp4_parser.cc"
948 break;
949
950 case 42: // not_empty_map: not_empty_map "," "constant string" ":" value
951#line 391 "dhcp4_parser.yy"
952 {
953 // map consisting of a shorter map followed by
954 // comma and string:value
955 ctx.unique(yystack_[2].value.as < std::string > (), ctx.loc2pos(yystack_[2].location));
956 ctx.stack_.back()->set(yystack_[2].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ());
957 }
958#line 959 "dhcp4_parser.cc"
959 break;
960
961 case 43: // not_empty_map: not_empty_map ","
962#line 397 "dhcp4_parser.yy"
963 {
964 ctx.warnAboutExtraCommas(yystack_[0].location);
965 }
966#line 967 "dhcp4_parser.cc"
967 break;
968
969 case 44: // $@15: %empty
970#line 402 "dhcp4_parser.yy"
971 {
972 ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
973 ctx.stack_.push_back(l);
974}
975#line 976 "dhcp4_parser.cc"
976 break;
977
978 case 45: // list_generic: "[" $@15 list_content "]"
979#line 405 "dhcp4_parser.yy"
980 {
981 // list parsing complete. Put any sanity checking here
982}
983#line 984 "dhcp4_parser.cc"
984 break;
985
986 case 48: // not_empty_list: value
987#line 413 "dhcp4_parser.yy"
988 {
989 // List consisting of a single element.
990 ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ());
991 }
992#line 993 "dhcp4_parser.cc"
993 break;
994
995 case 49: // not_empty_list: not_empty_list "," value
996#line 417 "dhcp4_parser.yy"
997 {
998 // List ending with , and a value.
999 ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ());
1000 }
1001#line 1002 "dhcp4_parser.cc"
1002 break;
1003
1004 case 50: // not_empty_list: not_empty_list ","
1005#line 421 "dhcp4_parser.yy"
1006 {
1007 ctx.warnAboutExtraCommas(yystack_[0].location);
1008 }
1009#line 1010 "dhcp4_parser.cc"
1010 break;
1011
1012 case 51: // $@16: %empty
1013#line 427 "dhcp4_parser.yy"
1014 {
1015 // List parsing about to start
1016}
1017#line 1018 "dhcp4_parser.cc"
1018 break;
1019
1020 case 52: // list_strings: "[" $@16 list_strings_content "]"
1021#line 429 "dhcp4_parser.yy"
1022 {
1023 // list parsing complete. Put any sanity checking here
1024 //ctx.stack_.pop_back();
1025}
1026#line 1027 "dhcp4_parser.cc"
1027 break;
1028
1029 case 55: // not_empty_list_strings: "constant string"
1030#line 438 "dhcp4_parser.yy"
1031 {
1032 ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
1033 ctx.stack_.back()->add(s);
1034 }
1035#line 1036 "dhcp4_parser.cc"
1036 break;
1037
1038 case 56: // not_empty_list_strings: not_empty_list_strings "," "constant string"
1039#line 442 "dhcp4_parser.yy"
1040 {
1041 ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
1042 ctx.stack_.back()->add(s);
1043 }
1044#line 1045 "dhcp4_parser.cc"
1045 break;
1046
1047 case 57: // not_empty_list_strings: not_empty_list_strings ","
1048#line 446 "dhcp4_parser.yy"
1049 {
1050 ctx.warnAboutExtraCommas(yystack_[0].location);
1051 }
1052#line 1053 "dhcp4_parser.cc"
1053 break;
1054
1055 case 58: // unknown_map_entry: "constant string" ":"
1056#line 456 "dhcp4_parser.yy"
1057 {
1058 const std::string& where = ctx.contextName();
1059 const std::string& keyword = yystack_[1].value.as < std::string > ();
1060 error(yystack_[1].location,
1061 "got unexpected keyword \"" + keyword + "\" in " + where + " map.");
1062}
1063#line 1064 "dhcp4_parser.cc"
1064 break;
1065
1066 case 59: // $@17: %empty
1067#line 465 "dhcp4_parser.yy"
1068 {
1069 // This code is executed when we're about to start parsing
1070 // the content of the map
1071 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
1072 ctx.stack_.push_back(m);
1073}
1074#line 1075 "dhcp4_parser.cc"
1075 break;
1076
1077 case 60: // syntax_map: "{" $@17 global_object "}"
1078#line 470 "dhcp4_parser.yy"
1079 {
1080 // map parsing completed. If we ever want to do any wrap up
1081 // (maybe some sanity checking), this would be the best place
1082 // for it.
1083
1084 // Dhcp4 is required
1085 ctx.require("Dhcp4", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
1086}
1087#line 1088 "dhcp4_parser.cc"
1088 break;
1089
1090 case 61: // $@18: %empty
1091#line 480 "dhcp4_parser.yy"
1092 {
1093 // This code is executed when we're about to start parsing
1094 // the content of the map
1095 // Prevent against duplicate.
1096 ctx.unique("Dhcp4", ctx.loc2pos(yystack_[0].location));
1097 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
1098 ctx.stack_.back()->set("Dhcp4", m);
1099 ctx.stack_.push_back(m);
1100 ctx.enter(ctx.DHCP4);
1101}
1102#line 1103 "dhcp4_parser.cc"
1103 break;
1104
1105 case 62: // global_object: "Dhcp4" $@18 ":" "{" global_params "}"
1106#line 489 "dhcp4_parser.yy"
1107 {
1108 // No global parameter is required
1109 ctx.stack_.pop_back();
1110 ctx.leave();
1111}
1112#line 1113 "dhcp4_parser.cc"
1113 break;
1114
1115 case 64: // global_object_comma: global_object ","
1116#line 497 "dhcp4_parser.yy"
1117 {
1118 ctx.warnAboutExtraCommas(yystack_[0].location);
1119}
1120#line 1121 "dhcp4_parser.cc"
1121 break;
1122
1123 case 65: // $@19: %empty
1124#line 503 "dhcp4_parser.yy"
1125 {
1126 // Parse the Dhcp4 map
1127 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
1128 ctx.stack_.push_back(m);
1129}
1130#line 1131 "dhcp4_parser.cc"
1131 break;
1132
1133 case 66: // sub_dhcp4: "{" $@19 global_params "}"
1134#line 507 "dhcp4_parser.yy"
1135 {
1136 // No global parameter is required
1137 // parsing completed
1138}
1139#line 1140 "dhcp4_parser.cc"
1140 break;
1141
1142 case 69: // global_params: global_params ","
1143#line 514 "dhcp4_parser.yy"
1144 {
1145 ctx.warnAboutExtraCommas(yystack_[0].location);
1146 }
1147#line 1148 "dhcp4_parser.cc"
1148 break;
1149
1150 case 143: // valid_lifetime: "valid-lifetime" ":" "integer"
1151#line 596 "dhcp4_parser.yy"
1152 {
1153 ctx.unique("valid-lifetime", ctx.loc2pos(yystack_[2].location));
1154 ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
1155 ctx.stack_.back()->set("valid-lifetime", prf);
1156}
1157#line 1158 "dhcp4_parser.cc"
1158 break;
1159
1160 case 144: // min_valid_lifetime: "min-valid-lifetime" ":" "integer"
1161#line 602 "dhcp4_parser.yy"
1162 {
1163 ctx.unique("min-valid-lifetime", ctx.loc2pos(yystack_[2].location));
1164 ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
1165 ctx.stack_.back()->set("min-valid-lifetime", prf);
1166}
1167#line 1168 "dhcp4_parser.cc"
1168 break;
1169
1170 case 145: // max_valid_lifetime: "max-valid-lifetime" ":" "integer"
1171#line 608 "dhcp4_parser.yy"
1172 {
1173 ctx.unique("max-valid-lifetime", ctx.loc2pos(yystack_[2].location));
1174 ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
1175 ctx.stack_.back()->set("max-valid-lifetime", prf);
1176}
1177#line 1178 "dhcp4_parser.cc"
1178 break;
1179
1180 case 146: // renew_timer: "renew-timer" ":" "integer"
1181#line 614 "dhcp4_parser.yy"
1182 {
1183 ctx.unique("renew-timer", ctx.loc2pos(yystack_[2].location));
1184 ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
1185 ctx.stack_.back()->set("renew-timer", prf);
1186}
1187#line 1188 "dhcp4_parser.cc"
1188 break;
1189
1190 case 147: // rebind_timer: "rebind-timer" ":" "integer"
1191#line 620 "dhcp4_parser.yy"
1192 {
1193 ctx.unique("rebind-timer", ctx.loc2pos(yystack_[2].location));
1194 ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
1195 ctx.stack_.back()->set("rebind-timer", prf);
1196}
1197#line 1198 "dhcp4_parser.cc"
1198 break;
1199
1200 case 148: // calculate_tee_times: "calculate-tee-times" ":" "boolean"
1201#line 626 "dhcp4_parser.yy"
1202 {
1203 ctx.unique("calculate-tee-times", ctx.loc2pos(yystack_[2].location));
1204 ElementPtr ctt(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
1205 ctx.stack_.back()->set("calculate-tee-times", ctt);
1206}
1207#line 1208 "dhcp4_parser.cc"
1208 break;
1209
1210 case 149: // t1_percent: "t1-percent" ":" "floating point"
1211#line 632 "dhcp4_parser.yy"
1212 {
1213 ctx.unique("t1-percent", ctx.loc2pos(yystack_[2].location));
1214 ElementPtr t1(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location)));
1215 ctx.stack_.back()->set("t1-percent", t1);
1216}
1217#line 1218 "dhcp4_parser.cc"
1218 break;
1219
1220 case 150: // t2_percent: "t2-percent" ":" "floating point"
1221#line 638 "dhcp4_parser.yy"
1222 {
1223 ctx.unique("t2-percent", ctx.loc2pos(yystack_[2].location));
1224 ElementPtr t2(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location)));
1225 ctx.stack_.back()->set("t2-percent", t2);
1226}
1227#line 1228 "dhcp4_parser.cc"
1228 break;
1229
1230 case 151: // cache_threshold: "cache-threshold" ":" "floating point"
1231#line 644 "dhcp4_parser.yy"
1232 {
1233 ctx.unique("cache-threshold", ctx.loc2pos(yystack_[2].location));
1234 ElementPtr ct(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location)));
1235 ctx.stack_.back()->set("cache-threshold", ct);
1236}
1237#line 1238 "dhcp4_parser.cc"
1238 break;
1239
1240 case 152: // cache_max_age: "cache-max-age" ":" "integer"
1241#line 650 "dhcp4_parser.yy"
1242 {
1243 ctx.unique("cache-max-age", ctx.loc2pos(yystack_[2].location));
1244 ElementPtr cm(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
1245 ctx.stack_.back()->set("cache-max-age", cm);
1246}
1247#line 1248 "dhcp4_parser.cc"
1248 break;
1249
1250 case 153: // adaptive_lease_time_threshold: "adaptive-lease-time-threshold" ":" "floating point"
1251#line 656 "dhcp4_parser.yy"
1252 {
1253 ctx.unique("adaptive-lease-time-threshold", ctx.loc2pos(yystack_[2].location));
1254 ElementPtr altt(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location)));
1255 ctx.stack_.back()->set("adaptive-lease-time-threshold", altt);
1256}
1257#line 1258 "dhcp4_parser.cc"
1258 break;
1259
1260 case 154: // decline_probation_period: "decline-probation-period" ":" "integer"
1261#line 662 "dhcp4_parser.yy"
1262 {
1263 ctx.unique("decline-probation-period", ctx.loc2pos(yystack_[2].location));
1264 ElementPtr dpp(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
1265 ctx.stack_.back()->set("decline-probation-period", dpp);
1266}
1267#line 1268 "dhcp4_parser.cc"
1268 break;
1269
1270 case 155: // $@20: %empty
1271#line 668 "dhcp4_parser.yy"
1272 {
1273 ctx.unique("server-tag", ctx.loc2pos(yystack_[0].location));
1274 ctx.enter(ctx.NO_KEYWORD);
1275}
1276#line 1277 "dhcp4_parser.cc"
1277 break;
1278
1279 case 156: // server_tag: "server-tag" $@20 ":" "constant string"
1280#line 671 "dhcp4_parser.yy"
1281 {
1282 ElementPtr stag(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
1283 ctx.stack_.back()->set("server-tag", stag);
1284 ctx.leave();
1285}
1286#line 1287 "dhcp4_parser.cc"
1287 break;
1288
1289 case 157: // parked_packet_limit: "parked-packet-limit" ":" "integer"
1290#line 677 "dhcp4_parser.yy"
1291 {
1292 ctx.unique("parked-packet-limit", ctx.loc2pos(yystack_[2].location));
1293 ElementPtr ppl(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
1294 ctx.stack_.back()->set("parked-packet-limit", ppl);
1295}
1296#line 1297 "dhcp4_parser.cc"
1297 break;
1298
1299 case 158: // $@21: %empty
1300#line 683 "dhcp4_parser.yy"
1301 {
1302 ctx.unique("allocator", ctx.loc2pos(yystack_[0].location));
1303 ctx.enter(ctx.NO_KEYWORD);
1304}
1305#line 1306 "dhcp4_parser.cc"
1306 break;
1307
1308 case 159: // allocator: "allocator" $@21 ":" "constant string"
1309#line 686 "dhcp4_parser.yy"
1310 {
1311 ElementPtr al(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
1312 ctx.stack_.back()->set("allocator", al);
1313 ctx.leave();
1314}
1315#line 1316 "dhcp4_parser.cc"
1316 break;
1317
1318 case 160: // echo_client_id: "echo-client-id" ":" "boolean"
1319#line 692 "dhcp4_parser.yy"
1320 {
1321 ctx.unique("echo-client-id", ctx.loc2pos(yystack_[2].location));
1322 ElementPtr echo(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
1323 ctx.stack_.back()->set("echo-client-id", echo);
1324}
1325#line 1326 "dhcp4_parser.cc"
1326 break;
1327
1328 case 161: // match_client_id: "match-client-id" ":" "boolean"
1329#line 698 "dhcp4_parser.yy"
1330 {
1331 ctx.unique("match-client-id", ctx.loc2pos(yystack_[2].location));
1332 ElementPtr match(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
1333 ctx.stack_.back()->set("match-client-id", match);
1334}
1335#line 1336 "dhcp4_parser.cc"
1336 break;
1337
1338 case 162: // authoritative: "authoritative" ":" "boolean"
1339#line 704 "dhcp4_parser.yy"
1340 {
1341 ctx.unique("authoritative", ctx.loc2pos(yystack_[2].location));
1342 ElementPtr prf(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
1343 ctx.stack_.back()->set("authoritative", prf);
1344}
1345#line 1346 "dhcp4_parser.cc"
1346 break;
1347
1348 case 163: // ddns_send_updates: "ddns-send-updates" ":" "boolean"
1349#line 710 "dhcp4_parser.yy"
1350 {
1351 ctx.unique("ddns-send-updates", ctx.loc2pos(yystack_[2].location));
1352 ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
1353 ctx.stack_.back()->set("ddns-send-updates", b);
1354}
1355#line 1356 "dhcp4_parser.cc"
1356 break;
1357
1358 case 164: // ddns_override_no_update: "ddns-override-no-update" ":" "boolean"
1359#line 716 "dhcp4_parser.yy"
1360 {
1361 ctx.unique("ddns-override-no-update", ctx.loc2pos(yystack_[2].location));
1362 ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
1363 ctx.stack_.back()->set("ddns-override-no-update", b);
1364}
1365#line 1366 "dhcp4_parser.cc"
1366 break;
1367
1368 case 165: // ddns_override_client_update: "ddns-override-client-update" ":" "boolean"
1369#line 722 "dhcp4_parser.yy"
1370 {
1371 ctx.unique("ddns-override-client-update", ctx.loc2pos(yystack_[2].location));
1372 ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
1373 ctx.stack_.back()->set("ddns-override-client-update", b);
1374}
1375#line 1376 "dhcp4_parser.cc"
1376 break;
1377
1378 case 166: // $@22: %empty
1379#line 728 "dhcp4_parser.yy"
1380 {
1381 ctx.enter(ctx.REPLACE_CLIENT_NAME);
1382 ctx.unique("ddns-replace-client-name", ctx.loc2pos(yystack_[0].location));
1383}
1384#line 1385 "dhcp4_parser.cc"
1385 break;
1386
1387 case 167: // ddns_replace_client_name: "ddns-replace-client-name" $@22 ":" ddns_replace_client_name_value
1388#line 731 "dhcp4_parser.yy"
1389 {
1390 ctx.stack_.back()->set("ddns-replace-client-name", yystack_[0].value.as < ElementPtr > ());
1391 ctx.leave();
1392}
1393#line 1394 "dhcp4_parser.cc"
1394 break;
1395
1396 case 168: // ddns_replace_client_name_value: "when-present"
1397#line 737 "dhcp4_parser.yy"
1398 {
1399 yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location)));
1400 }
1401#line 1402 "dhcp4_parser.cc"
1402 break;
1403
1404 case 169: // ddns_replace_client_name_value: "never"
1405#line 740 "dhcp4_parser.yy"
1406 {
1407 yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location)));
1408 }
1409#line 1410 "dhcp4_parser.cc"
1410 break;
1411
1412 case 170: // ddns_replace_client_name_value: "always"
1413#line 743 "dhcp4_parser.yy"
1414 {
1415 yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location)));
1416 }
1417#line 1418 "dhcp4_parser.cc"
1418 break;
1419
1420 case 171: // ddns_replace_client_name_value: "when-not-present"
1421#line 746 "dhcp4_parser.yy"
1422 {
1423 yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location)));
1424 }
1425#line 1426 "dhcp4_parser.cc"
1426 break;
1427
1428 case 172: // ddns_replace_client_name_value: "boolean"
1429#line 749 "dhcp4_parser.yy"
1430 {
1431 error(yystack_[0].location, "boolean values for the ddns-replace-client-name are "
1432 "no longer supported");
1433 }
1434#line 1435 "dhcp4_parser.cc"
1435 break;
1436
1437 case 173: // $@23: %empty
1438#line 755 "dhcp4_parser.yy"
1439 {
1440 ctx.unique("ddns-generated-prefix", ctx.loc2pos(yystack_[0].location));
1441 ctx.enter(ctx.NO_KEYWORD);
1442}
1443#line 1444 "dhcp4_parser.cc"
1444 break;
1445
1446 case 174: // ddns_generated_prefix: "ddns-generated-prefix" $@23 ":" "constant string"
1447#line 758 "dhcp4_parser.yy"
1448 {
1449 ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
1450 ctx.stack_.back()->set("ddns-generated-prefix", s);
1451 ctx.leave();
1452}
1453#line 1454 "dhcp4_parser.cc"
1454 break;
1455
1456 case 175: // $@24: %empty
1457#line 764 "dhcp4_parser.yy"
1458 {
1459 ctx.unique("ddns-qualifying-suffix", ctx.loc2pos(yystack_[0].location));
1460 ctx.enter(ctx.NO_KEYWORD);
1461}
1462#line 1463 "dhcp4_parser.cc"
1463 break;
1464
1465 case 176: // ddns_qualifying_suffix: "ddns-qualifying-suffix" $@24 ":" "constant string"
1466#line 767 "dhcp4_parser.yy"
1467 {
1468 ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
1469 ctx.stack_.back()->set("ddns-qualifying-suffix", s);
1470 ctx.leave();
1471}
1472#line 1473 "dhcp4_parser.cc"
1473 break;
1474
1475 case 177: // $@25: %empty
1476#line 773 "dhcp4_parser.yy"
1477 {
1478 ctx.unique("ddns-reverse-zone", ctx.loc2pos(yystack_[0].location));
1479 ctx.enter(ctx.NO_KEYWORD);
1480}
1481#line 1482 "dhcp4_parser.cc"
1482 break;
1483
1484 case 178: // ddns_reverse_zone: "ddns-reverse-zone" $@25 ":" "constant string"
1485#line 776 "dhcp4_parser.yy"
1486 {
1487 ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
1488 ctx.stack_.back()->set("ddns-reverse-zone", s);
1489 ctx.leave();
1490}
1491#line 1492 "dhcp4_parser.cc"
1492 break;
1493
1494 case 179: // ddns_update_on_renew: "ddns-update-on-renew" ":" "boolean"
1495#line 782 "dhcp4_parser.yy"
1496 {
1497 ctx.unique("ddns-update-on-renew", ctx.loc2pos(yystack_[2].location));
1498 ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
1499 ctx.stack_.back()->set("ddns-update-on-renew", b);
1500}
1501#line 1502 "dhcp4_parser.cc"
1502 break;
1503
1504 case 180: // ddns_use_conflict_resolution: "ddns-use-conflict-resolution" ":" "boolean"
1505#line 791 "dhcp4_parser.yy"
1506 {
1507 ctx.unique("ddns-use-conflict-resolution", ctx.loc2pos(yystack_[2].location));
1508 ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
1509 ctx.warning(yystack_[1].location, "ddns-use-conflict-resolution is deprecated. "
1510 "Substituting ddns-conflict-resolution-mode");
1511 ElementPtr mode(new StringElement(b->boolValue() ? "check-with-dhcid"
1512 : "no-check-with-dhcid"));
1513 ctx.stack_.back()->set("ddns-conflict-resolution-mode", mode);
1514}
1515#line 1516 "dhcp4_parser.cc"
1516 break;
1517
1518 case 181: // $@26: %empty
1519#line 801 "dhcp4_parser.yy"
1520 {
1521 ctx.unique("ddns-conflict-resolution-mode", ctx.loc2pos(yystack_[0].location));
1522 ctx.enter(ctx.DDNS_CONFLICT_RESOLUTION_MODE);
1523}
1524#line 1525 "dhcp4_parser.cc"
1525 break;
1526
1527 case 182: // ddns_conflict_resolution_mode: "ddns-conflict-resolution-mode" $@26 ":" ddns_conflict_resolution_mode_value
1528#line 804 "dhcp4_parser.yy"
1529 {
1530 ctx.stack_.back()->set("ddns-conflict-resolution-mode", yystack_[0].value.as < ElementPtr > ());
1531 ctx.leave();
1532}
1533#line 1534 "dhcp4_parser.cc"
1534 break;
1535
1536 case 183: // ddns_conflict_resolution_mode_value: "check-with-dhcid"
1537#line 810 "dhcp4_parser.yy"
1538 {
1539 yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("check-with-dhcid", ctx.loc2pos(yystack_[0].location)));
1540 }
1541#line 1542 "dhcp4_parser.cc"
1542 break;
1543
1544 case 184: // ddns_conflict_resolution_mode_value: "no-check-with-dhcid"
1545#line 813 "dhcp4_parser.yy"
1546 {
1547 yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("no-check-with-dhcid", ctx.loc2pos(yystack_[0].location)));
1548 }
1549#line 1550 "dhcp4_parser.cc"
1550 break;
1551
1552 case 185: // ddns_conflict_resolution_mode_value: "check-exists-with-dhcid"
1553#line 816 "dhcp4_parser.yy"
1554 {
1555 yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("check-exists-with-dhcid", ctx.loc2pos(yystack_[0].location)));
1556 }
1557#line 1558 "dhcp4_parser.cc"
1558 break;
1559
1560 case 186: // ddns_conflict_resolution_mode_value: "no-check-without-dhcid"
1561#line 819 "dhcp4_parser.yy"
1562 {
1563 yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("no-check-without-dhcid", ctx.loc2pos(yystack_[0].location)));
1564 }
1565#line 1566 "dhcp4_parser.cc"
1566 break;
1567
1568 case 187: // ddns_ttl_percent: "ddns-ttl-percent" ":" "floating point"
1569#line 824 "dhcp4_parser.yy"
1570 {
1571 ctx.unique("ddns-ttl-percent", ctx.loc2pos(yystack_[2].location));
1572 ElementPtr ttl(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location)));
1573 ctx.stack_.back()->set("ddns-ttl-percent", ttl);
1574}
1575#line 1576 "dhcp4_parser.cc"
1576 break;
1577
1578 case 188: // ddns_ttl: "ddns-ttl" ":" "integer"
1579#line 830 "dhcp4_parser.yy"
1580 {
1581 ctx.unique("ddns-ttl", ctx.loc2pos(yystack_[2].location));
1582 ElementPtr ttl(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
1583 ctx.stack_.back()->set("ddns-ttl", ttl);
1584}
1585#line 1586 "dhcp4_parser.cc"
1586 break;
1587
1588 case 189: // ddns_ttl_min: "ddns-ttl-min" ":" "integer"
1589#line 836 "dhcp4_parser.yy"
1590 {
1591 ctx.unique("ddns-ttl-min", ctx.loc2pos(yystack_[2].location));
1592 ElementPtr ttl(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
1593 ctx.stack_.back()->set("ddns-ttl-min", ttl);
1594}
1595#line 1596 "dhcp4_parser.cc"
1596 break;
1597
1598 case 190: // ddns_ttl_max: "ddns-ttl-max" ":" "integer"
1599#line 842 "dhcp4_parser.yy"
1600 {
1601 ctx.unique("ddns-ttl-max", ctx.loc2pos(yystack_[2].location));
1602 ElementPtr ttl(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
1603 ctx.stack_.back()->set("ddns-ttl-max", ttl);
1604}
1605#line 1606 "dhcp4_parser.cc"
1606 break;
1607
1608 case 191: // $@27: %empty
1609#line 848 "dhcp4_parser.yy"
1610 {
1611 ctx.unique("hostname-char-set", ctx.loc2pos(yystack_[0].location));
1612 ctx.enter(ctx.NO_KEYWORD);
1613}
1614#line 1615 "dhcp4_parser.cc"
1615 break;
1616
1617 case 192: // hostname_char_set: "hostname-char-set" $@27 ":" "constant string"
1618#line 851 "dhcp4_parser.yy"
1619 {
1620 ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
1621 ctx.stack_.back()->set("hostname-char-set", s);
1622 ctx.leave();
1623}
1624#line 1625 "dhcp4_parser.cc"
1625 break;
1626
1627 case 193: // $@28: %empty
1628#line 857 "dhcp4_parser.yy"
1629 {
1630 ctx.unique("hostname-char-replacement", ctx.loc2pos(yystack_[0].location));
1631 ctx.enter(ctx.NO_KEYWORD);
1632}
1633#line 1634 "dhcp4_parser.cc"
1634 break;
1635
1636 case 194: // hostname_char_replacement: "hostname-char-replacement" $@28 ":" "constant string"
1637#line 860 "dhcp4_parser.yy"
1638 {
1639 ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
1640 ctx.stack_.back()->set("hostname-char-replacement", s);
1641 ctx.leave();
1642}
1643#line 1644 "dhcp4_parser.cc"
1644 break;
1645
1646 case 195: // store_extended_info: "store-extended-info" ":" "boolean"
1647#line 866 "dhcp4_parser.yy"
1648 {
1649 ctx.unique("store-extended-info", ctx.loc2pos(yystack_[2].location));
1650 ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
1651 ctx.stack_.back()->set("store-extended-info", b);
1652}
1653#line 1654 "dhcp4_parser.cc"
1654 break;
1655
1656 case 196: // statistic_default_sample_count: "statistic-default-sample-count" ":" "integer"
1657#line 872 "dhcp4_parser.yy"
1658 {
1659 ctx.unique("statistic-default-sample-count", ctx.loc2pos(yystack_[2].location));
1660 ElementPtr count(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
1661 ctx.stack_.back()->set("statistic-default-sample-count", count);
1662}
1663#line 1664 "dhcp4_parser.cc"
1664 break;
1665
1666 case 197: // statistic_default_sample_age: "statistic-default-sample-age" ":" "integer"
1667#line 878 "dhcp4_parser.yy"
1668 {
1669 ctx.unique("statistic-default-sample-age", ctx.loc2pos(yystack_[2].location));
1670 ElementPtr age(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
1671 ctx.stack_.back()->set("statistic-default-sample-age", age);
1672}
1673#line 1674 "dhcp4_parser.cc"
1674 break;
1675
1676 case 198: // early_global_reservations_lookup: "early-global-reservations-lookup" ":" "boolean"
1677#line 884 "dhcp4_parser.yy"
1678 {
1679 ctx.unique("early-global-reservations-lookup", ctx.loc2pos(yystack_[2].location));
1680 ElementPtr early(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
1681 ctx.stack_.back()->set("early-global-reservations-lookup", early);
1682}
1683#line 1684 "dhcp4_parser.cc"
1684 break;
1685
1686 case 199: // ip_reservations_unique: "ip-reservations-unique" ":" "boolean"
1687#line 890 "dhcp4_parser.yy"
1688 {
1689 ctx.unique("ip-reservations-unique", ctx.loc2pos(yystack_[2].location));
1690 ElementPtr unique(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
1691 ctx.stack_.back()->set("ip-reservations-unique", unique);
1692}
1693#line 1694 "dhcp4_parser.cc"
1694 break;
1695
1696 case 200: // reservations_lookup_first: "reservations-lookup-first" ":" "boolean"
1697#line 896 "dhcp4_parser.yy"
1698 {
1699 ctx.unique("reservations-lookup-first", ctx.loc2pos(yystack_[2].location));
1700 ElementPtr first(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
1701 ctx.stack_.back()->set("reservations-lookup-first", first);
1702}
1703#line 1704 "dhcp4_parser.cc"
1704 break;
1705
1706 case 201: // offer_lifetime: "offer-lifetime" ":" "integer"
1707#line 902 "dhcp4_parser.yy"
1708 {
1709 ctx.unique("offer-lifetime", ctx.loc2pos(yystack_[2].location));
1710 ElementPtr offer_lifetime(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
1711 ctx.stack_.back()->set("offer-lifetime", offer_lifetime);
1712}
1713#line 1714 "dhcp4_parser.cc"
1714 break;
1715
1716 case 202: // stash_agent_options: "stash-agent-options" ":" "boolean"
1717#line 908 "dhcp4_parser.yy"
1718 {
1719 ctx.unique("stash-agent-options", ctx.loc2pos(yystack_[2].location));
1720 ElementPtr stash(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
1721 ctx.stack_.back()->set("stash-agent-options", stash);
1722}
1723#line 1724 "dhcp4_parser.cc"
1724 break;
1725
1726 case 203: // $@29: %empty
1727#line 914 "dhcp4_parser.yy"
1728 {
1729 ctx.unique("interfaces-config", ctx.loc2pos(yystack_[0].location));
1730 ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
1731 ctx.stack_.back()->set("interfaces-config", i);
1732 ctx.stack_.push_back(i);
1733 ctx.enter(ctx.INTERFACES_CONFIG);
1734}
1735#line 1736 "dhcp4_parser.cc"
1736 break;
1737
1738 case 204: // interfaces_config: "interfaces-config" $@29 ":" "{" interfaces_config_params "}"
1739#line 920 "dhcp4_parser.yy"
1740 {
1741 // No interfaces config param is required
1742 ctx.stack_.pop_back();
1743 ctx.leave();
1744}
1745#line 1746 "dhcp4_parser.cc"
1746 break;
1747
1748 case 207: // interfaces_config_params: interfaces_config_params ","
1749#line 928 "dhcp4_parser.yy"
1750 {
1751 ctx.warnAboutExtraCommas(yystack_[0].location);
1752 }
1753#line 1754 "dhcp4_parser.cc"
1754 break;
1755
1756 case 218: // $@30: %empty
1757#line 945 "dhcp4_parser.yy"
1758 {
1759 // Parse the interfaces-config map
1760 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
1761 ctx.stack_.push_back(m);
1762}
1763#line 1764 "dhcp4_parser.cc"
1764 break;
1765
1766 case 219: // sub_interfaces4: "{" $@30 interfaces_config_params "}"
1767#line 949 "dhcp4_parser.yy"
1768 {
1769 // No interfaces config param is required
1770 // parsing completed
1771}
1772#line 1773 "dhcp4_parser.cc"
1773 break;
1774
1775 case 220: // $@31: %empty
1776#line 954 "dhcp4_parser.yy"
1777 {
1778 ctx.unique("interfaces", ctx.loc2pos(yystack_[0].location));
1779 ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
1780 ctx.stack_.back()->set("interfaces", l);
1781 ctx.stack_.push_back(l);
1782 ctx.enter(ctx.NO_KEYWORD);
1783}
1784#line 1785 "dhcp4_parser.cc"
1785 break;
1786
1787 case 221: // interfaces_list: "interfaces" $@31 ":" list_strings
1788#line 960 "dhcp4_parser.yy"
1789 {
1790 ctx.stack_.pop_back();
1791 ctx.leave();
1792}
1793#line 1794 "dhcp4_parser.cc"
1794 break;
1795
1796 case 222: // $@32: %empty
1797#line 965 "dhcp4_parser.yy"
1798 {
1799 ctx.unique("dhcp-socket-type", ctx.loc2pos(yystack_[0].location));
1800 ctx.enter(ctx.DHCP_SOCKET_TYPE);
1801}
1802#line 1803 "dhcp4_parser.cc"
1803 break;
1804
1805 case 223: // dhcp_socket_type: "dhcp-socket-type" $@32 ":" socket_type
1806#line 968 "dhcp4_parser.yy"
1807 {
1808 ctx.stack_.back()->set("dhcp-socket-type", yystack_[0].value.as < ElementPtr > ());
1809 ctx.leave();
1810}
1811#line 1812 "dhcp4_parser.cc"
1812 break;
1813
1814 case 224: // socket_type: "raw"
1815#line 973 "dhcp4_parser.yy"
1816 { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("raw", ctx.loc2pos(yystack_[0].location))); }
1817#line 1818 "dhcp4_parser.cc"
1818 break;
1819
1820 case 225: // socket_type: "udp"
1821#line 974 "dhcp4_parser.yy"
1822 { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("udp", ctx.loc2pos(yystack_[0].location))); }
1823#line 1824 "dhcp4_parser.cc"
1824 break;
1825
1826 case 226: // $@33: %empty
1827#line 977 "dhcp4_parser.yy"
1828 {
1829 ctx.unique("outbound-interface", ctx.loc2pos(yystack_[0].location));
1830 ctx.enter(ctx.OUTBOUND_INTERFACE);
1831}
1832#line 1833 "dhcp4_parser.cc"
1833 break;
1834
1835 case 227: // outbound_interface: "outbound-interface" $@33 ":" outbound_interface_value
1836#line 980 "dhcp4_parser.yy"
1837 {
1838 ctx.stack_.back()->set("outbound-interface", yystack_[0].value.as < ElementPtr > ());
1839 ctx.leave();
1840}
1841#line 1842 "dhcp4_parser.cc"
1842 break;
1843
1844 case 228: // outbound_interface_value: "same-as-inbound"
1845#line 985 "dhcp4_parser.yy"
1846 {
1847 yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("same-as-inbound", ctx.loc2pos(yystack_[0].location)));
1848}
1849#line 1850 "dhcp4_parser.cc"
1850 break;
1851
1852 case 229: // outbound_interface_value: "use-routing"
1853#line 987 "dhcp4_parser.yy"
1854 {
1855 yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("use-routing", ctx.loc2pos(yystack_[0].location)));
1856 }
1857#line 1858 "dhcp4_parser.cc"
1858 break;
1859
1860 case 230: // re_detect: "re-detect" ":" "boolean"
1861#line 991 "dhcp4_parser.yy"
1862 {
1863 ctx.unique("re-detect", ctx.loc2pos(yystack_[2].location));
1864 ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
1865 ctx.stack_.back()->set("re-detect", b);
1866}
1867#line 1868 "dhcp4_parser.cc"
1868 break;
1869
1870 case 231: // service_sockets_require_all: "service-sockets-require-all" ":" "boolean"
1871#line 997 "dhcp4_parser.yy"
1872 {
1873 ctx.unique("service-sockets-require-all", ctx.loc2pos(yystack_[2].location));
1874 ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
1875 ctx.stack_.back()->set("service-sockets-require-all", b);
1876}
1877#line 1878 "dhcp4_parser.cc"
1878 break;
1879
1880 case 232: // service_sockets_retry_wait_time: "service-sockets-retry-wait-time" ":" "integer"
1881#line 1003 "dhcp4_parser.yy"
1882 {
1883 ctx.unique("service-sockets-retry-wait-time", ctx.loc2pos(yystack_[2].location));
1884 ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
1885 ctx.stack_.back()->set("service-sockets-retry-wait-time", n);
1886}
1887#line 1888 "dhcp4_parser.cc"
1888 break;
1889
1890 case 233: // service_sockets_max_retries: "service-sockets-max-retries" ":" "integer"
1891#line 1009 "dhcp4_parser.yy"
1892 {
1893 ctx.unique("service-sockets-max-retries", ctx.loc2pos(yystack_[2].location));
1894 ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
1895 ctx.stack_.back()->set("service-sockets-max-retries", n);
1896}
1897#line 1898 "dhcp4_parser.cc"
1898 break;
1899
1900 case 234: // $@34: %empty
1901#line 1015 "dhcp4_parser.yy"
1902 {
1903 ctx.unique("lease-database", ctx.loc2pos(yystack_[0].location));
1904 ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
1905 ctx.stack_.back()->set("lease-database", i);
1906 ctx.stack_.push_back(i);
1907 ctx.enter(ctx.LEASE_DATABASE);
1908}
1909#line 1910 "dhcp4_parser.cc"
1910 break;
1911
1912 case 235: // lease_database: "lease-database" $@34 ":" "{" database_map_params "}"
1913#line 1021 "dhcp4_parser.yy"
1914 {
1915 // The type parameter is required
1916 ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
1917 ctx.stack_.pop_back();
1918 ctx.leave();
1919}
1920#line 1921 "dhcp4_parser.cc"
1921 break;
1922
1923 case 236: // $@35: %empty
1924#line 1028 "dhcp4_parser.yy"
1925 {
1926 ctx.unique("sanity-checks", ctx.loc2pos(yystack_[0].location));
1927 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
1928 ctx.stack_.back()->set("sanity-checks", m);
1929 ctx.stack_.push_back(m);
1930 ctx.enter(ctx.SANITY_CHECKS);
1931}
1932#line 1933 "dhcp4_parser.cc"
1933 break;
1934
1935 case 237: // sanity_checks: "sanity-checks" $@35 ":" "{" sanity_checks_params "}"
1936#line 1034 "dhcp4_parser.yy"
1937 {
1938 ctx.stack_.pop_back();
1939 ctx.leave();
1940}
1941#line 1942 "dhcp4_parser.cc"
1942 break;
1943
1944 case 240: // sanity_checks_params: sanity_checks_params ","
1945#line 1041 "dhcp4_parser.yy"
1946 {
1947 ctx.warnAboutExtraCommas(yystack_[0].location);
1948 }
1949#line 1950 "dhcp4_parser.cc"
1950 break;
1951
1952 case 243: // $@36: %empty
1953#line 1050 "dhcp4_parser.yy"
1954 {
1955 ctx.unique("lease-checks", ctx.loc2pos(yystack_[0].location));
1956 ctx.enter(ctx.NO_KEYWORD);
1957}
1958#line 1959 "dhcp4_parser.cc"
1959 break;
1960
1961 case 244: // lease_checks: "lease-checks" $@36 ":" "constant string"
1962#line 1053 "dhcp4_parser.yy"
1963 {
1964
1965 if ( (string(yystack_[0].value.as < std::string > ()) == "none") ||
1966 (string(yystack_[0].value.as < std::string > ()) == "warn") ||
1967 (string(yystack_[0].value.as < std::string > ()) == "fix") ||
1968 (string(yystack_[0].value.as < std::string > ()) == "fix-del") ||
1969 (string(yystack_[0].value.as < std::string > ()) == "del")) {
1970 ElementPtr user(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
1971 ctx.stack_.back()->set("lease-checks", user);
1972 ctx.leave();
1973 } else {
1974 error(yystack_[0].location, "Unsupported 'lease-checks value: " + string(yystack_[0].value.as < std::string > ()) +
1975 ", supported values are: none, warn, fix, fix-del, del");
1976 }
1977}
1978#line 1979 "dhcp4_parser.cc"
1979 break;
1980
1981 case 245: // $@37: %empty
1982#line 1069 "dhcp4_parser.yy"
1983 {
1984 ctx.unique("extended-info-checks", ctx.loc2pos(yystack_[0].location));
1985 ctx.enter(ctx.NO_KEYWORD);
1986}
1987#line 1988 "dhcp4_parser.cc"
1988 break;
1989
1990 case 246: // extended_info_checks: "extended-info-checks" $@37 ":" "constant string"
1991#line 1072 "dhcp4_parser.yy"
1992 {
1993
1994 if ( (string(yystack_[0].value.as < std::string > ()) == "none") ||
1995 (string(yystack_[0].value.as < std::string > ()) == "fix") ||
1996 (string(yystack_[0].value.as < std::string > ()) == "strict") ||
1997 (string(yystack_[0].value.as < std::string > ()) == "pedantic")) {
1998 ElementPtr user(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
1999 ctx.stack_.back()->set("extended-info-checks", user);
2000 ctx.leave();
2001 } else {
2002 error(yystack_[0].location, "Unsupported 'extended-info-checks value: " + string(yystack_[0].value.as < std::string > ()) +
2003 ", supported values are: none, fix, strict, pedantic");
2004 }
2005}
2006#line 2007 "dhcp4_parser.cc"
2007 break;
2008
2009 case 247: // $@38: %empty
2010#line 1087 "dhcp4_parser.yy"
2011 {
2012 ctx.unique("hosts-database", ctx.loc2pos(yystack_[0].location));
2013 ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
2014 ctx.stack_.back()->set("hosts-database", i);
2015 ctx.stack_.push_back(i);
2016 ctx.enter(ctx.HOSTS_DATABASE);
2017}
2018#line 2019 "dhcp4_parser.cc"
2019 break;
2020
2021 case 248: // hosts_database: "hosts-database" $@38 ":" "{" database_map_params "}"
2022#line 1093 "dhcp4_parser.yy"
2023 {
2024 // The type parameter is required
2025 ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
2026 ctx.stack_.pop_back();
2027 ctx.leave();
2028}
2029#line 2030 "dhcp4_parser.cc"
2030 break;
2031
2032 case 249: // $@39: %empty
2033#line 1100 "dhcp4_parser.yy"
2034 {
2035 ctx.unique("hosts-databases", ctx.loc2pos(yystack_[0].location));
2036 ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
2037 ctx.stack_.back()->set("hosts-databases", l);
2038 ctx.stack_.push_back(l);
2039 ctx.enter(ctx.HOSTS_DATABASE);
2040}
2041#line 2042 "dhcp4_parser.cc"
2042 break;
2043
2044 case 250: // hosts_databases: "hosts-databases" $@39 ":" "[" database_list "]"
2045#line 1106 "dhcp4_parser.yy"
2046 {
2047 ctx.stack_.pop_back();
2048 ctx.leave();
2049}
2050#line 2051 "dhcp4_parser.cc"
2051 break;
2052
2053 case 255: // not_empty_database_list: not_empty_database_list ","
2054#line 1117 "dhcp4_parser.yy"
2055 {
2056 ctx.warnAboutExtraCommas(yystack_[0].location);
2057 }
2058#line 2059 "dhcp4_parser.cc"
2059 break;
2060
2061 case 256: // $@40: %empty
2062#line 1122 "dhcp4_parser.yy"
2063 {
2064 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
2065 ctx.stack_.back()->add(m);
2066 ctx.stack_.push_back(m);
2067}
2068#line 2069 "dhcp4_parser.cc"
2069 break;
2070
2071 case 257: // database: "{" $@40 database_map_params "}"
2072#line 1126 "dhcp4_parser.yy"
2073 {
2074 // The type parameter is required
2075 ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
2076 ctx.stack_.pop_back();
2077}
2078#line 2079 "dhcp4_parser.cc"
2079 break;
2080
2081 case 260: // database_map_params: database_map_params ","
2082#line 1134 "dhcp4_parser.yy"
2083 {
2084 ctx.warnAboutExtraCommas(yystack_[0].location);
2085 }
2086#line 2087 "dhcp4_parser.cc"
2087 break;
2088
2089 case 286: // $@41: %empty
2090#line 1166 "dhcp4_parser.yy"
2091 {
2092 ctx.unique("type", ctx.loc2pos(yystack_[0].location));
2093 ctx.enter(ctx.NO_KEYWORD);
2094}
2095#line 2096 "dhcp4_parser.cc"
2096 break;
2097
2098 case 287: // database_type: "type" $@41 ":" "constant string"
2099#line 1169 "dhcp4_parser.yy"
2100 {
2101 ElementPtr db_type(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
2102 ctx.stack_.back()->set("type", db_type);
2103 ctx.leave();
2104}
2105#line 2106 "dhcp4_parser.cc"
2106 break;
2107
2108 case 288: // $@42: %empty
2109#line 1175 "dhcp4_parser.yy"
2110 {
2111 ctx.unique("user", ctx.loc2pos(yystack_[0].location));
2112 ctx.enter(ctx.NO_KEYWORD);
2113}
2114#line 2115 "dhcp4_parser.cc"
2115 break;
2116
2117 case 289: // user: "user" $@42 ":" "constant string"
2118#line 1178 "dhcp4_parser.yy"
2119 {
2120 ElementPtr user(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
2121 ctx.stack_.back()->set("user", user);
2122 ctx.leave();
2123}
2124#line 2125 "dhcp4_parser.cc"
2125 break;
2126
2127 case 290: // $@43: %empty
2128#line 1184 "dhcp4_parser.yy"
2129 {
2130 ctx.unique("password", ctx.loc2pos(yystack_[0].location));
2131 ctx.enter(ctx.NO_KEYWORD);
2132}
2133#line 2134 "dhcp4_parser.cc"
2134 break;
2135
2136 case 291: // password: "password" $@43 ":" "constant string"
2137#line 1187 "dhcp4_parser.yy"
2138 {
2139 ElementPtr pwd(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
2140 ctx.stack_.back()->set("password", pwd);
2141 ctx.leave();
2142}
2143#line 2144 "dhcp4_parser.cc"
2144 break;
2145
2146 case 292: // $@44: %empty
2147#line 1193 "dhcp4_parser.yy"
2148 {
2149 ctx.unique("password-file", ctx.loc2pos(yystack_[0].location));
2150 ctx.enter(ctx.NO_KEYWORD);
2151}
2152#line 2153 "dhcp4_parser.cc"
2153 break;
2154
2155 case 293: // password_file: "password-file" $@44 ":" "constant string"
2156#line 1196 "dhcp4_parser.yy"
2157 {
2158 ElementPtr password(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
2159 ctx.stack_.back()->set("password-file", password);
2160 ctx.leave();
2161}
2162#line 2163 "dhcp4_parser.cc"
2163 break;
2164
2165 case 294: // $@45: %empty
2166#line 1202 "dhcp4_parser.yy"
2167 {
2168 ctx.unique("host", ctx.loc2pos(yystack_[0].location));
2169 ctx.enter(ctx.NO_KEYWORD);
2170}
2171#line 2172 "dhcp4_parser.cc"
2172 break;
2173
2174 case 295: // host: "host" $@45 ":" "constant string"
2175#line 1205 "dhcp4_parser.yy"
2176 {
2177 ElementPtr h(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
2178 ctx.stack_.back()->set("host", h);
2179 ctx.leave();
2180}
2181#line 2182 "dhcp4_parser.cc"
2182 break;
2183
2184 case 296: // port: "port" ":" "integer"
2185#line 1211 "dhcp4_parser.yy"
2186 {
2187 ctx.unique("port", ctx.loc2pos(yystack_[2].location));
2188 ElementPtr p(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
2189 ctx.stack_.back()->set("port", p);
2190}
2191#line 2192 "dhcp4_parser.cc"
2192 break;
2193
2194 case 297: // $@46: %empty
2195#line 1217 "dhcp4_parser.yy"
2196 {
2197 ctx.unique("name", ctx.loc2pos(yystack_[0].location));
2198 ctx.enter(ctx.NO_KEYWORD);
2199}
2200#line 2201 "dhcp4_parser.cc"
2201 break;
2202
2203 case 298: // name: "name" $@46 ":" "constant string"
2204#line 1220 "dhcp4_parser.yy"
2205 {
2206 ElementPtr name(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
2207 ctx.stack_.back()->set("name", name);
2208 ctx.leave();
2209}
2210#line 2211 "dhcp4_parser.cc"
2211 break;
2212
2213 case 299: // persist: "persist" ":" "boolean"
2214#line 1226 "dhcp4_parser.yy"
2215 {
2216 ctx.unique("persist", ctx.loc2pos(yystack_[2].location));
2217 ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
2218 ctx.stack_.back()->set("persist", n);
2219}
2220#line 2221 "dhcp4_parser.cc"
2221 break;
2222
2223 case 300: // lfc_interval: "lfc-interval" ":" "integer"
2224#line 1232 "dhcp4_parser.yy"
2225 {
2226 ctx.unique("lfc-interval", ctx.loc2pos(yystack_[2].location));
2227 ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
2228 ctx.stack_.back()->set("lfc-interval", n);
2229}
2230#line 2231 "dhcp4_parser.cc"
2231 break;
2232
2233 case 301: // readonly: "readonly" ":" "boolean"
2234#line 1238 "dhcp4_parser.yy"
2235 {
2236 ctx.unique("readonly", ctx.loc2pos(yystack_[2].location));
2237 ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
2238 ctx.stack_.back()->set("readonly", n);
2239}
2240#line 2241 "dhcp4_parser.cc"
2241 break;
2242
2243 case 302: // connect_timeout: "connect-timeout" ":" "integer"
2244#line 1244 "dhcp4_parser.yy"
2245 {
2246 ctx.unique("connect-timeout", ctx.loc2pos(yystack_[2].location));
2247 ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
2248 ctx.stack_.back()->set("connect-timeout", n);
2249}
2250#line 2251 "dhcp4_parser.cc"
2251 break;
2252
2253 case 303: // read_timeout: "read-timeout" ":" "integer"
2254#line 1250 "dhcp4_parser.yy"
2255 {
2256 ctx.unique("read-timeout", ctx.loc2pos(yystack_[2].location));
2257 ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
2258 ctx.stack_.back()->set("read-timeout", n);
2259}
2260#line 2261 "dhcp4_parser.cc"
2261 break;
2262
2263 case 304: // write_timeout: "write-timeout" ":" "integer"
2264#line 1256 "dhcp4_parser.yy"
2265 {
2266 ctx.unique("write-timeout", ctx.loc2pos(yystack_[2].location));
2267 ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
2268 ctx.stack_.back()->set("write-timeout", n);
2269}
2270#line 2271 "dhcp4_parser.cc"
2271 break;
2272
2273 case 305: // tcp_user_timeout: "tcp-user-timeout" ":" "integer"
2274#line 1262 "dhcp4_parser.yy"
2275 {
2276 ctx.unique("tcp-user-timeout", ctx.loc2pos(yystack_[2].location));
2277 ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
2278 ctx.stack_.back()->set("tcp-user-timeout", n);
2279}
2280#line 2281 "dhcp4_parser.cc"
2281 break;
2282
2283 case 306: // max_reconnect_tries: "max-reconnect-tries" ":" "integer"
2284#line 1268 "dhcp4_parser.yy"
2285 {
2286 ctx.unique("max-reconnect-tries", ctx.loc2pos(yystack_[2].location));
2287 ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
2288 ctx.stack_.back()->set("max-reconnect-tries", n);
2289}
2290#line 2291 "dhcp4_parser.cc"
2291 break;
2292
2293 case 307: // reconnect_wait_time: "reconnect-wait-time" ":" "integer"
2294#line 1274 "dhcp4_parser.yy"
2295 {
2296 ctx.unique("reconnect-wait-time", ctx.loc2pos(yystack_[2].location));
2297 ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
2298 ctx.stack_.back()->set("reconnect-wait-time", n);
2299}
2300#line 2301 "dhcp4_parser.cc"
2301 break;
2302
2303 case 308: // $@47: %empty
2304#line 1280 "dhcp4_parser.yy"
2305 {
2306 ctx.unique("on-fail", ctx.loc2pos(yystack_[0].location));
2307 ctx.enter(ctx.DATABASE_ON_FAIL);
2308}
2309#line 2310 "dhcp4_parser.cc"
2310 break;
2311
2312 case 309: // on_fail: "on-fail" $@47 ":" on_fail_mode
2313#line 1283 "dhcp4_parser.yy"
2314 {
2315 ctx.stack_.back()->set("on-fail", yystack_[0].value.as < ElementPtr > ());
2316 ctx.leave();
2317}
2318#line 2319 "dhcp4_parser.cc"
2319 break;
2320
2321 case 310: // on_fail_mode: "stop-retry-exit"
2322#line 1288 "dhcp4_parser.yy"
2323 { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("stop-retry-exit", ctx.loc2pos(yystack_[0].location))); }
2324#line 2325 "dhcp4_parser.cc"
2325 break;
2326
2327 case 311: // on_fail_mode: "serve-retry-exit"
2328#line 1289 "dhcp4_parser.yy"
2329 { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("serve-retry-exit", ctx.loc2pos(yystack_[0].location))); }
2330#line 2331 "dhcp4_parser.cc"
2331 break;
2332
2333 case 312: // on_fail_mode: "serve-retry-continue"
2334#line 1290 "dhcp4_parser.yy"
2335 { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("serve-retry-continue", ctx.loc2pos(yystack_[0].location))); }
2336#line 2337 "dhcp4_parser.cc"
2337 break;
2338
2339 case 313: // retry_on_startup: "retry-on-startup" ":" "boolean"
2340#line 1293 "dhcp4_parser.yy"
2341 {
2342 ctx.unique("retry-on-startup", ctx.loc2pos(yystack_[2].location));
2343 ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
2344 ctx.stack_.back()->set("retry-on-startup", n);
2345}
2346#line 2347 "dhcp4_parser.cc"
2347 break;
2348
2349 case 314: // max_row_errors: "max-row-errors" ":" "integer"
2350#line 1299 "dhcp4_parser.yy"
2351 {
2352 ctx.unique("max-row-errors", ctx.loc2pos(yystack_[2].location));
2353 ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
2354 ctx.stack_.back()->set("max-row-errors", n);
2355}
2356#line 2357 "dhcp4_parser.cc"
2357 break;
2358
2359 case 315: // $@48: %empty
2360#line 1305 "dhcp4_parser.yy"
2361 {
2362 ctx.unique("trust-anchor", ctx.loc2pos(yystack_[0].location));
2363 ctx.enter(ctx.NO_KEYWORD);
2364}
2365#line 2366 "dhcp4_parser.cc"
2366 break;
2367
2368 case 316: // trust_anchor: "trust-anchor" $@48 ":" "constant string"
2369#line 1308 "dhcp4_parser.yy"
2370 {
2371 ElementPtr ca(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
2372 ctx.stack_.back()->set("trust-anchor", ca);
2373 ctx.leave();
2374}
2375#line 2376 "dhcp4_parser.cc"
2376 break;
2377
2378 case 317: // $@49: %empty
2379#line 1314 "dhcp4_parser.yy"
2380 {
2381 ctx.unique("cert-file", ctx.loc2pos(yystack_[0].location));
2382 ctx.enter(ctx.NO_KEYWORD);
2383}
2384#line 2385 "dhcp4_parser.cc"
2385 break;
2386
2387 case 318: // cert_file: "cert-file" $@49 ":" "constant string"
2388#line 1317 "dhcp4_parser.yy"
2389 {
2390 ElementPtr cert(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
2391 ctx.stack_.back()->set("cert-file", cert);
2392 ctx.leave();
2393}
2394#line 2395 "dhcp4_parser.cc"
2395 break;
2396
2397 case 319: // $@50: %empty
2398#line 1323 "dhcp4_parser.yy"
2399 {
2400 ctx.unique("key-file", ctx.loc2pos(yystack_[0].location));
2401 ctx.enter(ctx.NO_KEYWORD);
2402}
2403#line 2404 "dhcp4_parser.cc"
2404 break;
2405
2406 case 320: // key_file: "key-file" $@50 ":" "constant string"
2407#line 1326 "dhcp4_parser.yy"
2408 {
2409 ElementPtr key(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
2410 ctx.stack_.back()->set("key-file", key);
2411 ctx.leave();
2412}
2413#line 2414 "dhcp4_parser.cc"
2414 break;
2415
2416 case 321: // $@51: %empty
2417#line 1332 "dhcp4_parser.yy"
2418 {
2419 ctx.unique("ssl-mode", ctx.loc2pos(yystack_[0].location));
2420 ctx.enter(ctx.SSL_MODE);
2421}
2422#line 2423 "dhcp4_parser.cc"
2423 break;
2424
2425 case 322: // ssl_mode: "ssl-mode" $@51 ":" ssl_mode
2426#line 1335 "dhcp4_parser.yy"
2427 {
2428 ctx.stack_.back()->set("ssl-mode", yystack_[0].value.as < ElementPtr > ());
2429 ctx.leave();
2430}
2431#line 2432 "dhcp4_parser.cc"
2432 break;
2433
2434 case 323: // ssl_mode: "disable"
2435#line 1340 "dhcp4_parser.yy"
2436 {
2437 yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("disable", ctx.loc2pos(yystack_[0].location)));
2438 }
2439#line 2440 "dhcp4_parser.cc"
2440 break;
2441
2442 case 324: // ssl_mode: "prefer"
2443#line 1343 "dhcp4_parser.yy"
2444 {
2445 yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("prefer", ctx.loc2pos(yystack_[0].location)));
2446 }
2447#line 2448 "dhcp4_parser.cc"
2448 break;
2449
2450 case 325: // ssl_mode: "require"
2451#line 1346 "dhcp4_parser.yy"
2452 {
2453 yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("require", ctx.loc2pos(yystack_[0].location)));
2454 }
2455#line 2456 "dhcp4_parser.cc"
2456 break;
2457
2458 case 326: // ssl_mode: "verify-ca"
2459#line 1349 "dhcp4_parser.yy"
2460 {
2461 yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("verify-ca", ctx.loc2pos(yystack_[0].location)));
2462 }
2463#line 2464 "dhcp4_parser.cc"
2464 break;
2465
2466 case 327: // ssl_mode: "verify-full"
2467#line 1352 "dhcp4_parser.yy"
2468 {
2469 yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("verify-full", ctx.loc2pos(yystack_[0].location)));
2470 }
2471#line 2472 "dhcp4_parser.cc"
2472 break;
2473
2474 case 328: // $@52: %empty
2475#line 1357 "dhcp4_parser.yy"
2476 {
2477 ctx.unique("cipher-list", ctx.loc2pos(yystack_[0].location));
2478 ctx.enter(ctx.NO_KEYWORD);
2479}
2480#line 2481 "dhcp4_parser.cc"
2481 break;
2482
2483 case 329: // cipher_list: "cipher-list" $@52 ":" "constant string"
2484#line 1360 "dhcp4_parser.yy"
2485 {
2486 ElementPtr cl(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
2487 ctx.stack_.back()->set("cipher-list", cl);
2488 ctx.leave();
2489}
2490#line 2491 "dhcp4_parser.cc"
2491 break;
2492
2493 case 330: // $@53: %empty
2494#line 1366 "dhcp4_parser.yy"
2495 {
2496 ctx.unique("host-reservation-identifiers", ctx.loc2pos(yystack_[0].location));
2497 ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
2498 ctx.stack_.back()->set("host-reservation-identifiers", l);
2499 ctx.stack_.push_back(l);
2500 ctx.enter(ctx.HOST_RESERVATION_IDENTIFIERS);
2501}
2502#line 2503 "dhcp4_parser.cc"
2503 break;
2504
2505 case 331: // host_reservation_identifiers: "host-reservation-identifiers" $@53 ":" "[" host_reservation_identifiers_list "]"
2506#line 1372 "dhcp4_parser.yy"
2507 {
2508 ctx.stack_.pop_back();
2509 ctx.leave();
2510}
2511#line 2512 "dhcp4_parser.cc"
2512 break;
2513
2514 case 334: // host_reservation_identifiers_list: host_reservation_identifiers_list ","
2515#line 1379 "dhcp4_parser.yy"
2516 {
2517 ctx.warnAboutExtraCommas(yystack_[0].location);
2518 }
2519#line 2520 "dhcp4_parser.cc"
2520 break;
2521
2522 case 340: // duid_id: "duid"
2523#line 1391 "dhcp4_parser.yy"
2524 {
2525 ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location)));
2526 ctx.stack_.back()->add(duid);
2527}
2528#line 2529 "dhcp4_parser.cc"
2529 break;
2530
2531 case 341: // hw_address_id: "hw-address"
2532#line 1396 "dhcp4_parser.yy"
2533 {
2534 ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location)));
2535 ctx.stack_.back()->add(hwaddr);
2536}
2537#line 2538 "dhcp4_parser.cc"
2538 break;
2539
2540 case 342: // circuit_id: "circuit-id"
2541#line 1401 "dhcp4_parser.yy"
2542 {
2543 ElementPtr circuit(new StringElement("circuit-id", ctx.loc2pos(yystack_[0].location)));
2544 ctx.stack_.back()->add(circuit);
2545}
2546#line 2547 "dhcp4_parser.cc"
2547 break;
2548
2549 case 343: // client_id: "client-id"
2550#line 1406 "dhcp4_parser.yy"
2551 {
2552 ElementPtr client(new StringElement("client-id", ctx.loc2pos(yystack_[0].location)));
2553 ctx.stack_.back()->add(client);
2554}
2555#line 2556 "dhcp4_parser.cc"
2556 break;
2557
2558 case 344: // flex_id: "flex-id"
2559#line 1411 "dhcp4_parser.yy"
2560 {
2561 ElementPtr flex_id(new StringElement("flex-id", ctx.loc2pos(yystack_[0].location)));
2562 ctx.stack_.back()->add(flex_id);
2563}
2564#line 2565 "dhcp4_parser.cc"
2565 break;
2566
2567 case 345: // $@54: %empty
2568#line 1418 "dhcp4_parser.yy"
2569 {
2570 ctx.unique("multi-threading", ctx.loc2pos(yystack_[0].location));
2571 ElementPtr mt(new MapElement(ctx.loc2pos(yystack_[0].location)));
2572 ctx.stack_.back()->set("multi-threading", mt);
2573 ctx.stack_.push_back(mt);
2574 ctx.enter(ctx.DHCP_MULTI_THREADING);
2575}
2576#line 2577 "dhcp4_parser.cc"
2577 break;
2578
2579 case 346: // dhcp_multi_threading: "multi-threading" $@54 ":" "{" multi_threading_params "}"
2580#line 1424 "dhcp4_parser.yy"
2581 {
2582 // The enable parameter is required.
2583 ctx.require("enable-multi-threading", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
2584 ctx.stack_.pop_back();
2585 ctx.leave();
2586}
2587#line 2588 "dhcp4_parser.cc"
2588 break;
2589
2590 case 349: // multi_threading_params: multi_threading_params ","
2591#line 1433 "dhcp4_parser.yy"
2592 {
2593 ctx.warnAboutExtraCommas(yystack_[0].location);
2594 }
2595#line 2596 "dhcp4_parser.cc"
2596 break;
2597
2598 case 356: // enable_multi_threading: "enable-multi-threading" ":" "boolean"
2599#line 1446 "dhcp4_parser.yy"
2600 {
2601 ctx.unique("enable-multi-threading", ctx.loc2pos(yystack_[2].location));
2602 ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
2603 ctx.stack_.back()->set("enable-multi-threading", b);
2604}
2605#line 2606 "dhcp4_parser.cc"
2606 break;
2607
2608 case 357: // thread_pool_size: "thread-pool-size" ":" "integer"
2609#line 1452 "dhcp4_parser.yy"
2610 {
2611 ctx.unique("thread-pool-size", ctx.loc2pos(yystack_[2].location));
2612 ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
2613 ctx.stack_.back()->set("thread-pool-size", prf);
2614}
2615#line 2616 "dhcp4_parser.cc"
2616 break;
2617
2618 case 358: // packet_queue_size: "packet-queue-size" ":" "integer"
2619#line 1458 "dhcp4_parser.yy"
2620 {
2621 ctx.unique("packet-queue-size", ctx.loc2pos(yystack_[2].location));
2622 ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
2623 ctx.stack_.back()->set("packet-queue-size", prf);
2624}
2625#line 2626 "dhcp4_parser.cc"
2626 break;
2627
2628 case 359: // $@55: %empty
2629#line 1464 "dhcp4_parser.yy"
2630 {
2631 ctx.unique("hooks-libraries", ctx.loc2pos(yystack_[0].location));
2632 ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
2633 ctx.stack_.back()->set("hooks-libraries", l);
2634 ctx.stack_.push_back(l);
2635 ctx.enter(ctx.HOOKS_LIBRARIES);
2636}
2637#line 2638 "dhcp4_parser.cc"
2638 break;
2639
2640 case 360: // hooks_libraries: "hooks-libraries" $@55 ":" "[" hooks_libraries_list "]"
2641#line 1470 "dhcp4_parser.yy"
2642 {
2643 ctx.stack_.pop_back();
2644 ctx.leave();
2645}
2646#line 2647 "dhcp4_parser.cc"
2647 break;
2648
2649 case 365: // not_empty_hooks_libraries_list: not_empty_hooks_libraries_list ","
2650#line 1481 "dhcp4_parser.yy"
2651 {
2652 ctx.warnAboutExtraCommas(yystack_[0].location);
2653 }
2654#line 2655 "dhcp4_parser.cc"
2655 break;
2656
2657 case 366: // $@56: %empty
2658#line 1486 "dhcp4_parser.yy"
2659 {
2660 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
2661 ctx.stack_.back()->add(m);
2662 ctx.stack_.push_back(m);
2663}
2664#line 2665 "dhcp4_parser.cc"
2665 break;
2666
2667 case 367: // hooks_library: "{" $@56 hooks_params "}"
2668#line 1490 "dhcp4_parser.yy"
2669 {
2670 // The library hooks parameter is required
2671 ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
2672 ctx.stack_.pop_back();
2673}
2674#line 2675 "dhcp4_parser.cc"
2675 break;
2676
2677 case 368: // $@57: %empty
2678#line 1496 "dhcp4_parser.yy"
2679 {
2680 // Parse the hooks-libraries list entry map
2681 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
2682 ctx.stack_.push_back(m);
2683}
2684#line 2685 "dhcp4_parser.cc"
2685 break;
2686
2687 case 369: // sub_hooks_library: "{" $@57 hooks_params "}"
2688#line 1500 "dhcp4_parser.yy"
2689 {
2690 // The library hooks parameter is required
2691 ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
2692 // parsing completed
2693}
2694#line 2695 "dhcp4_parser.cc"
2695 break;
2696
2697 case 372: // hooks_params: hooks_params ","
2698#line 1508 "dhcp4_parser.yy"
2699 {
2700 ctx.warnAboutExtraCommas(yystack_[0].location);
2701 }
2702#line 2703 "dhcp4_parser.cc"
2703 break;
2704
2705 case 376: // $@58: %empty
2706#line 1518 "dhcp4_parser.yy"
2707 {
2708 ctx.unique("library", ctx.loc2pos(yystack_[0].location));
2709 ctx.enter(ctx.NO_KEYWORD);
2710}
2711#line 2712 "dhcp4_parser.cc"
2712 break;
2713
2714 case 377: // library: "library" $@58 ":" "constant string"
2715#line 1521 "dhcp4_parser.yy"
2716 {
2717 ElementPtr lib(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
2718 ctx.stack_.back()->set("library", lib);
2719 ctx.leave();
2720}
2721#line 2722 "dhcp4_parser.cc"
2722 break;
2723
2724 case 378: // $@59: %empty
2725#line 1527 "dhcp4_parser.yy"
2726 {
2727 ctx.unique("parameters", ctx.loc2pos(yystack_[0].location));
2728 ctx.enter(ctx.NO_KEYWORD);
2729}
2730#line 2731 "dhcp4_parser.cc"
2731 break;
2732
2733 case 379: // parameters: "parameters" $@59 ":" map_value
2734#line 1530 "dhcp4_parser.yy"
2735 {
2736 ctx.stack_.back()->set("parameters", yystack_[0].value.as < ElementPtr > ());
2737 ctx.leave();
2738}
2739#line 2740 "dhcp4_parser.cc"
2740 break;
2741
2742 case 380: // $@60: %empty
2743#line 1536 "dhcp4_parser.yy"
2744 {
2745 ctx.unique("expired-leases-processing", ctx.loc2pos(yystack_[0].location));
2746 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
2747 ctx.stack_.back()->set("expired-leases-processing", m);
2748 ctx.stack_.push_back(m);
2749 ctx.enter(ctx.EXPIRED_LEASES_PROCESSING);
2750}
2751#line 2752 "dhcp4_parser.cc"
2752 break;
2753
2754 case 381: // expired_leases_processing: "expired-leases-processing" $@60 ":" "{" expired_leases_params "}"
2755#line 1542 "dhcp4_parser.yy"
2756 {
2757 // No expired lease parameter is required
2758 ctx.stack_.pop_back();
2759 ctx.leave();
2760}
2761#line 2762 "dhcp4_parser.cc"
2762 break;
2763
2764 case 384: // expired_leases_params: expired_leases_params ","
2765#line 1550 "dhcp4_parser.yy"
2766 {
2767 ctx.warnAboutExtraCommas(yystack_[0].location);
2768 }
2769#line 2770 "dhcp4_parser.cc"
2770 break;
2771
2772 case 391: // reclaim_timer_wait_time: "reclaim-timer-wait-time" ":" "integer"
2773#line 1563 "dhcp4_parser.yy"
2774 {
2775 ctx.unique("reclaim-timer-wait-time", ctx.loc2pos(yystack_[2].location));
2776 ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
2777 ctx.stack_.back()->set("reclaim-timer-wait-time", value);
2778}
2779#line 2780 "dhcp4_parser.cc"
2780 break;
2781
2782 case 392: // flush_reclaimed_timer_wait_time: "flush-reclaimed-timer-wait-time" ":" "integer"
2783#line 1569 "dhcp4_parser.yy"
2784 {
2785 ctx.unique("flush-reclaimed-timer-wait-time", ctx.loc2pos(yystack_[2].location));
2786 ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
2787 ctx.stack_.back()->set("flush-reclaimed-timer-wait-time", value);
2788}
2789#line 2790 "dhcp4_parser.cc"
2790 break;
2791
2792 case 393: // hold_reclaimed_time: "hold-reclaimed-time" ":" "integer"
2793#line 1575 "dhcp4_parser.yy"
2794 {
2795 ctx.unique("hold-reclaimed-time", ctx.loc2pos(yystack_[2].location));
2796 ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
2797 ctx.stack_.back()->set("hold-reclaimed-time", value);
2798}
2799#line 2800 "dhcp4_parser.cc"
2800 break;
2801
2802 case 394: // max_reclaim_leases: "max-reclaim-leases" ":" "integer"
2803#line 1581 "dhcp4_parser.yy"
2804 {
2805 ctx.unique("max-reclaim-leases", ctx.loc2pos(yystack_[2].location));
2806 ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
2807 ctx.stack_.back()->set("max-reclaim-leases", value);
2808}
2809#line 2810 "dhcp4_parser.cc"
2810 break;
2811
2812 case 395: // max_reclaim_time: "max-reclaim-time" ":" "integer"
2813#line 1587 "dhcp4_parser.yy"
2814 {
2815 ctx.unique("max-reclaim-time", ctx.loc2pos(yystack_[2].location));
2816 ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
2817 ctx.stack_.back()->set("max-reclaim-time", value);
2818}
2819#line 2820 "dhcp4_parser.cc"
2820 break;
2821
2822 case 396: // unwarned_reclaim_cycles: "unwarned-reclaim-cycles" ":" "integer"
2823#line 1593 "dhcp4_parser.yy"
2824 {
2825 ctx.unique("unwarned-reclaim-cycles", ctx.loc2pos(yystack_[2].location));
2826 ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
2827 ctx.stack_.back()->set("unwarned-reclaim-cycles", value);
2828}
2829#line 2830 "dhcp4_parser.cc"
2830 break;
2831
2832 case 397: // $@61: %empty
2833#line 1602 "dhcp4_parser.yy"
2834 {
2835 ctx.unique("subnet4", ctx.loc2pos(yystack_[0].location));
2836 ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
2837 ctx.stack_.back()->set("subnet4", l);
2838 ctx.stack_.push_back(l);
2839 ctx.enter(ctx.SUBNET4);
2840}
2841#line 2842 "dhcp4_parser.cc"
2842 break;
2843
2844 case 398: // subnet4_list: "subnet4" $@61 ":" "[" subnet4_list_content "]"
2845#line 1608 "dhcp4_parser.yy"
2846 {
2847 ctx.stack_.pop_back();
2848 ctx.leave();
2849}
2850#line 2851 "dhcp4_parser.cc"
2851 break;
2852
2853 case 403: // not_empty_subnet4_list: not_empty_subnet4_list ","
2854#line 1622 "dhcp4_parser.yy"
2855 {
2856 ctx.warnAboutExtraCommas(yystack_[0].location);
2857 }
2858#line 2859 "dhcp4_parser.cc"
2859 break;
2860
2861 case 404: // $@62: %empty
2862#line 1631 "dhcp4_parser.yy"
2863 {
2864 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
2865 ctx.stack_.back()->add(m);
2866 ctx.stack_.push_back(m);
2867}
2868#line 2869 "dhcp4_parser.cc"
2869 break;
2870
2871 case 405: // subnet4: "{" $@62 subnet4_params "}"
2872#line 1635 "dhcp4_parser.yy"
2873 {
2874 // Once we reached this place, the subnet parsing is now complete.
2875 // If we want to, we can implement default values here.
2876 // In particular we can do things like this:
2877 // if (!ctx.stack_.back()->get("interface")) {
2878 // ctx.stack_.back()->set("interface", StringElement("loopback"));
2879 // }
2880 //
2881 // We can also stack up one level (Dhcp4) and copy over whatever
2882 // global parameters we want to:
2883 // if (!ctx.stack_.back()->get("renew-timer")) {
2884 // ElementPtr renew = ctx_stack_[...].get("renew-timer");
2885 // if (renew) {
2886 // ctx.stack_.back()->set("renew-timer", renew);
2887 // }
2888 // }
2889
2890 // The subnet subnet4 parameter is required
2891 ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
2892 ctx.stack_.pop_back();
2893}
2894#line 2895 "dhcp4_parser.cc"
2895 break;
2896
2897 case 406: // $@63: %empty
2898#line 1657 "dhcp4_parser.yy"
2899 {
2900 // Parse the subnet4 list entry map
2901 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
2902 ctx.stack_.push_back(m);
2903}
2904#line 2905 "dhcp4_parser.cc"
2905 break;
2906
2907 case 407: // sub_subnet4: "{" $@63 subnet4_params "}"
2908#line 1661 "dhcp4_parser.yy"
2909 {
2910 // The subnet subnet4 parameter is required
2911 ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
2912 // parsing completed
2913}
2914#line 2915 "dhcp4_parser.cc"
2915 break;
2916
2917 case 410: // subnet4_params: subnet4_params ","
2918#line 1670 "dhcp4_parser.yy"
2919 {
2920 ctx.warnAboutExtraCommas(yystack_[0].location);
2921 }
2922#line 2923 "dhcp4_parser.cc"
2923 break;
2924
2925 case 464: // $@64: %empty
2926#line 1731 "dhcp4_parser.yy"
2927 {
2928 ctx.unique("subnet", ctx.loc2pos(yystack_[0].location));
2929 ctx.enter(ctx.NO_KEYWORD);
2930}
2931#line 2932 "dhcp4_parser.cc"
2932 break;
2933
2934 case 465: // subnet: "subnet" $@64 ":" "constant string"
2935#line 1734 "dhcp4_parser.yy"
2936 {
2937 ElementPtr subnet(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
2938 ctx.stack_.back()->set("subnet", subnet);
2939 ctx.leave();
2940}
2941#line 2942 "dhcp4_parser.cc"
2942 break;
2943
2944 case 466: // $@65: %empty
2945#line 1740 "dhcp4_parser.yy"
2946 {
2947 ctx.unique("4o6-interface", ctx.loc2pos(yystack_[0].location));
2948 ctx.enter(ctx.NO_KEYWORD);
2949}
2950#line 2951 "dhcp4_parser.cc"
2951 break;
2952
2953 case 467: // subnet_4o6_interface: "4o6-interface" $@65 ":" "constant string"
2954#line 1743 "dhcp4_parser.yy"
2955 {
2956 ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
2957 ctx.stack_.back()->set("4o6-interface", iface);
2958 ctx.leave();
2959}
2960#line 2961 "dhcp4_parser.cc"
2961 break;
2962
2963 case 468: // $@66: %empty
2964#line 1749 "dhcp4_parser.yy"
2965 {
2966 ctx.unique("4o6-interface-id", ctx.loc2pos(yystack_[0].location));
2967 ctx.enter(ctx.NO_KEYWORD);
2968}
2969#line 2970 "dhcp4_parser.cc"
2970 break;
2971
2972 case 469: // subnet_4o6_interface_id: "4o6-interface-id" $@66 ":" "constant string"
2973#line 1752 "dhcp4_parser.yy"
2974 {
2975 ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
2976 ctx.stack_.back()->set("4o6-interface-id", iface);
2977 ctx.leave();
2978}
2979#line 2980 "dhcp4_parser.cc"
2980 break;
2981
2982 case 470: // $@67: %empty
2983#line 1758 "dhcp4_parser.yy"
2984 {
2985 ctx.unique("4o6-subnet", ctx.loc2pos(yystack_[0].location));
2986 ctx.enter(ctx.NO_KEYWORD);
2987}
2988#line 2989 "dhcp4_parser.cc"
2989 break;
2990
2991 case 471: // subnet_4o6_subnet: "4o6-subnet" $@67 ":" "constant string"
2992#line 1761 "dhcp4_parser.yy"
2993 {
2994 ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
2995 ctx.stack_.back()->set("4o6-subnet", iface);
2996 ctx.leave();
2997}
2998#line 2999 "dhcp4_parser.cc"
2999 break;
3000
3001 case 472: // $@68: %empty
3002#line 1767 "dhcp4_parser.yy"
3003 {
3004 ctx.unique("interface", ctx.loc2pos(yystack_[0].location));
3005 ctx.enter(ctx.NO_KEYWORD);
3006}
3007#line 3008 "dhcp4_parser.cc"
3008 break;
3009
3010 case 473: // interface: "interface" $@68 ":" "constant string"
3011#line 1770 "dhcp4_parser.yy"
3012 {
3013 ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
3014 ctx.stack_.back()->set("interface", iface);
3015 ctx.leave();
3016}
3017#line 3018 "dhcp4_parser.cc"
3018 break;
3019
3020 case 474: // $@69: %empty
3021#line 1777 "dhcp4_parser.yy"
3022 {
3023 ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location));
3024 ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
3025 ctx.stack_.back()->set("client-classes", c);
3026 ctx.stack_.push_back(c);
3027 ctx.enter(ctx.NO_KEYWORD);
3028}
3029#line 3030 "dhcp4_parser.cc"
3030 break;
3031
3032 case 475: // network_client_classes: "client-classes" $@69 ":" list_strings
3033#line 1783 "dhcp4_parser.yy"
3034 {
3035 ctx.stack_.pop_back();
3036 ctx.leave();
3037}
3038#line 3039 "dhcp4_parser.cc"
3039 break;
3040
3041 case 476: // $@70: %empty
3042#line 1788 "dhcp4_parser.yy"
3043 {
3044 ctx.unique("evaluate-additional-classes", ctx.loc2pos(yystack_[0].location));
3045 ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
3046 ctx.stack_.back()->set("evaluate-additional-classes", c);
3047 ctx.stack_.push_back(c);
3048 ctx.enter(ctx.NO_KEYWORD);
3049}
3050#line 3051 "dhcp4_parser.cc"
3051 break;
3052
3053 case 477: // evaluate_additional_classes: "evaluate-additional-classes" $@70 ":" list_strings
3054#line 1794 "dhcp4_parser.yy"
3055 {
3056 ctx.stack_.pop_back();
3057 ctx.leave();
3058}
3059#line 3060 "dhcp4_parser.cc"
3060 break;
3061
3062 case 478: // reservations_global: "reservations-global" ":" "boolean"
3063#line 1799 "dhcp4_parser.yy"
3064 {
3065 ctx.unique("reservations-global", ctx.loc2pos(yystack_[2].location));
3066 ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
3067 ctx.stack_.back()->set("reservations-global", b);
3068}
3069#line 3070 "dhcp4_parser.cc"
3070 break;
3071
3072 case 479: // reservations_in_subnet: "reservations-in-subnet" ":" "boolean"
3073#line 1805 "dhcp4_parser.yy"
3074 {
3075 ctx.unique("reservations-in-subnet", ctx.loc2pos(yystack_[2].location));
3076 ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
3077 ctx.stack_.back()->set("reservations-in-subnet", b);
3078}
3079#line 3080 "dhcp4_parser.cc"
3080 break;
3081
3082 case 480: // reservations_out_of_pool: "reservations-out-of-pool" ":" "boolean"
3083#line 1811 "dhcp4_parser.yy"
3084 {
3085 ctx.unique("reservations-out-of-pool", ctx.loc2pos(yystack_[2].location));
3086 ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
3087 ctx.stack_.back()->set("reservations-out-of-pool", b);
3088}
3089#line 3090 "dhcp4_parser.cc"
3090 break;
3091
3092 case 481: // id: "id" ":" "integer"
3093#line 1817 "dhcp4_parser.yy"
3094 {
3095 ctx.unique("id", ctx.loc2pos(yystack_[2].location));
3096 ElementPtr id(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
3097 ctx.stack_.back()->set("id", id);
3098}
3099#line 3100 "dhcp4_parser.cc"
3100 break;
3101
3102 case 482: // $@71: %empty
3103#line 1825 "dhcp4_parser.yy"
3104 {
3105 ctx.unique("shared-networks", ctx.loc2pos(yystack_[0].location));
3106 ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
3107 ctx.stack_.back()->set("shared-networks", l);
3108 ctx.stack_.push_back(l);
3109 ctx.enter(ctx.SHARED_NETWORK);
3110}
3111#line 3112 "dhcp4_parser.cc"
3112 break;
3113
3114 case 483: // shared_networks: "shared-networks" $@71 ":" "[" shared_networks_content "]"
3115#line 1831 "dhcp4_parser.yy"
3116 {
3117 ctx.stack_.pop_back();
3118 ctx.leave();
3119}
3120#line 3121 "dhcp4_parser.cc"
3121 break;
3122
3123 case 488: // shared_networks_list: shared_networks_list ","
3124#line 1844 "dhcp4_parser.yy"
3125 {
3126 ctx.warnAboutExtraCommas(yystack_[0].location);
3127 }
3128#line 3129 "dhcp4_parser.cc"
3129 break;
3130
3131 case 489: // $@72: %empty
3132#line 1849 "dhcp4_parser.yy"
3133 {
3134 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
3135 ctx.stack_.back()->add(m);
3136 ctx.stack_.push_back(m);
3137}
3138#line 3139 "dhcp4_parser.cc"
3139 break;
3140
3141 case 490: // shared_network: "{" $@72 shared_network_params "}"
3142#line 1853 "dhcp4_parser.yy"
3143 {
3144 ctx.stack_.pop_back();
3145}
3146#line 3147 "dhcp4_parser.cc"
3147 break;
3148
3149 case 493: // shared_network_params: shared_network_params ","
3150#line 1859 "dhcp4_parser.yy"
3151 {
3152 ctx.warnAboutExtraCommas(yystack_[0].location);
3153 }
3154#line 3155 "dhcp4_parser.cc"
3155 break;
3156
3157 case 542: // $@73: %empty
3158#line 1918 "dhcp4_parser.yy"
3159 {
3160 ctx.unique("option-def", ctx.loc2pos(yystack_[0].location));
3161 ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
3162 ctx.stack_.back()->set("option-def", l);
3163 ctx.stack_.push_back(l);
3164 ctx.enter(ctx.OPTION_DEF);
3165}
3166#line 3167 "dhcp4_parser.cc"
3167 break;
3168
3169 case 543: // option_def_list: "option-def" $@73 ":" "[" option_def_list_content "]"
3170#line 1924 "dhcp4_parser.yy"
3171 {
3172 ctx.stack_.pop_back();
3173 ctx.leave();
3174}
3175#line 3176 "dhcp4_parser.cc"
3176 break;
3177
3178 case 544: // $@74: %empty
3179#line 1932 "dhcp4_parser.yy"
3180 {
3181 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
3182 ctx.stack_.push_back(m);
3183}
3184#line 3185 "dhcp4_parser.cc"
3185 break;
3186
3187 case 545: // sub_option_def_list: "{" $@74 option_def_list "}"
3188#line 1935 "dhcp4_parser.yy"
3189 {
3190 // parsing completed
3191}
3192#line 3193 "dhcp4_parser.cc"
3193 break;
3194
3195 case 550: // not_empty_option_def_list: not_empty_option_def_list ","
3196#line 1947 "dhcp4_parser.yy"
3197 {
3198 ctx.warnAboutExtraCommas(yystack_[0].location);
3199 }
3200#line 3201 "dhcp4_parser.cc"
3201 break;
3202
3203 case 551: // $@75: %empty
3204#line 1954 "dhcp4_parser.yy"
3205 {
3206 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
3207 ctx.stack_.back()->add(m);
3208 ctx.stack_.push_back(m);
3209}
3210#line 3211 "dhcp4_parser.cc"
3211 break;
3212
3213 case 552: // option_def_entry: "{" $@75 option_def_params "}"
3214#line 1958 "dhcp4_parser.yy"
3215 {
3216 // The name, code and type option def parameters are required.
3217 ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
3218 ctx.require("code", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
3219 ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
3220 ctx.stack_.pop_back();
3221}
3222#line 3223 "dhcp4_parser.cc"
3223 break;
3224
3225 case 553: // $@76: %empty
3226#line 1969 "dhcp4_parser.yy"
3227 {
3228 // Parse the option-def list entry map
3229 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
3230 ctx.stack_.push_back(m);
3231}
3232#line 3233 "dhcp4_parser.cc"
3233 break;
3234
3235 case 554: // sub_option_def: "{" $@76 option_def_params "}"
3236#line 1973 "dhcp4_parser.yy"
3237 {
3238 // The name, code and type option def parameters are required.
3239 ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
3240 ctx.require("code", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
3241 ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
3242 // parsing completed
3243}
3244#line 3245 "dhcp4_parser.cc"
3245 break;
3246
3247 case 559: // not_empty_option_def_params: not_empty_option_def_params ","
3248#line 1989 "dhcp4_parser.yy"
3249 {
3250 ctx.warnAboutExtraCommas(yystack_[0].location);
3251 }
3252#line 3253 "dhcp4_parser.cc"
3253 break;
3254
3255 case 571: // code: "code" ":" "integer"
3256#line 2008 "dhcp4_parser.yy"
3257 {
3258 ctx.unique("code", ctx.loc2pos(yystack_[2].location));
3259 ElementPtr code(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
3260 ctx.stack_.back()->set("code", code);
3261}
3262#line 3263 "dhcp4_parser.cc"
3263 break;
3264
3265 case 573: // $@77: %empty
3266#line 2016 "dhcp4_parser.yy"
3267 {
3268 ctx.unique("type", ctx.loc2pos(yystack_[0].location));
3269 ctx.enter(ctx.NO_KEYWORD);
3270}
3271#line 3272 "dhcp4_parser.cc"
3272 break;
3273
3274 case 574: // option_def_type: "type" $@77 ":" "constant string"
3275#line 2019 "dhcp4_parser.yy"
3276 {
3277 ElementPtr prf(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
3278 ctx.stack_.back()->set("type", prf);
3279 ctx.leave();
3280}
3281#line 3282 "dhcp4_parser.cc"
3282 break;
3283
3284 case 575: // $@78: %empty
3285#line 2025 "dhcp4_parser.yy"
3286 {
3287 ctx.unique("record-types", ctx.loc2pos(yystack_[0].location));
3288 ctx.enter(ctx.NO_KEYWORD);
3289}
3290#line 3291 "dhcp4_parser.cc"
3291 break;
3292
3293 case 576: // option_def_record_types: "record-types" $@78 ":" "constant string"
3294#line 2028 "dhcp4_parser.yy"
3295 {
3296 ElementPtr rtypes(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
3297 ctx.stack_.back()->set("record-types", rtypes);
3298 ctx.leave();
3299}
3300#line 3301 "dhcp4_parser.cc"
3301 break;
3302
3303 case 577: // $@79: %empty
3304#line 2034 "dhcp4_parser.yy"
3305 {
3306 ctx.unique("space", ctx.loc2pos(yystack_[0].location));
3307 ctx.enter(ctx.NO_KEYWORD);
3308}
3309#line 3310 "dhcp4_parser.cc"
3310 break;
3311
3312 case 578: // space: "space" $@79 ":" "constant string"
3313#line 2037 "dhcp4_parser.yy"
3314 {
3315 ElementPtr space(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
3316 ctx.stack_.back()->set("space", space);
3317 ctx.leave();
3318}
3319#line 3320 "dhcp4_parser.cc"
3320 break;
3321
3322 case 580: // $@80: %empty
3323#line 2045 "dhcp4_parser.yy"
3324 {
3325 ctx.unique("encapsulate", ctx.loc2pos(yystack_[0].location));
3326 ctx.enter(ctx.NO_KEYWORD);
3327}
3328#line 3329 "dhcp4_parser.cc"
3329 break;
3330
3331 case 581: // option_def_encapsulate: "encapsulate" $@80 ":" "constant string"
3332#line 2048 "dhcp4_parser.yy"
3333 {
3334 ElementPtr encap(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
3335 ctx.stack_.back()->set("encapsulate", encap);
3336 ctx.leave();
3337}
3338#line 3339 "dhcp4_parser.cc"
3339 break;
3340
3341 case 582: // option_def_array: "array" ":" "boolean"
3342#line 2054 "dhcp4_parser.yy"
3343 {
3344 ctx.unique("array", ctx.loc2pos(yystack_[2].location));
3345 ElementPtr array(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
3346 ctx.stack_.back()->set("array", array);
3347}
3348#line 3349 "dhcp4_parser.cc"
3349 break;
3350
3351 case 583: // $@81: %empty
3352#line 2064 "dhcp4_parser.yy"
3353 {
3354 ctx.unique("option-data", ctx.loc2pos(yystack_[0].location));
3355 ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
3356 ctx.stack_.back()->set("option-data", l);
3357 ctx.stack_.push_back(l);
3358 ctx.enter(ctx.OPTION_DATA);
3359}
3360#line 3361 "dhcp4_parser.cc"
3361 break;
3362
3363 case 584: // option_data_list: "option-data" $@81 ":" "[" option_data_list_content "]"
3364#line 2070 "dhcp4_parser.yy"
3365 {
3366 ctx.stack_.pop_back();
3367 ctx.leave();
3368}
3369#line 3370 "dhcp4_parser.cc"
3370 break;
3371
3372 case 589: // not_empty_option_data_list: not_empty_option_data_list ","
3373#line 2085 "dhcp4_parser.yy"
3374 {
3375 ctx.warnAboutExtraCommas(yystack_[0].location);
3376 }
3377#line 3378 "dhcp4_parser.cc"
3378 break;
3379
3380 case 590: // $@82: %empty
3381#line 2092 "dhcp4_parser.yy"
3382 {
3383 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
3384 ctx.stack_.back()->add(m);
3385 ctx.stack_.push_back(m);
3386}
3387#line 3388 "dhcp4_parser.cc"
3388 break;
3389
3390 case 591: // option_data_entry: "{" $@82 option_data_params "}"
3391#line 2096 "dhcp4_parser.yy"
3392 {
3393 /// @todo: the code or name parameters are required.
3394 ctx.stack_.pop_back();
3395}
3396#line 3397 "dhcp4_parser.cc"
3397 break;
3398
3399 case 592: // $@83: %empty
3400#line 2104 "dhcp4_parser.yy"
3401 {
3402 // Parse the option-data list entry map
3403 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
3404 ctx.stack_.push_back(m);
3405}
3406#line 3407 "dhcp4_parser.cc"
3407 break;
3408
3409 case 593: // sub_option_data: "{" $@83 option_data_params "}"
3410#line 2108 "dhcp4_parser.yy"
3411 {
3412 /// @todo: the code or name parameters are required.
3413 // parsing completed
3414}
3415#line 3416 "dhcp4_parser.cc"
3416 break;
3417
3418 case 598: // not_empty_option_data_params: not_empty_option_data_params ","
3419#line 2124 "dhcp4_parser.yy"
3420 {
3421 ctx.warnAboutExtraCommas(yystack_[0].location);
3422 }
3423#line 3424 "dhcp4_parser.cc"
3424 break;
3425
3426 case 611: // $@84: %empty
3427#line 2146 "dhcp4_parser.yy"
3428 {
3429 ctx.unique("data", ctx.loc2pos(yystack_[0].location));
3430 ctx.enter(ctx.NO_KEYWORD);
3431}
3432#line 3433 "dhcp4_parser.cc"
3433 break;
3434
3435 case 612: // option_data_data: "data" $@84 ":" "constant string"
3436#line 2149 "dhcp4_parser.yy"
3437 {
3438 ElementPtr data(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
3439 ctx.stack_.back()->set("data", data);
3440 ctx.leave();
3441}
3442#line 3443 "dhcp4_parser.cc"
3443 break;
3444
3445 case 615: // option_data_csv_format: "csv-format" ":" "boolean"
3446#line 2159 "dhcp4_parser.yy"
3447 {
3448 ctx.unique("csv-format", ctx.loc2pos(yystack_[2].location));
3449 ElementPtr csv(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
3450 ctx.stack_.back()->set("csv-format", csv);
3451}
3452#line 3453 "dhcp4_parser.cc"
3453 break;
3454
3455 case 616: // option_data_always_send: "always-send" ":" "boolean"
3456#line 2165 "dhcp4_parser.yy"
3457 {
3458 ctx.unique("always-send", ctx.loc2pos(yystack_[2].location));
3459 ElementPtr persist(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
3460 ctx.stack_.back()->set("always-send", persist);
3461}
3462#line 3463 "dhcp4_parser.cc"
3463 break;
3464
3465 case 617: // option_data_never_send: "never-send" ":" "boolean"
3466#line 2171 "dhcp4_parser.yy"
3467 {
3468 ctx.unique("never-send", ctx.loc2pos(yystack_[2].location));
3469 ElementPtr cancel(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
3470 ctx.stack_.back()->set("never-send", cancel);
3471}
3472#line 3473 "dhcp4_parser.cc"
3473 break;
3474
3475 case 618: // $@85: %empty
3476#line 2177 "dhcp4_parser.yy"
3477 {
3478 ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location));
3479 ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
3480 ctx.stack_.back()->set("client-classes", c);
3481 ctx.stack_.push_back(c);
3482 ctx.enter(ctx.NO_KEYWORD);
3483}
3484#line 3485 "dhcp4_parser.cc"
3485 break;
3486
3487 case 619: // option_data_client_classes: "client-classes" $@85 ":" list_strings
3488#line 2183 "dhcp4_parser.yy"
3489 {
3490 ctx.stack_.pop_back();
3491 ctx.leave();
3492}
3493#line 3494 "dhcp4_parser.cc"
3494 break;
3495
3496 case 620: // $@86: %empty
3497#line 2191 "dhcp4_parser.yy"
3498 {
3499 ctx.unique("pools", ctx.loc2pos(yystack_[0].location));
3500 ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
3501 ctx.stack_.back()->set("pools", l);
3502 ctx.stack_.push_back(l);
3503 ctx.enter(ctx.POOLS);
3504}
3505#line 3506 "dhcp4_parser.cc"
3506 break;
3507
3508 case 621: // pools_list: "pools" $@86 ":" "[" pools_list_content "]"
3509#line 2197 "dhcp4_parser.yy"
3510 {
3511 ctx.stack_.pop_back();
3512 ctx.leave();
3513}
3514#line 3515 "dhcp4_parser.cc"
3515 break;
3516
3517 case 626: // not_empty_pools_list: not_empty_pools_list ","
3518#line 2210 "dhcp4_parser.yy"
3519 {
3520 ctx.warnAboutExtraCommas(yystack_[0].location);
3521 }
3522#line 3523 "dhcp4_parser.cc"
3523 break;
3524
3525 case 627: // $@87: %empty
3526#line 2215 "dhcp4_parser.yy"
3527 {
3528 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
3529 ctx.stack_.back()->add(m);
3530 ctx.stack_.push_back(m);
3531}
3532#line 3533 "dhcp4_parser.cc"
3533 break;
3534
3535 case 628: // pool_list_entry: "{" $@87 pool_params "}"
3536#line 2219 "dhcp4_parser.yy"
3537 {
3538 // The pool parameter is required.
3539 ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
3540 ctx.stack_.pop_back();
3541}
3542#line 3543 "dhcp4_parser.cc"
3543 break;
3544
3545 case 629: // $@88: %empty
3546#line 2225 "dhcp4_parser.yy"
3547 {
3548 // Parse the pool list entry map
3549 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
3550 ctx.stack_.push_back(m);
3551}
3552#line 3553 "dhcp4_parser.cc"
3553 break;
3554
3555 case 630: // sub_pool4: "{" $@88 pool_params "}"
3556#line 2229 "dhcp4_parser.yy"
3557 {
3558 // The pool parameter is required.
3559 ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
3560 // parsing completed
3561}
3562#line 3563 "dhcp4_parser.cc"
3563 break;
3564
3565 case 633: // pool_params: pool_params ","
3566#line 2237 "dhcp4_parser.yy"
3567 {
3568 ctx.warnAboutExtraCommas(yystack_[0].location);
3569 }
3570#line 3571 "dhcp4_parser.cc"
3571 break;
3572
3573 case 657: // $@89: %empty
3574#line 2267 "dhcp4_parser.yy"
3575 {
3576 ctx.unique("pool", ctx.loc2pos(yystack_[0].location));
3577 ctx.enter(ctx.NO_KEYWORD);
3578}
3579#line 3580 "dhcp4_parser.cc"
3580 break;
3581
3582 case 658: // pool_entry: "pool" $@89 ":" "constant string"
3583#line 2270 "dhcp4_parser.yy"
3584 {
3585 ElementPtr pool(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
3586 ctx.stack_.back()->set("pool", pool);
3587 ctx.leave();
3588}
3589#line 3590 "dhcp4_parser.cc"
3590 break;
3591
3592 case 659: // pool_id: "pool-id" ":" "integer"
3593#line 2276 "dhcp4_parser.yy"
3594 {
3595 ctx.unique("pool-id", ctx.loc2pos(yystack_[2].location));
3596 ElementPtr id(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
3597 ctx.stack_.back()->set("pool-id", id);
3598}
3599#line 3600 "dhcp4_parser.cc"
3600 break;
3601
3602 case 660: // $@90: %empty
3603#line 2282 "dhcp4_parser.yy"
3604 {
3605 ctx.enter(ctx.NO_KEYWORD);
3606}
3607#line 3608 "dhcp4_parser.cc"
3608 break;
3609
3610 case 661: // user_context: "user-context" $@90 ":" map_value
3611#line 2284 "dhcp4_parser.yy"
3612 {
3613 ElementPtr parent = ctx.stack_.back();
3614 ElementPtr user_context = yystack_[0].value.as < ElementPtr > ();
3615 ConstElementPtr old = parent->get("user-context");
3616
3617 // Handle already existing user context
3618 if (old) {
3619 // Check if it was a comment or a duplicate
3620 if ((old->size() != 1) || !old->contains("comment")) {
3621 std::stringstream msg;
3622 msg << "duplicate user-context entries (previous at "
3623 << old->getPosition().str() << ")";
3624 error(yystack_[3].location, msg.str());
3625 }
3626 // Merge the comment
3627 user_context->set("comment", old->get("comment"));
3628 }
3629
3630 // Set the user context
3631 parent->set("user-context", user_context);
3632 ctx.leave();
3633}
3634#line 3635 "dhcp4_parser.cc"
3635 break;
3636
3637 case 662: // $@91: %empty
3638#line 2307 "dhcp4_parser.yy"
3639 {
3640 ctx.enter(ctx.NO_KEYWORD);
3641}
3642#line 3643 "dhcp4_parser.cc"
3643 break;
3644
3645 case 663: // comment: "comment" $@91 ":" "constant string"
3646#line 2309 "dhcp4_parser.yy"
3647 {
3648 ElementPtr parent = ctx.stack_.back();
3649 ElementPtr user_context(new MapElement(ctx.loc2pos(yystack_[3].location)));
3650 ElementPtr comment(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
3651 user_context->set("comment", comment);
3652
3653 // Handle already existing user context
3654 ConstElementPtr old = parent->get("user-context");
3655 if (old) {
3656 // Check for duplicate comment
3657 if (old->contains("comment")) {
3658 std::stringstream msg;
3659 msg << "duplicate user-context/comment entries (previous at "
3660 << old->getPosition().str() << ")";
3661 error(yystack_[3].location, msg.str());
3662 }
3663 // Merge the user context in the comment
3664 merge(user_context, old);
3665 }
3666
3667 // Set the user context
3668 parent->set("user-context", user_context);
3669 ctx.leave();
3670}
3671#line 3672 "dhcp4_parser.cc"
3672 break;
3673
3674 case 664: // $@92: %empty
3675#line 2337 "dhcp4_parser.yy"
3676 {
3677 ctx.unique("reservations", ctx.loc2pos(yystack_[0].location));
3678 ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
3679 ctx.stack_.back()->set("reservations", l);
3680 ctx.stack_.push_back(l);
3681 ctx.enter(ctx.RESERVATIONS);
3682}
3683#line 3684 "dhcp4_parser.cc"
3684 break;
3685
3686 case 665: // reservations: "reservations" $@92 ":" "[" reservations_list "]"
3687#line 2343 "dhcp4_parser.yy"
3688 {
3689 ctx.stack_.pop_back();
3690 ctx.leave();
3691}
3692#line 3693 "dhcp4_parser.cc"
3693 break;
3694
3695 case 670: // not_empty_reservations_list: not_empty_reservations_list ","
3696#line 2354 "dhcp4_parser.yy"
3697 {
3698 ctx.warnAboutExtraCommas(yystack_[0].location);
3699 }
3700#line 3701 "dhcp4_parser.cc"
3701 break;
3702
3703 case 671: // $@93: %empty
3704#line 2359 "dhcp4_parser.yy"
3705 {
3706 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
3707 ctx.stack_.back()->add(m);
3708 ctx.stack_.push_back(m);
3709}
3710#line 3711 "dhcp4_parser.cc"
3711 break;
3712
3713 case 672: // reservation: "{" $@93 reservation_params "}"
3714#line 2363 "dhcp4_parser.yy"
3715 {
3716 /// @todo: an identifier parameter is required.
3717 ctx.stack_.pop_back();
3718}
3719#line 3720 "dhcp4_parser.cc"
3720 break;
3721
3722 case 673: // $@94: %empty
3723#line 2368 "dhcp4_parser.yy"
3724 {
3725 // Parse the reservations list entry map
3726 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
3727 ctx.stack_.push_back(m);
3728}
3729#line 3730 "dhcp4_parser.cc"
3730 break;
3731
3732 case 674: // sub_reservation: "{" $@94 reservation_params "}"
3733#line 2372 "dhcp4_parser.yy"
3734 {
3735 /// @todo: an identifier parameter is required.
3736 // parsing completed
3737}
3738#line 3739 "dhcp4_parser.cc"
3739 break;
3740
3741 case 679: // not_empty_reservation_params: not_empty_reservation_params ","
3742#line 2383 "dhcp4_parser.yy"
3743 {
3744 ctx.warnAboutExtraCommas(yystack_[0].location);
3745 }
3746#line 3747 "dhcp4_parser.cc"
3747 break;
3748
3749 case 695: // $@95: %empty
3750#line 2406 "dhcp4_parser.yy"
3751 {
3752 ctx.unique("next-server", ctx.loc2pos(yystack_[0].location));
3753 ctx.enter(ctx.NO_KEYWORD);
3754}
3755#line 3756 "dhcp4_parser.cc"
3756 break;
3757
3758 case 696: // next_server: "next-server" $@95 ":" "constant string"
3759#line 2409 "dhcp4_parser.yy"
3760 {
3761 ElementPtr next_server(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
3762 ctx.stack_.back()->set("next-server", next_server);
3763 ctx.leave();
3764}
3765#line 3766 "dhcp4_parser.cc"
3766 break;
3767
3768 case 697: // $@96: %empty
3769#line 2415 "dhcp4_parser.yy"
3770 {
3771 ctx.unique("server-hostname", ctx.loc2pos(yystack_[0].location));
3772 ctx.enter(ctx.NO_KEYWORD);
3773}
3774#line 3775 "dhcp4_parser.cc"
3775 break;
3776
3777 case 698: // server_hostname: "server-hostname" $@96 ":" "constant string"
3778#line 2418 "dhcp4_parser.yy"
3779 {
3780 ElementPtr srv(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
3781 ctx.stack_.back()->set("server-hostname", srv);
3782 ctx.leave();
3783}
3784#line 3785 "dhcp4_parser.cc"
3785 break;
3786
3787 case 699: // $@97: %empty
3788#line 2424 "dhcp4_parser.yy"
3789 {
3790 ctx.unique("boot-file-name", ctx.loc2pos(yystack_[0].location));
3791 ctx.enter(ctx.NO_KEYWORD);
3792}
3793#line 3794 "dhcp4_parser.cc"
3794 break;
3795
3796 case 700: // boot_file_name: "boot-file-name" $@97 ":" "constant string"
3797#line 2427 "dhcp4_parser.yy"
3798 {
3799 ElementPtr bootfile(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
3800 ctx.stack_.back()->set("boot-file-name", bootfile);
3801 ctx.leave();
3802}
3803#line 3804 "dhcp4_parser.cc"
3804 break;
3805
3806 case 701: // $@98: %empty
3807#line 2433 "dhcp4_parser.yy"
3808 {
3809 ctx.unique("ip-address", ctx.loc2pos(yystack_[0].location));
3810 ctx.enter(ctx.NO_KEYWORD);
3811}
3812#line 3813 "dhcp4_parser.cc"
3813 break;
3814
3815 case 702: // ip_address: "ip-address" $@98 ":" "constant string"
3816#line 2436 "dhcp4_parser.yy"
3817 {
3818 ElementPtr addr(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
3819 ctx.stack_.back()->set("ip-address", addr);
3820 ctx.leave();
3821}
3822#line 3823 "dhcp4_parser.cc"
3823 break;
3824
3825 case 703: // $@99: %empty
3826#line 2442 "dhcp4_parser.yy"
3827 {
3828 ctx.unique("duid", ctx.loc2pos(yystack_[0].location));
3829 ctx.enter(ctx.NO_KEYWORD);
3830}
3831#line 3832 "dhcp4_parser.cc"
3832 break;
3833
3834 case 704: // duid: "duid" $@99 ":" "constant string"
3835#line 2445 "dhcp4_parser.yy"
3836 {
3837 ElementPtr d(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
3838 ctx.stack_.back()->set("duid", d);
3839 ctx.leave();
3840}
3841#line 3842 "dhcp4_parser.cc"
3842 break;
3843
3844 case 705: // $@100: %empty
3845#line 2451 "dhcp4_parser.yy"
3846 {
3847 ctx.unique("hw-address", ctx.loc2pos(yystack_[0].location));
3848 ctx.enter(ctx.NO_KEYWORD);
3849}
3850#line 3851 "dhcp4_parser.cc"
3851 break;
3852
3853 case 706: // hw_address: "hw-address" $@100 ":" "constant string"
3854#line 2454 "dhcp4_parser.yy"
3855 {
3856 ElementPtr hw(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
3857 ctx.stack_.back()->set("hw-address", hw);
3858 ctx.leave();
3859}
3860#line 3861 "dhcp4_parser.cc"
3861 break;
3862
3863 case 707: // $@101: %empty
3864#line 2460 "dhcp4_parser.yy"
3865 {
3866 ctx.unique("client-id", ctx.loc2pos(yystack_[0].location));
3867 ctx.enter(ctx.NO_KEYWORD);
3868}
3869#line 3870 "dhcp4_parser.cc"
3870 break;
3871
3872 case 708: // client_id_value: "client-id" $@101 ":" "constant string"
3873#line 2463 "dhcp4_parser.yy"
3874 {
3875 ElementPtr hw(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
3876 ctx.stack_.back()->set("client-id", hw);
3877 ctx.leave();
3878}
3879#line 3880 "dhcp4_parser.cc"
3880 break;
3881
3882 case 709: // $@102: %empty
3883#line 2469 "dhcp4_parser.yy"
3884 {
3885 ctx.unique("circuit-id", ctx.loc2pos(yystack_[0].location));
3886 ctx.enter(ctx.NO_KEYWORD);
3887}
3888#line 3889 "dhcp4_parser.cc"
3889 break;
3890
3891 case 710: // circuit_id_value: "circuit-id" $@102 ":" "constant string"
3892#line 2472 "dhcp4_parser.yy"
3893 {
3894 ElementPtr hw(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
3895 ctx.stack_.back()->set("circuit-id", hw);
3896 ctx.leave();
3897}
3898#line 3899 "dhcp4_parser.cc"
3899 break;
3900
3901 case 711: // $@103: %empty
3902#line 2478 "dhcp4_parser.yy"
3903 {
3904 ctx.unique("flex-id", ctx.loc2pos(yystack_[0].location));
3905 ctx.enter(ctx.NO_KEYWORD);
3906}
3907#line 3908 "dhcp4_parser.cc"
3908 break;
3909
3910 case 712: // flex_id_value: "flex-id" $@103 ":" "constant string"
3911#line 2481 "dhcp4_parser.yy"
3912 {
3913 ElementPtr hw(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
3914 ctx.stack_.back()->set("flex-id", hw);
3915 ctx.leave();
3916}
3917#line 3918 "dhcp4_parser.cc"
3918 break;
3919
3920 case 713: // $@104: %empty
3921#line 2487 "dhcp4_parser.yy"
3922 {
3923 ctx.unique("hostname", ctx.loc2pos(yystack_[0].location));
3924 ctx.enter(ctx.NO_KEYWORD);
3925}
3926#line 3927 "dhcp4_parser.cc"
3927 break;
3928
3929 case 714: // hostname: "hostname" $@104 ":" "constant string"
3930#line 2490 "dhcp4_parser.yy"
3931 {
3932 ElementPtr host(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
3933 ctx.stack_.back()->set("hostname", host);
3934 ctx.leave();
3935}
3936#line 3937 "dhcp4_parser.cc"
3937 break;
3938
3939 case 715: // $@105: %empty
3940#line 2496 "dhcp4_parser.yy"
3941 {
3942 ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location));
3943 ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
3944 ctx.stack_.back()->set("client-classes", c);
3945 ctx.stack_.push_back(c);
3946 ctx.enter(ctx.NO_KEYWORD);
3947}
3948#line 3949 "dhcp4_parser.cc"
3949 break;
3950
3951 case 716: // reservation_client_classes: "client-classes" $@105 ":" list_strings
3952#line 2502 "dhcp4_parser.yy"
3953 {
3954 ctx.stack_.pop_back();
3955 ctx.leave();
3956}
3957#line 3958 "dhcp4_parser.cc"
3958 break;
3959
3960 case 717: // $@106: %empty
3961#line 2510 "dhcp4_parser.yy"
3962 {
3963 ctx.unique("relay", ctx.loc2pos(yystack_[0].location));
3964 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
3965 ctx.stack_.back()->set("relay", m);
3966 ctx.stack_.push_back(m);
3967 ctx.enter(ctx.RELAY);
3968}
3969#line 3970 "dhcp4_parser.cc"
3970 break;
3971
3972 case 718: // relay: "relay" $@106 ":" "{" relay_map "}"
3973#line 2516 "dhcp4_parser.yy"
3974 {
3975 ctx.stack_.pop_back();
3976 ctx.leave();
3977}
3978#line 3979 "dhcp4_parser.cc"
3979 break;
3980
3981 case 720: // $@107: %empty
3982#line 2524 "dhcp4_parser.yy"
3983 {
3984 ctx.unique("ip-addresses", ctx.loc2pos(yystack_[0].location));
3985 ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
3986 ctx.stack_.back()->set("ip-addresses", l);
3987 ctx.stack_.push_back(l);
3988 ctx.enter(ctx.NO_KEYWORD);
3989}
3990#line 3991 "dhcp4_parser.cc"
3991 break;
3992
3993 case 721: // ip_addresses: "ip-addresses" $@107 ":" list_strings
3994#line 2530 "dhcp4_parser.yy"
3995 {
3996 ctx.stack_.pop_back();
3997 ctx.leave();
3998}
3999#line 4000 "dhcp4_parser.cc"
4000 break;
4001
4002 case 722: // $@108: %empty
4003#line 2538 "dhcp4_parser.yy"
4004 {
4005 ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location));
4006 ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
4007 ctx.stack_.back()->set("client-classes", l);
4008 ctx.stack_.push_back(l);
4009 ctx.enter(ctx.CLIENT_CLASSES);
4010}
4011#line 4012 "dhcp4_parser.cc"
4012 break;
4013
4014 case 723: // client_classes: "client-classes" $@108 ":" "[" client_classes_list "]"
4015#line 2544 "dhcp4_parser.yy"
4016 {
4017 ctx.stack_.pop_back();
4018 ctx.leave();
4019}
4020#line 4021 "dhcp4_parser.cc"
4021 break;
4022
4023 case 728: // not_empty_classes_list: not_empty_classes_list ","
4024#line 2555 "dhcp4_parser.yy"
4025 {
4026 ctx.warnAboutExtraCommas(yystack_[0].location);
4027 }
4028#line 4029 "dhcp4_parser.cc"
4029 break;
4030
4031 case 729: // $@109: %empty
4032#line 2560 "dhcp4_parser.yy"
4033 {
4034 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
4035 ctx.stack_.back()->add(m);
4036 ctx.stack_.push_back(m);
4037}
4038#line 4039 "dhcp4_parser.cc"
4039 break;
4040
4041 case 730: // client_class_entry: "{" $@109 client_class_params "}"
4042#line 2564 "dhcp4_parser.yy"
4043 {
4044 // The name client class parameter is required.
4045 ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
4046 ctx.stack_.pop_back();
4047}
4048#line 4049 "dhcp4_parser.cc"
4049 break;
4050
4051 case 735: // not_empty_client_class_params: not_empty_client_class_params ","
4052#line 2576 "dhcp4_parser.yy"
4053 {
4054 ctx.warnAboutExtraCommas(yystack_[0].location);
4055 }
4056#line 4057 "dhcp4_parser.cc"
4057 break;
4058
4059 case 753: // $@110: %empty
4060#line 2601 "dhcp4_parser.yy"
4061 {
4062 ctx.unique("test", ctx.loc2pos(yystack_[0].location));
4063 ctx.enter(ctx.NO_KEYWORD);
4064}
4065#line 4066 "dhcp4_parser.cc"
4066 break;
4067
4068 case 754: // client_class_test: "test" $@110 ":" "constant string"
4069#line 2604 "dhcp4_parser.yy"
4070 {
4071 ElementPtr test(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
4072 ctx.stack_.back()->set("test", test);
4073 ctx.leave();
4074}
4075#line 4076 "dhcp4_parser.cc"
4076 break;
4077
4078 case 755: // $@111: %empty
4079#line 2610 "dhcp4_parser.yy"
4080 {
4081 ctx.unique("template-test", ctx.loc2pos(yystack_[0].location));
4082 ctx.enter(ctx.NO_KEYWORD);
4083}
4084#line 4085 "dhcp4_parser.cc"
4085 break;
4086
4087 case 756: // client_class_template_test: "template-test" $@111 ":" "constant string"
4088#line 2613 "dhcp4_parser.yy"
4089 {
4090 ElementPtr template_test(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
4091 ctx.stack_.back()->set("template-test", template_test);
4092 ctx.leave();
4093}
4094#line 4095 "dhcp4_parser.cc"
4095 break;
4096
4097 case 757: // only_in_additional_list: "only-in-additional-list" ":" "boolean"
4098#line 2619 "dhcp4_parser.yy"
4099 {
4100 ctx.unique("only-in-additional-list", ctx.loc2pos(yystack_[2].location));
4101 ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
4102 ctx.stack_.back()->set("only-in-additional-list", b);
4103}
4104#line 4105 "dhcp4_parser.cc"
4105 break;
4106
4107 case 758: // dhcp4o6_port: "dhcp4o6-port" ":" "integer"
4108#line 2627 "dhcp4_parser.yy"
4109 {
4110 ctx.unique("dhcp4o6-port", ctx.loc2pos(yystack_[2].location));
4111 ElementPtr time(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
4112 ctx.stack_.back()->set("dhcp4o6-port", time);
4113}
4114#line 4115 "dhcp4_parser.cc"
4115 break;
4116
4117 case 759: // $@112: %empty
4118#line 2635 "dhcp4_parser.yy"
4119 {
4120 ctx.unique("control-sockets", ctx.loc2pos(yystack_[0].location));
4121 ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
4122 ctx.stack_.back()->set("control-sockets", l);
4123 ctx.stack_.push_back(l);
4124 ctx.enter(ctx.CONTROL_SOCKETS);
4125}
4126#line 4127 "dhcp4_parser.cc"
4127 break;
4128
4129 case 760: // control_sockets: "control-sockets" $@112 ":" "[" control_socket_list "]"
4130#line 2641 "dhcp4_parser.yy"
4131 {
4132 ctx.stack_.pop_back();
4133 ctx.leave();
4134}
4135#line 4136 "dhcp4_parser.cc"
4136 break;
4137
4138 case 765: // not_empty_control_socket_list: not_empty_control_socket_list ","
4139#line 2652 "dhcp4_parser.yy"
4140 {
4141 ctx.warnAboutExtraCommas(yystack_[0].location);
4142 }
4143#line 4144 "dhcp4_parser.cc"
4144 break;
4145
4146 case 766: // $@113: %empty
4147#line 2657 "dhcp4_parser.yy"
4148 {
4149 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
4150 ctx.stack_.back()->add(m);
4151 ctx.stack_.push_back(m);
4152}
4153#line 4154 "dhcp4_parser.cc"
4154 break;
4155
4156 case 767: // control_socket_entry: "{" $@113 control_socket_params "}"
4157#line 2661 "dhcp4_parser.yy"
4158 {
4159 ctx.stack_.pop_back();
4160}
4161#line 4162 "dhcp4_parser.cc"
4162 break;
4163
4164 case 770: // control_socket_params: control_socket_params ","
4165#line 2667 "dhcp4_parser.yy"
4166 {
4167 ctx.warnAboutExtraCommas(yystack_[0].location);
4168 }
4169#line 4170 "dhcp4_parser.cc"
4170 break;
4171
4172 case 784: // $@114: %empty
4173#line 2687 "dhcp4_parser.yy"
4174 {
4175 ctx.unique("socket-type", ctx.loc2pos(yystack_[0].location));
4176 ctx.enter(ctx.CONTROL_SOCKET_TYPE);
4177}
4178#line 4179 "dhcp4_parser.cc"
4179 break;
4180
4181 case 785: // control_socket_type: "socket-type" $@114 ":" control_socket_type_value
4182#line 2690 "dhcp4_parser.yy"
4183 {
4184 ctx.stack_.back()->set("socket-type", yystack_[0].value.as < ElementPtr > ());
4185 ctx.leave();
4186}
4187#line 4188 "dhcp4_parser.cc"
4188 break;
4189
4190 case 786: // control_socket_type_value: "unix"
4191#line 2696 "dhcp4_parser.yy"
4192 { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("unix", ctx.loc2pos(yystack_[0].location))); }
4193#line 4194 "dhcp4_parser.cc"
4194 break;
4195
4196 case 787: // control_socket_type_value: "http"
4197#line 2697 "dhcp4_parser.yy"
4198 { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("http", ctx.loc2pos(yystack_[0].location))); }
4199#line 4200 "dhcp4_parser.cc"
4200 break;
4201
4202 case 788: // control_socket_type_value: "https"
4203#line 2698 "dhcp4_parser.yy"
4204 { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("https", ctx.loc2pos(yystack_[0].location))); }
4205#line 4206 "dhcp4_parser.cc"
4206 break;
4207
4208 case 789: // $@115: %empty
4209#line 2701 "dhcp4_parser.yy"
4210 {
4211 ctx.unique("socket-name", ctx.loc2pos(yystack_[0].location));
4212 ctx.enter(ctx.NO_KEYWORD);
4213}
4214#line 4215 "dhcp4_parser.cc"
4215 break;
4216
4217 case 790: // control_socket_name: "socket-name" $@115 ":" "constant string"
4218#line 2704 "dhcp4_parser.yy"
4219 {
4220 ElementPtr name(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
4221 ctx.stack_.back()->set("socket-name", name);
4222 ctx.leave();
4223}
4224#line 4225 "dhcp4_parser.cc"
4225 break;
4226
4227 case 791: // $@116: %empty
4228#line 2710 "dhcp4_parser.yy"
4229 {
4230 ctx.unique("socket-address", ctx.loc2pos(yystack_[0].location));
4231 ctx.enter(ctx.NO_KEYWORD);
4232}
4233#line 4234 "dhcp4_parser.cc"
4234 break;
4235
4236 case 792: // control_socket_address: "socket-address" $@116 ":" "constant string"
4237#line 2713 "dhcp4_parser.yy"
4238 {
4239 ElementPtr address(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
4240 ctx.stack_.back()->set("socket-address", address);
4241 ctx.leave();
4242}
4243#line 4244 "dhcp4_parser.cc"
4244 break;
4245
4246 case 793: // control_socket_port: "socket-port" ":" "integer"
4247#line 2719 "dhcp4_parser.yy"
4248 {
4249 ctx.unique("socket-port", ctx.loc2pos(yystack_[2].location));
4250 ElementPtr port(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
4251 ctx.stack_.back()->set("socket-port", port);
4252}
4253#line 4254 "dhcp4_parser.cc"
4254 break;
4255
4256 case 794: // cert_required: "cert-required" ":" "boolean"
4257#line 2725 "dhcp4_parser.yy"
4258 {
4259 ctx.unique("cert-required", ctx.loc2pos(yystack_[2].location));
4260 ElementPtr req(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
4261 ctx.stack_.back()->set("cert-required", req);
4262}
4263#line 4264 "dhcp4_parser.cc"
4264 break;
4265
4266 case 795: // $@117: %empty
4267#line 2731 "dhcp4_parser.yy"
4268 {
4269 ctx.unique("http-headers", ctx.loc2pos(yystack_[0].location));
4270 ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
4271 ctx.stack_.back()->set("http-headers", l);
4272 ctx.stack_.push_back(l);
4273 ctx.enter(ctx.HTTP_HEADERS);
4274}
4275#line 4276 "dhcp4_parser.cc"
4276 break;
4277
4278 case 796: // http_headers: "http-headers" $@117 ":" "[" http_header_list "]"
4279#line 2737 "dhcp4_parser.yy"
4280 {
4281 ctx.stack_.pop_back();
4282 ctx.leave();
4283}
4284#line 4285 "dhcp4_parser.cc"
4285 break;
4286
4287 case 801: // not_empty_http_header_list: not_empty_http_header_list ","
4288#line 2748 "dhcp4_parser.yy"
4289 {
4290 ctx.warnAboutExtraCommas(yystack_[0].location);
4291 }
4292#line 4293 "dhcp4_parser.cc"
4293 break;
4294
4295 case 802: // $@118: %empty
4296#line 2753 "dhcp4_parser.yy"
4297 {
4298 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
4299 ctx.stack_.back()->add(m);
4300 ctx.stack_.push_back(m);
4301}
4302#line 4303 "dhcp4_parser.cc"
4303 break;
4304
4305 case 803: // http_header: "{" $@118 http_header_params "}"
4306#line 2757 "dhcp4_parser.yy"
4307 {
4308 ctx.stack_.pop_back();
4309}
4310#line 4311 "dhcp4_parser.cc"
4311 break;
4312
4313 case 806: // http_header_params: http_header_params ","
4314#line 2763 "dhcp4_parser.yy"
4315 {
4316 ctx.warnAboutExtraCommas(yystack_[0].location);
4317 }
4318#line 4319 "dhcp4_parser.cc"
4319 break;
4320
4321 case 812: // $@119: %empty
4322#line 2775 "dhcp4_parser.yy"
4323 {
4324 ctx.unique("value", ctx.loc2pos(yystack_[0].location));
4325 ctx.enter(ctx.NO_KEYWORD);
4326}
4327#line 4328 "dhcp4_parser.cc"
4328 break;
4329
4330 case 813: // header_value: "value" $@119 ":" "constant string"
4331#line 2778 "dhcp4_parser.yy"
4332 {
4333 ElementPtr value(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
4334 ctx.stack_.back()->set("value", value);
4335 ctx.leave();
4336}
4337#line 4338 "dhcp4_parser.cc"
4338 break;
4339
4340 case 814: // $@120: %empty
4341#line 2786 "dhcp4_parser.yy"
4342 {
4343 ctx.unique("authentication", ctx.loc2pos(yystack_[0].location));
4344 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
4345 ctx.stack_.back()->set("authentication", m);
4346 ctx.stack_.push_back(m);
4347 ctx.enter(ctx.AUTHENTICATION);
4348}
4349#line 4350 "dhcp4_parser.cc"
4350 break;
4351
4352 case 815: // authentication: "authentication" $@120 ":" "{" auth_params "}"
4353#line 2792 "dhcp4_parser.yy"
4354 {
4355 // The type parameter is required
4356 ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
4357 ctx.stack_.pop_back();
4358 ctx.leave();
4359}
4360#line 4361 "dhcp4_parser.cc"
4361 break;
4362
4363 case 818: // auth_params: auth_params ","
4364#line 2801 "dhcp4_parser.yy"
4365 {
4366 ctx.warnAboutExtraCommas(yystack_[0].location);
4367 }
4368#line 4369 "dhcp4_parser.cc"
4369 break;
4370
4371 case 826: // $@121: %empty
4372#line 2815 "dhcp4_parser.yy"
4373 {
4374 ctx.unique("type", ctx.loc2pos(yystack_[0].location));
4375 ctx.enter(ctx.AUTH_TYPE);
4376}
4377#line 4378 "dhcp4_parser.cc"
4378 break;
4379
4380 case 827: // auth_type: "type" $@121 ":" auth_type_value
4381#line 2818 "dhcp4_parser.yy"
4382 {
4383 ctx.stack_.back()->set("type", yystack_[0].value.as < ElementPtr > ());
4384 ctx.leave();
4385}
4386#line 4387 "dhcp4_parser.cc"
4387 break;
4388
4389 case 828: // auth_type_value: "basic"
4390#line 2823 "dhcp4_parser.yy"
4391 { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("basic", ctx.loc2pos(yystack_[0].location))); }
4392#line 4393 "dhcp4_parser.cc"
4393 break;
4394
4395 case 829: // $@122: %empty
4396#line 2826 "dhcp4_parser.yy"
4397 {
4398 ctx.unique("realm", ctx.loc2pos(yystack_[0].location));
4399 ctx.enter(ctx.NO_KEYWORD);
4400}
4401#line 4402 "dhcp4_parser.cc"
4402 break;
4403
4404 case 830: // realm: "realm" $@122 ":" "constant string"
4405#line 2829 "dhcp4_parser.yy"
4406 {
4407 ElementPtr realm(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
4408 ctx.stack_.back()->set("realm", realm);
4409 ctx.leave();
4410}
4411#line 4412 "dhcp4_parser.cc"
4412 break;
4413
4414 case 831: // $@123: %empty
4415#line 2835 "dhcp4_parser.yy"
4416 {
4417 ctx.unique("directory", ctx.loc2pos(yystack_[0].location));
4418 ctx.enter(ctx.NO_KEYWORD);
4419}
4420#line 4421 "dhcp4_parser.cc"
4421 break;
4422
4423 case 832: // directory: "directory" $@123 ":" "constant string"
4424#line 2838 "dhcp4_parser.yy"
4425 {
4426 ElementPtr directory(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
4427 ctx.stack_.back()->set("directory", directory);
4428 ctx.leave();
4429}
4430#line 4431 "dhcp4_parser.cc"
4431 break;
4432
4433 case 833: // $@124: %empty
4434#line 2844 "dhcp4_parser.yy"
4435 {
4436 ctx.unique("clients", ctx.loc2pos(yystack_[0].location));
4437 ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
4438 ctx.stack_.back()->set("clients", l);
4439 ctx.stack_.push_back(l);
4440 ctx.enter(ctx.CLIENTS);
4441}
4442#line 4443 "dhcp4_parser.cc"
4443 break;
4444
4445 case 834: // clients: "clients" $@124 ":" "[" clients_list "]"
4446#line 2850 "dhcp4_parser.yy"
4447 {
4448 ctx.stack_.pop_back();
4449 ctx.leave();
4450}
4451#line 4452 "dhcp4_parser.cc"
4452 break;
4453
4454 case 839: // not_empty_clients_list: not_empty_clients_list ","
4455#line 2861 "dhcp4_parser.yy"
4456 {
4457 ctx.warnAboutExtraCommas(yystack_[0].location);
4458 }
4459#line 4460 "dhcp4_parser.cc"
4460 break;
4461
4462 case 840: // $@125: %empty
4463#line 2866 "dhcp4_parser.yy"
4464 {
4465 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
4466 ctx.stack_.back()->add(m);
4467 ctx.stack_.push_back(m);
4468}
4469#line 4470 "dhcp4_parser.cc"
4470 break;
4471
4472 case 841: // basic_auth: "{" $@125 clients_params "}"
4473#line 2870 "dhcp4_parser.yy"
4474 {
4475 ctx.stack_.pop_back();
4476}
4477#line 4478 "dhcp4_parser.cc"
4478 break;
4479
4480 case 844: // clients_params: clients_params ","
4481#line 2876 "dhcp4_parser.yy"
4482 {
4483 ctx.warnAboutExtraCommas(yystack_[0].location);
4484 }
4485#line 4486 "dhcp4_parser.cc"
4486 break;
4487
4488 case 852: // $@126: %empty
4489#line 2890 "dhcp4_parser.yy"
4490 {
4491 ctx.unique("user-file", ctx.loc2pos(yystack_[0].location));
4492 ctx.enter(ctx.NO_KEYWORD);
4493}
4494#line 4495 "dhcp4_parser.cc"
4495 break;
4496
4497 case 853: // user_file: "user-file" $@126 ":" "constant string"
4498#line 2893 "dhcp4_parser.yy"
4499 {
4500 ElementPtr user(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
4501 ctx.stack_.back()->set("user-file", user);
4502 ctx.leave();
4503}
4504#line 4505 "dhcp4_parser.cc"
4505 break;
4506
4507 case 854: // $@127: %empty
4508#line 2901 "dhcp4_parser.yy"
4509 {
4510 ctx.unique("dhcp-queue-control", ctx.loc2pos(yystack_[0].location));
4511 ElementPtr qc(new MapElement(ctx.loc2pos(yystack_[0].location)));
4512 ctx.stack_.back()->set("dhcp-queue-control", qc);
4513 ctx.stack_.push_back(qc);
4514 ctx.enter(ctx.DHCP_QUEUE_CONTROL);
4515}
4516#line 4517 "dhcp4_parser.cc"
4517 break;
4518
4519 case 855: // dhcp_queue_control: "dhcp-queue-control" $@127 ":" "{" queue_control_params "}"
4520#line 2907 "dhcp4_parser.yy"
4521 {
4522 // The enable queue parameter is required.
4523 ctx.require("enable-queue", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
4524 ctx.stack_.pop_back();
4525 ctx.leave();
4526}
4527#line 4528 "dhcp4_parser.cc"
4528 break;
4529
4530 case 858: // queue_control_params: queue_control_params ","
4531#line 2916 "dhcp4_parser.yy"
4532 {
4533 ctx.warnAboutExtraCommas(yystack_[0].location);
4534 }
4535#line 4536 "dhcp4_parser.cc"
4536 break;
4537
4538 case 865: // enable_queue: "enable-queue" ":" "boolean"
4539#line 2929 "dhcp4_parser.yy"
4540 {
4541 ctx.unique("enable-queue", ctx.loc2pos(yystack_[2].location));
4542 ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
4543 ctx.stack_.back()->set("enable-queue", b);
4544}
4545#line 4546 "dhcp4_parser.cc"
4546 break;
4547
4548 case 866: // $@128: %empty
4549#line 2935 "dhcp4_parser.yy"
4550 {
4551 ctx.unique("queue-type", ctx.loc2pos(yystack_[0].location));
4552 ctx.enter(ctx.NO_KEYWORD);
4553}
4554#line 4555 "dhcp4_parser.cc"
4555 break;
4556
4557 case 867: // queue_type: "queue-type" $@128 ":" "constant string"
4558#line 2938 "dhcp4_parser.yy"
4559 {
4560 ElementPtr qt(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
4561 ctx.stack_.back()->set("queue-type", qt);
4562 ctx.leave();
4563}
4564#line 4565 "dhcp4_parser.cc"
4565 break;
4566
4567 case 868: // capacity: "capacity" ":" "integer"
4568#line 2944 "dhcp4_parser.yy"
4569 {
4570 ctx.unique("capacity", ctx.loc2pos(yystack_[2].location));
4571 ElementPtr c(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
4572 ctx.stack_.back()->set("capacity", c);
4573}
4574#line 4575 "dhcp4_parser.cc"
4575 break;
4576
4577 case 869: // $@129: %empty
4578#line 2950 "dhcp4_parser.yy"
4579 {
4580 ctx.unique(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location));
4581 ctx.enter(ctx.NO_KEYWORD);
4582}
4583#line 4584 "dhcp4_parser.cc"
4584 break;
4585
4586 case 870: // arbitrary_map_entry: "constant string" $@129 ":" value
4587#line 2953 "dhcp4_parser.yy"
4588 {
4589 ctx.stack_.back()->set(yystack_[3].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ());
4590 ctx.leave();
4591}
4592#line 4593 "dhcp4_parser.cc"
4593 break;
4594
4595 case 871: // $@130: %empty
4596#line 2960 "dhcp4_parser.yy"
4597 {
4598 ctx.unique("dhcp-ddns", ctx.loc2pos(yystack_[0].location));
4599 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
4600 ctx.stack_.back()->set("dhcp-ddns", m);
4601 ctx.stack_.push_back(m);
4602 ctx.enter(ctx.DHCP_DDNS);
4603}
4604#line 4605 "dhcp4_parser.cc"
4605 break;
4606
4607 case 872: // dhcp_ddns: "dhcp-ddns" $@130 ":" "{" dhcp_ddns_params "}"
4608#line 2966 "dhcp4_parser.yy"
4609 {
4610 // The enable updates DHCP DDNS parameter is required.
4611 ctx.require("enable-updates", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
4612 ctx.stack_.pop_back();
4613 ctx.leave();
4614}
4615#line 4616 "dhcp4_parser.cc"
4616 break;
4617
4618 case 873: // $@131: %empty
4619#line 2973 "dhcp4_parser.yy"
4620 {
4621 // Parse the dhcp-ddns map
4622 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
4623 ctx.stack_.push_back(m);
4624}
4625#line 4626 "dhcp4_parser.cc"
4626 break;
4627
4628 case 874: // sub_dhcp_ddns: "{" $@131 dhcp_ddns_params "}"
4629#line 2977 "dhcp4_parser.yy"
4630 {
4631 // The enable updates DHCP DDNS parameter is required.
4632 ctx.require("enable-updates", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
4633 // parsing completed
4634}
4635#line 4636 "dhcp4_parser.cc"
4636 break;
4637
4638 case 877: // dhcp_ddns_params: dhcp_ddns_params ","
4639#line 2985 "dhcp4_parser.yy"
4640 {
4641 ctx.warnAboutExtraCommas(yystack_[0].location);
4642 }
4643#line 4644 "dhcp4_parser.cc"
4644 break;
4645
4646 case 889: // enable_updates: "enable-updates" ":" "boolean"
4647#line 3003 "dhcp4_parser.yy"
4648 {
4649 ctx.unique("enable-updates", ctx.loc2pos(yystack_[2].location));
4650 ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
4651 ctx.stack_.back()->set("enable-updates", b);
4652}
4653#line 4654 "dhcp4_parser.cc"
4654 break;
4655
4656 case 890: // $@132: %empty
4657#line 3009 "dhcp4_parser.yy"
4658 {
4659 ctx.unique("server-ip", ctx.loc2pos(yystack_[0].location));
4660 ctx.enter(ctx.NO_KEYWORD);
4661}
4662#line 4663 "dhcp4_parser.cc"
4663 break;
4664
4665 case 891: // server_ip: "server-ip" $@132 ":" "constant string"
4666#line 3012 "dhcp4_parser.yy"
4667 {
4668 ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
4669 ctx.stack_.back()->set("server-ip", s);
4670 ctx.leave();
4671}
4672#line 4673 "dhcp4_parser.cc"
4673 break;
4674
4675 case 892: // server_port: "server-port" ":" "integer"
4676#line 3018 "dhcp4_parser.yy"
4677 {
4678 ctx.unique("server-port", ctx.loc2pos(yystack_[2].location));
4679 ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
4680 ctx.stack_.back()->set("server-port", i);
4681}
4682#line 4683 "dhcp4_parser.cc"
4683 break;
4684
4685 case 893: // $@133: %empty
4686#line 3024 "dhcp4_parser.yy"
4687 {
4688 ctx.unique("sender-ip", ctx.loc2pos(yystack_[0].location));
4689 ctx.enter(ctx.NO_KEYWORD);
4690}
4691#line 4692 "dhcp4_parser.cc"
4692 break;
4693
4694 case 894: // sender_ip: "sender-ip" $@133 ":" "constant string"
4695#line 3027 "dhcp4_parser.yy"
4696 {
4697 ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
4698 ctx.stack_.back()->set("sender-ip", s);
4699 ctx.leave();
4700}
4701#line 4702 "dhcp4_parser.cc"
4702 break;
4703
4704 case 895: // sender_port: "sender-port" ":" "integer"
4705#line 3033 "dhcp4_parser.yy"
4706 {
4707 ctx.unique("sender-port", ctx.loc2pos(yystack_[2].location));
4708 ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
4709 ctx.stack_.back()->set("sender-port", i);
4710}
4711#line 4712 "dhcp4_parser.cc"
4712 break;
4713
4714 case 896: // max_queue_size: "max-queue-size" ":" "integer"
4715#line 3039 "dhcp4_parser.yy"
4716 {
4717 ctx.unique("max-queue-size", ctx.loc2pos(yystack_[2].location));
4718 ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
4719 ctx.stack_.back()->set("max-queue-size", i);
4720}
4721#line 4722 "dhcp4_parser.cc"
4722 break;
4723
4724 case 897: // $@134: %empty
4725#line 3045 "dhcp4_parser.yy"
4726 {
4727 ctx.unique("ncr-protocol", ctx.loc2pos(yystack_[0].location));
4728 ctx.enter(ctx.NCR_PROTOCOL);
4729}
4730#line 4731 "dhcp4_parser.cc"
4731 break;
4732
4733 case 898: // ncr_protocol: "ncr-protocol" $@134 ":" ncr_protocol_value
4734#line 3048 "dhcp4_parser.yy"
4735 {
4736 ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as < ElementPtr > ());
4737 ctx.leave();
4738}
4739#line 4740 "dhcp4_parser.cc"
4740 break;
4741
4742 case 899: // ncr_protocol_value: "udp"
4743#line 3054 "dhcp4_parser.yy"
4744 { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); }
4745#line 4746 "dhcp4_parser.cc"
4746 break;
4747
4748 case 900: // ncr_protocol_value: "tcp"
4749#line 3055 "dhcp4_parser.yy"
4750 { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); }
4751#line 4752 "dhcp4_parser.cc"
4752 break;
4753
4754 case 901: // $@135: %empty
4755#line 3058 "dhcp4_parser.yy"
4756 {
4757 ctx.unique("ncr-format", ctx.loc2pos(yystack_[0].location));
4758 ctx.enter(ctx.NCR_FORMAT);
4759}
4760#line 4761 "dhcp4_parser.cc"
4761 break;
4762
4763 case 902: // ncr_format: "ncr-format" $@135 ":" "JSON"
4764#line 3061 "dhcp4_parser.yy"
4765 {
4766 ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location)));
4767 ctx.stack_.back()->set("ncr-format", json);
4768 ctx.leave();
4769}
4770#line 4771 "dhcp4_parser.cc"
4771 break;
4772
4773 case 903: // $@136: %empty
4774#line 3069 "dhcp4_parser.yy"
4775 {
4776 ctx.unique("config-control", ctx.loc2pos(yystack_[0].location));
4777 ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
4778 ctx.stack_.back()->set("config-control", i);
4779 ctx.stack_.push_back(i);
4780 ctx.enter(ctx.CONFIG_CONTROL);
4781}
4782#line 4783 "dhcp4_parser.cc"
4783 break;
4784
4785 case 904: // config_control: "config-control" $@136 ":" "{" config_control_params "}"
4786#line 3075 "dhcp4_parser.yy"
4787 {
4788 // No config control params are required
4789 ctx.stack_.pop_back();
4790 ctx.leave();
4791}
4792#line 4793 "dhcp4_parser.cc"
4793 break;
4794
4795 case 905: // $@137: %empty
4796#line 3081 "dhcp4_parser.yy"
4797 {
4798 // Parse the config-control map
4799 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
4800 ctx.stack_.push_back(m);
4801}
4802#line 4803 "dhcp4_parser.cc"
4803 break;
4804
4805 case 906: // sub_config_control: "{" $@137 config_control_params "}"
4806#line 3085 "dhcp4_parser.yy"
4807 {
4808 // No config_control params are required
4809 // parsing completed
4810}
4811#line 4812 "dhcp4_parser.cc"
4812 break;
4813
4814 case 909: // config_control_params: config_control_params ","
4815#line 3093 "dhcp4_parser.yy"
4816 {
4817 ctx.warnAboutExtraCommas(yystack_[0].location);
4818 }
4819#line 4820 "dhcp4_parser.cc"
4820 break;
4821
4822 case 912: // $@138: %empty
4823#line 3103 "dhcp4_parser.yy"
4824 {
4825 ctx.unique("config-databases", ctx.loc2pos(yystack_[0].location));
4826 ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
4827 ctx.stack_.back()->set("config-databases", l);
4828 ctx.stack_.push_back(l);
4829 ctx.enter(ctx.CONFIG_DATABASE);
4830}
4831#line 4832 "dhcp4_parser.cc"
4832 break;
4833
4834 case 913: // config_databases: "config-databases" $@138 ":" "[" database_list "]"
4835#line 3109 "dhcp4_parser.yy"
4836 {
4837 ctx.stack_.pop_back();
4838 ctx.leave();
4839}
4840#line 4841 "dhcp4_parser.cc"
4841 break;
4842
4843 case 914: // config_fetch_wait_time: "config-fetch-wait-time" ":" "integer"
4844#line 3114 "dhcp4_parser.yy"
4845 {
4846 ctx.unique("config-fetch-wait-time", ctx.loc2pos(yystack_[2].location));
4847 ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
4848 ctx.stack_.back()->set("config-fetch-wait-time", value);
4849}
4850#line 4851 "dhcp4_parser.cc"
4851 break;
4852
4853 case 915: // $@139: %empty
4854#line 3122 "dhcp4_parser.yy"
4855 {
4856 ctx.unique("loggers", ctx.loc2pos(yystack_[0].location));
4857 ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
4858 ctx.stack_.back()->set("loggers", l);
4859 ctx.stack_.push_back(l);
4860 ctx.enter(ctx.LOGGERS);
4861}
4862#line 4863 "dhcp4_parser.cc"
4863 break;
4864
4865 case 916: // loggers: "loggers" $@139 ":" "[" loggers_entries "]"
4866#line 3128 "dhcp4_parser.yy"
4867 {
4868 ctx.stack_.pop_back();
4869 ctx.leave();
4870}
4871#line 4872 "dhcp4_parser.cc"
4872 break;
4873
4874 case 919: // loggers_entries: loggers_entries ","
4875#line 3137 "dhcp4_parser.yy"
4876 {
4877 ctx.warnAboutExtraCommas(yystack_[0].location);
4878 }
4879#line 4880 "dhcp4_parser.cc"
4880 break;
4881
4882 case 920: // $@140: %empty
4883#line 3143 "dhcp4_parser.yy"
4884 {
4885 ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location)));
4886 ctx.stack_.back()->add(l);
4887 ctx.stack_.push_back(l);
4888}
4889#line 4890 "dhcp4_parser.cc"
4890 break;
4891
4892 case 921: // logger_entry: "{" $@140 logger_params "}"
4893#line 3147 "dhcp4_parser.yy"
4894 {
4895 ctx.stack_.pop_back();
4896}
4897#line 4898 "dhcp4_parser.cc"
4898 break;
4899
4900 case 924: // logger_params: logger_params ","
4901#line 3153 "dhcp4_parser.yy"
4902 {
4903 ctx.warnAboutExtraCommas(yystack_[0].location);
4904 }
4905#line 4906 "dhcp4_parser.cc"
4906 break;
4907
4908 case 932: // debuglevel: "debuglevel" ":" "integer"
4909#line 3167 "dhcp4_parser.yy"
4910 {
4911 ctx.unique("debuglevel", ctx.loc2pos(yystack_[2].location));
4912 ElementPtr dl(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
4913 ctx.stack_.back()->set("debuglevel", dl);
4914}
4915#line 4916 "dhcp4_parser.cc"
4916 break;
4917
4918 case 933: // $@141: %empty
4919#line 3173 "dhcp4_parser.yy"
4920 {
4921 ctx.unique("severity", ctx.loc2pos(yystack_[0].location));
4922 ctx.enter(ctx.NO_KEYWORD);
4923}
4924#line 4925 "dhcp4_parser.cc"
4925 break;
4926
4927 case 934: // severity: "severity" $@141 ":" "constant string"
4928#line 3176 "dhcp4_parser.yy"
4929 {
4930 ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
4931 ctx.stack_.back()->set("severity", sev);
4932 ctx.leave();
4933}
4934#line 4935 "dhcp4_parser.cc"
4935 break;
4936
4937 case 935: // $@142: %empty
4938#line 3182 "dhcp4_parser.yy"
4939 {
4940 ctx.unique("output-options", ctx.loc2pos(yystack_[0].location));
4941 ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
4942 ctx.stack_.back()->set("output-options", l);
4943 ctx.stack_.push_back(l);
4944 ctx.enter(ctx.OUTPUT_OPTIONS);
4945}
4946#line 4947 "dhcp4_parser.cc"
4947 break;
4948
4949 case 936: // output_options_list: "output-options" $@142 ":" "[" output_options_list_content "]"
4950#line 3188 "dhcp4_parser.yy"
4951 {
4952 ctx.stack_.pop_back();
4953 ctx.leave();
4954}
4955#line 4956 "dhcp4_parser.cc"
4956 break;
4957
4958 case 939: // output_options_list_content: output_options_list_content ","
4959#line 3195 "dhcp4_parser.yy"
4960 {
4961 ctx.warnAboutExtraCommas(yystack_[0].location);
4962 }
4963#line 4964 "dhcp4_parser.cc"
4964 break;
4965
4966 case 940: // $@143: %empty
4967#line 3200 "dhcp4_parser.yy"
4968 {
4969 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
4970 ctx.stack_.back()->add(m);
4971 ctx.stack_.push_back(m);
4972}
4973#line 4974 "dhcp4_parser.cc"
4974 break;
4975
4976 case 941: // output_entry: "{" $@143 output_params_list "}"
4977#line 3204 "dhcp4_parser.yy"
4978 {
4979 ctx.stack_.pop_back();
4980}
4981#line 4982 "dhcp4_parser.cc"
4982 break;
4983
4984 case 944: // output_params_list: output_params_list ","
4985#line 3210 "dhcp4_parser.yy"
4986 {
4987 ctx.warnAboutExtraCommas(yystack_[0].location);
4988 }
4989#line 4990 "dhcp4_parser.cc"
4990 break;
4991
4992 case 950: // $@144: %empty
4993#line 3222 "dhcp4_parser.yy"
4994 {
4995 ctx.unique("output", ctx.loc2pos(yystack_[0].location));
4996 ctx.enter(ctx.NO_KEYWORD);
4997}
4998#line 4999 "dhcp4_parser.cc"
4999 break;
5000
5001 case 951: // output: "output" $@144 ":" "constant string"
5002#line 3225 "dhcp4_parser.yy"
5003 {
5004 ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
5005 ctx.stack_.back()->set("output", sev);
5006 ctx.leave();
5007}
5008#line 5009 "dhcp4_parser.cc"
5009 break;
5010
5011 case 952: // flush: "flush" ":" "boolean"
5012#line 3231 "dhcp4_parser.yy"
5013 {
5014 ctx.unique("flush", ctx.loc2pos(yystack_[2].location));
5015 ElementPtr flush(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
5016 ctx.stack_.back()->set("flush", flush);
5017}
5018#line 5019 "dhcp4_parser.cc"
5019 break;
5020
5021 case 953: // maxsize: "maxsize" ":" "integer"
5022#line 3237 "dhcp4_parser.yy"
5023 {
5024 ctx.unique("maxsize", ctx.loc2pos(yystack_[2].location));
5025 ElementPtr maxsize(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
5026 ctx.stack_.back()->set("maxsize", maxsize);
5027}
5028#line 5029 "dhcp4_parser.cc"
5029 break;
5030
5031 case 954: // maxver: "maxver" ":" "integer"
5032#line 3243 "dhcp4_parser.yy"
5033 {
5034 ctx.unique("maxver", ctx.loc2pos(yystack_[2].location));
5035 ElementPtr maxver(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location)));
5036 ctx.stack_.back()->set("maxver", maxver);
5037}
5038#line 5039 "dhcp4_parser.cc"
5039 break;
5040
5041 case 955: // $@145: %empty
5042#line 3249 "dhcp4_parser.yy"
5043 {
5044 ctx.unique("pattern", ctx.loc2pos(yystack_[0].location));
5045 ctx.enter(ctx.NO_KEYWORD);
5046}
5047#line 5048 "dhcp4_parser.cc"
5048 break;
5049
5050 case 956: // pattern: "pattern" $@145 ":" "constant string"
5051#line 3252 "dhcp4_parser.yy"
5052 {
5053 ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)));
5054 ctx.stack_.back()->set("pattern", sev);
5055 ctx.leave();
5056}
5057#line 5058 "dhcp4_parser.cc"
5058 break;
5059
5060 case 957: // $@146: %empty
5061#line 3258 "dhcp4_parser.yy"
5062 {
5063 ctx.unique("compatibility", ctx.loc2pos(yystack_[0].location));
5064 ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
5065 ctx.stack_.back()->set("compatibility", i);
5066 ctx.stack_.push_back(i);
5067 ctx.enter(ctx.COMPATIBILITY);
5068}
5069#line 5070 "dhcp4_parser.cc"
5070 break;
5071
5072 case 958: // compatibility: "compatibility" $@146 ":" "{" compatibility_params "}"
5073#line 3264 "dhcp4_parser.yy"
5074 {
5075 ctx.stack_.pop_back();
5076 ctx.leave();
5077}
5078#line 5079 "dhcp4_parser.cc"
5079 break;
5080
5081 case 961: // compatibility_params: compatibility_params ","
5082#line 3271 "dhcp4_parser.yy"
5083 {
5084 ctx.warnAboutExtraCommas(yystack_[0].location);
5085 }
5086#line 5087 "dhcp4_parser.cc"
5087 break;
5088
5089 case 967: // lenient_option_parsing: "lenient-option-parsing" ":" "boolean"
5090#line 3283 "dhcp4_parser.yy"
5091 {
5092 ctx.unique("lenient-option-parsing", ctx.loc2pos(yystack_[2].location));
5093 ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
5094 ctx.stack_.back()->set("lenient-option-parsing", b);
5095}
5096#line 5097 "dhcp4_parser.cc"
5097 break;
5098
5099 case 968: // ignore_dhcp_server_identifier: "ignore-dhcp-server-identifier" ":" "boolean"
5100#line 3289 "dhcp4_parser.yy"
5101 {
5102 ctx.unique("ignore-dhcp-server-identifier", ctx.loc2pos(yystack_[2].location));
5103 ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
5104 ctx.stack_.back()->set("ignore-dhcp-server-identifier", b);
5105}
5106#line 5107 "dhcp4_parser.cc"
5107 break;
5108
5109 case 969: // ignore_rai_link_selection: "ignore-rai-link-selection" ":" "boolean"
5110#line 3295 "dhcp4_parser.yy"
5111 {
5112 ctx.unique("ignore-rai-link-selection", ctx.loc2pos(yystack_[2].location));
5113 ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
5114 ctx.stack_.back()->set("ignore-rai-link-selection", b);
5115}
5116#line 5117 "dhcp4_parser.cc"
5117 break;
5118
5119 case 970: // exclude_first_last_24: "exclude-first-last-24" ":" "boolean"
5120#line 3301 "dhcp4_parser.yy"
5121 {
5122 ctx.unique("exclude-first-last-24", ctx.loc2pos(yystack_[2].location));
5123 ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location)));
5124 ctx.stack_.back()->set("exclude-first-last-24", b);
5125}
5126#line 5127 "dhcp4_parser.cc"
5127 break;
5128
5129
5130#line 5131 "dhcp4_parser.cc"
5131
5132 default:
5133 break;
5134 }
5135 }
5136#if YY_EXCEPTIONS1
5137 catch (const syntax_error& yyexc)
5138 {
5139 YYCDEBUGif (yydebug_) (*yycdebug_) << "Caught exception: " << yyexc.what() << '\n';
5140 error (yyexc);
5141 YYERRORgoto yyerrorlab;
5142 }
5143#endif // YY_EXCEPTIONS
5144 YY_SYMBOL_PRINT ("-> $$ =", yylhs)do { if (yydebug_) { *yycdebug_ << "-> $$ =" <<
' '; yy_print_ (*yycdebug_, yylhs); *yycdebug_ << '\n'
; } } while (false)
;
5145 yypop_ (yylen);
5146 yylen = 0;
5147
5148 // Shift the result of the reduction.
5149 yypush_ (YY_NULLPTRnullptr, YY_MOVEstd::move (yylhs));
5150 }
5151 goto yynewstate;
5152
5153
5154 /*--------------------------------------.
5155 | yyerrlab -- here on detecting error. |
5156 `--------------------------------------*/
5157 yyerrlab:
5158 // If not already recovering from an error, report this error.
5159 if (!yyerrstatus_)
5160 {
5161 ++yynerrs_;
5162 context yyctx (*this, yyla);
5163 std::string msg = yysyntax_error_ (yyctx);
5164 error (yyla.location, YY_MOVEstd::move (msg));
5165 }
5166
5167
5168 yyerror_range[1].location = yyla.location;
5169 if (yyerrstatus_ == 3)
5170 {
5171 /* If just tried and failed to reuse lookahead token after an
5172 error, discard it. */
5173
5174 // Return failure if at end of input.
5175 if (yyla.kind () == symbol_kind::S_YYEOF)
5176 YYABORTgoto yyabortlab;
5177 else if (!yyla.empty ())
5178 {
5179 yy_destroy_ ("Error: discarding", yyla);
5180 yyla.clear ();
5181 }
5182 }
5183
5184 // Else will try to reuse lookahead token after shifting the error token.
5185 goto yyerrlab1;
5186
5187
5188 /*---------------------------------------------------.
5189 | yyerrorlab -- error raised explicitly by YYERROR. |
5190 `---------------------------------------------------*/
5191 yyerrorlab:
5192 /* Pacify compilers when the user code never invokes YYERROR and
5193 the label yyerrorlab therefore never appears in user code. */
5194 if (false)
5195 YYERRORgoto yyerrorlab;
5196
5197 /* Do not reclaim the symbols of the rule whose action triggered
5198 this YYERROR. */
5199 yypop_ (yylen);
5200 yylen = 0;
5201 YY_STACK_PRINT ()do { if (yydebug_) yy_stack_print_ (); } while (false);
5202 goto yyerrlab1;
5203
5204
5205 /*-------------------------------------------------------------.
5206 | yyerrlab1 -- common code for both syntax error and YYERROR. |
5207 `-------------------------------------------------------------*/
5208 yyerrlab1:
5209 yyerrstatus_ = 3; // Each real token shifted decrements this.
5210 // Pop stack until we find a state that shifts the error token.
5211 for (;;)
5212 {
5213 yyn = yypact_[+yystack_[0].state];
5214 if (!yy_pact_value_is_default_ (yyn))
5215 {
5216 yyn += symbol_kind::S_YYerror;
5217 if (0 <= yyn && yyn <= yylast_
5218 && yycheck_[yyn] == symbol_kind::S_YYerror)
5219 {
5220 yyn = yytable_[yyn];
5221 if (0 < yyn)
5222 break;
5223 }
5224 }
5225
5226 // Pop the current state because it cannot handle the error token.
5227 if (yystack_.size () == 1)
5228 YYABORTgoto yyabortlab;
5229
5230 yyerror_range[1].location = yystack_[0].location;
5231 yy_destroy_ ("Error: popping", yystack_[0]);
5232 yypop_ ();
5233 YY_STACK_PRINT ()do { if (yydebug_) yy_stack_print_ (); } while (false);
5234 }
5235 {
5236 stack_symbol_type error_token;
5237
5238 yyerror_range[2].location = yyla.location;
5239 YYLLOC_DEFAULT (error_token.location, yyerror_range, 2)do if (2) { (error_token.location).begin = ((yyerror_range)[1
].location).begin; (error_token.location).end = ((yyerror_range
)[2].location).end; } else { (error_token.location).begin = (
error_token.location).end = ((yyerror_range)[0].location).end
; } while (false)
;
5240
5241 // Shift the error token.
5242 error_token.state = state_type (yyn);
5243 yypush_ ("Shifting", YY_MOVEstd::move (error_token));
5244 }
5245 goto yynewstate;
5246
5247
5248 /*-------------------------------------.
5249 | yyacceptlab -- YYACCEPT comes here. |
5250 `-------------------------------------*/
5251 yyacceptlab:
5252 yyresult = 0;
5253 goto yyreturn;
5254
5255
5256 /*-----------------------------------.
5257 | yyabortlab -- YYABORT comes here. |
5258 `-----------------------------------*/
5259 yyabortlab:
5260 yyresult = 1;
5261 goto yyreturn;
5262
5263
5264 /*-----------------------------------------------------.
5265 | yyreturn -- parsing is finished, return the result. |
5266 `-----------------------------------------------------*/
5267 yyreturn:
5268 if (!yyla.empty ())
5269 yy_destroy_ ("Cleanup: discarding lookahead", yyla);
5270
5271 /* Do not reclaim the symbols of the rule whose action triggered
5272 this YYABORT or YYACCEPT. */
5273 yypop_ (yylen);
5274 YY_STACK_PRINT ()do { if (yydebug_) yy_stack_print_ (); } while (false);
5275 while (1 < yystack_.size ())
5276 {
5277 yy_destroy_ ("Cleanup: popping", yystack_[0]);
5278 yypop_ ();
5279 }
5280
5281 return yyresult;
5282 }
5283#if YY_EXCEPTIONS1
5284 catch (...)
5285 {
5286 YYCDEBUGif (yydebug_) (*yycdebug_) << "Exception caught: cleaning lookahead and stack\n";
5287 // Do not try to display the values of the reclaimed symbols,
5288 // as their printers might throw an exception.
5289 if (!yyla.empty ())
5290 yy_destroy_ (YY_NULLPTRnullptr, yyla);
5291
5292 while (1 < yystack_.size ())
5293 {
5294 yy_destroy_ (YY_NULLPTRnullptr, yystack_[0]);
5295 yypop_ ();
5296 }
5297 throw;
5298 }
5299#endif // YY_EXCEPTIONS
5300 }
5301
5302 void
5303 Dhcp4Parser::error (const syntax_error& yyexc)
5304 {
5305 error (yyexc.location, yyexc.what ());
5306 }
5307
5308 /* Return YYSTR after stripping away unnecessary quotes and
5309 backslashes, so that it's suitable for yyerror. The heuristic is
5310 that double-quoting is unnecessary unless the string contains an
5311 apostrophe, a comma, or backslash (other than backslash-backslash).
5312 YYSTR is taken from yytname. */
5313 std::string
5314 Dhcp4Parser::yytnamerr_ (const char *yystr)
5315 {
5316 if (*yystr == '"')
5317 {
5318 std::string yyr;
5319 char const *yyp = yystr;
5320
5321 for (;;)
5322 switch (*++yyp)
5323 {
5324 case '\'':
5325 case ',':
5326 goto do_not_strip_quotes;
5327
5328 case '\\':
5329 if (*++yyp != '\\')
5330 goto do_not_strip_quotes;
5331 else
5332 goto append;
5333
5334 append:
5335 default:
5336 yyr += *yyp;
5337 break;
5338
5339 case '"':
5340 return yyr;
5341 }
5342 do_not_strip_quotes: ;
5343 }
5344
5345 return yystr;
5346 }
5347
5348 std::string
5349 Dhcp4Parser::symbol_name (symbol_kind_type yysymbol)
5350 {
5351 return yytnamerr_ (yytname_[yysymbol]);
5352 }
5353
5354
5355
5356 // Dhcp4Parser::context.
5357 Dhcp4Parser::context::context (const Dhcp4Parser& yyparser, const symbol_type& yyla)
5358 : yyparser_ (yyparser)
5359 , yyla_ (yyla)
5360 {}
5361
5362 int
5363 Dhcp4Parser::context::expected_tokens (symbol_kind_type yyarg[], int yyargn) const
5364 {
5365 // Actual number of expected tokens
5366 int yycount = 0;
5367
5368 const int yyn = yypact_[+yyparser_.yystack_[0].state];
5369 if (!yy_pact_value_is_default_ (yyn))
5370 {
5371 /* Start YYX at -YYN if negative to avoid negative indexes in
5372 YYCHECK. In other words, skip the first -YYN actions for
5373 this state because they are default actions. */
5374 const int yyxbegin = yyn < 0 ? -yyn : 0;
5375 // Stay within bounds of both yycheck and yytname.
5376 const int yychecklim = yylast_ - yyn + 1;
5377 const int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
5378 for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
5379 if (yycheck_[yyx + yyn] == yyx && yyx != symbol_kind::S_YYerror
5380 && !yy_table_value_is_error_ (yytable_[yyx + yyn]))
5381 {
5382 if (!yyarg)
5383 ++yycount;
5384 else if (yycount == yyargn)
5385 return 0;
5386 else
5387 yyarg[yycount++] = YY_CAST (symbol_kind_type, yyx)static_cast<symbol_kind_type> (yyx);
5388 }
5389 }
5390
5391 if (yyarg && yycount == 0 && 0 < yyargn)
5392 yyarg[0] = symbol_kind::S_YYEMPTY;
5393 return yycount;
5394 }
5395
5396
5397
5398
5399
5400
5401 int
5402 Dhcp4Parser::yy_syntax_error_arguments_ (const context& yyctx,
5403 symbol_kind_type yyarg[], int yyargn) const
5404 {
5405 /* There are many possibilities here to consider:
5406 - If this state is a consistent state with a default action, then
5407 the only way this function was invoked is if the default action
5408 is an error action. In that case, don't check for expected
5409 tokens because there are none.
5410 - The only way there can be no lookahead present (in yyla) is
5411 if this state is a consistent state with a default action.
5412 Thus, detecting the absence of a lookahead is sufficient to
5413 determine that there is no unexpected or expected token to
5414 report. In that case, just report a simple "syntax error".
5415 - Don't assume there isn't a lookahead just because this state is
5416 a consistent state with a default action. There might have
5417 been a previous inconsistent state, consistent state with a
5418 non-default action, or user semantic action that manipulated
5419 yyla. (However, yyla is currently not documented for users.)
5420 - Of course, the expected token list depends on states to have
5421 correct lookahead information, and it depends on the parser not
5422 to perform extra reductions after fetching a lookahead from the
5423 scanner and before detecting a syntax error. Thus, state merging
5424 (from LALR or IELR) and default reductions corrupt the expected
5425 token list. However, the list is correct for canonical LR with
5426 one exception: it will still contain any token that will not be
5427 accepted due to an error action in a later state.
5428 */
5429
5430 if (!yyctx.lookahead ().empty ())
5431 {
5432 if (yyarg)
5433 yyarg[0] = yyctx.token ();
5434 int yyn = yyctx.expected_tokens (yyarg ? yyarg + 1 : yyarg, yyargn - 1);
5435 return yyn + 1;
5436 }
5437 return 0;
5438 }
5439
5440 // Generate an error message.
5441 std::string
5442 Dhcp4Parser::yysyntax_error_ (const context& yyctx) const
5443 {
5444 // Its maximum.
5445 enum { YYARGS_MAX = 5 };
5446 // Arguments of yyformat.
5447 symbol_kind_type yyarg[YYARGS_MAX];
5448 int yycount = yy_syntax_error_arguments_ (yyctx, yyarg, YYARGS_MAX);
5449
5450 char const* yyformat = YY_NULLPTRnullptr;
5451 switch (yycount)
5452 {
5453#define YYCASE_(N, S) \
5454 case N: \
5455 yyformat = S; \
5456 break
5457 default: // Avoid compiler warnings.
5458 YYCASE_ (0, YY_("syntax error")"syntax error");
5459 YYCASE_ (1, YY_("syntax error, unexpected %s")"syntax error, unexpected %s");
5460 YYCASE_ (2, YY_("syntax error, unexpected %s, expecting %s")"syntax error, unexpected %s, expecting %s");
5461 YYCASE_ (3, YY_("syntax error, unexpected %s, expecting %s or %s")"syntax error, unexpected %s, expecting %s or %s");
5462 YYCASE_ (4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")"syntax error, unexpected %s, expecting %s or %s or %s");
5463 YYCASE_ (5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")"syntax error, unexpected %s, expecting %s or %s or %s or %s");
5464#undef YYCASE_
5465 }
5466
5467 std::string yyres;
5468 // Argument number.
5469 std::ptrdiff_t yyi = 0;
5470 for (char const* yyp = yyformat; *yyp; ++yyp)
5471 if (yyp[0] == '%' && yyp[1] == 's' && yyi < yycount)
5472 {
5473 yyres += symbol_name (yyarg[yyi++]);
5474 ++yyp;
5475 }
5476 else
5477 yyres += *yyp;
5478 return yyres;
5479 }
5480
5481
5482 const short Dhcp4Parser::yypact_ninf_ = -1410;
5483
5484 const signed char Dhcp4Parser::yytable_ninf_ = -1;
5485
5486 const short
5487 Dhcp4Parser::yypact_[] =
5488 {
5489 225, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5490 -1410, -1410, -1410, -1410, 26, 42, 62, 67, 72, 81,
5491 86, 99, 104, 181, 202, 212, 222, 244, -1410, -1410,
5492 -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5493 -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5494 -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5495 -1410, -1410, -1410, -1410, 42, -189, 43, 258, 76, 694,
5496 1457, 89, -17, 133, 296, -68, 243, 91, -1410, 65,
5497 117, 92, 120, 196, -1410, 51, -1410, -1410, -1410, -1410,
5498 239, 262, 264, -1410, -1410, -1410, 282, 295, -1410, -1410,
5499 -1410, 362, 377, 409, 438, 439, 455, 463, 465, 468,
5500 469, 472, 480, -1410, 481, 482, 484, 485, 486, -1410,
5501 -1410, -1410, -1410, 489, 491, 492, 493, 495, 496, 499,
5502 -1410, -1410, -1410, 500, -1410, -1410, -1410, -1410, -1410, 501,
5503 503, 504, -1410, -1410, -1410, -1410, -1410, 506, -1410, -1410,
5504 -1410, -1410, -1410, -1410, 507, 510, 511, -1410, -1410, 514,
5505 -1410, 74, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5506 -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5507 -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5508 -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5509 -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5510 -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5511 -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5512 -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, 516, 517,
5513 518, 520, -1410, 82, -1410, -1410, -1410, -1410, -1410, -1410,
5514 -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5515 523, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5516 -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5517 -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5518 -1410, -1410, -1410, -1410, -1410, -1410, -1410, 94, -1410, -1410,
5519 -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5520 -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5521 529, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5522 -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5523 131, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5524 -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, 245, 259,
5525 -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5526 -1410, -1410, 256, -1410, -1410, 530, -1410, -1410, -1410, 535,
5527 -1410, -1410, 266, 357, -1410, -1410, -1410, -1410, -1410, -1410,
5528 -1410, -1410, -1410, -1410, -1410, -1410, -1410, 538, 540, 542,
5529 -1410, -1410, -1410, -1410, -1410, 432, 544, -1410, -1410, -1410,
5530 -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5531 -1410, 141, -1410, -1410, -1410, 545, -1410, 546, -1410, 547,
5532 549, -1410, -1410, -1410, -1410, -1410, 142, -1410, -1410, -1410,
5533 -1410, -1410, -1410, -1410, -1410, -1410, -1410, 550, 143, -1410,
5534 -1410, -1410, -1410, 42, 42, -1410, 321, 553, -1410, -1410,
5535 555, 558, 564, 332, 333, 334, 570, 571, 573, 343,
5536 344, 578, 579, 580, 350, 351, 353, 354, 359, 360,
5537 367, 369, 371, 373, 375, 374, 586, 378, 381, 386,
5538 391, 393, 587, 608, 614, 629, 397, 398, 402, 405,
5539 410, 414, 413, 647, 649, 652, 423, 655, 656, 657,
5540 659, 660, 429, 431, 433, 665, 667, 669, 670, 671,
5541 445, 677, 680, 681, 682, 683, 684, 452, 453, 454,
5542 688, 689, -1410, 258, -1410, 690, 691, 692, 460, 461,
5543 464, 466, 76, -1410, 696, 698, 699, 701, 702, 703,
5544 473, 705, 706, 707, 694, -1410, 708, 478, 1457, -1410,
5545 711, 712, 714, 715, 716, 718, 719, 726, -1410, 89,
5546 -1410, 727, 728, 498, 733, 734, 737, 508, -1410, 133,
5547 740, 509, 512, 513, 743, -1410, 296, 744, 747, -91,
5548 -1410, 515, 749, 519, 751, 521, 522, 754, 755, 243,
5549 -1410, 756, 526, 91, -1410, -1410, -1410, 758, 769, 786,
5550 790, 794, -1410, -1410, -1410, 568, 569, 572, -1410, -1410,
5551 797, 798, 802, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5552 -1410, -1410, -1410, -1410, -1410, 574, -1410, -1410, -1410, -1410,
5553 -1410, -15, 575, 581, 582, -1410, -1410, -1410, -1410, -1410,
5554 -1410, -1410, 807, 808, 809, -1410, 584, 446, 822, 823,
5555 597, -1410, -1410, -1410, 827, 828, 830, 831, 832, -1410,
5556 834, 833, 836, 841, 603, 615, -1410, -1410, -1410, 845,
5557 844, -1410, 847, 382, 376, -1410, -1410, -1410, -1410, -1410,
5558 619, 622, 623, 853, 625, 626, -1410, 847, 847, 869,
5559 -1410, 643, -1410, -1410, 847, 644, 658, 661, 664, 666,
5560 668, 672, -1410, 673, 675, -1410, 676, 678, 679, -1410,
5561 -1410, 685, -1410, -1410, -1410, 847, -1410, 686, 823, -1410,
5562 -1410, 687, -1410, 693, -1410, -1410, 28, 566, -1410, 886,
5563 -1410, -1410, 42, 258, 91, 76, 389, -1410, -1410, -1410,
5564 821, 821, 887, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5565 -1410, -1410, -1410, 892, 894, 896, -1410, -1410, -1410, -1410,
5566 -1410, -1410, 897, -1410, -1410, -1410, 175, 898, 904, 907,
5567 270, 64, 908, 186, 243, -1410, -1410, 909, 159, -1410,
5568 -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5569 910, -1410, -1410, -1410, -1410, 773, -1410, -1410, -1410, -1410,
5570 -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5571 -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5572 887, -1410, 153, 160, 168, -1410, -1410, 171, -1410, -1410,
5573 -1410, -1410, -1410, -1410, -1410, 889, 914, 919, 920, 921,
5574 925, 926, 927, 928, 929, -1410, 930, 931, -1410, -1410,
5575 -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5576 188, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5577 -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5578 -1410, -1410, -1410, -1410, -1410, -1410, 192, -1410, 932, 933,
5579 -1410, -1410, 934, 936, -1410, -1410, 935, 939, -1410, -1410,
5580 937, 941, -1410, -1410, 940, 942, -1410, -1410, -1410, -1410,
5581 -1410, -1410, 106, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5582 943, 944, -1410, -1410, 945, 947, -1410, -1410, 946, 950,
5583 -1410, 951, 952, 953, 954, 955, 956, 195, -1410, -1410,
5584 -1410, -1410, -1410, -1410, -1410, 957, 958, 959, -1410, 213,
5585 -1410, -1410, -1410, -1410, -1410, -1410, -1410, 948, 961, -1410,
5586 962, -1410, 963, -1410, -1410, -1410, 217, -1410, -1410, -1410,
5587 -1410, -1410, 234, -1410, 121, -1410, 964, 965, 966, 967,
5588 -1410, 236, -1410, -1410, -1410, -1410, -1410, 731, -1410, 968,
5589 969, -1410, -1410, 971, -1410, 970, -1410, -1410, -1410, 973,
5590 976, 389, -1410, 979, 983, 986, 987, 713, 700, 738,
5591 761, 767, 777, 779, 781, 782, 785, 1022, 803, 796,
5592 1030, 1037, 1047, 1048, 1050, 1052, 821, -1410, -1410, 821,
5593 -1410, 887, 694, -1410, 892, 133, -1410, 894, 296, -1410,
5594 896, 1402, -1410, 897, 175, -1410, 178, -1410, 898, 89,
5595 -1410, 904, -68, -1410, 907, 826, 829, 840, 843, 849,
5596 850, 270, -1410, 825, 856, 858, 64, -1410, 674, -1410,
5597 908, 865, 1061, 871, 1100, 186, -1410, -1410, 260, 909,
5598 -1410, 872, 874, 879, 881, 159, -1410, -1410, 1115, 1120,
5599 1457, -1410, 910, 1122, -1410, -1410, 899, 903, -1410, 913,
5600 923, 924, 938, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5601 -1410, -1410, -1410, 151, -1410, -1410, 960, 972, 974, 415,
5602 975, 977, -1410, 249, -1410, 257, -1410, 1123, -1410, 1167,
5603 -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5604 -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5605 -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5606 -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5607 -1410, -1410, 277, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5608 -1410, -1410, -1410, -1410, -1410, 1124, -1410, -1410, -1410, -1410,
5609 -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, 1169,
5610 1177, -1410, -1410, -1410, -1410, -1410, -1410, 1173, -1410, 297,
5611 -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5612 -1410, -1410, -1410, -1410, -1410, 1178, -1410, 1180, -1410, -1410,
5613 -1410, -1410, -1410, -1410, -1410, 298, -1410, -1410, -1410, -1410,
5614 -1410, -1410, -1410, -1410, -1410, -1410, 978, -1410, 42, -1410,
5615 -1410, 1182, -1410, -1410, -1410, -1410, -1410, 355, -1410, -1410,
5616 -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, 980,
5617 356, -1410, 847, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5618 -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5619 -1410, -1410, -1410, 1402, -1410, 1183, 1185, 981, -1410, 178,
5620 -1410, -1410, 1187, 1188, 1189, 982, 1191, 984, 1192, 674,
5621 -1410, -1410, -1410, 1193, 985, 1194, 260, -1410, -1410, -1410,
5622 -1410, -1410, 988, 989, -1410, -1410, 140, 990, 991, -1410,
5623 1195, -1410, 1196, -1410, 1198, -1410, 992, -1410, -1410, -1410,
5624 -1410, -1410, -1410, -1410, -1410, -1410, 79, 1197, 1200, -1410,
5625 -1410, -1410, -1410, -1410, -1410, -1410, -1410, 379, -1410, -1410,
5626 -1410, -1410, -1410, -1410, 1199, 1207, -1410, -1410, 172, -1410,
5627 1209, 1211, 1212, 1215, 79, -1410, -53, -1410, 1197, 112,
5628 1200, -1410, 1026, 993, 994, 1224, -1410, -1410, -1410, -1410,
5629 -1410, -1410, 406, -1410, -1410, -1410, -1410, 1226, 1227, 1228,
5630 -1410, 407, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5631 -1410, -1410, -1410, 1230, 1229, -53, -1410, 1231, 997, 1003,
5632 1004, 1237, 112, -1410, -1410, 1238, 1240, -1410, 1011, -1410,
5633 1013, -1410, -1410, -1410, 1014, -1410, 39, -1410, 1230, -1410,
5634 -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, 436,
5635 -1410, -1410, -1410, 1246, 39, -1410, 1017, -1410, -1410
5636 };
5637
5638 const short
5639 Dhcp4Parser::yydefact_[] =
5640 {
5641 0, 2, 4, 6, 8, 10, 12, 14, 16, 18,
5642 20, 22, 24, 26, 0, 0, 0, 0, 0, 0,
5643 0, 0, 0, 0, 0, 0, 0, 0, 1, 44,
5644 36, 32, 31, 28, 29, 30, 35, 3, 33, 34,
5645 59, 5, 65, 7, 218, 9, 406, 11, 629, 13,
5646 673, 15, 544, 17, 553, 19, 592, 21, 368, 23,
5647 873, 25, 905, 27, 46, 39, 0, 0, 0, 0,
5648 0, 675, 0, 555, 594, 0, 0, 0, 48, 0,
5649 47, 0, 0, 40, 61, 0, 63, 903, 203, 236,
5650 0, 0, 0, 695, 697, 699, 0, 0, 234, 247,
5651 249, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5652 0, 0, 0, 155, 0, 0, 0, 0, 0, 166,
5653 173, 175, 177, 0, 0, 0, 0, 0, 0, 0,
5654 397, 542, 583, 0, 158, 181, 482, 660, 662, 0,
5655 0, 0, 330, 722, 664, 359, 380, 0, 345, 759,
5656 854, 871, 191, 193, 0, 0, 0, 915, 957, 0,
5657 142, 0, 67, 70, 71, 72, 73, 74, 107, 108,
5658 109, 110, 111, 112, 75, 103, 138, 139, 92, 93,
5659 94, 116, 117, 118, 119, 120, 121, 122, 123, 124,
5660 125, 126, 127, 128, 129, 114, 115, 130, 131, 132,
5661 134, 135, 136, 140, 141, 78, 79, 100, 80, 81,
5662 82, 133, 86, 87, 76, 104, 105, 106, 77, 84,
5663 85, 98, 99, 101, 95, 96, 97, 83, 88, 89,
5664 90, 91, 102, 113, 137, 220, 222, 226, 0, 0,
5665 0, 0, 217, 0, 205, 208, 209, 210, 211, 212,
5666 213, 214, 215, 216, 466, 468, 470, 620, 464, 472,
5667 0, 474, 476, 717, 463, 411, 412, 413, 414, 415,
5668 438, 439, 440, 441, 442, 443, 461, 428, 429, 444,
5669 445, 446, 447, 448, 449, 450, 451, 452, 453, 454,
5670 455, 456, 457, 458, 459, 460, 462, 0, 408, 418,
5671 433, 434, 435, 419, 421, 422, 424, 425, 426, 420,
5672 416, 417, 436, 437, 423, 430, 431, 432, 427, 657,
5673 0, 656, 639, 640, 641, 642, 643, 644, 645, 646,
5674 647, 648, 649, 650, 651, 652, 653, 637, 638, 636,
5675 0, 631, 634, 635, 654, 655, 715, 701, 703, 705,
5676 709, 707, 713, 711, 694, 688, 692, 693, 0, 676,
5677 677, 689, 690, 691, 685, 680, 686, 682, 683, 684,
5678 687, 681, 0, 573, 297, 0, 577, 575, 580, 0,
5679 569, 570, 0, 556, 557, 560, 572, 561, 562, 563,
5680 579, 564, 565, 566, 567, 568, 611, 0, 0, 0,
5681 618, 609, 610, 613, 614, 0, 595, 596, 599, 600,
5682 601, 602, 603, 604, 605, 608, 606, 607, 376, 378,
5683 373, 0, 370, 374, 375, 0, 890, 0, 893, 0,
5684 0, 897, 901, 888, 886, 887, 0, 875, 878, 879,
5685 880, 881, 882, 883, 884, 885, 912, 0, 0, 907,
5686 910, 911, 45, 50, 0, 37, 43, 0, 64, 60,
5687 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5688 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5689 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5690 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5691 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5692 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5693 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5694 0, 0, 58, 69, 66, 0, 0, 0, 0, 0,
5695 0, 0, 207, 219, 0, 0, 0, 0, 0, 0,
5696 0, 0, 0, 0, 410, 407, 0, 0, 633, 630,
5697 0, 0, 0, 0, 0, 0, 0, 0, 674, 679,
5698 545, 0, 0, 0, 0, 0, 0, 0, 554, 559,
5699 0, 0, 0, 0, 0, 593, 598, 0, 0, 372,
5700 369, 0, 0, 0, 0, 0, 0, 0, 0, 877,
5701 874, 0, 0, 909, 906, 49, 41, 0, 0, 0,
5702 0, 0, 160, 161, 162, 0, 0, 0, 201, 202,
5703 0, 0, 0, 143, 144, 145, 146, 147, 148, 149,
5704 150, 151, 152, 153, 154, 0, 196, 197, 163, 164,
5705 165, 0, 0, 0, 0, 179, 180, 187, 188, 189,
5706 190, 195, 0, 0, 0, 157, 0, 0, 0, 0,
5707 0, 478, 479, 480, 0, 0, 0, 0, 0, 758,
5708 0, 0, 0, 0, 0, 0, 198, 199, 200, 0,
5709 0, 68, 0, 0, 0, 230, 231, 232, 233, 206,
5710 0, 0, 0, 0, 0, 0, 481, 0, 0, 0,
5711 409, 0, 659, 632, 0, 0, 0, 0, 0, 0,
5712 0, 0, 678, 0, 0, 571, 0, 0, 0, 582,
5713 558, 0, 615, 616, 617, 0, 597, 0, 0, 371,
5714 889, 0, 892, 0, 895, 896, 0, 0, 876, 0,
5715 914, 908, 0, 0, 0, 0, 0, 696, 698, 700,
5716 0, 0, 251, 156, 168, 169, 170, 171, 172, 167,
5717 174, 176, 178, 399, 546, 585, 159, 183, 184, 185,
5718 186, 182, 484, 38, 661, 663, 0, 724, 666, 361,
5719 0, 0, 761, 0, 0, 192, 194, 0, 0, 51,
5720 221, 224, 225, 223, 228, 229, 227, 467, 469, 471,
5721 622, 465, 473, 475, 477, 0, 658, 716, 702, 704,
5722 706, 710, 708, 714, 712, 574, 298, 578, 576, 581,
5723 612, 619, 377, 379, 891, 894, 899, 900, 898, 902,
5724 251, 42, 0, 0, 0, 243, 245, 0, 238, 241,
5725 242, 286, 288, 290, 294, 0, 0, 0, 0, 0,
5726 0, 0, 0, 0, 0, 308, 0, 0, 315, 317,
5727 319, 321, 323, 324, 325, 326, 327, 328, 292, 285,
5728 0, 258, 261, 262, 263, 264, 265, 266, 267, 268,
5729 269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
5730 279, 280, 281, 282, 283, 284, 0, 256, 0, 252,
5731 253, 404, 0, 400, 401, 551, 0, 547, 548, 590,
5732 0, 586, 587, 489, 0, 485, 486, 340, 341, 342,
5733 343, 344, 0, 332, 335, 336, 337, 338, 339, 729,
5734 0, 725, 726, 671, 0, 667, 668, 366, 0, 362,
5735 363, 0, 0, 0, 0, 0, 0, 0, 382, 385,
5736 386, 387, 388, 389, 390, 0, 0, 0, 355, 0,
5737 347, 350, 351, 352, 353, 354, 766, 0, 762, 763,
5738 0, 866, 0, 869, 862, 863, 0, 856, 859, 860,
5739 861, 864, 0, 920, 0, 917, 0, 0, 0, 0,
5740 966, 0, 959, 962, 963, 964, 965, 53, 627, 0,
5741 623, 624, 720, 0, 719, 0, 62, 904, 204, 0,
5742 0, 240, 237, 0, 0, 0, 0, 0, 0, 0,
5743 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5744 0, 0, 0, 0, 0, 0, 260, 235, 248, 0,
5745 250, 255, 0, 398, 403, 555, 543, 550, 594, 584,
5746 589, 0, 483, 488, 334, 331, 731, 723, 728, 675,
5747 665, 670, 0, 360, 365, 0, 0, 0, 0, 0,
5748 0, 384, 381, 0, 0, 0, 349, 346, 0, 760,
5749 765, 0, 0, 0, 0, 858, 855, 872, 0, 919,
5750 916, 0, 0, 0, 0, 961, 958, 55, 0, 54,
5751 0, 621, 626, 0, 718, 913, 0, 0, 239, 0,
5752 0, 0, 0, 296, 299, 300, 301, 302, 303, 304,
5753 305, 306, 307, 0, 313, 314, 0, 0, 0, 0,
5754 0, 0, 259, 0, 254, 0, 402, 0, 549, 0,
5755 588, 541, 511, 512, 513, 497, 498, 516, 517, 518,
5756 519, 520, 521, 539, 500, 501, 522, 523, 524, 525,
5757 526, 527, 528, 529, 530, 531, 532, 533, 534, 535,
5758 536, 537, 538, 540, 494, 495, 496, 509, 510, 506,
5759 507, 508, 0, 491, 499, 514, 515, 502, 503, 504,
5760 505, 487, 333, 753, 755, 0, 747, 748, 749, 750,
5761 751, 752, 740, 741, 745, 746, 742, 743, 744, 0,
5762 732, 733, 736, 737, 738, 739, 727, 0, 669, 0,
5763 364, 391, 392, 393, 394, 395, 396, 383, 356, 357,
5764 358, 348, 784, 789, 791, 0, 814, 0, 795, 783,
5765 776, 777, 778, 781, 782, 0, 768, 771, 772, 773,
5766 774, 779, 780, 775, 764, 865, 0, 868, 0, 857,
5767 935, 0, 933, 931, 925, 929, 930, 0, 922, 927,
5768 928, 926, 918, 967, 968, 969, 970, 960, 52, 57,
5769 0, 625, 0, 244, 246, 287, 289, 291, 295, 310,
5770 311, 312, 309, 316, 318, 320, 322, 329, 293, 257,
5771 405, 552, 591, 493, 490, 0, 0, 0, 730, 735,
5772 672, 367, 0, 0, 0, 0, 0, 0, 0, 770,
5773 767, 867, 870, 0, 0, 0, 924, 921, 56, 628,
5774 721, 492, 0, 0, 757, 734, 0, 0, 0, 793,
5775 0, 794, 0, 769, 0, 932, 0, 923, 754, 756,
5776 786, 787, 788, 785, 790, 792, 0, 797, 0, 934,
5777 826, 829, 831, 833, 825, 824, 823, 0, 816, 819,
5778 820, 821, 822, 802, 0, 798, 799, 940, 0, 937,
5779 0, 0, 0, 0, 818, 815, 0, 796, 801, 0,
5780 939, 936, 0, 0, 0, 0, 817, 812, 811, 807,
5781 809, 810, 0, 804, 808, 800, 950, 0, 0, 0,
5782 955, 0, 942, 945, 946, 947, 948, 949, 938, 828,
5783 827, 830, 832, 835, 0, 806, 803, 0, 0, 0,
5784 0, 0, 944, 941, 840, 0, 836, 837, 0, 805,
5785 0, 952, 953, 954, 0, 943, 0, 834, 839, 813,
5786 951, 956, 852, 851, 845, 847, 848, 849, 850, 0,
5787 842, 846, 838, 0, 844, 841, 0, 843, 853
5788 };
5789
5790 const short
5791 Dhcp4Parser::yypgoto_[] =
5792 {
5793 -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5794 -1410, -1410, -1410, -1410, -1410, -59, -1410, -623, -1410, 525,
5795 -1410, -1410, -1410, -1410, -1410, -1410, -681, -1410, -1410, -1410,
5796 -67, -1410, -1410, -1410, -1410, -1410, -1410, -1410, 524, 721,
5797 -48, 25, 44, -45, -19, 6, 41, 93, 98, 100,
5798 101, -1410, -1410, -1410, -1410, 103, -1410, -1410, 108, 111,
5799 38, 46, 48, 56, -1410, -1410, 61, -1410, 63, -1410,
5800 66, -1410, 68, 113, 71, -1410, -1410, 73, 78, 83,
5801 85, 88, -1410, 90, -1410, 118, -1410, -1410, -1410, -1410,
5802 -1410, 45, -1410, -1410, -1410, 527, 722, -1410, -1410, -1410,
5803 -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5804 -1410, -1410, -1410, -1410, -1410, -1410, 246, -1410, -1410, -1410,
5805 -1410, -1410, -1410, -1410, -1410, 426, -1410, 219, -1410, -737,
5806 229, -1410, -1410, -1409, -1410, -1407, -1410, -1398, -1410, -1410,
5807 -1410, -1410, -63, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5808 -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1058, -1410,
5809 -1056, -1410, -1044, -1410, 137, -1410, -1410, -1410, -1410, -1410,
5810 -1410, 215, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5811 194, -1410, -1410, -1410, -1410, -1410, -1410, -1410, 209, -1410,
5812 -1410, -1410, 220, 697, -1410, -1410, -1410, -1410, -1410, -1410,
5813 -1410, 204, -1410, -1410, -1410, -1410, -1410, -1410, -1036, -1410,
5814 -1410, -1410, 233, -1410, -1410, -1410, 237, 729, -1410, -1410,
5815 -1410, -1410, -1410, -1410, -1410, -1410, -1033, -1410, -32, -1410,
5816 -27, -1410, 123, 125, 128, -1410, -1410, -1410, -1410, -1410,
5817 228, -1410, -1410, -16, -60, -1410, -1410, -1410, -1410, -1410,
5818 241, -1410, -1410, -1410, 247, -1410, 720, -1410, -49, -1410,
5819 -1410, -1410, -1410, -1410, -43, -1410, -1410, -1410, -1410, -1410,
5820 -29, -1410, -1410, -1410, 248, -1410, -1410, -1410, 252, -1410,
5821 709, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5822 -1410, -1410, -1410, -1410, -1410, 189, -1410, -1410, -1410, 193,
5823 736, -1410, -1410, -1410, -41, -1410, -6, -1410, -56, -1410,
5824 -1410, -1410, 240, -1410, -1410, -1410, 253, -1410, 735, -13,
5825 -1410, 7, -1410, 18, -1410, -1410, -1410, -1410, -1410, -1410,
5826 -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5827 -1410, -1032, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5828 250, -1410, -1410, -1410, -7, -1410, -1410, -1410, -1410, -1410,
5829 -1410, -1410, -1410, -1410, -1410, -1410, 226, -1410, -1410, -14,
5830 -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5831 -1410, -1410, -1410, -81, -1410, -1410, -114, -1410, -1410, -1410,
5832 -1410, -1410, -70, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5833 -1410, -1410, -1410, -1410, -130, -1410, -1410, -142, -1410, -1410,
5834 -1410, -1410, -1410, 251, -1410, -1410, -1410, -1410, -1410, -1410,
5835 -1410, -1410, -1410, -1410, 541, 725, -1410, -1410, -1410, -1410,
5836 -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410, -1410,
5837 -1410, -1410, -1410, 585, 723, -1410, -1410, -1410, -1410, -1410,
5838 -1410, 242, -1410, -1410, 4, -1410, -1410, -1410, -1410, -1410,
5839 -1410, -58, -1410, -1410, -99, -1410, -1410, -1410, -1410, -1410,
5840 -1410, -1410, -1410, -1410, -1410, 261, -1410, -1410, -1410, -1410
5841 };
5842
5843 const short
5844 Dhcp4Parser::yydefgoto_[] =
5845 {
5846 0, 14, 15, 16, 17, 18, 19, 20, 21, 22,
5847 23, 24, 25, 26, 27, 36, 37, 38, 65, 774,
5848 82, 83, 39, 64, 79, 80, 790, 997, 1098, 1099,
5849 869, 41, 66, 85, 457, 86, 43, 67, 161, 162,
5850 163, 164, 165, 166, 167, 168, 169, 170, 171, 172,
5851 173, 174, 175, 486, 176, 177, 507, 178, 179, 180,
5852 181, 182, 183, 184, 492, 759, 185, 493, 186, 494,
5853 187, 495, 188, 189, 190, 508, 771, 191, 192, 193,
5854 194, 195, 525, 196, 526, 197, 198, 199, 200, 201,
5855 202, 203, 204, 205, 461, 243, 244, 45, 68, 245,
5856 535, 246, 536, 793, 247, 537, 796, 248, 249, 250,
5857 251, 206, 471, 207, 462, 837, 838, 839, 1009, 840,
5858 1010, 208, 472, 209, 473, 898, 899, 900, 1039, 870,
5859 871, 872, 1013, 873, 1014, 874, 1015, 875, 1035, 876,
5860 1016, 877, 878, 572, 879, 880, 881, 882, 883, 884,
5861 885, 886, 887, 888, 1027, 1292, 889, 890, 891, 1030,
5862 892, 1031, 893, 1032, 894, 1033, 895, 1034, 210, 515,
5863 922, 923, 924, 925, 926, 927, 928, 211, 521, 959,
5864 960, 961, 962, 963, 212, 518, 938, 939, 940, 1062,
5865 59, 75, 421, 422, 423, 587, 424, 588, 213, 519,
5866 947, 948, 949, 950, 951, 952, 953, 954, 214, 503,
5867 902, 903, 904, 1042, 47, 69, 297, 298, 299, 548,
5868 300, 544, 301, 545, 302, 546, 303, 549, 304, 551,
5869 305, 552, 215, 216, 217, 309, 218, 509, 914, 915,
5870 916, 1051, 1182, 1183, 219, 504, 53, 72, 906, 907,
5871 908, 1045, 55, 73, 382, 383, 384, 385, 386, 387,
5872 388, 571, 389, 575, 390, 574, 391, 392, 576, 393,
5873 220, 505, 910, 911, 912, 1048, 57, 74, 405, 406,
5874 407, 408, 409, 580, 410, 411, 412, 413, 414, 415,
5875 584, 311, 547, 999, 1000, 1001, 1100, 49, 70, 340,
5876 341, 342, 556, 343, 221, 510, 222, 511, 223, 517,
5877 934, 935, 936, 1059, 51, 71, 358, 359, 360, 224,
5878 466, 225, 467, 226, 468, 364, 561, 365, 562, 366,
5879 563, 367, 565, 368, 564, 369, 567, 370, 566, 371,
5880 560, 318, 553, 1003, 1004, 1103, 227, 516, 930, 931,
5881 932, 1056, 1209, 1210, 1211, 1212, 1213, 1305, 1214, 1306,
5882 1215, 228, 229, 522, 967, 968, 969, 1078, 1245, 1246,
5883 1247, 1312, 1353, 1248, 1313, 1249, 1314, 1250, 1251, 1252,
5884 1318, 1374, 1375, 1376, 1386, 1402, 1403, 1404, 1424, 1253,
5885 1316, 1367, 1368, 1369, 1380, 1420, 1370, 1381, 1371, 1382,
5886 1372, 1383, 1435, 1436, 1437, 1446, 1459, 1460, 1461, 1463,
5887 230, 523, 976, 977, 978, 979, 1082, 980, 981, 1084,
5888 231, 524, 61, 76, 436, 437, 438, 439, 592, 440,
5889 441, 594, 442, 443, 444, 597, 828, 445, 598, 232,
5890 460, 63, 77, 448, 449, 450, 601, 451, 233, 530,
5891 984, 985, 1088, 1267, 1268, 1269, 1270, 1325, 1271, 1323,
5892 1378, 1379, 1389, 1411, 1412, 1413, 1427, 1414, 1415, 1416,
5893 1417, 1431, 234, 531, 991, 992, 993, 994, 995, 996
5894 };
5895
5896 const short
5897 Dhcp4Parser::yytable_[] =
5898 {
5899 160, 242, 264, 321, 354, 78, 380, 401, 420, 433,
5900 381, 402, 372, 314, 896, 1175, 803, 804, 1176, 1190,
5901 1240, 265, 1241, 807, 268, 403, 28, 252, 312, 344,
5902 356, 404, 394, 416, 1242, 434, 773, 1454, 337, 1455,
5903 310, 339, 355, 338, 821, 81, 826, 29, 1456, 30,
5904 269, 31, 374, 84, 458, 1454, 315, 1455, 361, 459,
5905 418, 419, 253, 313, 345, 357, 1456, 395, 417, 40,
5906 435, 452, 137, 138, 42, 270, 316, 533, 362, 44,
5907 842, 843, 534, 418, 419, 542, 131, 317, 46, 363,
5908 543, 235, 236, 48, 266, 237, 454, 554, 238, 239,
5909 240, 241, 555, 446, 447, 773, 50, 279, 322, 1054,
5910 271, 52, 1055, 267, 296, 280, 323, 281, 324, 1360,
5911 453, 93, 94, 95, 1089, 282, 325, 1090, 455, 1397,
5912 283, 326, 284, 327, 558, 285, 328, 286, 329, 559,
5913 288, 330, 289, 331, 589, 599, 603, 290, 332, 590,
5914 600, 604, 291, 333, 292, 334, 533, 293, 335, 294,
5915 336, 1006, 272, 603, 137, 138, 159, 273, 1007, 274,
5916 275, 542, 276, 373, 1011, 1390, 1008, 277, 1391, 1012,
5917 278, 159, 287, 754, 755, 756, 757, 295, 54, 137,
5918 138, 1036, 306, 132, 307, 1036, 1037, 308, 1071, 456,
5919 1038, 137, 138, 1072, 137, 138, 1289, 1290, 1291, 56,
5920 93, 94, 95, 96, 137, 138, 1076, 1452, 868, 58,
5921 1085, 1077, 758, 346, 827, 1086, 955, 956, 957, 60,
5922 347, 348, 349, 350, 351, 352, 353, 599, 374, 1095,
5923 375, 376, 1087, 463, 1096, 377, 378, 379, 101, 102,
5924 103, 62, 1036, 568, 1361, 1362, 1363, 1299, 137, 138,
5925 554, 1240, 569, 1241, 570, 1300, 464, 1175, 465, 87,
5926 1176, 1190, 88, 159, 578, 1242, 32, 33, 34, 35,
5927 1303, 131, 132, 374, 89, 1304, 469, 90, 91, 92,
5928 93, 94, 95, 96, 97, 98, 99, 100, 159, 470,
5929 589, 1319, 1133, 137, 138, 1311, 1320, 1350, 1351, 1352,
5930 159, 137, 138, 159, 1193, 1194, 1195, 917, 918, 919,
5931 920, 1406, 921, 159, 1407, 1408, 1409, 1410, 101, 102,
5932 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
5933 113, 114, 115, 116, 117, 118, 119, 120, 121, 122,
5934 123, 124, 125, 126, 127, 128, 129, 130, 1326, 558,
5935 579, 131, 132, 1327, 1329, 374, 474, 159, 137, 138,
5936 970, 971, 972, 133, 134, 135, 986, 987, 988, 989,
5937 136, 475, 1384, 137, 138, 137, 138, 1385, 139, 140,
5938 141, 142, 143, 159, 605, 606, 794, 795, 144, 791,
5939 792, 374, 396, 375, 376, 397, 398, 399, 145, 1425,
5940 1432, 146, 159, 476, 1426, 1433, 835, 836, 147, 148,
5941 973, 137, 138, 149, 941, 942, 943, 944, 945, 946,
5942 400, 425, 426, 427, 428, 429, 430, 431, 432, 1464,
5943 585, 150, 477, 478, 1465, 151, 1, 2, 3, 4,
5944 5, 6, 7, 8, 9, 10, 11, 12, 13, 479,
5945 152, 153, 154, 155, 156, 157, 160, 480, 1260, 481,
5946 1261, 1262, 482, 483, 158, 242, 484, 159, 861, 862,
5947 863, 864, 865, 866, 485, 487, 488, 264, 489, 490,
5948 491, 321, 159, 496, 159, 497, 498, 499, 314, 500,
5949 501, 252, 354, 502, 506, 512, 265, 513, 514, 268,
5950 520, 527, 380, 312, 528, 529, 381, 344, 532, 401,
5951 538, 539, 540, 402, 541, 310, 337, 550, 356, 339,
5952 159, 338, 433, 557, 573, 269, 253, 403, 394, 577,
5953 355, 315, 581, 404, 582, 416, 583, 586, 313, 591,
5954 593, 595, 345, 596, 602, 607, 361, 608, 434, 609,
5955 270, 316, 610, 357, 767, 768, 769, 770, 611, 612,
5956 613, 614, 317, 395, 615, 616, 362, 617, 618, 266,
5957 417, 619, 620, 621, 622, 623, 624, 363, 625, 626,
5958 635, 641, 279, 435, 627, 271, 322, 628, 267, 296,
5959 280, 1330, 281, 629, 323, 630, 324, 631, 632, 634,
5960 282, 633, 642, 636, 325, 283, 637, 284, 643, 326,
5961 285, 327, 286, 638, 328, 288, 329, 289, 639, 330,
5962 640, 331, 290, 644, 645, 646, 332, 291, 647, 292,
5963 648, 333, 293, 334, 294, 649, 335, 272, 336, 650,
5964 651, 652, 273, 653, 274, 275, 654, 276, 655, 656,
5965 657, 658, 277, 659, 660, 278, 661, 287, 662, 664,
5966 663, 665, 295, 666, 667, 668, 160, 306, 242, 307,
5967 669, 670, 308, 831, 671, 672, 673, 674, 675, 676,
5968 677, 678, 679, 680, 682, 683, 684, 685, 686, 687,
5969 690, 688, 691, 692, 252, 693, 694, 695, 696, 697,
5970 698, 699, 701, 702, 958, 704, 705, 433, 706, 707,
5971 708, 990, 709, 710, 91, 92, 93, 94, 95, 96,
5972 711, 713, 714, 715, 858, 859, 860, 716, 717, 253,
5973 964, 718, 974, 434, 721, 719, 722, 725, 727, 723,
5974 724, 728, 730, 731, 732, 733, 734, 735, 736, 737,
5975 739, 740, 742, 829, 101, 102, 103, 104, 105, 106,
5976 107, 108, 109, 110, 111, 965, 743, 975, 435, 116,
5977 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
5978 127, 128, 129, 744, 254, 255, 256, 745, 132, 137,
5979 138, 746, 747, 748, 750, 751, 749, 752, 753, 760,
5980 134, 135, 763, 764, 765, 761, 762, 257, 766, 137,
5981 138, 258, 259, 260, 139, 140, 141, 772, 261, 262,
5982 30, 775, 776, 777, 144, 778, 779, 785, 782, 780,
5983 1232, 781, 263, 783, 1233, 1234, 1235, 1236, 784, 786,
5984 787, 788, 789, 797, 1237, 1238, 798, 799, 800, 801,
5985 802, 841, 842, 843, 844, 845, 846, 847, 848, 849,
5986 850, 851, 852, 853, 854, 855, 805, 806, 808, 856,
5987 857, 858, 859, 860, 861, 862, 863, 864, 865, 866,
5988 867, 830, 809, 1017, 897, 810, 152, 153, 811, 901,
5989 812, 905, 813, 909, 913, 929, 814, 815, 159, 816,
5990 817, 933, 818, 819, 937, 966, 983, 998, 1018, 820,
5991 822, 824, 1002, 1019, 1020, 1021, 374, 825, 159, 1022,
5992 1023, 1024, 1025, 1026, 1028, 1029, 1041, 1114, 1040, 1044,
5993 1043, 1046, 1047, 1049, 1050, 1053, 1052, 1058, 1113, 1057,
5994 1061, 1060, 1063, 1064, 1079, 1065, 1066, 1067, 1068, 1069,
5995 1070, 1073, 1074, 1075, 1080, 1097, 1081, 1083, 1091, 1092,
5996 1093, 1094, 1102, 1115, 1101, 264, 1105, 1106, 380, 1104,
5997 1107, 401, 381, 1109, 1141, 402, 314, 1110, 1174, 1196,
5998 1111, 1112, 354, 1201, 265, 420, 1202, 268, 1116, 403,
5999 868, 312, 1117, 1142, 394, 404, 1145, 416, 1197, 958,
6000 1185, 1239, 1118, 310, 1119, 1204, 1120, 1121, 356, 1177,
6001 1122, 1263, 1184, 269, 1178, 1264, 1123, 1203, 990, 315,
6002 355, 1125, 1146, 321, 1126, 964, 313, 1243, 1187, 395,
6003 1124, 1127, 417, 1206, 974, 1186, 361, 1265, 270, 316,
6004 1205, 1128, 1129, 357, 1130, 159, 1131, 1147, 1188, 344,
6005 317, 1221, 1228, 1207, 1222, 1256, 362, 266, 337, 1189,
6006 965, 339, 1244, 338, 1208, 1223, 1143, 363, 1224, 975,
6007 279, 1198, 1266, 271, 1225, 1226, 267, 296, 280, 1156,
6008 281, 1229, 1148, 1230, 345, 1144, 1173, 1157, 282, 1158,
6009 1199, 1200, 1255, 283, 1258, 284, 1257, 1159, 285, 1273,
6010 286, 1274, 1160, 288, 1161, 289, 1275, 1162, 1276, 1163,
6011 290, 1278, 1165, 1279, 1166, 291, 1282, 292, 1307, 1167,
6012 293, 1301, 294, 1283, 1168, 272, 1169, 1284, 322, 1170,
6013 273, 1171, 274, 275, 1149, 276, 323, 1285, 324, 1150,
6014 277, 1151, 1152, 278, 1153, 287, 325, 1286, 1287, 1154,
6015 295, 326, 1155, 327, 1164, 306, 328, 307, 329, 1172,
6016 308, 330, 1288, 331, 1179, 1302, 1180, 1308, 332, 1181,
6017 1309, 1310, 1315, 333, 1317, 334, 1324, 1332, 335, 1333,
6018 336, 1336, 1337, 1338, 1293, 1340, 1342, 1344, 1346, 1322,
6019 1419, 1357, 1356, 1358, 1373, 1387, 1294, 1377, 1295, 1297,
6020 1388, 1298, 1321, 1392, 1328, 1393, 1394, 1339, 1334, 1395,
6021 1345, 1341, 1348, 1349, 1354, 1355, 1359, 1421, 1422, 1423,
6022 1428, 1429, 1430, 1438, 1441, 1440, 1141, 1434, 1442, 1443,
6023 1174, 1444, 1196, 1448, 1447, 1449, 1201, 1450, 1451, 1202,
6024 1466, 1468, 1239, 823, 681, 1142, 1005, 1108, 1145, 1263,
6025 1134, 1197, 1185, 1264, 689, 1132, 1296, 832, 1204, 1192,
6026 1231, 1177, 834, 1220, 1184, 1227, 1178, 1136, 1243, 1135,
6027 1203, 1191, 1219, 700, 1146, 1265, 729, 1331, 1138, 1364,
6028 1187, 1281, 1137, 1280, 703, 726, 1206, 1186, 1140, 720,
6029 1139, 1218, 1335, 1205, 712, 1343, 1254, 1405, 1216, 1147,
6030 1188, 1439, 1217, 1244, 1396, 1365, 1207, 1364, 1462, 1398,
6031 1266, 1189, 1467, 1399, 738, 982, 741, 1208, 1143, 833,
6032 1347, 1272, 1418, 1445, 1198, 0, 1259, 0, 0, 0,
6033 0, 1156, 0, 1365, 1148, 1400, 0, 1144, 1173, 1157,
6034 1366, 1158, 0, 1199, 1200, 0, 1277, 0, 1398, 1159,
6035 0, 0, 1399, 0, 1160, 0, 1161, 0, 0, 1162,
6036 0, 1163, 0, 0, 1165, 0, 1166, 0, 1366, 1453,
6037 1401, 1167, 0, 0, 1400, 0, 1168, 0, 1169, 0,
6038 0, 1170, 0, 1171, 0, 0, 1149, 1453, 0, 0,
6039 0, 1150, 0, 1151, 1152, 1457, 1153, 0, 0, 0,
6040 0, 1154, 0, 0, 1155, 0, 1164, 0, 0, 1401,
6041 0, 1172, 0, 1457, 0, 0, 1179, 0, 1180, 0,
6042 0, 1181, 91, 92, 93, 94, 95, 96, 0, 0,
6043 1458, 0, 0, 0, 0, 0, 0, 0, 0, 0,
6044 0, 0, 0, 0, 0, 0, 0, 0, 1458, 0,
6045 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
6046 0, 0, 101, 102, 103, 104, 105, 106, 107, 108,
6047 109, 110, 111, 0, 0, 0, 0, 116, 117, 118,
6048 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
6049 129, 130, 0, 0, 0, 0, 132, 374, 0, 0,
6050 0, 0, 0, 0, 0, 0, 0, 0, 134, 135,
6051 0, 0, 0, 0, 0, 0, 0, 137, 138, 0,
6052 259, 0, 139, 140, 141, 0, 261, 262, 0, 0,
6053 0, 0, 116, 117, 118, 119, 120, 121, 122, 123,
6054 263, 125, 126, 127, 128, 0, 0, 0, 0, 0,
6055 0, 132, 0, 0, 0, 0, 0, 0, 0, 0,
6056 0, 0, 0, 0, 135, 0, 0, 0, 0, 0,
6057 0, 319, 137, 138, 0, 0, 0, 0, 0, 0,
6058 0, 261, 262, 0, 0, 0, 320, 0, 0, 0,
6059 0, 0, 0, 0, 152, 153, 0, 0, 0, 0,
6060 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
6061 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
6062 0, 0, 0, 0, 0, 0, 159, 0, 0, 0,
6063 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
6064 0, 0, 0, 0, 0, 0, 0, 0, 0, 152,
6065 153, 0, 0, 0, 0, 0, 0, 0, 0, 0,
6066 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
6067 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
6068 0, 159
6069 };
6070
6071 const short
6072 Dhcp4Parser::yycheck_[] =
6073 {
6074 67, 68, 69, 70, 71, 64, 73, 74, 75, 76,
6075 73, 74, 72, 69, 751, 1051, 697, 698, 1051, 1051,
6076 1078, 69, 1078, 704, 69, 74, 0, 68, 69, 70,
6077 71, 74, 73, 74, 1078, 76, 659, 1446, 70, 1446,
6078 69, 70, 71, 70, 725, 234, 18, 5, 1446, 7,
6079 69, 9, 105, 10, 3, 1464, 69, 1464, 71, 8,
6080 151, 152, 68, 69, 70, 71, 1464, 73, 74, 7,
6081 76, 6, 125, 126, 7, 69, 69, 3, 71, 7,
6082 41, 42, 8, 151, 152, 3, 103, 69, 7, 71,
6083 8, 15, 16, 7, 69, 19, 4, 3, 22, 23,
6084 24, 25, 8, 12, 13, 728, 7, 69, 70, 3,
6085 69, 7, 6, 69, 69, 69, 70, 69, 70, 40,
6086 3, 32, 33, 34, 3, 69, 70, 6, 8, 182,
6087 69, 70, 69, 70, 3, 69, 70, 69, 70, 8,
6088 69, 70, 69, 70, 3, 3, 3, 69, 70, 8,
6089 8, 8, 69, 70, 69, 70, 3, 69, 70, 69,
6090 70, 8, 69, 3, 125, 126, 234, 69, 8, 69,
6091 69, 3, 69, 40, 3, 3, 8, 69, 6, 8,
6092 69, 234, 69, 198, 199, 200, 201, 69, 7, 125,
6093 126, 3, 69, 104, 69, 3, 8, 69, 3, 3,
6094 8, 125, 126, 8, 125, 126, 55, 56, 57, 7,
6095 32, 33, 34, 35, 125, 126, 3, 178, 179, 7,
6096 3, 8, 237, 134, 196, 8, 162, 163, 164, 7,
6097 141, 142, 143, 144, 145, 146, 147, 3, 105, 3,
6098 107, 108, 8, 4, 8, 112, 113, 114, 70, 71,
6099 72, 7, 3, 8, 175, 176, 177, 8, 125, 126,
6100 3, 1319, 3, 1319, 8, 8, 4, 1303, 4, 11,
6101 1303, 1303, 14, 234, 8, 1319, 234, 235, 236, 237,
6102 3, 103, 104, 105, 26, 8, 4, 29, 30, 31,
6103 32, 33, 34, 35, 36, 37, 38, 39, 234, 4,
6104 3, 3, 1039, 125, 126, 8, 8, 167, 168, 169,
6105 234, 125, 126, 234, 136, 137, 138, 142, 143, 144,
6106 145, 209, 147, 234, 212, 213, 214, 215, 70, 71,
6107 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
6108 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
6109 92, 93, 94, 95, 96, 97, 98, 99, 3, 3,
6110 3, 103, 104, 8, 8, 105, 4, 234, 125, 126,
6111 184, 185, 186, 115, 116, 117, 217, 218, 219, 220,
6112 122, 4, 3, 125, 126, 125, 126, 8, 130, 131,
6113 132, 133, 134, 234, 453, 454, 20, 21, 140, 17,
6114 18, 105, 106, 107, 108, 109, 110, 111, 150, 3,
6115 3, 153, 234, 4, 8, 8, 27, 28, 160, 161,
6116 234, 125, 126, 165, 154, 155, 156, 157, 158, 159,
6117 134, 188, 189, 190, 191, 192, 193, 194, 195, 3,
6118 8, 183, 4, 4, 8, 187, 221, 222, 223, 224,
6119 225, 226, 227, 228, 229, 230, 231, 232, 233, 4,
6120 202, 203, 204, 205, 206, 207, 533, 4, 208, 4,
6121 210, 211, 4, 4, 216, 542, 4, 234, 63, 64,
6122 65, 66, 67, 68, 4, 4, 4, 554, 4, 4,
6123 4, 558, 234, 4, 234, 4, 4, 4, 554, 4,
6124 4, 542, 569, 4, 4, 4, 554, 4, 4, 554,
6125 4, 4, 579, 554, 4, 4, 579, 558, 4, 586,
6126 4, 4, 4, 586, 4, 554, 558, 4, 569, 558,
6127 234, 558, 599, 4, 4, 554, 542, 586, 579, 4,
6128 569, 554, 4, 586, 4, 586, 4, 3, 554, 4,
6129 4, 4, 558, 4, 4, 234, 569, 4, 599, 4,
6130 554, 554, 4, 569, 118, 119, 120, 121, 4, 237,
6131 237, 237, 554, 579, 4, 4, 569, 4, 235, 554,
6132 586, 237, 4, 4, 4, 235, 235, 569, 235, 235,
6133 4, 4, 554, 599, 235, 554, 558, 237, 554, 554,
6134 554, 1282, 554, 236, 558, 236, 558, 236, 235, 235,
6135 554, 236, 4, 235, 558, 554, 235, 554, 4, 558,
6136 554, 558, 554, 237, 558, 554, 558, 554, 237, 558,
6137 237, 558, 554, 4, 237, 237, 558, 554, 236, 554,
6138 235, 558, 554, 558, 554, 235, 558, 554, 558, 235,
6139 237, 4, 554, 4, 554, 554, 4, 554, 235, 4,
6140 4, 4, 554, 4, 4, 554, 237, 554, 237, 4,
6141 237, 4, 554, 4, 4, 4, 743, 554, 745, 554,
6142 235, 4, 554, 742, 4, 4, 4, 4, 4, 237,
6143 237, 237, 4, 4, 4, 4, 4, 237, 237, 235,
6144 4, 235, 4, 4, 745, 4, 4, 4, 235, 4,
6145 4, 4, 4, 235, 781, 4, 4, 784, 4, 4,
6146 4, 788, 4, 4, 30, 31, 32, 33, 34, 35,
6147 4, 4, 4, 235, 60, 61, 62, 4, 4, 745,
6148 781, 4, 783, 784, 4, 237, 237, 4, 4, 237,
6149 237, 4, 237, 4, 235, 4, 235, 235, 4, 4,
6150 4, 235, 4, 197, 70, 71, 72, 73, 74, 75,
6151 76, 77, 78, 79, 80, 781, 7, 783, 784, 85,
6152 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
6153 96, 97, 98, 7, 100, 101, 102, 7, 104, 125,
6154 126, 7, 234, 234, 7, 7, 234, 5, 234, 234,
6155 116, 117, 5, 5, 5, 234, 234, 123, 234, 125,
6156 126, 127, 128, 129, 130, 131, 132, 5, 134, 135,
6157 7, 234, 5, 5, 140, 5, 5, 234, 5, 7,
6158 166, 7, 148, 7, 170, 171, 172, 173, 7, 234,
6159 5, 7, 5, 234, 180, 181, 234, 234, 5, 234,
6160 234, 40, 41, 42, 43, 44, 45, 46, 47, 48,
6161 49, 50, 51, 52, 53, 54, 7, 234, 234, 58,
6162 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
6163 69, 5, 234, 4, 7, 234, 202, 203, 234, 7,
6164 234, 7, 234, 7, 7, 7, 234, 234, 234, 234,
6165 234, 7, 234, 234, 7, 7, 7, 7, 4, 234,
6166 234, 234, 149, 4, 4, 4, 105, 234, 234, 4,
6167 4, 4, 4, 4, 4, 4, 3, 237, 6, 3,
6168 6, 6, 3, 6, 3, 3, 6, 3, 235, 6,
6169 3, 6, 6, 3, 6, 4, 4, 4, 4, 4,
6170 4, 4, 4, 4, 3, 234, 4, 4, 4, 4,
6171 4, 4, 3, 235, 6, 1042, 6, 4, 1045, 8,
6172 4, 1048, 1045, 4, 1051, 1048, 1042, 4, 1051, 1056,
6173 4, 4, 1059, 1056, 1042, 1062, 1056, 1042, 237, 1048,
6174 179, 1042, 235, 1051, 1045, 1048, 1051, 1048, 1056, 1076,
6175 1051, 1078, 235, 1042, 235, 1056, 235, 235, 1059, 1051,
6176 235, 1088, 1051, 1042, 1051, 1088, 4, 1056, 1095, 1042,
6177 1059, 235, 1051, 1100, 4, 1076, 1042, 1078, 1051, 1045,
6178 237, 4, 1048, 1056, 1085, 1051, 1059, 1088, 1042, 1042,
6179 1056, 4, 4, 1059, 4, 234, 4, 1051, 1051, 1100,
6180 1042, 235, 237, 1056, 235, 4, 1059, 1042, 1100, 1051,
6181 1076, 1100, 1078, 1100, 1056, 235, 1051, 1059, 235, 1085,
6182 1042, 1056, 1088, 1042, 235, 235, 1042, 1042, 1042, 1051,
6183 1042, 235, 1051, 235, 1100, 1051, 1051, 1051, 1042, 1051,
6184 1056, 1056, 237, 1042, 4, 1042, 235, 1051, 1042, 237,
6185 1042, 237, 1051, 1042, 1051, 1042, 237, 1051, 237, 1051,
6186 1042, 6, 1051, 3, 1051, 1042, 4, 1042, 4, 1051,
6187 1042, 8, 1042, 234, 1051, 1042, 1051, 234, 1100, 1051,
6188 1042, 1051, 1042, 1042, 1051, 1042, 1100, 234, 1100, 1051,
6189 1042, 1051, 1051, 1042, 1051, 1042, 1100, 234, 234, 1051,
6190 1042, 1100, 1051, 1100, 1051, 1042, 1100, 1042, 1100, 1051,
6191 1042, 1100, 234, 1100, 1051, 8, 1051, 8, 1100, 1051,
6192 3, 8, 4, 1100, 4, 1100, 4, 4, 1100, 4,
6193 1100, 4, 4, 4, 234, 4, 4, 4, 4, 1258,
6194 174, 5, 7, 5, 7, 6, 234, 7, 234, 234,
6195 3, 234, 234, 4, 234, 4, 4, 235, 237, 4,
6196 235, 237, 234, 234, 234, 234, 234, 234, 234, 5,
6197 4, 4, 4, 4, 237, 4, 1303, 7, 235, 235,
6198 1303, 4, 1309, 3, 6, 234, 1309, 234, 234, 1309,
6199 4, 234, 1319, 728, 533, 1303, 830, 1011, 1303, 1326,
6200 1041, 1309, 1303, 1326, 542, 1036, 1129, 743, 1309, 1054,
6201 1076, 1303, 745, 1064, 1303, 1071, 1303, 1044, 1319, 1042,
6202 1309, 1053, 1062, 554, 1303, 1326, 589, 1303, 1047, 1356,
6203 1303, 1102, 1045, 1100, 558, 586, 1309, 1303, 1050, 579,
6204 1048, 1061, 1309, 1309, 569, 1319, 1080, 1388, 1058, 1303,
6205 1303, 1425, 1059, 1319, 1384, 1356, 1309, 1384, 1448, 1386,
6206 1326, 1303, 1464, 1386, 599, 784, 603, 1309, 1303, 744,
6207 1326, 1089, 1390, 1432, 1309, -1, 1085, -1, -1, -1,
6208 -1, 1303, -1, 1384, 1303, 1386, -1, 1303, 1303, 1303,
6209 1356, 1303, -1, 1309, 1309, -1, 1095, -1, 1425, 1303,
6210 -1, -1, 1425, -1, 1303, -1, 1303, -1, -1, 1303,
6211 -1, 1303, -1, -1, 1303, -1, 1303, -1, 1384, 1446,
6212 1386, 1303, -1, -1, 1425, -1, 1303, -1, 1303, -1,
6213 -1, 1303, -1, 1303, -1, -1, 1303, 1464, -1, -1,
6214 -1, 1303, -1, 1303, 1303, 1446, 1303, -1, -1, -1,
6215 -1, 1303, -1, -1, 1303, -1, 1303, -1, -1, 1425,
6216 -1, 1303, -1, 1464, -1, -1, 1303, -1, 1303, -1,
6217 -1, 1303, 30, 31, 32, 33, 34, 35, -1, -1,
6218 1446, -1, -1, -1, -1, -1, -1, -1, -1, -1,
6219 -1, -1, -1, -1, -1, -1, -1, -1, 1464, -1,
6220 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
6221 -1, -1, 70, 71, 72, 73, 74, 75, 76, 77,
6222 78, 79, 80, -1, -1, -1, -1, 85, 86, 87,
6223 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
6224 98, 99, -1, -1, -1, -1, 104, 105, -1, -1,
6225 -1, -1, -1, -1, -1, -1, -1, -1, 116, 117,
6226 -1, -1, -1, -1, -1, -1, -1, 125, 126, -1,
6227 128, -1, 130, 131, 132, -1, 134, 135, -1, -1,
6228 -1, -1, 85, 86, 87, 88, 89, 90, 91, 92,
6229 148, 94, 95, 96, 97, -1, -1, -1, -1, -1,
6230 -1, 104, -1, -1, -1, -1, -1, -1, -1, -1,
6231 -1, -1, -1, -1, 117, -1, -1, -1, -1, -1,
6232 -1, 124, 125, 126, -1, -1, -1, -1, -1, -1,
6233 -1, 134, 135, -1, -1, -1, 139, -1, -1, -1,
6234 -1, -1, -1, -1, 202, 203, -1, -1, -1, -1,
6235 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
6236 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
6237 -1, -1, -1, -1, -1, -1, 234, -1, -1, -1,
6238 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
6239 -1, -1, -1, -1, -1, -1, -1, -1, -1, 202,
6240 203, -1, -1, -1, -1, -1, -1, -1, -1, -1,
6241 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
6242 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
6243 -1, 234
6244 };
6245
6246 const short
6247 Dhcp4Parser::yystos_[] =
6248 {
6249 0, 221, 222, 223, 224, 225, 226, 227, 228, 229,
6250 230, 231, 232, 233, 239, 240, 241, 242, 243, 244,
6251 245, 246, 247, 248, 249, 250, 251, 252, 0, 5,
6252 7, 9, 234, 235, 236, 237, 253, 254, 255, 260,
6253 7, 269, 7, 274, 7, 335, 7, 452, 7, 535,
6254 7, 552, 7, 484, 7, 490, 7, 514, 7, 428,
6255 7, 660, 7, 679, 261, 256, 270, 275, 336, 453,
6256 536, 553, 485, 491, 515, 429, 661, 680, 253, 262,
6257 263, 234, 258, 259, 10, 271, 273, 11, 14, 26,
6258 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
6259 39, 70, 71, 72, 73, 74, 75, 76, 77, 78,
6260 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
6261 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
6262 99, 103, 104, 115, 116, 117, 122, 125, 126, 130,
6263 131, 132, 133, 134, 140, 150, 153, 160, 161, 165,
6264 183, 187, 202, 203, 204, 205, 206, 207, 216, 234,
6265 268, 276, 277, 278, 279, 280, 281, 282, 283, 284,
6266 285, 286, 287, 288, 289, 290, 292, 293, 295, 296,
6267 297, 298, 299, 300, 301, 304, 306, 308, 310, 311,
6268 312, 315, 316, 317, 318, 319, 321, 323, 324, 325,
6269 326, 327, 328, 329, 330, 331, 349, 351, 359, 361,
6270 406, 415, 422, 436, 446, 470, 471, 472, 474, 482,
6271 508, 542, 544, 546, 557, 559, 561, 584, 599, 600,
6272 648, 658, 677, 686, 710, 15, 16, 19, 22, 23,
6273 24, 25, 268, 333, 334, 337, 339, 342, 345, 346,
6274 347, 348, 542, 544, 100, 101, 102, 123, 127, 128,
6275 129, 134, 135, 148, 268, 278, 279, 280, 281, 282,
6276 283, 284, 285, 286, 287, 288, 293, 296, 297, 298,
6277 299, 300, 301, 304, 306, 308, 310, 311, 312, 315,
6278 316, 317, 318, 319, 321, 323, 329, 454, 455, 456,
6279 458, 460, 462, 464, 466, 468, 470, 471, 472, 473,
6280 508, 529, 542, 544, 546, 557, 559, 561, 579, 124,
6281 139, 268, 298, 299, 300, 301, 304, 306, 308, 310,
6282 312, 315, 316, 317, 318, 319, 321, 466, 468, 508,
6283 537, 538, 539, 541, 542, 544, 134, 141, 142, 143,
6284 144, 145, 146, 147, 268, 508, 542, 544, 554, 555,
6285 556, 557, 559, 561, 563, 565, 567, 569, 571, 573,
6286 575, 577, 482, 40, 105, 107, 108, 112, 113, 114,
6287 268, 380, 492, 493, 494, 495, 496, 497, 498, 500,
6288 502, 504, 505, 507, 542, 544, 106, 109, 110, 111,
6289 134, 268, 380, 496, 502, 516, 517, 518, 519, 520,
6290 522, 523, 524, 525, 526, 527, 542, 544, 151, 152,
6291 268, 430, 431, 432, 434, 188, 189, 190, 191, 192,
6292 193, 194, 195, 268, 542, 544, 662, 663, 664, 665,
6293 667, 668, 670, 671, 672, 675, 12, 13, 681, 682,
6294 683, 685, 6, 3, 4, 8, 3, 272, 3, 8,
6295 678, 332, 352, 4, 4, 4, 558, 560, 562, 4,
6296 4, 350, 360, 362, 4, 4, 4, 4, 4, 4,
6297 4, 4, 4, 4, 4, 4, 291, 4, 4, 4,
6298 4, 4, 302, 305, 307, 309, 4, 4, 4, 4,
6299 4, 4, 4, 447, 483, 509, 4, 294, 313, 475,
6300 543, 545, 4, 4, 4, 407, 585, 547, 423, 437,
6301 4, 416, 601, 649, 659, 320, 322, 4, 4, 4,
6302 687, 711, 4, 3, 8, 338, 340, 343, 4, 4,
6303 4, 4, 3, 8, 459, 461, 463, 530, 457, 465,
6304 4, 467, 469, 580, 3, 8, 540, 4, 3, 8,
6305 578, 564, 566, 568, 572, 570, 576, 574, 8, 3,
6306 8, 499, 381, 4, 503, 501, 506, 4, 8, 3,
6307 521, 4, 4, 4, 528, 8, 3, 433, 435, 3,
6308 8, 4, 666, 4, 669, 4, 4, 673, 676, 3,
6309 8, 684, 4, 3, 8, 253, 253, 234, 4, 4,
6310 4, 4, 237, 237, 237, 4, 4, 4, 235, 237,
6311 4, 4, 4, 235, 235, 235, 235, 235, 237, 236,
6312 236, 236, 235, 236, 235, 4, 235, 235, 237, 237,
6313 237, 4, 4, 4, 4, 237, 237, 236, 235, 235,
6314 235, 237, 4, 4, 4, 235, 4, 4, 4, 4,
6315 4, 237, 237, 237, 4, 4, 4, 4, 4, 235,
6316 4, 4, 4, 4, 4, 4, 237, 237, 237, 4,
6317 4, 277, 4, 4, 4, 237, 237, 235, 235, 334,
6318 4, 4, 4, 4, 4, 4, 235, 4, 4, 4,
6319 455, 4, 235, 538, 4, 4, 4, 4, 4, 4,
6320 4, 4, 556, 4, 4, 235, 4, 4, 4, 237,
6321 494, 4, 237, 237, 237, 4, 518, 4, 4, 431,
6322 237, 4, 235, 4, 235, 235, 4, 4, 663, 4,
6323 235, 682, 4, 7, 7, 7, 7, 234, 234, 234,
6324 7, 7, 5, 234, 198, 199, 200, 201, 237, 303,
6325 234, 234, 234, 5, 5, 5, 234, 118, 119, 120,
6326 121, 314, 5, 255, 257, 234, 5, 5, 5, 5,
6327 7, 7, 5, 7, 7, 234, 234, 5, 7, 5,
6328 264, 17, 18, 341, 20, 21, 344, 234, 234, 234,
6329 5, 234, 234, 264, 264, 7, 234, 264, 234, 234,
6330 234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
6331 234, 264, 234, 257, 234, 234, 18, 196, 674, 197,
6332 5, 253, 276, 681, 333, 27, 28, 353, 354, 355,
6333 357, 40, 41, 42, 43, 44, 45, 46, 47, 48,
6334 49, 50, 51, 52, 53, 54, 58, 59, 60, 61,
6335 62, 63, 64, 65, 66, 67, 68, 69, 179, 268,
6336 367, 368, 369, 371, 373, 375, 377, 379, 380, 382,
6337 383, 384, 385, 386, 387, 388, 389, 390, 391, 394,
6338 395, 396, 398, 400, 402, 404, 367, 7, 363, 364,
6339 365, 7, 448, 449, 450, 7, 486, 487, 488, 7,
6340 510, 511, 512, 7, 476, 477, 478, 142, 143, 144,
6341 145, 147, 408, 409, 410, 411, 412, 413, 414, 7,
6342 586, 587, 588, 7, 548, 549, 550, 7, 424, 425,
6343 426, 154, 155, 156, 157, 158, 159, 438, 439, 440,
6344 441, 442, 443, 444, 445, 162, 163, 164, 268, 417,
6345 418, 419, 420, 421, 542, 544, 7, 602, 603, 604,
6346 184, 185, 186, 234, 542, 544, 650, 651, 652, 653,
6347 655, 656, 662, 7, 688, 689, 217, 218, 219, 220,
6348 268, 712, 713, 714, 715, 716, 717, 265, 7, 531,
6349 532, 533, 149, 581, 582, 363, 8, 8, 8, 356,
6350 358, 3, 8, 370, 372, 374, 378, 4, 4, 4,
6351 4, 4, 4, 4, 4, 4, 4, 392, 4, 4,
6352 397, 399, 401, 403, 405, 376, 3, 8, 8, 366,
6353 6, 3, 451, 6, 3, 489, 6, 3, 513, 6,
6354 3, 479, 6, 3, 3, 6, 589, 6, 3, 551,
6355 6, 3, 427, 6, 3, 4, 4, 4, 4, 4,
6356 4, 3, 8, 4, 4, 4, 3, 8, 605, 6,
6357 3, 4, 654, 4, 657, 3, 8, 8, 690, 3,
6358 6, 4, 4, 4, 4, 3, 8, 234, 266, 267,
6359 534, 6, 3, 583, 8, 6, 4, 4, 354, 4,
6360 4, 4, 4, 235, 237, 235, 237, 235, 235, 235,
6361 235, 235, 235, 4, 237, 235, 4, 4, 4, 4,
6362 4, 4, 368, 367, 365, 454, 450, 492, 488, 516,
6363 512, 268, 278, 279, 280, 281, 282, 283, 284, 285,
6364 286, 287, 288, 293, 296, 297, 298, 299, 300, 301,
6365 304, 306, 308, 310, 311, 312, 315, 316, 317, 318,
6366 319, 321, 323, 329, 380, 446, 464, 466, 468, 470,
6367 471, 472, 480, 481, 508, 542, 544, 557, 559, 561,
6368 579, 478, 409, 136, 137, 138, 268, 278, 279, 280,
6369 329, 380, 482, 508, 542, 544, 557, 559, 561, 590,
6370 591, 592, 593, 594, 596, 598, 588, 554, 550, 430,
6371 426, 235, 235, 235, 235, 235, 235, 439, 237, 235,
6372 235, 418, 166, 170, 171, 172, 173, 180, 181, 268,
6373 396, 398, 400, 542, 544, 606, 607, 608, 611, 613,
6374 615, 616, 617, 627, 604, 237, 4, 235, 4, 651,
6375 208, 210, 211, 268, 380, 542, 544, 691, 692, 693,
6376 694, 696, 689, 237, 237, 237, 237, 713, 6, 3,
6377 537, 533, 4, 234, 234, 234, 234, 234, 234, 55,
6378 56, 57, 393, 234, 234, 234, 402, 234, 234, 8,
6379 8, 8, 8, 3, 8, 595, 597, 4, 8, 3,
6380 8, 8, 609, 612, 614, 4, 628, 4, 618, 3,
6381 8, 234, 253, 697, 4, 695, 3, 8, 234, 8,
6382 264, 481, 4, 4, 237, 592, 4, 4, 4, 235,
6383 4, 237, 4, 607, 4, 235, 4, 692, 234, 234,
6384 167, 168, 169, 610, 234, 234, 7, 5, 5, 234,
6385 40, 175, 176, 177, 268, 542, 544, 629, 630, 631,
6386 634, 636, 638, 7, 619, 620, 621, 7, 698, 699,
6387 632, 635, 637, 639, 3, 8, 622, 6, 3, 700,
6388 3, 6, 4, 4, 4, 4, 630, 182, 268, 380,
6389 542, 544, 623, 624, 625, 621, 209, 212, 213, 214,
6390 215, 701, 702, 703, 705, 706, 707, 708, 699, 174,
6391 633, 234, 234, 5, 626, 3, 8, 704, 4, 4,
6392 4, 709, 3, 8, 7, 640, 641, 642, 4, 624,
6393 4, 237, 235, 235, 4, 702, 643, 6, 3, 234,
6394 234, 234, 178, 268, 371, 373, 375, 542, 544, 644,
6395 645, 646, 642, 647, 3, 8, 4, 645, 234
6396 };
6397
6398 const short
6399 Dhcp4Parser::yyr1_[] =
6400 {
6401 0, 238, 240, 239, 241, 239, 242, 239, 243, 239,
6402 244, 239, 245, 239, 246, 239, 247, 239, 248, 239,
6403 249, 239, 250, 239, 251, 239, 252, 239, 253, 253,
6404 253, 253, 253, 253, 253, 254, 256, 255, 257, 258,
6405 258, 259, 259, 259, 261, 260, 262, 262, 263, 263,
6406 263, 265, 264, 266, 266, 267, 267, 267, 268, 270,
6407 269, 272, 271, 271, 273, 275, 274, 276, 276, 276,
6408 277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
6409 277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
6410 277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
6411 277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
6412 277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
6413 277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
6414 277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
6415 277, 277, 277, 278, 279, 280, 281, 282, 283, 284,
6416 285, 286, 287, 288, 289, 291, 290, 292, 294, 293,
6417 295, 296, 297, 298, 299, 300, 302, 301, 303, 303,
6418 303, 303, 303, 305, 304, 307, 306, 309, 308, 310,
6419 311, 313, 312, 314, 314, 314, 314, 315, 316, 317,
6420 318, 320, 319, 322, 321, 323, 324, 325, 326, 327,
6421 328, 329, 330, 332, 331, 333, 333, 333, 334, 334,
6422 334, 334, 334, 334, 334, 334, 334, 334, 336, 335,
6423 338, 337, 340, 339, 341, 341, 343, 342, 344, 344,
6424 345, 346, 347, 348, 350, 349, 352, 351, 353, 353,
6425 353, 354, 354, 356, 355, 358, 357, 360, 359, 362,
6426 361, 363, 363, 364, 364, 364, 366, 365, 367, 367,
6427 367, 368, 368, 368, 368, 368, 368, 368, 368, 368,
6428 368, 368, 368, 368, 368, 368, 368, 368, 368, 368,
6429 368, 368, 368, 368, 368, 368, 370, 369, 372, 371,
6430 374, 373, 376, 375, 378, 377, 379, 381, 380, 382,
6431 383, 384, 385, 386, 387, 388, 389, 390, 392, 391,
6432 393, 393, 393, 394, 395, 397, 396, 399, 398, 401,
6433 400, 403, 402, 402, 402, 402, 402, 402, 405, 404,
6434 407, 406, 408, 408, 408, 409, 409, 409, 409, 409,
6435 410, 411, 412, 413, 414, 416, 415, 417, 417, 417,
6436 418, 418, 418, 418, 418, 418, 419, 420, 421, 423,
6437 422, 424, 424, 425, 425, 425, 427, 426, 429, 428,
6438 430, 430, 430, 430, 431, 431, 433, 432, 435, 434,
6439 437, 436, 438, 438, 438, 439, 439, 439, 439, 439,
6440 439, 440, 441, 442, 443, 444, 445, 447, 446, 448,
6441 448, 449, 449, 449, 451, 450, 453, 452, 454, 454,
6442 454, 455, 455, 455, 455, 455, 455, 455, 455, 455,
6443 455, 455, 455, 455, 455, 455, 455, 455, 455, 455,
6444 455, 455, 455, 455, 455, 455, 455, 455, 455, 455,
6445 455, 455, 455, 455, 455, 455, 455, 455, 455, 455,
6446 455, 455, 455, 455, 455, 455, 455, 455, 455, 455,
6447 455, 455, 455, 455, 457, 456, 459, 458, 461, 460,
6448 463, 462, 465, 464, 467, 466, 469, 468, 470, 471,
6449 472, 473, 475, 474, 476, 476, 477, 477, 477, 479,
6450 478, 480, 480, 480, 481, 481, 481, 481, 481, 481,
6451 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
6452 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
6453 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
6454 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
6455 481, 481, 483, 482, 485, 484, 486, 486, 487, 487,
6456 487, 489, 488, 491, 490, 492, 492, 493, 493, 493,
6457 494, 494, 494, 494, 494, 494, 494, 494, 494, 494,
6458 495, 496, 497, 499, 498, 501, 500, 503, 502, 504,
6459 506, 505, 507, 509, 508, 510, 510, 511, 511, 511,
6460 513, 512, 515, 514, 516, 516, 517, 517, 517, 518,
6461 518, 518, 518, 518, 518, 518, 518, 518, 518, 518,
6462 519, 521, 520, 522, 523, 524, 525, 526, 528, 527,
6463 530, 529, 531, 531, 532, 532, 532, 534, 533, 536,
6464 535, 537, 537, 537, 538, 538, 538, 538, 538, 538,
6465 538, 538, 538, 538, 538, 538, 538, 538, 538, 538,
6466 538, 538, 538, 538, 538, 538, 538, 540, 539, 541,
6467 543, 542, 545, 544, 547, 546, 548, 548, 549, 549,
6468 549, 551, 550, 553, 552, 554, 554, 555, 555, 555,
6469 556, 556, 556, 556, 556, 556, 556, 556, 556, 556,
6470 556, 556, 556, 556, 556, 558, 557, 560, 559, 562,
6471 561, 564, 563, 566, 565, 568, 567, 570, 569, 572,
6472 571, 574, 573, 576, 575, 578, 577, 580, 579, 581,
6473 583, 582, 585, 584, 586, 586, 587, 587, 587, 589,
6474 588, 590, 590, 591, 591, 591, 592, 592, 592, 592,
6475 592, 592, 592, 592, 592, 592, 592, 592, 592, 592,
6476 592, 592, 593, 595, 594, 597, 596, 598, 599, 601,
6477 600, 602, 602, 603, 603, 603, 605, 604, 606, 606,
6478 606, 607, 607, 607, 607, 607, 607, 607, 607, 607,
6479 607, 607, 607, 607, 609, 608, 610, 610, 610, 612,
6480 611, 614, 613, 615, 616, 618, 617, 619, 619, 620,
6481 620, 620, 622, 621, 623, 623, 623, 624, 624, 624,
6482 624, 624, 626, 625, 628, 627, 629, 629, 629, 630,
6483 630, 630, 630, 630, 630, 630, 632, 631, 633, 635,
6484 634, 637, 636, 639, 638, 640, 640, 641, 641, 641,
6485 643, 642, 644, 644, 644, 645, 645, 645, 645, 645,
6486 645, 645, 647, 646, 649, 648, 650, 650, 650, 651,
6487 651, 651, 651, 651, 651, 652, 654, 653, 655, 657,
6488 656, 659, 658, 661, 660, 662, 662, 662, 663, 663,
6489 663, 663, 663, 663, 663, 663, 663, 663, 663, 664,
6490 666, 665, 667, 669, 668, 670, 671, 673, 672, 674,
6491 674, 676, 675, 678, 677, 680, 679, 681, 681, 681,
6492 682, 682, 684, 683, 685, 687, 686, 688, 688, 688,
6493 690, 689, 691, 691, 691, 692, 692, 692, 692, 692,
6494 692, 692, 693, 695, 694, 697, 696, 698, 698, 698,
6495 700, 699, 701, 701, 701, 702, 702, 702, 702, 702,
6496 704, 703, 705, 706, 707, 709, 708, 711, 710, 712,
6497 712, 712, 713, 713, 713, 713, 713, 714, 715, 716,
6498 717
6499 };
6500
6501 const signed char
6502 Dhcp4Parser::yyr2_[] =
6503 {
6504 0, 2, 0, 3, 0, 3, 0, 3, 0, 3,
6505 0, 3, 0, 3, 0, 3, 0, 3, 0, 3,
6506 0, 3, 0, 3, 0, 3, 0, 3, 1, 1,
6507 1, 1, 1, 1, 1, 1, 0, 4, 1, 0,
6508 1, 3, 5, 2, 0, 4, 0, 1, 1, 3,
6509 2, 0, 4, 0, 1, 1, 3, 2, 2, 0,
6510 4, 0, 6, 1, 2, 0, 4, 1, 3, 2,
6511 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
6512 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
6513 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
6514 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
6515 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
6516 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
6517 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
6518 1, 1, 1, 3, 3, 3, 3, 3, 3, 3,
6519 3, 3, 3, 3, 3, 0, 4, 3, 0, 4,
6520 3, 3, 3, 3, 3, 3, 0, 4, 1, 1,
6521 1, 1, 1, 0, 4, 0, 4, 0, 4, 3,
6522 3, 0, 4, 1, 1, 1, 1, 3, 3, 3,
6523 3, 0, 4, 0, 4, 3, 3, 3, 3, 3,
6524 3, 3, 3, 0, 6, 1, 3, 2, 1, 1,
6525 1, 1, 1, 1, 1, 1, 1, 1, 0, 4,
6526 0, 4, 0, 4, 1, 1, 0, 4, 1, 1,
6527 3, 3, 3, 3, 0, 6, 0, 6, 1, 3,
6528 2, 1, 1, 0, 4, 0, 4, 0, 6, 0,
6529 6, 0, 1, 1, 3, 2, 0, 4, 1, 3,
6530 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
6531 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
6532 1, 1, 1, 1, 1, 1, 0, 4, 0, 4,
6533 0, 4, 0, 4, 0, 4, 3, 0, 4, 3,
6534 3, 3, 3, 3, 3, 3, 3, 3, 0, 4,
6535 1, 1, 1, 3, 3, 0, 4, 0, 4, 0,
6536 4, 0, 4, 1, 1, 1, 1, 1, 0, 4,
6537 0, 6, 1, 3, 2, 1, 1, 1, 1, 1,
6538 1, 1, 1, 1, 1, 0, 6, 1, 3, 2,
6539 1, 1, 1, 1, 1, 1, 3, 3, 3, 0,
6540 6, 0, 1, 1, 3, 2, 0, 4, 0, 4,
6541 1, 3, 2, 1, 1, 1, 0, 4, 0, 4,
6542 0, 6, 1, 3, 2, 1, 1, 1, 1, 1,
6543 1, 3, 3, 3, 3, 3, 3, 0, 6, 0,
6544 1, 1, 3, 2, 0, 4, 0, 4, 1, 3,
6545 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
6546 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
6547 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
6548 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
6549 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
6550 1, 1, 1, 1, 0, 4, 0, 4, 0, 4,
6551 0, 4, 0, 4, 0, 4, 0, 4, 3, 3,
6552 3, 3, 0, 6, 0, 1, 1, 3, 2, 0,
6553 4, 1, 3, 2, 1, 1, 1, 1, 1, 1,
6554 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
6555 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
6556 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
6557 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
6558 1, 1, 0, 6, 0, 4, 0, 1, 1, 3,
6559 2, 0, 4, 0, 4, 0, 1, 1, 3, 2,
6560 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
6561 1, 3, 1, 0, 4, 0, 4, 0, 4, 1,
6562 0, 4, 3, 0, 6, 0, 1, 1, 3, 2,
6563 0, 4, 0, 4, 0, 1, 1, 3, 2, 1,
6564 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
6565 1, 0, 4, 1, 1, 3, 3, 3, 0, 4,
6566 0, 6, 0, 1, 1, 3, 2, 0, 4, 0,
6567 4, 1, 3, 2, 1, 1, 1, 1, 1, 1,
6568 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
6569 1, 1, 1, 1, 1, 1, 1, 0, 4, 3,
6570 0, 4, 0, 4, 0, 6, 0, 1, 1, 3,
6571 2, 0, 4, 0, 4, 0, 1, 1, 3, 2,
6572 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
6573 1, 1, 1, 1, 1, 0, 4, 0, 4, 0,
6574 4, 0, 4, 0, 4, 0, 4, 0, 4, 0,
6575 4, 0, 4, 0, 4, 0, 4, 0, 6, 1,
6576 0, 4, 0, 6, 0, 1, 1, 3, 2, 0,
6577 4, 0, 1, 1, 3, 2, 1, 1, 1, 1,
6578 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
6579 1, 1, 1, 0, 4, 0, 4, 3, 3, 0,
6580 6, 0, 1, 1, 3, 2, 0, 4, 1, 3,
6581 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
6582 1, 1, 1, 1, 0, 4, 1, 1, 1, 0,
6583 4, 0, 4, 3, 3, 0, 6, 0, 1, 1,
6584 3, 2, 0, 4, 1, 3, 2, 1, 1, 1,
6585 1, 1, 0, 4, 0, 6, 1, 3, 2, 1,
6586 1, 1, 1, 1, 1, 1, 0, 4, 1, 0,
6587 4, 0, 4, 0, 6, 0, 1, 1, 3, 2,
6588 0, 4, 1, 3, 2, 1, 1, 1, 1, 1,
6589 1, 1, 0, 4, 0, 6, 1, 3, 2, 1,
6590 1, 1, 1, 1, 1, 3, 0, 4, 3, 0,
6591 4, 0, 6, 0, 4, 1, 3, 2, 1, 1,
6592 1, 1, 1, 1, 1, 1, 1, 1, 1, 3,
6593 0, 4, 3, 0, 4, 3, 3, 0, 4, 1,
6594 1, 0, 4, 0, 6, 0, 4, 1, 3, 2,
6595 1, 1, 0, 6, 3, 0, 6, 1, 3, 2,
6596 0, 4, 1, 3, 2, 1, 1, 1, 1, 1,
6597 1, 1, 3, 0, 4, 0, 6, 1, 3, 2,
6598 0, 4, 1, 3, 2, 1, 1, 1, 1, 1,
6599 0, 4, 3, 3, 3, 0, 4, 0, 6, 1,
6600 3, 2, 1, 1, 1, 1, 1, 3, 3, 3,
6601 3
6602 };
6603
6604
6605#if PARSER4_DEBUG1 || 1
6606 // YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
6607 // First, the terminals, then, starting at \a YYNTOKENS, nonterminals.
6608 const char*
6609 const Dhcp4Parser::yytname_[] =
6610 {
6611 "\"end of file\"", "error", "\"invalid token\"", "\",\"", "\":\"",
6612 "\"[\"", "\"]\"", "\"{\"", "\"}\"", "\"null\"", "\"Dhcp4\"",
6613 "\"config-control\"", "\"config-databases\"",
6614 "\"config-fetch-wait-time\"", "\"interfaces-config\"", "\"interfaces\"",
6615 "\"dhcp-socket-type\"", "\"raw\"", "\"udp\"", "\"outbound-interface\"",
6616 "\"same-as-inbound\"", "\"use-routing\"", "\"re-detect\"",
6617 "\"service-sockets-require-all\"", "\"service-sockets-retry-wait-time\"",
6618 "\"service-sockets-max-retries\"", "\"sanity-checks\"",
6619 "\"lease-checks\"", "\"extended-info-checks\"", "\"echo-client-id\"",
6620 "\"match-client-id\"", "\"authoritative\"", "\"next-server\"",
6621 "\"server-hostname\"", "\"boot-file-name\"", "\"offer-lifetime\"",
6622 "\"stash-agent-options\"", "\"lease-database\"", "\"hosts-database\"",
6623 "\"hosts-databases\"", "\"type\"", "\"user\"", "\"password\"",
6624 "\"host\"", "\"port\"", "\"persist\"", "\"lfc-interval\"",
6625 "\"readonly\"", "\"connect-timeout\"", "\"read-timeout\"",
6626 "\"write-timeout\"", "\"tcp-user-timeout\"", "\"max-reconnect-tries\"",
6627 "\"reconnect-wait-time\"", "\"on-fail\"", "\"stop-retry-exit\"",
6628 "\"serve-retry-exit\"", "\"serve-retry-continue\"",
6629 "\"retry-on-startup\"", "\"max-row-errors\"", "\"trust-anchor\"",
6630 "\"cert-file\"", "\"key-file\"", "\"ssl-mode\"", "\"disable\"",
6631 "\"prefer\"", "\"require\"", "\"verify-ca\"", "\"verify-full\"",
6632 "\"cipher-list\"", "\"valid-lifetime\"", "\"min-valid-lifetime\"",
6633 "\"max-valid-lifetime\"", "\"renew-timer\"", "\"rebind-timer\"",
6634 "\"calculate-tee-times\"", "\"t1-percent\"", "\"t2-percent\"",
6635 "\"cache-threshold\"", "\"cache-max-age\"",
6636 "\"adaptive-lease-time-threshold\"", "\"decline-probation-period\"",
6637 "\"server-tag\"", "\"statistic-default-sample-count\"",
6638 "\"statistic-default-sample-age\"", "\"ddns-send-updates\"",
6639 "\"ddns-override-no-update\"", "\"ddns-override-client-update\"",
6640 "\"ddns-replace-client-name\"", "\"ddns-generated-prefix\"",
6641 "\"ddns-qualifying-suffix\"", "\"ddns-reverse-zone\"",
6642 "\"ddns-update-on-renew\"", "\"ddns-use-conflict-resolution\"",
6643 "\"ddns-ttl-percent\"", "\"ddns-ttl\"", "\"ddns-ttl-min\"",
6644 "\"ddns-ttl-max\"", "\"store-extended-info\"", "\"subnet4\"",
6645 "\"4o6-interface\"", "\"4o6-interface-id\"", "\"4o6-subnet\"",
6646 "\"option-def\"", "\"option-data\"", "\"name\"", "\"data\"", "\"code\"",
6647 "\"space\"", "\"csv-format\"", "\"always-send\"", "\"never-send\"",
6648 "\"record-types\"", "\"encapsulate\"", "\"array\"",
6649 "\"parked-packet-limit\"", "\"allocator\"",
6650 "\"ddns-conflict-resolution-mode\"", "\"check-with-dhcid\"",
6651 "\"no-check-with-dhcid\"", "\"check-exists-with-dhcid\"",
6652 "\"no-check-without-dhcid\"", "\"shared-networks\"", "\"pools\"",
6653 "\"pool\"", "\"user-context\"", "\"comment\"", "\"subnet\"",
6654 "\"interface\"", "\"id\"", "\"reservations-global\"",
6655 "\"reservations-in-subnet\"", "\"reservations-out-of-pool\"",
6656 "\"host-reservation-identifiers\"", "\"client-classes\"",
6657 "\"evaluate-additional-classes\"", "\"test\"", "\"template-test\"",
6658 "\"only-in-additional-list\"", "\"pool-id\"", "\"reservations\"",
6659 "\"ip-address\"", "\"duid\"", "\"hw-address\"", "\"circuit-id\"",
6660 "\"client-id\"", "\"hostname\"", "\"flex-id\"", "\"relay\"",
6661 "\"ip-addresses\"", "\"hooks-libraries\"", "\"library\"",
6662 "\"parameters\"", "\"expired-leases-processing\"",
6663 "\"reclaim-timer-wait-time\"", "\"flush-reclaimed-timer-wait-time\"",
6664 "\"hold-reclaimed-time\"", "\"max-reclaim-leases\"",
6665 "\"max-reclaim-time\"", "\"unwarned-reclaim-cycles\"",
6666 "\"dhcp4o6-port\"", "\"multi-threading\"", "\"enable-multi-threading\"",
6667 "\"thread-pool-size\"", "\"packet-queue-size\"", "\"control-sockets\"",
6668 "\"socket-type\"", "\"unix\"", "\"http\"", "\"https\"",
6669 "\"socket-name\"", "\"socket-address\"", "\"socket-port\"",
6670 "\"authentication\"", "\"basic\"", "\"realm\"", "\"directory\"",
6671 "\"clients\"", "\"user-file\"", "\"password-file\"", "\"cert-required\"",
6672 "\"http-headers\"", "\"value\"", "\"dhcp-queue-control\"",
6673 "\"enable-queue\"", "\"queue-type\"", "\"capacity\"", "\"dhcp-ddns\"",
6674 "\"enable-updates\"", "\"server-ip\"", "\"server-port\"",
6675 "\"sender-ip\"", "\"sender-port\"", "\"max-queue-size\"",
6676 "\"ncr-protocol\"", "\"ncr-format\"", "\"tcp\"", "\"JSON\"",
6677 "\"when-present\"", "\"never\"", "\"always\"", "\"when-not-present\"",
6678 "\"hostname-char-set\"", "\"hostname-char-replacement\"",
6679 "\"early-global-reservations-lookup\"", "\"ip-reservations-unique\"",
6680 "\"reservations-lookup-first\"", "\"loggers\"", "\"output-options\"",
6681 "\"output\"", "\"debuglevel\"", "\"severity\"", "\"flush\"",
6682 "\"maxsize\"", "\"maxver\"", "\"pattern\"", "\"compatibility\"",
6683 "\"lenient-option-parsing\"", "\"ignore-dhcp-server-identifier\"",
6684 "\"ignore-rai-link-selection\"", "\"exclude-first-last-24\"",
6685 "TOPLEVEL_JSON", "TOPLEVEL_DHCP4", "SUB_DHCP4", "SUB_INTERFACES4",
6686 "SUB_SUBNET4", "SUB_POOL4", "SUB_RESERVATION", "SUB_OPTION_DEFS",
6687 "SUB_OPTION_DEF", "SUB_OPTION_DATA", "SUB_HOOKS_LIBRARY",
6688 "SUB_DHCP_DDNS", "SUB_CONFIG_CONTROL", "\"constant string\"",
6689 "\"integer\"", "\"floating point\"", "\"boolean\"", "$accept", "start",
6690 "$@1", "$@2", "$@3", "$@4", "$@5", "$@6", "$@7", "$@8", "$@9", "$@10",
6691 "$@11", "$@12", "$@13", "value", "sub_json", "map2", "$@14", "map_value",
6692 "map_content", "not_empty_map", "list_generic", "$@15", "list_content",
6693 "not_empty_list", "list_strings", "$@16", "list_strings_content",
6694 "not_empty_list_strings", "unknown_map_entry", "syntax_map", "$@17",
6695 "global_object", "$@18", "global_object_comma", "sub_dhcp4", "$@19",
6696 "global_params", "global_param", "valid_lifetime", "min_valid_lifetime",
6697 "max_valid_lifetime", "renew_timer", "rebind_timer",
6698 "calculate_tee_times", "t1_percent", "t2_percent", "cache_threshold",
6699 "cache_max_age", "adaptive_lease_time_threshold",
6700 "decline_probation_period", "server_tag", "$@20", "parked_packet_limit",
6701 "allocator", "$@21", "echo_client_id", "match_client_id",
6702 "authoritative", "ddns_send_updates", "ddns_override_no_update",
6703 "ddns_override_client_update", "ddns_replace_client_name", "$@22",
6704 "ddns_replace_client_name_value", "ddns_generated_prefix", "$@23",
6705 "ddns_qualifying_suffix", "$@24", "ddns_reverse_zone", "$@25",
6706 "ddns_update_on_renew", "ddns_use_conflict_resolution",
6707 "ddns_conflict_resolution_mode", "$@26",
6708 "ddns_conflict_resolution_mode_value", "ddns_ttl_percent", "ddns_ttl",
6709 "ddns_ttl_min", "ddns_ttl_max", "hostname_char_set", "$@27",
6710 "hostname_char_replacement", "$@28", "store_extended_info",
6711 "statistic_default_sample_count", "statistic_default_sample_age",
6712 "early_global_reservations_lookup", "ip_reservations_unique",
6713 "reservations_lookup_first", "offer_lifetime", "stash_agent_options",
6714 "interfaces_config", "$@29", "interfaces_config_params",
6715 "interfaces_config_param", "sub_interfaces4", "$@30", "interfaces_list",
6716 "$@31", "dhcp_socket_type", "$@32", "socket_type", "outbound_interface",
6717 "$@33", "outbound_interface_value", "re_detect",
6718 "service_sockets_require_all", "service_sockets_retry_wait_time",
6719 "service_sockets_max_retries", "lease_database", "$@34", "sanity_checks",
6720 "$@35", "sanity_checks_params", "sanity_checks_param", "lease_checks",
6721 "$@36", "extended_info_checks", "$@37", "hosts_database", "$@38",
6722 "hosts_databases", "$@39", "database_list", "not_empty_database_list",
6723 "database", "$@40", "database_map_params", "database_map_param",
6724 "database_type", "$@41", "user", "$@42", "password", "$@43",
6725 "password_file", "$@44", "host", "$@45", "port", "name", "$@46",
6726 "persist", "lfc_interval", "readonly", "connect_timeout", "read_timeout",
6727 "write_timeout", "tcp_user_timeout", "max_reconnect_tries",
6728 "reconnect_wait_time", "on_fail", "$@47", "on_fail_mode",
6729 "retry_on_startup", "max_row_errors", "trust_anchor", "$@48",
6730 "cert_file", "$@49", "key_file", "$@50", "ssl_mode", "$@51",
6731 "cipher_list", "$@52", "host_reservation_identifiers", "$@53",
6732 "host_reservation_identifiers_list", "host_reservation_identifier",
6733 "duid_id", "hw_address_id", "circuit_id", "client_id", "flex_id",
6734 "dhcp_multi_threading", "$@54", "multi_threading_params",
6735 "multi_threading_param", "enable_multi_threading", "thread_pool_size",
6736 "packet_queue_size", "hooks_libraries", "$@55", "hooks_libraries_list",
6737 "not_empty_hooks_libraries_list", "hooks_library", "$@56",
6738 "sub_hooks_library", "$@57", "hooks_params", "hooks_param", "library",
6739 "$@58", "parameters", "$@59", "expired_leases_processing", "$@60",
6740 "expired_leases_params", "expired_leases_param",
6741 "reclaim_timer_wait_time", "flush_reclaimed_timer_wait_time",
6742 "hold_reclaimed_time", "max_reclaim_leases", "max_reclaim_time",
6743 "unwarned_reclaim_cycles", "subnet4_list", "$@61",
6744 "subnet4_list_content", "not_empty_subnet4_list", "subnet4", "$@62",
6745 "sub_subnet4", "$@63", "subnet4_params", "subnet4_param", "subnet",
6746 "$@64", "subnet_4o6_interface", "$@65", "subnet_4o6_interface_id",
6747 "$@66", "subnet_4o6_subnet", "$@67", "interface", "$@68",
6748 "network_client_classes", "$@69", "evaluate_additional_classes", "$@70",
6749 "reservations_global", "reservations_in_subnet",
6750 "reservations_out_of_pool", "id", "shared_networks", "$@71",
6751 "shared_networks_content", "shared_networks_list", "shared_network",
6752 "$@72", "shared_network_params", "shared_network_param",
6753 "option_def_list", "$@73", "sub_option_def_list", "$@74",
6754 "option_def_list_content", "not_empty_option_def_list",
6755 "option_def_entry", "$@75", "sub_option_def", "$@76",
6756 "option_def_params", "not_empty_option_def_params", "option_def_param",
6757 "option_def_name", "code", "option_def_code", "option_def_type", "$@77",
6758 "option_def_record_types", "$@78", "space", "$@79", "option_def_space",
6759 "option_def_encapsulate", "$@80", "option_def_array", "option_data_list",
6760 "$@81", "option_data_list_content", "not_empty_option_data_list",
6761 "option_data_entry", "$@82", "sub_option_data", "$@83",
6762 "option_data_params", "not_empty_option_data_params",
6763 "option_data_param", "option_data_name", "option_data_data", "$@84",
6764 "option_data_code", "option_data_space", "option_data_csv_format",
6765 "option_data_always_send", "option_data_never_send",
6766 "option_data_client_classes", "$@85", "pools_list", "$@86",
6767 "pools_list_content", "not_empty_pools_list", "pool_list_entry", "$@87",
6768 "sub_pool4", "$@88", "pool_params", "pool_param", "pool_entry", "$@89",
6769 "pool_id", "user_context", "$@90", "comment", "$@91", "reservations",
6770 "$@92", "reservations_list", "not_empty_reservations_list",
6771 "reservation", "$@93", "sub_reservation", "$@94", "reservation_params",
6772 "not_empty_reservation_params", "reservation_param", "next_server",
6773 "$@95", "server_hostname", "$@96", "boot_file_name", "$@97",
6774 "ip_address", "$@98", "duid", "$@99", "hw_address", "$@100",
6775 "client_id_value", "$@101", "circuit_id_value", "$@102", "flex_id_value",
6776 "$@103", "hostname", "$@104", "reservation_client_classes", "$@105",
6777 "relay", "$@106", "relay_map", "ip_addresses", "$@107", "client_classes",
6778 "$@108", "client_classes_list", "not_empty_classes_list",
6779 "client_class_entry", "$@109", "client_class_params",
6780 "not_empty_client_class_params", "client_class_param",
6781 "client_class_name", "client_class_test", "$@110",
6782 "client_class_template_test", "$@111", "only_in_additional_list",
6783 "dhcp4o6_port", "control_sockets", "$@112", "control_socket_list",
6784 "not_empty_control_socket_list", "control_socket_entry", "$@113",
6785 "control_socket_params", "control_socket_param", "control_socket_type",
6786 "$@114", "control_socket_type_value", "control_socket_name", "$@115",
6787 "control_socket_address", "$@116", "control_socket_port",
6788 "cert_required", "http_headers", "$@117", "http_header_list",
6789 "not_empty_http_header_list", "http_header", "$@118",
6790 "http_header_params", "http_header_param", "header_value", "$@119",
6791 "authentication", "$@120", "auth_params", "auth_param", "auth_type",
6792 "$@121", "auth_type_value", "realm", "$@122", "directory", "$@123",
6793 "clients", "$@124", "clients_list", "not_empty_clients_list",
6794 "basic_auth", "$@125", "clients_params", "clients_param", "user_file",
6795 "$@126", "dhcp_queue_control", "$@127", "queue_control_params",
6796 "queue_control_param", "enable_queue", "queue_type", "$@128", "capacity",
6797 "arbitrary_map_entry", "$@129", "dhcp_ddns", "$@130", "sub_dhcp_ddns",
6798 "$@131", "dhcp_ddns_params", "dhcp_ddns_param", "enable_updates",
6799 "server_ip", "$@132", "server_port", "sender_ip", "$@133", "sender_port",
6800 "max_queue_size", "ncr_protocol", "$@134", "ncr_protocol_value",
6801 "ncr_format", "$@135", "config_control", "$@136", "sub_config_control",
6802 "$@137", "config_control_params", "config_control_param",
6803 "config_databases", "$@138", "config_fetch_wait_time", "loggers",
6804 "$@139", "loggers_entries", "logger_entry", "$@140", "logger_params",
6805 "logger_param", "debuglevel", "severity", "$@141", "output_options_list",
6806 "$@142", "output_options_list_content", "output_entry", "$@143",
6807 "output_params_list", "output_params", "output", "$@144", "flush",
6808 "maxsize", "maxver", "pattern", "$@145", "compatibility", "$@146",
6809 "compatibility_params", "compatibility_param", "lenient_option_parsing",
6810 "ignore_dhcp_server_identifier", "ignore_rai_link_selection",
6811 "exclude_first_last_24", YY_NULLPTRnullptr
6812 };
6813#endif
6814
6815
6816#if PARSER4_DEBUG1
6817 const short
6818 Dhcp4Parser::yyrline_[] =
6819 {
6820 0, 334, 334, 334, 335, 335, 336, 336, 337, 337,
6821 338, 338, 339, 339, 340, 340, 341, 341, 342, 342,
6822 343, 343, 344, 344, 345, 345, 346, 346, 354, 355,
6823 356, 357, 358, 359, 360, 363, 368, 368, 379, 382,
6824 383, 386, 391, 397, 402, 402, 409, 410, 413, 417,
6825 421, 427, 427, 434, 435, 438, 442, 446, 456, 465,
6826 465, 480, 480, 494, 497, 503, 503, 512, 513, 514,
6827 521, 522, 523, 524, 525, 526, 527, 528, 529, 530,
6828 531, 532, 533, 534, 535, 536, 537, 538, 539, 540,
6829 541, 542, 543, 544, 545, 546, 547, 548, 549, 550,
6830 551, 552, 553, 554, 555, 556, 557, 558, 559, 560,
6831 561, 562, 563, 564, 565, 566, 567, 568, 569, 570,
6832 571, 572, 573, 574, 575, 576, 577, 578, 579, 580,
6833 581, 582, 583, 584, 585, 586, 587, 588, 589, 590,
6834 591, 592, 593, 596, 602, 608, 614, 620, 626, 632,
6835 638, 644, 650, 656, 662, 668, 668, 677, 683, 683,
6836 692, 698, 704, 710, 716, 722, 728, 728, 737, 740,
6837 743, 746, 749, 755, 755, 764, 764, 773, 773, 782,
6838 791, 801, 801, 810, 813, 816, 819, 824, 830, 836,
6839 842, 848, 848, 857, 857, 866, 872, 878, 884, 890,
6840 896, 902, 908, 914, 914, 926, 927, 928, 933, 934,
6841 935, 936, 937, 938, 939, 940, 941, 942, 945, 945,
6842 954, 954, 965, 965, 973, 974, 977, 977, 985, 987,
6843 991, 997, 1003, 1009, 1015, 1015, 1028, 1028, 1039, 1040,
6844 1041, 1046, 1047, 1050, 1050, 1069, 1069, 1087, 1087, 1100,
6845 1100, 1111, 1112, 1115, 1116, 1117, 1122, 1122, 1132, 1133,
6846 1134, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147,
6847 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157,
6848 1158, 1159, 1160, 1161, 1162, 1163, 1166, 1166, 1175, 1175,
6849 1184, 1184, 1193, 1193, 1202, 1202, 1211, 1217, 1217, 1226,
6850 1232, 1238, 1244, 1250, 1256, 1262, 1268, 1274, 1280, 1280,
6851 1288, 1289, 1290, 1293, 1299, 1305, 1305, 1314, 1314, 1323,
6852 1323, 1332, 1332, 1340, 1343, 1346, 1349, 1352, 1357, 1357,
6853 1366, 1366, 1377, 1378, 1379, 1384, 1385, 1386, 1387, 1388,
6854 1391, 1396, 1401, 1406, 1411, 1418, 1418, 1431, 1432, 1433,
6855 1438, 1439, 1440, 1441, 1442, 1443, 1446, 1452, 1458, 1464,
6856 1464, 1475, 1476, 1479, 1480, 1481, 1486, 1486, 1496, 1496,
6857 1506, 1507, 1508, 1511, 1514, 1515, 1518, 1518, 1527, 1527,
6858 1536, 1536, 1548, 1549, 1550, 1555, 1556, 1557, 1558, 1559,
6859 1560, 1563, 1569, 1575, 1581, 1587, 1593, 1602, 1602, 1616,
6860 1617, 1620, 1621, 1622, 1631, 1631, 1657, 1657, 1668, 1669,
6861 1670, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684,
6862 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694,
6863 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704,
6864 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713, 1714,
6865 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724,
6866 1725, 1726, 1727, 1728, 1731, 1731, 1740, 1740, 1749, 1749,
6867 1758, 1758, 1767, 1767, 1777, 1777, 1788, 1788, 1799, 1805,
6868 1811, 1817, 1825, 1825, 1837, 1838, 1842, 1843, 1844, 1849,
6869 1849, 1857, 1858, 1859, 1864, 1865, 1866, 1867, 1868, 1869,
6870 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879,
6871 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889,
6872 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899,
6873 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909,
6874 1910, 1911, 1918, 1918, 1932, 1932, 1941, 1942, 1945, 1946,
6875 1947, 1954, 1954, 1969, 1969, 1983, 1984, 1987, 1988, 1989,
6876 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
6877 2006, 2008, 2014, 2016, 2016, 2025, 2025, 2034, 2034, 2043,
6878 2045, 2045, 2054, 2064, 2064, 2077, 2078, 2083, 2084, 2085,
6879 2092, 2092, 2104, 2104, 2116, 2117, 2122, 2123, 2124, 2131,
6880 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141,
6881 2144, 2146, 2146, 2155, 2157, 2159, 2165, 2171, 2177, 2177,
6882 2191, 2191, 2204, 2205, 2208, 2209, 2210, 2215, 2215, 2225,
6883 2225, 2235, 2236, 2237, 2242, 2243, 2244, 2245, 2246, 2247,
6884 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257,
6885 2258, 2259, 2260, 2261, 2262, 2263, 2264, 2267, 2267, 2276,
6886 2282, 2282, 2307, 2307, 2337, 2337, 2348, 2349, 2352, 2353,
6887 2354, 2359, 2359, 2368, 2368, 2377, 2378, 2381, 2382, 2383,
6888 2389, 2390, 2391, 2392, 2393, 2394, 2395, 2396, 2397, 2398,
6889 2399, 2400, 2401, 2402, 2403, 2406, 2406, 2415, 2415, 2424,
6890 2424, 2433, 2433, 2442, 2442, 2451, 2451, 2460, 2460, 2469,
6891 2469, 2478, 2478, 2487, 2487, 2496, 2496, 2510, 2510, 2521,
6892 2524, 2524, 2538, 2538, 2549, 2550, 2553, 2554, 2555, 2560,
6893 2560, 2570, 2571, 2574, 2575, 2576, 2581, 2582, 2583, 2584,
6894 2585, 2586, 2587, 2588, 2589, 2590, 2591, 2592, 2593, 2594,
6895 2595, 2596, 2599, 2601, 2601, 2610, 2610, 2619, 2627, 2635,
6896 2635, 2646, 2647, 2650, 2651, 2652, 2657, 2657, 2665, 2666,
6897 2667, 2672, 2673, 2674, 2675, 2676, 2677, 2678, 2679, 2680,
6898 2681, 2682, 2683, 2684, 2687, 2687, 2696, 2697, 2698, 2701,
6899 2701, 2710, 2710, 2719, 2725, 2731, 2731, 2742, 2743, 2746,
6900 2747, 2748, 2753, 2753, 2761, 2762, 2763, 2768, 2769, 2770,
6901 2771, 2772, 2775, 2775, 2786, 2786, 2799, 2800, 2801, 2806,
6902 2807, 2808, 2809, 2810, 2811, 2812, 2815, 2815, 2823, 2826,
6903 2826, 2835, 2835, 2844, 2844, 2855, 2856, 2859, 2860, 2861,
6904 2866, 2866, 2874, 2875, 2876, 2881, 2882, 2883, 2884, 2885,
6905 2886, 2887, 2890, 2890, 2901, 2901, 2914, 2915, 2916, 2921,
6906 2922, 2923, 2924, 2925, 2926, 2929, 2935, 2935, 2944, 2950,
6907 2950, 2960, 2960, 2973, 2973, 2983, 2984, 2985, 2990, 2991,
6908 2992, 2993, 2994, 2995, 2996, 2997, 2998, 2999, 3000, 3003,
6909 3009, 3009, 3018, 3024, 3024, 3033, 3039, 3045, 3045, 3054,
6910 3055, 3058, 3058, 3069, 3069, 3081, 3081, 3091, 3092, 3093,
6911 3099, 3100, 3103, 3103, 3114, 3122, 3122, 3135, 3136, 3137,
6912 3143, 3143, 3151, 3152, 3153, 3158, 3159, 3160, 3161, 3162,
6913 3163, 3164, 3167, 3173, 3173, 3182, 3182, 3193, 3194, 3195,
6914 3200, 3200, 3208, 3209, 3210, 3215, 3216, 3217, 3218, 3219,
6915 3222, 3222, 3231, 3237, 3243, 3249, 3249, 3258, 3258, 3269,
6916 3270, 3271, 3276, 3277, 3278, 3279, 3280, 3283, 3289, 3295,
6917 3301
6918 };
6919
6920 void
6921 Dhcp4Parser::yy_stack_print_ () const
6922 {
6923 *yycdebug_ << "Stack now";
6924 for (stack_type::const_iterator
6925 i = yystack_.begin (),
6926 i_end = yystack_.end ();
6927 i != i_end; ++i)
6928 *yycdebug_ << ' ' << int (i->state);
6929 *yycdebug_ << '\n';
6930 }
6931
6932 void
6933 Dhcp4Parser::yy_reduce_print_ (int yyrule) const
6934 {
6935 int yylno = yyrline_[yyrule];
6936 int yynrhs = yyr2_[yyrule];
6937 // Print the symbols being reduced, and their result.
6938 *yycdebug_ << "Reducing stack by rule " << yyrule - 1
6939 << " (line " << yylno << "):\n";
6940 // The symbols being reduced.
6941 for (int yyi = 0; yyi < yynrhs; yyi++)
6942 YY_SYMBOL_PRINT (" $" << yyi + 1 << " =",do { if (yydebug_) { *yycdebug_ << " $" << yyi +
1 << " =" << ' '; yy_print_ (*yycdebug_, yystack_
[(yynrhs) - (yyi + 1)]); *yycdebug_ << '\n'; } } while (
false)
6943 yystack_[(yynrhs) - (yyi + 1)])do { if (yydebug_) { *yycdebug_ << " $" << yyi +
1 << " =" << ' '; yy_print_ (*yycdebug_, yystack_
[(yynrhs) - (yyi + 1)]); *yycdebug_ << '\n'; } } while (
false)
;
6944 }
6945#endif // PARSER4_DEBUG
6946
6947
6948#line 14 "dhcp4_parser.yy"
6949} } // isc::dhcp
6950#line 6951 "dhcp4_parser.cc"
6951
6952#line 3307 "dhcp4_parser.yy"
6953
6954
6955void
6956isc::dhcp::Dhcp4Parser::error(const location_type& loc,
6957 const std::string& what)
6958{
6959 ctx.error(loc, what);
6960}