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