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