Bug Summary

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