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