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