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