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