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