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