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