Bug Summary

File:home/fedora/workspace/kea-dev/clang-static-analyzer/build/meson-private/tmpz0p224zs/../../../src/bin/dhcp6/dhcp6_parser.cc
Warning:line 560, column 43
The left operand of '+' is a garbage value due to array index out of bounds

Annotated Source Code

Press '?' to see keyboard shortcuts

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