Bug Summary

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