Kea 1.5.0
dhcp6_parser.cc
Go to the documentation of this file.
1// A Bison parser, made by GNU Bison 3.2.1.
2
3// Skeleton implementation for Bison LALR(1) parsers in C++
4
5// Copyright (C) 2002-2015, 2018 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 <http://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// Undocumented macros, especially those whose name start with YY_,
34// are private implementation details. Do not rely on them.
35
36
37// Take the name prefix into account.
38#define yylex parser6_lex
39
40
41
42#include "dhcp6_parser.h"
43
44
45// Unqualified %code blocks.
46#line 34 "dhcp6_parser.yy" // lalr1.cc:438
47
49
50#line 51 "dhcp6_parser.cc" // lalr1.cc:438
51
52
53#ifndef YY_
54# if defined YYENABLE_NLS && YYENABLE_NLS
55# if ENABLE_NLS
56# include <libintl.h> // FIXME: INFRINGES ON USER NAME SPACE.
57# define YY_(msgid) dgettext ("bison-runtime", msgid)
58# endif
59# endif
60# ifndef YY_
61# define YY_(msgid) msgid
62# endif
63#endif
64
65// Whether we are compiled with exception support.
66#ifndef YY_EXCEPTIONS
67# if defined __GNUC__ && !defined __EXCEPTIONS
68# define YY_EXCEPTIONS 0
69# else
70# define YY_EXCEPTIONS 1
71# endif
72#endif
73
74#define YYRHSLOC(Rhs, K) ((Rhs)[K].location)
75/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
76 If N is 0, then set CURRENT to the empty location which ends
77 the previous symbol: RHS[0] (always defined). */
78
79# ifndef YYLLOC_DEFAULT
80# define YYLLOC_DEFAULT(Current, Rhs, N) \
81 do \
82 if (N) \
83 { \
84 (Current).begin = YYRHSLOC (Rhs, 1).begin; \
85 (Current).end = YYRHSLOC (Rhs, N).end; \
86 } \
87 else \
88 { \
89 (Current).begin = (Current).end = YYRHSLOC (Rhs, 0).end; \
90 } \
91 while (/*CONSTCOND*/ false)
92# endif
93
94
95// Suppress unused-variable warnings by "using" E.
96#define YYUSE(E) ((void) (E))
97
98// Enable debugging if requested.
99#if PARSER6_DEBUG
100
101// A pseudo ostream that takes yydebug_ into account.
102# define YYCDEBUG if (yydebug_) (*yycdebug_)
103
104# define YY_SYMBOL_PRINT(Title, Symbol) \
105 do { \
106 if (yydebug_) \
107 { \
108 *yycdebug_ << Title << ' '; \
109 yy_print_ (*yycdebug_, Symbol); \
110 *yycdebug_ << '\n'; \
111 } \
112 } while (false)
113
114# define YY_REDUCE_PRINT(Rule) \
115 do { \
116 if (yydebug_) \
117 yy_reduce_print_ (Rule); \
118 } while (false)
119
120# define YY_STACK_PRINT() \
121 do { \
122 if (yydebug_) \
123 yystack_print_ (); \
124 } while (false)
125
126#else // !PARSER6_DEBUG
127
128# define YYCDEBUG if (false) std::cerr
129# define YY_SYMBOL_PRINT(Title, Symbol) YYUSE (Symbol)
130# define YY_REDUCE_PRINT(Rule) static_cast<void> (0)
131# define YY_STACK_PRINT() static_cast<void> (0)
132
133#endif // !PARSER6_DEBUG
134
135#define yyerrok (yyerrstatus_ = 0)
136#define yyclearin (yyla.clear ())
137
138#define YYACCEPT goto yyacceptlab
139#define YYABORT goto yyabortlab
140#define YYERROR goto yyerrorlab
141#define YYRECOVERING() (!!yyerrstatus_)
142
143#line 14 "dhcp6_parser.yy" // lalr1.cc:513
144namespace isc { namespace dhcp {
145#line 146 "dhcp6_parser.cc" // lalr1.cc:513
146
147 /* Return YYSTR after stripping away unnecessary quotes and
148 backslashes, so that it's suitable for yyerror. The heuristic is
149 that double-quoting is unnecessary unless the string contains an
150 apostrophe, a comma, or backslash (other than backslash-backslash).
151 YYSTR is taken from yytname. */
152 std::string
153 Dhcp6Parser::yytnamerr_ (const char *yystr)
154 {
155 if (*yystr == '"')
156 {
157 std::string yyr = "";
158 char const *yyp = yystr;
159
160 for (;;)
161 switch (*++yyp)
162 {
163 case '\'':
164 case ',':
165 goto do_not_strip_quotes;
166
167 case '\\':
168 if (*++yyp != '\\')
169 goto do_not_strip_quotes;
170 // Fall through.
171 default:
172 yyr += *yyp;
173 break;
174
175 case '"':
176 return yyr;
177 }
178 do_not_strip_quotes: ;
179 }
180
181 return yystr;
182 }
183
184
187 :
189 yydebug_ (false),
190 yycdebug_ (&std::cerr),
191#endif
192 ctx (ctx_yyarg)
193 {}
194
196 {}
197
198
199 /*---------------.
200 | Symbol types. |
201 `---------------*/
202
203
204
205 // by_state.
206 Dhcp6Parser::by_state::by_state ()
207 : state (empty_state)
208 {}
209
210 Dhcp6Parser::by_state::by_state (const by_state& other)
211 : state (other.state)
212 {}
213
214 void
215 Dhcp6Parser::by_state::clear ()
216 {
217 state = empty_state;
218 }
219
220 void
221 Dhcp6Parser::by_state::move (by_state& that)
222 {
223 state = that.state;
224 that.clear ();
225 }
226
227 Dhcp6Parser::by_state::by_state (state_type s)
228 : state (s)
229 {}
230
232 Dhcp6Parser::by_state::type_get () const
233 {
234 if (state == empty_state)
235 return empty_symbol;
236 else
237 return yystos_[state];
238 }
239
240 Dhcp6Parser::stack_symbol_type::stack_symbol_type ()
241 {}
242
243 Dhcp6Parser::stack_symbol_type::stack_symbol_type (YY_RVREF (stack_symbol_type) that)
244 : super_type (YY_MOVE (that.state), YY_MOVE (that.location))
245 {
246 switch (that.type_get ())
247 {
248 case 191: // value
249 case 195: // map_value
250 case 247: // db_type
251 case 336: // hr_mode
252 case 472: // duid_type
253 case 507: // ncr_protocol_value
254 case 514: // replace_client_name_value
255 value.YY_MOVE_OR_COPY< ElementPtr > (YY_MOVE (that.value));
256 break;
257
258 case 173: // "boolean"
259 value.YY_MOVE_OR_COPY< bool > (YY_MOVE (that.value));
260 break;
261
262 case 172: // "floating point"
263 value.YY_MOVE_OR_COPY< double > (YY_MOVE (that.value));
264 break;
265
266 case 171: // "integer"
267 value.YY_MOVE_OR_COPY< int64_t > (YY_MOVE (that.value));
268 break;
269
270 case 170: // "constant string"
271 value.YY_MOVE_OR_COPY< std::string > (YY_MOVE (that.value));
272 break;
273
274 default:
275 break;
276 }
277
278#if 201103L <= YY_CPLUSPLUS
279 // that is emptied.
280 that.state = empty_state;
281#endif
282 }
283
284 Dhcp6Parser::stack_symbol_type::stack_symbol_type (state_type s, YY_MOVE_REF (symbol_type) that)
285 : super_type (s, YY_MOVE (that.location))
286 {
287 switch (that.type_get ())
288 {
289 case 191: // value
290 case 195: // map_value
291 case 247: // db_type
292 case 336: // hr_mode
293 case 472: // duid_type
294 case 507: // ncr_protocol_value
295 case 514: // replace_client_name_value
296 value.move< ElementPtr > (YY_MOVE (that.value));
297 break;
298
299 case 173: // "boolean"
300 value.move< bool > (YY_MOVE (that.value));
301 break;
302
303 case 172: // "floating point"
304 value.move< double > (YY_MOVE (that.value));
305 break;
306
307 case 171: // "integer"
308 value.move< int64_t > (YY_MOVE (that.value));
309 break;
310
311 case 170: // "constant string"
312 value.move< std::string > (YY_MOVE (that.value));
313 break;
314
315 default:
316 break;
317 }
318
319 // that is emptied.
320 that.type = empty_symbol;
321 }
322
323#if YY_CPLUSPLUS < 201103L
324 Dhcp6Parser::stack_symbol_type&
325 Dhcp6Parser::stack_symbol_type::operator= (stack_symbol_type& that)
326 {
327 state = that.state;
328 switch (that.type_get ())
329 {
330 case 191: // value
331 case 195: // map_value
332 case 247: // db_type
333 case 336: // hr_mode
334 case 472: // duid_type
335 case 507: // ncr_protocol_value
336 case 514: // replace_client_name_value
337 value.move< ElementPtr > (that.value);
338 break;
339
340 case 173: // "boolean"
341 value.move< bool > (that.value);
342 break;
343
344 case 172: // "floating point"
345 value.move< double > (that.value);
346 break;
347
348 case 171: // "integer"
349 value.move< int64_t > (that.value);
350 break;
351
352 case 170: // "constant string"
353 value.move< std::string > (that.value);
354 break;
355
356 default:
357 break;
358 }
359
360 location = that.location;
361 // that is emptied.
362 that.state = empty_state;
363 return *this;
364 }
365#endif
366
367 template <typename Base>
368 void
369 Dhcp6Parser::yy_destroy_ (const char* yymsg, basic_symbol<Base>& yysym) const
370 {
371 if (yymsg)
372 YY_SYMBOL_PRINT (yymsg, yysym);
373 }
374
375#if PARSER6_DEBUG
376 template <typename Base>
377 void
378 Dhcp6Parser::yy_print_ (std::ostream& yyo,
379 const basic_symbol<Base>& yysym) const
380 {
381 std::ostream& yyoutput = yyo;
382 YYUSE (yyoutput);
383 symbol_number_type yytype = yysym.type_get ();
384 // Avoid a (spurious) G++ 4.8 warning about "array subscript is
385 // below array bounds".
386 if (yysym.empty ())
387 std::abort ();
388 yyo << (yytype < yyntokens_ ? "token" : "nterm")
389 << ' ' << yytname_[yytype] << " ("
390 << yysym.location << ": ";
391 switch (yytype)
392 {
393 case 170: // "constant string"
394
395#line 248 "dhcp6_parser.yy" // lalr1.cc:672
396 { yyoutput << yysym.value.template as< std::string > (); }
397#line 398 "dhcp6_parser.cc" // lalr1.cc:672
398 break;
399
400 case 171: // "integer"
401
402#line 248 "dhcp6_parser.yy" // lalr1.cc:672
403 { yyoutput << yysym.value.template as< int64_t > (); }
404#line 405 "dhcp6_parser.cc" // lalr1.cc:672
405 break;
406
407 case 172: // "floating point"
408
409#line 248 "dhcp6_parser.yy" // lalr1.cc:672
410 { yyoutput << yysym.value.template as< double > (); }
411#line 412 "dhcp6_parser.cc" // lalr1.cc:672
412 break;
413
414 case 173: // "boolean"
415
416#line 248 "dhcp6_parser.yy" // lalr1.cc:672
417 { yyoutput << yysym.value.template as< bool > (); }
418#line 419 "dhcp6_parser.cc" // lalr1.cc:672
419 break;
420
421 case 191: // value
422
423#line 248 "dhcp6_parser.yy" // lalr1.cc:672
424 { yyoutput << yysym.value.template as< ElementPtr > (); }
425#line 426 "dhcp6_parser.cc" // lalr1.cc:672
426 break;
427
428 case 195: // map_value
429
430#line 248 "dhcp6_parser.yy" // lalr1.cc:672
431 { yyoutput << yysym.value.template as< ElementPtr > (); }
432#line 433 "dhcp6_parser.cc" // lalr1.cc:672
433 break;
434
435 case 247: // db_type
436
437#line 248 "dhcp6_parser.yy" // lalr1.cc:672
438 { yyoutput << yysym.value.template as< ElementPtr > (); }
439#line 440 "dhcp6_parser.cc" // lalr1.cc:672
440 break;
441
442 case 336: // hr_mode
443
444#line 248 "dhcp6_parser.yy" // lalr1.cc:672
445 { yyoutput << yysym.value.template as< ElementPtr > (); }
446#line 447 "dhcp6_parser.cc" // lalr1.cc:672
447 break;
448
449 case 472: // duid_type
450
451#line 248 "dhcp6_parser.yy" // lalr1.cc:672
452 { yyoutput << yysym.value.template as< ElementPtr > (); }
453#line 454 "dhcp6_parser.cc" // lalr1.cc:672
454 break;
455
456 case 507: // ncr_protocol_value
457
458#line 248 "dhcp6_parser.yy" // lalr1.cc:672
459 { yyoutput << yysym.value.template as< ElementPtr > (); }
460#line 461 "dhcp6_parser.cc" // lalr1.cc:672
461 break;
462
463 case 514: // replace_client_name_value
464
465#line 248 "dhcp6_parser.yy" // lalr1.cc:672
466 { yyoutput << yysym.value.template as< ElementPtr > (); }
467#line 468 "dhcp6_parser.cc" // lalr1.cc:672
468 break;
469
470
471 default:
472 break;
473 }
474 yyo << ')';
475 }
476#endif
477
478 void
479 Dhcp6Parser::yypush_ (const char* m, YY_MOVE_REF (stack_symbol_type) sym)
480 {
481 if (m)
482 YY_SYMBOL_PRINT (m, sym);
483 yystack_.push (YY_MOVE (sym));
484 }
485
486 void
487 Dhcp6Parser::yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym)
488 {
489#if 201103L <= YY_CPLUSPLUS
490 yypush_ (m, stack_symbol_type (s, std::move (sym)));
491#else
492 stack_symbol_type ss (s, sym);
493 yypush_ (m, ss);
494#endif
495 }
496
497 void
498 Dhcp6Parser::yypop_ (int n)
499 {
500 yystack_.pop (n);
501 }
502
503#if PARSER6_DEBUG
504 std::ostream&
505 Dhcp6Parser::debug_stream () const
506 {
507 return *yycdebug_;
508 }
509
510 void
511 Dhcp6Parser::set_debug_stream (std::ostream& o)
512 {
513 yycdebug_ = &o;
514 }
515
516
517 Dhcp6Parser::debug_level_type
518 Dhcp6Parser::debug_level () const
519 {
520 return yydebug_;
521 }
522
523 void
524 Dhcp6Parser::set_debug_level (debug_level_type l)
525 {
526 yydebug_ = l;
527 }
528#endif // PARSER6_DEBUG
529
530 Dhcp6Parser::state_type
531 Dhcp6Parser::yy_lr_goto_state_ (state_type yystate, int yysym)
532 {
533 int yyr = yypgoto_[yysym - yyntokens_] + yystate;
534 if (0 <= yyr && yyr <= yylast_ && yycheck_[yyr] == yystate)
535 return yytable_[yyr];
536 else
537 return yydefgoto_[yysym - yyntokens_];
538 }
539
540 bool
541 Dhcp6Parser::yy_pact_value_is_default_ (int yyvalue)
542 {
543 return yyvalue == yypact_ninf_;
544 }
545
546 bool
547 Dhcp6Parser::yy_table_value_is_error_ (int yyvalue)
548 {
549 return yyvalue == yytable_ninf_;
550 }
551
552 int
554 {
555 return parse ();
556 }
557
558 int
560 {
561 // State.
562 int yyn;
564 int yylen = 0;
565
566 // Error handling.
567 int yynerrs_ = 0;
568 int yyerrstatus_ = 0;
569
571 symbol_type yyla;
572
574 stack_symbol_type yyerror_range[3];
575
577 int yyresult;
578
579#if YY_EXCEPTIONS
580 try
581#endif // YY_EXCEPTIONS
582 {
583 YYCDEBUG << "Starting parse\n";
584
585
586 /* Initialize the stack. The initial state will be set in
587 yynewstate, since the latter expects the semantical and the
588 location values to have been already stored, initialize these
589 stacks with a primary value. */
590 yystack_.clear ();
591 yypush_ (YY_NULLPTR, 0, YY_MOVE (yyla));
592
593 // A new symbol was pushed on the stack.
594 yynewstate:
595 YYCDEBUG << "Entering state " << yystack_[0].state << '\n';
596
597 // Accept?
598 if (yystack_[0].state == yyfinal_)
599 goto yyacceptlab;
600
601 goto yybackup;
602
603 // Backup.
604 yybackup:
605 // Try to take a decision without lookahead.
606 yyn = yypact_[yystack_[0].state];
607 if (yy_pact_value_is_default_ (yyn))
608 goto yydefault;
609
610 // Read a lookahead token.
611 if (yyla.empty ())
612 {
613 YYCDEBUG << "Reading a token: ";
614#if YY_EXCEPTIONS
615 try
616#endif // YY_EXCEPTIONS
617 {
618 symbol_type yylookahead (yylex (ctx));
619 yyla.move (yylookahead);
620 }
621#if YY_EXCEPTIONS
622 catch (const syntax_error& yyexc)
623 {
624 error (yyexc);
625 goto yyerrlab1;
626 }
627#endif // YY_EXCEPTIONS
628 }
629 YY_SYMBOL_PRINT ("Next token is", yyla);
630
631 /* If the proper action on seeing token YYLA.TYPE is to reduce or
632 to detect an error, take that action. */
633 yyn += yyla.type_get ();
634 if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.type_get ())
635 goto yydefault;
636
637 // Reduce or error.
638 yyn = yytable_[yyn];
639 if (yyn <= 0)
640 {
641 if (yy_table_value_is_error_ (yyn))
642 goto yyerrlab;
643 yyn = -yyn;
644 goto yyreduce;
645 }
646
647 // Count tokens shifted since error; after three, turn off error status.
648 if (yyerrstatus_)
649 --yyerrstatus_;
650
651 // Shift the lookahead token.
652 yypush_ ("Shifting", yyn, YY_MOVE (yyla));
653 goto yynewstate;
654
655 /*-----------------------------------------------------------.
656 | yydefault -- do the default action for the current state. |
657 `-----------------------------------------------------------*/
658 yydefault:
659 yyn = yydefact_[yystack_[0].state];
660 if (yyn == 0)
661 goto yyerrlab;
662 goto yyreduce;
663
664 /*-----------------------------.
665 | yyreduce -- Do a reduction. |
666 `-----------------------------*/
667 yyreduce:
668 yylen = yyr2_[yyn];
669 {
670 stack_symbol_type yylhs;
671 yylhs.state = yy_lr_goto_state_ (yystack_[yylen].state, yyr1_[yyn]);
672 /* Variants are always initialized to an empty instance of the
673 correct type. The default '$$ = $1' action is NOT applied
674 when using variants. */
675 switch (yyr1_[yyn])
676 {
677 case 191: // value
678 case 195: // map_value
679 case 247: // db_type
680 case 336: // hr_mode
681 case 472: // duid_type
682 case 507: // ncr_protocol_value
683 case 514: // replace_client_name_value
684 yylhs.value.emplace< ElementPtr > ();
685 break;
686
687 case 173: // "boolean"
688 yylhs.value.emplace< bool > ();
689 break;
690
691 case 172: // "floating point"
692 yylhs.value.emplace< double > ();
693 break;
694
695 case 171: // "integer"
696 yylhs.value.emplace< int64_t > ();
697 break;
698
699 case 170: // "constant string"
700 yylhs.value.emplace< std::string > ();
701 break;
702
703 default:
704 break;
705 }
706
707
708 // Default location.
709 {
711 YYLLOC_DEFAULT (yylhs.location, slice, yylen);
712 yyerror_range[1].location = yylhs.location;
713 }
714
715 // Perform the reduction.
716 YY_REDUCE_PRINT (yyn);
717#if YY_EXCEPTIONS
718 try
719#endif // YY_EXCEPTIONS
720 {
721 switch (yyn)
722 {
723 case 2:
724#line 257 "dhcp6_parser.yy" // lalr1.cc:907
725 { ctx.ctx_ = ctx.NO_KEYWORD; }
726#line 727 "dhcp6_parser.cc" // lalr1.cc:907
727 break;
728
729 case 4:
730#line 258 "dhcp6_parser.yy" // lalr1.cc:907
731 { ctx.ctx_ = ctx.CONFIG; }
732#line 733 "dhcp6_parser.cc" // lalr1.cc:907
733 break;
734
735 case 6:
736#line 259 "dhcp6_parser.yy" // lalr1.cc:907
737 { ctx.ctx_ = ctx.DHCP6; }
738#line 739 "dhcp6_parser.cc" // lalr1.cc:907
739 break;
740
741 case 8:
742#line 260 "dhcp6_parser.yy" // lalr1.cc:907
743 { ctx.ctx_ = ctx.INTERFACES_CONFIG; }
744#line 745 "dhcp6_parser.cc" // lalr1.cc:907
745 break;
746
747 case 10:
748#line 261 "dhcp6_parser.yy" // lalr1.cc:907
749 { ctx.ctx_ = ctx.SUBNET6; }
750#line 751 "dhcp6_parser.cc" // lalr1.cc:907
751 break;
752
753 case 12:
754#line 262 "dhcp6_parser.yy" // lalr1.cc:907
755 { ctx.ctx_ = ctx.POOLS; }
756#line 757 "dhcp6_parser.cc" // lalr1.cc:907
757 break;
758
759 case 14:
760#line 263 "dhcp6_parser.yy" // lalr1.cc:907
761 { ctx.ctx_ = ctx.PD_POOLS; }
762#line 763 "dhcp6_parser.cc" // lalr1.cc:907
763 break;
764
765 case 16:
766#line 264 "dhcp6_parser.yy" // lalr1.cc:907
767 { ctx.ctx_ = ctx.RESERVATIONS; }
768#line 769 "dhcp6_parser.cc" // lalr1.cc:907
769 break;
770
771 case 18:
772#line 265 "dhcp6_parser.yy" // lalr1.cc:907
773 { ctx.ctx_ = ctx.DHCP6; }
774#line 775 "dhcp6_parser.cc" // lalr1.cc:907
775 break;
776
777 case 20:
778#line 266 "dhcp6_parser.yy" // lalr1.cc:907
779 { ctx.ctx_ = ctx.OPTION_DEF; }
780#line 781 "dhcp6_parser.cc" // lalr1.cc:907
781 break;
782
783 case 22:
784#line 267 "dhcp6_parser.yy" // lalr1.cc:907
785 { ctx.ctx_ = ctx.OPTION_DATA; }
786#line 787 "dhcp6_parser.cc" // lalr1.cc:907
787 break;
788
789 case 24:
790#line 268 "dhcp6_parser.yy" // lalr1.cc:907
791 { ctx.ctx_ = ctx.HOOKS_LIBRARIES; }
792#line 793 "dhcp6_parser.cc" // lalr1.cc:907
793 break;
794
795 case 26:
796#line 269 "dhcp6_parser.yy" // lalr1.cc:907
797 { ctx.ctx_ = ctx.DHCP_DDNS; }
798#line 799 "dhcp6_parser.cc" // lalr1.cc:907
799 break;
800
801 case 28:
802#line 270 "dhcp6_parser.yy" // lalr1.cc:907
803 { ctx.ctx_ = ctx.LOGGING; }
804#line 805 "dhcp6_parser.cc" // lalr1.cc:907
805 break;
806
807 case 30:
808#line 271 "dhcp6_parser.yy" // lalr1.cc:907
809 { ctx.ctx_ = ctx.CONFIG_CONTROL; }
810#line 811 "dhcp6_parser.cc" // lalr1.cc:907
811 break;
812
813 case 32:
814#line 279 "dhcp6_parser.yy" // lalr1.cc:907
815 { yylhs.value.as< ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); }
816#line 817 "dhcp6_parser.cc" // lalr1.cc:907
817 break;
818
819 case 33:
820#line 280 "dhcp6_parser.yy" // lalr1.cc:907
821 { yylhs.value.as< ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as< double > (), ctx.loc2pos(yystack_[0].location))); }
822#line 823 "dhcp6_parser.cc" // lalr1.cc:907
823 break;
824
825 case 34:
826#line 281 "dhcp6_parser.yy" // lalr1.cc:907
827 { yylhs.value.as< ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); }
828#line 829 "dhcp6_parser.cc" // lalr1.cc:907
829 break;
830
831 case 35:
832#line 282 "dhcp6_parser.yy" // lalr1.cc:907
833 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); }
834#line 835 "dhcp6_parser.cc" // lalr1.cc:907
835 break;
836
837 case 36:
838#line 283 "dhcp6_parser.yy" // lalr1.cc:907
839 { yylhs.value.as< ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
840#line 841 "dhcp6_parser.cc" // lalr1.cc:907
841 break;
842
843 case 37:
844#line 284 "dhcp6_parser.yy" // lalr1.cc:907
845 { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
846#line 847 "dhcp6_parser.cc" // lalr1.cc:907
847 break;
848
849 case 38:
850#line 285 "dhcp6_parser.yy" // lalr1.cc:907
851 { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
852#line 853 "dhcp6_parser.cc" // lalr1.cc:907
853 break;
854
855 case 39:
856#line 288 "dhcp6_parser.yy" // lalr1.cc:907
857 {
858 // Push back the JSON value on the stack
859 ctx.stack_.push_back(yystack_[0].value.as< ElementPtr > ());
860}
861#line 862 "dhcp6_parser.cc" // lalr1.cc:907
862 break;
863
864 case 40:
865#line 293 "dhcp6_parser.yy" // lalr1.cc:907
866 {
867 // This code is executed when we're about to start parsing
868 // the content of the map
869 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
870 ctx.stack_.push_back(m);
871}
872#line 873 "dhcp6_parser.cc" // lalr1.cc:907
873 break;
874
875 case 41:
876#line 298 "dhcp6_parser.yy" // lalr1.cc:907
877 {
878 // map parsing completed. If we ever want to do any wrap up
879 // (maybe some sanity checking), this would be the best place
880 // for it.
881}
882#line 883 "dhcp6_parser.cc" // lalr1.cc:907
883 break;
884
885 case 42:
886#line 304 "dhcp6_parser.yy" // lalr1.cc:907
887 { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
888#line 889 "dhcp6_parser.cc" // lalr1.cc:907
889 break;
890
891 case 45:
892#line 311 "dhcp6_parser.yy" // lalr1.cc:907
893 {
894 // map containing a single entry
895 ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ());
896 }
897#line 898 "dhcp6_parser.cc" // lalr1.cc:907
898 break;
899
900 case 46:
901#line 315 "dhcp6_parser.yy" // lalr1.cc:907
902 {
903 // map consisting of a shorter map followed by
904 // comma and string:value
905 ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ());
906 }
907#line 908 "dhcp6_parser.cc" // lalr1.cc:907
908 break;
909
910 case 47:
911#line 322 "dhcp6_parser.yy" // lalr1.cc:907
912 {
913 ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
914 ctx.stack_.push_back(l);
915}
916#line 917 "dhcp6_parser.cc" // lalr1.cc:907
917 break;
918
919 case 48:
920#line 325 "dhcp6_parser.yy" // lalr1.cc:907
921 {
922 // list parsing complete. Put any sanity checking here
923}
924#line 925 "dhcp6_parser.cc" // lalr1.cc:907
925 break;
926
927 case 51:
928#line 333 "dhcp6_parser.yy" // lalr1.cc:907
929 {
930 // List consisting of a single element.
931 ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
932 }
933#line 934 "dhcp6_parser.cc" // lalr1.cc:907
934 break;
935
936 case 52:
937#line 337 "dhcp6_parser.yy" // lalr1.cc:907
938 {
939 // List ending with , and a value.
940 ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
941 }
942#line 943 "dhcp6_parser.cc" // lalr1.cc:907
943 break;
944
945 case 53:
946#line 344 "dhcp6_parser.yy" // lalr1.cc:907
947 {
948 // List parsing about to start
949}
950#line 951 "dhcp6_parser.cc" // lalr1.cc:907
951 break;
952
953 case 54:
954#line 346 "dhcp6_parser.yy" // lalr1.cc:907
955 {
956 // list parsing complete. Put any sanity checking here
957 //ctx.stack_.pop_back();
958}
959#line 960 "dhcp6_parser.cc" // lalr1.cc:907
960 break;
961
962 case 57:
963#line 355 "dhcp6_parser.yy" // lalr1.cc:907
964 {
965 ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
966 ctx.stack_.back()->add(s);
967 }
968#line 969 "dhcp6_parser.cc" // lalr1.cc:907
969 break;
970
971 case 58:
972#line 359 "dhcp6_parser.yy" // lalr1.cc:907
973 {
974 ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
975 ctx.stack_.back()->add(s);
976 }
977#line 978 "dhcp6_parser.cc" // lalr1.cc:907
978 break;
979
980 case 59:
981#line 370 "dhcp6_parser.yy" // lalr1.cc:907
982 {
983 const std::string& where = ctx.contextName();
984 const std::string& keyword = yystack_[1].value.as< std::string > ();
985 error(yystack_[1].location,
986 "got unexpected keyword \"" + keyword + "\" in " + where + " map.");
987}
988#line 989 "dhcp6_parser.cc" // lalr1.cc:907
989 break;
990
991 case 60:
992#line 380 "dhcp6_parser.yy" // lalr1.cc:907
993 {
994 // This code is executed when we're about to start parsing
995 // the content of the map
996 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
997 ctx.stack_.push_back(m);
998}
999#line 1000 "dhcp6_parser.cc" // lalr1.cc:907
1000 break;
1001
1002 case 61:
1003#line 385 "dhcp6_parser.yy" // lalr1.cc:907
1004 {
1005 // map parsing completed. If we ever want to do any wrap up
1006 // (maybe some sanity checking), this would be the best place
1007 // for it.
1008
1009 // Dhcp6 is required
1010 ctx.require("Dhcp6", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
1011}
1012#line 1013 "dhcp6_parser.cc" // lalr1.cc:907
1013 break;
1014
1015 case 70:
1016#line 408 "dhcp6_parser.yy" // lalr1.cc:907
1017 {
1018 // This code is executed when we're about to start parsing
1019 // the content of the map
1020 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
1021 ctx.stack_.back()->set("Dhcp6", m);
1022 ctx.stack_.push_back(m);
1023 ctx.enter(ctx.DHCP6);
1024}
1025#line 1026 "dhcp6_parser.cc" // lalr1.cc:907
1026 break;
1027
1028 case 71:
1029#line 415 "dhcp6_parser.yy" // lalr1.cc:907
1030 {
1031 // No global parameter is required
1032 ctx.stack_.pop_back();
1033 ctx.leave();
1034}
1035#line 1036 "dhcp6_parser.cc" // lalr1.cc:907
1036 break;
1037
1038 case 72:
1039#line 423 "dhcp6_parser.yy" // lalr1.cc:907
1040 {
1041 // Parse the Dhcp6 map
1042 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
1043 ctx.stack_.push_back(m);
1044}
1045#line 1046 "dhcp6_parser.cc" // lalr1.cc:907
1046 break;
1047
1048 case 73:
1049#line 427 "dhcp6_parser.yy" // lalr1.cc:907
1050 {
1051 // No global parameter is required
1052 // parsing completed
1053}
1054#line 1055 "dhcp6_parser.cc" // lalr1.cc:907
1055 break;
1056
1057 case 108:
1058#line 472 "dhcp6_parser.yy" // lalr1.cc:907
1059 {
1060 ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
1061 ctx.stack_.back()->set("preferred-lifetime", prf);
1062}
1063#line 1064 "dhcp6_parser.cc" // lalr1.cc:907
1064 break;
1065
1066 case 109:
1067#line 477 "dhcp6_parser.yy" // lalr1.cc:907
1068 {
1069 ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
1070 ctx.stack_.back()->set("valid-lifetime", prf);
1071}
1072#line 1073 "dhcp6_parser.cc" // lalr1.cc:907
1073 break;
1074
1075 case 110:
1076#line 482 "dhcp6_parser.yy" // lalr1.cc:907
1077 {
1078 ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
1079 ctx.stack_.back()->set("renew-timer", prf);
1080}
1081#line 1082 "dhcp6_parser.cc" // lalr1.cc:907
1082 break;
1083
1084 case 111:
1085#line 487 "dhcp6_parser.yy" // lalr1.cc:907
1086 {
1087 ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
1088 ctx.stack_.back()->set("rebind-timer", prf);
1089}
1090#line 1091 "dhcp6_parser.cc" // lalr1.cc:907
1091 break;
1092
1093 case 112:
1094#line 492 "dhcp6_parser.yy" // lalr1.cc:907
1095 {
1096 ElementPtr dpp(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
1097 ctx.stack_.back()->set("decline-probation-period", dpp);
1098}
1099#line 1100 "dhcp6_parser.cc" // lalr1.cc:907
1100 break;
1101
1102 case 113:
1103#line 497 "dhcp6_parser.yy" // lalr1.cc:907
1104 {
1105 ctx.enter(ctx.NO_KEYWORD);
1106}
1107#line 1108 "dhcp6_parser.cc" // lalr1.cc:907
1108 break;
1109
1110 case 114:
1111#line 499 "dhcp6_parser.yy" // lalr1.cc:907
1112 {
1113 ElementPtr stag(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
1114 ctx.stack_.back()->set("server-tag", stag);
1115 ctx.leave();
1116}
1117#line 1118 "dhcp6_parser.cc" // lalr1.cc:907
1118 break;
1119
1120 case 115:
1121#line 505 "dhcp6_parser.yy" // lalr1.cc:907
1122 {
1123 ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
1124 ctx.stack_.back()->set("interfaces-config", i);
1125 ctx.stack_.push_back(i);
1126 ctx.enter(ctx.INTERFACES_CONFIG);
1127}
1128#line 1129 "dhcp6_parser.cc" // lalr1.cc:907
1129 break;
1130
1131 case 116:
1132#line 510 "dhcp6_parser.yy" // lalr1.cc:907
1133 {
1134 // No interfaces config param is required
1135 ctx.stack_.pop_back();
1136 ctx.leave();
1137}
1138#line 1139 "dhcp6_parser.cc" // lalr1.cc:907
1139 break;
1140
1141 case 117:
1142#line 516 "dhcp6_parser.yy" // lalr1.cc:907
1143 {
1144 // Parse the interfaces-config map
1145 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
1146 ctx.stack_.push_back(m);
1147}
1148#line 1149 "dhcp6_parser.cc" // lalr1.cc:907
1149 break;
1150
1151 case 118:
1152#line 520 "dhcp6_parser.yy" // lalr1.cc:907
1153 {
1154 // No interfaces config param is required
1155 // parsing completed
1156}
1157#line 1158 "dhcp6_parser.cc" // lalr1.cc:907
1158 break;
1159
1160 case 126:
1161#line 536 "dhcp6_parser.yy" // lalr1.cc:907
1162 {
1163 ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
1164 ctx.stack_.back()->set("interfaces", l);
1165 ctx.stack_.push_back(l);
1166 ctx.enter(ctx.NO_KEYWORD);
1167}
1168#line 1169 "dhcp6_parser.cc" // lalr1.cc:907
1169 break;
1170
1171 case 127:
1172#line 541 "dhcp6_parser.yy" // lalr1.cc:907
1173 {
1174 ctx.stack_.pop_back();
1175 ctx.leave();
1176}
1177#line 1178 "dhcp6_parser.cc" // lalr1.cc:907
1178 break;
1179
1180 case 128:
1181#line 546 "dhcp6_parser.yy" // lalr1.cc:907
1182 {
1183 ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
1184 ctx.stack_.back()->set("re-detect", b);
1185}
1186#line 1187 "dhcp6_parser.cc" // lalr1.cc:907
1187 break;
1188
1189 case 129:
1190#line 552 "dhcp6_parser.yy" // lalr1.cc:907
1191 {
1192 ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
1193 ctx.stack_.back()->set("lease-database", i);
1194 ctx.stack_.push_back(i);
1195 ctx.enter(ctx.LEASE_DATABASE);
1196}
1197#line 1198 "dhcp6_parser.cc" // lalr1.cc:907
1198 break;
1199
1200 case 130:
1201#line 557 "dhcp6_parser.yy" // lalr1.cc:907
1202 {
1203 // The type parameter is required
1204 ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
1205 ctx.stack_.pop_back();
1206 ctx.leave();
1207}
1208#line 1209 "dhcp6_parser.cc" // lalr1.cc:907
1209 break;
1210
1211 case 131:
1212#line 564 "dhcp6_parser.yy" // lalr1.cc:907
1213 {
1214 ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
1215 ctx.stack_.back()->set("hosts-database", i);
1216 ctx.stack_.push_back(i);
1217 ctx.enter(ctx.HOSTS_DATABASE);
1218}
1219#line 1220 "dhcp6_parser.cc" // lalr1.cc:907
1220 break;
1221
1222 case 132:
1223#line 569 "dhcp6_parser.yy" // lalr1.cc:907
1224 {
1225 // The type parameter is required
1226 ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
1227 ctx.stack_.pop_back();
1228 ctx.leave();
1229}
1230#line 1231 "dhcp6_parser.cc" // lalr1.cc:907
1231 break;
1232
1233 case 133:
1234#line 576 "dhcp6_parser.yy" // lalr1.cc:907
1235 {
1236 ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
1237 ctx.stack_.back()->set("hosts-databases", l);
1238 ctx.stack_.push_back(l);
1239 ctx.enter(ctx.HOSTS_DATABASE);
1240}
1241#line 1242 "dhcp6_parser.cc" // lalr1.cc:907
1242 break;
1243
1244 case 134:
1245#line 581 "dhcp6_parser.yy" // lalr1.cc:907
1246 {
1247 ctx.stack_.pop_back();
1248 ctx.leave();
1249}
1250#line 1251 "dhcp6_parser.cc" // lalr1.cc:907
1251 break;
1252
1253 case 139:
1254#line 594 "dhcp6_parser.yy" // lalr1.cc:907
1255 {
1256 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
1257 ctx.stack_.back()->add(m);
1258 ctx.stack_.push_back(m);
1259}
1260#line 1261 "dhcp6_parser.cc" // lalr1.cc:907
1261 break;
1262
1263 case 140:
1264#line 598 "dhcp6_parser.yy" // lalr1.cc:907
1265 {
1266 // The type parameter is required
1267 ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
1268 ctx.stack_.pop_back();
1269}
1270#line 1271 "dhcp6_parser.cc" // lalr1.cc:907
1271 break;
1272
1273 case 161:
1274#line 628 "dhcp6_parser.yy" // lalr1.cc:907
1275 {
1276 ctx.enter(ctx.DATABASE_TYPE);
1277}
1278#line 1279 "dhcp6_parser.cc" // lalr1.cc:907
1279 break;
1280
1281 case 162:
1282#line 630 "dhcp6_parser.yy" // lalr1.cc:907
1283 {
1284 ctx.stack_.back()->set("type", yystack_[0].value.as< ElementPtr > ());
1285 ctx.leave();
1286}
1287#line 1288 "dhcp6_parser.cc" // lalr1.cc:907
1288 break;
1289
1290 case 163:
1291#line 635 "dhcp6_parser.yy" // lalr1.cc:907
1292 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("memfile", ctx.loc2pos(yystack_[0].location))); }
1293#line 1294 "dhcp6_parser.cc" // lalr1.cc:907
1294 break;
1295
1296 case 164:
1297#line 636 "dhcp6_parser.yy" // lalr1.cc:907
1298 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("mysql", ctx.loc2pos(yystack_[0].location))); }
1299#line 1300 "dhcp6_parser.cc" // lalr1.cc:907
1300 break;
1301
1302 case 165:
1303#line 637 "dhcp6_parser.yy" // lalr1.cc:907
1304 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("postgresql", ctx.loc2pos(yystack_[0].location))); }
1305#line 1306 "dhcp6_parser.cc" // lalr1.cc:907
1306 break;
1307
1308 case 166:
1309#line 638 "dhcp6_parser.yy" // lalr1.cc:907
1310 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("cql", ctx.loc2pos(yystack_[0].location))); }
1311#line 1312 "dhcp6_parser.cc" // lalr1.cc:907
1312 break;
1313
1314 case 167:
1315#line 641 "dhcp6_parser.yy" // lalr1.cc:907
1316 {
1317 ctx.enter(ctx.NO_KEYWORD);
1318}
1319#line 1320 "dhcp6_parser.cc" // lalr1.cc:907
1320 break;
1321
1322 case 168:
1323#line 643 "dhcp6_parser.yy" // lalr1.cc:907
1324 {
1325 ElementPtr user(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
1326 ctx.stack_.back()->set("user", user);
1327 ctx.leave();
1328}
1329#line 1330 "dhcp6_parser.cc" // lalr1.cc:907
1330 break;
1331
1332 case 169:
1333#line 649 "dhcp6_parser.yy" // lalr1.cc:907
1334 {
1335 ctx.enter(ctx.NO_KEYWORD);
1336}
1337#line 1338 "dhcp6_parser.cc" // lalr1.cc:907
1338 break;
1339
1340 case 170:
1341#line 651 "dhcp6_parser.yy" // lalr1.cc:907
1342 {
1343 ElementPtr pwd(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
1344 ctx.stack_.back()->set("password", pwd);
1345 ctx.leave();
1346}
1347#line 1348 "dhcp6_parser.cc" // lalr1.cc:907
1348 break;
1349
1350 case 171:
1351#line 657 "dhcp6_parser.yy" // lalr1.cc:907
1352 {
1353 ctx.enter(ctx.NO_KEYWORD);
1354}
1355#line 1356 "dhcp6_parser.cc" // lalr1.cc:907
1356 break;
1357
1358 case 172:
1359#line 659 "dhcp6_parser.yy" // lalr1.cc:907
1360 {
1361 ElementPtr h(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
1362 ctx.stack_.back()->set("host", h);
1363 ctx.leave();
1364}
1365#line 1366 "dhcp6_parser.cc" // lalr1.cc:907
1366 break;
1367
1368 case 173:
1369#line 665 "dhcp6_parser.yy" // lalr1.cc:907
1370 {
1371 ElementPtr p(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
1372 ctx.stack_.back()->set("port", p);
1373}
1374#line 1375 "dhcp6_parser.cc" // lalr1.cc:907
1375 break;
1376
1377 case 174:
1378#line 670 "dhcp6_parser.yy" // lalr1.cc:907
1379 {
1380 ctx.enter(ctx.NO_KEYWORD);
1381}
1382#line 1383 "dhcp6_parser.cc" // lalr1.cc:907
1383 break;
1384
1385 case 175:
1386#line 672 "dhcp6_parser.yy" // lalr1.cc:907
1387 {
1388 ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
1389 ctx.stack_.back()->set("name", name);
1390 ctx.leave();
1391}
1392#line 1393 "dhcp6_parser.cc" // lalr1.cc:907
1393 break;
1394
1395 case 176:
1396#line 678 "dhcp6_parser.yy" // lalr1.cc:907
1397 {
1398 ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
1399 ctx.stack_.back()->set("persist", n);
1400}
1401#line 1402 "dhcp6_parser.cc" // lalr1.cc:907
1402 break;
1403
1404 case 177:
1405#line 683 "dhcp6_parser.yy" // lalr1.cc:907
1406 {
1407 ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
1408 ctx.stack_.back()->set("lfc-interval", n);
1409}
1410#line 1411 "dhcp6_parser.cc" // lalr1.cc:907
1411 break;
1412
1413 case 178:
1414#line 688 "dhcp6_parser.yy" // lalr1.cc:907
1415 {
1416 ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
1417 ctx.stack_.back()->set("readonly", n);
1418}
1419#line 1420 "dhcp6_parser.cc" // lalr1.cc:907
1420 break;
1421
1422 case 179:
1423#line 693 "dhcp6_parser.yy" // lalr1.cc:907
1424 {
1425 ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
1426 ctx.stack_.back()->set("connect-timeout", n);
1427}
1428#line 1429 "dhcp6_parser.cc" // lalr1.cc:907
1429 break;
1430
1431 case 180:
1432#line 698 "dhcp6_parser.yy" // lalr1.cc:907
1433 {
1434 ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
1435 ctx.stack_.back()->set("reconnect-wait-time", n);
1436}
1437#line 1438 "dhcp6_parser.cc" // lalr1.cc:907
1438 break;
1439
1440 case 181:
1441#line 703 "dhcp6_parser.yy" // lalr1.cc:907
1442 {
1443 ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
1444 ctx.stack_.back()->set("request-timeout", n);
1445}
1446#line 1447 "dhcp6_parser.cc" // lalr1.cc:907
1447 break;
1448
1449 case 182:
1450#line 708 "dhcp6_parser.yy" // lalr1.cc:907
1451 {
1452 ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
1453 ctx.stack_.back()->set("tcp-keepalive", n);
1454}
1455#line 1456 "dhcp6_parser.cc" // lalr1.cc:907
1456 break;
1457
1458 case 183:
1459#line 713 "dhcp6_parser.yy" // lalr1.cc:907
1460 {
1461 ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
1462 ctx.stack_.back()->set("tcp-nodelay", n);
1463}
1464#line 1465 "dhcp6_parser.cc" // lalr1.cc:907
1465 break;
1466
1467 case 184:
1468#line 718 "dhcp6_parser.yy" // lalr1.cc:907
1469 {
1470 ctx.enter(ctx.NO_KEYWORD);
1471}
1472#line 1473 "dhcp6_parser.cc" // lalr1.cc:907
1473 break;
1474
1475 case 185:
1476#line 720 "dhcp6_parser.yy" // lalr1.cc:907
1477 {
1478 ElementPtr cp(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
1479 ctx.stack_.back()->set("contact-points", cp);
1480 ctx.leave();
1481}
1482#line 1483 "dhcp6_parser.cc" // lalr1.cc:907
1483 break;
1484
1485 case 186:
1486#line 726 "dhcp6_parser.yy" // lalr1.cc:907
1487 {
1488 ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
1489 ctx.stack_.back()->set("max-reconnect-tries", n);
1490}
1491#line 1492 "dhcp6_parser.cc" // lalr1.cc:907
1492 break;
1493
1494 case 187:
1495#line 731 "dhcp6_parser.yy" // lalr1.cc:907
1496 {
1497 ctx.enter(ctx.NO_KEYWORD);
1498}
1499#line 1500 "dhcp6_parser.cc" // lalr1.cc:907
1500 break;
1501
1502 case 188:
1503#line 733 "dhcp6_parser.yy" // lalr1.cc:907
1504 {
1505 ElementPtr ks(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
1506 ctx.stack_.back()->set("keyspace", ks);
1507 ctx.leave();
1508}
1509#line 1510 "dhcp6_parser.cc" // lalr1.cc:907
1510 break;
1511
1512 case 189:
1513#line 739 "dhcp6_parser.yy" // lalr1.cc:907
1514 {
1515 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
1516 ctx.stack_.back()->set("sanity-checks", m);
1517 ctx.stack_.push_back(m);
1518 ctx.enter(ctx.SANITY_CHECKS);
1519}
1520#line 1521 "dhcp6_parser.cc" // lalr1.cc:907
1521 break;
1522
1523 case 190:
1524#line 744 "dhcp6_parser.yy" // lalr1.cc:907
1525 {
1526 ctx.stack_.pop_back();
1527 ctx.leave();
1528}
1529#line 1530 "dhcp6_parser.cc" // lalr1.cc:907
1530 break;
1531
1532 case 194:
1533#line 754 "dhcp6_parser.yy" // lalr1.cc:907
1534 {
1535 ctx.enter(ctx.NO_KEYWORD);
1536}
1537#line 1538 "dhcp6_parser.cc" // lalr1.cc:907
1538 break;
1539
1540 case 195:
1541#line 756 "dhcp6_parser.yy" // lalr1.cc:907
1542 {
1543
1544 if ( (string(yystack_[0].value.as< std::string > ()) == "none") ||
1545 (string(yystack_[0].value.as< std::string > ()) == "warn") ||
1546 (string(yystack_[0].value.as< std::string > ()) == "fix") ||
1547 (string(yystack_[0].value.as< std::string > ()) == "fix-del") ||
1548 (string(yystack_[0].value.as< std::string > ()) == "del")) {
1549 ElementPtr user(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
1550 ctx.stack_.back()->set("lease-checks", user);
1551 ctx.leave();
1552 } else {
1553 error(yystack_[0].location, "Unsupported 'lease-checks value: " + string(yystack_[0].value.as< std::string > ()) +
1554 ", supported values are: none, warn, fix, fix-del, del");
1555 }
1556}
1557#line 1558 "dhcp6_parser.cc" // lalr1.cc:907
1558 break;
1559
1560 case 196:
1561#line 772 "dhcp6_parser.yy" // lalr1.cc:907
1562 {
1563 ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
1564 ctx.stack_.back()->set("mac-sources", l);
1565 ctx.stack_.push_back(l);
1566 ctx.enter(ctx.MAC_SOURCES);
1567}
1568#line 1569 "dhcp6_parser.cc" // lalr1.cc:907
1569 break;
1570
1571 case 197:
1572#line 777 "dhcp6_parser.yy" // lalr1.cc:907
1573 {
1574 ctx.stack_.pop_back();
1575 ctx.leave();
1576}
1577#line 1578 "dhcp6_parser.cc" // lalr1.cc:907
1578 break;
1579
1580 case 202:
1581#line 790 "dhcp6_parser.yy" // lalr1.cc:907
1582 {
1583 ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location)));
1584 ctx.stack_.back()->add(duid);
1585}
1586#line 1587 "dhcp6_parser.cc" // lalr1.cc:907
1587 break;
1588
1589 case 203:
1590#line 795 "dhcp6_parser.yy" // lalr1.cc:907
1591 {
1592 ElementPtr duid(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
1593 ctx.stack_.back()->add(duid);
1594}
1595#line 1596 "dhcp6_parser.cc" // lalr1.cc:907
1596 break;
1597
1598 case 204:
1599#line 800 "dhcp6_parser.yy" // lalr1.cc:907
1600 {
1601 ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
1602 ctx.stack_.back()->set("host-reservation-identifiers", l);
1603 ctx.stack_.push_back(l);
1605}
1606#line 1607 "dhcp6_parser.cc" // lalr1.cc:907
1607 break;
1608
1609 case 205:
1610#line 805 "dhcp6_parser.yy" // lalr1.cc:907
1611 {
1612 ctx.stack_.pop_back();
1613 ctx.leave();
1614}
1615#line 1616 "dhcp6_parser.cc" // lalr1.cc:907
1616 break;
1617
1618 case 211:
1619#line 819 "dhcp6_parser.yy" // lalr1.cc:907
1620 {
1621 ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location)));
1622 ctx.stack_.back()->add(hwaddr);
1623}
1624#line 1625 "dhcp6_parser.cc" // lalr1.cc:907
1625 break;
1626
1627 case 212:
1628#line 824 "dhcp6_parser.yy" // lalr1.cc:907
1629 {
1630 ElementPtr flex_id(new StringElement("flex-id", ctx.loc2pos(yystack_[0].location)));
1631 ctx.stack_.back()->add(flex_id);
1632}
1633#line 1634 "dhcp6_parser.cc" // lalr1.cc:907
1634 break;
1635
1636 case 213:
1637#line 831 "dhcp6_parser.yy" // lalr1.cc:907
1638 {
1639 ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
1640 ctx.stack_.back()->set("relay-supplied-options", l);
1641 ctx.stack_.push_back(l);
1642 ctx.enter(ctx.NO_KEYWORD);
1643}
1644#line 1645 "dhcp6_parser.cc" // lalr1.cc:907
1645 break;
1646
1647 case 214:
1648#line 836 "dhcp6_parser.yy" // lalr1.cc:907
1649 {
1650 ctx.stack_.pop_back();
1651 ctx.leave();
1652}
1653#line 1654 "dhcp6_parser.cc" // lalr1.cc:907
1654 break;
1655
1656 case 215:
1657#line 841 "dhcp6_parser.yy" // lalr1.cc:907
1658 {
1659 ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
1660 ctx.stack_.back()->set("hooks-libraries", l);
1661 ctx.stack_.push_back(l);
1662 ctx.enter(ctx.HOOKS_LIBRARIES);
1663}
1664#line 1665 "dhcp6_parser.cc" // lalr1.cc:907
1665 break;
1666
1667 case 216:
1668#line 846 "dhcp6_parser.yy" // lalr1.cc:907
1669 {
1670 ctx.stack_.pop_back();
1671 ctx.leave();
1672}
1673#line 1674 "dhcp6_parser.cc" // lalr1.cc:907
1674 break;
1675
1676 case 221:
1677#line 859 "dhcp6_parser.yy" // lalr1.cc:907
1678 {
1679 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
1680 ctx.stack_.back()->add(m);
1681 ctx.stack_.push_back(m);
1682}
1683#line 1684 "dhcp6_parser.cc" // lalr1.cc:907
1684 break;
1685
1686 case 222:
1687#line 863 "dhcp6_parser.yy" // lalr1.cc:907
1688 {
1689 // The library hooks parameter is required
1690 ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
1691 ctx.stack_.pop_back();
1692}
1693#line 1694 "dhcp6_parser.cc" // lalr1.cc:907
1694 break;
1695
1696 case 223:
1697#line 869 "dhcp6_parser.yy" // lalr1.cc:907
1698 {
1699 // Parse the hooks-libraries list entry map
1700 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
1701 ctx.stack_.push_back(m);
1702}
1703#line 1704 "dhcp6_parser.cc" // lalr1.cc:907
1704 break;
1705
1706 case 224:
1707#line 873 "dhcp6_parser.yy" // lalr1.cc:907
1708 {
1709 // The library hooks parameter is required
1710 ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
1711 // parsing completed
1712}
1713#line 1714 "dhcp6_parser.cc" // lalr1.cc:907
1714 break;
1715
1716 case 230:
1717#line 888 "dhcp6_parser.yy" // lalr1.cc:907
1718 {
1719 ctx.enter(ctx.NO_KEYWORD);
1720}
1721#line 1722 "dhcp6_parser.cc" // lalr1.cc:907
1722 break;
1723
1724 case 231:
1725#line 890 "dhcp6_parser.yy" // lalr1.cc:907
1726 {
1727 ElementPtr lib(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
1728 ctx.stack_.back()->set("library", lib);
1729 ctx.leave();
1730}
1731#line 1732 "dhcp6_parser.cc" // lalr1.cc:907
1732 break;
1733
1734 case 232:
1735#line 896 "dhcp6_parser.yy" // lalr1.cc:907
1736 {
1737 ctx.enter(ctx.NO_KEYWORD);
1738}
1739#line 1740 "dhcp6_parser.cc" // lalr1.cc:907
1740 break;
1741
1742 case 233:
1743#line 898 "dhcp6_parser.yy" // lalr1.cc:907
1744 {
1745 ctx.stack_.back()->set("parameters", yystack_[0].value.as< ElementPtr > ());
1746 ctx.leave();
1747}
1748#line 1749 "dhcp6_parser.cc" // lalr1.cc:907
1749 break;
1750
1751 case 234:
1752#line 904 "dhcp6_parser.yy" // lalr1.cc:907
1753 {
1754 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
1755 ctx.stack_.back()->set("expired-leases-processing", m);
1756 ctx.stack_.push_back(m);
1758}
1759#line 1760 "dhcp6_parser.cc" // lalr1.cc:907
1760 break;
1761
1762 case 235:
1763#line 909 "dhcp6_parser.yy" // lalr1.cc:907
1764 {
1765 // No expired lease parameter is required
1766 ctx.stack_.pop_back();
1767 ctx.leave();
1768}
1769#line 1770 "dhcp6_parser.cc" // lalr1.cc:907
1770 break;
1771
1772 case 244:
1773#line 927 "dhcp6_parser.yy" // lalr1.cc:907
1774 {
1775 ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
1776 ctx.stack_.back()->set("reclaim-timer-wait-time", value);
1777}
1778#line 1779 "dhcp6_parser.cc" // lalr1.cc:907
1779 break;
1780
1781 case 245:
1782#line 932 "dhcp6_parser.yy" // lalr1.cc:907
1783 {
1784 ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
1785 ctx.stack_.back()->set("flush-reclaimed-timer-wait-time", value);
1786}
1787#line 1788 "dhcp6_parser.cc" // lalr1.cc:907
1788 break;
1789
1790 case 246:
1791#line 937 "dhcp6_parser.yy" // lalr1.cc:907
1792 {
1793 ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
1794 ctx.stack_.back()->set("hold-reclaimed-time", value);
1795}
1796#line 1797 "dhcp6_parser.cc" // lalr1.cc:907
1797 break;
1798
1799 case 247:
1800#line 942 "dhcp6_parser.yy" // lalr1.cc:907
1801 {
1802 ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
1803 ctx.stack_.back()->set("max-reclaim-leases", value);
1804}
1805#line 1806 "dhcp6_parser.cc" // lalr1.cc:907
1806 break;
1807
1808 case 248:
1809#line 947 "dhcp6_parser.yy" // lalr1.cc:907
1810 {
1811 ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
1812 ctx.stack_.back()->set("max-reclaim-time", value);
1813}
1814#line 1815 "dhcp6_parser.cc" // lalr1.cc:907
1815 break;
1816
1817 case 249:
1818#line 952 "dhcp6_parser.yy" // lalr1.cc:907
1819 {
1820 ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
1821 ctx.stack_.back()->set("unwarned-reclaim-cycles", value);
1822}
1823#line 1824 "dhcp6_parser.cc" // lalr1.cc:907
1824 break;
1825
1826 case 250:
1827#line 960 "dhcp6_parser.yy" // lalr1.cc:907
1828 {
1829 ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
1830 ctx.stack_.back()->set("subnet6", l);
1831 ctx.stack_.push_back(l);
1832 ctx.enter(ctx.SUBNET6);
1833}
1834#line 1835 "dhcp6_parser.cc" // lalr1.cc:907
1835 break;
1836
1837 case 251:
1838#line 965 "dhcp6_parser.yy" // lalr1.cc:907
1839 {
1840 ctx.stack_.pop_back();
1841 ctx.leave();
1842}
1843#line 1844 "dhcp6_parser.cc" // lalr1.cc:907
1844 break;
1845
1846 case 256:
1847#line 985 "dhcp6_parser.yy" // lalr1.cc:907
1848 {
1849 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
1850 ctx.stack_.back()->add(m);
1851 ctx.stack_.push_back(m);
1852}
1853#line 1854 "dhcp6_parser.cc" // lalr1.cc:907
1854 break;
1855
1856 case 257:
1857#line 989 "dhcp6_parser.yy" // lalr1.cc:907
1858 {
1859 // Once we reached this place, the subnet parsing is now complete.
1860 // If we want to, we can implement default values here.
1861 // In particular we can do things like this:
1862 // if (!ctx.stack_.back()->get("interface")) {
1863 // ctx.stack_.back()->set("interface", StringElement("loopback"));
1864 // }
1865 //
1866 // We can also stack up one level (Dhcp6) and copy over whatever
1867 // global parameters we want to:
1868 // if (!ctx.stack_.back()->get("renew-timer")) {
1869 // ElementPtr renew = ctx_stack_[...].get("renew-timer");
1870 // if (renew) {
1871 // ctx.stack_.back()->set("renew-timer", renew);
1872 // }
1873 // }
1874
1875 // The subnet subnet6 parameter is required
1876 ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
1877 ctx.stack_.pop_back();
1878}
1879#line 1880 "dhcp6_parser.cc" // lalr1.cc:907
1880 break;
1881
1882 case 258:
1883#line 1011 "dhcp6_parser.yy" // lalr1.cc:907
1884 {
1885 // Parse the subnet6 list entry map
1886 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
1887 ctx.stack_.push_back(m);
1888}
1889#line 1890 "dhcp6_parser.cc" // lalr1.cc:907
1890 break;
1891
1892 case 259:
1893#line 1015 "dhcp6_parser.yy" // lalr1.cc:907
1894 {
1895 // The subnet subnet6 parameter is required
1896 ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
1897 // parsing completed
1898}
1899#line 1900 "dhcp6_parser.cc" // lalr1.cc:907
1900 break;
1901
1902 case 282:
1903#line 1049 "dhcp6_parser.yy" // lalr1.cc:907
1904 {
1905 ctx.enter(ctx.NO_KEYWORD);
1906}
1907#line 1908 "dhcp6_parser.cc" // lalr1.cc:907
1908 break;
1909
1910 case 283:
1911#line 1051 "dhcp6_parser.yy" // lalr1.cc:907
1912 {
1913 ElementPtr subnet(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
1914 ctx.stack_.back()->set("subnet", subnet);
1915 ctx.leave();
1916}
1917#line 1918 "dhcp6_parser.cc" // lalr1.cc:907
1918 break;
1919
1920 case 284:
1921#line 1057 "dhcp6_parser.yy" // lalr1.cc:907
1922 {
1923 ctx.enter(ctx.NO_KEYWORD);
1924}
1925#line 1926 "dhcp6_parser.cc" // lalr1.cc:907
1926 break;
1927
1928 case 285:
1929#line 1059 "dhcp6_parser.yy" // lalr1.cc:907
1930 {
1931 ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
1932 ctx.stack_.back()->set("interface", iface);
1933 ctx.leave();
1934}
1935#line 1936 "dhcp6_parser.cc" // lalr1.cc:907
1936 break;
1937
1938 case 286:
1939#line 1065 "dhcp6_parser.yy" // lalr1.cc:907
1940 {
1941 ctx.enter(ctx.NO_KEYWORD);
1942}
1943#line 1944 "dhcp6_parser.cc" // lalr1.cc:907
1944 break;
1945
1946 case 287:
1947#line 1067 "dhcp6_parser.yy" // lalr1.cc:907
1948 {
1949 ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
1950 ctx.stack_.back()->set("interface-id", iface);
1951 ctx.leave();
1952}
1953#line 1954 "dhcp6_parser.cc" // lalr1.cc:907
1954 break;
1955
1956 case 288:
1957#line 1073 "dhcp6_parser.yy" // lalr1.cc:907
1958 {
1959 ctx.enter(ctx.NO_KEYWORD);
1960}
1961#line 1962 "dhcp6_parser.cc" // lalr1.cc:907
1962 break;
1963
1964 case 289:
1965#line 1075 "dhcp6_parser.yy" // lalr1.cc:907
1966 {
1967 ElementPtr cls(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
1968 ctx.stack_.back()->set("client-class", cls);
1969 ctx.leave();
1970}
1971#line 1972 "dhcp6_parser.cc" // lalr1.cc:907
1972 break;
1973
1974 case 290:
1975#line 1081 "dhcp6_parser.yy" // lalr1.cc:907
1976 {
1977 ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
1978 ctx.stack_.back()->set("require-client-classes", c);
1979 ctx.stack_.push_back(c);
1980 ctx.enter(ctx.NO_KEYWORD);
1981}
1982#line 1983 "dhcp6_parser.cc" // lalr1.cc:907
1983 break;
1984
1985 case 291:
1986#line 1086 "dhcp6_parser.yy" // lalr1.cc:907
1987 {
1988 ctx.stack_.pop_back();
1989 ctx.leave();
1990}
1991#line 1992 "dhcp6_parser.cc" // lalr1.cc:907
1992 break;
1993
1994 case 292:
1995#line 1091 "dhcp6_parser.yy" // lalr1.cc:907
1996 {
1997 ctx.enter(ctx.RESERVATION_MODE);
1998}
1999#line 2000 "dhcp6_parser.cc" // lalr1.cc:907
2000 break;
2001
2002 case 293:
2003#line 1093 "dhcp6_parser.yy" // lalr1.cc:907
2004 {
2005 ctx.stack_.back()->set("reservation-mode", yystack_[0].value.as< ElementPtr > ());
2006 ctx.leave();
2007}
2008#line 2009 "dhcp6_parser.cc" // lalr1.cc:907
2009 break;
2010
2011 case 294:
2012#line 1098 "dhcp6_parser.yy" // lalr1.cc:907
2013 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("disabled", ctx.loc2pos(yystack_[0].location))); }
2014#line 2015 "dhcp6_parser.cc" // lalr1.cc:907
2015 break;
2016
2017 case 295:
2018#line 1099 "dhcp6_parser.yy" // lalr1.cc:907
2019 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(yystack_[0].location))); }
2020#line 2021 "dhcp6_parser.cc" // lalr1.cc:907
2021 break;
2022
2023 case 296:
2024#line 1100 "dhcp6_parser.yy" // lalr1.cc:907
2025 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("global", ctx.loc2pos(yystack_[0].location))); }
2026#line 2027 "dhcp6_parser.cc" // lalr1.cc:907
2027 break;
2028
2029 case 297:
2030#line 1101 "dhcp6_parser.yy" // lalr1.cc:907
2031 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("all", ctx.loc2pos(yystack_[0].location))); }
2032#line 2033 "dhcp6_parser.cc" // lalr1.cc:907
2033 break;
2034
2035 case 298:
2036#line 1104 "dhcp6_parser.yy" // lalr1.cc:907
2037 {
2038 ElementPtr id(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
2039 ctx.stack_.back()->set("id", id);
2040}
2041#line 2042 "dhcp6_parser.cc" // lalr1.cc:907
2042 break;
2043
2044 case 299:
2045#line 1109 "dhcp6_parser.yy" // lalr1.cc:907
2046 {
2047 ElementPtr rc(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
2048 ctx.stack_.back()->set("rapid-commit", rc);
2049}
2050#line 2051 "dhcp6_parser.cc" // lalr1.cc:907
2051 break;
2052
2053 case 300:
2054#line 1117 "dhcp6_parser.yy" // lalr1.cc:907
2055 {
2056 ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
2057 ctx.stack_.back()->set("shared-networks", l);
2058 ctx.stack_.push_back(l);
2059 ctx.enter(ctx.SHARED_NETWORK);
2060}
2061#line 2062 "dhcp6_parser.cc" // lalr1.cc:907
2062 break;
2063
2064 case 301:
2065#line 1122 "dhcp6_parser.yy" // lalr1.cc:907
2066 {
2067 ctx.stack_.pop_back();
2068 ctx.leave();
2069}
2070#line 2071 "dhcp6_parser.cc" // lalr1.cc:907
2071 break;
2072
2073 case 306:
2074#line 1137 "dhcp6_parser.yy" // lalr1.cc:907
2075 {
2076 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
2077 ctx.stack_.back()->add(m);
2078 ctx.stack_.push_back(m);
2079}
2080#line 2081 "dhcp6_parser.cc" // lalr1.cc:907
2081 break;
2082
2083 case 307:
2084#line 1141 "dhcp6_parser.yy" // lalr1.cc:907
2085 {
2086 ctx.stack_.pop_back();
2087}
2088#line 2089 "dhcp6_parser.cc" // lalr1.cc:907
2089 break;
2090
2091 case 327:
2092#line 1172 "dhcp6_parser.yy" // lalr1.cc:907
2093 {
2094 ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
2095 ctx.stack_.back()->set("option-def", l);
2096 ctx.stack_.push_back(l);
2097 ctx.enter(ctx.OPTION_DEF);
2098}
2099#line 2100 "dhcp6_parser.cc" // lalr1.cc:907
2100 break;
2101
2102 case 328:
2103#line 1177 "dhcp6_parser.yy" // lalr1.cc:907
2104 {
2105 ctx.stack_.pop_back();
2106 ctx.leave();
2107}
2108#line 2109 "dhcp6_parser.cc" // lalr1.cc:907
2109 break;
2110
2111 case 329:
2112#line 1185 "dhcp6_parser.yy" // lalr1.cc:907
2113 {
2114 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
2115 ctx.stack_.push_back(m);
2116}
2117#line 2118 "dhcp6_parser.cc" // lalr1.cc:907
2118 break;
2119
2120 case 330:
2121#line 1188 "dhcp6_parser.yy" // lalr1.cc:907
2122 {
2123 // parsing completed
2124}
2125#line 2126 "dhcp6_parser.cc" // lalr1.cc:907
2126 break;
2127
2128 case 335:
2129#line 1204 "dhcp6_parser.yy" // lalr1.cc:907
2130 {
2131 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
2132 ctx.stack_.back()->add(m);
2133 ctx.stack_.push_back(m);
2134}
2135#line 2136 "dhcp6_parser.cc" // lalr1.cc:907
2136 break;
2137
2138 case 336:
2139#line 1208 "dhcp6_parser.yy" // lalr1.cc:907
2140 {
2141 // The name, code and type option def parameters are required.
2142 ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
2143 ctx.require("code", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
2144 ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
2145 ctx.stack_.pop_back();
2146}
2147#line 2148 "dhcp6_parser.cc" // lalr1.cc:907
2148 break;
2149
2150 case 337:
2151#line 1219 "dhcp6_parser.yy" // lalr1.cc:907
2152 {
2153 // Parse the option-def list entry map
2154 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
2155 ctx.stack_.push_back(m);
2156}
2157#line 2158 "dhcp6_parser.cc" // lalr1.cc:907
2158 break;
2159
2160 case 338:
2161#line 1223 "dhcp6_parser.yy" // lalr1.cc:907
2162 {
2163 // The name, code and type option def parameters are required.
2164 ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
2165 ctx.require("code", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
2166 ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
2167 // parsing completed
2168}
2169#line 2170 "dhcp6_parser.cc" // lalr1.cc:907
2170 break;
2171
2172 case 354:
2173#line 1255 "dhcp6_parser.yy" // lalr1.cc:907
2174 {
2175 ElementPtr code(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
2176 ctx.stack_.back()->set("code", code);
2177}
2178#line 2179 "dhcp6_parser.cc" // lalr1.cc:907
2179 break;
2180
2181 case 356:
2182#line 1262 "dhcp6_parser.yy" // lalr1.cc:907
2183 {
2184 ctx.enter(ctx.NO_KEYWORD);
2185}
2186#line 2187 "dhcp6_parser.cc" // lalr1.cc:907
2187 break;
2188
2189 case 357:
2190#line 1264 "dhcp6_parser.yy" // lalr1.cc:907
2191 {
2192 ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
2193 ctx.stack_.back()->set("type", prf);
2194 ctx.leave();
2195}
2196#line 2197 "dhcp6_parser.cc" // lalr1.cc:907
2197 break;
2198
2199 case 358:
2200#line 1270 "dhcp6_parser.yy" // lalr1.cc:907
2201 {
2202 ctx.enter(ctx.NO_KEYWORD);
2203}
2204#line 2205 "dhcp6_parser.cc" // lalr1.cc:907
2205 break;
2206
2207 case 359:
2208#line 1272 "dhcp6_parser.yy" // lalr1.cc:907
2209 {
2210 ElementPtr rtypes(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
2211 ctx.stack_.back()->set("record-types", rtypes);
2212 ctx.leave();
2213}
2214#line 2215 "dhcp6_parser.cc" // lalr1.cc:907
2215 break;
2216
2217 case 360:
2218#line 1278 "dhcp6_parser.yy" // lalr1.cc:907
2219 {
2220 ctx.enter(ctx.NO_KEYWORD);
2221}
2222#line 2223 "dhcp6_parser.cc" // lalr1.cc:907
2223 break;
2224
2225 case 361:
2226#line 1280 "dhcp6_parser.yy" // lalr1.cc:907
2227 {
2228 ElementPtr space(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
2229 ctx.stack_.back()->set("space", space);
2230 ctx.leave();
2231}
2232#line 2233 "dhcp6_parser.cc" // lalr1.cc:907
2233 break;
2234
2235 case 363:
2236#line 1288 "dhcp6_parser.yy" // lalr1.cc:907
2237 {
2238 ctx.enter(ctx.NO_KEYWORD);
2239}
2240#line 2241 "dhcp6_parser.cc" // lalr1.cc:907
2241 break;
2242
2243 case 364:
2244#line 1290 "dhcp6_parser.yy" // lalr1.cc:907
2245 {
2246 ElementPtr encap(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
2247 ctx.stack_.back()->set("encapsulate", encap);
2248 ctx.leave();
2249}
2250#line 2251 "dhcp6_parser.cc" // lalr1.cc:907
2251 break;
2252
2253 case 365:
2254#line 1296 "dhcp6_parser.yy" // lalr1.cc:907
2255 {
2256 ElementPtr array(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
2257 ctx.stack_.back()->set("array", array);
2258}
2259#line 2260 "dhcp6_parser.cc" // lalr1.cc:907
2260 break;
2261
2262 case 366:
2263#line 1305 "dhcp6_parser.yy" // lalr1.cc:907
2264 {
2265 ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
2266 ctx.stack_.back()->set("option-data", l);
2267 ctx.stack_.push_back(l);
2268 ctx.enter(ctx.OPTION_DATA);
2269}
2270#line 2271 "dhcp6_parser.cc" // lalr1.cc:907
2271 break;
2272
2273 case 367:
2274#line 1310 "dhcp6_parser.yy" // lalr1.cc:907
2275 {
2276 ctx.stack_.pop_back();
2277 ctx.leave();
2278}
2279#line 2280 "dhcp6_parser.cc" // lalr1.cc:907
2280 break;
2281
2282 case 372:
2283#line 1329 "dhcp6_parser.yy" // lalr1.cc:907
2284 {
2285 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
2286 ctx.stack_.back()->add(m);
2287 ctx.stack_.push_back(m);
2288}
2289#line 2290 "dhcp6_parser.cc" // lalr1.cc:907
2290 break;
2291
2292 case 373:
2293#line 1333 "dhcp6_parser.yy" // lalr1.cc:907
2294 {
2296 ctx.stack_.pop_back();
2297}
2298#line 2299 "dhcp6_parser.cc" // lalr1.cc:907
2299 break;
2300
2301 case 374:
2302#line 1341 "dhcp6_parser.yy" // lalr1.cc:907
2303 {
2304 // Parse the option-data list entry map
2305 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
2306 ctx.stack_.push_back(m);
2307}
2308#line 2309 "dhcp6_parser.cc" // lalr1.cc:907
2309 break;
2310
2311 case 375:
2312#line 1345 "dhcp6_parser.yy" // lalr1.cc:907
2313 {
2315 // parsing completed
2316}
2317#line 2318 "dhcp6_parser.cc" // lalr1.cc:907
2318 break;
2319
2320 case 390:
2321#line 1378 "dhcp6_parser.yy" // lalr1.cc:907
2322 {
2323 ctx.enter(ctx.NO_KEYWORD);
2324}
2325#line 2326 "dhcp6_parser.cc" // lalr1.cc:907
2326 break;
2327
2328 case 391:
2329#line 1380 "dhcp6_parser.yy" // lalr1.cc:907
2330 {
2331 ElementPtr data(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
2332 ctx.stack_.back()->set("data", data);
2333 ctx.leave();
2334}
2335#line 2336 "dhcp6_parser.cc" // lalr1.cc:907
2336 break;
2337
2338 case 394:
2339#line 1390 "dhcp6_parser.yy" // lalr1.cc:907
2340 {
2341 ElementPtr space(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
2342 ctx.stack_.back()->set("csv-format", space);
2343}
2344#line 2345 "dhcp6_parser.cc" // lalr1.cc:907
2345 break;
2346
2347 case 395:
2348#line 1395 "dhcp6_parser.yy" // lalr1.cc:907
2349 {
2350 ElementPtr persist(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
2351 ctx.stack_.back()->set("always-send", persist);
2352}
2353#line 2354 "dhcp6_parser.cc" // lalr1.cc:907
2354 break;
2355
2356 case 396:
2357#line 1403 "dhcp6_parser.yy" // lalr1.cc:907
2358 {
2359 ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
2360 ctx.stack_.back()->set("pools", l);
2361 ctx.stack_.push_back(l);
2362 ctx.enter(ctx.POOLS);
2363}
2364#line 2365 "dhcp6_parser.cc" // lalr1.cc:907
2365 break;
2366
2367 case 397:
2368#line 1408 "dhcp6_parser.yy" // lalr1.cc:907
2369 {
2370 ctx.stack_.pop_back();
2371 ctx.leave();
2372}
2373#line 2374 "dhcp6_parser.cc" // lalr1.cc:907
2374 break;
2375
2376 case 402:
2377#line 1423 "dhcp6_parser.yy" // lalr1.cc:907
2378 {
2379 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
2380 ctx.stack_.back()->add(m);
2381 ctx.stack_.push_back(m);
2382}
2383#line 2384 "dhcp6_parser.cc" // lalr1.cc:907
2384 break;
2385
2386 case 403:
2387#line 1427 "dhcp6_parser.yy" // lalr1.cc:907
2388 {
2389 // The pool parameter is required.
2390 ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
2391 ctx.stack_.pop_back();
2392}
2393#line 2394 "dhcp6_parser.cc" // lalr1.cc:907
2394 break;
2395
2396 case 404:
2397#line 1433 "dhcp6_parser.yy" // lalr1.cc:907
2398 {
2399 // Parse the pool list entry map
2400 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
2401 ctx.stack_.push_back(m);
2402}
2403#line 2404 "dhcp6_parser.cc" // lalr1.cc:907
2404 break;
2405
2406 case 405:
2407#line 1437 "dhcp6_parser.yy" // lalr1.cc:907
2408 {
2409 // The pool parameter is required.
2410 ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
2411}
2412#line 2413 "dhcp6_parser.cc" // lalr1.cc:907
2413 break;
2414
2415 case 415:
2416#line 1455 "dhcp6_parser.yy" // lalr1.cc:907
2417 {
2418 ctx.enter(ctx.NO_KEYWORD);
2419}
2420#line 2421 "dhcp6_parser.cc" // lalr1.cc:907
2421 break;
2422
2423 case 416:
2424#line 1457 "dhcp6_parser.yy" // lalr1.cc:907
2425 {
2426 ElementPtr pool(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
2427 ctx.stack_.back()->set("pool", pool);
2428 ctx.leave();
2429}
2430#line 2431 "dhcp6_parser.cc" // lalr1.cc:907
2431 break;
2432
2433 case 417:
2434#line 1463 "dhcp6_parser.yy" // lalr1.cc:907
2435 {
2436 ctx.enter(ctx.NO_KEYWORD);
2437}
2438#line 2439 "dhcp6_parser.cc" // lalr1.cc:907
2439 break;
2440
2441 case 418:
2442#line 1465 "dhcp6_parser.yy" // lalr1.cc:907
2443 {
2444 ElementPtr parent = ctx.stack_.back();
2445 ElementPtr user_context = yystack_[0].value.as< ElementPtr > ();
2446 ConstElementPtr old = parent->get("user-context");
2447
2448 // Handle already existing user context
2449 if (old) {
2450 // Check if it was a comment or a duplicate
2451 if ((old->size() != 1) || !old->contains("comment")) {
2452 std::stringstream msg;
2453 msg << "duplicate user-context entries (previous at "
2454 << old->getPosition().str() << ")";
2455 error(yystack_[3].location, msg.str());
2456 }
2457 // Merge the comment
2458 user_context->set("comment", old->get("comment"));
2459 }
2460
2461 // Set the user context
2462 parent->set("user-context", user_context);
2463 ctx.leave();
2464}
2465#line 2466 "dhcp6_parser.cc" // lalr1.cc:907
2466 break;
2467
2468 case 419:
2469#line 1488 "dhcp6_parser.yy" // lalr1.cc:907
2470 {
2471 ctx.enter(ctx.NO_KEYWORD);
2472}
2473#line 2474 "dhcp6_parser.cc" // lalr1.cc:907
2474 break;
2475
2476 case 420:
2477#line 1490 "dhcp6_parser.yy" // lalr1.cc:907
2478 {
2479 ElementPtr parent = ctx.stack_.back();
2480 ElementPtr user_context(new MapElement(ctx.loc2pos(yystack_[3].location)));
2481 ElementPtr comment(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
2482 user_context->set("comment", comment);
2483
2484 // Handle already existing user context
2485 ConstElementPtr old = parent->get("user-context");
2486 if (old) {
2487 // Check for duplicate comment
2488 if (old->contains("comment")) {
2489 std::stringstream msg;
2490 msg << "duplicate user-context/comment entries (previous at "
2491 << old->getPosition().str() << ")";
2492 error(yystack_[3].location, msg.str());
2493 }
2494 // Merge the user context in the comment
2495 merge(user_context, old);
2496 }
2497
2498 // Set the user context
2499 parent->set("user-context", user_context);
2500 ctx.leave();
2501}
2502#line 2503 "dhcp6_parser.cc" // lalr1.cc:907
2503 break;
2504
2505 case 421:
2506#line 1518 "dhcp6_parser.yy" // lalr1.cc:907
2507 {
2508 ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
2509 ctx.stack_.back()->set("pd-pools", l);
2510 ctx.stack_.push_back(l);
2511 ctx.enter(ctx.PD_POOLS);
2512}
2513#line 2514 "dhcp6_parser.cc" // lalr1.cc:907
2514 break;
2515
2516 case 422:
2517#line 1523 "dhcp6_parser.yy" // lalr1.cc:907
2518 {
2519 ctx.stack_.pop_back();
2520 ctx.leave();
2521}
2522#line 2523 "dhcp6_parser.cc" // lalr1.cc:907
2523 break;
2524
2525 case 427:
2526#line 1538 "dhcp6_parser.yy" // lalr1.cc:907
2527 {
2528 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
2529 ctx.stack_.back()->add(m);
2530 ctx.stack_.push_back(m);
2531}
2532#line 2533 "dhcp6_parser.cc" // lalr1.cc:907
2533 break;
2534
2535 case 428:
2536#line 1542 "dhcp6_parser.yy" // lalr1.cc:907
2537 {
2538 // The prefix, prefix len and delegated len parameters are required.
2539 ctx.require("prefix", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
2540 ctx.require("prefix-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
2541 ctx.require("delegated-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
2542 ctx.stack_.pop_back();
2543}
2544#line 2545 "dhcp6_parser.cc" // lalr1.cc:907
2545 break;
2546
2547 case 429:
2548#line 1550 "dhcp6_parser.yy" // lalr1.cc:907
2549 {
2550 // Parse the pd-pool list entry map
2551 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
2552 ctx.stack_.push_back(m);
2553}
2554#line 2555 "dhcp6_parser.cc" // lalr1.cc:907
2555 break;
2556
2557 case 430:
2558#line 1554 "dhcp6_parser.yy" // lalr1.cc:907
2559 {
2560 // The prefix, prefix len and delegated len parameters are required.
2561 ctx.require("prefix", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
2562 ctx.require("prefix-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
2563 ctx.require("delegated-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
2564 // parsing completed
2565}
2566#line 2567 "dhcp6_parser.cc" // lalr1.cc:907
2567 break;
2568
2569 case 444:
2570#line 1579 "dhcp6_parser.yy" // lalr1.cc:907
2571 {
2572 ctx.enter(ctx.NO_KEYWORD);
2573}
2574#line 2575 "dhcp6_parser.cc" // lalr1.cc:907
2575 break;
2576
2577 case 445:
2578#line 1581 "dhcp6_parser.yy" // lalr1.cc:907
2579 {
2580 ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
2581 ctx.stack_.back()->set("prefix", prf);
2582 ctx.leave();
2583}
2584#line 2585 "dhcp6_parser.cc" // lalr1.cc:907
2585 break;
2586
2587 case 446:
2588#line 1587 "dhcp6_parser.yy" // lalr1.cc:907
2589 {
2590 ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
2591 ctx.stack_.back()->set("prefix-len", prf);
2592}
2593#line 2594 "dhcp6_parser.cc" // lalr1.cc:907
2594 break;
2595
2596 case 447:
2597#line 1592 "dhcp6_parser.yy" // lalr1.cc:907
2598 {
2599 ctx.enter(ctx.NO_KEYWORD);
2600}
2601#line 2602 "dhcp6_parser.cc" // lalr1.cc:907
2602 break;
2603
2604 case 448:
2605#line 1594 "dhcp6_parser.yy" // lalr1.cc:907
2606 {
2607 ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
2608 ctx.stack_.back()->set("excluded-prefix", prf);
2609 ctx.leave();
2610}
2611#line 2612 "dhcp6_parser.cc" // lalr1.cc:907
2612 break;
2613
2614 case 449:
2615#line 1600 "dhcp6_parser.yy" // lalr1.cc:907
2616 {
2617 ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
2618 ctx.stack_.back()->set("excluded-prefix-len", prf);
2619}
2620#line 2621 "dhcp6_parser.cc" // lalr1.cc:907
2621 break;
2622
2623 case 450:
2624#line 1605 "dhcp6_parser.yy" // lalr1.cc:907
2625 {
2626 ElementPtr deleg(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
2627 ctx.stack_.back()->set("delegated-len", deleg);
2628}
2629#line 2630 "dhcp6_parser.cc" // lalr1.cc:907
2630 break;
2631
2632 case 451:
2633#line 1613 "dhcp6_parser.yy" // lalr1.cc:907
2634 {
2635 ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
2636 ctx.stack_.back()->set("reservations", l);
2637 ctx.stack_.push_back(l);
2638 ctx.enter(ctx.RESERVATIONS);
2639}
2640#line 2641 "dhcp6_parser.cc" // lalr1.cc:907
2641 break;
2642
2643 case 452:
2644#line 1618 "dhcp6_parser.yy" // lalr1.cc:907
2645 {
2646 ctx.stack_.pop_back();
2647 ctx.leave();
2648}
2649#line 2650 "dhcp6_parser.cc" // lalr1.cc:907
2650 break;
2651
2652 case 457:
2653#line 1631 "dhcp6_parser.yy" // lalr1.cc:907
2654 {
2655 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
2656 ctx.stack_.back()->add(m);
2657 ctx.stack_.push_back(m);
2658}
2659#line 2660 "dhcp6_parser.cc" // lalr1.cc:907
2660 break;
2661
2662 case 458:
2663#line 1635 "dhcp6_parser.yy" // lalr1.cc:907
2664 {
2666 ctx.stack_.pop_back();
2667}
2668#line 2669 "dhcp6_parser.cc" // lalr1.cc:907
2669 break;
2670
2671 case 459:
2672#line 1640 "dhcp6_parser.yy" // lalr1.cc:907
2673 {
2674 // Parse the reservations list entry map
2675 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
2676 ctx.stack_.push_back(m);
2677}
2678#line 2679 "dhcp6_parser.cc" // lalr1.cc:907
2679 break;
2680
2681 case 460:
2682#line 1644 "dhcp6_parser.yy" // lalr1.cc:907
2683 {
2685 // parsing completed
2686}
2687#line 2688 "dhcp6_parser.cc" // lalr1.cc:907
2688 break;
2689
2690 case 476:
2691#line 1671 "dhcp6_parser.yy" // lalr1.cc:907
2692 {
2693 ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
2694 ctx.stack_.back()->set("ip-addresses", l);
2695 ctx.stack_.push_back(l);
2696 ctx.enter(ctx.NO_KEYWORD);
2697}
2698#line 2699 "dhcp6_parser.cc" // lalr1.cc:907
2699 break;
2700
2701 case 477:
2702#line 1676 "dhcp6_parser.yy" // lalr1.cc:907
2703 {
2704 ctx.stack_.pop_back();
2705 ctx.leave();
2706}
2707#line 2708 "dhcp6_parser.cc" // lalr1.cc:907
2708 break;
2709
2710 case 478:
2711#line 1681 "dhcp6_parser.yy" // lalr1.cc:907
2712 {
2713 ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
2714 ctx.stack_.back()->set("prefixes", l);
2715 ctx.stack_.push_back(l);
2716 ctx.enter(ctx.NO_KEYWORD);
2717}
2718#line 2719 "dhcp6_parser.cc" // lalr1.cc:907
2719 break;
2720
2721 case 479:
2722#line 1686 "dhcp6_parser.yy" // lalr1.cc:907
2723 {
2724 ctx.stack_.pop_back();
2725 ctx.leave();
2726}
2727#line 2728 "dhcp6_parser.cc" // lalr1.cc:907
2728 break;
2729
2730 case 480:
2731#line 1691 "dhcp6_parser.yy" // lalr1.cc:907
2732 {
2733 ctx.enter(ctx.NO_KEYWORD);
2734}
2735#line 2736 "dhcp6_parser.cc" // lalr1.cc:907
2736 break;
2737
2738 case 481:
2739#line 1693 "dhcp6_parser.yy" // lalr1.cc:907
2740 {
2741 ElementPtr d(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
2742 ctx.stack_.back()->set("duid", d);
2743 ctx.leave();
2744}
2745#line 2746 "dhcp6_parser.cc" // lalr1.cc:907
2746 break;
2747
2748 case 482:
2749#line 1699 "dhcp6_parser.yy" // lalr1.cc:907
2750 {
2751 ctx.enter(ctx.NO_KEYWORD);
2752}
2753#line 2754 "dhcp6_parser.cc" // lalr1.cc:907
2754 break;
2755
2756 case 483:
2757#line 1701 "dhcp6_parser.yy" // lalr1.cc:907
2758 {
2759 ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
2760 ctx.stack_.back()->set("hw-address", hw);
2761 ctx.leave();
2762}
2763#line 2764 "dhcp6_parser.cc" // lalr1.cc:907
2764 break;
2765
2766 case 484:
2767#line 1707 "dhcp6_parser.yy" // lalr1.cc:907
2768 {
2769 ctx.enter(ctx.NO_KEYWORD);
2770}
2771#line 2772 "dhcp6_parser.cc" // lalr1.cc:907
2772 break;
2773
2774 case 485:
2775#line 1709 "dhcp6_parser.yy" // lalr1.cc:907
2776 {
2777 ElementPtr host(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
2778 ctx.stack_.back()->set("hostname", host);
2779 ctx.leave();
2780}
2781#line 2782 "dhcp6_parser.cc" // lalr1.cc:907
2782 break;
2783
2784 case 486:
2785#line 1715 "dhcp6_parser.yy" // lalr1.cc:907
2786 {
2787 ctx.enter(ctx.NO_KEYWORD);
2788}
2789#line 2790 "dhcp6_parser.cc" // lalr1.cc:907
2790 break;
2791
2792 case 487:
2793#line 1717 "dhcp6_parser.yy" // lalr1.cc:907
2794 {
2795 ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
2796 ctx.stack_.back()->set("flex-id", hw);
2797 ctx.leave();
2798}
2799#line 2800 "dhcp6_parser.cc" // lalr1.cc:907
2800 break;
2801
2802 case 488:
2803#line 1723 "dhcp6_parser.yy" // lalr1.cc:907
2804 {
2805 ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
2806 ctx.stack_.back()->set("client-classes", c);
2807 ctx.stack_.push_back(c);
2808 ctx.enter(ctx.NO_KEYWORD);
2809}
2810#line 2811 "dhcp6_parser.cc" // lalr1.cc:907
2811 break;
2812
2813 case 489:
2814#line 1728 "dhcp6_parser.yy" // lalr1.cc:907
2815 {
2816 ctx.stack_.pop_back();
2817 ctx.leave();
2818}
2819#line 2820 "dhcp6_parser.cc" // lalr1.cc:907
2820 break;
2821
2822 case 490:
2823#line 1736 "dhcp6_parser.yy" // lalr1.cc:907
2824 {
2825 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
2826 ctx.stack_.back()->set("relay", m);
2827 ctx.stack_.push_back(m);
2828 ctx.enter(ctx.RELAY);
2829}
2830#line 2831 "dhcp6_parser.cc" // lalr1.cc:907
2831 break;
2832
2833 case 491:
2834#line 1741 "dhcp6_parser.yy" // lalr1.cc:907
2835 {
2836 ctx.stack_.pop_back();
2837 ctx.leave();
2838}
2839#line 2840 "dhcp6_parser.cc" // lalr1.cc:907
2840 break;
2841
2842 case 494:
2843#line 1750 "dhcp6_parser.yy" // lalr1.cc:907
2844 {
2845 ctx.enter(ctx.NO_KEYWORD);
2846}
2847#line 2848 "dhcp6_parser.cc" // lalr1.cc:907
2848 break;
2849
2850 case 495:
2851#line 1752 "dhcp6_parser.yy" // lalr1.cc:907
2852 {
2853 ElementPtr addr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
2854 ctx.stack_.back()->set("ip-address", addr);
2855 ctx.leave();
2856}
2857#line 2858 "dhcp6_parser.cc" // lalr1.cc:907
2858 break;
2859
2860 case 496:
2861#line 1761 "dhcp6_parser.yy" // lalr1.cc:907
2862 {
2863 ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
2864 ctx.stack_.back()->set("client-classes", l);
2865 ctx.stack_.push_back(l);
2866 ctx.enter(ctx.CLIENT_CLASSES);
2867}
2868#line 2869 "dhcp6_parser.cc" // lalr1.cc:907
2869 break;
2870
2871 case 497:
2872#line 1766 "dhcp6_parser.yy" // lalr1.cc:907
2873 {
2874 ctx.stack_.pop_back();
2875 ctx.leave();
2876}
2877#line 2878 "dhcp6_parser.cc" // lalr1.cc:907
2878 break;
2879
2880 case 500:
2881#line 1775 "dhcp6_parser.yy" // lalr1.cc:907
2882 {
2883 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
2884 ctx.stack_.back()->add(m);
2885 ctx.stack_.push_back(m);
2886}
2887#line 2888 "dhcp6_parser.cc" // lalr1.cc:907
2888 break;
2889
2890 case 501:
2891#line 1779 "dhcp6_parser.yy" // lalr1.cc:907
2892 {
2893 // The name client class parameter is required.
2894 ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
2895 ctx.stack_.pop_back();
2896}
2897#line 2898 "dhcp6_parser.cc" // lalr1.cc:907
2898 break;
2899
2900 case 514:
2901#line 1804 "dhcp6_parser.yy" // lalr1.cc:907
2902 {
2903 ctx.enter(ctx.NO_KEYWORD);
2904}
2905#line 2906 "dhcp6_parser.cc" // lalr1.cc:907
2906 break;
2907
2908 case 515:
2909#line 1806 "dhcp6_parser.yy" // lalr1.cc:907
2910 {
2911 ElementPtr test(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
2912 ctx.stack_.back()->set("test", test);
2913 ctx.leave();
2914}
2915#line 2916 "dhcp6_parser.cc" // lalr1.cc:907
2916 break;
2917
2918 case 516:
2919#line 1812 "dhcp6_parser.yy" // lalr1.cc:907
2920 {
2921 ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
2922 ctx.stack_.back()->set("only-if-required", b);
2923}
2924#line 2925 "dhcp6_parser.cc" // lalr1.cc:907
2925 break;
2926
2927 case 517:
2928#line 1820 "dhcp6_parser.yy" // lalr1.cc:907
2929 {
2930 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
2931 ctx.stack_.back()->set("server-id", m);
2932 ctx.stack_.push_back(m);
2933 ctx.enter(ctx.SERVER_ID);
2934}
2935#line 2936 "dhcp6_parser.cc" // lalr1.cc:907
2936 break;
2937
2938 case 518:
2939#line 1825 "dhcp6_parser.yy" // lalr1.cc:907
2940 {
2941 // The type parameter is required.
2942 ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
2943 ctx.stack_.pop_back();
2944 ctx.leave();
2945}
2946#line 2947 "dhcp6_parser.cc" // lalr1.cc:907
2947 break;
2948
2949 case 530:
2950#line 1847 "dhcp6_parser.yy" // lalr1.cc:907
2951 {
2952 ctx.enter(ctx.DUID_TYPE);
2953}
2954#line 2955 "dhcp6_parser.cc" // lalr1.cc:907
2955 break;
2956
2957 case 531:
2958#line 1849 "dhcp6_parser.yy" // lalr1.cc:907
2959 {
2960 ctx.stack_.back()->set("type", yystack_[0].value.as< ElementPtr > ());
2961 ctx.leave();
2962}
2963#line 2964 "dhcp6_parser.cc" // lalr1.cc:907
2964 break;
2965
2966 case 532:
2967#line 1854 "dhcp6_parser.yy" // lalr1.cc:907
2968 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("LLT", ctx.loc2pos(yystack_[0].location))); }
2969#line 2970 "dhcp6_parser.cc" // lalr1.cc:907
2970 break;
2971
2972 case 533:
2973#line 1855 "dhcp6_parser.yy" // lalr1.cc:907
2974 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("EN", ctx.loc2pos(yystack_[0].location))); }
2975#line 2976 "dhcp6_parser.cc" // lalr1.cc:907
2976 break;
2977
2978 case 534:
2979#line 1856 "dhcp6_parser.yy" // lalr1.cc:907
2980 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("LL", ctx.loc2pos(yystack_[0].location))); }
2981#line 2982 "dhcp6_parser.cc" // lalr1.cc:907
2982 break;
2983
2984 case 535:
2985#line 1859 "dhcp6_parser.yy" // lalr1.cc:907
2986 {
2987 ElementPtr htype(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
2988 ctx.stack_.back()->set("htype", htype);
2989}
2990#line 2991 "dhcp6_parser.cc" // lalr1.cc:907
2991 break;
2992
2993 case 536:
2994#line 1864 "dhcp6_parser.yy" // lalr1.cc:907
2995 {
2996 ctx.enter(ctx.NO_KEYWORD);
2997}
2998#line 2999 "dhcp6_parser.cc" // lalr1.cc:907
2999 break;
3000
3001 case 537:
3002#line 1866 "dhcp6_parser.yy" // lalr1.cc:907
3003 {
3004 ElementPtr id(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
3005 ctx.stack_.back()->set("identifier", id);
3006 ctx.leave();
3007}
3008#line 3009 "dhcp6_parser.cc" // lalr1.cc:907
3009 break;
3010
3011 case 538:
3012#line 1872 "dhcp6_parser.yy" // lalr1.cc:907
3013 {
3014 ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
3015 ctx.stack_.back()->set("time", time);
3016}
3017#line 3018 "dhcp6_parser.cc" // lalr1.cc:907
3018 break;
3019
3020 case 539:
3021#line 1877 "dhcp6_parser.yy" // lalr1.cc:907
3022 {
3023 ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
3024 ctx.stack_.back()->set("enterprise-id", time);
3025}
3026#line 3027 "dhcp6_parser.cc" // lalr1.cc:907
3027 break;
3028
3029 case 540:
3030#line 1884 "dhcp6_parser.yy" // lalr1.cc:907
3031 {
3032 ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
3033 ctx.stack_.back()->set("dhcp4o6-port", time);
3034}
3035#line 3036 "dhcp6_parser.cc" // lalr1.cc:907
3036 break;
3037
3038 case 541:
3039#line 1891 "dhcp6_parser.yy" // lalr1.cc:907
3040 {
3041 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
3042 ctx.stack_.back()->set("control-socket", m);
3043 ctx.stack_.push_back(m);
3044 ctx.enter(ctx.CONTROL_SOCKET);
3045}
3046#line 3047 "dhcp6_parser.cc" // lalr1.cc:907
3047 break;
3048
3049 case 542:
3050#line 1896 "dhcp6_parser.yy" // lalr1.cc:907
3051 {
3052 ctx.stack_.pop_back();
3053 ctx.leave();
3054}
3055#line 3056 "dhcp6_parser.cc" // lalr1.cc:907
3056 break;
3057
3058 case 550:
3059#line 1912 "dhcp6_parser.yy" // lalr1.cc:907
3060 {
3061 ctx.enter(ctx.NO_KEYWORD);
3062}
3063#line 3064 "dhcp6_parser.cc" // lalr1.cc:907
3064 break;
3065
3066 case 551:
3067#line 1914 "dhcp6_parser.yy" // lalr1.cc:907
3068 {
3069 ElementPtr stype(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
3070 ctx.stack_.back()->set("socket-type", stype);
3071 ctx.leave();
3072}
3073#line 3074 "dhcp6_parser.cc" // lalr1.cc:907
3074 break;
3075
3076 case 552:
3077#line 1920 "dhcp6_parser.yy" // lalr1.cc:907
3078 {
3079 ctx.enter(ctx.NO_KEYWORD);
3080}
3081#line 3082 "dhcp6_parser.cc" // lalr1.cc:907
3082 break;
3083
3084 case 553:
3085#line 1922 "dhcp6_parser.yy" // lalr1.cc:907
3086 {
3087 ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
3088 ctx.stack_.back()->set("socket-name", name);
3089 ctx.leave();
3090}
3091#line 3092 "dhcp6_parser.cc" // lalr1.cc:907
3092 break;
3093
3094 case 554:
3095#line 1930 "dhcp6_parser.yy" // lalr1.cc:907
3096 {
3097 ctx.enter(ctx.NO_KEYWORD);
3098}
3099#line 3100 "dhcp6_parser.cc" // lalr1.cc:907
3100 break;
3101
3102 case 555:
3103#line 1932 "dhcp6_parser.yy" // lalr1.cc:907
3104 {
3105 ElementPtr qc = yystack_[0].value.as< ElementPtr > ();
3106 ctx.stack_.back()->set("dhcp-queue-control", qc);
3107
3108 // Doing this manually, because dhcp-queue-control
3109 // content is otherwise arbitrary
3110 if (!qc->contains("enable-queue")) {
3111 std::stringstream msg;
3112 msg << "'enable-queue' is required: ";
3113 msg << "(" << qc->getPosition().str() << ")";
3114 error(yystack_[3].location, msg.str());
3115 }
3116
3117 // queue-enable is mandatory
3118 ConstElementPtr enable_queue = qc->get("enable-queue");
3119 if (enable_queue->getType() != Element::boolean) {
3120 std::stringstream msg;
3121 msg << "'enable-queue' must be boolean: ";
3122 msg << "(" << qc->getPosition().str() << ")";
3123 error(yystack_[3].location, msg.str());
3124 }
3125
3126 // if queue-type is supplied make sure it's a string
3127 if (qc->contains("queue-type")) {
3128 ConstElementPtr queue_type = qc->get("queue-type");
3129 if (queue_type->getType() != Element::string) {
3130 std::stringstream msg;
3131 msg << "'queue-type' must be a string: ";
3132 msg << "(" << qc->getPosition().str() << ")";
3133 error(yystack_[3].location, msg.str());
3134 }
3135 }
3136
3137 ctx.leave();
3138}
3139#line 3140 "dhcp6_parser.cc" // lalr1.cc:907
3140 break;
3141
3142 case 556:
3143#line 1970 "dhcp6_parser.yy" // lalr1.cc:907
3144 {
3145 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
3146 ctx.stack_.back()->set("dhcp-ddns", m);
3147 ctx.stack_.push_back(m);
3148 ctx.enter(ctx.DHCP_DDNS);
3149}
3150#line 3151 "dhcp6_parser.cc" // lalr1.cc:907
3151 break;
3152
3153 case 557:
3154#line 1975 "dhcp6_parser.yy" // lalr1.cc:907
3155 {
3156 // The enable updates DHCP DDNS parameter is required.
3157 ctx.require("enable-updates", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location));
3158 ctx.stack_.pop_back();
3159 ctx.leave();
3160}
3161#line 3162 "dhcp6_parser.cc" // lalr1.cc:907
3162 break;
3163
3164 case 558:
3165#line 1982 "dhcp6_parser.yy" // lalr1.cc:907
3166 {
3167 // Parse the dhcp-ddns map
3168 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
3169 ctx.stack_.push_back(m);
3170}
3171#line 3172 "dhcp6_parser.cc" // lalr1.cc:907
3172 break;
3173
3174 case 559:
3175#line 1986 "dhcp6_parser.yy" // lalr1.cc:907
3176 {
3177 // The enable updates DHCP DDNS parameter is required.
3178 ctx.require("enable-updates", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location));
3179 // parsing completed
3180}
3181#line 3182 "dhcp6_parser.cc" // lalr1.cc:907
3182 break;
3183
3184 case 580:
3185#line 2016 "dhcp6_parser.yy" // lalr1.cc:907
3186 {
3187 ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
3188 ctx.stack_.back()->set("enable-updates", b);
3189}
3190#line 3191 "dhcp6_parser.cc" // lalr1.cc:907
3191 break;
3192
3193 case 581:
3194#line 2021 "dhcp6_parser.yy" // lalr1.cc:907
3195 {
3196 ctx.enter(ctx.NO_KEYWORD);
3197}
3198#line 3199 "dhcp6_parser.cc" // lalr1.cc:907
3199 break;
3200
3201 case 582:
3202#line 2023 "dhcp6_parser.yy" // lalr1.cc:907
3203 {
3204 ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
3205 ctx.stack_.back()->set("qualifying-suffix", s);
3206 ctx.leave();
3207}
3208#line 3209 "dhcp6_parser.cc" // lalr1.cc:907
3209 break;
3210
3211 case 583:
3212#line 2029 "dhcp6_parser.yy" // lalr1.cc:907
3213 {
3214 ctx.enter(ctx.NO_KEYWORD);
3215}
3216#line 3217 "dhcp6_parser.cc" // lalr1.cc:907
3217 break;
3218
3219 case 584:
3220#line 2031 "dhcp6_parser.yy" // lalr1.cc:907
3221 {
3222 ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
3223 ctx.stack_.back()->set("server-ip", s);
3224 ctx.leave();
3225}
3226#line 3227 "dhcp6_parser.cc" // lalr1.cc:907
3227 break;
3228
3229 case 585:
3230#line 2037 "dhcp6_parser.yy" // lalr1.cc:907
3231 {
3232 ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
3233 ctx.stack_.back()->set("server-port", i);
3234}
3235#line 3236 "dhcp6_parser.cc" // lalr1.cc:907
3236 break;
3237
3238 case 586:
3239#line 2042 "dhcp6_parser.yy" // lalr1.cc:907
3240 {
3241 ctx.enter(ctx.NO_KEYWORD);
3242}
3243#line 3244 "dhcp6_parser.cc" // lalr1.cc:907
3244 break;
3245
3246 case 587:
3247#line 2044 "dhcp6_parser.yy" // lalr1.cc:907
3248 {
3249 ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
3250 ctx.stack_.back()->set("sender-ip", s);
3251 ctx.leave();
3252}
3253#line 3254 "dhcp6_parser.cc" // lalr1.cc:907
3254 break;
3255
3256 case 588:
3257#line 2050 "dhcp6_parser.yy" // lalr1.cc:907
3258 {
3259 ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
3260 ctx.stack_.back()->set("sender-port", i);
3261}
3262#line 3263 "dhcp6_parser.cc" // lalr1.cc:907
3263 break;
3264
3265 case 589:
3266#line 2055 "dhcp6_parser.yy" // lalr1.cc:907
3267 {
3268 ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
3269 ctx.stack_.back()->set("max-queue-size", i);
3270}
3271#line 3272 "dhcp6_parser.cc" // lalr1.cc:907
3272 break;
3273
3274 case 590:
3275#line 2060 "dhcp6_parser.yy" // lalr1.cc:907
3276 {
3277 ctx.enter(ctx.NCR_PROTOCOL);
3278}
3279#line 3280 "dhcp6_parser.cc" // lalr1.cc:907
3280 break;
3281
3282 case 591:
3283#line 2062 "dhcp6_parser.yy" // lalr1.cc:907
3284 {
3285 ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as< ElementPtr > ());
3286 ctx.leave();
3287}
3288#line 3289 "dhcp6_parser.cc" // lalr1.cc:907
3289 break;
3290
3291 case 592:
3292#line 2068 "dhcp6_parser.yy" // lalr1.cc:907
3293 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); }
3294#line 3295 "dhcp6_parser.cc" // lalr1.cc:907
3295 break;
3296
3297 case 593:
3298#line 2069 "dhcp6_parser.yy" // lalr1.cc:907
3299 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); }
3300#line 3301 "dhcp6_parser.cc" // lalr1.cc:907
3301 break;
3302
3303 case 594:
3304#line 2072 "dhcp6_parser.yy" // lalr1.cc:907
3305 {
3306 ctx.enter(ctx.NCR_FORMAT);
3307}
3308#line 3309 "dhcp6_parser.cc" // lalr1.cc:907
3309 break;
3310
3311 case 595:
3312#line 2074 "dhcp6_parser.yy" // lalr1.cc:907
3313 {
3314 ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location)));
3315 ctx.stack_.back()->set("ncr-format", json);
3316 ctx.leave();
3317}
3318#line 3319 "dhcp6_parser.cc" // lalr1.cc:907
3319 break;
3320
3321 case 596:
3322#line 2080 "dhcp6_parser.yy" // lalr1.cc:907
3323 {
3324 ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
3325 ctx.stack_.back()->set("override-no-update", b);
3326}
3327#line 3328 "dhcp6_parser.cc" // lalr1.cc:907
3328 break;
3329
3330 case 597:
3331#line 2085 "dhcp6_parser.yy" // lalr1.cc:907
3332 {
3333 ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
3334 ctx.stack_.back()->set("override-client-update", b);
3335}
3336#line 3337 "dhcp6_parser.cc" // lalr1.cc:907
3337 break;
3338
3339 case 598:
3340#line 2090 "dhcp6_parser.yy" // lalr1.cc:907
3341 {
3342 ctx.enter(ctx.REPLACE_CLIENT_NAME);
3343}
3344#line 3345 "dhcp6_parser.cc" // lalr1.cc:907
3345 break;
3346
3347 case 599:
3348#line 2092 "dhcp6_parser.yy" // lalr1.cc:907
3349 {
3350 ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as< ElementPtr > ());
3351 ctx.leave();
3352}
3353#line 3354 "dhcp6_parser.cc" // lalr1.cc:907
3354 break;
3355
3356 case 600:
3357#line 2098 "dhcp6_parser.yy" // lalr1.cc:907
3358 {
3359 yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location)));
3360 }
3361#line 3362 "dhcp6_parser.cc" // lalr1.cc:907
3362 break;
3363
3364 case 601:
3365#line 2101 "dhcp6_parser.yy" // lalr1.cc:907
3366 {
3367 yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location)));
3368 }
3369#line 3370 "dhcp6_parser.cc" // lalr1.cc:907
3370 break;
3371
3372 case 602:
3373#line 2104 "dhcp6_parser.yy" // lalr1.cc:907
3374 {
3375 yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location)));
3376 }
3377#line 3378 "dhcp6_parser.cc" // lalr1.cc:907
3378 break;
3379
3380 case 603:
3381#line 2107 "dhcp6_parser.yy" // lalr1.cc:907
3382 {
3383 yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location)));
3384 }
3385#line 3386 "dhcp6_parser.cc" // lalr1.cc:907
3386 break;
3387
3388 case 604:
3389#line 2110 "dhcp6_parser.yy" // lalr1.cc:907
3390 {
3391 error(yystack_[0].location, "boolean values for the replace-client-name are "
3392 "no longer supported");
3393 }
3394#line 3395 "dhcp6_parser.cc" // lalr1.cc:907
3395 break;
3396
3397 case 605:
3398#line 2116 "dhcp6_parser.yy" // lalr1.cc:907
3399 {
3400 ctx.enter(ctx.NO_KEYWORD);
3401}
3402#line 3403 "dhcp6_parser.cc" // lalr1.cc:907
3403 break;
3404
3405 case 606:
3406#line 2118 "dhcp6_parser.yy" // lalr1.cc:907
3407 {
3408 ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
3409 ctx.stack_.back()->set("generated-prefix", s);
3410 ctx.leave();
3411}
3412#line 3413 "dhcp6_parser.cc" // lalr1.cc:907
3413 break;
3414
3415 case 607:
3416#line 2124 "dhcp6_parser.yy" // lalr1.cc:907
3417 {
3418 ctx.enter(ctx.NO_KEYWORD);
3419}
3420#line 3421 "dhcp6_parser.cc" // lalr1.cc:907
3421 break;
3422
3423 case 608:
3424#line 2126 "dhcp6_parser.yy" // lalr1.cc:907
3425 {
3426 ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
3427 ctx.stack_.back()->set("hostname-char-set", s);
3428 ctx.leave();
3429}
3430#line 3431 "dhcp6_parser.cc" // lalr1.cc:907
3431 break;
3432
3433 case 609:
3434#line 2132 "dhcp6_parser.yy" // lalr1.cc:907
3435 {
3436 ctx.enter(ctx.NO_KEYWORD);
3437}
3438#line 3439 "dhcp6_parser.cc" // lalr1.cc:907
3439 break;
3440
3441 case 610:
3442#line 2134 "dhcp6_parser.yy" // lalr1.cc:907
3443 {
3444 ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
3445 ctx.stack_.back()->set("hostname-char-replacement", s);
3446 ctx.leave();
3447}
3448#line 3449 "dhcp6_parser.cc" // lalr1.cc:907
3449 break;
3450
3451 case 611:
3452#line 2142 "dhcp6_parser.yy" // lalr1.cc:907
3453 {
3454 ctx.enter(ctx.NO_KEYWORD);
3455}
3456#line 3457 "dhcp6_parser.cc" // lalr1.cc:907
3457 break;
3458
3459 case 612:
3460#line 2144 "dhcp6_parser.yy" // lalr1.cc:907
3461 {
3462 ctx.stack_.back()->set("Dhcp4", yystack_[0].value.as< ElementPtr > ());
3463 ctx.leave();
3464}
3465#line 3466 "dhcp6_parser.cc" // lalr1.cc:907
3466 break;
3467
3468 case 613:
3469#line 2149 "dhcp6_parser.yy" // lalr1.cc:907
3470 {
3471 ctx.enter(ctx.NO_KEYWORD);
3472}
3473#line 3474 "dhcp6_parser.cc" // lalr1.cc:907
3474 break;
3475
3476 case 614:
3477#line 2151 "dhcp6_parser.yy" // lalr1.cc:907
3478 {
3479 ctx.stack_.back()->set("DhcpDdns", yystack_[0].value.as< ElementPtr > ());
3480 ctx.leave();
3481}
3482#line 3483 "dhcp6_parser.cc" // lalr1.cc:907
3483 break;
3484
3485 case 615:
3486#line 2156 "dhcp6_parser.yy" // lalr1.cc:907
3487 {
3488 ctx.enter(ctx.NO_KEYWORD);
3489}
3490#line 3491 "dhcp6_parser.cc" // lalr1.cc:907
3491 break;
3492
3493 case 616:
3494#line 2158 "dhcp6_parser.yy" // lalr1.cc:907
3495 {
3496 ctx.stack_.back()->set("Control-agent", yystack_[0].value.as< ElementPtr > ());
3497 ctx.leave();
3498}
3499#line 3500 "dhcp6_parser.cc" // lalr1.cc:907
3500 break;
3501
3502 case 617:
3503#line 2165 "dhcp6_parser.yy" // lalr1.cc:907
3504 {
3505 ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
3506 ctx.stack_.back()->set("config-control", i);
3507 ctx.stack_.push_back(i);
3508 ctx.enter(ctx.CONFIG_CONTROL);
3509}
3510#line 3511 "dhcp6_parser.cc" // lalr1.cc:907
3511 break;
3512
3513 case 618:
3514#line 2170 "dhcp6_parser.yy" // lalr1.cc:907
3515 {
3516 // No config control params are required
3517 ctx.stack_.pop_back();
3518 ctx.leave();
3519}
3520#line 3521 "dhcp6_parser.cc" // lalr1.cc:907
3521 break;
3522
3523 case 619:
3524#line 2176 "dhcp6_parser.yy" // lalr1.cc:907
3525 {
3526 // Parse the config-control map
3527 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
3528 ctx.stack_.push_back(m);
3529}
3530#line 3531 "dhcp6_parser.cc" // lalr1.cc:907
3531 break;
3532
3533 case 620:
3534#line 2180 "dhcp6_parser.yy" // lalr1.cc:907
3535 {
3536 // No config_control params are required
3537 // parsing completed
3538}
3539#line 3540 "dhcp6_parser.cc" // lalr1.cc:907
3540 break;
3541
3542 case 624:
3543#line 2194 "dhcp6_parser.yy" // lalr1.cc:907
3544 {
3545 ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
3546 ctx.stack_.back()->set("config-databases", l);
3547 ctx.stack_.push_back(l);
3548 ctx.enter(ctx.CONFIG_DATABASE);
3549}
3550#line 3551 "dhcp6_parser.cc" // lalr1.cc:907
3551 break;
3552
3553 case 625:
3554#line 2199 "dhcp6_parser.yy" // lalr1.cc:907
3555 {
3556 ctx.stack_.pop_back();
3557 ctx.leave();
3558}
3559#line 3560 "dhcp6_parser.cc" // lalr1.cc:907
3560 break;
3561
3562 case 626:
3563#line 2209 "dhcp6_parser.yy" // lalr1.cc:907
3564 {
3565 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
3566 ctx.stack_.back()->set("Logging", m);
3567 ctx.stack_.push_back(m);
3568 ctx.enter(ctx.LOGGING);
3569}
3570#line 3571 "dhcp6_parser.cc" // lalr1.cc:907
3571 break;
3572
3573 case 627:
3574#line 2214 "dhcp6_parser.yy" // lalr1.cc:907
3575 {
3576 ctx.stack_.pop_back();
3577 ctx.leave();
3578}
3579#line 3580 "dhcp6_parser.cc" // lalr1.cc:907
3580 break;
3581
3582 case 628:
3583#line 2219 "dhcp6_parser.yy" // lalr1.cc:907
3584 {
3585 // Parse the Logging map
3586 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
3587 ctx.stack_.push_back(m);
3588}
3589#line 3590 "dhcp6_parser.cc" // lalr1.cc:907
3590 break;
3591
3592 case 629:
3593#line 2223 "dhcp6_parser.yy" // lalr1.cc:907
3594 {
3595 // parsing completed
3596}
3597#line 3598 "dhcp6_parser.cc" // lalr1.cc:907
3598 break;
3599
3600 case 633:
3601#line 2239 "dhcp6_parser.yy" // lalr1.cc:907
3602 {
3603 ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
3604 ctx.stack_.back()->set("loggers", l);
3605 ctx.stack_.push_back(l);
3606 ctx.enter(ctx.LOGGERS);
3607}
3608#line 3609 "dhcp6_parser.cc" // lalr1.cc:907
3609 break;
3610
3611 case 634:
3612#line 2244 "dhcp6_parser.yy" // lalr1.cc:907
3613 {
3614 ctx.stack_.pop_back();
3615 ctx.leave();
3616}
3617#line 3618 "dhcp6_parser.cc" // lalr1.cc:907
3618 break;
3619
3620 case 637:
3621#line 2256 "dhcp6_parser.yy" // lalr1.cc:907
3622 {
3623 ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location)));
3624 ctx.stack_.back()->add(l);
3625 ctx.stack_.push_back(l);
3626}
3627#line 3628 "dhcp6_parser.cc" // lalr1.cc:907
3628 break;
3629
3630 case 638:
3631#line 2260 "dhcp6_parser.yy" // lalr1.cc:907
3632 {
3633 ctx.stack_.pop_back();
3634}
3635#line 3636 "dhcp6_parser.cc" // lalr1.cc:907
3636 break;
3637
3638 case 648:
3639#line 2277 "dhcp6_parser.yy" // lalr1.cc:907
3640 {
3641 ElementPtr dl(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
3642 ctx.stack_.back()->set("debuglevel", dl);
3643}
3644#line 3645 "dhcp6_parser.cc" // lalr1.cc:907
3645 break;
3646
3647 case 649:
3648#line 2282 "dhcp6_parser.yy" // lalr1.cc:907
3649 {
3650 ctx.enter(ctx.NO_KEYWORD);
3651}
3652#line 3653 "dhcp6_parser.cc" // lalr1.cc:907
3653 break;
3654
3655 case 650:
3656#line 2284 "dhcp6_parser.yy" // lalr1.cc:907
3657 {
3658 ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
3659 ctx.stack_.back()->set("severity", sev);
3660 ctx.leave();
3661}
3662#line 3663 "dhcp6_parser.cc" // lalr1.cc:907
3663 break;
3664
3665 case 651:
3666#line 2290 "dhcp6_parser.yy" // lalr1.cc:907
3667 {
3668 ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
3669 ctx.stack_.back()->set("output_options", l);
3670 ctx.stack_.push_back(l);
3671 ctx.enter(ctx.OUTPUT_OPTIONS);
3672}
3673#line 3674 "dhcp6_parser.cc" // lalr1.cc:907
3674 break;
3675
3676 case 652:
3677#line 2295 "dhcp6_parser.yy" // lalr1.cc:907
3678 {
3679 ctx.stack_.pop_back();
3680 ctx.leave();
3681}
3682#line 3683 "dhcp6_parser.cc" // lalr1.cc:907
3683 break;
3684
3685 case 655:
3686#line 2304 "dhcp6_parser.yy" // lalr1.cc:907
3687 {
3688 ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
3689 ctx.stack_.back()->add(m);
3690 ctx.stack_.push_back(m);
3691}
3692#line 3693 "dhcp6_parser.cc" // lalr1.cc:907
3693 break;
3694
3695 case 656:
3696#line 2308 "dhcp6_parser.yy" // lalr1.cc:907
3697 {
3698 ctx.stack_.pop_back();
3699}
3700#line 3701 "dhcp6_parser.cc" // lalr1.cc:907
3701 break;
3702
3703 case 663:
3704#line 2322 "dhcp6_parser.yy" // lalr1.cc:907
3705 {
3706 ctx.enter(ctx.NO_KEYWORD);
3707}
3708#line 3709 "dhcp6_parser.cc" // lalr1.cc:907
3709 break;
3710
3711 case 664:
3712#line 2324 "dhcp6_parser.yy" // lalr1.cc:907
3713 {
3714 ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
3715 ctx.stack_.back()->set("output", sev);
3716 ctx.leave();
3717}
3718#line 3719 "dhcp6_parser.cc" // lalr1.cc:907
3719 break;
3720
3721 case 665:
3722#line 2330 "dhcp6_parser.yy" // lalr1.cc:907
3723 {
3724 ElementPtr flush(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
3725 ctx.stack_.back()->set("flush", flush);
3726}
3727#line 3728 "dhcp6_parser.cc" // lalr1.cc:907
3728 break;
3729
3730 case 666:
3731#line 2335 "dhcp6_parser.yy" // lalr1.cc:907
3732 {
3733 ElementPtr maxsize(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
3734 ctx.stack_.back()->set("maxsize", maxsize);
3735}
3736#line 3737 "dhcp6_parser.cc" // lalr1.cc:907
3737 break;
3738
3739 case 667:
3740#line 2340 "dhcp6_parser.yy" // lalr1.cc:907
3741 {
3742 ElementPtr maxver(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
3743 ctx.stack_.back()->set("maxver", maxver);
3744}
3745#line 3746 "dhcp6_parser.cc" // lalr1.cc:907
3746 break;
3747
3748
3749#line 3750 "dhcp6_parser.cc" // lalr1.cc:907
3750 default:
3751 break;
3752 }
3753 }
3754#if YY_EXCEPTIONS
3755 catch (const syntax_error& yyexc)
3756 {
3757 error (yyexc);
3758 YYERROR;
3759 }
3760#endif // YY_EXCEPTIONS
3761 YY_SYMBOL_PRINT ("-> $$ =", yylhs);
3762 yypop_ (yylen);
3763 yylen = 0;
3764 YY_STACK_PRINT ();
3765
3766 // Shift the result of the reduction.
3767 yypush_ (YY_NULLPTR, YY_MOVE (yylhs));
3768 }
3769 goto yynewstate;
3770
3771 /*--------------------------------------.
3772 | yyerrlab -- here on detecting error. |
3773 `--------------------------------------*/
3774 yyerrlab:
3775 // If not already recovering from an error, report this error.
3776 if (!yyerrstatus_)
3777 {
3778 ++yynerrs_;
3779 error (yyla.location, yysyntax_error_ (yystack_[0].state, yyla));
3780 }
3781
3782
3783 yyerror_range[1].location = yyla.location;
3784 if (yyerrstatus_ == 3)
3785 {
3786 /* If just tried and failed to reuse lookahead token after an
3787 error, discard it. */
3788
3789 // Return failure if at end of input.
3790 if (yyla.type_get () == yyeof_)
3791 YYABORT;
3792 else if (!yyla.empty ())
3793 {
3794 yy_destroy_ ("Error: discarding", yyla);
3795 yyla.clear ();
3796 }
3797 }
3798
3799 // Else will try to reuse lookahead token after shifting the error token.
3800 goto yyerrlab1;
3801
3802
3803 /*---------------------------------------------------.
3804 | yyerrorlab -- error raised explicitly by YYERROR. |
3805 `---------------------------------------------------*/
3806 yyerrorlab:
3807
3808 /* Pacify compilers like GCC when the user code never invokes
3809 YYERROR and the label yyerrorlab therefore never appears in user
3810 code. */
3811 if (false)
3812 goto yyerrorlab;
3813 /* Do not reclaim the symbols of the rule whose action triggered
3814 this YYERROR. */
3815 yypop_ (yylen);
3816 yylen = 0;
3817 goto yyerrlab1;
3818
3819 /*-------------------------------------------------------------.
3820 | yyerrlab1 -- common code for both syntax error and YYERROR. |
3821 `-------------------------------------------------------------*/
3822 yyerrlab1:
3823 yyerrstatus_ = 3; // Each real token shifted decrements this.
3824 {
3825 stack_symbol_type error_token;
3826 for (;;)
3827 {
3828 yyn = yypact_[yystack_[0].state];
3829 if (!yy_pact_value_is_default_ (yyn))
3830 {
3831 yyn += yyterror_;
3832 if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yyterror_)
3833 {
3834 yyn = yytable_[yyn];
3835 if (0 < yyn)
3836 break;
3837 }
3838 }
3839
3840 // Pop the current state because it cannot handle the error token.
3841 if (yystack_.size () == 1)
3842 YYABORT;
3843
3844 yyerror_range[1].location = yystack_[0].location;
3845 yy_destroy_ ("Error: popping", yystack_[0]);
3846 yypop_ ();
3847 YY_STACK_PRINT ();
3848 }
3849
3850 yyerror_range[2].location = yyla.location;
3851 YYLLOC_DEFAULT (error_token.location, yyerror_range, 2);
3852
3853 // Shift the error token.
3854 error_token.state = yyn;
3855 yypush_ ("Shifting", YY_MOVE (error_token));
3856 }
3857 goto yynewstate;
3858
3859 // Accept.
3860 yyacceptlab:
3861 yyresult = 0;
3862 goto yyreturn;
3863
3864 // Abort.
3865 yyabortlab:
3866 yyresult = 1;
3867 goto yyreturn;
3868
3869 yyreturn:
3870 if (!yyla.empty ())
3871 yy_destroy_ ("Cleanup: discarding lookahead", yyla);
3872
3873 /* Do not reclaim the symbols of the rule whose action triggered
3874 this YYABORT or YYACCEPT. */
3875 yypop_ (yylen);
3876 while (1 < yystack_.size ())
3877 {
3878 yy_destroy_ ("Cleanup: popping", yystack_[0]);
3879 yypop_ ();
3880 }
3881
3882 return yyresult;
3883 }
3884#if YY_EXCEPTIONS
3885 catch (...)
3886 {
3887 YYCDEBUG << "Exception caught: cleaning lookahead and stack\n";
3888 // Do not try to display the values of the reclaimed symbols,
3889 // as their printers might throw an exception.
3890 if (!yyla.empty ())
3891 yy_destroy_ (YY_NULLPTR, yyla);
3892
3893 while (1 < yystack_.size ())
3894 {
3895 yy_destroy_ (YY_NULLPTR, yystack_[0]);
3896 yypop_ ();
3897 }
3898 throw;
3899 }
3900#endif // YY_EXCEPTIONS
3901 }
3902
3903 void
3905 {
3906 error (yyexc.location, yyexc.what ());
3907 }
3908
3909 // Generate an error message.
3910 std::string
3911 Dhcp6Parser::yysyntax_error_ (state_type yystate, const symbol_type& yyla) const
3912 {
3913 // Number of reported tokens (one for the "unexpected", one per
3914 // "expected").
3915 size_t yycount = 0;
3916 // Its maximum.
3917 enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
3918 // Arguments of yyformat.
3919 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
3920
3921 /* There are many possibilities here to consider:
3922 - If this state is a consistent state with a default action, then
3923 the only way this function was invoked is if the default action
3924 is an error action. In that case, don't check for expected
3925 tokens because there are none.
3926 - The only way there can be no lookahead present (in yyla) is
3927 if this state is a consistent state with a default action.
3928 Thus, detecting the absence of a lookahead is sufficient to
3929 determine that there is no unexpected or expected token to
3930 report. In that case, just report a simple "syntax error".
3931 - Don't assume there isn't a lookahead just because this state is
3932 a consistent state with a default action. There might have
3933 been a previous inconsistent state, consistent state with a
3934 non-default action, or user semantic action that manipulated
3935 yyla. (However, yyla is currently not documented for users.)
3936 - Of course, the expected token list depends on states to have
3937 correct lookahead information, and it depends on the parser not
3938 to perform extra reductions after fetching a lookahead from the
3939 scanner and before detecting a syntax error. Thus, state
3940 merging (from LALR or IELR) and default reductions corrupt the
3941 expected token list. However, the list is correct for
3942 canonical LR with one exception: it will still contain any
3943 token that will not be accepted due to an error action in a
3944 later state.
3945 */
3946 if (!yyla.empty ())
3947 {
3948 int yytoken = yyla.type_get ();
3949 yyarg[yycount++] = yytname_[yytoken];
3950 int yyn = yypact_[yystate];
3951 if (!yy_pact_value_is_default_ (yyn))
3952 {
3953 /* Start YYX at -YYN if negative to avoid negative indexes in
3954 YYCHECK. In other words, skip the first -YYN actions for
3955 this state because they are default actions. */
3956 int yyxbegin = yyn < 0 ? -yyn : 0;
3957 // Stay within bounds of both yycheck and yytname.
3958 int yychecklim = yylast_ - yyn + 1;
3959 int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_;
3960 for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
3961 if (yycheck_[yyx + yyn] == yyx && yyx != yyterror_
3962 && !yy_table_value_is_error_ (yytable_[yyx + yyn]))
3963 {
3964 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
3965 {
3966 yycount = 1;
3967 break;
3968 }
3969 else
3970 yyarg[yycount++] = yytname_[yyx];
3971 }
3972 }
3973 }
3974
3975 char const* yyformat = YY_NULLPTR;
3976 switch (yycount)
3977 {
3978#define YYCASE_(N, S) \
3979 case N: \
3980 yyformat = S; \
3981 break
3982 default: // Avoid compiler warnings.
3983 YYCASE_ (0, YY_("syntax error"));
3984 YYCASE_ (1, YY_("syntax error, unexpected %s"));
3985 YYCASE_ (2, YY_("syntax error, unexpected %s, expecting %s"));
3986 YYCASE_ (3, YY_("syntax error, unexpected %s, expecting %s or %s"));
3987 YYCASE_ (4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
3988 YYCASE_ (5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
3989#undef YYCASE_
3990 }
3991
3992 std::string yyres;
3993 // Argument number.
3994 size_t yyi = 0;
3995 for (char const* yyp = yyformat; *yyp; ++yyp)
3996 if (yyp[0] == '%' && yyp[1] == 's' && yyi < yycount)
3997 {
3998 yyres += yytnamerr_ (yyarg[yyi++]);
3999 ++yyp;
4000 }
4001 else
4002 yyres += *yyp;
4003 return yyres;
4004 }
4005
4006
4007 const short Dhcp6Parser::yypact_ninf_ = -821;
4008
4009 const signed char Dhcp6Parser::yytable_ninf_ = -1;
4010
4011 const short
4012 Dhcp6Parser::yypact_[] =
4013 {
4014 337, -821, -821, -821, -821, -821, -821, -821, -821, -821,
4015 -821, -821, -821, -821, -821, -821, 65, 55, 66, 90,
4016 108, 110, 119, 125, 136, 169, 176, 177, 217, 245,
4017 246, 247, -821, -821, -821, -821, -821, -821, -821, -821,
4018 -821, -821, -821, -821, -821, -821, -821, -821, -821, -821,
4019 -821, -821, -821, -821, -821, -821, -821, -821, -821, -821,
4020 -821, -821, -821, -821, -821, -821, -821, -821, -821, -821,
4021 -821, -821, 55, -119, 28, 59, 25, 218, 64, 233,
4022 350, 47, 30, 170, -54, 456, -73, 165, -821, 258,
4023 194, 262, 293, 267, -821, -821, -821, -821, -821, 320,
4024 -821, 71, -821, -821, -821, -821, -821, -821, -821, -821,
4025 -821, -821, -821, 324, 346, 352, 354, 355, -821, -821,
4026 -821, -821, -821, -821, -821, -821, -821, -821, -821, -821,
4027 -821, -821, -821, -821, -821, 360, -821, -821, -821, -821,
4028 79, -821, -821, -821, -821, -821, -821, -821, -821, -821,
4029 -821, -821, -821, -821, -821, -821, -821, -821, -821, -821,
4030 -821, -821, -821, -821, -821, -821, -821, -821, -821, -821,
4031 -821, -821, -821, -821, 361, -821, 80, -821, -821, -821,
4032 -821, -821, -821, -821, -821, -821, -821, 362, 364, -821,
4033 -821, -821, -821, -821, -821, -821, -821, 86, -821, -821,
4034 -821, -821, -821, -821, -821, -821, -821, -821, -821, -821,
4035 -821, -821, -821, -821, -821, -821, -821, -821, -821, 104,
4036 -821, -821, -821, -821, -821, 380, -821, 381, 386, -821,
4037 -821, -821, -821, -821, -821, 105, -821, -821, -821, -821,
4038 -821, -821, -821, -821, -821, -821, -821, -821, -821, -821,
4039 -821, -821, -821, 340, 351, -821, -821, -821, -821, -821,
4040 -821, -821, -821, 370, -821, -821, 391, -821, -821, -821,
4041 394, -821, -821, 392, 396, -821, -821, -821, -821, -821,
4042 -821, -821, -821, -821, -821, -821, -821, -821, 398, 401,
4043 -821, -821, -821, -821, 400, 403, -821, -821, -821, -821,
4044 -821, -821, -821, -821, -821, -821, -821, -821, 111, -821,
4045 -821, -821, 405, -821, -821, 406, -821, 409, 418, -821,
4046 -821, 419, 421, -821, -821, -821, -821, -821, -821, -821,
4047 120, -821, -821, -821, -821, -821, -821, -821, -821, -821,
4048 -821, -821, -821, -821, -821, -821, -821, -821, 154, -821,
4049 -821, -821, 155, -821, -821, -821, 55, 55, -821, 257,
4050 424, 430, 432, 441, 447, -821, 28, -821, 448, 449,
4051 450, 453, 459, 289, 294, 295, 296, 298, 460, 464,
4052 466, 467, 468, 469, 471, 472, 474, 475, 476, 477,
4053 478, 479, 480, 482, 483, 317, 503, 504, 505, 59,
4054 -821, 506, 339, 25, -821, 509, 510, 511, 512, 514,
4055 348, 353, 519, 520, 521, 218, -821, 523, 64, -821,
4056 524, 358, 526, 363, 365, 233, -821, 527, 528, 531,
4057 533, 534, 535, 536, -821, 350, -821, 537, 540, 375,
4058 543, 544, 545, 377, -821, 30, 547, 379, 382, -821,
4059 170, 549, 550, 51, -821, 383, 553, 558, 393, 559,
4060 395, 399, 561, 565, 402, 423, 567, 568, 569, 570,
4061 456, -821, 572, -73, -821, 587, 165, -821, -821, -821,
4062 590, 592, 593, 55, 55, 55, -821, 594, 595, 596,
4063 597, 600, -821, -821, -821, -821, -821, 436, 602, 603,
4064 604, 605, 440, 374, 606, 608, 609, 610, 611, 612,
4065 614, 615, 616, 617, -821, 618, 605, 620, -821, 623,
4066 -821, -821, 624, 625, 446, 451, 452, -821, -821, 623,
4067 461, 626, -821, 462, -821, 465, -821, 470, -821, -821,
4068 -821, 623, 623, 623, 473, 481, 484, 485, -821, 486,
4069 487, -821, 488, 489, 490, -821, -821, 491, -821, -821,
4070 -821, 492, 55, -821, -821, 493, 494, -821, 495, -821,
4071 -821, 26, 498, -821, -821, 15, 496, 497, 499, -821,
4072 631, -821, 632, -821, 55, 59, -73, -821, -821, -821,
4073 165, 25, 213, 213, 634, -821, 635, 637, 638, -821,
4074 -821, -821, -821, -821, -821, -821, -821, 639, -50, 55,
4075 139, 556, 640, 641, 642, 229, 99, 138, -821, 456,
4076 -821, -821, 643, 645, -821, -821, -821, -821, -821, -39,
4077 -821, -821, -821, -821, -821, -821, -821, -821, -821, -821,
4078 -821, -821, -821, -821, -821, -821, -821, -821, -821, -821,
4079 -821, -821, -821, -821, -821, -821, -821, -821, -821, -821,
4080 -821, -821, -821, -821, 646, 634, -821, 164, 182, 191,
4081 259, -821, -821, -821, -821, 664, 666, 667, 668, 669,
4082 -821, 670, 671, -821, 672, 673, 674, -821, 260, -821,
4083 -821, -821, -821, -821, -821, -821, -821, -821, -821, -821,
4084 -821, -821, -821, -821, -821, -821, -821, 270, -821, 633,
4085 676, -821, -821, 675, 677, -821, -821, 678, 679, -821,
4086 -821, 680, 682, -821, -821, 681, 685, -821, -821, -821,
4087 167, -821, -821, -821, 683, -821, -821, -821, 190, -821,
4088 -821, -821, -821, 271, -821, -821, -821, 297, -821, -821,
4089 684, 688, -821, -821, 686, 690, -821, 691, 692, 693,
4090 694, 695, 696, 273, -821, -821, -821, -821, -821, -821,
4091 -821, -821, -821, 697, 698, 699, -821, -821, -821, -821,
4092 301, -821, -821, -821, -821, -821, -821, -821, -821, -821,
4093 -821, -821, 304, -821, -821, -821, 307, 513, -821, 700,
4094 701, -821, -821, 702, 704, -821, -821, -821, 703, -821,
4095 -821, 333, -821, 706, -821, -821, -821, -821, 705, 709,
4096 710, 711, 539, 532, 546, 548, 551, 712, 552, 554,
4097 714, 555, 557, 560, 213, -821, -821, 213, -821, 634,
4098 218, -821, 635, 30, -821, 637, 170, -821, 638, 390,
4099 -821, 639, -50, -821, -821, 139, -821, 715, 556, -821,
4100 121, 640, -821, 350, -821, 641, -54, -821, 642, 563,
4101 564, 566, 571, 573, 574, 229, -821, 716, 720, 575,
4102 576, 577, 99, -821, 723, 725, 138, -821, -821, -821,
4103 724, 728, 64, -821, 643, 233, -821, 645, 732, -821,
4104 44, 646, -821, -821, 397, 562, 579, 580, -821, -821,
4105 -821, -821, -821, 581, -821, -821, 582, -821, -821, -821,
4106 -821, 308, -821, 311, -821, 730, -821, 731, -821, -821,
4107 -821, -821, -821, -821, -821, -821, -821, -821, -821, -821,
4108 -821, -821, 315, -821, -821, -821, -821, -821, -821, -821,
4109 -821, 583, -821, -821, 736, -821, -821, -821, -821, -821,
4110 733, 740, -821, -821, -821, -821, -821, 746, -821, 318,
4111 -821, -821, -821, -821, -821, -821, -821, -821, 107, 585,
4112 -821, -821, -821, -821, 586, 588, -821, -821, 589, 319,
4113 -821, 334, -821, 591, -821, 753, -821, -821, -821, -821,
4114 -821, 335, -821, -821, -821, -821, -821, -821, -821, -821,
4115 -821, -821, -821, -821, -821, -821, -821, -821, -821, -821,
4116 -821, 390, -821, -821, 756, 598, -821, 121, -821, -821,
4117 -821, -821, -821, -821, -821, -821, -821, -821, -821, -821,
4118 -821, 758, 613, 759, 44, -821, -821, 629, -821, -821,
4119 689, -821, 630, -821, -821, 757, -821, -821, 343, -821,
4120 -5, 757, -821, -821, 761, 763, 764, 344, -821, -821,
4121 -821, -821, -821, -821, 770, 628, 622, 644, -5, -821,
4122 650, -821, -821, -821, -821, -821
4123 };
4124
4125 const unsigned short
4126 Dhcp6Parser::yydefact_[] =
4127 {
4128 0, 2, 4, 6, 8, 10, 12, 14, 16, 18,
4129 20, 22, 24, 26, 28, 30, 0, 0, 0, 0,
4130 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
4131 0, 0, 1, 47, 40, 36, 35, 32, 33, 34,
4132 39, 3, 37, 38, 60, 5, 72, 7, 117, 9,
4133 258, 11, 404, 13, 429, 15, 459, 17, 329, 19,
4134 337, 21, 374, 23, 223, 25, 558, 27, 628, 29,
4135 619, 31, 49, 43, 0, 0, 0, 0, 0, 0,
4136 461, 0, 339, 376, 0, 0, 0, 0, 51, 0,
4137 50, 0, 0, 44, 70, 626, 611, 613, 615, 0,
4138 69, 0, 62, 64, 66, 67, 68, 65, 617, 115,
4139 129, 131, 133, 0, 0, 0, 0, 0, 113, 250,
4140 327, 366, 417, 419, 292, 300, 196, 213, 204, 189,
4141 496, 451, 215, 234, 517, 0, 541, 554, 556, 107,
4142 0, 74, 76, 77, 78, 79, 80, 105, 83, 84,
4143 85, 86, 102, 87, 89, 88, 93, 94, 81, 106,
4144 82, 91, 92, 100, 101, 103, 90, 95, 96, 97,
4145 98, 99, 104, 126, 0, 125, 0, 119, 121, 122,
4146 123, 124, 396, 421, 282, 284, 286, 0, 0, 290,
4147 288, 490, 281, 262, 263, 264, 265, 0, 260, 269,
4148 270, 271, 274, 275, 277, 272, 273, 266, 267, 279,
4149 280, 268, 276, 278, 415, 414, 410, 411, 409, 0,
4150 406, 408, 412, 413, 444, 0, 447, 0, 0, 443,
4151 437, 438, 436, 441, 442, 0, 431, 433, 434, 439,
4152 440, 435, 488, 476, 478, 480, 482, 484, 486, 475,
4153 472, 473, 474, 0, 462, 463, 467, 468, 465, 469,
4154 470, 471, 466, 0, 356, 174, 0, 360, 358, 363,
4155 0, 352, 353, 0, 340, 341, 343, 355, 344, 345,
4156 346, 362, 347, 348, 349, 350, 351, 390, 0, 0,
4157 388, 389, 392, 393, 0, 377, 378, 380, 381, 382,
4158 383, 384, 385, 386, 387, 230, 232, 227, 0, 225,
4159 228, 229, 0, 581, 583, 0, 586, 0, 0, 590,
4160 594, 0, 0, 598, 605, 607, 609, 579, 577, 578,
4161 0, 560, 562, 563, 564, 565, 566, 567, 568, 569,
4162 570, 571, 572, 573, 574, 575, 576, 633, 0, 630,
4163 632, 624, 0, 621, 623, 48, 0, 0, 41, 0,
4164 0, 0, 0, 0, 0, 59, 0, 61, 0, 0,
4165 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
4166 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
4167 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
4168 73, 0, 0, 0, 118, 0, 0, 0, 0, 0,
4169 0, 0, 0, 0, 0, 0, 259, 0, 0, 405,
4170 0, 0, 0, 0, 0, 0, 430, 0, 0, 0,
4171 0, 0, 0, 0, 460, 0, 330, 0, 0, 0,
4172 0, 0, 0, 0, 338, 0, 0, 0, 0, 375,
4173 0, 0, 0, 0, 224, 0, 0, 0, 0, 0,
4174 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
4175 0, 559, 0, 0, 629, 0, 0, 620, 52, 45,
4176 0, 0, 0, 0, 0, 0, 63, 0, 0, 0,
4177 0, 0, 108, 109, 110, 111, 112, 0, 0, 0,
4178 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
4179 0, 0, 0, 0, 540, 0, 0, 0, 75, 0,
4180 128, 120, 0, 0, 0, 0, 0, 298, 299, 0,
4181 0, 0, 261, 0, 407, 0, 446, 0, 449, 450,
4182 432, 0, 0, 0, 0, 0, 0, 0, 464, 0,
4183 0, 354, 0, 0, 0, 365, 342, 0, 394, 395,
4184 379, 0, 0, 226, 580, 0, 0, 585, 0, 588,
4185 589, 0, 0, 596, 597, 0, 0, 0, 0, 561,
4186 0, 631, 0, 622, 0, 0, 0, 612, 614, 616,
4187 0, 0, 0, 0, 135, 114, 252, 331, 368, 42,
4188 418, 420, 294, 295, 296, 297, 293, 302, 0, 49,
4189 0, 0, 0, 453, 217, 0, 0, 0, 555, 0,
4190 53, 127, 398, 423, 283, 285, 287, 291, 289, 0,
4191 416, 445, 448, 489, 477, 479, 481, 483, 485, 487,
4192 357, 175, 361, 359, 364, 391, 231, 233, 582, 584,
4193 587, 592, 593, 591, 595, 600, 601, 602, 603, 604,
4194 599, 606, 608, 610, 0, 135, 46, 0, 0, 0,
4195 0, 161, 167, 169, 171, 0, 0, 0, 0, 0,
4196 184, 0, 0, 187, 0, 0, 0, 160, 0, 141,
4197 143, 144, 145, 146, 147, 148, 149, 150, 151, 152,
4198 155, 156, 157, 158, 153, 154, 159, 0, 139, 0,
4199 136, 137, 256, 0, 253, 254, 335, 0, 332, 333,
4200 372, 0, 369, 370, 306, 0, 303, 304, 202, 203,
4201 0, 198, 200, 201, 0, 211, 212, 208, 0, 206,
4202 209, 210, 194, 0, 191, 193, 500, 0, 498, 457,
4203 0, 454, 455, 221, 0, 218, 219, 0, 0, 0,
4204 0, 0, 0, 0, 236, 238, 239, 240, 241, 242,
4205 243, 530, 536, 0, 0, 0, 529, 526, 527, 528,
4206 0, 519, 521, 524, 522, 523, 525, 550, 552, 549,
4207 547, 548, 0, 543, 545, 546, 0, 55, 402, 0,
4208 399, 400, 427, 0, 424, 425, 494, 493, 0, 492,
4209 637, 0, 635, 0, 71, 627, 618, 116, 0, 0,
4210 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
4211 0, 0, 0, 0, 0, 130, 132, 0, 134, 0,
4212 0, 251, 0, 339, 328, 0, 376, 367, 0, 0,
4213 301, 0, 0, 197, 214, 0, 205, 0, 0, 190,
4214 502, 0, 497, 461, 452, 0, 0, 216, 0, 0,
4215 0, 0, 0, 0, 0, 0, 235, 0, 0, 0,
4216 0, 0, 0, 518, 0, 0, 0, 542, 557, 57,
4217 0, 56, 0, 397, 0, 0, 422, 0, 0, 491,
4218 0, 0, 634, 625, 0, 0, 0, 0, 173, 176,
4219 177, 178, 179, 0, 186, 180, 0, 181, 182, 183,
4220 142, 0, 138, 0, 255, 0, 334, 0, 371, 326,
4221 321, 323, 314, 315, 310, 311, 312, 313, 319, 320,
4222 318, 322, 0, 308, 316, 324, 325, 317, 305, 199,
4223 207, 0, 192, 514, 0, 512, 513, 509, 510, 511,
4224 0, 503, 504, 506, 507, 508, 499, 0, 456, 0,
4225 220, 244, 245, 246, 247, 248, 249, 237, 0, 0,
4226 535, 538, 539, 520, 0, 0, 544, 54, 0, 0,
4227 401, 0, 426, 0, 651, 0, 649, 647, 641, 645,
4228 646, 0, 639, 643, 644, 642, 636, 163, 164, 165,
4229 166, 162, 168, 170, 172, 185, 188, 140, 257, 336,
4230 373, 0, 307, 195, 0, 0, 501, 0, 458, 222,
4231 532, 533, 534, 531, 537, 551, 553, 58, 403, 428,
4232 495, 0, 0, 0, 0, 638, 309, 0, 516, 505,
4233 0, 648, 0, 640, 515, 0, 650, 655, 0, 653,
4234 0, 0, 652, 663, 0, 0, 0, 0, 657, 659,
4235 660, 661, 662, 654, 0, 0, 0, 0, 0, 656,
4236 0, 665, 666, 667, 658, 664
4237 };
4238
4239 const short
4240 Dhcp6Parser::yypgoto_[] =
4241 {
4242 -821, -821, -821, -821, -821, -821, -821, -821, -821, -821,
4243 -821, -821, -821, -821, -821, -821, -821, 6, -821, -453,
4244 -821, 265, -821, -821, -821, -821, 174, -821, -408, -821,
4245 -821, -821, -74, -821, -821, -821, 443, -821, -821, -821,
4246 -821, 211, 411, -62, -46, -45, -43, -821, -821, -821,
4247 -821, -821, -821, -821, 220, 420, -821, -821, -821, -821,
4248 -821, -821, -821, -821, -821, 149, -821, -12, -821, -565,
4249 -3, -821, -821, -821, -821, -821, -821, -821, -821, -821,
4250 -821, -70, -821, -600, -821, -821, -821, -821, -821, -821,
4251 -821, -821, -821, -821, -821, -821, -821, -821, -821, -26,
4252 -821, -821, -821, -821, -821, -19, -584, -821, -821, -821,
4253 -821, -20, -821, -821, -821, -821, -821, -821, -821, -821,
4254 -28, -821, -821, -821, -25, 404, -821, -821, -821, -821,
4255 -821, -821, -821, -31, -821, -821, -821, -821, -821, -821,
4256 -820, -821, -821, -821, 1, -821, -821, -821, 5, 431,
4257 -821, -821, -819, -821, -816, -821, -36, -821, -32, -821,
4258 -42, -821, -821, -821, -813, -821, -821, -821, -821, -4,
4259 -821, -821, -173, 769, -821, -821, -821, -821, -821, 8,
4260 -821, -821, -821, 11, -821, 410, -821, -76, -821, -821,
4261 -821, -821, -821, -69, -821, -821, -821, -821, -821, -11,
4262 -821, -821, -821, 3, -821, -821, -821, 18, -821, 415,
4263 -821, -821, -821, -821, -821, -821, -821, -821, -821, -821,
4264 -821, -33, -821, -821, -821, -23, 454, -821, -821, -58,
4265 -821, -24, -821, -821, -821, -821, -821, -30, -821, -821,
4266 -821, -29, 445, -821, -821, -821, -821, -821, -821, -821,
4267 -60, -821, -821, -821, 9, -821, -821, -821, 10, -821,
4268 442, 249, -821, -821, -821, -821, -821, -821, -821, -821,
4269 -821, -821, -821, -821, -821, -812, -821, -821, -821, -821,
4270 -821, -821, -821, 14, -821, -821, -821, -148, -821, -821,
4271 -821, -821, -821, -821, -821, -2, -821, -821, -821, -821,
4272 -821, -821, -821, -821, -821, -821, -821, -821, -1, -821,
4273 -821, -821, -821, -821, -821, -821, -821, -821, -821, 263,
4274 413, -821, -821, -821, -821, -821, -821, -821, -821, -821,
4275 -821, -821, -821, -821, -821, -821, -821, -821, -821, -821,
4276 -821, -821, -821, -821, -821, -821, -821, -821, -821, -821,
4277 -821, -821, -821, -821, -821, -821, -821, 299, 412, -821,
4278 -821, -821, -821, -821, -821, 300, 414, -821, -821, -821,
4279 -10, -821, -821, -154, -821, -821, -821, -821, -821, -821,
4280 -169, -821, -821, -185, -821, -821, -821, -821, -821
4281 };
4282
4283 const short
4284 Dhcp6Parser::yydefgoto_[] =
4285 {
4286 -1, 16, 17, 18, 19, 20, 21, 22, 23, 24,
4287 25, 26, 27, 28, 29, 30, 31, 88, 41, 42,
4288 73, 600, 92, 93, 43, 72, 89, 90, 621, 797,
4289 890, 891, 687, 45, 74, 101, 102, 103, 360, 47,
4290 75, 140, 141, 142, 143, 144, 145, 146, 147, 378,
4291 148, 369, 49, 76, 176, 177, 178, 401, 179, 149,
4292 370, 150, 371, 151, 372, 709, 710, 711, 837, 688,
4293 689, 690, 818, 1011, 691, 819, 692, 820, 693, 821,
4294 694, 695, 438, 696, 697, 698, 699, 700, 701, 702,
4295 703, 704, 827, 705, 706, 830, 152, 389, 743, 744,
4296 745, 857, 153, 386, 730, 731, 732, 733, 154, 388,
4297 738, 739, 740, 741, 155, 387, 156, 392, 754, 755,
4298 756, 866, 65, 84, 308, 309, 310, 451, 311, 452,
4299 157, 393, 763, 764, 765, 766, 767, 768, 769, 770,
4300 158, 379, 713, 714, 715, 840, 51, 77, 197, 198,
4301 199, 407, 200, 408, 201, 409, 202, 413, 203, 412,
4302 159, 384, 606, 205, 206, 160, 385, 725, 726, 727,
4303 849, 942, 943, 161, 380, 59, 81, 717, 718, 719,
4304 843, 61, 82, 273, 274, 275, 276, 277, 278, 279,
4305 437, 280, 441, 281, 440, 282, 283, 442, 284, 162,
4306 381, 721, 722, 723, 846, 63, 83, 294, 295, 296,
4307 297, 298, 446, 299, 300, 301, 302, 208, 405, 799,
4308 800, 801, 892, 53, 78, 219, 220, 221, 417, 163,
4309 382, 164, 383, 211, 406, 803, 804, 805, 895, 55,
4310 79, 235, 236, 237, 420, 238, 239, 422, 240, 241,
4311 165, 391, 750, 751, 752, 863, 57, 80, 253, 254,
4312 255, 256, 428, 257, 429, 258, 430, 259, 431, 260,
4313 432, 261, 433, 262, 427, 213, 414, 808, 809, 898,
4314 166, 390, 747, 748, 860, 960, 961, 962, 963, 964,
4315 1024, 965, 167, 394, 780, 781, 782, 877, 1033, 783,
4316 784, 878, 785, 786, 168, 169, 396, 792, 793, 794,
4317 884, 795, 885, 170, 397, 171, 398, 67, 85, 330,
4318 331, 332, 333, 456, 334, 457, 335, 336, 459, 337,
4319 338, 339, 462, 653, 340, 463, 341, 342, 343, 466,
4320 660, 344, 467, 345, 468, 346, 469, 104, 362, 105,
4321 363, 106, 364, 172, 368, 71, 87, 352, 353, 354,
4322 475, 107, 361, 69, 86, 348, 349, 350, 472, 811,
4323 812, 900, 1001, 1002, 1003, 1004, 1043, 1005, 1041, 1058,
4324 1059, 1060, 1067, 1068, 1069, 1074, 1070, 1071, 1072
4325 };
4326
4327 const unsigned short
4328 Dhcp6Parser::yytable_[] =
4329 {
4330 100, 139, 175, 192, 215, 229, 249, 292, 271, 290,
4331 307, 327, 272, 291, 293, 193, 777, 212, 180, 209,
4332 222, 233, 251, 40, 285, 303, 737, 328, 707, 935,
4333 936, 194, 195, 937, 196, 204, 941, 947, 94, 173,
4334 174, 728, 216, 230, 305, 306, 217, 231, 599, 264,
4335 243, 91, 181, 210, 223, 234, 252, 806, 286, 304,
4336 33, 329, 34, 599, 35, 32, 207, 218, 232, 250,
4337 108, 347, 109, 44, 366, 110, 111, 112, 265, 367,
4338 266, 267, 399, 403, 268, 269, 270, 400, 404, 415,
4339 122, 123, 265, 120, 416, 122, 123, 46, 113, 114,
4340 115, 116, 117, 118, 119, 120, 121, 418, 425, 122,
4341 123, 121, 419, 426, 453, 48, 99, 50, 771, 454,
4342 729, 627, 214, 470, 122, 123, 52, 676, 471, 122,
4343 123, 124, 54, 633, 634, 635, 125, 126, 127, 128,
4344 129, 1063, 130, 56, 1064, 1065, 1066, 131, 189, 305,
4345 306, 190, 655, 656, 657, 658, 132, 473, 476, 133,
4346 651, 652, 474, 477, 122, 123, 134, 399, 121, 265,
4347 852, 95, 814, 853, 135, 136, 58, 351, 137, 138,
4348 96, 97, 98, 60, 62, 473, 122, 123, 659, 994,
4349 815, 995, 996, 855, 476, 99, 856, 356, 99, 816,
4350 99, 935, 936, 122, 123, 937, 953, 954, 941, 947,
4351 772, 773, 774, 775, 99, 1030, 1031, 1032, 265, 287,
4352 266, 267, 288, 289, 64, 36, 37, 38, 39, 99,
4353 728, 735, 671, 736, 99, 122, 123, 672, 673, 674,
4354 675, 676, 677, 678, 679, 680, 681, 682, 683, 684,
4355 685, 686, 66, 68, 70, 787, 788, 113, 114, 115,
4356 116, 265, 403, 834, 355, 121, 357, 817, 835, 99,
4357 359, 737, 921, 834, 858, 182, 875, 183, 836, 859,
4358 121, 876, 777, 122, 123, 184, 185, 186, 187, 188,
4359 124, 99, 100, 224, 225, 226, 227, 228, 122, 123,
4360 861, 358, 189, 862, 882, 190, 131, 886, 99, 883,
4361 470, 834, 887, 191, 415, 888, 1017, 189, 1021, 1018,
4362 190, 453, 418, 1022, 365, 139, 1029, 1038, 373, 175,
4363 757, 758, 759, 760, 761, 762, 901, 425, 1044, 902,
4364 99, 192, 1039, 1045, 215, 180, 1061, 1078, 434, 1062,
4365 374, 229, 1079, 193, 435, 212, 375, 209, 376, 377,
4366 222, 249, 478, 479, 395, 402, 410, 233, 411, 194,
4367 195, 271, 196, 204, 292, 272, 290, 251, 436, 181,
4368 291, 293, 216, 99, 421, 423, 217, 285, 99, 230,
4369 424, 210, 303, 231, 223, 439, 327, 121, 443, 445,
4370 444, 234, 447, 99, 207, 448, 450, 218, 449, 455,
4371 458, 252, 328, 460, 232, 122, 123, 1007, 1008, 1009,
4372 1010, 286, 461, 464, 250, 465, 304, 480, 481, 113,
4373 114, 115, 116, 242, 482, 119, 483, 121, 265, 243,
4374 244, 245, 246, 247, 248, 484, 329, 602, 603, 604,
4375 605, 485, 487, 488, 489, 122, 123, 490, 185, 186,
4376 492, 188, 124, 491, 497, 493, 494, 495, 498, 496,
4377 499, 500, 501, 502, 189, 503, 504, 190, 505, 506,
4378 507, 508, 509, 510, 511, 191, 512, 513, 514, 587,
4379 588, 589, 1, 2, 3, 4, 5, 6, 7, 8,
4380 9, 10, 11, 12, 13, 14, 15, 515, 516, 517,
4381 519, 139, 520, 522, 523, 524, 525, 175, 526, 527,
4382 99, 122, 123, 529, 530, 531, 528, 533, 535, 536,
4383 537, 541, 542, 180, 538, 543, 539, 544, 545, 546,
4384 547, 549, 776, 789, 550, 327, 551, 552, 553, 554,
4385 555, 557, 558, 561, 562, 559, 564, 565, 778, 790,
4386 99, 328, 566, 568, 567, 571, 569, 181, 647, 572,
4387 570, 575, 576, 577, 578, 573, 580, 312, 313, 314,
4388 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
4389 666, 582, 779, 791, 584, 329, 574, 325, 326, 585,
4390 586, 590, 591, 592, 593, 594, 595, 596, 597, 598,
4391 601, 607, 34, 608, 609, 610, 624, 612, 611, 613,
4392 614, 625, 626, 615, 616, 617, 99, 619, 620, 622,
4393 623, 628, 630, 629, 654, 631, 664, 665, 742, 838,
4394 632, 708, 712, 636, 716, 720, 724, 746, 749, 753,
4395 798, 637, 802, 810, 638, 639, 640, 641, 642, 643,
4396 644, 645, 646, 648, 649, 650, 661, 662, 822, 663,
4397 823, 824, 825, 826, 828, 829, 831, 832, 833, 839,
4398 842, 841, 845, 889, 844, 848, 847, 850, 851, 854,
4399 864, 865, 867, 868, 1055, 869, 870, 871, 872, 873,
4400 874, 879, 880, 881, 894, 909, 893, 897, 896, 904,
4401 908, 899, 903, 905, 906, 907, 913, 910, 916, 951,
4402 978, 911, 912, 914, 979, 915, 917, 984, 918, 985,
4403 987, 988, 1012, 919, 971, 972, 993, 973, 1019, 1020,
4404 1025, 1026, 974, 1027, 975, 976, 980, 981, 982, 1013,
4405 1014, 1015, 1016, 1023, 1028, 1034, 1035, 1042, 1036, 1037,
4406 1047, 1040, 1050, 1052, 1057, 1075, 192, 1076, 1077, 271,
4407 292, 1048, 290, 272, 1080, 929, 291, 293, 193, 934,
4408 212, 618, 209, 734, 1051, 285, 955, 930, 303, 249,
4409 956, 945, 307, 1082, 194, 195, 667, 196, 204, 1054,
4410 1056, 1081, 958, 931, 932, 251, 933, 940, 776, 486,
4411 518, 670, 789, 938, 813, 1083, 210, 939, 215, 286,
4412 1085, 229, 304, 521, 778, 946, 997, 922, 790, 207,
4413 998, 920, 952, 949, 222, 950, 959, 233, 944, 252,
4414 970, 969, 999, 924, 977, 923, 532, 948, 1046, 957,
4415 263, 928, 250, 926, 925, 556, 216, 563, 779, 230,
4416 217, 990, 791, 231, 927, 560, 991, 992, 223, 989,
4417 540, 234, 534, 967, 968, 966, 1000, 548, 807, 1049,
4418 983, 218, 796, 579, 232, 986, 668, 581, 583, 669,
4419 1053, 1006, 1073, 1084, 0, 0, 0, 0, 0, 0,
4420 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
4421 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
4422 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
4423 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
4424 0, 0, 0, 0, 0, 0, 0, 929, 0, 0,
4425 0, 934, 0, 955, 0, 0, 0, 956, 0, 930,
4426 0, 0, 0, 945, 0, 0, 0, 0, 0, 958,
4427 997, 0, 0, 0, 998, 931, 932, 0, 933, 940,
4428 0, 0, 0, 0, 0, 938, 999, 0, 0, 939,
4429 0, 0, 0, 0, 0, 0, 0, 946, 0, 0,
4430 0, 0, 0, 959, 0, 0, 0, 0, 0, 0,
4431 944, 0, 0, 0, 0, 0, 957, 0, 0, 0,
4432 1000
4433 };
4434
4435 const short
4436 Dhcp6Parser::yycheck_[] =
4437 {
4438 74, 75, 76, 77, 78, 79, 80, 83, 82, 83,
4439 84, 85, 82, 83, 83, 77, 616, 77, 76, 77,
4440 78, 79, 80, 17, 82, 83, 610, 85, 593, 849,
4441 849, 77, 77, 849, 77, 77, 849, 849, 10, 14,
4442 15, 91, 78, 79, 98, 99, 78, 79, 501, 19,
4443 89, 170, 76, 77, 78, 79, 80, 96, 82, 83,
4444 5, 85, 7, 516, 9, 0, 77, 78, 79, 80,
4445 11, 144, 13, 7, 3, 16, 17, 18, 48, 8,
4446 50, 51, 3, 3, 54, 55, 56, 8, 8, 3,
4447 65, 66, 48, 46, 8, 65, 66, 7, 39, 40,
4448 41, 42, 43, 44, 45, 46, 47, 3, 3, 65,
4449 66, 47, 8, 8, 3, 7, 170, 7, 19, 8,
4450 170, 529, 58, 3, 65, 66, 7, 28, 8, 65,
4451 66, 72, 7, 541, 542, 543, 77, 78, 79, 80,
4452 81, 146, 83, 7, 149, 150, 151, 88, 84, 98,
4453 99, 87, 137, 138, 139, 140, 97, 3, 3, 100,
4454 134, 135, 8, 8, 65, 66, 107, 3, 47, 48,
4455 3, 143, 8, 6, 115, 116, 7, 12, 119, 120,
4456 152, 153, 154, 7, 7, 3, 65, 66, 173, 145,
4457 8, 147, 148, 3, 3, 170, 6, 3, 170, 8,
4458 170, 1021, 1021, 65, 66, 1021, 85, 86, 1021, 1021,
4459 111, 112, 113, 114, 170, 108, 109, 110, 48, 49,
4460 50, 51, 52, 53, 7, 170, 171, 172, 173, 170,
4461 91, 92, 19, 94, 170, 65, 66, 24, 25, 26,
4462 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
4463 37, 38, 7, 7, 7, 117, 118, 39, 40, 41,
4464 42, 48, 3, 3, 6, 47, 4, 8, 8, 170,
4465 3, 855, 837, 3, 3, 57, 3, 59, 8, 8,
4466 47, 8, 882, 65, 66, 67, 68, 69, 70, 71,
4467 72, 170, 366, 60, 61, 62, 63, 64, 65, 66,
4468 3, 8, 84, 6, 3, 87, 88, 3, 170, 8,
4469 3, 3, 8, 95, 3, 8, 8, 84, 3, 8,
4470 87, 3, 3, 8, 4, 399, 8, 8, 4, 403,
4471 101, 102, 103, 104, 105, 106, 3, 3, 3, 6,
4472 170, 415, 8, 8, 418, 403, 3, 3, 8, 6,
4473 4, 425, 8, 415, 3, 415, 4, 415, 4, 4,
4474 418, 435, 356, 357, 4, 4, 4, 425, 4, 415,
4475 415, 445, 415, 415, 450, 445, 450, 435, 8, 403,
4476 450, 450, 418, 170, 4, 4, 418, 445, 170, 425,
4477 4, 415, 450, 425, 418, 4, 470, 47, 4, 3,
4478 8, 425, 4, 170, 415, 4, 3, 418, 8, 4,
4479 4, 435, 470, 4, 425, 65, 66, 20, 21, 22,
4480 23, 445, 4, 4, 435, 4, 450, 170, 4, 39,
4481 40, 41, 42, 83, 4, 45, 4, 47, 48, 89,
4482 90, 91, 92, 93, 94, 4, 470, 73, 74, 75,
4483 76, 4, 4, 4, 4, 65, 66, 4, 68, 69,
4484 171, 71, 72, 4, 4, 171, 171, 171, 4, 171,
4485 4, 4, 4, 4, 84, 4, 4, 87, 4, 4,
4486 4, 4, 4, 4, 4, 95, 4, 4, 171, 483,
4487 484, 485, 155, 156, 157, 158, 159, 160, 161, 162,
4488 163, 164, 165, 166, 167, 168, 169, 4, 4, 4,
4489 4, 585, 173, 4, 4, 4, 4, 591, 4, 171,
4490 170, 65, 66, 4, 4, 4, 173, 4, 4, 171,
4491 4, 4, 4, 591, 171, 4, 171, 4, 4, 4,
4492 4, 4, 616, 617, 4, 619, 171, 4, 4, 4,
4493 173, 4, 173, 4, 4, 173, 173, 4, 616, 617,
4494 170, 619, 4, 4, 171, 4, 171, 591, 562, 4,
4495 171, 4, 4, 4, 4, 173, 4, 121, 122, 123,
4496 124, 125, 126, 127, 128, 129, 130, 131, 132, 133,
4497 584, 4, 616, 617, 4, 619, 173, 141, 142, 7,
4498 7, 7, 7, 7, 7, 5, 170, 5, 5, 5,
4499 170, 5, 7, 5, 5, 5, 170, 5, 7, 5,
4500 5, 170, 170, 7, 7, 7, 170, 7, 5, 5,
4501 5, 170, 170, 7, 136, 170, 5, 5, 82, 6,
4502 170, 7, 7, 170, 7, 7, 7, 7, 7, 7,
4503 7, 170, 7, 7, 170, 170, 170, 170, 170, 170,
4504 170, 170, 170, 170, 170, 170, 170, 170, 4, 170,
4505 4, 4, 4, 4, 4, 4, 4, 4, 4, 3,
4506 3, 6, 3, 170, 6, 3, 6, 6, 3, 6,
4507 6, 3, 6, 3, 5, 4, 4, 4, 4, 4,
4508 4, 4, 4, 4, 3, 173, 6, 3, 6, 4,
4509 171, 8, 6, 4, 4, 4, 4, 171, 4, 4,
4510 4, 173, 171, 171, 4, 171, 171, 4, 171, 4,
4511 6, 3, 170, 173, 171, 171, 4, 171, 8, 8,
4512 4, 8, 171, 3, 171, 171, 171, 171, 171, 170,
4513 170, 170, 170, 170, 8, 170, 170, 4, 170, 170,
4514 4, 170, 4, 4, 7, 4, 840, 4, 4, 843,
4515 846, 173, 846, 843, 4, 849, 846, 846, 840, 849,
4516 840, 516, 840, 609, 171, 843, 860, 849, 846, 863,
4517 860, 849, 866, 171, 840, 840, 585, 840, 840, 170,
4518 170, 173, 860, 849, 849, 863, 849, 849, 882, 366,
4519 399, 591, 886, 849, 665, 171, 840, 849, 892, 843,
4520 170, 895, 846, 403, 882, 849, 900, 839, 886, 840,
4521 900, 834, 858, 852, 892, 855, 860, 895, 849, 863,
4522 868, 866, 900, 842, 875, 840, 415, 851, 1021, 860,
4523 81, 848, 863, 845, 843, 445, 892, 453, 882, 895,
4524 892, 894, 886, 895, 846, 450, 895, 897, 892, 892,
4525 425, 895, 418, 863, 865, 861, 900, 435, 629, 1027,
4526 882, 892, 619, 470, 895, 886, 586, 473, 476, 590,
4527 1044, 901, 1061, 1078, -1, -1, -1, -1, -1, -1,
4528 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4529 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4530 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4531 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
4532 -1, -1, -1, -1, -1, -1, -1, 1021, -1, -1,
4533 -1, 1021, -1, 1027, -1, -1, -1, 1027, -1, 1021,
4534 -1, -1, -1, 1021, -1, -1, -1, -1, -1, 1027,
4535 1044, -1, -1, -1, 1044, 1021, 1021, -1, 1021, 1021,
4536 -1, -1, -1, -1, -1, 1021, 1044, -1, -1, 1021,
4537 -1, -1, -1, -1, -1, -1, -1, 1021, -1, -1,
4538 -1, -1, -1, 1027, -1, -1, -1, -1, -1, -1,
4539 1021, -1, -1, -1, -1, -1, 1027, -1, -1, -1,
4540 1044
4541 };
4542
4543 const unsigned short
4544 Dhcp6Parser::yystos_[] =
4545 {
4546 0, 155, 156, 157, 158, 159, 160, 161, 162, 163,
4547 164, 165, 166, 167, 168, 169, 175, 176, 177, 178,
4548 179, 180, 181, 182, 183, 184, 185, 186, 187, 188,
4549 189, 190, 0, 5, 7, 9, 170, 171, 172, 173,
4550 191, 192, 193, 198, 7, 207, 7, 213, 7, 226,
4551 7, 320, 7, 397, 7, 413, 7, 430, 7, 349,
4552 7, 355, 7, 379, 7, 296, 7, 491, 7, 537,
4553 7, 529, 199, 194, 208, 214, 227, 321, 398, 414,
4554 431, 350, 356, 380, 297, 492, 538, 530, 191, 200,
4555 201, 170, 196, 197, 10, 143, 152, 153, 154, 170,
4556 206, 209, 210, 211, 521, 523, 525, 535, 11, 13,
4557 16, 17, 18, 39, 40, 41, 42, 43, 44, 45,
4558 46, 47, 65, 66, 72, 77, 78, 79, 80, 81,
4559 83, 88, 97, 100, 107, 115, 116, 119, 120, 206,
4560 215, 216, 217, 218, 219, 220, 221, 222, 224, 233,
4561 235, 237, 270, 276, 282, 288, 290, 304, 314, 334,
4562 339, 347, 373, 403, 405, 424, 454, 466, 478, 479,
4563 487, 489, 527, 14, 15, 206, 228, 229, 230, 232,
4564 403, 405, 57, 59, 67, 68, 69, 70, 71, 84,
4565 87, 95, 206, 217, 218, 219, 220, 322, 323, 324,
4566 326, 328, 330, 332, 334, 337, 338, 373, 391, 403,
4567 405, 407, 424, 449, 58, 206, 330, 332, 373, 399,
4568 400, 401, 403, 405, 60, 61, 62, 63, 64, 206,
4569 330, 332, 373, 403, 405, 415, 416, 417, 419, 420,
4570 422, 423, 83, 89, 90, 91, 92, 93, 94, 206,
4571 373, 403, 405, 432, 433, 434, 435, 437, 439, 441,
4572 443, 445, 447, 347, 19, 48, 50, 51, 54, 55,
4573 56, 206, 255, 357, 358, 359, 360, 361, 362, 363,
4574 365, 367, 369, 370, 372, 403, 405, 49, 52, 53,
4575 206, 255, 361, 367, 381, 382, 383, 384, 385, 387,
4576 388, 389, 390, 403, 405, 98, 99, 206, 298, 299,
4577 300, 302, 121, 122, 123, 124, 125, 126, 127, 128,
4578 129, 130, 131, 132, 133, 141, 142, 206, 403, 405,
4579 493, 494, 495, 496, 498, 500, 501, 503, 504, 505,
4580 508, 510, 511, 512, 515, 517, 519, 144, 539, 540,
4581 541, 12, 531, 532, 533, 6, 3, 4, 8, 3,
4582 212, 536, 522, 524, 526, 4, 3, 8, 528, 225,
4583 234, 236, 238, 4, 4, 4, 4, 4, 223, 315,
4584 348, 374, 404, 406, 335, 340, 277, 289, 283, 271,
4585 455, 425, 291, 305, 467, 4, 480, 488, 490, 3,
4586 8, 231, 4, 3, 8, 392, 408, 325, 327, 329,
4587 4, 4, 333, 331, 450, 3, 8, 402, 3, 8,
4588 418, 4, 421, 4, 4, 3, 8, 448, 436, 438,
4589 440, 442, 444, 446, 8, 3, 8, 364, 256, 4,
4590 368, 366, 371, 4, 8, 3, 386, 4, 4, 8,
4591 3, 301, 303, 3, 8, 4, 497, 499, 4, 502,
4592 4, 4, 506, 509, 4, 4, 513, 516, 518, 520,
4593 3, 8, 542, 3, 8, 534, 3, 8, 191, 191,
4594 170, 4, 4, 4, 4, 4, 210, 4, 4, 4,
4595 4, 4, 171, 171, 171, 171, 171, 4, 4, 4,
4596 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4597 4, 4, 4, 4, 171, 4, 4, 4, 216, 4,
4598 173, 229, 4, 4, 4, 4, 4, 171, 173, 4,
4599 4, 4, 323, 4, 400, 4, 171, 4, 171, 171,
4600 416, 4, 4, 4, 4, 4, 4, 4, 434, 4,
4601 4, 171, 4, 4, 4, 173, 359, 4, 173, 173,
4602 383, 4, 4, 299, 173, 4, 4, 171, 4, 171,
4603 171, 4, 4, 173, 173, 4, 4, 4, 4, 494,
4604 4, 540, 4, 532, 4, 7, 7, 191, 191, 191,
4605 7, 7, 7, 7, 5, 170, 5, 5, 5, 193,
4606 195, 170, 73, 74, 75, 76, 336, 5, 5, 5,
4607 5, 7, 5, 5, 5, 7, 7, 7, 195, 7,
4608 5, 202, 5, 5, 170, 170, 170, 202, 170, 7,
4609 170, 170, 170, 202, 202, 202, 170, 170, 170, 170,
4610 170, 170, 170, 170, 170, 170, 170, 191, 170, 170,
4611 170, 134, 135, 507, 136, 137, 138, 139, 140, 173,
4612 514, 170, 170, 170, 5, 5, 191, 215, 539, 531,
4613 228, 19, 24, 25, 26, 27, 28, 29, 30, 31,
4614 32, 33, 34, 35, 36, 37, 38, 206, 243, 244,
4615 245, 248, 250, 252, 254, 255, 257, 258, 259, 260,
4616 261, 262, 263, 264, 265, 267, 268, 243, 7, 239,
4617 240, 241, 7, 316, 317, 318, 7, 351, 352, 353,
4618 7, 375, 376, 377, 7, 341, 342, 343, 91, 170,
4619 278, 279, 280, 281, 200, 92, 94, 280, 284, 285,
4620 286, 287, 82, 272, 273, 274, 7, 456, 457, 7,
4621 426, 427, 428, 7, 292, 293, 294, 101, 102, 103,
4622 104, 105, 106, 306, 307, 308, 309, 310, 311, 312,
4623 313, 19, 111, 112, 113, 114, 206, 257, 403, 405,
4624 468, 469, 470, 473, 474, 476, 477, 117, 118, 206,
4625 403, 405, 481, 482, 483, 485, 493, 203, 7, 393,
4626 394, 395, 7, 409, 410, 411, 96, 435, 451, 452,
4627 7, 543, 544, 239, 8, 8, 8, 8, 246, 249,
4628 251, 253, 4, 4, 4, 4, 4, 266, 4, 4,
4629 269, 4, 4, 4, 3, 8, 8, 242, 6, 3,
4630 319, 6, 3, 354, 6, 3, 378, 6, 3, 344,
4631 6, 3, 3, 6, 6, 3, 6, 275, 3, 8,
4632 458, 3, 6, 429, 6, 3, 295, 6, 3, 4,
4633 4, 4, 4, 4, 4, 3, 8, 471, 475, 4,
4634 4, 4, 3, 8, 484, 486, 3, 8, 8, 170,
4635 204, 205, 396, 6, 3, 412, 6, 3, 453, 8,
4636 545, 3, 6, 6, 4, 4, 4, 4, 171, 173,
4637 171, 173, 171, 4, 171, 171, 4, 171, 171, 173,
4638 244, 243, 241, 322, 318, 357, 353, 381, 377, 206,
4639 217, 218, 219, 220, 255, 314, 326, 328, 330, 332,
4640 334, 338, 345, 346, 373, 403, 405, 449, 343, 279,
4641 285, 4, 273, 85, 86, 206, 255, 373, 403, 405,
4642 459, 460, 461, 462, 463, 465, 457, 432, 428, 298,
4643 294, 171, 171, 171, 171, 171, 171, 307, 4, 4,
4644 171, 171, 171, 469, 4, 4, 482, 6, 3, 399,
4645 395, 415, 411, 4, 145, 147, 148, 206, 255, 403,
4646 405, 546, 547, 548, 549, 551, 544, 20, 21, 22,
4647 23, 247, 170, 170, 170, 170, 170, 8, 8, 8,
4648 8, 3, 8, 170, 464, 4, 8, 3, 8, 8,
4649 108, 109, 110, 472, 170, 170, 170, 170, 8, 8,
4650 170, 552, 4, 550, 3, 8, 346, 4, 173, 461,
4651 4, 171, 4, 547, 170, 5, 170, 7, 553, 554,
4652 555, 3, 6, 146, 149, 150, 151, 556, 557, 558,
4653 560, 561, 562, 554, 559, 4, 4, 4, 3, 8,
4654 4, 173, 171, 171, 557, 170
4655 };
4656
4657 const unsigned short
4658 Dhcp6Parser::yyr1_[] =
4659 {
4660 0, 174, 176, 175, 177, 175, 178, 175, 179, 175,
4661 180, 175, 181, 175, 182, 175, 183, 175, 184, 175,
4662 185, 175, 186, 175, 187, 175, 188, 175, 189, 175,
4663 190, 175, 191, 191, 191, 191, 191, 191, 191, 192,
4664 194, 193, 195, 196, 196, 197, 197, 199, 198, 200,
4665 200, 201, 201, 203, 202, 204, 204, 205, 205, 206,
4666 208, 207, 209, 209, 210, 210, 210, 210, 210, 210,
4667 212, 211, 214, 213, 215, 215, 216, 216, 216, 216,
4668 216, 216, 216, 216, 216, 216, 216, 216, 216, 216,
4669 216, 216, 216, 216, 216, 216, 216, 216, 216, 216,
4670 216, 216, 216, 216, 216, 216, 216, 216, 217, 218,
4671 219, 220, 221, 223, 222, 225, 224, 227, 226, 228,
4672 228, 229, 229, 229, 229, 229, 231, 230, 232, 234,
4673 233, 236, 235, 238, 237, 239, 239, 240, 240, 242,
4674 241, 243, 243, 244, 244, 244, 244, 244, 244, 244,
4675 244, 244, 244, 244, 244, 244, 244, 244, 244, 244,
4676 244, 246, 245, 247, 247, 247, 247, 249, 248, 251,
4677 250, 253, 252, 254, 256, 255, 257, 258, 259, 260,
4678 261, 262, 263, 264, 266, 265, 267, 269, 268, 271,
4679 270, 272, 272, 273, 275, 274, 277, 276, 278, 278,
4680 279, 279, 280, 281, 283, 282, 284, 284, 285, 285,
4681 285, 286, 287, 289, 288, 291, 290, 292, 292, 293,
4682 293, 295, 294, 297, 296, 298, 298, 298, 299, 299,
4683 301, 300, 303, 302, 305, 304, 306, 306, 307, 307,
4684 307, 307, 307, 307, 308, 309, 310, 311, 312, 313,
4685 315, 314, 316, 316, 317, 317, 319, 318, 321, 320,
4686 322, 322, 323, 323, 323, 323, 323, 323, 323, 323,
4687 323, 323, 323, 323, 323, 323, 323, 323, 323, 323,
4688 323, 323, 325, 324, 327, 326, 329, 328, 331, 330,
4689 333, 332, 335, 334, 336, 336, 336, 336, 337, 338,
4690 340, 339, 341, 341, 342, 342, 344, 343, 345, 345,
4691 346, 346, 346, 346, 346, 346, 346, 346, 346, 346,
4692 346, 346, 346, 346, 346, 346, 346, 348, 347, 350,
4693 349, 351, 351, 352, 352, 354, 353, 356, 355, 357,
4694 357, 358, 358, 359, 359, 359, 359, 359, 359, 359,
4695 359, 359, 359, 360, 361, 362, 364, 363, 366, 365,
4696 368, 367, 369, 371, 370, 372, 374, 373, 375, 375,
4697 376, 376, 378, 377, 380, 379, 381, 381, 382, 382,
4698 383, 383, 383, 383, 383, 383, 383, 383, 383, 384,
4699 386, 385, 387, 388, 389, 390, 392, 391, 393, 393,
4700 394, 394, 396, 395, 398, 397, 399, 399, 400, 400,
4701 400, 400, 400, 400, 400, 402, 401, 404, 403, 406,
4702 405, 408, 407, 409, 409, 410, 410, 412, 411, 414,
4703 413, 415, 415, 416, 416, 416, 416, 416, 416, 416,
4704 416, 416, 416, 416, 418, 417, 419, 421, 420, 422,
4705 423, 425, 424, 426, 426, 427, 427, 429, 428, 431,
4706 430, 432, 432, 433, 433, 434, 434, 434, 434, 434,
4707 434, 434, 434, 434, 434, 434, 436, 435, 438, 437,
4708 440, 439, 442, 441, 444, 443, 446, 445, 448, 447,
4709 450, 449, 451, 451, 453, 452, 455, 454, 456, 456,
4710 458, 457, 459, 459, 460, 460, 461, 461, 461, 461,
4711 461, 461, 461, 462, 464, 463, 465, 467, 466, 468,
4712 468, 469, 469, 469, 469, 469, 469, 469, 469, 469,
4713 471, 470, 472, 472, 472, 473, 475, 474, 476, 477,
4714 478, 480, 479, 481, 481, 482, 482, 482, 482, 482,
4715 484, 483, 486, 485, 488, 487, 490, 489, 492, 491,
4716 493, 493, 494, 494, 494, 494, 494, 494, 494, 494,
4717 494, 494, 494, 494, 494, 494, 494, 494, 494, 494,
4718 495, 497, 496, 499, 498, 500, 502, 501, 503, 504,
4719 506, 505, 507, 507, 509, 508, 510, 511, 513, 512,
4720 514, 514, 514, 514, 514, 516, 515, 518, 517, 520,
4721 519, 522, 521, 524, 523, 526, 525, 528, 527, 530,
4722 529, 531, 531, 532, 534, 533, 536, 535, 538, 537,
4723 539, 539, 540, 542, 541, 543, 543, 545, 544, 546,
4724 546, 547, 547, 547, 547, 547, 547, 547, 548, 550,
4725 549, 552, 551, 553, 553, 555, 554, 556, 556, 557,
4726 557, 557, 557, 559, 558, 560, 561, 562
4727 };
4728
4729 const unsigned char
4730 Dhcp6Parser::yyr2_[] =
4731 {
4732 0, 2, 0, 3, 0, 3, 0, 3, 0, 3,
4733 0, 3, 0, 3, 0, 3, 0, 3, 0, 3,
4734 0, 3, 0, 3, 0, 3, 0, 3, 0, 3,
4735 0, 3, 1, 1, 1, 1, 1, 1, 1, 1,
4736 0, 4, 1, 0, 1, 3, 5, 0, 4, 0,
4737 1, 1, 3, 0, 4, 0, 1, 1, 3, 2,
4738 0, 4, 1, 3, 1, 1, 1, 1, 1, 1,
4739 0, 6, 0, 4, 1, 3, 1, 1, 1, 1,
4740 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
4741 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
4742 1, 1, 1, 1, 1, 1, 1, 1, 3, 3,
4743 3, 3, 3, 0, 4, 0, 6, 0, 4, 1,
4744 3, 1, 1, 1, 1, 1, 0, 4, 3, 0,
4745 6, 0, 6, 0, 6, 0, 1, 1, 3, 0,
4746 4, 1, 3, 1, 1, 1, 1, 1, 1, 1,
4747 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
4748 1, 0, 4, 1, 1, 1, 1, 0, 4, 0,
4749 4, 0, 4, 3, 0, 4, 3, 3, 3, 3,
4750 3, 3, 3, 3, 0, 4, 3, 0, 4, 0,
4751 6, 1, 3, 1, 0, 4, 0, 6, 1, 3,
4752 1, 1, 1, 1, 0, 6, 1, 3, 1, 1,
4753 1, 1, 1, 0, 6, 0, 6, 0, 1, 1,
4754 3, 0, 4, 0, 4, 1, 3, 1, 1, 1,
4755 0, 4, 0, 4, 0, 6, 1, 3, 1, 1,
4756 1, 1, 1, 1, 3, 3, 3, 3, 3, 3,
4757 0, 6, 0, 1, 1, 3, 0, 4, 0, 4,
4758 1, 3, 1, 1, 1, 1, 1, 1, 1, 1,
4759 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
4760 1, 1, 0, 4, 0, 4, 0, 4, 0, 4,
4761 0, 4, 0, 4, 1, 1, 1, 1, 3, 3,
4762 0, 6, 0, 1, 1, 3, 0, 4, 1, 3,
4763 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
4764 1, 1, 1, 1, 1, 1, 1, 0, 6, 0,
4765 4, 0, 1, 1, 3, 0, 4, 0, 4, 0,
4766 1, 1, 3, 1, 1, 1, 1, 1, 1, 1,
4767 1, 1, 1, 1, 3, 1, 0, 4, 0, 4,
4768 0, 4, 1, 0, 4, 3, 0, 6, 0, 1,
4769 1, 3, 0, 4, 0, 4, 0, 1, 1, 3,
4770 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
4771 0, 4, 1, 1, 3, 3, 0, 6, 0, 1,
4772 1, 3, 0, 4, 0, 4, 1, 3, 1, 1,
4773 1, 1, 1, 1, 1, 0, 4, 0, 4, 0,
4774 4, 0, 6, 0, 1, 1, 3, 0, 4, 0,
4775 4, 1, 3, 1, 1, 1, 1, 1, 1, 1,
4776 1, 1, 1, 1, 0, 4, 3, 0, 4, 3,
4777 3, 0, 6, 0, 1, 1, 3, 0, 4, 0,
4778 4, 0, 1, 1, 3, 1, 1, 1, 1, 1,
4779 1, 1, 1, 1, 1, 1, 0, 4, 0, 4,
4780 0, 4, 0, 4, 0, 4, 0, 4, 0, 4,
4781 0, 6, 1, 1, 0, 4, 0, 6, 1, 3,
4782 0, 4, 0, 1, 1, 3, 1, 1, 1, 1,
4783 1, 1, 1, 1, 0, 4, 3, 0, 6, 1,
4784 3, 1, 1, 1, 1, 1, 1, 1, 1, 1,
4785 0, 4, 1, 1, 1, 3, 0, 4, 3, 3,
4786 3, 0, 6, 1, 3, 1, 1, 1, 1, 1,
4787 0, 4, 0, 4, 0, 4, 0, 6, 0, 4,
4788 1, 3, 1, 1, 1, 1, 1, 1, 1, 1,
4789 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
4790 3, 0, 4, 0, 4, 3, 0, 4, 3, 3,
4791 0, 4, 1, 1, 0, 4, 3, 3, 0, 4,
4792 1, 1, 1, 1, 1, 0, 4, 0, 4, 0,
4793 4, 0, 4, 0, 4, 0, 4, 0, 6, 0,
4794 4, 1, 3, 1, 0, 6, 0, 6, 0, 4,
4795 1, 3, 1, 0, 6, 1, 3, 0, 4, 1,
4796 3, 1, 1, 1, 1, 1, 1, 1, 3, 0,
4797 4, 0, 6, 1, 3, 0, 4, 1, 3, 1,
4798 1, 1, 1, 0, 4, 3, 3, 3
4799 };
4800
4801
4802
4803 // YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
4804 // First, the terminals, then, starting at \a yyntokens_, nonterminals.
4805 const char*
4806 const Dhcp6Parser::yytname_[] =
4807 {
4808 "\"end of file\"", "error", "$undefined", "\",\"", "\":\"", "\"[\"",
4809 "\"]\"", "\"{\"", "\"}\"", "\"null\"", "\"Dhcp6\"", "\"config-control\"",
4810 "\"config-databases\"", "\"interfaces-config\"", "\"interfaces\"",
4811 "\"re-detect\"", "\"lease-database\"", "\"hosts-database\"",
4812 "\"hosts-databases\"", "\"type\"", "\"memfile\"", "\"mysql\"",
4813 "\"postgresql\"", "\"cql\"", "\"user\"", "\"password\"", "\"host\"",
4814 "\"port\"", "\"persist\"", "\"lfc-interval\"", "\"readonly\"",
4815 "\"connect-timeout\"", "\"contact-points\"", "\"max-reconnect-tries\"",
4816 "\"reconnect-wait-time\"", "\"keyspace\"", "\"request-timeout\"",
4817 "\"tcp-keepalive\"", "\"tcp-nodelay\"", "\"preferred-lifetime\"",
4818 "\"valid-lifetime\"", "\"renew-timer\"", "\"rebind-timer\"",
4819 "\"decline-probation-period\"", "\"server-tag\"", "\"subnet6\"",
4820 "\"option-def\"", "\"option-data\"", "\"name\"", "\"data\"", "\"code\"",
4821 "\"space\"", "\"csv-format\"", "\"always-send\"", "\"record-types\"",
4822 "\"encapsulate\"", "\"array\"", "\"pools\"", "\"pool\"", "\"pd-pools\"",
4823 "\"prefix\"", "\"prefix-len\"", "\"excluded-prefix\"",
4824 "\"excluded-prefix-len\"", "\"delegated-len\"", "\"user-context\"",
4825 "\"comment\"", "\"subnet\"", "\"interface\"", "\"interface-id\"",
4826 "\"id\"", "\"rapid-commit\"", "\"reservation-mode\"", "\"disabled\"",
4827 "\"out-of-pool\"", "\"global\"", "\"all\"", "\"shared-networks\"",
4828 "\"mac-sources\"", "\"relay-supplied-options\"",
4829 "\"host-reservation-identifiers\"", "\"sanity-checks\"",
4830 "\"lease-checks\"", "\"client-classes\"", "\"require-client-classes\"",
4831 "\"test\"", "\"only-if-required\"", "\"client-class\"",
4832 "\"reservations\"", "\"ip-addresses\"", "\"prefixes\"", "\"duid\"",
4833 "\"hw-address\"", "\"hostname\"", "\"flex-id\"", "\"relay\"",
4834 "\"ip-address\"", "\"hooks-libraries\"", "\"library\"", "\"parameters\"",
4835 "\"expired-leases-processing\"", "\"reclaim-timer-wait-time\"",
4836 "\"flush-reclaimed-timer-wait-time\"", "\"hold-reclaimed-time\"",
4837 "\"max-reclaim-leases\"", "\"max-reclaim-time\"",
4838 "\"unwarned-reclaim-cycles\"", "\"server-id\"", "\"LLT\"", "\"EN\"",
4839 "\"LL\"", "\"identifier\"", "\"htype\"", "\"time\"", "\"enterprise-id\"",
4840 "\"dhcp4o6-port\"", "\"control-socket\"", "\"socket-type\"",
4841 "\"socket-name\"", "\"dhcp-queue-control\"", "\"dhcp-ddns\"",
4842 "\"enable-updates\"", "\"qualifying-suffix\"", "\"server-ip\"",
4843 "\"server-port\"", "\"sender-ip\"", "\"sender-port\"",
4844 "\"max-queue-size\"", "\"ncr-protocol\"", "\"ncr-format\"",
4845 "\"override-no-update\"", "\"override-client-update\"",
4846 "\"replace-client-name\"", "\"generated-prefix\"", "\"UDP\"", "\"TCP\"",
4847 "\"JSON\"", "\"when-present\"", "\"never\"", "\"always\"",
4848 "\"when-not-present\"", "\"hostname-char-set\"",
4849 "\"hostname-char-replacement\"", "\"Logging\"", "\"loggers\"",
4850 "\"output_options\"", "\"output\"", "\"debuglevel\"", "\"severity\"",
4851 "\"flush\"", "\"maxsize\"", "\"maxver\"", "\"Dhcp4\"", "\"DhcpDdns\"",
4852 "\"Control-agent\"", "TOPLEVEL_JSON", "TOPLEVEL_DHCP6", "SUB_DHCP6",
4853 "SUB_INTERFACES6", "SUB_SUBNET6", "SUB_POOL6", "SUB_PD_POOL",
4854 "SUB_RESERVATION", "SUB_OPTION_DEFS", "SUB_OPTION_DEF",
4855 "SUB_OPTION_DATA", "SUB_HOOKS_LIBRARY", "SUB_DHCP_DDNS", "SUB_LOGGING",
4856 "SUB_CONFIG_CONTROL", "\"constant string\"", "\"integer\"",
4857 "\"floating point\"", "\"boolean\"", "$accept", "start", "$@1", "$@2",
4858 "$@3", "$@4", "$@5", "$@6", "$@7", "$@8", "$@9", "$@10", "$@11", "$@12",
4859 "$@13", "$@14", "$@15", "value", "sub_json", "map2", "$@16", "map_value",
4860 "map_content", "not_empty_map", "list_generic", "$@17", "list_content",
4861 "not_empty_list", "list_strings", "$@18", "list_strings_content",
4862 "not_empty_list_strings", "unknown_map_entry", "syntax_map", "$@19",
4863 "global_objects", "global_object", "dhcp6_object", "$@20", "sub_dhcp6",
4864 "$@21", "global_params", "global_param", "preferred_lifetime",
4865 "valid_lifetime", "renew_timer", "rebind_timer",
4866 "decline_probation_period", "server_tag", "$@22", "interfaces_config",
4867 "$@23", "sub_interfaces6", "$@24", "interfaces_config_params",
4868 "interfaces_config_param", "interfaces_list", "$@25", "re_detect",
4869 "lease_database", "$@26", "hosts_database", "$@27", "hosts_databases",
4870 "$@28", "database_list", "not_empty_database_list", "database", "$@29",
4871 "database_map_params", "database_map_param", "database_type", "$@30",
4872 "db_type", "user", "$@31", "password", "$@32", "host", "$@33", "port",
4873 "name", "$@34", "persist", "lfc_interval", "readonly", "connect_timeout",
4874 "reconnect_wait_time", "request_timeout", "tcp_keepalive", "tcp_nodelay",
4875 "contact_points", "$@35", "max_reconnect_tries", "keyspace", "$@36",
4876 "sanity_checks", "$@37", "sanity_checks_params", "sanity_checks_param",
4877 "lease_checks", "$@38", "mac_sources", "$@39", "mac_sources_list",
4878 "mac_sources_value", "duid_id", "string_id",
4879 "host_reservation_identifiers", "$@40",
4880 "host_reservation_identifiers_list", "host_reservation_identifier",
4881 "hw_address_id", "flex_id", "relay_supplied_options", "$@41",
4882 "hooks_libraries", "$@42", "hooks_libraries_list",
4883 "not_empty_hooks_libraries_list", "hooks_library", "$@43",
4884 "sub_hooks_library", "$@44", "hooks_params", "hooks_param", "library",
4885 "$@45", "parameters", "$@46", "expired_leases_processing", "$@47",
4886 "expired_leases_params", "expired_leases_param",
4887 "reclaim_timer_wait_time", "flush_reclaimed_timer_wait_time",
4888 "hold_reclaimed_time", "max_reclaim_leases", "max_reclaim_time",
4889 "unwarned_reclaim_cycles", "subnet6_list", "$@48",
4890 "subnet6_list_content", "not_empty_subnet6_list", "subnet6", "$@49",
4891 "sub_subnet6", "$@50", "subnet6_params", "subnet6_param", "subnet",
4892 "$@51", "interface", "$@52", "interface_id", "$@53", "client_class",
4893 "$@54", "require_client_classes", "$@55", "reservation_mode", "$@56",
4894 "hr_mode", "id", "rapid_commit", "shared_networks", "$@57",
4895 "shared_networks_content", "shared_networks_list", "shared_network",
4896 "$@58", "shared_network_params", "shared_network_param",
4897 "option_def_list", "$@59", "sub_option_def_list", "$@60",
4898 "option_def_list_content", "not_empty_option_def_list",
4899 "option_def_entry", "$@61", "sub_option_def", "$@62",
4900 "option_def_params", "not_empty_option_def_params", "option_def_param",
4901 "option_def_name", "code", "option_def_code", "option_def_type", "$@63",
4902 "option_def_record_types", "$@64", "space", "$@65", "option_def_space",
4903 "option_def_encapsulate", "$@66", "option_def_array", "option_data_list",
4904 "$@67", "option_data_list_content", "not_empty_option_data_list",
4905 "option_data_entry", "$@68", "sub_option_data", "$@69",
4906 "option_data_params", "not_empty_option_data_params",
4907 "option_data_param", "option_data_name", "option_data_data", "$@70",
4908 "option_data_code", "option_data_space", "option_data_csv_format",
4909 "option_data_always_send", "pools_list", "$@71", "pools_list_content",
4910 "not_empty_pools_list", "pool_list_entry", "$@72", "sub_pool6", "$@73",
4911 "pool_params", "pool_param", "pool_entry", "$@74", "user_context",
4912 "$@75", "comment", "$@76", "pd_pools_list", "$@77",
4913 "pd_pools_list_content", "not_empty_pd_pools_list", "pd_pool_entry",
4914 "$@78", "sub_pd_pool", "$@79", "pd_pool_params", "pd_pool_param",
4915 "pd_prefix", "$@80", "pd_prefix_len", "excluded_prefix", "$@81",
4916 "excluded_prefix_len", "pd_delegated_len", "reservations", "$@82",
4917 "reservations_list", "not_empty_reservations_list", "reservation",
4918 "$@83", "sub_reservation", "$@84", "reservation_params",
4919 "not_empty_reservation_params", "reservation_param", "ip_addresses",
4920 "$@85", "prefixes", "$@86", "duid", "$@87", "hw_address", "$@88",
4921 "hostname", "$@89", "flex_id_value", "$@90",
4922 "reservation_client_classes", "$@91", "relay", "$@92", "relay_map",
4923 "ip_address", "$@93", "client_classes", "$@94", "client_classes_list",
4924 "client_class_entry", "$@95", "client_class_params",
4925 "not_empty_client_class_params", "client_class_param",
4926 "client_class_name", "client_class_test", "$@96", "only_if_required",
4927 "server_id", "$@97", "server_id_params", "server_id_param",
4928 "server_id_type", "$@98", "duid_type", "htype", "identifier", "$@99",
4929 "time", "enterprise_id", "dhcp4o6_port", "control_socket", "$@100",
4930 "control_socket_params", "control_socket_param", "socket_type", "$@101",
4931 "socket_name", "$@102", "dhcp_queue_control", "$@103", "dhcp_ddns",
4932 "$@104", "sub_dhcp_ddns", "$@105", "dhcp_ddns_params", "dhcp_ddns_param",
4933 "enable_updates", "qualifying_suffix", "$@106", "server_ip", "$@107",
4934 "server_port", "sender_ip", "$@108", "sender_port", "max_queue_size",
4935 "ncr_protocol", "$@109", "ncr_protocol_value", "ncr_format", "$@110",
4936 "override_no_update", "override_client_update", "replace_client_name",
4937 "$@111", "replace_client_name_value", "generated_prefix", "$@112",
4938 "hostname_char_set", "$@113", "hostname_char_replacement", "$@114",
4939 "dhcp4_json_object", "$@115", "dhcpddns_json_object", "$@116",
4940 "control_agent_json_object", "$@117", "config_control", "$@118",
4941 "sub_config_control", "$@119", "config_control_params",
4942 "config_control_param", "config_databases", "$@120", "logging_object",
4943 "$@121", "sub_logging", "$@122", "logging_params", "logging_param",
4944 "loggers", "$@123", "loggers_entries", "logger_entry", "$@124",
4945 "logger_params", "logger_param", "debuglevel", "severity", "$@125",
4946 "output_options_list", "$@126", "output_options_list_content",
4947 "output_entry", "$@127", "output_params_list", "output_params", "output",
4948 "$@128", "flush", "maxsize", "maxver", YY_NULLPTR
4949 };
4950
4951#if PARSER6_DEBUG
4952 const unsigned short
4953 Dhcp6Parser::yyrline_[] =
4954 {
4955 0, 257, 257, 257, 258, 258, 259, 259, 260, 260,
4956 261, 261, 262, 262, 263, 263, 264, 264, 265, 265,
4957 266, 266, 267, 267, 268, 268, 269, 269, 270, 270,
4958 271, 271, 279, 280, 281, 282, 283, 284, 285, 288,
4959 293, 293, 304, 307, 308, 311, 315, 322, 322, 329,
4960 330, 333, 337, 344, 344, 351, 352, 355, 359, 370,
4961 380, 380, 395, 396, 400, 401, 402, 403, 404, 405,
4962 408, 408, 423, 423, 432, 433, 438, 439, 440, 441,
4963 442, 443, 444, 445, 446, 447, 448, 449, 450, 451,
4964 452, 453, 454, 455, 456, 457, 458, 459, 460, 461,
4965 462, 463, 464, 465, 466, 467, 468, 469, 472, 477,
4966 482, 487, 492, 497, 497, 505, 505, 516, 516, 525,
4967 526, 529, 530, 531, 532, 533, 536, 536, 546, 552,
4968 552, 564, 564, 576, 576, 586, 587, 590, 591, 594,
4969 594, 604, 605, 608, 609, 610, 611, 612, 613, 614,
4970 615, 616, 617, 618, 619, 620, 621, 622, 623, 624,
4971 625, 628, 628, 635, 636, 637, 638, 641, 641, 649,
4972 649, 657, 657, 665, 670, 670, 678, 683, 688, 693,
4973 698, 703, 708, 713, 718, 718, 726, 731, 731, 739,
4974 739, 749, 750, 752, 754, 754, 772, 772, 782, 783,
4975 786, 787, 790, 795, 800, 800, 810, 811, 814, 815,
4976 816, 819, 824, 831, 831, 841, 841, 851, 852, 855,
4977 856, 859, 859, 869, 869, 879, 880, 881, 884, 885,
4978 888, 888, 896, 896, 904, 904, 915, 916, 919, 920,
4979 921, 922, 923, 924, 927, 932, 937, 942, 947, 952,
4980 960, 960, 973, 974, 977, 978, 985, 985, 1011, 1011,
4981 1022, 1023, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034,
4982 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044,
4983 1045, 1046, 1049, 1049, 1057, 1057, 1065, 1065, 1073, 1073,
4984 1081, 1081, 1091, 1091, 1098, 1099, 1100, 1101, 1104, 1109,
4985 1117, 1117, 1128, 1129, 1133, 1134, 1137, 1137, 1145, 1146,
4986 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158,
4987 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1172, 1172, 1185,
4988 1185, 1194, 1195, 1198, 1199, 1204, 1204, 1219, 1219, 1233,
4989 1234, 1237, 1238, 1241, 1242, 1243, 1244, 1245, 1246, 1247,
4990 1248, 1249, 1250, 1253, 1255, 1260, 1262, 1262, 1270, 1270,
4991 1278, 1278, 1286, 1288, 1288, 1296, 1305, 1305, 1317, 1318,
4992 1323, 1324, 1329, 1329, 1341, 1341, 1353, 1354, 1359, 1360,
4993 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1376,
4994 1378, 1378, 1386, 1388, 1390, 1395, 1403, 1403, 1415, 1416,
4995 1419, 1420, 1423, 1423, 1433, 1433, 1442, 1443, 1446, 1447,
4996 1448, 1449, 1450, 1451, 1452, 1455, 1455, 1463, 1463, 1488,
4997 1488, 1518, 1518, 1530, 1531, 1534, 1535, 1538, 1538, 1550,
4998 1550, 1562, 1563, 1566, 1567, 1568, 1569, 1570, 1571, 1572,
4999 1573, 1574, 1575, 1576, 1579, 1579, 1587, 1592, 1592, 1600,
5000 1605, 1613, 1613, 1623, 1624, 1627, 1628, 1631, 1631, 1640,
5001 1640, 1649, 1650, 1653, 1654, 1658, 1659, 1660, 1661, 1662,
5002 1663, 1664, 1665, 1666, 1667, 1668, 1671, 1671, 1681, 1681,
5003 1691, 1691, 1699, 1699, 1707, 1707, 1715, 1715, 1723, 1723,
5004 1736, 1736, 1746, 1747, 1750, 1750, 1761, 1761, 1771, 1772,
5005 1775, 1775, 1785, 1786, 1789, 1790, 1793, 1794, 1795, 1796,
5006 1797, 1798, 1799, 1802, 1804, 1804, 1812, 1820, 1820, 1832,
5007 1833, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844,
5008 1847, 1847, 1854, 1855, 1856, 1859, 1864, 1864, 1872, 1877,
5009 1884, 1891, 1891, 1901, 1902, 1905, 1906, 1907, 1908, 1909,
5010 1912, 1912, 1920, 1920, 1930, 1930, 1970, 1970, 1982, 1982,
5011 1992, 1993, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
5012 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013,
5013 2016, 2021, 2021, 2029, 2029, 2037, 2042, 2042, 2050, 2055,
5014 2060, 2060, 2068, 2069, 2072, 2072, 2080, 2085, 2090, 2090,
5015 2098, 2101, 2104, 2107, 2110, 2116, 2116, 2124, 2124, 2132,
5016 2132, 2142, 2142, 2149, 2149, 2156, 2156, 2165, 2165, 2176,
5017 2176, 2186, 2187, 2191, 2194, 2194, 2209, 2209, 2219, 2219,
5018 2230, 2231, 2235, 2239, 2239, 2251, 2252, 2256, 2256, 2264,
5019 2265, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2277, 2282,
5020 2282, 2290, 2290, 2300, 2301, 2304, 2304, 2312, 2313, 2316,
5021 2317, 2318, 2319, 2322, 2322, 2330, 2335, 2340
5022 };
5023
5024 // Print the state stack on the debug stream.
5025 void
5026 Dhcp6Parser::yystack_print_ ()
5027 {
5028 *yycdebug_ << "Stack now";
5030 i = yystack_.begin (),
5031 i_end = yystack_.end ();
5032 i != i_end; ++i)
5033 *yycdebug_ << ' ' << i->state;
5034 *yycdebug_ << '\n';
5035 }
5036
5037 // Report on the debug stream that the rule \a yyrule is going to be reduced.
5038 void
5039 Dhcp6Parser::yy_reduce_print_ (int yyrule)
5040 {
5041 unsigned yylno = yyrline_[yyrule];
5042 int yynrhs = yyr2_[yyrule];
5043 // Print the symbols being reduced, and their result.
5044 *yycdebug_ << "Reducing stack by rule " << yyrule - 1
5045 << " (line " << yylno << "):\n";
5046 // The symbols being reduced.
5047 for (int yyi = 0; yyi < yynrhs; yyi++)
5048 YY_SYMBOL_PRINT (" $" << yyi + 1 << " =",
5049 yystack_[(yynrhs) - (yyi + 1)]);
5050 }
5051#endif // PARSER6_DEBUG
5052
5053
5054#line 14 "dhcp6_parser.yy" // lalr1.cc:1218
5055} } // isc::dhcp
5056#line 5057 "dhcp6_parser.cc" // lalr1.cc:1218
5057#line 2345 "dhcp6_parser.yy" // lalr1.cc:1219
5058
5059
5060void
5062 const std::string& what)
5063{
5064 ctx.error(loc, what);
5065}
#define yylex
Definition: agent_lexer.cc:27
if(!(yy_init))
#define YYUSE(E)
Definition: agent_parser.cc:96
#define YYCDEBUG
#define YYABORT
#define YYLLOC_DEFAULT(Current, Rhs, N)
Definition: agent_parser.cc:80
#define YY_REDUCE_PRINT(Rule)
#define YY_SYMBOL_PRINT(Title, Symbol)
#define YYCASE_(N, S)
#define YY_STACK_PRINT()
#define YY_(msgid)
Definition: agent_parser.cc:61
#define YYERROR
#define YY_RVREF(Type)
Definition: agent_parser.h:84
#define YY_MOVE_REF(Type)
Definition: agent_parser.h:83
#define YY_MOVE
Definition: agent_parser.h:81
Notes: IntElement type is changed to int64_t.
Definition: data.h:544
Dhcp6Parser(isc::dhcp::Parser6Context &ctx_yyarg)
Build a parser object.
location location_type
Symbol locations.
Definition: dhcp6_parser.h:530
int symbol_number_type
Symbol type: an internal symbol number.
Definition: dhcp6_parser.h:723
virtual int parse()
Parse.
virtual void error(const location_type &loc, const std::string &msg)
Report a syntax error.
Evaluation context, an interface to the expression evaluation.
void require(const std::string &name, isc::data::Element::Position open_loc, isc::data::Element::Position close_loc)
Check if a required parameter is present.
isc::data::Element::Position loc2pos(isc::dhcp::location &loc)
Converts bison's position to one understandable by isc::data::Element.
void error(const isc::dhcp::location &loc, const std::string &what)
Error handler.
void leave()
Leave a syntactic context.
void enter(const ParserContext &ctx)
Enter a new syntactic context.
std::vector< isc::data::ElementPtr > stack_
JSON elements being parsed.
@ LOGGERS
Used while parsing Logging/loggers structures.
@ RESERVATION_MODE
Used while parsing Dhcp6/reservation-mode.
@ CLIENT_CLASSES
Used while parsing Dhcp6/client-classes structures.
@ OPTION_DEF
Used while parsing Dhcp6/option-def structures.
@ POOLS
Used while parsing Dhcp6/subnet6/pools structures.
@ EXPIRED_LEASES_PROCESSING
Used while parsing Dhcp6/expired-leases-processing.
@ OPTION_DATA
Used while parsing Dhcp6/option-data, Dhcp6/subnet6/option-data or anywhere option-data is present (c...
@ LOGGING
Used while parsing content of Logging.
@ CONTROL_SOCKET
Used while parsing Dhcp6/control-socket structures.
@ SERVER_ID
Used while parsing Dhcp6/server-id structures.
@ HOSTS_DATABASE
Used while parsing Dhcp6/hosts-database[s] structures.
@ SUBNET6
Used while parsing Dhcp6/Subnet6 structures.
@ RESERVATIONS
Used while parsing Dhcp6/reservations structures.
@ CONFIG_DATABASE
Used while parsing config-control/config-databases.
@ DATABASE_TYPE
Used while parsing Dhcp6/*-database/type.
@ DHCP_DDNS
Used while parsing Dhcp6/dhcp-ddns.
@ INTERFACES_CONFIG
Used while parsing Dhcp6/interfaces structures.
@ DUID_TYPE
Used while parsing Dhcp6/server-id/type structures.
@ HOOKS_LIBRARIES
Used while parsing Dhcp6/hooks-libraries.
@ CONFIG
Used while parsing content of Dhcp6.
@ LEASE_DATABASE
Used while parsing Dhcp6/lease-database structures.
@ NCR_PROTOCOL
Used while parsing Dhcp6/dhcp-ddns/ncr-protocol.
@ RELAY
Used while parsing Dhcp6/subnet6/relay structures.
@ OUTPUT_OPTIONS
Used while parsing Logging/loggers/output_options structures.
@ HOST_RESERVATION_IDENTIFIERS
Used while parsing Dhcp6/host-reservation-identifiers.
@ NCR_FORMAT
Used while parsing Dhcp6/dhcp-ddns/ncr-format.
@ REPLACE_CLIENT_NAME
Used while parsing Dhcp6/dhcp-ddns/replace-client-name.
@ NO_KEYWORD
This one is used in pure JSON mode.
@ SHARED_NETWORK
Used while parsing shared-networks structures.
@ PD_POOLS
Used while parsing Dhcp6/subnet6/pd-pools structures.
@ MAC_SOURCES
Used while parsing Dhcp6/mac-sources structures.
@ CONFIG_CONTROL
Used while parsing Dhcp4/config-control.
const std::string contextName()
Get the syntactic context name.
ParserContext ctx_
Current syntactic context.
Present a slice of the top of a stack.
Definition: dhcp4_parser.h:270
const_iterator begin() const
Definition: dhcp4_parser.h:249
S::const_reverse_iterator const_iterator
Definition: dhcp4_parser.h:176
size_type size() const
Definition: dhcp4_parser.h:243
const_iterator end() const
Definition: dhcp4_parser.h:255
void push(YY_MOVE_REF(T) t)
Steal the contents of t.
Definition: dhcp4_parser.h:223
void pop(int n=1)
Definition: dhcp4_parser.h:230
Define the isc::dhcp::parser class.
#define PARSER6_DEBUG
Definition: dhcp6_parser.h:161
void merge(ElementPtr element, ConstElementPtr other)
Merges the data from other into element.
Definition: data.cc:1096
boost::shared_ptr< const Element > ConstElementPtr
Definition: data.h:23
boost::shared_ptr< Element > ElementPtr
Definition: data.h:22
Defines the logger used by the top-level component of kea-dhcp-ddns.
location_type location
The location.
Definition: dhcp6_parser.h:799
void move(basic_symbol &s)
Destructive move, s is emptied into this.
bool empty() const
Whether empty.
void clear()
Destroy contents, and record that is empty.
Syntax errors thrown from user actions.
Definition: dhcp6_parser.h:534