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