Bug Summary

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