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