diff --git a/doc/examples/kea4/all-keys.json b/doc/examples/kea4/all-keys.json index 4334c25eb8..d5e0a02bf1 100644 --- a/doc/examples/kea4/all-keys.json +++ b/doc/examples/kea4/all-keys.json @@ -408,6 +408,10 @@ // serve-retry-continue "on-fail": "stop-retry-exit", + // Flag which indicates if the DB recovery should be attempted + // at server startup and on reconfiguration events. + "retry-on-startup": false, + // Connection connect timeout in seconds. "connect-timeout": 100, diff --git a/doc/examples/kea4/backends.json b/doc/examples/kea4/backends.json index e7c1a48b3b..62817c05d2 100644 --- a/doc/examples/kea4/backends.json +++ b/doc/examples/kea4/backends.json @@ -42,6 +42,7 @@ // "reconnect-wait-time": 3000, // expressed in ms // "max-reconnect-tries": 3, // "on-fail": "stop-retry-exit", +// "retry-on-startup": false, // "connect-timeout": 3 // }, @@ -62,6 +63,7 @@ // "reconnect-wait-time": 3000, // expressed in ms // "max-reconnect-tries": 3, // "on-fail": "stop-retry-exit", +// "retry-on-startup": false, // "connect-timeout": 3 // }, diff --git a/doc/examples/kea6/all-keys.json b/doc/examples/kea6/all-keys.json index fac0218af5..90ff5bb03f 100644 --- a/doc/examples/kea6/all-keys.json +++ b/doc/examples/kea6/all-keys.json @@ -350,6 +350,10 @@ // serve-retry-continue "on-fail": "stop-retry-exit", + // Flag which indicates if the DB recovery should be attempted + // at server startup and on reconfiguration events. + "retry-on-startup": false, + // Connection connect timeout in seconds. "connect-timeout": 100, diff --git a/doc/examples/kea6/backends.json b/doc/examples/kea6/backends.json index df1072cfb1..350c8d60f5 100644 --- a/doc/examples/kea6/backends.json +++ b/doc/examples/kea6/backends.json @@ -42,6 +42,7 @@ // "reconnect-wait-time": 3000, // expressed in ms // "max-reconnect-tries": 3, // "on-fail": "stop-retry-exit", +// "retry-on-startup": false, // "connect-timeout": 3 // }, @@ -62,6 +63,7 @@ // "reconnect-wait-time": 3000, // expressed in ms // "max-reconnect-tries": 3, // "on-fail": "stop-retry-exit", +// "retry-on-startup": false, // "connect-timeout": 3 // }, diff --git a/doc/sphinx/arm/database-connectivity.rst b/doc/sphinx/arm/database-connectivity.rst index 12d9df7510..44f8208bc1 100644 --- a/doc/sphinx/arm/database-connectivity.rst +++ b/doc/sphinx/arm/database-connectivity.rst @@ -6,9 +6,9 @@ Database Connectivity The Kea servers (:iscman:`kea-dhcp4` and :iscman:`kea-dhcp6`) can be configured to use a variety of database backends for leases, hosts, and configuration. They can be configured to support automatic recovery when connectivity is lost, via -the ``on-fail`` parameter. (The ``reconnect-wait-time`` and -``max-reconnect-tries`` parameters are described -in :ref:`database-configuration4` and :ref:`database-configuration6`.) +the ``on-fail`` and ``retry-on-startup`` parameters. +(The ``reconnect-wait-time`` and ``max-reconnect-tries`` parameters are +described in :ref:`database-configuration4` and :ref:`database-configuration6`.) It is important to understand how and when automatic recovery comes into play. Automatic recovery, when configured, only operates after a successful startup @@ -16,10 +16,13 @@ or reconfiguration during which connectivity to all backends has been successfully established. During server startup, the inability to connect to any of the configured -backends is always considered fatal. A fatal error is logged and the server -exits, based on the idea that the configuration should be valid -at startup. Exiting to the operating system allows nanny scripts to detect -the problem. +backends is considered fatal only if ``retry-on-startup`` is set to ``false``. +A fatal error is logged and the server exits, based on the idea that the +configuration should be valid at startup. Exiting to the operating system allows +nanny scripts to detect the problem. +If ``retry-on-startup`` is set to ``true``, the server will start reconnection +attempts even at server startup or on reconfigure events, and will honor the +action specified in ``on-fail`` parameter. During dynamic reconfiguration, all backends are disconnected and then reconnected using the new configuration. If connectivity to any of the diff --git a/doc/sphinx/arm/dhcp4-srv.rst b/doc/sphinx/arm/dhcp4-srv.rst index 8bfd703740..5d6acad94a 100644 --- a/doc/sphinx/arm/dhcp4-srv.rst +++ b/doc/sphinx/arm/dhcp4-srv.rst @@ -576,6 +576,19 @@ The possible values are: active while processing DHCP traffic. Change this only if the server is used exclusively as a configuration tool. +:: + + "Dhcp4": { "lease-database": { "retry-on-startup" : true, ... }, ... } + +During server startup, the inability to connect to any of the configured +backends is considered fatal only if ``retry-on-startup`` is set to ``false``. +A fatal error is logged and the server exits, based on the idea that the +configuration should be valid at startup. Exiting to the operating system allows +nanny scripts to detect the problem. +If ``retry-on-startup`` is set to ``true``, the server will start reconnection +attempts even at server startup or on reconfigure events, and will honor the +action specified in ``on-fail`` parameter. + The host parameter is used by the MySQL and PostgreSQL backends. Finally, the credentials of the account under which the server will @@ -798,6 +811,19 @@ The possible values are: the lease database backend and the hosts database backend are connected to the same database instance. +:: + + "Dhcp4": { "hosts-database": { "retry-on-startup" : true, ... }, ... } + +During server startup, the inability to connect to any of the configured +backends is considered fatal only if ``retry-on-startup`` is set to ``false``. +A fatal error is logged and the server exits, based on the idea that the +configuration should be valid at startup. Exiting to the operating system allows +nanny scripts to detect the problem. +If ``retry-on-startup`` is set to ``true``, the server will start reconnection +attempts even at server startup or on reconfigure events, and will honor the +action specified in ``on-fail`` parameter. + Finally, the credentials of the account under which the server will access the database should be set: diff --git a/doc/sphinx/arm/dhcp6-srv.rst b/doc/sphinx/arm/dhcp6-srv.rst index 76d9d1c1e9..a9f69d49ba 100644 --- a/doc/sphinx/arm/dhcp6-srv.rst +++ b/doc/sphinx/arm/dhcp6-srv.rst @@ -532,6 +532,19 @@ The possible values are: active while processing DHCP traffic. Change this only if the server is used exclusively as a configuration tool. +:: + + "Dhcp6": { "lease-database": { "retry-on-startup" : true, ... }, ... } + +During server startup, the inability to connect to any of the configured +backends is considered fatal only if ``retry-on-startup`` is set to ``false``. +A fatal error is logged and the server exits, based on the idea that the +configuration should be valid at startup. Exiting to the operating system allows +nanny scripts to detect the problem. +If ``retry-on-startup`` is set to ``true``, the server will start reconnection +attempts even at server startup or on reconfigure events, and will honor the +action specified in ``on-fail`` parameter. + The host parameter is used by the MySQL and PostgreSQL backends. Finally, the credentials of the account under which the server will @@ -754,6 +767,19 @@ The possible values are: the lease database backend and the hosts database backend are connected to the same database instance. +:: + + "Dhcp6": { "hosts-database": { "retry-on-startup" : true, ... }, ... } + +During server startup, the inability to connect to any of the configured +backends is considered fatal only if ``retry-on-startup`` is set to ``false``. +A fatal error is logged and the server exits, based on the idea that the +configuration should be valid at startup. Exiting to the operating system allows +nanny scripts to detect the problem. +If ``retry-on-startup`` is set to ``true``, the server will start reconnection +attempts even at server startup or on reconfigure events, and will honor the +action specified in ``on-fail`` parameter. + Finally, the credentials of the account under which the server will access the database should be set: diff --git a/doc/sphinx/arm/hooks-legal-log.rst b/doc/sphinx/arm/hooks-legal-log.rst index 41dc34e08c..a1af7f677f 100644 --- a/doc/sphinx/arm/hooks-legal-log.rst +++ b/doc/sphinx/arm/hooks-legal-log.rst @@ -1083,3 +1083,12 @@ If ``on-fail`` is set to ``serve-retry-exit``, the server will shut down if the connection to the database backend is not restored according to the ``max-reconnect-tries`` and ``reconnect-wait-time`` parameters, but it continues serving clients while this mechanism is activated. + +During server startup, the inability to connect to any of the configured +backends is considered fatal only if ``retry-on-startup`` is set to ``false``. +A fatal error is logged and the server exits, based on the idea that the +configuration should be valid at startup. Exiting to the operating system allows +nanny scripts to detect the problem. +If ``retry-on-startup`` is set to ``true``, the server will start reconnection +attempts even at server startup or on reconfigure events, and will honor the +action specified in ``on-fail`` parameter. diff --git a/src/bin/dhcp4/ctrl_dhcp4_srv.cc b/src/bin/dhcp4/ctrl_dhcp4_srv.cc index 0e55a5d381..4a7e4ed1e3 100644 --- a/src/bin/dhcp4/ctrl_dhcp4_srv.cc +++ b/src/bin/dhcp4/ctrl_dhcp4_srv.cc @@ -911,6 +911,10 @@ isc::data::ConstElementPtr ControlledDhcpv4Srv::processConfig(isc::data::ConstElementPtr config) { ControlledDhcpv4Srv* srv = ControlledDhcpv4Srv::getInstance(); + // Allow DB reconnect on startup. The database connection parameters specify + // respective details. + DbConnectionInitWithRetry retry; + // Single stream instance used in all error clauses std::ostringstream err; @@ -1155,11 +1159,8 @@ ControlledDhcpv4Srv::ControlledDhcpv4Srv(uint16_t server_port /*= DHCP4_SERVER_P // CommandMgr uses IO service to run asynchronous socket operations. CommandMgr::instance().setIOService(getIOService()); - // LeaseMgr uses IO service to run asynchronous timers. - LeaseMgr::setIOService(getIOService()); - - // HostMgr uses IO service to run asynchronous timers. - HostMgr::setIOService(getIOService()); + // DatabaseConnection uses IO service to run asynchronous timers. + DatabaseConnection::setIOService(getIOService()); // These are the commands always supported by the DHCPv4 server. // Please keep the list in alphabetic order. @@ -1295,11 +1296,8 @@ ControlledDhcpv4Srv::~ControlledDhcpv4Srv() { CommandMgr::instance().deregisterCommand("status-get"); CommandMgr::instance().deregisterCommand("version-get"); - // LeaseMgr uses IO service to run asynchronous timers. - LeaseMgr::setIOService(IOServicePtr()); - - // HostMgr uses IO service to run asynchronous timers. - HostMgr::setIOService(IOServicePtr()); + // Reset DatabaseConnection IO service. + DatabaseConnection::setIOService(IOServicePtr()); } catch (...) { // Don't want to throw exceptions from the destructor. The server // is shutting down anyway. diff --git a/src/bin/dhcp4/dhcp4_lexer.ll b/src/bin/dhcp4/dhcp4_lexer.ll index ae45d2f092..d4799108f6 100644 --- a/src/bin/dhcp4/dhcp4_lexer.ll +++ b/src/bin/dhcp4/dhcp4_lexer.ll @@ -593,6 +593,17 @@ ControlCharacterFill [^"\\]|\\["\\/bfnrtu] } } +\"retry-on-startup\" { + switch(driver.ctx_) { + case isc::dhcp::Parser4Context::LEASE_DATABASE: + case isc::dhcp::Parser4Context::HOSTS_DATABASE: + case isc::dhcp::Parser4Context::CONFIG_DATABASE: + return isc::dhcp::Dhcp4Parser::make_RETRY_ON_STARTUP(driver.loc_); + default: + return isc::dhcp::Dhcp4Parser::make_STRING("retry-on-startup", driver.loc_); + } +} + \"max-reconnect-tries\" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LEASE_DATABASE: diff --git a/src/bin/dhcp4/dhcp4_parser.cc b/src/bin/dhcp4/dhcp4_parser.cc index 0d79fb0841..59d65a417b 100644 --- a/src/bin/dhcp4/dhcp4_parser.cc +++ b/src/bin/dhcp4/dhcp4_parser.cc @@ -411,85 +411,85 @@ namespace isc { namespace dhcp { switch (yykind) { case symbol_kind::S_STRING: // "constant string" -#line 310 "dhcp4_parser.yy" +#line 311 "dhcp4_parser.yy" { yyoutput << yysym.value.template as < std::string > (); } #line 417 "dhcp4_parser.cc" break; case symbol_kind::S_INTEGER: // "integer" -#line 310 "dhcp4_parser.yy" +#line 311 "dhcp4_parser.yy" { yyoutput << yysym.value.template as < int64_t > (); } #line 423 "dhcp4_parser.cc" break; case symbol_kind::S_FLOAT: // "floating point" -#line 310 "dhcp4_parser.yy" +#line 311 "dhcp4_parser.yy" { yyoutput << yysym.value.template as < double > (); } #line 429 "dhcp4_parser.cc" break; case symbol_kind::S_BOOLEAN: // "boolean" -#line 310 "dhcp4_parser.yy" +#line 311 "dhcp4_parser.yy" { yyoutput << yysym.value.template as < bool > (); } #line 435 "dhcp4_parser.cc" break; case symbol_kind::S_value: // value -#line 310 "dhcp4_parser.yy" +#line 311 "dhcp4_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 441 "dhcp4_parser.cc" break; case symbol_kind::S_map_value: // map_value -#line 310 "dhcp4_parser.yy" +#line 311 "dhcp4_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 447 "dhcp4_parser.cc" break; case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value -#line 310 "dhcp4_parser.yy" +#line 311 "dhcp4_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 453 "dhcp4_parser.cc" break; case symbol_kind::S_ddns_conflict_resolution_mode_value: // ddns_conflict_resolution_mode_value -#line 310 "dhcp4_parser.yy" +#line 311 "dhcp4_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 459 "dhcp4_parser.cc" break; case symbol_kind::S_socket_type: // socket_type -#line 310 "dhcp4_parser.yy" +#line 311 "dhcp4_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 465 "dhcp4_parser.cc" break; case symbol_kind::S_outbound_interface_value: // outbound_interface_value -#line 310 "dhcp4_parser.yy" +#line 311 "dhcp4_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 471 "dhcp4_parser.cc" break; case symbol_kind::S_db_type: // db_type -#line 310 "dhcp4_parser.yy" +#line 311 "dhcp4_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 477 "dhcp4_parser.cc" break; case symbol_kind::S_on_fail_mode: // on_fail_mode -#line 310 "dhcp4_parser.yy" +#line 311 "dhcp4_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 483 "dhcp4_parser.cc" break; case symbol_kind::S_hr_mode: // hr_mode -#line 310 "dhcp4_parser.yy" +#line 311 "dhcp4_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 489 "dhcp4_parser.cc" break; case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value -#line 310 "dhcp4_parser.yy" +#line 311 "dhcp4_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 495 "dhcp4_parser.cc" break; @@ -771,127 +771,127 @@ namespace isc { namespace dhcp { switch (yyn) { case 2: // $@1: %empty -#line 319 "dhcp4_parser.yy" +#line 320 "dhcp4_parser.yy" { ctx.ctx_ = ctx.NO_KEYWORD; } #line 777 "dhcp4_parser.cc" break; case 4: // $@2: %empty -#line 320 "dhcp4_parser.yy" +#line 321 "dhcp4_parser.yy" { ctx.ctx_ = ctx.CONFIG; } #line 783 "dhcp4_parser.cc" break; case 6: // $@3: %empty -#line 321 "dhcp4_parser.yy" +#line 322 "dhcp4_parser.yy" { ctx.ctx_ = ctx.DHCP4; } #line 789 "dhcp4_parser.cc" break; case 8: // $@4: %empty -#line 322 "dhcp4_parser.yy" +#line 323 "dhcp4_parser.yy" { ctx.ctx_ = ctx.INTERFACES_CONFIG; } #line 795 "dhcp4_parser.cc" break; case 10: // $@5: %empty -#line 323 "dhcp4_parser.yy" +#line 324 "dhcp4_parser.yy" { ctx.ctx_ = ctx.SUBNET4; } #line 801 "dhcp4_parser.cc" break; case 12: // $@6: %empty -#line 324 "dhcp4_parser.yy" +#line 325 "dhcp4_parser.yy" { ctx.ctx_ = ctx.POOLS; } #line 807 "dhcp4_parser.cc" break; case 14: // $@7: %empty -#line 325 "dhcp4_parser.yy" +#line 326 "dhcp4_parser.yy" { ctx.ctx_ = ctx.RESERVATIONS; } #line 813 "dhcp4_parser.cc" break; case 16: // $@8: %empty -#line 326 "dhcp4_parser.yy" +#line 327 "dhcp4_parser.yy" { ctx.ctx_ = ctx.DHCP4; } #line 819 "dhcp4_parser.cc" break; case 18: // $@9: %empty -#line 327 "dhcp4_parser.yy" +#line 328 "dhcp4_parser.yy" { ctx.ctx_ = ctx.OPTION_DEF; } #line 825 "dhcp4_parser.cc" break; case 20: // $@10: %empty -#line 328 "dhcp4_parser.yy" +#line 329 "dhcp4_parser.yy" { ctx.ctx_ = ctx.OPTION_DATA; } #line 831 "dhcp4_parser.cc" break; case 22: // $@11: %empty -#line 329 "dhcp4_parser.yy" +#line 330 "dhcp4_parser.yy" { ctx.ctx_ = ctx.HOOKS_LIBRARIES; } #line 837 "dhcp4_parser.cc" break; case 24: // $@12: %empty -#line 330 "dhcp4_parser.yy" +#line 331 "dhcp4_parser.yy" { ctx.ctx_ = ctx.DHCP_DDNS; } #line 843 "dhcp4_parser.cc" break; case 26: // $@13: %empty -#line 331 "dhcp4_parser.yy" +#line 332 "dhcp4_parser.yy" { ctx.ctx_ = ctx.CONFIG_CONTROL; } #line 849 "dhcp4_parser.cc" break; case 28: // value: "integer" -#line 339 "dhcp4_parser.yy" +#line 340 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); } #line 855 "dhcp4_parser.cc" break; case 29: // value: "floating point" -#line 340 "dhcp4_parser.yy" +#line 341 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); } #line 861 "dhcp4_parser.cc" break; case 30: // value: "boolean" -#line 341 "dhcp4_parser.yy" +#line 342 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); } #line 867 "dhcp4_parser.cc" break; case 31: // value: "constant string" -#line 342 "dhcp4_parser.yy" +#line 343 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); } #line 873 "dhcp4_parser.cc" break; case 32: // value: "null" -#line 343 "dhcp4_parser.yy" +#line 344 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); } #line 879 "dhcp4_parser.cc" break; case 33: // value: map2 -#line 344 "dhcp4_parser.yy" +#line 345 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } #line 885 "dhcp4_parser.cc" break; case 34: // value: list_generic -#line 345 "dhcp4_parser.yy" +#line 346 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } #line 891 "dhcp4_parser.cc" break; case 35: // sub_json: value -#line 348 "dhcp4_parser.yy" +#line 349 "dhcp4_parser.yy" { // Push back the JSON value on the stack ctx.stack_.push_back(yystack_[0].value.as < ElementPtr > ()); @@ -900,7 +900,7 @@ namespace isc { namespace dhcp { break; case 36: // $@14: %empty -#line 353 "dhcp4_parser.yy" +#line 354 "dhcp4_parser.yy" { // This code is executed when we're about to start parsing // the content of the map @@ -911,7 +911,7 @@ namespace isc { namespace dhcp { break; case 37: // map2: "{" $@14 map_content "}" -#line 358 "dhcp4_parser.yy" +#line 359 "dhcp4_parser.yy" { // map parsing completed. If we ever want to do any wrap up // (maybe some sanity checking), this would be the best place @@ -921,13 +921,13 @@ namespace isc { namespace dhcp { break; case 38: // map_value: map2 -#line 364 "dhcp4_parser.yy" +#line 365 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } #line 927 "dhcp4_parser.cc" break; case 41: // not_empty_map: "constant string" ":" value -#line 371 "dhcp4_parser.yy" +#line 372 "dhcp4_parser.yy" { // map containing a single entry ctx.unique(yystack_[2].value.as < std::string > (), ctx.loc2pos(yystack_[2].location)); @@ -937,7 +937,7 @@ namespace isc { namespace dhcp { break; case 42: // not_empty_map: not_empty_map "," "constant string" ":" value -#line 376 "dhcp4_parser.yy" +#line 377 "dhcp4_parser.yy" { // map consisting of a shorter map followed by // comma and string:value @@ -948,7 +948,7 @@ namespace isc { namespace dhcp { break; case 43: // not_empty_map: not_empty_map "," -#line 382 "dhcp4_parser.yy" +#line 383 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } @@ -956,7 +956,7 @@ namespace isc { namespace dhcp { break; case 44: // $@15: %empty -#line 387 "dhcp4_parser.yy" +#line 388 "dhcp4_parser.yy" { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(l); @@ -965,7 +965,7 @@ namespace isc { namespace dhcp { break; case 45: // list_generic: "[" $@15 list_content "]" -#line 390 "dhcp4_parser.yy" +#line 391 "dhcp4_parser.yy" { // list parsing complete. Put any sanity checking here } @@ -973,7 +973,7 @@ namespace isc { namespace dhcp { break; case 48: // not_empty_list: value -#line 398 "dhcp4_parser.yy" +#line 399 "dhcp4_parser.yy" { // List consisting of a single element. ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ()); @@ -982,7 +982,7 @@ namespace isc { namespace dhcp { break; case 49: // not_empty_list: not_empty_list "," value -#line 402 "dhcp4_parser.yy" +#line 403 "dhcp4_parser.yy" { // List ending with , and a value. ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ()); @@ -991,7 +991,7 @@ namespace isc { namespace dhcp { break; case 50: // not_empty_list: not_empty_list "," -#line 406 "dhcp4_parser.yy" +#line 407 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } @@ -999,7 +999,7 @@ namespace isc { namespace dhcp { break; case 51: // $@16: %empty -#line 412 "dhcp4_parser.yy" +#line 413 "dhcp4_parser.yy" { // List parsing about to start } @@ -1007,7 +1007,7 @@ namespace isc { namespace dhcp { break; case 52: // list_strings: "[" $@16 list_strings_content "]" -#line 414 "dhcp4_parser.yy" +#line 415 "dhcp4_parser.yy" { // list parsing complete. Put any sanity checking here //ctx.stack_.pop_back(); @@ -1016,7 +1016,7 @@ namespace isc { namespace dhcp { break; case 55: // not_empty_list_strings: "constant string" -#line 423 "dhcp4_parser.yy" +#line 424 "dhcp4_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(s); @@ -1025,7 +1025,7 @@ namespace isc { namespace dhcp { break; case 56: // not_empty_list_strings: not_empty_list_strings "," "constant string" -#line 427 "dhcp4_parser.yy" +#line 428 "dhcp4_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(s); @@ -1034,7 +1034,7 @@ namespace isc { namespace dhcp { break; case 57: // not_empty_list_strings: not_empty_list_strings "," -#line 431 "dhcp4_parser.yy" +#line 432 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } @@ -1042,7 +1042,7 @@ namespace isc { namespace dhcp { break; case 58: // unknown_map_entry: "constant string" ":" -#line 441 "dhcp4_parser.yy" +#line 442 "dhcp4_parser.yy" { const std::string& where = ctx.contextName(); const std::string& keyword = yystack_[1].value.as < std::string > (); @@ -1053,7 +1053,7 @@ namespace isc { namespace dhcp { break; case 59: // $@17: %empty -#line 450 "dhcp4_parser.yy" +#line 451 "dhcp4_parser.yy" { // This code is executed when we're about to start parsing // the content of the map @@ -1064,7 +1064,7 @@ namespace isc { namespace dhcp { break; case 60: // syntax_map: "{" $@17 global_object "}" -#line 455 "dhcp4_parser.yy" +#line 456 "dhcp4_parser.yy" { // map parsing completed. If we ever want to do any wrap up // (maybe some sanity checking), this would be the best place @@ -1077,7 +1077,7 @@ namespace isc { namespace dhcp { break; case 61: // $@18: %empty -#line 465 "dhcp4_parser.yy" +#line 466 "dhcp4_parser.yy" { // This code is executed when we're about to start parsing // the content of the map @@ -1092,7 +1092,7 @@ namespace isc { namespace dhcp { break; case 62: // global_object: "Dhcp4" $@18 ":" "{" global_params "}" -#line 474 "dhcp4_parser.yy" +#line 475 "dhcp4_parser.yy" { // No global parameter is required ctx.stack_.pop_back(); @@ -1102,7 +1102,7 @@ namespace isc { namespace dhcp { break; case 64: // global_object_comma: global_object "," -#line 482 "dhcp4_parser.yy" +#line 483 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } @@ -1110,7 +1110,7 @@ namespace isc { namespace dhcp { break; case 65: // $@19: %empty -#line 488 "dhcp4_parser.yy" +#line 489 "dhcp4_parser.yy" { // Parse the Dhcp4 map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -1120,7 +1120,7 @@ namespace isc { namespace dhcp { break; case 66: // sub_dhcp4: "{" $@19 global_params "}" -#line 492 "dhcp4_parser.yy" +#line 493 "dhcp4_parser.yy" { // No global parameter is required // parsing completed @@ -1129,7 +1129,7 @@ namespace isc { namespace dhcp { break; case 69: // global_params: global_params "," -#line 499 "dhcp4_parser.yy" +#line 500 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } @@ -1137,7 +1137,7 @@ namespace isc { namespace dhcp { break; case 138: // valid_lifetime: "valid-lifetime" ":" "integer" -#line 576 "dhcp4_parser.yy" +#line 577 "dhcp4_parser.yy" { ctx.unique("valid-lifetime", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -1147,7 +1147,7 @@ namespace isc { namespace dhcp { break; case 139: // min_valid_lifetime: "min-valid-lifetime" ":" "integer" -#line 582 "dhcp4_parser.yy" +#line 583 "dhcp4_parser.yy" { ctx.unique("min-valid-lifetime", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -1157,7 +1157,7 @@ namespace isc { namespace dhcp { break; case 140: // max_valid_lifetime: "max-valid-lifetime" ":" "integer" -#line 588 "dhcp4_parser.yy" +#line 589 "dhcp4_parser.yy" { ctx.unique("max-valid-lifetime", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -1167,7 +1167,7 @@ namespace isc { namespace dhcp { break; case 141: // renew_timer: "renew-timer" ":" "integer" -#line 594 "dhcp4_parser.yy" +#line 595 "dhcp4_parser.yy" { ctx.unique("renew-timer", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -1177,7 +1177,7 @@ namespace isc { namespace dhcp { break; case 142: // rebind_timer: "rebind-timer" ":" "integer" -#line 600 "dhcp4_parser.yy" +#line 601 "dhcp4_parser.yy" { ctx.unique("rebind-timer", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -1187,7 +1187,7 @@ namespace isc { namespace dhcp { break; case 143: // calculate_tee_times: "calculate-tee-times" ":" "boolean" -#line 606 "dhcp4_parser.yy" +#line 607 "dhcp4_parser.yy" { ctx.unique("calculate-tee-times", ctx.loc2pos(yystack_[2].location)); ElementPtr ctt(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); @@ -1197,7 +1197,7 @@ namespace isc { namespace dhcp { break; case 144: // t1_percent: "t1-percent" ":" "floating point" -#line 612 "dhcp4_parser.yy" +#line 613 "dhcp4_parser.yy" { ctx.unique("t1-percent", ctx.loc2pos(yystack_[2].location)); ElementPtr t1(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); @@ -1207,7 +1207,7 @@ namespace isc { namespace dhcp { break; case 145: // t2_percent: "t2-percent" ":" "floating point" -#line 618 "dhcp4_parser.yy" +#line 619 "dhcp4_parser.yy" { ctx.unique("t2-percent", ctx.loc2pos(yystack_[2].location)); ElementPtr t2(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); @@ -1217,7 +1217,7 @@ namespace isc { namespace dhcp { break; case 146: // cache_threshold: "cache-threshold" ":" "floating point" -#line 624 "dhcp4_parser.yy" +#line 625 "dhcp4_parser.yy" { ctx.unique("cache-threshold", ctx.loc2pos(yystack_[2].location)); ElementPtr ct(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); @@ -1227,7 +1227,7 @@ namespace isc { namespace dhcp { break; case 147: // cache_max_age: "cache-max-age" ":" "integer" -#line 630 "dhcp4_parser.yy" +#line 631 "dhcp4_parser.yy" { ctx.unique("cache-max-age", ctx.loc2pos(yystack_[2].location)); ElementPtr cm(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -1237,7 +1237,7 @@ namespace isc { namespace dhcp { break; case 148: // decline_probation_period: "decline-probation-period" ":" "integer" -#line 636 "dhcp4_parser.yy" +#line 637 "dhcp4_parser.yy" { ctx.unique("decline-probation-period", ctx.loc2pos(yystack_[2].location)); ElementPtr dpp(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -1247,7 +1247,7 @@ namespace isc { namespace dhcp { break; case 149: // $@20: %empty -#line 642 "dhcp4_parser.yy" +#line 643 "dhcp4_parser.yy" { ctx.unique("server-tag", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); @@ -1256,7 +1256,7 @@ namespace isc { namespace dhcp { break; case 150: // server_tag: "server-tag" $@20 ":" "constant string" -#line 645 "dhcp4_parser.yy" +#line 646 "dhcp4_parser.yy" { ElementPtr stag(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("server-tag", stag); @@ -1266,7 +1266,7 @@ namespace isc { namespace dhcp { break; case 151: // parked_packet_limit: "parked-packet-limit" ":" "integer" -#line 651 "dhcp4_parser.yy" +#line 652 "dhcp4_parser.yy" { ctx.unique("parked-packet-limit", ctx.loc2pos(yystack_[2].location)); ElementPtr ppl(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -1276,7 +1276,7 @@ namespace isc { namespace dhcp { break; case 152: // $@21: %empty -#line 657 "dhcp4_parser.yy" +#line 658 "dhcp4_parser.yy" { ctx.unique("allocator", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); @@ -1285,7 +1285,7 @@ namespace isc { namespace dhcp { break; case 153: // allocator: "allocator" $@21 ":" "constant string" -#line 660 "dhcp4_parser.yy" +#line 661 "dhcp4_parser.yy" { ElementPtr al(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("allocator", al); @@ -1295,7 +1295,7 @@ namespace isc { namespace dhcp { break; case 154: // echo_client_id: "echo-client-id" ":" "boolean" -#line 666 "dhcp4_parser.yy" +#line 667 "dhcp4_parser.yy" { ctx.unique("echo-client-id", ctx.loc2pos(yystack_[2].location)); ElementPtr echo(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); @@ -1305,7 +1305,7 @@ namespace isc { namespace dhcp { break; case 155: // match_client_id: "match-client-id" ":" "boolean" -#line 672 "dhcp4_parser.yy" +#line 673 "dhcp4_parser.yy" { ctx.unique("match-client-id", ctx.loc2pos(yystack_[2].location)); ElementPtr match(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); @@ -1315,7 +1315,7 @@ namespace isc { namespace dhcp { break; case 156: // authoritative: "authoritative" ":" "boolean" -#line 678 "dhcp4_parser.yy" +#line 679 "dhcp4_parser.yy" { ctx.unique("authoritative", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); @@ -1325,7 +1325,7 @@ namespace isc { namespace dhcp { break; case 157: // ddns_send_updates: "ddns-send-updates" ":" "boolean" -#line 684 "dhcp4_parser.yy" +#line 685 "dhcp4_parser.yy" { ctx.unique("ddns-send-updates", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); @@ -1335,7 +1335,7 @@ namespace isc { namespace dhcp { break; case 158: // ddns_override_no_update: "ddns-override-no-update" ":" "boolean" -#line 690 "dhcp4_parser.yy" +#line 691 "dhcp4_parser.yy" { ctx.unique("ddns-override-no-update", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); @@ -1345,7 +1345,7 @@ namespace isc { namespace dhcp { break; case 159: // ddns_override_client_update: "ddns-override-client-update" ":" "boolean" -#line 696 "dhcp4_parser.yy" +#line 697 "dhcp4_parser.yy" { ctx.unique("ddns-override-client-update", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); @@ -1355,7 +1355,7 @@ namespace isc { namespace dhcp { break; case 160: // $@22: %empty -#line 702 "dhcp4_parser.yy" +#line 703 "dhcp4_parser.yy" { ctx.enter(ctx.REPLACE_CLIENT_NAME); ctx.unique("ddns-replace-client-name", ctx.loc2pos(yystack_[0].location)); @@ -1364,7 +1364,7 @@ namespace isc { namespace dhcp { break; case 161: // ddns_replace_client_name: "ddns-replace-client-name" $@22 ":" ddns_replace_client_name_value -#line 705 "dhcp4_parser.yy" +#line 706 "dhcp4_parser.yy" { ctx.stack_.back()->set("ddns-replace-client-name", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); @@ -1373,7 +1373,7 @@ namespace isc { namespace dhcp { break; case 162: // ddns_replace_client_name_value: "when-present" -#line 711 "dhcp4_parser.yy" +#line 712 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location))); } @@ -1381,7 +1381,7 @@ namespace isc { namespace dhcp { break; case 163: // ddns_replace_client_name_value: "never" -#line 714 "dhcp4_parser.yy" +#line 715 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location))); } @@ -1389,7 +1389,7 @@ namespace isc { namespace dhcp { break; case 164: // ddns_replace_client_name_value: "always" -#line 717 "dhcp4_parser.yy" +#line 718 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location))); } @@ -1397,7 +1397,7 @@ namespace isc { namespace dhcp { break; case 165: // ddns_replace_client_name_value: "when-not-present" -#line 720 "dhcp4_parser.yy" +#line 721 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location))); } @@ -1405,7 +1405,7 @@ namespace isc { namespace dhcp { break; case 166: // ddns_replace_client_name_value: "boolean" -#line 723 "dhcp4_parser.yy" +#line 724 "dhcp4_parser.yy" { error(yystack_[0].location, "boolean values for the replace-client-name are " "no longer supported"); @@ -1414,7 +1414,7 @@ namespace isc { namespace dhcp { break; case 167: // $@23: %empty -#line 729 "dhcp4_parser.yy" +#line 730 "dhcp4_parser.yy" { ctx.unique("ddns-generated-prefix", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); @@ -1423,7 +1423,7 @@ namespace isc { namespace dhcp { break; case 168: // ddns_generated_prefix: "ddns-generated-prefix" $@23 ":" "constant string" -#line 732 "dhcp4_parser.yy" +#line 733 "dhcp4_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ddns-generated-prefix", s); @@ -1433,7 +1433,7 @@ namespace isc { namespace dhcp { break; case 169: // $@24: %empty -#line 738 "dhcp4_parser.yy" +#line 739 "dhcp4_parser.yy" { ctx.unique("ddns-qualifying-suffix", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); @@ -1442,7 +1442,7 @@ namespace isc { namespace dhcp { break; case 170: // ddns_qualifying_suffix: "ddns-qualifying-suffix" $@24 ":" "constant string" -#line 741 "dhcp4_parser.yy" +#line 742 "dhcp4_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ddns-qualifying-suffix", s); @@ -1452,7 +1452,7 @@ namespace isc { namespace dhcp { break; case 171: // ddns_update_on_renew: "ddns-update-on-renew" ":" "boolean" -#line 747 "dhcp4_parser.yy" +#line 748 "dhcp4_parser.yy" { ctx.unique("ddns-update-on-renew", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); @@ -1462,7 +1462,7 @@ namespace isc { namespace dhcp { break; case 172: // ddns_use_conflict_resolution: "ddns-use-conflict-resolution" ":" "boolean" -#line 756 "dhcp4_parser.yy" +#line 757 "dhcp4_parser.yy" { ctx.unique("ddns-use-conflict-resolution", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); @@ -1476,7 +1476,7 @@ namespace isc { namespace dhcp { break; case 173: // $@25: %empty -#line 766 "dhcp4_parser.yy" +#line 767 "dhcp4_parser.yy" { ctx.unique("ddns-conflict-resolution-mode", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.DDNS_CONFLICT_RESOLUTION_MODE); @@ -1485,7 +1485,7 @@ namespace isc { namespace dhcp { break; case 174: // ddns_conflict_resolution_mode: "ddns-conflict-resolution-mode" $@25 ":" ddns_conflict_resolution_mode_value -#line 769 "dhcp4_parser.yy" +#line 770 "dhcp4_parser.yy" { ctx.stack_.back()->set("ddns-conflict-resolution-mode", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); @@ -1494,7 +1494,7 @@ namespace isc { namespace dhcp { break; case 175: // ddns_conflict_resolution_mode_value: "check-with-dhcid" -#line 775 "dhcp4_parser.yy" +#line 776 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("check-with-dhcid", ctx.loc2pos(yystack_[0].location))); } @@ -1502,7 +1502,7 @@ namespace isc { namespace dhcp { break; case 176: // ddns_conflict_resolution_mode_value: "no-check-with-dhcid" -#line 778 "dhcp4_parser.yy" +#line 779 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("no-check-with-dhcid", ctx.loc2pos(yystack_[0].location))); } @@ -1510,7 +1510,7 @@ namespace isc { namespace dhcp { break; case 177: // ddns_conflict_resolution_mode_value: "check-exists-with-dhcid" -#line 781 "dhcp4_parser.yy" +#line 782 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("check-exists-with-dhcid", ctx.loc2pos(yystack_[0].location))); } @@ -1518,7 +1518,7 @@ namespace isc { namespace dhcp { break; case 178: // ddns_conflict_resolution_mode_value: "no-check-without-dhcid" -#line 784 "dhcp4_parser.yy" +#line 785 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("no-check-without-dhcid", ctx.loc2pos(yystack_[0].location))); } @@ -1526,7 +1526,7 @@ namespace isc { namespace dhcp { break; case 179: // ddns_ttl_percent: "ddns-ttl-percent" ":" "floating point" -#line 789 "dhcp4_parser.yy" +#line 790 "dhcp4_parser.yy" { ctx.unique("ddns-ttl-percent", ctx.loc2pos(yystack_[2].location)); ElementPtr ttl(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); @@ -1536,7 +1536,7 @@ namespace isc { namespace dhcp { break; case 180: // $@26: %empty -#line 795 "dhcp4_parser.yy" +#line 796 "dhcp4_parser.yy" { ctx.unique("hostname-char-set", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); @@ -1545,7 +1545,7 @@ namespace isc { namespace dhcp { break; case 181: // hostname_char_set: "hostname-char-set" $@26 ":" "constant string" -#line 798 "dhcp4_parser.yy" +#line 799 "dhcp4_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hostname-char-set", s); @@ -1555,7 +1555,7 @@ namespace isc { namespace dhcp { break; case 182: // $@27: %empty -#line 804 "dhcp4_parser.yy" +#line 805 "dhcp4_parser.yy" { ctx.unique("hostname-char-replacement", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); @@ -1564,7 +1564,7 @@ namespace isc { namespace dhcp { break; case 183: // hostname_char_replacement: "hostname-char-replacement" $@27 ":" "constant string" -#line 807 "dhcp4_parser.yy" +#line 808 "dhcp4_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hostname-char-replacement", s); @@ -1574,7 +1574,7 @@ namespace isc { namespace dhcp { break; case 184: // store_extended_info: "store-extended-info" ":" "boolean" -#line 813 "dhcp4_parser.yy" +#line 814 "dhcp4_parser.yy" { ctx.unique("store-extended-info", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); @@ -1584,7 +1584,7 @@ namespace isc { namespace dhcp { break; case 185: // statistic_default_sample_count: "statistic-default-sample-count" ":" "integer" -#line 819 "dhcp4_parser.yy" +#line 820 "dhcp4_parser.yy" { ctx.unique("statistic-default-sample-count", ctx.loc2pos(yystack_[2].location)); ElementPtr count(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -1594,7 +1594,7 @@ namespace isc { namespace dhcp { break; case 186: // statistic_default_sample_age: "statistic-default-sample-age" ":" "integer" -#line 825 "dhcp4_parser.yy" +#line 826 "dhcp4_parser.yy" { ctx.unique("statistic-default-sample-age", ctx.loc2pos(yystack_[2].location)); ElementPtr age(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -1604,7 +1604,7 @@ namespace isc { namespace dhcp { break; case 187: // early_global_reservations_lookup: "early-global-reservations-lookup" ":" "boolean" -#line 831 "dhcp4_parser.yy" +#line 832 "dhcp4_parser.yy" { ctx.unique("early-global-reservations-lookup", ctx.loc2pos(yystack_[2].location)); ElementPtr early(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); @@ -1614,7 +1614,7 @@ namespace isc { namespace dhcp { break; case 188: // ip_reservations_unique: "ip-reservations-unique" ":" "boolean" -#line 837 "dhcp4_parser.yy" +#line 838 "dhcp4_parser.yy" { ctx.unique("ip-reservations-unique", ctx.loc2pos(yystack_[2].location)); ElementPtr unique(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); @@ -1624,7 +1624,7 @@ namespace isc { namespace dhcp { break; case 189: // reservations_lookup_first: "reservations-lookup-first" ":" "boolean" -#line 843 "dhcp4_parser.yy" +#line 844 "dhcp4_parser.yy" { ctx.unique("reservations-lookup-first", ctx.loc2pos(yystack_[2].location)); ElementPtr first(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); @@ -1634,7 +1634,7 @@ namespace isc { namespace dhcp { break; case 190: // offer_lifetime: "offer-lifetime" ":" "integer" -#line 849 "dhcp4_parser.yy" +#line 850 "dhcp4_parser.yy" { ctx.unique("offer-lifetime", ctx.loc2pos(yystack_[2].location)); ElementPtr offer_lifetime(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -1644,7 +1644,7 @@ namespace isc { namespace dhcp { break; case 191: // $@28: %empty -#line 855 "dhcp4_parser.yy" +#line 856 "dhcp4_parser.yy" { ctx.unique("interfaces-config", ctx.loc2pos(yystack_[0].location)); ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -1656,7 +1656,7 @@ namespace isc { namespace dhcp { break; case 192: // interfaces_config: "interfaces-config" $@28 ":" "{" interfaces_config_params "}" -#line 861 "dhcp4_parser.yy" +#line 862 "dhcp4_parser.yy" { // No interfaces config param is required ctx.stack_.pop_back(); @@ -1666,7 +1666,7 @@ namespace isc { namespace dhcp { break; case 195: // interfaces_config_params: interfaces_config_params "," -#line 869 "dhcp4_parser.yy" +#line 870 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } @@ -1674,7 +1674,7 @@ namespace isc { namespace dhcp { break; case 206: // $@29: %empty -#line 886 "dhcp4_parser.yy" +#line 887 "dhcp4_parser.yy" { // Parse the interfaces-config map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -1684,7 +1684,7 @@ namespace isc { namespace dhcp { break; case 207: // sub_interfaces4: "{" $@29 interfaces_config_params "}" -#line 890 "dhcp4_parser.yy" +#line 891 "dhcp4_parser.yy" { // No interfaces config param is required // parsing completed @@ -1693,7 +1693,7 @@ namespace isc { namespace dhcp { break; case 208: // $@30: %empty -#line 895 "dhcp4_parser.yy" +#line 896 "dhcp4_parser.yy" { ctx.unique("interfaces", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -1705,7 +1705,7 @@ namespace isc { namespace dhcp { break; case 209: // interfaces_list: "interfaces" $@30 ":" list_strings -#line 901 "dhcp4_parser.yy" +#line 902 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); @@ -1714,7 +1714,7 @@ namespace isc { namespace dhcp { break; case 210: // $@31: %empty -#line 906 "dhcp4_parser.yy" +#line 907 "dhcp4_parser.yy" { ctx.unique("dhcp-socket-type", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.DHCP_SOCKET_TYPE); @@ -1723,7 +1723,7 @@ namespace isc { namespace dhcp { break; case 211: // dhcp_socket_type: "dhcp-socket-type" $@31 ":" socket_type -#line 909 "dhcp4_parser.yy" +#line 910 "dhcp4_parser.yy" { ctx.stack_.back()->set("dhcp-socket-type", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); @@ -1732,19 +1732,19 @@ namespace isc { namespace dhcp { break; case 212: // socket_type: "raw" -#line 914 "dhcp4_parser.yy" +#line 915 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("raw", ctx.loc2pos(yystack_[0].location))); } #line 1738 "dhcp4_parser.cc" break; case 213: // socket_type: "udp" -#line 915 "dhcp4_parser.yy" +#line 916 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("udp", ctx.loc2pos(yystack_[0].location))); } #line 1744 "dhcp4_parser.cc" break; case 214: // $@32: %empty -#line 918 "dhcp4_parser.yy" +#line 919 "dhcp4_parser.yy" { ctx.unique("outbound-interface", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.OUTBOUND_INTERFACE); @@ -1753,7 +1753,7 @@ namespace isc { namespace dhcp { break; case 215: // outbound_interface: "outbound-interface" $@32 ":" outbound_interface_value -#line 921 "dhcp4_parser.yy" +#line 922 "dhcp4_parser.yy" { ctx.stack_.back()->set("outbound-interface", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); @@ -1762,7 +1762,7 @@ namespace isc { namespace dhcp { break; case 216: // outbound_interface_value: "same-as-inbound" -#line 926 "dhcp4_parser.yy" +#line 927 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("same-as-inbound", ctx.loc2pos(yystack_[0].location))); } @@ -1770,7 +1770,7 @@ namespace isc { namespace dhcp { break; case 217: // outbound_interface_value: "use-routing" -#line 928 "dhcp4_parser.yy" +#line 929 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("use-routing", ctx.loc2pos(yystack_[0].location))); } @@ -1778,7 +1778,7 @@ namespace isc { namespace dhcp { break; case 218: // re_detect: "re-detect" ":" "boolean" -#line 932 "dhcp4_parser.yy" +#line 933 "dhcp4_parser.yy" { ctx.unique("re-detect", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); @@ -1788,7 +1788,7 @@ namespace isc { namespace dhcp { break; case 219: // service_sockets_require_all: "service-sockets-require-all" ":" "boolean" -#line 938 "dhcp4_parser.yy" +#line 939 "dhcp4_parser.yy" { ctx.unique("service-sockets-require-all", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); @@ -1798,7 +1798,7 @@ namespace isc { namespace dhcp { break; case 220: // service_sockets_retry_wait_time: "service-sockets-retry-wait-time" ":" "integer" -#line 944 "dhcp4_parser.yy" +#line 945 "dhcp4_parser.yy" { ctx.unique("service-sockets-retry-wait-time", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -1808,7 +1808,7 @@ namespace isc { namespace dhcp { break; case 221: // service_sockets_max_retries: "service-sockets-max-retries" ":" "integer" -#line 950 "dhcp4_parser.yy" +#line 951 "dhcp4_parser.yy" { ctx.unique("service-sockets-max-retries", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -1818,7 +1818,7 @@ namespace isc { namespace dhcp { break; case 222: // $@33: %empty -#line 956 "dhcp4_parser.yy" +#line 957 "dhcp4_parser.yy" { ctx.unique("lease-database", ctx.loc2pos(yystack_[0].location)); ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -1830,7 +1830,7 @@ namespace isc { namespace dhcp { break; case 223: // lease_database: "lease-database" $@33 ":" "{" database_map_params "}" -#line 962 "dhcp4_parser.yy" +#line 963 "dhcp4_parser.yy" { // The type parameter is required ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location)); @@ -1841,7 +1841,7 @@ namespace isc { namespace dhcp { break; case 224: // $@34: %empty -#line 969 "dhcp4_parser.yy" +#line 970 "dhcp4_parser.yy" { ctx.unique("sanity-checks", ctx.loc2pos(yystack_[0].location)); ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -1853,7 +1853,7 @@ namespace isc { namespace dhcp { break; case 225: // sanity_checks: "sanity-checks" $@34 ":" "{" sanity_checks_params "}" -#line 975 "dhcp4_parser.yy" +#line 976 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); @@ -1862,7 +1862,7 @@ namespace isc { namespace dhcp { break; case 228: // sanity_checks_params: sanity_checks_params "," -#line 982 "dhcp4_parser.yy" +#line 983 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } @@ -1870,7 +1870,7 @@ namespace isc { namespace dhcp { break; case 231: // $@35: %empty -#line 991 "dhcp4_parser.yy" +#line 992 "dhcp4_parser.yy" { ctx.unique("lease-checks", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); @@ -1879,7 +1879,7 @@ namespace isc { namespace dhcp { break; case 232: // lease_checks: "lease-checks" $@35 ":" "constant string" -#line 994 "dhcp4_parser.yy" +#line 995 "dhcp4_parser.yy" { if ( (string(yystack_[0].value.as < std::string > ()) == "none") || @@ -1899,7 +1899,7 @@ namespace isc { namespace dhcp { break; case 233: // $@36: %empty -#line 1010 "dhcp4_parser.yy" +#line 1011 "dhcp4_parser.yy" { ctx.unique("extended-info-checks", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); @@ -1908,7 +1908,7 @@ namespace isc { namespace dhcp { break; case 234: // extended_info_checks: "extended-info-checks" $@36 ":" "constant string" -#line 1013 "dhcp4_parser.yy" +#line 1014 "dhcp4_parser.yy" { if ( (string(yystack_[0].value.as < std::string > ()) == "none") || @@ -1927,7 +1927,7 @@ namespace isc { namespace dhcp { break; case 235: // $@37: %empty -#line 1028 "dhcp4_parser.yy" +#line 1029 "dhcp4_parser.yy" { ctx.unique("hosts-database", ctx.loc2pos(yystack_[0].location)); ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -1939,7 +1939,7 @@ namespace isc { namespace dhcp { break; case 236: // hosts_database: "hosts-database" $@37 ":" "{" database_map_params "}" -#line 1034 "dhcp4_parser.yy" +#line 1035 "dhcp4_parser.yy" { // The type parameter is required ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location)); @@ -1950,7 +1950,7 @@ namespace isc { namespace dhcp { break; case 237: // $@38: %empty -#line 1041 "dhcp4_parser.yy" +#line 1042 "dhcp4_parser.yy" { ctx.unique("hosts-databases", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -1962,7 +1962,7 @@ namespace isc { namespace dhcp { break; case 238: // hosts_databases: "hosts-databases" $@38 ":" "[" database_list "]" -#line 1047 "dhcp4_parser.yy" +#line 1048 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); @@ -1971,7 +1971,7 @@ namespace isc { namespace dhcp { break; case 243: // not_empty_database_list: not_empty_database_list "," -#line 1058 "dhcp4_parser.yy" +#line 1059 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } @@ -1979,7 +1979,7 @@ namespace isc { namespace dhcp { break; case 244: // $@39: %empty -#line 1063 "dhcp4_parser.yy" +#line 1064 "dhcp4_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); @@ -1989,7 +1989,7 @@ namespace isc { namespace dhcp { break; case 245: // database: "{" $@39 database_map_params "}" -#line 1067 "dhcp4_parser.yy" +#line 1068 "dhcp4_parser.yy" { // The type parameter is required ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); @@ -1999,15 +1999,15 @@ namespace isc { namespace dhcp { break; case 248: // database_map_params: database_map_params "," -#line 1075 "dhcp4_parser.yy" +#line 1076 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 2007 "dhcp4_parser.cc" break; - case 271: // $@40: %empty -#line 1104 "dhcp4_parser.yy" + case 272: // $@40: %empty +#line 1106 "dhcp4_parser.yy" { ctx.unique("type", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.DATABASE_TYPE); @@ -2015,8 +2015,8 @@ namespace isc { namespace dhcp { #line 2016 "dhcp4_parser.cc" break; - case 272: // database_type: "type" $@40 ":" db_type -#line 1107 "dhcp4_parser.yy" + case 273: // database_type: "type" $@40 ":" db_type +#line 1109 "dhcp4_parser.yy" { ctx.stack_.back()->set("type", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); @@ -2024,26 +2024,26 @@ namespace isc { namespace dhcp { #line 2025 "dhcp4_parser.cc" break; - case 273: // db_type: "memfile" -#line 1112 "dhcp4_parser.yy" + case 274: // db_type: "memfile" +#line 1114 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("memfile", ctx.loc2pos(yystack_[0].location))); } #line 2031 "dhcp4_parser.cc" break; - case 274: // db_type: "mysql" -#line 1113 "dhcp4_parser.yy" + case 275: // db_type: "mysql" +#line 1115 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("mysql", ctx.loc2pos(yystack_[0].location))); } #line 2037 "dhcp4_parser.cc" break; - case 275: // db_type: "postgresql" -#line 1114 "dhcp4_parser.yy" + case 276: // db_type: "postgresql" +#line 1116 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("postgresql", ctx.loc2pos(yystack_[0].location))); } #line 2043 "dhcp4_parser.cc" break; - case 276: // $@41: %empty -#line 1117 "dhcp4_parser.yy" + case 277: // $@41: %empty +#line 1119 "dhcp4_parser.yy" { ctx.unique("user", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); @@ -2051,8 +2051,8 @@ namespace isc { namespace dhcp { #line 2052 "dhcp4_parser.cc" break; - case 277: // user: "user" $@41 ":" "constant string" -#line 1120 "dhcp4_parser.yy" + case 278: // user: "user" $@41 ":" "constant string" +#line 1122 "dhcp4_parser.yy" { ElementPtr user(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("user", user); @@ -2061,8 +2061,8 @@ namespace isc { namespace dhcp { #line 2062 "dhcp4_parser.cc" break; - case 278: // $@42: %empty -#line 1126 "dhcp4_parser.yy" + case 279: // $@42: %empty +#line 1128 "dhcp4_parser.yy" { ctx.unique("password", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); @@ -2070,8 +2070,8 @@ namespace isc { namespace dhcp { #line 2071 "dhcp4_parser.cc" break; - case 279: // password: "password" $@42 ":" "constant string" -#line 1129 "dhcp4_parser.yy" + case 280: // password: "password" $@42 ":" "constant string" +#line 1131 "dhcp4_parser.yy" { ElementPtr pwd(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("password", pwd); @@ -2080,8 +2080,8 @@ namespace isc { namespace dhcp { #line 2081 "dhcp4_parser.cc" break; - case 280: // $@43: %empty -#line 1135 "dhcp4_parser.yy" + case 281: // $@43: %empty +#line 1137 "dhcp4_parser.yy" { ctx.unique("host", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); @@ -2089,8 +2089,8 @@ namespace isc { namespace dhcp { #line 2090 "dhcp4_parser.cc" break; - case 281: // host: "host" $@43 ":" "constant string" -#line 1138 "dhcp4_parser.yy" + case 282: // host: "host" $@43 ":" "constant string" +#line 1140 "dhcp4_parser.yy" { ElementPtr h(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("host", h); @@ -2099,8 +2099,8 @@ namespace isc { namespace dhcp { #line 2100 "dhcp4_parser.cc" break; - case 282: // port: "port" ":" "integer" -#line 1144 "dhcp4_parser.yy" + case 283: // port: "port" ":" "integer" +#line 1146 "dhcp4_parser.yy" { ctx.unique("port", ctx.loc2pos(yystack_[2].location)); ElementPtr p(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -2109,8 +2109,8 @@ namespace isc { namespace dhcp { #line 2110 "dhcp4_parser.cc" break; - case 283: // $@44: %empty -#line 1150 "dhcp4_parser.yy" + case 284: // $@44: %empty +#line 1152 "dhcp4_parser.yy" { ctx.unique("name", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); @@ -2118,8 +2118,8 @@ namespace isc { namespace dhcp { #line 2119 "dhcp4_parser.cc" break; - case 284: // name: "name" $@44 ":" "constant string" -#line 1153 "dhcp4_parser.yy" + case 285: // name: "name" $@44 ":" "constant string" +#line 1155 "dhcp4_parser.yy" { ElementPtr name(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("name", name); @@ -2128,8 +2128,8 @@ namespace isc { namespace dhcp { #line 2129 "dhcp4_parser.cc" break; - case 285: // persist: "persist" ":" "boolean" -#line 1159 "dhcp4_parser.yy" + case 286: // persist: "persist" ":" "boolean" +#line 1161 "dhcp4_parser.yy" { ctx.unique("persist", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); @@ -2138,8 +2138,8 @@ namespace isc { namespace dhcp { #line 2139 "dhcp4_parser.cc" break; - case 286: // lfc_interval: "lfc-interval" ":" "integer" -#line 1165 "dhcp4_parser.yy" + case 287: // lfc_interval: "lfc-interval" ":" "integer" +#line 1167 "dhcp4_parser.yy" { ctx.unique("lfc-interval", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -2148,8 +2148,8 @@ namespace isc { namespace dhcp { #line 2149 "dhcp4_parser.cc" break; - case 287: // readonly: "readonly" ":" "boolean" -#line 1171 "dhcp4_parser.yy" + case 288: // readonly: "readonly" ":" "boolean" +#line 1173 "dhcp4_parser.yy" { ctx.unique("readonly", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); @@ -2158,8 +2158,8 @@ namespace isc { namespace dhcp { #line 2159 "dhcp4_parser.cc" break; - case 288: // connect_timeout: "connect-timeout" ":" "integer" -#line 1177 "dhcp4_parser.yy" + case 289: // connect_timeout: "connect-timeout" ":" "integer" +#line 1179 "dhcp4_parser.yy" { ctx.unique("connect-timeout", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -2168,8 +2168,8 @@ namespace isc { namespace dhcp { #line 2169 "dhcp4_parser.cc" break; - case 289: // read_timeout: "read-timeout" ":" "integer" -#line 1183 "dhcp4_parser.yy" + case 290: // read_timeout: "read-timeout" ":" "integer" +#line 1185 "dhcp4_parser.yy" { ctx.unique("read-timeout", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -2178,8 +2178,8 @@ namespace isc { namespace dhcp { #line 2179 "dhcp4_parser.cc" break; - case 290: // write_timeout: "write-timeout" ":" "integer" -#line 1189 "dhcp4_parser.yy" + case 291: // write_timeout: "write-timeout" ":" "integer" +#line 1191 "dhcp4_parser.yy" { ctx.unique("write-timeout", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -2188,8 +2188,8 @@ namespace isc { namespace dhcp { #line 2189 "dhcp4_parser.cc" break; - case 291: // tcp_user_timeout: "tcp-user-timeout" ":" "integer" -#line 1195 "dhcp4_parser.yy" + case 292: // tcp_user_timeout: "tcp-user-timeout" ":" "integer" +#line 1197 "dhcp4_parser.yy" { ctx.unique("tcp-user-timeout", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -2198,8 +2198,8 @@ namespace isc { namespace dhcp { #line 2199 "dhcp4_parser.cc" break; - case 292: // max_reconnect_tries: "max-reconnect-tries" ":" "integer" -#line 1201 "dhcp4_parser.yy" + case 293: // max_reconnect_tries: "max-reconnect-tries" ":" "integer" +#line 1203 "dhcp4_parser.yy" { ctx.unique("max-reconnect-tries", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -2208,8 +2208,8 @@ namespace isc { namespace dhcp { #line 2209 "dhcp4_parser.cc" break; - case 293: // reconnect_wait_time: "reconnect-wait-time" ":" "integer" -#line 1207 "dhcp4_parser.yy" + case 294: // reconnect_wait_time: "reconnect-wait-time" ":" "integer" +#line 1209 "dhcp4_parser.yy" { ctx.unique("reconnect-wait-time", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -2218,8 +2218,8 @@ namespace isc { namespace dhcp { #line 2219 "dhcp4_parser.cc" break; - case 294: // $@45: %empty -#line 1213 "dhcp4_parser.yy" + case 295: // $@45: %empty +#line 1215 "dhcp4_parser.yy" { ctx.unique("on-fail", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.DATABASE_ON_FAIL); @@ -2227,8 +2227,8 @@ namespace isc { namespace dhcp { #line 2228 "dhcp4_parser.cc" break; - case 295: // on_fail: "on-fail" $@45 ":" on_fail_mode -#line 1216 "dhcp4_parser.yy" + case 296: // on_fail: "on-fail" $@45 ":" on_fail_mode +#line 1218 "dhcp4_parser.yy" { ctx.stack_.back()->set("on-fail", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); @@ -2236,112 +2236,122 @@ namespace isc { namespace dhcp { #line 2237 "dhcp4_parser.cc" break; - case 296: // on_fail_mode: "stop-retry-exit" -#line 1221 "dhcp4_parser.yy" + case 297: // on_fail_mode: "stop-retry-exit" +#line 1223 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("stop-retry-exit", ctx.loc2pos(yystack_[0].location))); } #line 2243 "dhcp4_parser.cc" break; - case 297: // on_fail_mode: "serve-retry-exit" -#line 1222 "dhcp4_parser.yy" + case 298: // on_fail_mode: "serve-retry-exit" +#line 1224 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("serve-retry-exit", ctx.loc2pos(yystack_[0].location))); } #line 2249 "dhcp4_parser.cc" break; - case 298: // on_fail_mode: "serve-retry-continue" -#line 1223 "dhcp4_parser.yy" + case 299: // on_fail_mode: "serve-retry-continue" +#line 1225 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("serve-retry-continue", ctx.loc2pos(yystack_[0].location))); } #line 2255 "dhcp4_parser.cc" break; - case 299: // max_row_errors: "max-row-errors" ":" "integer" -#line 1226 "dhcp4_parser.yy" + case 300: // retry_on_startup: "retry-on-startup" ":" "boolean" +#line 1228 "dhcp4_parser.yy" + { + ctx.unique("retry-on-startup", ctx.loc2pos(yystack_[2].location)); + ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("retry-on-startup", n); +} +#line 2265 "dhcp4_parser.cc" + break; + + case 301: // max_row_errors: "max-row-errors" ":" "integer" +#line 1234 "dhcp4_parser.yy" { ctx.unique("max-row-errors", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-row-errors", n); } -#line 2265 "dhcp4_parser.cc" +#line 2275 "dhcp4_parser.cc" break; - case 300: // $@46: %empty -#line 1232 "dhcp4_parser.yy" + case 302: // $@46: %empty +#line 1240 "dhcp4_parser.yy" { ctx.unique("trust-anchor", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2274 "dhcp4_parser.cc" +#line 2284 "dhcp4_parser.cc" break; - case 301: // trust_anchor: "trust-anchor" $@46 ":" "constant string" -#line 1235 "dhcp4_parser.yy" + case 303: // trust_anchor: "trust-anchor" $@46 ":" "constant string" +#line 1243 "dhcp4_parser.yy" { ElementPtr ca(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("trust-anchor", ca); ctx.leave(); } -#line 2284 "dhcp4_parser.cc" +#line 2294 "dhcp4_parser.cc" break; - case 302: // $@47: %empty -#line 1241 "dhcp4_parser.yy" + case 304: // $@47: %empty +#line 1249 "dhcp4_parser.yy" { ctx.unique("cert-file", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2293 "dhcp4_parser.cc" +#line 2303 "dhcp4_parser.cc" break; - case 303: // cert_file: "cert-file" $@47 ":" "constant string" -#line 1244 "dhcp4_parser.yy" + case 305: // cert_file: "cert-file" $@47 ":" "constant string" +#line 1252 "dhcp4_parser.yy" { ElementPtr cert(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("cert-file", cert); ctx.leave(); } -#line 2303 "dhcp4_parser.cc" +#line 2313 "dhcp4_parser.cc" break; - case 304: // $@48: %empty -#line 1250 "dhcp4_parser.yy" + case 306: // $@48: %empty +#line 1258 "dhcp4_parser.yy" { ctx.unique("key-file", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2312 "dhcp4_parser.cc" +#line 2322 "dhcp4_parser.cc" break; - case 305: // key_file: "key-file" $@48 ":" "constant string" -#line 1253 "dhcp4_parser.yy" + case 307: // key_file: "key-file" $@48 ":" "constant string" +#line 1261 "dhcp4_parser.yy" { ElementPtr key(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("key-file", key); ctx.leave(); } -#line 2322 "dhcp4_parser.cc" +#line 2332 "dhcp4_parser.cc" break; - case 306: // $@49: %empty -#line 1259 "dhcp4_parser.yy" + case 308: // $@49: %empty +#line 1267 "dhcp4_parser.yy" { ctx.unique("cipher-list", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2331 "dhcp4_parser.cc" +#line 2341 "dhcp4_parser.cc" break; - case 307: // cipher_list: "cipher-list" $@49 ":" "constant string" -#line 1262 "dhcp4_parser.yy" + case 309: // cipher_list: "cipher-list" $@49 ":" "constant string" +#line 1270 "dhcp4_parser.yy" { ElementPtr cl(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("cipher-list", cl); ctx.leave(); } -#line 2341 "dhcp4_parser.cc" +#line 2351 "dhcp4_parser.cc" break; - case 308: // $@50: %empty -#line 1268 "dhcp4_parser.yy" + case 310: // $@50: %empty +#line 1276 "dhcp4_parser.yy" { ctx.unique("host-reservation-identifiers", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -2349,73 +2359,73 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.HOST_RESERVATION_IDENTIFIERS); } -#line 2353 "dhcp4_parser.cc" +#line 2363 "dhcp4_parser.cc" break; - case 309: // host_reservation_identifiers: "host-reservation-identifiers" $@50 ":" "[" host_reservation_identifiers_list "]" -#line 1274 "dhcp4_parser.yy" + case 311: // host_reservation_identifiers: "host-reservation-identifiers" $@50 ":" "[" host_reservation_identifiers_list "]" +#line 1282 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 2362 "dhcp4_parser.cc" +#line 2372 "dhcp4_parser.cc" break; - case 312: // host_reservation_identifiers_list: host_reservation_identifiers_list "," -#line 1281 "dhcp4_parser.yy" + case 314: // host_reservation_identifiers_list: host_reservation_identifiers_list "," +#line 1289 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2370 "dhcp4_parser.cc" +#line 2380 "dhcp4_parser.cc" break; - case 318: // duid_id: "duid" -#line 1293 "dhcp4_parser.yy" + case 320: // duid_id: "duid" +#line 1301 "dhcp4_parser.yy" { ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(duid); } -#line 2379 "dhcp4_parser.cc" +#line 2389 "dhcp4_parser.cc" break; - case 319: // hw_address_id: "hw-address" -#line 1298 "dhcp4_parser.yy" + case 321: // hw_address_id: "hw-address" +#line 1306 "dhcp4_parser.yy" { ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(hwaddr); } -#line 2388 "dhcp4_parser.cc" +#line 2398 "dhcp4_parser.cc" break; - case 320: // circuit_id: "circuit-id" -#line 1303 "dhcp4_parser.yy" + case 322: // circuit_id: "circuit-id" +#line 1311 "dhcp4_parser.yy" { ElementPtr circuit(new StringElement("circuit-id", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(circuit); } -#line 2397 "dhcp4_parser.cc" +#line 2407 "dhcp4_parser.cc" break; - case 321: // client_id: "client-id" -#line 1308 "dhcp4_parser.yy" + case 323: // client_id: "client-id" +#line 1316 "dhcp4_parser.yy" { ElementPtr client(new StringElement("client-id", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(client); } -#line 2406 "dhcp4_parser.cc" +#line 2416 "dhcp4_parser.cc" break; - case 322: // flex_id: "flex-id" -#line 1313 "dhcp4_parser.yy" + case 324: // flex_id: "flex-id" +#line 1321 "dhcp4_parser.yy" { ElementPtr flex_id(new StringElement("flex-id", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(flex_id); } -#line 2415 "dhcp4_parser.cc" +#line 2425 "dhcp4_parser.cc" break; - case 323: // $@51: %empty -#line 1320 "dhcp4_parser.yy" + case 325: // $@51: %empty +#line 1328 "dhcp4_parser.yy" { ctx.unique("multi-threading", ctx.loc2pos(yystack_[0].location)); ElementPtr mt(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -2423,60 +2433,60 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(mt); ctx.enter(ctx.DHCP_MULTI_THREADING); } -#line 2427 "dhcp4_parser.cc" +#line 2437 "dhcp4_parser.cc" break; - case 324: // dhcp_multi_threading: "multi-threading" $@51 ":" "{" multi_threading_params "}" -#line 1326 "dhcp4_parser.yy" + case 326: // dhcp_multi_threading: "multi-threading" $@51 ":" "{" multi_threading_params "}" +#line 1334 "dhcp4_parser.yy" { // The enable parameter is required. ctx.require("enable-multi-threading", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); ctx.leave(); } -#line 2438 "dhcp4_parser.cc" +#line 2448 "dhcp4_parser.cc" break; - case 327: // multi_threading_params: multi_threading_params "," -#line 1335 "dhcp4_parser.yy" + case 329: // multi_threading_params: multi_threading_params "," +#line 1343 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2446 "dhcp4_parser.cc" +#line 2456 "dhcp4_parser.cc" break; - case 334: // enable_multi_threading: "enable-multi-threading" ":" "boolean" -#line 1348 "dhcp4_parser.yy" + case 336: // enable_multi_threading: "enable-multi-threading" ":" "boolean" +#line 1356 "dhcp4_parser.yy" { ctx.unique("enable-multi-threading", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("enable-multi-threading", b); } -#line 2456 "dhcp4_parser.cc" +#line 2466 "dhcp4_parser.cc" break; - case 335: // thread_pool_size: "thread-pool-size" ":" "integer" -#line 1354 "dhcp4_parser.yy" + case 337: // thread_pool_size: "thread-pool-size" ":" "integer" +#line 1362 "dhcp4_parser.yy" { ctx.unique("thread-pool-size", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("thread-pool-size", prf); } -#line 2466 "dhcp4_parser.cc" +#line 2476 "dhcp4_parser.cc" break; - case 336: // packet_queue_size: "packet-queue-size" ":" "integer" -#line 1360 "dhcp4_parser.yy" + case 338: // packet_queue_size: "packet-queue-size" ":" "integer" +#line 1368 "dhcp4_parser.yy" { ctx.unique("packet-queue-size", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("packet-queue-size", prf); } -#line 2476 "dhcp4_parser.cc" +#line 2486 "dhcp4_parser.cc" break; - case 337: // $@52: %empty -#line 1366 "dhcp4_parser.yy" + case 339: // $@52: %empty +#line 1374 "dhcp4_parser.yy" { ctx.unique("hooks-libraries", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -2484,113 +2494,113 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.HOOKS_LIBRARIES); } -#line 2488 "dhcp4_parser.cc" +#line 2498 "dhcp4_parser.cc" break; - case 338: // hooks_libraries: "hooks-libraries" $@52 ":" "[" hooks_libraries_list "]" -#line 1372 "dhcp4_parser.yy" + case 340: // hooks_libraries: "hooks-libraries" $@52 ":" "[" hooks_libraries_list "]" +#line 1380 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 2497 "dhcp4_parser.cc" +#line 2507 "dhcp4_parser.cc" break; - case 343: // not_empty_hooks_libraries_list: not_empty_hooks_libraries_list "," -#line 1383 "dhcp4_parser.yy" + case 345: // not_empty_hooks_libraries_list: not_empty_hooks_libraries_list "," +#line 1391 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2505 "dhcp4_parser.cc" +#line 2515 "dhcp4_parser.cc" break; - case 344: // $@53: %empty -#line 1388 "dhcp4_parser.yy" + case 346: // $@53: %empty +#line 1396 "dhcp4_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 2515 "dhcp4_parser.cc" +#line 2525 "dhcp4_parser.cc" break; - case 345: // hooks_library: "{" $@53 hooks_params "}" -#line 1392 "dhcp4_parser.yy" + case 347: // hooks_library: "{" $@53 hooks_params "}" +#line 1400 "dhcp4_parser.yy" { // The library hooks parameter is required ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 2525 "dhcp4_parser.cc" +#line 2535 "dhcp4_parser.cc" break; - case 346: // $@54: %empty -#line 1398 "dhcp4_parser.yy" + case 348: // $@54: %empty +#line 1406 "dhcp4_parser.yy" { // Parse the hooks-libraries list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 2535 "dhcp4_parser.cc" +#line 2545 "dhcp4_parser.cc" break; - case 347: // sub_hooks_library: "{" $@54 hooks_params "}" -#line 1402 "dhcp4_parser.yy" + case 349: // sub_hooks_library: "{" $@54 hooks_params "}" +#line 1410 "dhcp4_parser.yy" { // The library hooks parameter is required ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 2545 "dhcp4_parser.cc" +#line 2555 "dhcp4_parser.cc" break; - case 350: // hooks_params: hooks_params "," -#line 1410 "dhcp4_parser.yy" + case 352: // hooks_params: hooks_params "," +#line 1418 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2553 "dhcp4_parser.cc" +#line 2563 "dhcp4_parser.cc" break; - case 354: // $@55: %empty -#line 1420 "dhcp4_parser.yy" + case 356: // $@55: %empty +#line 1428 "dhcp4_parser.yy" { ctx.unique("library", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2562 "dhcp4_parser.cc" +#line 2572 "dhcp4_parser.cc" break; - case 355: // library: "library" $@55 ":" "constant string" -#line 1423 "dhcp4_parser.yy" + case 357: // library: "library" $@55 ":" "constant string" +#line 1431 "dhcp4_parser.yy" { ElementPtr lib(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("library", lib); ctx.leave(); } -#line 2572 "dhcp4_parser.cc" +#line 2582 "dhcp4_parser.cc" break; - case 356: // $@56: %empty -#line 1429 "dhcp4_parser.yy" + case 358: // $@56: %empty +#line 1437 "dhcp4_parser.yy" { ctx.unique("parameters", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2581 "dhcp4_parser.cc" +#line 2591 "dhcp4_parser.cc" break; - case 357: // parameters: "parameters" $@56 ":" map_value -#line 1432 "dhcp4_parser.yy" + case 359: // parameters: "parameters" $@56 ":" map_value +#line 1440 "dhcp4_parser.yy" { ctx.stack_.back()->set("parameters", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 2590 "dhcp4_parser.cc" +#line 2600 "dhcp4_parser.cc" break; - case 358: // $@57: %empty -#line 1438 "dhcp4_parser.yy" + case 360: // $@57: %empty +#line 1446 "dhcp4_parser.yy" { ctx.unique("expired-leases-processing", ctx.loc2pos(yystack_[0].location)); ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -2598,89 +2608,89 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(m); ctx.enter(ctx.EXPIRED_LEASES_PROCESSING); } -#line 2602 "dhcp4_parser.cc" +#line 2612 "dhcp4_parser.cc" break; - case 359: // expired_leases_processing: "expired-leases-processing" $@57 ":" "{" expired_leases_params "}" -#line 1444 "dhcp4_parser.yy" + case 361: // expired_leases_processing: "expired-leases-processing" $@57 ":" "{" expired_leases_params "}" +#line 1452 "dhcp4_parser.yy" { // No expired lease parameter is required ctx.stack_.pop_back(); ctx.leave(); } -#line 2612 "dhcp4_parser.cc" +#line 2622 "dhcp4_parser.cc" break; - case 362: // expired_leases_params: expired_leases_params "," -#line 1452 "dhcp4_parser.yy" + case 364: // expired_leases_params: expired_leases_params "," +#line 1460 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2620 "dhcp4_parser.cc" +#line 2630 "dhcp4_parser.cc" break; - case 369: // reclaim_timer_wait_time: "reclaim-timer-wait-time" ":" "integer" -#line 1465 "dhcp4_parser.yy" + case 371: // reclaim_timer_wait_time: "reclaim-timer-wait-time" ":" "integer" +#line 1473 "dhcp4_parser.yy" { ctx.unique("reclaim-timer-wait-time", ctx.loc2pos(yystack_[2].location)); ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("reclaim-timer-wait-time", value); } -#line 2630 "dhcp4_parser.cc" +#line 2640 "dhcp4_parser.cc" break; - case 370: // flush_reclaimed_timer_wait_time: "flush-reclaimed-timer-wait-time" ":" "integer" -#line 1471 "dhcp4_parser.yy" + case 372: // flush_reclaimed_timer_wait_time: "flush-reclaimed-timer-wait-time" ":" "integer" +#line 1479 "dhcp4_parser.yy" { ctx.unique("flush-reclaimed-timer-wait-time", ctx.loc2pos(yystack_[2].location)); ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("flush-reclaimed-timer-wait-time", value); } -#line 2640 "dhcp4_parser.cc" +#line 2650 "dhcp4_parser.cc" break; - case 371: // hold_reclaimed_time: "hold-reclaimed-time" ":" "integer" -#line 1477 "dhcp4_parser.yy" + case 373: // hold_reclaimed_time: "hold-reclaimed-time" ":" "integer" +#line 1485 "dhcp4_parser.yy" { ctx.unique("hold-reclaimed-time", ctx.loc2pos(yystack_[2].location)); ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hold-reclaimed-time", value); } -#line 2650 "dhcp4_parser.cc" +#line 2660 "dhcp4_parser.cc" break; - case 372: // max_reclaim_leases: "max-reclaim-leases" ":" "integer" -#line 1483 "dhcp4_parser.yy" + case 374: // max_reclaim_leases: "max-reclaim-leases" ":" "integer" +#line 1491 "dhcp4_parser.yy" { ctx.unique("max-reclaim-leases", ctx.loc2pos(yystack_[2].location)); ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-reclaim-leases", value); } -#line 2660 "dhcp4_parser.cc" +#line 2670 "dhcp4_parser.cc" break; - case 373: // max_reclaim_time: "max-reclaim-time" ":" "integer" -#line 1489 "dhcp4_parser.yy" + case 375: // max_reclaim_time: "max-reclaim-time" ":" "integer" +#line 1497 "dhcp4_parser.yy" { ctx.unique("max-reclaim-time", ctx.loc2pos(yystack_[2].location)); ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-reclaim-time", value); } -#line 2670 "dhcp4_parser.cc" +#line 2680 "dhcp4_parser.cc" break; - case 374: // unwarned_reclaim_cycles: "unwarned-reclaim-cycles" ":" "integer" -#line 1495 "dhcp4_parser.yy" + case 376: // unwarned_reclaim_cycles: "unwarned-reclaim-cycles" ":" "integer" +#line 1503 "dhcp4_parser.yy" { ctx.unique("unwarned-reclaim-cycles", ctx.loc2pos(yystack_[2].location)); ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("unwarned-reclaim-cycles", value); } -#line 2680 "dhcp4_parser.cc" +#line 2690 "dhcp4_parser.cc" break; - case 375: // $@58: %empty -#line 1504 "dhcp4_parser.yy" + case 377: // $@58: %empty +#line 1512 "dhcp4_parser.yy" { ctx.unique("subnet4", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -2688,38 +2698,38 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.SUBNET4); } -#line 2692 "dhcp4_parser.cc" +#line 2702 "dhcp4_parser.cc" break; - case 376: // subnet4_list: "subnet4" $@58 ":" "[" subnet4_list_content "]" -#line 1510 "dhcp4_parser.yy" + case 378: // subnet4_list: "subnet4" $@58 ":" "[" subnet4_list_content "]" +#line 1518 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 2701 "dhcp4_parser.cc" +#line 2711 "dhcp4_parser.cc" break; - case 381: // not_empty_subnet4_list: not_empty_subnet4_list "," -#line 1524 "dhcp4_parser.yy" + case 383: // not_empty_subnet4_list: not_empty_subnet4_list "," +#line 1532 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2709 "dhcp4_parser.cc" +#line 2719 "dhcp4_parser.cc" break; - case 382: // $@59: %empty -#line 1533 "dhcp4_parser.yy" + case 384: // $@59: %empty +#line 1541 "dhcp4_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 2719 "dhcp4_parser.cc" +#line 2729 "dhcp4_parser.cc" break; - case 383: // subnet4: "{" $@59 subnet4_params "}" -#line 1537 "dhcp4_parser.yy" + case 385: // subnet4: "{" $@59 subnet4_params "}" +#line 1545 "dhcp4_parser.yy" { // Once we reached this place, the subnet parsing is now complete. // If we want to, we can implement default values here. @@ -2741,153 +2751,153 @@ namespace isc { namespace dhcp { ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 2745 "dhcp4_parser.cc" +#line 2755 "dhcp4_parser.cc" break; - case 384: // $@60: %empty -#line 1559 "dhcp4_parser.yy" + case 386: // $@60: %empty +#line 1567 "dhcp4_parser.yy" { // Parse the subnet4 list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 2755 "dhcp4_parser.cc" +#line 2765 "dhcp4_parser.cc" break; - case 385: // sub_subnet4: "{" $@60 subnet4_params "}" -#line 1563 "dhcp4_parser.yy" + case 387: // sub_subnet4: "{" $@60 subnet4_params "}" +#line 1571 "dhcp4_parser.yy" { // The subnet subnet4 parameter is required ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 2765 "dhcp4_parser.cc" +#line 2775 "dhcp4_parser.cc" break; - case 388: // subnet4_params: subnet4_params "," -#line 1572 "dhcp4_parser.yy" + case 390: // subnet4_params: subnet4_params "," +#line 1580 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2773 "dhcp4_parser.cc" +#line 2783 "dhcp4_parser.cc" break; - case 438: // $@61: %empty -#line 1629 "dhcp4_parser.yy" + case 440: // $@61: %empty +#line 1637 "dhcp4_parser.yy" { ctx.unique("subnet", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2782 "dhcp4_parser.cc" +#line 2792 "dhcp4_parser.cc" break; - case 439: // subnet: "subnet" $@61 ":" "constant string" -#line 1632 "dhcp4_parser.yy" + case 441: // subnet: "subnet" $@61 ":" "constant string" +#line 1640 "dhcp4_parser.yy" { ElementPtr subnet(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("subnet", subnet); ctx.leave(); } -#line 2792 "dhcp4_parser.cc" +#line 2802 "dhcp4_parser.cc" break; - case 440: // $@62: %empty -#line 1638 "dhcp4_parser.yy" + case 442: // $@62: %empty +#line 1646 "dhcp4_parser.yy" { ctx.unique("4o6-interface", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2801 "dhcp4_parser.cc" +#line 2811 "dhcp4_parser.cc" break; - case 441: // subnet_4o6_interface: "4o6-interface" $@62 ":" "constant string" -#line 1641 "dhcp4_parser.yy" + case 443: // subnet_4o6_interface: "4o6-interface" $@62 ":" "constant string" +#line 1649 "dhcp4_parser.yy" { ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("4o6-interface", iface); ctx.leave(); } -#line 2811 "dhcp4_parser.cc" +#line 2821 "dhcp4_parser.cc" break; - case 442: // $@63: %empty -#line 1647 "dhcp4_parser.yy" + case 444: // $@63: %empty +#line 1655 "dhcp4_parser.yy" { ctx.unique("4o6-interface-id", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2820 "dhcp4_parser.cc" +#line 2830 "dhcp4_parser.cc" break; - case 443: // subnet_4o6_interface_id: "4o6-interface-id" $@63 ":" "constant string" -#line 1650 "dhcp4_parser.yy" + case 445: // subnet_4o6_interface_id: "4o6-interface-id" $@63 ":" "constant string" +#line 1658 "dhcp4_parser.yy" { ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("4o6-interface-id", iface); ctx.leave(); } -#line 2830 "dhcp4_parser.cc" +#line 2840 "dhcp4_parser.cc" break; - case 444: // $@64: %empty -#line 1656 "dhcp4_parser.yy" + case 446: // $@64: %empty +#line 1664 "dhcp4_parser.yy" { ctx.unique("4o6-subnet", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2839 "dhcp4_parser.cc" +#line 2849 "dhcp4_parser.cc" break; - case 445: // subnet_4o6_subnet: "4o6-subnet" $@64 ":" "constant string" -#line 1659 "dhcp4_parser.yy" + case 447: // subnet_4o6_subnet: "4o6-subnet" $@64 ":" "constant string" +#line 1667 "dhcp4_parser.yy" { ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("4o6-subnet", iface); ctx.leave(); } -#line 2849 "dhcp4_parser.cc" +#line 2859 "dhcp4_parser.cc" break; - case 446: // $@65: %empty -#line 1665 "dhcp4_parser.yy" + case 448: // $@65: %empty +#line 1673 "dhcp4_parser.yy" { ctx.unique("interface", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2858 "dhcp4_parser.cc" +#line 2868 "dhcp4_parser.cc" break; - case 447: // interface: "interface" $@65 ":" "constant string" -#line 1668 "dhcp4_parser.yy" + case 449: // interface: "interface" $@65 ":" "constant string" +#line 1676 "dhcp4_parser.yy" { ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("interface", iface); ctx.leave(); } -#line 2868 "dhcp4_parser.cc" +#line 2878 "dhcp4_parser.cc" break; - case 448: // $@66: %empty -#line 1674 "dhcp4_parser.yy" + case 450: // $@66: %empty +#line 1682 "dhcp4_parser.yy" { ctx.unique("client-class", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2877 "dhcp4_parser.cc" +#line 2887 "dhcp4_parser.cc" break; - case 449: // client_class: "client-class" $@66 ":" "constant string" -#line 1677 "dhcp4_parser.yy" + case 451: // client_class: "client-class" $@66 ":" "constant string" +#line 1685 "dhcp4_parser.yy" { ElementPtr cls(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("client-class", cls); ctx.leave(); } -#line 2887 "dhcp4_parser.cc" +#line 2897 "dhcp4_parser.cc" break; - case 450: // $@67: %empty -#line 1683 "dhcp4_parser.yy" + case 452: // $@67: %empty +#line 1691 "dhcp4_parser.yy" { ctx.unique("require-client-classes", ctx.loc2pos(yystack_[0].location)); ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -2895,102 +2905,102 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(c); ctx.enter(ctx.NO_KEYWORD); } -#line 2899 "dhcp4_parser.cc" +#line 2909 "dhcp4_parser.cc" break; - case 451: // require_client_classes: "require-client-classes" $@67 ":" list_strings -#line 1689 "dhcp4_parser.yy" + case 453: // require_client_classes: "require-client-classes" $@67 ":" list_strings +#line 1697 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 2908 "dhcp4_parser.cc" +#line 2918 "dhcp4_parser.cc" break; - case 452: // reservations_global: "reservations-global" ":" "boolean" -#line 1694 "dhcp4_parser.yy" + case 454: // reservations_global: "reservations-global" ":" "boolean" +#line 1702 "dhcp4_parser.yy" { ctx.unique("reservations-global", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("reservations-global", b); } -#line 2918 "dhcp4_parser.cc" +#line 2928 "dhcp4_parser.cc" break; - case 453: // reservations_in_subnet: "reservations-in-subnet" ":" "boolean" -#line 1700 "dhcp4_parser.yy" + case 455: // reservations_in_subnet: "reservations-in-subnet" ":" "boolean" +#line 1708 "dhcp4_parser.yy" { ctx.unique("reservations-in-subnet", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("reservations-in-subnet", b); } -#line 2928 "dhcp4_parser.cc" +#line 2938 "dhcp4_parser.cc" break; - case 454: // reservations_out_of_pool: "reservations-out-of-pool" ":" "boolean" -#line 1706 "dhcp4_parser.yy" + case 456: // reservations_out_of_pool: "reservations-out-of-pool" ":" "boolean" +#line 1714 "dhcp4_parser.yy" { ctx.unique("reservations-out-of-pool", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("reservations-out-of-pool", b); } -#line 2938 "dhcp4_parser.cc" +#line 2948 "dhcp4_parser.cc" break; - case 455: // $@68: %empty -#line 1712 "dhcp4_parser.yy" + case 457: // $@68: %empty +#line 1720 "dhcp4_parser.yy" { ctx.unique("reservation-mode", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.RESERVATION_MODE); } -#line 2947 "dhcp4_parser.cc" +#line 2957 "dhcp4_parser.cc" break; - case 456: // reservation_mode: "reservation-mode" $@68 ":" hr_mode -#line 1715 "dhcp4_parser.yy" + case 458: // reservation_mode: "reservation-mode" $@68 ":" hr_mode +#line 1723 "dhcp4_parser.yy" { ctx.stack_.back()->set("reservation-mode", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 2956 "dhcp4_parser.cc" +#line 2966 "dhcp4_parser.cc" break; - case 457: // hr_mode: "disabled" -#line 1720 "dhcp4_parser.yy" + case 459: // hr_mode: "disabled" +#line 1728 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("disabled", ctx.loc2pos(yystack_[0].location))); } -#line 2962 "dhcp4_parser.cc" +#line 2972 "dhcp4_parser.cc" break; - case 458: // hr_mode: "out-of-pool" -#line 1721 "dhcp4_parser.yy" + case 460: // hr_mode: "out-of-pool" +#line 1729 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(yystack_[0].location))); } -#line 2968 "dhcp4_parser.cc" +#line 2978 "dhcp4_parser.cc" break; - case 459: // hr_mode: "global" -#line 1722 "dhcp4_parser.yy" + case 461: // hr_mode: "global" +#line 1730 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("global", ctx.loc2pos(yystack_[0].location))); } -#line 2974 "dhcp4_parser.cc" +#line 2984 "dhcp4_parser.cc" break; - case 460: // hr_mode: "all" -#line 1723 "dhcp4_parser.yy" + case 462: // hr_mode: "all" +#line 1731 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("all", ctx.loc2pos(yystack_[0].location))); } -#line 2980 "dhcp4_parser.cc" +#line 2990 "dhcp4_parser.cc" break; - case 461: // id: "id" ":" "integer" -#line 1726 "dhcp4_parser.yy" + case 463: // id: "id" ":" "integer" +#line 1734 "dhcp4_parser.yy" { ctx.unique("id", ctx.loc2pos(yystack_[2].location)); ElementPtr id(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("id", id); } -#line 2990 "dhcp4_parser.cc" +#line 3000 "dhcp4_parser.cc" break; - case 462: // $@69: %empty -#line 1734 "dhcp4_parser.yy" + case 464: // $@69: %empty +#line 1742 "dhcp4_parser.yy" { ctx.unique("shared-networks", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -2998,54 +3008,54 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.SHARED_NETWORK); } -#line 3002 "dhcp4_parser.cc" +#line 3012 "dhcp4_parser.cc" break; - case 463: // shared_networks: "shared-networks" $@69 ":" "[" shared_networks_content "]" -#line 1740 "dhcp4_parser.yy" + case 465: // shared_networks: "shared-networks" $@69 ":" "[" shared_networks_content "]" +#line 1748 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3011 "dhcp4_parser.cc" +#line 3021 "dhcp4_parser.cc" break; - case 468: // shared_networks_list: shared_networks_list "," -#line 1753 "dhcp4_parser.yy" + case 470: // shared_networks_list: shared_networks_list "," +#line 1761 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3019 "dhcp4_parser.cc" +#line 3029 "dhcp4_parser.cc" break; - case 469: // $@70: %empty -#line 1758 "dhcp4_parser.yy" + case 471: // $@70: %empty +#line 1766 "dhcp4_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 3029 "dhcp4_parser.cc" +#line 3039 "dhcp4_parser.cc" break; - case 470: // shared_network: "{" $@70 shared_network_params "}" -#line 1762 "dhcp4_parser.yy" + case 472: // shared_network: "{" $@70 shared_network_params "}" +#line 1770 "dhcp4_parser.yy" { ctx.stack_.pop_back(); } -#line 3037 "dhcp4_parser.cc" +#line 3047 "dhcp4_parser.cc" break; - case 473: // shared_network_params: shared_network_params "," -#line 1768 "dhcp4_parser.yy" + case 475: // shared_network_params: shared_network_params "," +#line 1776 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3045 "dhcp4_parser.cc" +#line 3055 "dhcp4_parser.cc" break; - case 518: // $@71: %empty -#line 1823 "dhcp4_parser.yy" + case 520: // $@71: %empty +#line 1831 "dhcp4_parser.yy" { ctx.unique("option-def", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3053,55 +3063,55 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.OPTION_DEF); } -#line 3057 "dhcp4_parser.cc" +#line 3067 "dhcp4_parser.cc" break; - case 519: // option_def_list: "option-def" $@71 ":" "[" option_def_list_content "]" -#line 1829 "dhcp4_parser.yy" + case 521: // option_def_list: "option-def" $@71 ":" "[" option_def_list_content "]" +#line 1837 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3066 "dhcp4_parser.cc" +#line 3076 "dhcp4_parser.cc" break; - case 520: // $@72: %empty -#line 1837 "dhcp4_parser.yy" + case 522: // $@72: %empty +#line 1845 "dhcp4_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 3075 "dhcp4_parser.cc" +#line 3085 "dhcp4_parser.cc" break; - case 521: // sub_option_def_list: "{" $@72 option_def_list "}" -#line 1840 "dhcp4_parser.yy" + case 523: // sub_option_def_list: "{" $@72 option_def_list "}" +#line 1848 "dhcp4_parser.yy" { // parsing completed } -#line 3083 "dhcp4_parser.cc" +#line 3093 "dhcp4_parser.cc" break; - case 526: // not_empty_option_def_list: not_empty_option_def_list "," -#line 1852 "dhcp4_parser.yy" + case 528: // not_empty_option_def_list: not_empty_option_def_list "," +#line 1860 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3091 "dhcp4_parser.cc" +#line 3101 "dhcp4_parser.cc" break; - case 527: // $@73: %empty -#line 1859 "dhcp4_parser.yy" + case 529: // $@73: %empty +#line 1867 "dhcp4_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 3101 "dhcp4_parser.cc" +#line 3111 "dhcp4_parser.cc" break; - case 528: // option_def_entry: "{" $@73 option_def_params "}" -#line 1863 "dhcp4_parser.yy" + case 530: // option_def_entry: "{" $@73 option_def_params "}" +#line 1871 "dhcp4_parser.yy" { // The name, code and type option def parameters are required. ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); @@ -3109,21 +3119,21 @@ namespace isc { namespace dhcp { ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 3113 "dhcp4_parser.cc" +#line 3123 "dhcp4_parser.cc" break; - case 529: // $@74: %empty -#line 1874 "dhcp4_parser.yy" + case 531: // $@74: %empty +#line 1882 "dhcp4_parser.yy" { // Parse the option-def list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 3123 "dhcp4_parser.cc" +#line 3133 "dhcp4_parser.cc" break; - case 530: // sub_option_def: "{" $@74 option_def_params "}" -#line 1878 "dhcp4_parser.yy" + case 532: // sub_option_def: "{" $@74 option_def_params "}" +#line 1886 "dhcp4_parser.yy" { // The name, code and type option def parameters are required. ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); @@ -3131,115 +3141,115 @@ namespace isc { namespace dhcp { ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 3135 "dhcp4_parser.cc" +#line 3145 "dhcp4_parser.cc" break; - case 535: // not_empty_option_def_params: not_empty_option_def_params "," -#line 1894 "dhcp4_parser.yy" + case 537: // not_empty_option_def_params: not_empty_option_def_params "," +#line 1902 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3143 "dhcp4_parser.cc" +#line 3153 "dhcp4_parser.cc" break; - case 547: // code: "code" ":" "integer" -#line 1913 "dhcp4_parser.yy" + case 549: // code: "code" ":" "integer" +#line 1921 "dhcp4_parser.yy" { ctx.unique("code", ctx.loc2pos(yystack_[2].location)); ElementPtr code(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("code", code); } -#line 3153 "dhcp4_parser.cc" +#line 3163 "dhcp4_parser.cc" break; - case 549: // $@75: %empty -#line 1921 "dhcp4_parser.yy" + case 551: // $@75: %empty +#line 1929 "dhcp4_parser.yy" { ctx.unique("type", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3162 "dhcp4_parser.cc" +#line 3172 "dhcp4_parser.cc" break; - case 550: // option_def_type: "type" $@75 ":" "constant string" -#line 1924 "dhcp4_parser.yy" + case 552: // option_def_type: "type" $@75 ":" "constant string" +#line 1932 "dhcp4_parser.yy" { ElementPtr prf(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("type", prf); ctx.leave(); } -#line 3172 "dhcp4_parser.cc" +#line 3182 "dhcp4_parser.cc" break; - case 551: // $@76: %empty -#line 1930 "dhcp4_parser.yy" + case 553: // $@76: %empty +#line 1938 "dhcp4_parser.yy" { ctx.unique("record-types", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3181 "dhcp4_parser.cc" +#line 3191 "dhcp4_parser.cc" break; - case 552: // option_def_record_types: "record-types" $@76 ":" "constant string" -#line 1933 "dhcp4_parser.yy" + case 554: // option_def_record_types: "record-types" $@76 ":" "constant string" +#line 1941 "dhcp4_parser.yy" { ElementPtr rtypes(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("record-types", rtypes); ctx.leave(); } -#line 3191 "dhcp4_parser.cc" +#line 3201 "dhcp4_parser.cc" break; - case 553: // $@77: %empty -#line 1939 "dhcp4_parser.yy" + case 555: // $@77: %empty +#line 1947 "dhcp4_parser.yy" { ctx.unique("space", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3200 "dhcp4_parser.cc" +#line 3210 "dhcp4_parser.cc" break; - case 554: // space: "space" $@77 ":" "constant string" -#line 1942 "dhcp4_parser.yy" + case 556: // space: "space" $@77 ":" "constant string" +#line 1950 "dhcp4_parser.yy" { ElementPtr space(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("space", space); ctx.leave(); } -#line 3210 "dhcp4_parser.cc" +#line 3220 "dhcp4_parser.cc" break; - case 556: // $@78: %empty -#line 1950 "dhcp4_parser.yy" + case 558: // $@78: %empty +#line 1958 "dhcp4_parser.yy" { ctx.unique("encapsulate", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3219 "dhcp4_parser.cc" +#line 3229 "dhcp4_parser.cc" break; - case 557: // option_def_encapsulate: "encapsulate" $@78 ":" "constant string" -#line 1953 "dhcp4_parser.yy" + case 559: // option_def_encapsulate: "encapsulate" $@78 ":" "constant string" +#line 1961 "dhcp4_parser.yy" { ElementPtr encap(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("encapsulate", encap); ctx.leave(); } -#line 3229 "dhcp4_parser.cc" +#line 3239 "dhcp4_parser.cc" break; - case 558: // option_def_array: "array" ":" "boolean" -#line 1959 "dhcp4_parser.yy" + case 560: // option_def_array: "array" ":" "boolean" +#line 1967 "dhcp4_parser.yy" { ctx.unique("array", ctx.loc2pos(yystack_[2].location)); ElementPtr array(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("array", array); } -#line 3239 "dhcp4_parser.cc" +#line 3249 "dhcp4_parser.cc" break; - case 559: // $@79: %empty -#line 1969 "dhcp4_parser.yy" + case 561: // $@79: %empty +#line 1977 "dhcp4_parser.yy" { ctx.unique("option-data", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3247,123 +3257,123 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.OPTION_DATA); } -#line 3251 "dhcp4_parser.cc" +#line 3261 "dhcp4_parser.cc" break; - case 560: // option_data_list: "option-data" $@79 ":" "[" option_data_list_content "]" -#line 1975 "dhcp4_parser.yy" + case 562: // option_data_list: "option-data" $@79 ":" "[" option_data_list_content "]" +#line 1983 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3260 "dhcp4_parser.cc" +#line 3270 "dhcp4_parser.cc" break; - case 565: // not_empty_option_data_list: not_empty_option_data_list "," -#line 1990 "dhcp4_parser.yy" + case 567: // not_empty_option_data_list: not_empty_option_data_list "," +#line 1998 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3268 "dhcp4_parser.cc" +#line 3278 "dhcp4_parser.cc" break; - case 566: // $@80: %empty -#line 1997 "dhcp4_parser.yy" + case 568: // $@80: %empty +#line 2005 "dhcp4_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 3278 "dhcp4_parser.cc" +#line 3288 "dhcp4_parser.cc" break; - case 567: // option_data_entry: "{" $@80 option_data_params "}" -#line 2001 "dhcp4_parser.yy" + case 569: // option_data_entry: "{" $@80 option_data_params "}" +#line 2009 "dhcp4_parser.yy" { /// @todo: the code or name parameters are required. ctx.stack_.pop_back(); } -#line 3287 "dhcp4_parser.cc" +#line 3297 "dhcp4_parser.cc" break; - case 568: // $@81: %empty -#line 2009 "dhcp4_parser.yy" + case 570: // $@81: %empty +#line 2017 "dhcp4_parser.yy" { // Parse the option-data list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 3297 "dhcp4_parser.cc" +#line 3307 "dhcp4_parser.cc" break; - case 569: // sub_option_data: "{" $@81 option_data_params "}" -#line 2013 "dhcp4_parser.yy" + case 571: // sub_option_data: "{" $@81 option_data_params "}" +#line 2021 "dhcp4_parser.yy" { /// @todo: the code or name parameters are required. // parsing completed } -#line 3306 "dhcp4_parser.cc" +#line 3316 "dhcp4_parser.cc" break; - case 574: // not_empty_option_data_params: not_empty_option_data_params "," -#line 2029 "dhcp4_parser.yy" + case 576: // not_empty_option_data_params: not_empty_option_data_params "," +#line 2037 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3314 "dhcp4_parser.cc" +#line 3324 "dhcp4_parser.cc" break; - case 586: // $@82: %empty -#line 2050 "dhcp4_parser.yy" + case 588: // $@82: %empty +#line 2058 "dhcp4_parser.yy" { ctx.unique("data", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3323 "dhcp4_parser.cc" +#line 3333 "dhcp4_parser.cc" break; - case 587: // option_data_data: "data" $@82 ":" "constant string" -#line 2053 "dhcp4_parser.yy" + case 589: // option_data_data: "data" $@82 ":" "constant string" +#line 2061 "dhcp4_parser.yy" { ElementPtr data(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("data", data); ctx.leave(); } -#line 3333 "dhcp4_parser.cc" +#line 3343 "dhcp4_parser.cc" break; - case 590: // option_data_csv_format: "csv-format" ":" "boolean" -#line 2063 "dhcp4_parser.yy" + case 592: // option_data_csv_format: "csv-format" ":" "boolean" +#line 2071 "dhcp4_parser.yy" { ctx.unique("csv-format", ctx.loc2pos(yystack_[2].location)); ElementPtr csv(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("csv-format", csv); } -#line 3343 "dhcp4_parser.cc" +#line 3353 "dhcp4_parser.cc" break; - case 591: // option_data_always_send: "always-send" ":" "boolean" -#line 2069 "dhcp4_parser.yy" + case 593: // option_data_always_send: "always-send" ":" "boolean" +#line 2077 "dhcp4_parser.yy" { ctx.unique("always-send", ctx.loc2pos(yystack_[2].location)); ElementPtr persist(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("always-send", persist); } -#line 3353 "dhcp4_parser.cc" +#line 3363 "dhcp4_parser.cc" break; - case 592: // option_data_never_send: "never-send" ":" "boolean" -#line 2075 "dhcp4_parser.yy" + case 594: // option_data_never_send: "never-send" ":" "boolean" +#line 2083 "dhcp4_parser.yy" { ctx.unique("never-send", ctx.loc2pos(yystack_[2].location)); ElementPtr cancel(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("never-send", cancel); } -#line 3363 "dhcp4_parser.cc" +#line 3373 "dhcp4_parser.cc" break; - case 593: // $@83: %empty -#line 2084 "dhcp4_parser.yy" + case 595: // $@83: %empty +#line 2092 "dhcp4_parser.yy" { ctx.unique("pools", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3371,113 +3381,113 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.POOLS); } -#line 3375 "dhcp4_parser.cc" +#line 3385 "dhcp4_parser.cc" break; - case 594: // pools_list: "pools" $@83 ":" "[" pools_list_content "]" -#line 2090 "dhcp4_parser.yy" + case 596: // pools_list: "pools" $@83 ":" "[" pools_list_content "]" +#line 2098 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3384 "dhcp4_parser.cc" +#line 3394 "dhcp4_parser.cc" break; - case 599: // not_empty_pools_list: not_empty_pools_list "," -#line 2103 "dhcp4_parser.yy" + case 601: // not_empty_pools_list: not_empty_pools_list "," +#line 2111 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3392 "dhcp4_parser.cc" +#line 3402 "dhcp4_parser.cc" break; - case 600: // $@84: %empty -#line 2108 "dhcp4_parser.yy" + case 602: // $@84: %empty +#line 2116 "dhcp4_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 3402 "dhcp4_parser.cc" +#line 3412 "dhcp4_parser.cc" break; - case 601: // pool_list_entry: "{" $@84 pool_params "}" -#line 2112 "dhcp4_parser.yy" + case 603: // pool_list_entry: "{" $@84 pool_params "}" +#line 2120 "dhcp4_parser.yy" { // The pool parameter is required. ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 3412 "dhcp4_parser.cc" +#line 3422 "dhcp4_parser.cc" break; - case 602: // $@85: %empty -#line 2118 "dhcp4_parser.yy" + case 604: // $@85: %empty +#line 2126 "dhcp4_parser.yy" { // Parse the pool list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 3422 "dhcp4_parser.cc" +#line 3432 "dhcp4_parser.cc" break; - case 603: // sub_pool4: "{" $@85 pool_params "}" -#line 2122 "dhcp4_parser.yy" + case 605: // sub_pool4: "{" $@85 pool_params "}" +#line 2130 "dhcp4_parser.yy" { // The pool parameter is required. ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 3432 "dhcp4_parser.cc" +#line 3442 "dhcp4_parser.cc" break; - case 606: // pool_params: pool_params "," -#line 2130 "dhcp4_parser.yy" + case 608: // pool_params: pool_params "," +#line 2138 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3440 "dhcp4_parser.cc" +#line 3450 "dhcp4_parser.cc" break; - case 615: // $@86: %empty -#line 2145 "dhcp4_parser.yy" + case 617: // $@86: %empty +#line 2153 "dhcp4_parser.yy" { ctx.unique("pool", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3449 "dhcp4_parser.cc" +#line 3459 "dhcp4_parser.cc" break; - case 616: // pool_entry: "pool" $@86 ":" "constant string" -#line 2148 "dhcp4_parser.yy" + case 618: // pool_entry: "pool" $@86 ":" "constant string" +#line 2156 "dhcp4_parser.yy" { ElementPtr pool(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("pool", pool); ctx.leave(); } -#line 3459 "dhcp4_parser.cc" +#line 3469 "dhcp4_parser.cc" break; - case 617: // pool_id: "pool-id" ":" "integer" -#line 2154 "dhcp4_parser.yy" + case 619: // pool_id: "pool-id" ":" "integer" +#line 2162 "dhcp4_parser.yy" { ctx.unique("pool-id", ctx.loc2pos(yystack_[2].location)); ElementPtr id(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("pool-id", id); } -#line 3469 "dhcp4_parser.cc" +#line 3479 "dhcp4_parser.cc" break; - case 618: // $@87: %empty -#line 2160 "dhcp4_parser.yy" + case 620: // $@87: %empty +#line 2168 "dhcp4_parser.yy" { ctx.enter(ctx.NO_KEYWORD); } -#line 3477 "dhcp4_parser.cc" +#line 3487 "dhcp4_parser.cc" break; - case 619: // user_context: "user-context" $@87 ":" map_value -#line 2162 "dhcp4_parser.yy" + case 621: // user_context: "user-context" $@87 ":" map_value +#line 2170 "dhcp4_parser.yy" { ElementPtr parent = ctx.stack_.back(); ElementPtr user_context = yystack_[0].value.as < ElementPtr > (); @@ -3500,19 +3510,19 @@ namespace isc { namespace dhcp { parent->set("user-context", user_context); ctx.leave(); } -#line 3504 "dhcp4_parser.cc" +#line 3514 "dhcp4_parser.cc" break; - case 620: // $@88: %empty -#line 2185 "dhcp4_parser.yy" + case 622: // $@88: %empty +#line 2193 "dhcp4_parser.yy" { ctx.enter(ctx.NO_KEYWORD); } -#line 3512 "dhcp4_parser.cc" +#line 3522 "dhcp4_parser.cc" break; - case 621: // comment: "comment" $@88 ":" "constant string" -#line 2187 "dhcp4_parser.yy" + case 623: // comment: "comment" $@88 ":" "constant string" +#line 2195 "dhcp4_parser.yy" { ElementPtr parent = ctx.stack_.back(); ElementPtr user_context(new MapElement(ctx.loc2pos(yystack_[3].location))); @@ -3537,11 +3547,11 @@ namespace isc { namespace dhcp { parent->set("user-context", user_context); ctx.leave(); } -#line 3541 "dhcp4_parser.cc" +#line 3551 "dhcp4_parser.cc" break; - case 622: // $@89: %empty -#line 2215 "dhcp4_parser.yy" + case 624: // $@89: %empty +#line 2223 "dhcp4_parser.yy" { ctx.unique("reservations", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3549,150 +3559,150 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.RESERVATIONS); } -#line 3553 "dhcp4_parser.cc" +#line 3563 "dhcp4_parser.cc" break; - case 623: // reservations: "reservations" $@89 ":" "[" reservations_list "]" -#line 2221 "dhcp4_parser.yy" + case 625: // reservations: "reservations" $@89 ":" "[" reservations_list "]" +#line 2229 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3562 "dhcp4_parser.cc" +#line 3572 "dhcp4_parser.cc" break; - case 628: // not_empty_reservations_list: not_empty_reservations_list "," -#line 2232 "dhcp4_parser.yy" + case 630: // not_empty_reservations_list: not_empty_reservations_list "," +#line 2240 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3570 "dhcp4_parser.cc" +#line 3580 "dhcp4_parser.cc" break; - case 629: // $@90: %empty -#line 2237 "dhcp4_parser.yy" + case 631: // $@90: %empty +#line 2245 "dhcp4_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 3580 "dhcp4_parser.cc" +#line 3590 "dhcp4_parser.cc" break; - case 630: // reservation: "{" $@90 reservation_params "}" -#line 2241 "dhcp4_parser.yy" + case 632: // reservation: "{" $@90 reservation_params "}" +#line 2249 "dhcp4_parser.yy" { /// @todo: an identifier parameter is required. ctx.stack_.pop_back(); } -#line 3589 "dhcp4_parser.cc" +#line 3599 "dhcp4_parser.cc" break; - case 631: // $@91: %empty -#line 2246 "dhcp4_parser.yy" + case 633: // $@91: %empty +#line 2254 "dhcp4_parser.yy" { // Parse the reservations list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 3599 "dhcp4_parser.cc" +#line 3609 "dhcp4_parser.cc" break; - case 632: // sub_reservation: "{" $@91 reservation_params "}" -#line 2250 "dhcp4_parser.yy" + case 634: // sub_reservation: "{" $@91 reservation_params "}" +#line 2258 "dhcp4_parser.yy" { /// @todo: an identifier parameter is required. // parsing completed } -#line 3608 "dhcp4_parser.cc" +#line 3618 "dhcp4_parser.cc" break; - case 637: // not_empty_reservation_params: not_empty_reservation_params "," -#line 2261 "dhcp4_parser.yy" + case 639: // not_empty_reservation_params: not_empty_reservation_params "," +#line 2269 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3616 "dhcp4_parser.cc" +#line 3626 "dhcp4_parser.cc" break; - case 653: // $@92: %empty -#line 2284 "dhcp4_parser.yy" + case 655: // $@92: %empty +#line 2292 "dhcp4_parser.yy" { ctx.unique("next-server", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3625 "dhcp4_parser.cc" +#line 3635 "dhcp4_parser.cc" break; - case 654: // next_server: "next-server" $@92 ":" "constant string" -#line 2287 "dhcp4_parser.yy" + case 656: // next_server: "next-server" $@92 ":" "constant string" +#line 2295 "dhcp4_parser.yy" { ElementPtr next_server(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("next-server", next_server); ctx.leave(); } -#line 3635 "dhcp4_parser.cc" +#line 3645 "dhcp4_parser.cc" break; - case 655: // $@93: %empty -#line 2293 "dhcp4_parser.yy" + case 657: // $@93: %empty +#line 2301 "dhcp4_parser.yy" { ctx.unique("server-hostname", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3644 "dhcp4_parser.cc" +#line 3654 "dhcp4_parser.cc" break; - case 656: // server_hostname: "server-hostname" $@93 ":" "constant string" -#line 2296 "dhcp4_parser.yy" + case 658: // server_hostname: "server-hostname" $@93 ":" "constant string" +#line 2304 "dhcp4_parser.yy" { ElementPtr srv(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("server-hostname", srv); ctx.leave(); } -#line 3654 "dhcp4_parser.cc" +#line 3664 "dhcp4_parser.cc" break; - case 657: // $@94: %empty -#line 2302 "dhcp4_parser.yy" + case 659: // $@94: %empty +#line 2310 "dhcp4_parser.yy" { ctx.unique("boot-file-name", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3663 "dhcp4_parser.cc" +#line 3673 "dhcp4_parser.cc" break; - case 658: // boot_file_name: "boot-file-name" $@94 ":" "constant string" -#line 2305 "dhcp4_parser.yy" + case 660: // boot_file_name: "boot-file-name" $@94 ":" "constant string" +#line 2313 "dhcp4_parser.yy" { ElementPtr bootfile(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("boot-file-name", bootfile); ctx.leave(); } -#line 3673 "dhcp4_parser.cc" +#line 3683 "dhcp4_parser.cc" break; - case 659: // $@95: %empty -#line 2311 "dhcp4_parser.yy" + case 661: // $@95: %empty +#line 2319 "dhcp4_parser.yy" { ctx.unique("ip-address", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3682 "dhcp4_parser.cc" +#line 3692 "dhcp4_parser.cc" break; - case 660: // ip_address: "ip-address" $@95 ":" "constant string" -#line 2314 "dhcp4_parser.yy" + case 662: // ip_address: "ip-address" $@95 ":" "constant string" +#line 2322 "dhcp4_parser.yy" { ElementPtr addr(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ip-address", addr); ctx.leave(); } -#line 3692 "dhcp4_parser.cc" +#line 3702 "dhcp4_parser.cc" break; - case 661: // $@96: %empty -#line 2320 "dhcp4_parser.yy" + case 663: // $@96: %empty +#line 2328 "dhcp4_parser.yy" { ctx.unique("ip-addresses", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3700,134 +3710,134 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.NO_KEYWORD); } -#line 3704 "dhcp4_parser.cc" +#line 3714 "dhcp4_parser.cc" break; - case 662: // ip_addresses: "ip-addresses" $@96 ":" list_strings -#line 2326 "dhcp4_parser.yy" + case 664: // ip_addresses: "ip-addresses" $@96 ":" list_strings +#line 2334 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3713 "dhcp4_parser.cc" +#line 3723 "dhcp4_parser.cc" break; - case 663: // $@97: %empty -#line 2331 "dhcp4_parser.yy" + case 665: // $@97: %empty +#line 2339 "dhcp4_parser.yy" { ctx.unique("duid", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3722 "dhcp4_parser.cc" +#line 3732 "dhcp4_parser.cc" break; - case 664: // duid: "duid" $@97 ":" "constant string" -#line 2334 "dhcp4_parser.yy" + case 666: // duid: "duid" $@97 ":" "constant string" +#line 2342 "dhcp4_parser.yy" { ElementPtr d(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("duid", d); ctx.leave(); } -#line 3732 "dhcp4_parser.cc" +#line 3742 "dhcp4_parser.cc" break; - case 665: // $@98: %empty -#line 2340 "dhcp4_parser.yy" + case 667: // $@98: %empty +#line 2348 "dhcp4_parser.yy" { ctx.unique("hw-address", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3741 "dhcp4_parser.cc" +#line 3751 "dhcp4_parser.cc" break; - case 666: // hw_address: "hw-address" $@98 ":" "constant string" -#line 2343 "dhcp4_parser.yy" + case 668: // hw_address: "hw-address" $@98 ":" "constant string" +#line 2351 "dhcp4_parser.yy" { ElementPtr hw(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hw-address", hw); ctx.leave(); } -#line 3751 "dhcp4_parser.cc" +#line 3761 "dhcp4_parser.cc" break; - case 667: // $@99: %empty -#line 2349 "dhcp4_parser.yy" + case 669: // $@99: %empty +#line 2357 "dhcp4_parser.yy" { ctx.unique("client-id", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3760 "dhcp4_parser.cc" +#line 3770 "dhcp4_parser.cc" break; - case 668: // client_id_value: "client-id" $@99 ":" "constant string" -#line 2352 "dhcp4_parser.yy" + case 670: // client_id_value: "client-id" $@99 ":" "constant string" +#line 2360 "dhcp4_parser.yy" { ElementPtr hw(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("client-id", hw); ctx.leave(); } -#line 3770 "dhcp4_parser.cc" +#line 3780 "dhcp4_parser.cc" break; - case 669: // $@100: %empty -#line 2358 "dhcp4_parser.yy" + case 671: // $@100: %empty +#line 2366 "dhcp4_parser.yy" { ctx.unique("circuit-id", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3779 "dhcp4_parser.cc" +#line 3789 "dhcp4_parser.cc" break; - case 670: // circuit_id_value: "circuit-id" $@100 ":" "constant string" -#line 2361 "dhcp4_parser.yy" + case 672: // circuit_id_value: "circuit-id" $@100 ":" "constant string" +#line 2369 "dhcp4_parser.yy" { ElementPtr hw(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("circuit-id", hw); ctx.leave(); } -#line 3789 "dhcp4_parser.cc" +#line 3799 "dhcp4_parser.cc" break; - case 671: // $@101: %empty -#line 2367 "dhcp4_parser.yy" + case 673: // $@101: %empty +#line 2375 "dhcp4_parser.yy" { ctx.unique("flex-id", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3798 "dhcp4_parser.cc" +#line 3808 "dhcp4_parser.cc" break; - case 672: // flex_id_value: "flex-id" $@101 ":" "constant string" -#line 2370 "dhcp4_parser.yy" + case 674: // flex_id_value: "flex-id" $@101 ":" "constant string" +#line 2378 "dhcp4_parser.yy" { ElementPtr hw(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("flex-id", hw); ctx.leave(); } -#line 3808 "dhcp4_parser.cc" +#line 3818 "dhcp4_parser.cc" break; - case 673: // $@102: %empty -#line 2376 "dhcp4_parser.yy" + case 675: // $@102: %empty +#line 2384 "dhcp4_parser.yy" { ctx.unique("hostname", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3817 "dhcp4_parser.cc" +#line 3827 "dhcp4_parser.cc" break; - case 674: // hostname: "hostname" $@102 ":" "constant string" -#line 2379 "dhcp4_parser.yy" + case 676: // hostname: "hostname" $@102 ":" "constant string" +#line 2387 "dhcp4_parser.yy" { ElementPtr host(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hostname", host); ctx.leave(); } -#line 3827 "dhcp4_parser.cc" +#line 3837 "dhcp4_parser.cc" break; - case 675: // $@103: %empty -#line 2385 "dhcp4_parser.yy" + case 677: // $@103: %empty +#line 2393 "dhcp4_parser.yy" { ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location)); ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3835,20 +3845,20 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(c); ctx.enter(ctx.NO_KEYWORD); } -#line 3839 "dhcp4_parser.cc" +#line 3849 "dhcp4_parser.cc" break; - case 676: // reservation_client_classes: "client-classes" $@103 ":" list_strings -#line 2391 "dhcp4_parser.yy" + case 678: // reservation_client_classes: "client-classes" $@103 ":" list_strings +#line 2399 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3848 "dhcp4_parser.cc" +#line 3858 "dhcp4_parser.cc" break; - case 677: // $@104: %empty -#line 2399 "dhcp4_parser.yy" + case 679: // $@104: %empty +#line 2407 "dhcp4_parser.yy" { ctx.unique("relay", ctx.loc2pos(yystack_[0].location)); ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -3856,20 +3866,20 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(m); ctx.enter(ctx.RELAY); } -#line 3860 "dhcp4_parser.cc" +#line 3870 "dhcp4_parser.cc" break; - case 678: // relay: "relay" $@104 ":" "{" relay_map "}" -#line 2405 "dhcp4_parser.yy" + case 680: // relay: "relay" $@104 ":" "{" relay_map "}" +#line 2413 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3869 "dhcp4_parser.cc" +#line 3879 "dhcp4_parser.cc" break; - case 681: // $@105: %empty -#line 2417 "dhcp4_parser.yy" + case 683: // $@105: %empty +#line 2425 "dhcp4_parser.yy" { ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3877,114 +3887,114 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.CLIENT_CLASSES); } -#line 3881 "dhcp4_parser.cc" +#line 3891 "dhcp4_parser.cc" break; - case 682: // client_classes: "client-classes" $@105 ":" "[" client_classes_list "]" -#line 2423 "dhcp4_parser.yy" + case 684: // client_classes: "client-classes" $@105 ":" "[" client_classes_list "]" +#line 2431 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3890 "dhcp4_parser.cc" +#line 3900 "dhcp4_parser.cc" break; - case 685: // client_classes_list: client_classes_list "," -#line 2430 "dhcp4_parser.yy" + case 687: // client_classes_list: client_classes_list "," +#line 2438 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3898 "dhcp4_parser.cc" +#line 3908 "dhcp4_parser.cc" break; - case 686: // $@106: %empty -#line 2435 "dhcp4_parser.yy" + case 688: // $@106: %empty +#line 2443 "dhcp4_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 3908 "dhcp4_parser.cc" +#line 3918 "dhcp4_parser.cc" break; - case 687: // client_class_entry: "{" $@106 client_class_params "}" -#line 2439 "dhcp4_parser.yy" + case 689: // client_class_entry: "{" $@106 client_class_params "}" +#line 2447 "dhcp4_parser.yy" { // The name client class parameter is required. ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 3918 "dhcp4_parser.cc" +#line 3928 "dhcp4_parser.cc" break; - case 692: // not_empty_client_class_params: not_empty_client_class_params "," -#line 2451 "dhcp4_parser.yy" + case 694: // not_empty_client_class_params: not_empty_client_class_params "," +#line 2459 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3926 "dhcp4_parser.cc" +#line 3936 "dhcp4_parser.cc" break; - case 710: // $@107: %empty -#line 2476 "dhcp4_parser.yy" + case 712: // $@107: %empty +#line 2484 "dhcp4_parser.yy" { ctx.unique("test", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3935 "dhcp4_parser.cc" +#line 3945 "dhcp4_parser.cc" break; - case 711: // client_class_test: "test" $@107 ":" "constant string" -#line 2479 "dhcp4_parser.yy" + case 713: // client_class_test: "test" $@107 ":" "constant string" +#line 2487 "dhcp4_parser.yy" { ElementPtr test(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("test", test); ctx.leave(); } -#line 3945 "dhcp4_parser.cc" +#line 3955 "dhcp4_parser.cc" break; - case 712: // $@108: %empty -#line 2485 "dhcp4_parser.yy" + case 714: // $@108: %empty +#line 2493 "dhcp4_parser.yy" { ctx.unique("template-test", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3954 "dhcp4_parser.cc" +#line 3964 "dhcp4_parser.cc" break; - case 713: // client_class_template_test: "template-test" $@108 ":" "constant string" -#line 2488 "dhcp4_parser.yy" + case 715: // client_class_template_test: "template-test" $@108 ":" "constant string" +#line 2496 "dhcp4_parser.yy" { ElementPtr template_test(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("template-test", template_test); ctx.leave(); } -#line 3964 "dhcp4_parser.cc" +#line 3974 "dhcp4_parser.cc" break; - case 714: // only_if_required: "only-if-required" ":" "boolean" -#line 2494 "dhcp4_parser.yy" + case 716: // only_if_required: "only-if-required" ":" "boolean" +#line 2502 "dhcp4_parser.yy" { ctx.unique("only-if-required", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("only-if-required", b); } -#line 3974 "dhcp4_parser.cc" +#line 3984 "dhcp4_parser.cc" break; - case 715: // dhcp4o6_port: "dhcp4o6-port" ":" "integer" -#line 2502 "dhcp4_parser.yy" + case 717: // dhcp4o6_port: "dhcp4o6-port" ":" "integer" +#line 2510 "dhcp4_parser.yy" { ctx.unique("dhcp4o6-port", ctx.loc2pos(yystack_[2].location)); ElementPtr time(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("dhcp4o6-port", time); } -#line 3984 "dhcp4_parser.cc" +#line 3994 "dhcp4_parser.cc" break; - case 716: // $@109: %empty -#line 2510 "dhcp4_parser.yy" + case 718: // $@109: %empty +#line 2518 "dhcp4_parser.yy" { ctx.unique("control-socket", ctx.loc2pos(yystack_[0].location)); ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -3992,66 +4002,66 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(m); ctx.enter(ctx.CONTROL_SOCKET); } -#line 3996 "dhcp4_parser.cc" +#line 4006 "dhcp4_parser.cc" break; - case 717: // control_socket: "control-socket" $@109 ":" "{" control_socket_params "}" -#line 2516 "dhcp4_parser.yy" + case 719: // control_socket: "control-socket" $@109 ":" "{" control_socket_params "}" +#line 2524 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 4005 "dhcp4_parser.cc" +#line 4015 "dhcp4_parser.cc" break; - case 720: // control_socket_params: control_socket_params "," -#line 2523 "dhcp4_parser.yy" + case 722: // control_socket_params: control_socket_params "," +#line 2531 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4013 "dhcp4_parser.cc" +#line 4023 "dhcp4_parser.cc" break; - case 726: // $@110: %empty -#line 2535 "dhcp4_parser.yy" + case 728: // $@110: %empty +#line 2543 "dhcp4_parser.yy" { ctx.unique("socket-type", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4022 "dhcp4_parser.cc" +#line 4032 "dhcp4_parser.cc" break; - case 727: // control_socket_type: "socket-type" $@110 ":" "constant string" -#line 2538 "dhcp4_parser.yy" + case 729: // control_socket_type: "socket-type" $@110 ":" "constant string" +#line 2546 "dhcp4_parser.yy" { ElementPtr stype(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("socket-type", stype); ctx.leave(); } -#line 4032 "dhcp4_parser.cc" +#line 4042 "dhcp4_parser.cc" break; - case 728: // $@111: %empty -#line 2544 "dhcp4_parser.yy" + case 730: // $@111: %empty +#line 2552 "dhcp4_parser.yy" { ctx.unique("socket-name", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4041 "dhcp4_parser.cc" +#line 4051 "dhcp4_parser.cc" break; - case 729: // control_socket_name: "socket-name" $@111 ":" "constant string" -#line 2547 "dhcp4_parser.yy" + case 731: // control_socket_name: "socket-name" $@111 ":" "constant string" +#line 2555 "dhcp4_parser.yy" { ElementPtr name(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("socket-name", name); ctx.leave(); } -#line 4051 "dhcp4_parser.cc" +#line 4061 "dhcp4_parser.cc" break; - case 730: // $@112: %empty -#line 2556 "dhcp4_parser.yy" + case 732: // $@112: %empty +#line 2564 "dhcp4_parser.yy" { ctx.unique("dhcp-queue-control", ctx.loc2pos(yystack_[0].location)); ElementPtr qc(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -4059,87 +4069,87 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(qc); ctx.enter(ctx.DHCP_QUEUE_CONTROL); } -#line 4063 "dhcp4_parser.cc" +#line 4073 "dhcp4_parser.cc" break; - case 731: // dhcp_queue_control: "dhcp-queue-control" $@112 ":" "{" queue_control_params "}" -#line 2562 "dhcp4_parser.yy" + case 733: // dhcp_queue_control: "dhcp-queue-control" $@112 ":" "{" queue_control_params "}" +#line 2570 "dhcp4_parser.yy" { // The enable queue parameter is required. ctx.require("enable-queue", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); ctx.leave(); } -#line 4074 "dhcp4_parser.cc" +#line 4084 "dhcp4_parser.cc" break; - case 734: // queue_control_params: queue_control_params "," -#line 2571 "dhcp4_parser.yy" + case 736: // queue_control_params: queue_control_params "," +#line 2579 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4082 "dhcp4_parser.cc" +#line 4092 "dhcp4_parser.cc" break; - case 741: // enable_queue: "enable-queue" ":" "boolean" -#line 2584 "dhcp4_parser.yy" + case 743: // enable_queue: "enable-queue" ":" "boolean" +#line 2592 "dhcp4_parser.yy" { ctx.unique("enable-queue", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("enable-queue", b); } -#line 4092 "dhcp4_parser.cc" +#line 4102 "dhcp4_parser.cc" break; - case 742: // $@113: %empty -#line 2590 "dhcp4_parser.yy" + case 744: // $@113: %empty +#line 2598 "dhcp4_parser.yy" { ctx.unique("queue-type", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4101 "dhcp4_parser.cc" +#line 4111 "dhcp4_parser.cc" break; - case 743: // queue_type: "queue-type" $@113 ":" "constant string" -#line 2593 "dhcp4_parser.yy" + case 745: // queue_type: "queue-type" $@113 ":" "constant string" +#line 2601 "dhcp4_parser.yy" { ElementPtr qt(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("queue-type", qt); ctx.leave(); } -#line 4111 "dhcp4_parser.cc" +#line 4121 "dhcp4_parser.cc" break; - case 744: // capacity: "capacity" ":" "integer" -#line 2599 "dhcp4_parser.yy" + case 746: // capacity: "capacity" ":" "integer" +#line 2607 "dhcp4_parser.yy" { ctx.unique("capacity", ctx.loc2pos(yystack_[2].location)); ElementPtr c(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("capacity", c); } -#line 4121 "dhcp4_parser.cc" +#line 4131 "dhcp4_parser.cc" break; - case 745: // $@114: %empty -#line 2605 "dhcp4_parser.yy" + case 747: // $@114: %empty +#line 2613 "dhcp4_parser.yy" { ctx.unique(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4130 "dhcp4_parser.cc" +#line 4140 "dhcp4_parser.cc" break; - case 746: // arbitrary_map_entry: "constant string" $@114 ":" value -#line 2608 "dhcp4_parser.yy" + case 748: // arbitrary_map_entry: "constant string" $@114 ":" value +#line 2616 "dhcp4_parser.yy" { ctx.stack_.back()->set(yystack_[3].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 4139 "dhcp4_parser.cc" +#line 4149 "dhcp4_parser.cc" break; - case 747: // $@115: %empty -#line 2615 "dhcp4_parser.yy" + case 749: // $@115: %empty +#line 2623 "dhcp4_parser.yy" { ctx.unique("dhcp-ddns", ctx.loc2pos(yystack_[0].location)); ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -4147,291 +4157,291 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(m); ctx.enter(ctx.DHCP_DDNS); } -#line 4151 "dhcp4_parser.cc" +#line 4161 "dhcp4_parser.cc" break; - case 748: // dhcp_ddns: "dhcp-ddns" $@115 ":" "{" dhcp_ddns_params "}" -#line 2621 "dhcp4_parser.yy" + case 750: // dhcp_ddns: "dhcp-ddns" $@115 ":" "{" dhcp_ddns_params "}" +#line 2629 "dhcp4_parser.yy" { // The enable updates DHCP DDNS parameter is required. ctx.require("enable-updates", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); ctx.leave(); } -#line 4162 "dhcp4_parser.cc" +#line 4172 "dhcp4_parser.cc" break; - case 749: // $@116: %empty -#line 2628 "dhcp4_parser.yy" + case 751: // $@116: %empty +#line 2636 "dhcp4_parser.yy" { // Parse the dhcp-ddns map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 4172 "dhcp4_parser.cc" +#line 4182 "dhcp4_parser.cc" break; - case 750: // sub_dhcp_ddns: "{" $@116 dhcp_ddns_params "}" -#line 2632 "dhcp4_parser.yy" + case 752: // sub_dhcp_ddns: "{" $@116 dhcp_ddns_params "}" +#line 2640 "dhcp4_parser.yy" { // The enable updates DHCP DDNS parameter is required. ctx.require("enable-updates", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 4182 "dhcp4_parser.cc" +#line 4192 "dhcp4_parser.cc" break; - case 753: // dhcp_ddns_params: dhcp_ddns_params "," -#line 2640 "dhcp4_parser.yy" + case 755: // dhcp_ddns_params: dhcp_ddns_params "," +#line 2648 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4190 "dhcp4_parser.cc" +#line 4200 "dhcp4_parser.cc" break; - case 772: // enable_updates: "enable-updates" ":" "boolean" -#line 2665 "dhcp4_parser.yy" + case 774: // enable_updates: "enable-updates" ":" "boolean" +#line 2673 "dhcp4_parser.yy" { ctx.unique("enable-updates", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("enable-updates", b); } -#line 4200 "dhcp4_parser.cc" +#line 4210 "dhcp4_parser.cc" break; - case 773: // $@117: %empty -#line 2671 "dhcp4_parser.yy" + case 775: // $@117: %empty +#line 2679 "dhcp4_parser.yy" { ctx.unique("server-ip", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4209 "dhcp4_parser.cc" +#line 4219 "dhcp4_parser.cc" break; - case 774: // server_ip: "server-ip" $@117 ":" "constant string" -#line 2674 "dhcp4_parser.yy" + case 776: // server_ip: "server-ip" $@117 ":" "constant string" +#line 2682 "dhcp4_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("server-ip", s); ctx.leave(); } -#line 4219 "dhcp4_parser.cc" +#line 4229 "dhcp4_parser.cc" break; - case 775: // server_port: "server-port" ":" "integer" -#line 2680 "dhcp4_parser.yy" + case 777: // server_port: "server-port" ":" "integer" +#line 2688 "dhcp4_parser.yy" { ctx.unique("server-port", ctx.loc2pos(yystack_[2].location)); ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("server-port", i); } -#line 4229 "dhcp4_parser.cc" +#line 4239 "dhcp4_parser.cc" break; - case 776: // $@118: %empty -#line 2686 "dhcp4_parser.yy" + case 778: // $@118: %empty +#line 2694 "dhcp4_parser.yy" { ctx.unique("sender-ip", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4238 "dhcp4_parser.cc" +#line 4248 "dhcp4_parser.cc" break; - case 777: // sender_ip: "sender-ip" $@118 ":" "constant string" -#line 2689 "dhcp4_parser.yy" + case 779: // sender_ip: "sender-ip" $@118 ":" "constant string" +#line 2697 "dhcp4_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("sender-ip", s); ctx.leave(); } -#line 4248 "dhcp4_parser.cc" +#line 4258 "dhcp4_parser.cc" break; - case 778: // sender_port: "sender-port" ":" "integer" -#line 2695 "dhcp4_parser.yy" + case 780: // sender_port: "sender-port" ":" "integer" +#line 2703 "dhcp4_parser.yy" { ctx.unique("sender-port", ctx.loc2pos(yystack_[2].location)); ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("sender-port", i); } -#line 4258 "dhcp4_parser.cc" +#line 4268 "dhcp4_parser.cc" break; - case 779: // max_queue_size: "max-queue-size" ":" "integer" -#line 2701 "dhcp4_parser.yy" + case 781: // max_queue_size: "max-queue-size" ":" "integer" +#line 2709 "dhcp4_parser.yy" { ctx.unique("max-queue-size", ctx.loc2pos(yystack_[2].location)); ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-queue-size", i); } -#line 4268 "dhcp4_parser.cc" +#line 4278 "dhcp4_parser.cc" break; - case 780: // $@119: %empty -#line 2707 "dhcp4_parser.yy" + case 782: // $@119: %empty +#line 2715 "dhcp4_parser.yy" { ctx.unique("ncr-protocol", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NCR_PROTOCOL); } -#line 4277 "dhcp4_parser.cc" +#line 4287 "dhcp4_parser.cc" break; - case 781: // ncr_protocol: "ncr-protocol" $@119 ":" ncr_protocol_value -#line 2710 "dhcp4_parser.yy" + case 783: // ncr_protocol: "ncr-protocol" $@119 ":" ncr_protocol_value +#line 2718 "dhcp4_parser.yy" { ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 4286 "dhcp4_parser.cc" +#line 4296 "dhcp4_parser.cc" break; - case 782: // ncr_protocol_value: "udp" -#line 2716 "dhcp4_parser.yy" + case 784: // ncr_protocol_value: "udp" +#line 2724 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); } -#line 4292 "dhcp4_parser.cc" +#line 4302 "dhcp4_parser.cc" break; - case 783: // ncr_protocol_value: "tcp" -#line 2717 "dhcp4_parser.yy" + case 785: // ncr_protocol_value: "tcp" +#line 2725 "dhcp4_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); } -#line 4298 "dhcp4_parser.cc" +#line 4308 "dhcp4_parser.cc" break; - case 784: // $@120: %empty -#line 2720 "dhcp4_parser.yy" + case 786: // $@120: %empty +#line 2728 "dhcp4_parser.yy" { ctx.unique("ncr-format", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NCR_FORMAT); } -#line 4307 "dhcp4_parser.cc" +#line 4317 "dhcp4_parser.cc" break; - case 785: // ncr_format: "ncr-format" $@120 ":" "JSON" -#line 2723 "dhcp4_parser.yy" + case 787: // ncr_format: "ncr-format" $@120 ":" "JSON" +#line 2731 "dhcp4_parser.yy" { ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ncr-format", json); ctx.leave(); } -#line 4317 "dhcp4_parser.cc" +#line 4327 "dhcp4_parser.cc" break; - case 786: // $@121: %empty -#line 2730 "dhcp4_parser.yy" + case 788: // $@121: %empty +#line 2738 "dhcp4_parser.yy" { ctx.unique("qualifying-suffix", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4326 "dhcp4_parser.cc" +#line 4336 "dhcp4_parser.cc" break; - case 787: // dep_qualifying_suffix: "qualifying-suffix" $@121 ":" "constant string" -#line 2733 "dhcp4_parser.yy" + case 789: // dep_qualifying_suffix: "qualifying-suffix" $@121 ":" "constant string" +#line 2741 "dhcp4_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("qualifying-suffix", s); ctx.leave(); } -#line 4336 "dhcp4_parser.cc" +#line 4346 "dhcp4_parser.cc" break; - case 788: // dep_override_no_update: "override-no-update" ":" "boolean" -#line 2740 "dhcp4_parser.yy" + case 790: // dep_override_no_update: "override-no-update" ":" "boolean" +#line 2748 "dhcp4_parser.yy" { ctx.unique("override-no-update", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("override-no-update", b); } -#line 4346 "dhcp4_parser.cc" +#line 4356 "dhcp4_parser.cc" break; - case 789: // dep_override_client_update: "override-client-update" ":" "boolean" -#line 2747 "dhcp4_parser.yy" + case 791: // dep_override_client_update: "override-client-update" ":" "boolean" +#line 2755 "dhcp4_parser.yy" { ctx.unique("override-client-update", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("override-client-update", b); } -#line 4356 "dhcp4_parser.cc" +#line 4366 "dhcp4_parser.cc" break; - case 790: // $@122: %empty -#line 2754 "dhcp4_parser.yy" + case 792: // $@122: %empty +#line 2762 "dhcp4_parser.yy" { ctx.unique("replace-client-name", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.REPLACE_CLIENT_NAME); } -#line 4365 "dhcp4_parser.cc" +#line 4375 "dhcp4_parser.cc" break; - case 791: // dep_replace_client_name: "replace-client-name" $@122 ":" ddns_replace_client_name_value -#line 2757 "dhcp4_parser.yy" + case 793: // dep_replace_client_name: "replace-client-name" $@122 ":" ddns_replace_client_name_value +#line 2765 "dhcp4_parser.yy" { ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 4374 "dhcp4_parser.cc" +#line 4384 "dhcp4_parser.cc" break; - case 792: // $@123: %empty -#line 2763 "dhcp4_parser.yy" + case 794: // $@123: %empty +#line 2771 "dhcp4_parser.yy" { ctx.unique("generated-prefix", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4383 "dhcp4_parser.cc" +#line 4393 "dhcp4_parser.cc" break; - case 793: // dep_generated_prefix: "generated-prefix" $@123 ":" "constant string" -#line 2766 "dhcp4_parser.yy" + case 795: // dep_generated_prefix: "generated-prefix" $@123 ":" "constant string" +#line 2774 "dhcp4_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("generated-prefix", s); ctx.leave(); } -#line 4393 "dhcp4_parser.cc" +#line 4403 "dhcp4_parser.cc" break; - case 794: // $@124: %empty -#line 2773 "dhcp4_parser.yy" + case 796: // $@124: %empty +#line 2781 "dhcp4_parser.yy" { ctx.unique("hostname-char-set", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4402 "dhcp4_parser.cc" +#line 4412 "dhcp4_parser.cc" break; - case 795: // dep_hostname_char_set: "hostname-char-set" $@124 ":" "constant string" -#line 2776 "dhcp4_parser.yy" + case 797: // dep_hostname_char_set: "hostname-char-set" $@124 ":" "constant string" +#line 2784 "dhcp4_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hostname-char-set", s); ctx.leave(); } -#line 4412 "dhcp4_parser.cc" +#line 4422 "dhcp4_parser.cc" break; - case 796: // $@125: %empty -#line 2783 "dhcp4_parser.yy" + case 798: // $@125: %empty +#line 2791 "dhcp4_parser.yy" { ctx.unique("hostname-char-replacement", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4421 "dhcp4_parser.cc" +#line 4431 "dhcp4_parser.cc" break; - case 797: // dep_hostname_char_replacement: "hostname-char-replacement" $@125 ":" "constant string" -#line 2786 "dhcp4_parser.yy" + case 799: // dep_hostname_char_replacement: "hostname-char-replacement" $@125 ":" "constant string" +#line 2794 "dhcp4_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hostname-char-replacement", s); ctx.leave(); } -#line 4431 "dhcp4_parser.cc" +#line 4441 "dhcp4_parser.cc" break; - case 798: // $@126: %empty -#line 2795 "dhcp4_parser.yy" + case 800: // $@126: %empty +#line 2803 "dhcp4_parser.yy" { ctx.unique("config-control", ctx.loc2pos(yystack_[0].location)); ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -4439,48 +4449,48 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(i); ctx.enter(ctx.CONFIG_CONTROL); } -#line 4443 "dhcp4_parser.cc" +#line 4453 "dhcp4_parser.cc" break; - case 799: // config_control: "config-control" $@126 ":" "{" config_control_params "}" -#line 2801 "dhcp4_parser.yy" + case 801: // config_control: "config-control" $@126 ":" "{" config_control_params "}" +#line 2809 "dhcp4_parser.yy" { // No config control params are required ctx.stack_.pop_back(); ctx.leave(); } -#line 4453 "dhcp4_parser.cc" +#line 4463 "dhcp4_parser.cc" break; - case 800: // $@127: %empty -#line 2807 "dhcp4_parser.yy" + case 802: // $@127: %empty +#line 2815 "dhcp4_parser.yy" { // Parse the config-control map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 4463 "dhcp4_parser.cc" +#line 4473 "dhcp4_parser.cc" break; - case 801: // sub_config_control: "{" $@127 config_control_params "}" -#line 2811 "dhcp4_parser.yy" + case 803: // sub_config_control: "{" $@127 config_control_params "}" +#line 2819 "dhcp4_parser.yy" { // No config_control params are required // parsing completed } -#line 4472 "dhcp4_parser.cc" +#line 4482 "dhcp4_parser.cc" break; - case 804: // config_control_params: config_control_params "," -#line 2819 "dhcp4_parser.yy" + case 806: // config_control_params: config_control_params "," +#line 2827 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4480 "dhcp4_parser.cc" +#line 4490 "dhcp4_parser.cc" break; - case 807: // $@128: %empty -#line 2829 "dhcp4_parser.yy" + case 809: // $@128: %empty +#line 2837 "dhcp4_parser.yy" { ctx.unique("config-databases", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -4488,30 +4498,30 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.CONFIG_DATABASE); } -#line 4492 "dhcp4_parser.cc" +#line 4502 "dhcp4_parser.cc" break; - case 808: // config_databases: "config-databases" $@128 ":" "[" database_list "]" -#line 2835 "dhcp4_parser.yy" + case 810: // config_databases: "config-databases" $@128 ":" "[" database_list "]" +#line 2843 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 4501 "dhcp4_parser.cc" +#line 4511 "dhcp4_parser.cc" break; - case 809: // config_fetch_wait_time: "config-fetch-wait-time" ":" "integer" -#line 2840 "dhcp4_parser.yy" + case 811: // config_fetch_wait_time: "config-fetch-wait-time" ":" "integer" +#line 2848 "dhcp4_parser.yy" { ctx.unique("config-fetch-wait-time", ctx.loc2pos(yystack_[2].location)); ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("config-fetch-wait-time", value); } -#line 4511 "dhcp4_parser.cc" +#line 4521 "dhcp4_parser.cc" break; - case 810: // $@129: %empty -#line 2848 "dhcp4_parser.yy" + case 812: // $@129: %empty +#line 2856 "dhcp4_parser.yy" { ctx.unique("loggers", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -4519,83 +4529,83 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.LOGGERS); } -#line 4523 "dhcp4_parser.cc" +#line 4533 "dhcp4_parser.cc" break; - case 811: // loggers: "loggers" $@129 ":" "[" loggers_entries "]" -#line 2854 "dhcp4_parser.yy" + case 813: // loggers: "loggers" $@129 ":" "[" loggers_entries "]" +#line 2862 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 4532 "dhcp4_parser.cc" +#line 4542 "dhcp4_parser.cc" break; - case 814: // loggers_entries: loggers_entries "," -#line 2863 "dhcp4_parser.yy" + case 816: // loggers_entries: loggers_entries "," +#line 2871 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4540 "dhcp4_parser.cc" +#line 4550 "dhcp4_parser.cc" break; - case 815: // $@130: %empty -#line 2869 "dhcp4_parser.yy" + case 817: // $@130: %empty +#line 2877 "dhcp4_parser.yy" { ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(l); ctx.stack_.push_back(l); } -#line 4550 "dhcp4_parser.cc" +#line 4560 "dhcp4_parser.cc" break; - case 816: // logger_entry: "{" $@130 logger_params "}" -#line 2873 "dhcp4_parser.yy" + case 818: // logger_entry: "{" $@130 logger_params "}" +#line 2881 "dhcp4_parser.yy" { ctx.stack_.pop_back(); } -#line 4558 "dhcp4_parser.cc" +#line 4568 "dhcp4_parser.cc" break; - case 819: // logger_params: logger_params "," -#line 2879 "dhcp4_parser.yy" + case 821: // logger_params: logger_params "," +#line 2887 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4566 "dhcp4_parser.cc" +#line 4576 "dhcp4_parser.cc" break; - case 827: // debuglevel: "debuglevel" ":" "integer" -#line 2893 "dhcp4_parser.yy" + case 829: // debuglevel: "debuglevel" ":" "integer" +#line 2901 "dhcp4_parser.yy" { ctx.unique("debuglevel", ctx.loc2pos(yystack_[2].location)); ElementPtr dl(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("debuglevel", dl); } -#line 4576 "dhcp4_parser.cc" +#line 4586 "dhcp4_parser.cc" break; - case 828: // $@131: %empty -#line 2899 "dhcp4_parser.yy" + case 830: // $@131: %empty +#line 2907 "dhcp4_parser.yy" { ctx.unique("severity", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4585 "dhcp4_parser.cc" +#line 4595 "dhcp4_parser.cc" break; - case 829: // severity: "severity" $@131 ":" "constant string" -#line 2902 "dhcp4_parser.yy" + case 831: // severity: "severity" $@131 ":" "constant string" +#line 2910 "dhcp4_parser.yy" { ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("severity", sev); ctx.leave(); } -#line 4595 "dhcp4_parser.cc" +#line 4605 "dhcp4_parser.cc" break; - case 830: // $@132: %empty -#line 2908 "dhcp4_parser.yy" + case 832: // $@132: %empty +#line 2916 "dhcp4_parser.yy" { ctx.unique("output-options", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -4603,122 +4613,122 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.OUTPUT_OPTIONS); } -#line 4607 "dhcp4_parser.cc" +#line 4617 "dhcp4_parser.cc" break; - case 831: // output_options_list: "output-options" $@132 ":" "[" output_options_list_content "]" -#line 2914 "dhcp4_parser.yy" + case 833: // output_options_list: "output-options" $@132 ":" "[" output_options_list_content "]" +#line 2922 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 4616 "dhcp4_parser.cc" +#line 4626 "dhcp4_parser.cc" break; - case 834: // output_options_list_content: output_options_list_content "," -#line 2921 "dhcp4_parser.yy" + case 836: // output_options_list_content: output_options_list_content "," +#line 2929 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4624 "dhcp4_parser.cc" +#line 4634 "dhcp4_parser.cc" break; - case 835: // $@133: %empty -#line 2926 "dhcp4_parser.yy" + case 837: // $@133: %empty +#line 2934 "dhcp4_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 4634 "dhcp4_parser.cc" +#line 4644 "dhcp4_parser.cc" break; - case 836: // output_entry: "{" $@133 output_params_list "}" -#line 2930 "dhcp4_parser.yy" + case 838: // output_entry: "{" $@133 output_params_list "}" +#line 2938 "dhcp4_parser.yy" { ctx.stack_.pop_back(); } -#line 4642 "dhcp4_parser.cc" +#line 4652 "dhcp4_parser.cc" break; - case 839: // output_params_list: output_params_list "," -#line 2936 "dhcp4_parser.yy" + case 841: // output_params_list: output_params_list "," +#line 2944 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4650 "dhcp4_parser.cc" +#line 4660 "dhcp4_parser.cc" break; - case 845: // $@134: %empty -#line 2948 "dhcp4_parser.yy" + case 847: // $@134: %empty +#line 2956 "dhcp4_parser.yy" { ctx.unique("output", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4659 "dhcp4_parser.cc" +#line 4669 "dhcp4_parser.cc" break; - case 846: // output: "output" $@134 ":" "constant string" -#line 2951 "dhcp4_parser.yy" + case 848: // output: "output" $@134 ":" "constant string" +#line 2959 "dhcp4_parser.yy" { ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("output", sev); ctx.leave(); } -#line 4669 "dhcp4_parser.cc" +#line 4679 "dhcp4_parser.cc" break; - case 847: // flush: "flush" ":" "boolean" -#line 2957 "dhcp4_parser.yy" + case 849: // flush: "flush" ":" "boolean" +#line 2965 "dhcp4_parser.yy" { ctx.unique("flush", ctx.loc2pos(yystack_[2].location)); ElementPtr flush(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("flush", flush); } -#line 4679 "dhcp4_parser.cc" +#line 4689 "dhcp4_parser.cc" break; - case 848: // maxsize: "maxsize" ":" "integer" -#line 2963 "dhcp4_parser.yy" + case 850: // maxsize: "maxsize" ":" "integer" +#line 2971 "dhcp4_parser.yy" { ctx.unique("maxsize", ctx.loc2pos(yystack_[2].location)); ElementPtr maxsize(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("maxsize", maxsize); } -#line 4689 "dhcp4_parser.cc" +#line 4699 "dhcp4_parser.cc" break; - case 849: // maxver: "maxver" ":" "integer" -#line 2969 "dhcp4_parser.yy" + case 851: // maxver: "maxver" ":" "integer" +#line 2977 "dhcp4_parser.yy" { ctx.unique("maxver", ctx.loc2pos(yystack_[2].location)); ElementPtr maxver(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("maxver", maxver); } -#line 4699 "dhcp4_parser.cc" +#line 4709 "dhcp4_parser.cc" break; - case 850: // $@135: %empty -#line 2975 "dhcp4_parser.yy" + case 852: // $@135: %empty +#line 2983 "dhcp4_parser.yy" { ctx.unique("pattern", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4708 "dhcp4_parser.cc" +#line 4718 "dhcp4_parser.cc" break; - case 851: // pattern: "pattern" $@135 ":" "constant string" -#line 2978 "dhcp4_parser.yy" + case 853: // pattern: "pattern" $@135 ":" "constant string" +#line 2986 "dhcp4_parser.yy" { ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("pattern", sev); ctx.leave(); } -#line 4718 "dhcp4_parser.cc" +#line 4728 "dhcp4_parser.cc" break; - case 852: // $@136: %empty -#line 2984 "dhcp4_parser.yy" + case 854: // $@136: %empty +#line 2992 "dhcp4_parser.yy" { ctx.unique("compatibility", ctx.loc2pos(yystack_[0].location)); ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -4726,68 +4736,68 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(i); ctx.enter(ctx.COMPATIBILITY); } -#line 4730 "dhcp4_parser.cc" +#line 4740 "dhcp4_parser.cc" break; - case 853: // compatibility: "compatibility" $@136 ":" "{" compatibility_params "}" -#line 2990 "dhcp4_parser.yy" + case 855: // compatibility: "compatibility" $@136 ":" "{" compatibility_params "}" +#line 2998 "dhcp4_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 4739 "dhcp4_parser.cc" +#line 4749 "dhcp4_parser.cc" break; - case 856: // compatibility_params: compatibility_params "," -#line 2997 "dhcp4_parser.yy" + case 858: // compatibility_params: compatibility_params "," +#line 3005 "dhcp4_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4747 "dhcp4_parser.cc" +#line 4757 "dhcp4_parser.cc" break; - case 862: // lenient_option_parsing: "lenient-option-parsing" ":" "boolean" -#line 3009 "dhcp4_parser.yy" + case 864: // lenient_option_parsing: "lenient-option-parsing" ":" "boolean" +#line 3017 "dhcp4_parser.yy" { ctx.unique("lenient-option-parsing", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("lenient-option-parsing", b); } -#line 4757 "dhcp4_parser.cc" +#line 4767 "dhcp4_parser.cc" break; - case 863: // ignore_dhcp_server_identifier: "ignore-dhcp-server-identifier" ":" "boolean" -#line 3015 "dhcp4_parser.yy" + case 865: // ignore_dhcp_server_identifier: "ignore-dhcp-server-identifier" ":" "boolean" +#line 3023 "dhcp4_parser.yy" { ctx.unique("ignore-dhcp-server-identifier", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ignore-dhcp-server-identifier", b); } -#line 4767 "dhcp4_parser.cc" +#line 4777 "dhcp4_parser.cc" break; - case 864: // ignore_rai_link_selection: "ignore-rai-link-selection" ":" "boolean" -#line 3021 "dhcp4_parser.yy" + case 866: // ignore_rai_link_selection: "ignore-rai-link-selection" ":" "boolean" +#line 3029 "dhcp4_parser.yy" { ctx.unique("ignore-rai-link-selection", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ignore-rai-link-selection", b); } -#line 4777 "dhcp4_parser.cc" +#line 4787 "dhcp4_parser.cc" break; - case 865: // exclude_first_last_24: "exclude-first-last-24" ":" "boolean" -#line 3027 "dhcp4_parser.yy" + case 867: // exclude_first_last_24: "exclude-first-last-24" ":" "boolean" +#line 3035 "dhcp4_parser.yy" { ctx.unique("exclude-first-last-24", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("exclude-first-last-24", b); } -#line 4787 "dhcp4_parser.cc" +#line 4797 "dhcp4_parser.cc" break; -#line 4791 "dhcp4_parser.cc" +#line 4801 "dhcp4_parser.cc" default: break; @@ -5139,146 +5149,147 @@ namespace isc { namespace dhcp { } - const short Dhcp4Parser::yypact_ninf_ = -1022; + const short Dhcp4Parser::yypact_ninf_ = -1025; const signed char Dhcp4Parser::yytable_ninf_ = -1; const short Dhcp4Parser::yypact_[] = { - 597, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, 18, 44, 47, 64, 82, 90, - 98, 129, 145, 153, 172, 179, 190, 295, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, 44, -164, 106, 133, 159, 332, - -24, 201, -28, 257, 212, -113, 476, 176, -1022, 230, - 251, 252, 262, 326, -1022, 23, -1022, -1022, -1022, -1022, - 333, 340, 345, -1022, -1022, -1022, 346, -1022, -1022, -1022, - 347, 352, 353, 354, 366, 367, 370, 371, 372, 376, - 384, -1022, 385, 390, 391, 392, 404, -1022, -1022, -1022, - 405, 406, 421, 423, -1022, -1022, -1022, 430, -1022, -1022, - -1022, -1022, -1022, -1022, 431, 433, 442, -1022, -1022, -1022, - -1022, -1022, 450, -1022, -1022, -1022, -1022, -1022, -1022, 451, - 452, 456, -1022, -1022, 457, -1022, 42, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, 459, 460, - 463, 466, -1022, 49, -1022, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, - 468, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, 59, -1022, -1022, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, -1022, 470, -1022, -1022, -1022, - -1022, 65, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, 290, - 478, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, 328, -1022, -1022, 475, -1022, -1022, -1022, - 480, -1022, -1022, 379, 479, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, 481, 482, - 484, -1022, -1022, -1022, -1022, 489, 486, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, - 85, -1022, -1022, -1022, 495, -1022, -1022, 497, -1022, 499, - 500, -1022, -1022, 503, 507, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, 91, -1022, -1022, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, - 511, 93, -1022, -1022, -1022, -1022, 44, 44, -1022, 297, - 519, -1022, -1022, 521, 523, 524, 306, 307, 308, 529, - 532, 540, 330, 545, 550, 551, 335, 336, 338, 341, - 342, 343, 348, 349, 350, 357, 358, 560, 360, 365, - 344, 351, 373, 564, 565, 571, 381, 386, 377, 387, - 585, 589, 590, 398, 603, 607, 608, 616, 631, 632, - 414, 420, 435, 640, 655, 656, 658, 662, 446, 665, - 666, 667, 668, 670, 671, 453, 454, 455, 675, 676, - -1022, 133, -1022, 678, 679, 680, 462, 464, 465, 467, - 159, -1022, 685, 693, 694, 695, 696, 697, 487, 698, - 701, 703, 332, -1022, 705, 490, -24, -1022, 708, 709, - 710, 711, 712, 713, 714, 715, -1022, 201, -1022, 731, - 732, 516, 734, 746, 747, 530, -1022, 257, 748, 533, - 534, 535, -1022, 212, 755, 760, -70, -1022, 542, 764, - 765, 549, 767, 552, 553, 768, 773, 556, 558, 778, - 779, 780, 784, 476, -1022, 785, 570, 176, -1022, -1022, - -1022, 788, 786, 789, 790, 792, -1022, -1022, -1022, 575, - 580, 581, -1022, 795, 810, 813, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, -1022, -1022, 599, -1022, -1022, - -1022, -1022, -1022, 8, 600, 601, -1022, -1022, -1022, -1022, - 817, 818, 819, -1022, 605, 383, 821, 820, 609, 319, - -1022, -1022, -1022, 823, 825, 826, 827, 828, -1022, 829, - 830, 831, 832, 613, 614, -1022, -1022, -1022, 835, 834, - -1022, 837, 263, 294, -1022, -1022, -1022, -1022, -1022, 623, - 624, 625, 841, 627, 630, -1022, 837, 633, 844, -1022, - 634, -1022, -1022, 837, 635, 636, 637, 638, 639, 641, - 642, -1022, 643, 644, -1022, 645, 646, 647, -1022, -1022, - 648, -1022, -1022, -1022, -1022, 649, 820, -1022, -1022, 650, - 651, -1022, 652, -1022, -1022, 5, 669, -1022, -1022, 8, - 653, 654, 657, -1022, 855, -1022, -1022, 44, 133, 176, - 159, 256, -1022, -1022, -1022, 578, 578, 868, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, -1022, -1022, 869, 871, 872, - -1022, -1022, -1022, -1022, -1022, -1022, 874, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, 291, 875, 876, 877, 388, - -79, -29, 216, 476, -1022, -1022, 878, 187, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, 879, - -1022, -1022, -1022, -1022, 189, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, 868, -1022, 100, 101, 115, -1022, -1022, - 123, -1022, -1022, -1022, -1022, -1022, -1022, -1022, 883, 884, - 885, 886, 887, 888, 889, 890, 891, 892, -1022, 893, - -1022, -1022, -1022, -1022, -1022, 143, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, 169, -1022, - 894, 895, -1022, -1022, 896, 898, -1022, -1022, 897, 901, - -1022, -1022, 899, 903, -1022, -1022, 902, 904, -1022, -1022, - -1022, -1022, -1022, -1022, 35, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, 109, -1022, -1022, 905, 906, -1022, -1022, 907, - 909, -1022, 910, 911, 912, 913, 914, 915, 182, -1022, - -1022, -1022, -1022, -1022, -1022, -1022, 916, 917, 918, -1022, - 220, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, 221, -1022, -1022, -1022, 919, -1022, 920, -1022, - -1022, -1022, 222, -1022, -1022, -1022, -1022, -1022, 229, -1022, - 155, -1022, 921, 922, 923, 924, -1022, 239, -1022, -1022, - -1022, -1022, -1022, 690, -1022, 925, 926, -1022, -1022, -1022, - -1022, 927, 928, -1022, -1022, -1022, 929, 932, 256, -1022, - 933, 934, 935, 936, 720, 707, 721, 722, 723, 725, - 726, 727, 728, 729, 939, 730, 948, 949, 950, 951, - 578, -1022, -1022, 578, -1022, 868, 332, -1022, 869, 257, - -1022, 871, 212, -1022, 872, 660, -1022, 874, 291, -1022, - 253, 875, -1022, 201, -1022, 876, -113, -1022, 877, 735, - 736, 737, 739, 740, 742, 388, -1022, 741, 745, 750, - -79, -1022, 963, 970, -29, -1022, 752, 978, 771, 981, - 216, -1022, -1022, -40, 878, -1022, 781, 800, 804, 808, - 187, -1022, -1022, 995, 999, -24, -1022, 879, 1003, -1022, - -1022, 812, 814, -1022, 88, 824, 838, 845, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, 234, -1022, - 847, 850, 900, 908, -1022, 243, -1022, 247, -1022, 1029, - -1022, 1033, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, - 249, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, 1041, -1022, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, -1022, -1022, 1039, 1054, -1022, - -1022, -1022, -1022, -1022, -1022, 1107, -1022, 260, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, - 930, 931, -1022, -1022, 938, -1022, 44, -1022, -1022, 1113, - -1022, -1022, -1022, -1022, -1022, 268, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, -1022, -1022, 940, 269, -1022, - 837, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, 660, -1022, 1114, 1118, 942, -1022, 253, -1022, - -1022, -1022, -1022, -1022, -1022, 1119, 941, 1120, -40, -1022, - -1022, -1022, -1022, -1022, 946, 947, -1022, -1022, 1121, -1022, - 952, -1022, -1022, -1022, 1122, -1022, -1022, 170, -1022, 105, - 1122, -1022, -1022, 1123, 1126, 1127, -1022, 270, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, 1128, 945, 953, 954, 1129, - 105, -1022, 956, -1022, -1022, -1022, 957, -1022, -1022, -1022 + 423, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, 37, 31, 24, 60, 64, 82, + 94, 174, 182, 216, 219, 226, 228, 271, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, 31, -176, 181, 130, 154, 273, + -39, 535, -15, 550, 350, -114, 634, 103, -1025, 75, + 155, 268, 289, 297, -1025, 54, -1025, -1025, -1025, -1025, + 305, 321, 330, -1025, -1025, -1025, 331, -1025, -1025, -1025, + 334, 346, 348, 359, 369, 375, 378, 381, 382, 391, + 392, -1025, 401, 402, 403, 429, 430, -1025, -1025, -1025, + 438, 439, 441, 460, -1025, -1025, -1025, 464, -1025, -1025, + -1025, -1025, -1025, -1025, 466, 469, 470, -1025, -1025, -1025, + -1025, -1025, 471, -1025, -1025, -1025, -1025, -1025, -1025, 473, + 475, 477, -1025, -1025, 478, -1025, 62, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, 480, 481, + 482, 484, -1025, 65, -1025, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, + 485, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, 72, -1025, -1025, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -1025, 487, -1025, -1025, -1025, + -1025, 83, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, 341, + 367, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, 406, -1025, -1025, 488, -1025, -1025, -1025, + 489, -1025, -1025, 491, 494, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, 497, 499, + 500, -1025, -1025, -1025, -1025, 503, 504, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, + 91, -1025, -1025, -1025, 511, -1025, -1025, 513, -1025, 516, + 517, -1025, -1025, 519, 521, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, 110, -1025, -1025, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, + 523, 120, -1025, -1025, -1025, -1025, 31, 31, -1025, 163, + 524, -1025, -1025, 525, 526, 527, 309, 312, 314, 536, + 537, 538, 317, 539, 540, 545, 332, 333, 335, 337, + 340, 327, 343, 347, 349, 342, 352, 548, 353, 356, + 339, 355, 357, 552, 582, 587, 372, 383, 370, 385, + 588, 595, 600, 388, 607, 608, 613, 615, 616, 617, + 398, 399, 400, 621, 622, 623, 624, 625, 422, 641, + 643, 646, 652, 653, 654, 435, 436, 440, 658, 665, + -1025, 130, -1025, 666, 667, 668, 455, 458, 461, 462, + 154, -1025, 681, 682, 683, 684, 691, 692, 476, 693, + 695, 696, 273, -1025, 697, 483, -39, -1025, 698, 703, + 704, 705, 707, 708, 709, 710, -1025, 535, -1025, 711, + 712, 495, 714, 715, 731, 512, -1025, 550, 733, 514, + 528, 529, -1025, 350, 753, 754, 23, -1025, 541, 755, + 760, 546, 765, 551, 555, 766, 768, 557, 558, 770, + 775, 779, 780, 634, -1025, 784, 567, 103, -1025, -1025, + -1025, 787, 785, 786, 788, 789, -1025, -1025, -1025, 576, + 577, 578, -1025, 793, 794, 797, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -1025, -1025, 596, -1025, -1025, + -1025, -1025, -1025, -136, 597, 598, -1025, -1025, -1025, -1025, + 815, 816, 817, -1025, 604, 345, 821, 820, 609, 336, + -1025, -1025, -1025, 823, 824, 826, 827, 828, -1025, 829, + 830, 831, 832, 612, 619, -1025, -1025, -1025, 836, 835, + -1025, 838, 157, 255, -1025, -1025, -1025, -1025, -1025, 626, + 629, 630, 839, 631, 632, -1025, 838, 633, 849, -1025, + 636, -1025, -1025, 838, 637, 638, 639, 640, 642, 644, + 645, -1025, 647, 648, -1025, 649, 650, 651, -1025, -1025, + 655, -1025, -1025, -1025, -1025, 656, 820, -1025, -1025, 657, + 660, -1025, 661, -1025, -1025, 5, 662, -1025, -1025, -136, + 663, 664, 669, -1025, 840, -1025, -1025, 31, 130, 103, + 154, 258, -1025, -1025, -1025, 376, 376, 855, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -1025, -1025, 857, 860, 866, + -1025, -1025, -1025, -1025, -1025, -1025, 867, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -35, 868, 872, 876, 162, + 105, 77, 115, 634, -1025, -1025, 879, -95, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, 880, + -1025, -1025, -1025, -1025, 148, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, 855, -1025, 126, 128, 143, -1025, -1025, + 144, -1025, -1025, -1025, -1025, -1025, -1025, -1025, 884, 885, + 887, 888, 889, 890, 891, 892, 893, 894, -1025, 895, + 896, -1025, -1025, -1025, -1025, -1025, 184, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, + 187, -1025, 897, 898, -1025, -1025, 899, 901, -1025, -1025, + 900, 904, -1025, -1025, 902, 906, -1025, -1025, 905, 907, + -1025, -1025, -1025, -1025, -1025, -1025, 38, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, 87, -1025, -1025, 908, 909, -1025, + -1025, 910, 912, -1025, 913, 914, 915, 916, 917, 918, + 231, -1025, -1025, -1025, -1025, -1025, -1025, -1025, 919, 920, + 921, -1025, 265, -1025, -1025, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, 266, -1025, -1025, -1025, 922, -1025, + 923, -1025, -1025, -1025, 276, -1025, -1025, -1025, -1025, -1025, + 293, -1025, 127, -1025, 924, 925, 926, 927, -1025, 329, + -1025, -1025, -1025, -1025, -1025, 713, -1025, 929, 930, -1025, + -1025, -1025, -1025, 928, 931, -1025, -1025, -1025, 934, 935, + 258, -1025, 936, 937, 938, 939, 680, 610, 722, 689, + 723, 724, 725, 726, 727, 728, 947, 729, 730, 950, + 951, 952, 953, 376, -1025, -1025, 376, -1025, 855, 273, + -1025, 857, 550, -1025, 860, 350, -1025, 866, 659, -1025, + 867, -35, -1025, 195, 868, -1025, 535, -1025, 872, -114, + -1025, 876, 736, 737, 738, 739, 741, 742, 162, -1025, + 743, 744, 747, 105, -1025, 966, 970, 77, -1025, 761, + 973, 756, 984, 115, -1025, -1025, 214, 879, -1025, 771, + 781, 783, 802, -95, -1025, -1025, 998, 1007, -39, -1025, + 880, 1026, -1025, -1025, 813, 814, -1025, 208, 819, 847, + 852, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, + -1025, -4, -1025, -1025, 911, 932, 933, 941, -1025, 364, + -1025, 366, -1025, 1029, -1025, 1036, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, 368, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -1025, -1025, 1043, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, + -1025, 1040, 1047, -1025, -1025, -1025, -1025, -1025, -1025, 1052, + -1025, 380, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, 942, 943, -1025, -1025, 944, -1025, + 31, -1025, -1025, 1057, -1025, -1025, -1025, -1025, -1025, 394, + -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, + -1025, 948, 395, -1025, 838, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -1025, 659, -1025, 1066, 1114, + 903, -1025, 195, -1025, -1025, -1025, -1025, -1025, -1025, 1116, + 946, 1117, 214, -1025, -1025, -1025, -1025, -1025, 949, 954, + -1025, -1025, 1118, -1025, 955, -1025, -1025, -1025, 1119, -1025, + -1025, 151, -1025, -16, 1119, -1025, -1025, 1121, 1124, 1125, + -1025, 410, -1025, -1025, -1025, -1025, -1025, -1025, -1025, 1126, + 956, 957, 959, 1127, -16, -1025, 961, -1025, -1025, -1025, + 962, -1025, -1025, -1025 }; const short @@ -5288,18 +5299,18 @@ namespace isc { namespace dhcp { 20, 22, 24, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 44, 36, 32, 31, 28, 29, 30, 35, 3, 33, 34, - 59, 5, 65, 7, 206, 9, 384, 11, 602, 13, - 631, 15, 520, 17, 529, 19, 568, 21, 346, 23, - 749, 25, 800, 27, 46, 39, 0, 0, 0, 0, - 0, 633, 0, 531, 570, 0, 0, 0, 48, 0, - 47, 0, 0, 40, 61, 0, 63, 798, 191, 224, - 0, 0, 0, 653, 655, 657, 0, 222, 235, 237, + 59, 5, 65, 7, 206, 9, 386, 11, 604, 13, + 633, 15, 522, 17, 531, 19, 570, 21, 348, 23, + 751, 25, 802, 27, 46, 39, 0, 0, 0, 0, + 0, 635, 0, 533, 572, 0, 0, 0, 48, 0, + 47, 0, 0, 40, 61, 0, 63, 800, 191, 224, + 0, 0, 0, 655, 657, 659, 0, 222, 235, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149, 0, 0, 0, 0, 0, 160, 167, 169, - 0, 0, 0, 0, 375, 518, 559, 0, 152, 173, - 462, 618, 620, 455, 0, 0, 0, 308, 681, 622, - 337, 358, 0, 323, 716, 730, 747, 180, 182, 0, - 0, 0, 810, 852, 0, 137, 0, 67, 70, 71, + 0, 0, 0, 0, 377, 520, 561, 0, 152, 173, + 464, 620, 622, 457, 0, 0, 0, 310, 683, 624, + 339, 360, 0, 325, 718, 732, 749, 180, 182, 0, + 0, 0, 812, 854, 0, 137, 0, 67, 70, 71, 72, 73, 74, 108, 109, 110, 111, 112, 75, 103, 134, 135, 92, 93, 94, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 114, 115, 126, 127, 128, @@ -5308,26 +5319,26 @@ namespace isc { namespace dhcp { 85, 98, 99, 101, 95, 96, 97, 83, 88, 89, 90, 91, 102, 113, 133, 208, 210, 214, 0, 0, 0, 0, 205, 0, 193, 196, 197, 198, 199, 200, - 201, 202, 203, 204, 440, 442, 444, 593, 438, 446, - 0, 450, 448, 677, 437, 389, 390, 391, 392, 393, - 417, 418, 419, 420, 421, 435, 407, 408, 422, 423, - 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, - 434, 436, 0, 386, 396, 412, 413, 414, 397, 399, - 400, 403, 404, 405, 402, 398, 394, 395, 415, 416, - 401, 409, 410, 411, 406, 615, 0, 614, 610, 611, - 609, 0, 604, 607, 608, 612, 613, 675, 663, 665, - 669, 667, 673, 671, 659, 652, 646, 650, 651, 0, - 634, 635, 647, 648, 649, 643, 638, 644, 640, 641, - 642, 645, 639, 0, 549, 283, 0, 553, 551, 556, - 0, 545, 546, 0, 532, 533, 536, 548, 537, 538, - 539, 555, 540, 541, 542, 543, 544, 586, 0, 0, - 0, 584, 585, 588, 589, 0, 571, 572, 575, 576, - 577, 578, 579, 580, 581, 582, 583, 354, 356, 351, - 0, 348, 352, 353, 0, 786, 773, 0, 776, 0, - 0, 780, 784, 0, 0, 790, 792, 794, 796, 771, - 769, 770, 0, 751, 754, 755, 756, 757, 758, 759, - 760, 761, 766, 762, 763, 764, 765, 767, 768, 807, - 0, 0, 802, 805, 806, 45, 50, 0, 37, 43, + 201, 202, 203, 204, 442, 444, 446, 595, 440, 448, + 0, 452, 450, 679, 439, 391, 392, 393, 394, 395, + 419, 420, 421, 422, 423, 437, 409, 410, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 438, 0, 388, 398, 414, 415, 416, 399, 401, + 402, 405, 406, 407, 404, 400, 396, 397, 417, 418, + 403, 411, 412, 413, 408, 617, 0, 616, 612, 613, + 611, 0, 606, 609, 610, 614, 615, 677, 665, 667, + 671, 669, 675, 673, 661, 654, 648, 652, 653, 0, + 636, 637, 649, 650, 651, 645, 640, 646, 642, 643, + 644, 647, 641, 0, 551, 284, 0, 555, 553, 558, + 0, 547, 548, 0, 534, 535, 538, 550, 539, 540, + 541, 557, 542, 543, 544, 545, 546, 588, 0, 0, + 0, 586, 587, 590, 591, 0, 573, 574, 577, 578, + 579, 580, 581, 582, 583, 584, 585, 356, 358, 353, + 0, 350, 354, 355, 0, 788, 775, 0, 778, 0, + 0, 782, 786, 0, 0, 792, 794, 796, 798, 773, + 771, 772, 0, 753, 756, 757, 758, 759, 760, 761, + 762, 763, 768, 764, 765, 766, 767, 769, 770, 809, + 0, 0, 804, 807, 808, 45, 50, 0, 37, 43, 0, 64, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5337,136 +5348,137 @@ namespace isc { namespace dhcp { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 69, 66, 0, 0, 0, 0, 0, 0, 0, 195, 207, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 388, 385, 0, 0, 606, 603, 0, 0, - 0, 0, 0, 0, 0, 0, 632, 637, 521, 0, - 0, 0, 0, 0, 0, 0, 530, 535, 0, 0, - 0, 0, 569, 574, 0, 0, 350, 347, 0, 0, + 0, 0, 390, 387, 0, 0, 608, 605, 0, 0, + 0, 0, 0, 0, 0, 0, 634, 639, 523, 0, + 0, 0, 0, 0, 0, 0, 532, 537, 0, 0, + 0, 0, 571, 576, 0, 0, 352, 349, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 753, 750, 0, 0, 804, 801, 49, + 0, 0, 0, 755, 752, 0, 0, 806, 803, 49, 41, 0, 0, 0, 0, 0, 154, 155, 156, 0, 0, 0, 190, 0, 0, 0, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 0, 185, 186, 157, 158, 159, 0, 0, 0, 171, 172, 179, 184, 0, 0, 0, 151, 0, 0, 0, 0, 0, 0, - 452, 453, 454, 0, 0, 0, 0, 0, 715, 0, + 454, 455, 456, 0, 0, 0, 0, 0, 717, 0, 0, 0, 0, 0, 0, 187, 188, 189, 0, 0, 68, 0, 0, 0, 218, 219, 220, 221, 194, 0, - 0, 0, 0, 0, 0, 461, 0, 0, 0, 387, - 0, 617, 605, 0, 0, 0, 0, 0, 0, 0, - 0, 636, 0, 0, 547, 0, 0, 0, 558, 534, - 0, 590, 591, 592, 573, 0, 0, 349, 772, 0, - 0, 775, 0, 778, 779, 0, 0, 788, 789, 0, - 0, 0, 0, 752, 0, 809, 803, 0, 0, 0, - 0, 0, 654, 656, 658, 0, 0, 239, 150, 162, - 163, 164, 165, 166, 161, 168, 170, 377, 522, 561, - 153, 175, 176, 177, 178, 174, 464, 38, 619, 621, - 457, 458, 459, 460, 456, 0, 0, 624, 339, 0, + 0, 0, 0, 0, 0, 463, 0, 0, 0, 389, + 0, 619, 607, 0, 0, 0, 0, 0, 0, 0, + 0, 638, 0, 0, 549, 0, 0, 0, 560, 536, + 0, 592, 593, 594, 575, 0, 0, 351, 774, 0, + 0, 777, 0, 780, 781, 0, 0, 790, 791, 0, + 0, 0, 0, 754, 0, 811, 805, 0, 0, 0, + 0, 0, 656, 658, 660, 0, 0, 239, 150, 162, + 163, 164, 165, 166, 161, 168, 170, 379, 524, 563, + 153, 175, 176, 177, 178, 174, 466, 38, 621, 623, + 459, 460, 461, 462, 458, 0, 0, 626, 341, 0, 0, 0, 0, 0, 181, 183, 0, 0, 51, 209, - 212, 213, 211, 216, 217, 215, 441, 443, 445, 595, - 439, 447, 451, 449, 0, 616, 676, 664, 666, 670, - 668, 674, 672, 660, 550, 284, 554, 552, 557, 587, - 355, 357, 787, 774, 777, 782, 783, 781, 785, 791, - 793, 795, 797, 239, 42, 0, 0, 0, 231, 233, - 0, 226, 229, 230, 271, 276, 278, 280, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 294, 0, - 300, 302, 304, 306, 270, 0, 246, 249, 250, 251, - 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, - 262, 263, 264, 265, 266, 267, 268, 269, 0, 244, - 0, 240, 241, 382, 0, 378, 379, 527, 0, 523, - 524, 566, 0, 562, 563, 469, 0, 465, 466, 318, - 319, 320, 321, 322, 0, 310, 313, 314, 315, 316, - 317, 686, 0, 683, 629, 0, 625, 626, 344, 0, - 340, 341, 0, 0, 0, 0, 0, 0, 0, 360, - 363, 364, 365, 366, 367, 368, 0, 0, 0, 333, - 0, 325, 328, 329, 330, 331, 332, 726, 728, 725, - 723, 724, 0, 718, 721, 722, 0, 742, 0, 745, - 738, 739, 0, 732, 735, 736, 737, 740, 0, 815, - 0, 812, 0, 0, 0, 0, 861, 0, 854, 857, - 858, 859, 860, 53, 600, 0, 596, 597, 661, 679, - 680, 0, 0, 62, 799, 192, 0, 0, 228, 225, + 212, 213, 211, 216, 217, 215, 443, 445, 447, 597, + 441, 449, 453, 451, 0, 618, 678, 666, 668, 672, + 670, 676, 674, 662, 552, 285, 556, 554, 559, 589, + 357, 359, 789, 776, 779, 784, 785, 783, 787, 793, + 795, 797, 799, 239, 42, 0, 0, 0, 231, 233, + 0, 226, 229, 230, 272, 277, 279, 281, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 295, 0, + 0, 302, 304, 306, 308, 271, 0, 246, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 0, 244, 0, 240, 241, 384, 0, 380, 381, 529, + 0, 525, 526, 568, 0, 564, 565, 471, 0, 467, + 468, 320, 321, 322, 323, 324, 0, 312, 315, 316, + 317, 318, 319, 688, 0, 685, 631, 0, 627, 628, + 346, 0, 342, 343, 0, 0, 0, 0, 0, 0, + 0, 362, 365, 366, 367, 368, 369, 370, 0, 0, + 0, 335, 0, 327, 330, 331, 332, 333, 334, 728, + 730, 727, 725, 726, 0, 720, 723, 724, 0, 744, + 0, 747, 740, 741, 0, 734, 737, 738, 739, 742, + 0, 817, 0, 814, 0, 0, 0, 0, 863, 0, + 856, 859, 860, 861, 862, 53, 602, 0, 598, 599, + 663, 681, 682, 0, 0, 62, 801, 192, 0, 0, + 228, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 248, 223, 236, 0, 238, 243, 0, 376, 381, 531, - 519, 526, 570, 560, 565, 0, 463, 468, 312, 309, - 688, 685, 682, 633, 623, 628, 0, 338, 343, 0, - 0, 0, 0, 0, 0, 362, 359, 0, 0, 0, - 327, 324, 0, 0, 720, 717, 0, 0, 0, 0, - 734, 731, 748, 0, 814, 811, 0, 0, 0, 0, - 856, 853, 55, 0, 54, 0, 594, 599, 0, 678, - 808, 0, 0, 227, 0, 0, 0, 0, 282, 285, - 286, 287, 288, 289, 290, 291, 292, 293, 0, 299, - 0, 0, 0, 0, 247, 0, 242, 0, 380, 0, - 525, 0, 564, 517, 492, 493, 494, 477, 478, 497, - 498, 499, 500, 501, 515, 480, 481, 502, 503, 504, - 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, - 516, 474, 475, 476, 490, 491, 487, 488, 489, 486, - 0, 471, 479, 495, 496, 482, 483, 484, 485, 467, - 311, 710, 712, 0, 704, 705, 706, 707, 708, 709, - 697, 698, 702, 703, 699, 700, 701, 0, 689, 690, - 693, 694, 695, 696, 684, 0, 627, 0, 342, 369, - 370, 371, 372, 373, 374, 361, 334, 335, 336, 326, - 0, 0, 719, 741, 0, 744, 0, 733, 830, 0, - 828, 826, 820, 824, 825, 0, 817, 822, 823, 821, - 813, 862, 863, 864, 865, 855, 52, 57, 0, 598, - 0, 232, 234, 273, 274, 275, 272, 277, 279, 281, - 296, 297, 298, 295, 301, 303, 305, 307, 245, 383, - 528, 567, 473, 470, 0, 0, 0, 687, 692, 630, - 345, 727, 729, 743, 746, 0, 0, 0, 819, 816, - 56, 601, 662, 472, 0, 0, 714, 691, 0, 827, - 0, 818, 711, 713, 0, 829, 835, 0, 832, 0, - 834, 831, 845, 0, 0, 0, 850, 0, 837, 840, - 841, 842, 843, 844, 833, 0, 0, 0, 0, 0, - 839, 836, 0, 847, 848, 849, 0, 838, 846, 851 + 0, 0, 0, 248, 223, 236, 0, 238, 243, 0, + 378, 383, 533, 521, 528, 572, 562, 567, 0, 465, + 470, 314, 311, 690, 687, 684, 635, 625, 630, 0, + 340, 345, 0, 0, 0, 0, 0, 0, 364, 361, + 0, 0, 0, 329, 326, 0, 0, 722, 719, 0, + 0, 0, 0, 736, 733, 750, 0, 816, 813, 0, + 0, 0, 0, 858, 855, 55, 0, 54, 0, 596, + 601, 0, 680, 810, 0, 0, 227, 0, 0, 0, + 0, 283, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 0, 300, 301, 0, 0, 0, 0, 247, 0, + 242, 0, 382, 0, 527, 0, 566, 519, 494, 495, + 496, 479, 480, 499, 500, 501, 502, 503, 517, 482, + 483, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 515, 516, 518, 476, 477, 478, 492, 493, + 489, 490, 491, 488, 0, 473, 481, 497, 498, 484, + 485, 486, 487, 469, 313, 712, 714, 0, 706, 707, + 708, 709, 710, 711, 699, 700, 704, 705, 701, 702, + 703, 0, 691, 692, 695, 696, 697, 698, 686, 0, + 629, 0, 344, 371, 372, 373, 374, 375, 376, 363, + 336, 337, 338, 328, 0, 0, 721, 743, 0, 746, + 0, 735, 832, 0, 830, 828, 822, 826, 827, 0, + 819, 824, 825, 823, 815, 864, 865, 866, 867, 857, + 52, 57, 0, 600, 0, 232, 234, 274, 275, 276, + 273, 278, 280, 282, 297, 298, 299, 296, 303, 305, + 307, 309, 245, 385, 530, 569, 475, 472, 0, 0, + 0, 689, 694, 632, 347, 729, 731, 745, 748, 0, + 0, 0, 821, 818, 56, 603, 664, 474, 0, 0, + 716, 693, 0, 829, 0, 820, 713, 715, 0, 831, + 837, 0, 834, 0, 836, 833, 847, 0, 0, 0, + 852, 0, 839, 842, 843, 844, 845, 846, 835, 0, + 0, 0, 0, 0, 841, 838, 0, 849, 850, 851, + 0, 840, 848, 853 }; const short Dhcp4Parser::yypgoto_[] = { - -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, -59, -1022, -593, -1022, 193, - -1022, -1022, -1022, -1022, -1022, -1022, -643, -1022, -1022, -1022, - -67, -1022, -1022, -1022, -1022, -1022, -1022, -1022, 204, 626, + -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -59, -1025, -619, -1025, 427, + -1025, -1025, -1025, -1025, -1025, -1025, -650, -1025, -1025, -1025, + -67, -1025, -1025, -1025, -1025, -1025, -1025, -1025, 204, 627, -30, -26, 26, -54, -37, -27, 0, 14, 16, 45, - -1022, -1022, -1022, -1022, 48, -1022, -1022, 50, 51, 52, - 53, 55, 56, -1022, 415, 58, -1022, 63, -1022, 66, - 68, 69, -1022, -1022, 70, 71, -1022, 73, -1022, 74, - -1022, -1022, -1022, -1022, -1022, 33, -1022, -1022, 395, 615, - -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, 138, - -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, 315, -1022, - 114, -1022, -724, 120, -1022, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, -45, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, - 103, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, 83, - -1022, -1022, -1022, -1022, -1022, -1022, -1022, 94, -1022, -1022, - -1022, 99, 582, -1022, -1022, -1022, -1022, -1022, -1022, -1022, - 89, -1022, -1022, -1022, -1022, -1022, -1022, -1021, -1022, -1022, - -1022, 118, -1022, -1022, -1022, 121, 617, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, -1019, -1022, 78, -1022, 79, - -1022, 76, 81, 84, 86, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, 116, -1022, -1022, -110, -62, -1022, -1022, -1022, - -1022, -1022, 124, -1022, -1022, -1022, 125, -1022, 602, -1022, - -63, -1022, -1022, -1022, -1022, -1022, -44, -1022, -1022, -1022, - -1022, -1022, -23, -1022, -1022, -1022, 122, -1022, -1022, -1022, - 137, -1022, 598, -1022, -1022, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, 92, -1022, -1022, -1022, 95, - 661, -1022, -1022, -1022, -49, -1022, -10, -1022, -56, -1022, - -1022, -1022, 126, -1022, -1022, -1022, 127, -1022, 663, 3, - -1022, 13, -1022, 29, -1022, 389, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, -1018, -1022, -1022, -1022, -1022, -1022, 132, - -1022, -1022, -1022, -90, -1022, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, 117, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, 112, -1022, -1022, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, 411, 604, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, 461, 606, -1022, -1022, -1022, -1022, - -1022, -1022, 111, -1022, -1022, -92, -1022, -1022, -1022, -1022, - -1022, -1022, -112, -1022, -1022, -131, -1022, -1022, -1022, -1022, - -1022, -1022, -1022, -1022, -1022, -1022, 119, -1022, -1022, -1022, - -1022 + -1025, -1025, -1025, -1025, 48, -1025, -1025, 50, 51, 52, + 53, 55, 56, -1025, 415, 58, -1025, 63, -1025, 66, + 68, 69, -1025, -1025, 70, 71, -1025, 73, -1025, 74, + -1025, -1025, -1025, -1025, -1025, 33, -1025, -1025, 405, 620, + -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, 136, + -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, 316, -1025, + 109, -1025, -724, 118, -1025, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, -45, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, + -1025, 101, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, + 80, -1025, -1025, -1025, -1025, -1025, -1025, -1025, 93, -1025, + -1025, -1025, 96, 580, -1025, -1025, -1025, -1025, -1025, -1025, + -1025, 89, -1025, -1025, -1025, -1025, -1025, -1025, -1024, -1025, + -1025, -1025, 117, -1025, -1025, -1025, 121, 628, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -1025, -1022, -1025, 78, -1025, + 79, -1025, 76, 81, 84, 86, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, 111, -1025, -1025, -117, -62, -1025, -1025, + -1025, -1025, -1025, 122, -1025, -1025, -1025, 123, -1025, 601, + -1025, -63, -1025, -1025, -1025, -1025, -1025, -44, -1025, -1025, + -1025, -1025, -1025, -23, -1025, -1025, -1025, 134, -1025, -1025, + -1025, 124, -1025, 589, -1025, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -1025, 67, -1025, -1025, -1025, + 85, 670, -1025, -1025, -1025, -49, -1025, -10, -1025, -56, + -1025, -1025, -1025, 129, -1025, -1025, -1025, 132, -1025, 671, + 3, -1025, 13, -1025, 29, -1025, 390, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, -1021, -1025, -1025, -1025, -1025, -1025, + 141, -1025, -1025, -1025, -100, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, 107, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, 113, -1025, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, 414, 605, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, 463, 602, -1025, -1025, -1025, + -1025, -1025, -1025, 114, -1025, -1025, -92, -1025, -1025, -1025, + -1025, -1025, -1025, -111, -1025, -1025, -130, -1025, -1025, -1025, + -1025, -1025, -1025, -1025, -1025, -1025, -1025, 112, -1025, -1025, + -1025, -1025 }; const short @@ -5474,8 +5486,8 @@ namespace isc { namespace dhcp { { 0, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 36, 37, 38, 65, 758, - 82, 83, 39, 64, 79, 80, 779, 983, 1083, 1084, - 854, 41, 66, 85, 440, 86, 43, 67, 156, 157, + 82, 83, 39, 64, 79, 80, 779, 985, 1086, 1087, + 855, 41, 66, 85, 440, 86, 43, 67, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 467, 170, 171, 484, 172, 173, 174, 175, 176, 177, 178, 473, 744, 179, 474, 180, 475, 181, @@ -5483,550 +5495,553 @@ namespace isc { namespace dhcp { 188, 189, 190, 191, 192, 193, 194, 444, 233, 234, 45, 68, 235, 513, 236, 514, 782, 237, 515, 785, 238, 239, 240, 241, 195, 453, 196, 445, 830, 831, - 832, 996, 833, 997, 197, 454, 198, 455, 880, 881, - 882, 1023, 855, 856, 857, 1000, 1246, 858, 1001, 859, - 1002, 860, 1003, 861, 862, 550, 863, 864, 865, 866, - 867, 868, 869, 870, 871, 872, 1014, 1253, 873, 874, - 1016, 875, 1017, 876, 1018, 877, 1019, 199, 493, 904, - 905, 906, 907, 908, 909, 910, 200, 499, 940, 941, - 942, 943, 944, 201, 496, 919, 920, 921, 1046, 59, - 75, 390, 391, 392, 564, 393, 565, 202, 497, 928, - 929, 930, 931, 932, 933, 934, 935, 203, 480, 884, - 885, 886, 1026, 47, 69, 282, 283, 284, 526, 285, - 522, 286, 523, 287, 524, 288, 527, 289, 530, 290, - 529, 204, 205, 206, 207, 489, 764, 295, 208, 486, - 896, 897, 898, 1035, 1160, 1161, 209, 481, 53, 72, - 888, 889, 890, 1029, 55, 73, 353, 354, 355, 356, - 357, 358, 359, 549, 360, 553, 361, 552, 362, 363, - 554, 364, 210, 482, 892, 893, 894, 1032, 57, 74, - 375, 376, 377, 378, 379, 558, 380, 381, 382, 383, - 384, 297, 525, 985, 986, 987, 1085, 49, 70, 311, - 312, 313, 534, 314, 211, 487, 212, 488, 213, 495, - 915, 916, 917, 1043, 51, 71, 329, 330, 331, 214, - 449, 215, 450, 216, 451, 335, 545, 990, 1088, 336, - 539, 337, 540, 338, 542, 339, 541, 340, 544, 341, - 543, 342, 538, 304, 531, 991, 217, 494, 912, 913, - 1040, 1187, 1188, 1189, 1190, 1191, 1264, 1192, 1265, 1193, - 218, 219, 500, 952, 953, 954, 1062, 955, 1063, 220, - 501, 962, 963, 964, 965, 1067, 966, 967, 1069, 221, - 502, 61, 76, 412, 413, 414, 415, 570, 416, 417, - 572, 418, 419, 420, 575, 817, 421, 576, 422, 569, - 423, 424, 425, 579, 426, 580, 427, 581, 428, 582, - 222, 443, 63, 77, 431, 432, 433, 585, 434, 223, - 508, 970, 971, 1073, 1225, 1226, 1227, 1228, 1277, 1229, - 1275, 1297, 1298, 1299, 1307, 1308, 1309, 1315, 1310, 1311, - 1312, 1313, 1319, 224, 509, 977, 978, 979, 980, 981, - 982 + 832, 998, 833, 999, 197, 454, 198, 455, 882, 883, + 884, 1026, 856, 857, 858, 1002, 1250, 859, 1003, 860, + 1004, 861, 1005, 862, 863, 550, 864, 865, 866, 867, + 868, 869, 870, 871, 872, 873, 1016, 1257, 874, 875, + 876, 1019, 877, 1020, 878, 1021, 879, 1022, 199, 493, + 906, 907, 908, 909, 910, 911, 912, 200, 499, 942, + 943, 944, 945, 946, 201, 496, 921, 922, 923, 1049, + 59, 75, 390, 391, 392, 564, 393, 565, 202, 497, + 930, 931, 932, 933, 934, 935, 936, 937, 203, 480, + 886, 887, 888, 1029, 47, 69, 282, 283, 284, 526, + 285, 522, 286, 523, 287, 524, 288, 527, 289, 530, + 290, 529, 204, 205, 206, 207, 489, 764, 295, 208, + 486, 898, 899, 900, 1038, 1164, 1165, 209, 481, 53, + 72, 890, 891, 892, 1032, 55, 73, 353, 354, 355, + 356, 357, 358, 359, 549, 360, 553, 361, 552, 362, + 363, 554, 364, 210, 482, 894, 895, 896, 1035, 57, + 74, 375, 376, 377, 378, 379, 558, 380, 381, 382, + 383, 384, 297, 525, 987, 988, 989, 1088, 49, 70, + 311, 312, 313, 534, 314, 211, 487, 212, 488, 213, + 495, 917, 918, 919, 1046, 51, 71, 329, 330, 331, + 214, 449, 215, 450, 216, 451, 335, 545, 992, 1091, + 336, 539, 337, 540, 338, 542, 339, 541, 340, 544, + 341, 543, 342, 538, 304, 531, 993, 217, 494, 914, + 915, 1043, 1191, 1192, 1193, 1194, 1195, 1268, 1196, 1269, + 1197, 218, 219, 500, 954, 955, 956, 1065, 957, 1066, + 220, 501, 964, 965, 966, 967, 1070, 968, 969, 1072, + 221, 502, 61, 76, 412, 413, 414, 415, 570, 416, + 417, 572, 418, 419, 420, 575, 817, 421, 576, 422, + 569, 423, 424, 425, 579, 426, 580, 427, 581, 428, + 582, 222, 443, 63, 77, 431, 432, 433, 585, 434, + 223, 508, 972, 973, 1076, 1229, 1230, 1231, 1232, 1281, + 1233, 1279, 1301, 1302, 1303, 1311, 1312, 1313, 1319, 1314, + 1315, 1316, 1317, 1323, 224, 509, 979, 980, 981, 982, + 983, 984 }; const short Dhcp4Parser::yytable_[] = { 155, 232, 254, 307, 325, 78, 351, 371, 389, 409, - 343, 373, 878, 300, 1152, 258, 1153, 1168, 28, 242, - 298, 315, 327, 815, 365, 385, 441, 410, 352, 372, - 374, 442, 259, 792, 387, 388, 131, 132, 1038, 255, - 796, 1039, 260, 256, 757, 511, 296, 310, 326, 29, - 512, 30, 520, 31, 40, 345, 81, 521, 243, 299, - 316, 328, 532, 366, 386, 125, 411, 533, 536, 261, - 126, 42, 301, 537, 332, 131, 132, 387, 388, 936, - 937, 938, 302, 262, 333, 263, 131, 132, 566, 44, - 305, 131, 132, 567, 583, 257, 587, 46, 303, 584, - 334, 588, 281, 511, 587, 48, 251, 154, 993, 994, - 252, 306, 1041, 757, 264, 1042, 84, 265, 520, 266, - 267, 268, 269, 995, 270, 271, 998, 272, 1243, 1244, - 1245, 999, 273, 947, 948, 274, 50, 275, 276, 277, - 278, 154, 279, 280, 87, 291, 1020, 88, 308, 309, - 292, 1021, 52, 293, 1218, 294, 1219, 1220, 1074, 89, - 54, 1075, 90, 91, 92, 93, 94, 95, 96, 97, - 98, 99, 1020, 1300, 225, 226, 1301, 1022, 227, 56, - 154, 228, 229, 230, 231, 1055, 58, 816, 429, 430, - 1056, 154, 739, 740, 741, 742, 154, 60, 100, 101, - 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 1060, 1064, 1070, 125, 126, 1061, 1065, - 1071, 743, 583, 93, 94, 95, 435, 1072, 127, 128, - 129, 1152, 1080, 1153, 1168, 130, 1020, 1081, 131, 132, - 532, 1258, 1262, 133, 436, 1259, 437, 1263, 134, 135, - 136, 137, 138, 566, 32, 33, 34, 35, 1270, 139, - 438, 1278, 536, 1320, 131, 132, 1279, 1281, 1321, 140, - 780, 781, 141, 828, 829, 93, 94, 95, 96, 142, - 143, 1250, 1251, 1252, 144, 126, 344, 145, 546, 1115, - 1302, 146, 62, 1303, 1304, 1305, 1306, 345, 367, 346, - 347, 368, 369, 370, 783, 784, 131, 132, 100, 101, - 102, 147, 148, 149, 150, 151, 152, 131, 132, 439, - 317, 131, 132, 324, 988, 153, 548, 446, 318, 319, - 320, 321, 322, 323, 447, 324, 125, 126, 345, 448, - 452, 456, 345, 154, 346, 347, 457, 458, 459, 348, - 349, 350, 91, 92, 93, 94, 95, 96, 131, 132, - 460, 461, 131, 132, 462, 463, 464, 589, 590, 154, - 465, 956, 957, 958, 1171, 1172, 1173, 556, 466, 468, - 972, 973, 974, 975, 469, 470, 471, 100, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 154, 472, 476, - 477, 114, 115, 116, 117, 118, 119, 120, 121, 122, - 123, 154, 244, 245, 246, 478, 126, 479, 899, 900, - 901, 902, 154, 903, 483, 490, 959, 491, 128, 129, - 760, 761, 762, 763, 155, 247, 492, 131, 132, 248, - 249, 250, 133, 232, 498, 505, 506, 134, 135, 136, - 507, 510, 251, 516, 517, 254, 252, 518, 139, 307, - 519, 242, 528, 154, 535, 253, 300, 154, 258, 551, - 325, 547, 557, 298, 555, 559, 560, 315, 561, 563, - 351, 751, 752, 753, 754, 259, 371, 562, 327, 568, - 373, 571, 255, 573, 574, 260, 256, 577, 365, 296, - 243, 578, 352, 310, 385, 586, 409, 591, 372, 374, - 147, 148, 299, 592, 326, 593, 316, 594, 595, 596, - 597, 598, 261, 599, 410, 301, 600, 328, 922, 923, - 924, 925, 926, 927, 601, 302, 262, 366, 263, 603, - 332, 602, 154, 386, 604, 605, 606, 607, 257, 608, - 333, 303, 609, 610, 617, 281, 611, 620, 623, 624, - 612, 613, 614, 411, 621, 625, 334, 264, 615, 616, - 265, 618, 266, 267, 268, 269, 619, 270, 271, 630, - 272, 131, 132, 631, 632, 273, 622, 1282, 274, 628, - 275, 276, 277, 278, 626, 279, 280, 634, 291, 627, - 629, 635, 636, 292, 308, 309, 293, 834, 294, 633, - 637, 835, 836, 837, 838, 839, 840, 841, 842, 843, - 844, 845, 846, 847, 848, 638, 639, 640, 849, 850, - 851, 852, 853, 641, 643, 394, 395, 396, 397, 398, - 399, 400, 401, 402, 403, 404, 405, 406, 642, 644, - 645, 155, 646, 232, 407, 408, 647, 648, 824, 649, - 650, 651, 652, 345, 653, 654, 655, 656, 657, 658, - 659, 242, 661, 662, 663, 664, 666, 665, 667, 669, - 91, 92, 93, 94, 95, 96, 154, 670, 671, 672, - 673, 674, 676, 939, 949, 677, 409, 678, 675, 680, - 976, 681, 683, 684, 685, 686, 687, 688, 689, 690, - 243, 945, 950, 960, 410, 100, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 692, 693, 694, 695, 114, + 343, 373, 880, 300, 1156, 258, 1157, 1172, 757, 242, + 298, 315, 327, 815, 365, 385, 792, 410, 352, 372, + 374, 40, 259, 796, 387, 388, 29, 28, 30, 255, + 31, 1041, 260, 256, 1042, 81, 296, 310, 326, 739, + 740, 741, 742, 1254, 1255, 1256, 126, 441, 243, 299, + 316, 328, 442, 366, 386, 511, 411, 42, 520, 261, + 512, 44, 301, 521, 332, 532, 305, 131, 132, 125, + 533, 435, 302, 262, 333, 263, 536, 757, 743, 46, + 1044, 537, 251, 1045, 566, 257, 252, 306, 303, 567, + 334, 48, 281, 901, 902, 903, 904, 154, 905, 974, + 975, 976, 977, 583, 264, 429, 430, 265, 584, 266, + 267, 268, 269, 587, 270, 271, 154, 272, 588, 511, + 1077, 587, 273, 1078, 995, 274, 996, 275, 276, 277, + 278, 87, 279, 280, 88, 291, 520, 1000, 308, 309, + 292, 997, 1001, 293, 1304, 294, 89, 1305, 436, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 225, + 226, 387, 388, 227, 780, 781, 228, 229, 230, 231, + 1306, 50, 154, 1307, 1308, 1309, 1310, 1023, 816, 52, + 1023, 84, 1024, 131, 132, 1025, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 131, 132, 54, 125, 126, 56, 93, 94, 95, + 96, 131, 132, 58, 1058, 60, 127, 128, 129, 1059, + 949, 950, 1156, 130, 1157, 1172, 131, 132, 1247, 1248, + 1249, 133, 32, 33, 34, 35, 134, 135, 136, 137, + 138, 100, 101, 102, 938, 939, 940, 139, 1063, 1067, + 131, 132, 437, 1064, 1068, 783, 784, 140, 62, 1073, + 141, 958, 959, 960, 1074, 828, 829, 142, 143, 125, + 126, 345, 144, 324, 990, 145, 583, 438, 154, 146, + 439, 1075, 1119, 91, 92, 93, 94, 95, 96, 446, + 345, 131, 132, 924, 925, 926, 927, 928, 929, 147, + 148, 149, 150, 151, 152, 447, 154, 1175, 1176, 1177, + 131, 132, 1083, 153, 448, 452, 961, 1084, 456, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 546, + 457, 154, 458, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 459, 244, 245, 246, 1023, 126, 532, + 547, 1266, 1262, 460, 1263, 154, 1267, 589, 590, 461, + 128, 129, 462, 566, 591, 463, 464, 247, 1274, 131, + 132, 248, 249, 250, 133, 465, 466, 1282, 536, 134, + 135, 136, 1283, 1285, 251, 468, 469, 470, 252, 1222, + 139, 1223, 1224, 1324, 548, 834, 154, 253, 1325, 835, + 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, + 846, 847, 848, 471, 472, 154, 849, 850, 851, 852, + 853, 854, 476, 477, 155, 478, 345, 367, 346, 347, + 368, 369, 370, 232, 751, 752, 753, 754, 760, 761, + 762, 763, 147, 148, 479, 254, 131, 132, 483, 307, + 490, 242, 345, 491, 492, 498, 300, 505, 258, 506, + 325, 507, 510, 298, 516, 517, 518, 315, 519, 528, + 351, 535, 551, 555, 154, 259, 371, 557, 327, 556, + 373, 559, 255, 560, 561, 260, 256, 563, 365, 296, + 243, 562, 352, 310, 385, 568, 409, 571, 372, 374, + 573, 574, 299, 577, 326, 578, 316, 586, 592, 593, + 594, 595, 261, 596, 410, 301, 597, 328, 598, 602, + 599, 600, 601, 603, 604, 302, 262, 366, 263, 605, + 332, 611, 617, 386, 606, 607, 623, 608, 257, 609, + 333, 303, 610, 620, 615, 281, 612, 93, 94, 95, + 613, 154, 614, 411, 616, 618, 334, 264, 619, 621, + 265, 622, 266, 267, 268, 269, 624, 270, 271, 344, + 272, 625, 630, 628, 1286, 273, 626, 154, 274, 631, + 275, 276, 277, 278, 632, 279, 280, 627, 291, 629, + 633, 634, 635, 292, 308, 309, 293, 636, 294, 637, + 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, + 126, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 648, 649, 345, 650, 346, 347, + 651, 131, 132, 348, 349, 350, 652, 653, 654, 655, + 656, 155, 658, 232, 657, 317, 131, 132, 824, 659, + 661, 662, 663, 318, 319, 320, 321, 322, 323, 664, + 324, 242, 665, 666, 667, 669, 670, 671, 672, 91, + 92, 93, 94, 95, 96, 673, 674, 676, 675, 677, + 678, 680, 683, 941, 951, 681, 409, 684, 685, 686, + 978, 687, 688, 689, 690, 692, 693, 694, 695, 696, + 243, 947, 952, 962, 410, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 697, 698, 700, 701, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, - 696, 697, 700, 698, 126, 345, 701, 702, 703, 705, - 946, 951, 961, 411, 706, 708, 128, 129, 709, 710, - 711, 712, 715, 713, 714, 131, 132, 716, 249, 717, - 133, 718, 719, 720, 721, 134, 135, 136, 722, 724, - 251, 725, 727, 728, 252, 732, 729, 730, 154, 731, - 733, 734, 735, 253, 1, 2, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 736, 737, 738, - 745, 746, 747, 748, 749, 750, 756, 30, 765, 759, - 766, 767, 768, 774, 775, 769, 770, 771, 772, 773, - 776, 777, 778, 786, 787, 788, 789, 790, 147, 148, - 791, 794, 818, 793, 795, 797, 798, 799, 800, 801, - 823, 802, 803, 804, 805, 806, 807, 808, 809, 810, - 812, 813, 814, 820, 821, 879, 883, 822, 887, 891, - 154, 895, 911, 914, 918, 969, 984, 1004, 1005, 1006, - 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1015, 1025, 811, - 1024, 1028, 1027, 1030, 1031, 1033, 1034, 1037, 1036, 1045, - 1082, 1044, 1048, 1047, 1049, 1050, 1051, 1052, 1053, 1054, - 1057, 1058, 1059, 1066, 1068, 1076, 1077, 1078, 1079, 1087, - 1099, 1086, 825, 1091, 1090, 1089, 1092, 1094, 1095, 1096, - 1097, 1098, 1100, 1108, 1102, 1101, 1103, 1104, 1105, 1106, - 1107, 1109, 1110, 1111, 1112, 1113, 1199, 1200, 1201, 254, - 1202, 1203, 351, 1204, 1206, 371, 1207, 1210, 1123, 373, - 300, 1208, 258, 1174, 1211, 1213, 325, 298, 1180, 389, - 365, 1127, 1214, 385, 352, 1216, 1163, 372, 374, 259, - 1151, 1182, 1215, 939, 327, 1179, 255, 949, 1128, 260, - 256, 1236, 1237, 296, 1231, 1124, 1221, 1240, 1129, 1125, - 1175, 945, 1162, 976, 1176, 950, 299, 1181, 307, 366, - 326, 960, 386, 1232, 1223, 1164, 261, 1233, 1222, 301, - 1183, 1234, 1241, 328, 1242, 1130, 315, 1260, 1165, 302, - 262, 1261, 263, 1184, 1247, 1266, 332, 1267, 1166, 1131, - 946, 1132, 257, 1185, 951, 303, 333, 1268, 1248, 281, - 961, 1126, 310, 1224, 1167, 1249, 1177, 1254, 1150, 1186, - 1255, 264, 334, 1178, 265, 316, 266, 267, 268, 269, - 1133, 270, 271, 1134, 272, 1135, 1136, 1137, 1138, 273, - 1139, 1140, 274, 1141, 275, 276, 277, 278, 1142, 279, - 280, 1143, 291, 1144, 1145, 1146, 1147, 292, 1148, 1149, - 293, 1156, 294, 1154, 1155, 1269, 1157, 1276, 1284, 1158, - 1256, 1159, 1285, 1288, 1290, 827, 1294, 1316, 1257, 1296, - 1317, 1318, 1322, 1326, 819, 668, 1093, 660, 992, 1116, - 1114, 1170, 1198, 1209, 1205, 1197, 1118, 1117, 707, 679, - 1271, 1272, 1283, 1169, 1119, 1120, 1122, 1274, 1273, 699, - 1280, 704, 1289, 308, 309, 1286, 1292, 1293, 1323, 1121, - 1195, 1196, 1295, 1194, 1324, 1325, 1328, 1329, 1287, 1239, - 1238, 1212, 1217, 989, 968, 1230, 1291, 723, 1314, 1327, - 826, 0, 0, 726, 0, 1123, 0, 682, 0, 1235, - 0, 1174, 0, 0, 0, 0, 1180, 0, 1127, 0, - 691, 1221, 0, 1163, 0, 0, 0, 1151, 0, 1182, - 0, 0, 0, 1179, 0, 1128, 0, 0, 0, 1223, - 0, 0, 1124, 1222, 0, 1129, 1125, 0, 1175, 1162, - 0, 0, 1176, 0, 0, 1181, 0, 0, 0, 0, - 0, 0, 1164, 0, 0, 0, 0, 0, 1183, 0, - 0, 0, 1130, 0, 0, 1165, 0, 0, 1224, 0, - 0, 1184, 0, 0, 0, 1166, 1131, 0, 1132, 0, - 0, 1185, 0, 0, 0, 0, 0, 0, 1126, 0, - 0, 1167, 0, 0, 1177, 1150, 0, 1186, 0, 0, - 0, 1178, 0, 0, 0, 0, 0, 1133, 0, 0, - 1134, 0, 1135, 1136, 1137, 1138, 0, 1139, 1140, 0, - 1141, 0, 0, 0, 0, 1142, 0, 0, 1143, 0, - 1144, 1145, 1146, 1147, 0, 1148, 1149, 0, 1156, 0, - 1154, 1155, 0, 1157, 0, 0, 1158, 0, 1159 + 131, 132, 702, 703, 126, 345, 154, 705, 706, 709, + 948, 953, 963, 411, 710, 708, 128, 129, 711, 712, + 715, 154, 716, 713, 719, 131, 132, 714, 249, 720, + 133, 717, 718, 721, 722, 134, 135, 136, 724, 725, + 251, 727, 728, 729, 252, 730, 731, 732, 733, 734, + 735, 736, 737, 253, 394, 395, 396, 397, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 738, 745, 746, + 747, 748, 749, 407, 408, 750, 756, 30, 765, 766, + 759, 767, 768, 774, 1102, 769, 770, 771, 772, 773, + 775, 776, 777, 778, 789, 823, 818, 786, 147, 148, + 787, 788, 790, 791, 793, 154, 794, 795, 797, 798, + 799, 800, 881, 801, 885, 802, 803, 889, 804, 805, + 806, 807, 808, 893, 897, 913, 809, 810, 812, 916, + 154, 813, 814, 920, 820, 821, 971, 986, 1006, 1007, + 822, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1017, + 1018, 1028, 1101, 1027, 1031, 1030, 1033, 1034, 1036, 1037, + 1040, 1039, 1048, 1104, 1047, 1051, 1050, 1052, 1053, 1054, + 1055, 1056, 1057, 1060, 1061, 1062, 1069, 1071, 1079, 1080, + 1081, 1082, 825, 1090, 1085, 1089, 1092, 1093, 1094, 1095, + 1097, 1098, 1099, 1100, 1103, 1105, 1106, 1107, 1108, 1109, + 1110, 1111, 1113, 1112, 1114, 1115, 1116, 1117, 1203, 1204, + 1205, 1206, 254, 1207, 1208, 351, 1211, 1210, 371, 1212, + 1214, 1127, 373, 300, 1215, 258, 1178, 1218, 1219, 325, + 298, 1184, 389, 365, 1131, 1217, 385, 352, 1220, 1167, + 372, 374, 259, 1155, 1186, 1235, 941, 327, 1183, 255, + 951, 1132, 260, 256, 1240, 1236, 296, 1237, 1128, 1225, + 1241, 1133, 1129, 1179, 947, 1166, 978, 1180, 952, 299, + 1185, 307, 366, 326, 962, 386, 1238, 1227, 1168, 261, + 1244, 1226, 301, 1187, 1245, 1246, 328, 1264, 1134, 315, + 1251, 1169, 302, 262, 1265, 263, 1188, 1270, 1271, 332, + 1272, 1170, 1135, 948, 1136, 257, 1189, 953, 303, 333, + 1273, 1280, 281, 963, 1130, 310, 1228, 1171, 1252, 1181, + 1288, 1154, 1190, 1253, 264, 334, 1182, 265, 316, 266, + 267, 268, 269, 1137, 270, 271, 1138, 272, 1139, 1140, + 1141, 1142, 273, 1143, 1144, 274, 1145, 275, 276, 277, + 278, 1146, 279, 280, 1147, 291, 1148, 1149, 1150, 1151, + 292, 1152, 1153, 293, 1160, 294, 1158, 1159, 1289, 1161, + 1292, 1294, 1162, 1298, 1163, 1320, 1300, 1290, 1321, 1322, + 1326, 1330, 1258, 811, 819, 827, 1096, 1120, 660, 994, + 668, 1118, 1174, 1213, 1202, 1201, 707, 1209, 1122, 1287, + 1121, 1173, 704, 1259, 1260, 1123, 1124, 1243, 699, 1125, + 679, 1278, 1261, 1275, 1276, 1277, 308, 309, 1293, 1284, + 1296, 1126, 1291, 1242, 1216, 1297, 1299, 1200, 1199, 1328, + 1327, 1329, 1332, 1333, 991, 1198, 1221, 970, 723, 726, + 1295, 1234, 826, 1318, 1331, 1239, 0, 0, 0, 1127, + 0, 0, 0, 0, 0, 1178, 682, 0, 0, 0, + 1184, 0, 1131, 0, 0, 1225, 0, 1167, 691, 0, + 0, 1155, 0, 1186, 0, 0, 0, 1183, 0, 1132, + 0, 0, 0, 1227, 0, 0, 1128, 1226, 0, 1133, + 1129, 0, 1179, 1166, 0, 0, 1180, 0, 0, 1185, + 0, 0, 0, 0, 0, 0, 1168, 0, 0, 0, + 0, 0, 1187, 0, 0, 0, 1134, 0, 0, 1169, + 0, 0, 1228, 0, 0, 1188, 0, 0, 0, 1170, + 1135, 0, 1136, 0, 0, 1189, 0, 0, 0, 0, + 0, 0, 1130, 0, 0, 1171, 0, 0, 1181, 1154, + 0, 1190, 0, 0, 0, 1182, 0, 0, 0, 0, + 0, 1137, 0, 0, 1138, 0, 1139, 1140, 1141, 1142, + 0, 1143, 1144, 0, 1145, 0, 0, 0, 0, 1146, + 0, 0, 1147, 0, 1148, 1149, 1150, 1151, 0, 1152, + 1153, 0, 1160, 0, 1158, 1159, 0, 1161, 0, 0, + 1162, 0, 1163 }; const short Dhcp4Parser::yycheck_[] = { 67, 68, 69, 70, 71, 64, 73, 74, 75, 76, - 72, 74, 736, 69, 1035, 69, 1035, 1035, 0, 68, - 69, 70, 71, 18, 73, 74, 3, 76, 73, 74, - 74, 8, 69, 676, 147, 148, 115, 116, 3, 69, - 683, 6, 69, 69, 637, 3, 69, 70, 71, 5, - 8, 7, 3, 9, 7, 95, 220, 8, 68, 69, - 70, 71, 3, 73, 74, 93, 76, 8, 3, 69, - 94, 7, 69, 8, 71, 115, 116, 147, 148, 158, - 159, 160, 69, 69, 71, 69, 115, 116, 3, 7, - 114, 115, 116, 8, 3, 69, 3, 7, 69, 8, - 71, 8, 69, 3, 3, 7, 130, 220, 8, 8, - 134, 135, 3, 706, 69, 6, 10, 69, 3, 69, - 69, 69, 69, 8, 69, 69, 3, 69, 40, 41, - 42, 8, 69, 162, 163, 69, 7, 69, 69, 69, - 69, 220, 69, 69, 11, 69, 3, 14, 70, 70, - 69, 8, 7, 69, 194, 69, 196, 197, 3, 26, - 7, 6, 29, 30, 31, 32, 33, 34, 35, 36, - 37, 38, 3, 3, 15, 16, 6, 8, 19, 7, - 220, 22, 23, 24, 25, 3, 7, 182, 12, 13, - 8, 220, 184, 185, 186, 187, 220, 7, 65, 66, - 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, - 87, 88, 89, 3, 3, 3, 93, 94, 8, 8, - 8, 223, 3, 32, 33, 34, 6, 8, 105, 106, - 107, 1262, 3, 1262, 1262, 112, 3, 8, 115, 116, - 3, 8, 3, 120, 3, 8, 4, 8, 125, 126, - 127, 128, 129, 3, 220, 221, 222, 223, 8, 136, - 8, 3, 3, 3, 115, 116, 8, 8, 8, 146, - 17, 18, 149, 27, 28, 32, 33, 34, 35, 156, - 157, 57, 58, 59, 161, 94, 39, 164, 8, 1023, - 195, 168, 7, 198, 199, 200, 201, 95, 96, 97, - 98, 99, 100, 101, 20, 21, 115, 116, 65, 66, - 67, 188, 189, 190, 191, 192, 193, 115, 116, 3, - 129, 115, 116, 144, 145, 202, 8, 4, 137, 138, - 139, 140, 141, 142, 4, 144, 93, 94, 95, 4, - 4, 4, 95, 220, 97, 98, 4, 4, 4, 102, - 103, 104, 30, 31, 32, 33, 34, 35, 115, 116, - 4, 4, 115, 116, 4, 4, 4, 436, 437, 220, - 4, 165, 166, 167, 131, 132, 133, 8, 4, 4, - 203, 204, 205, 206, 4, 4, 4, 65, 66, 67, - 68, 69, 70, 71, 72, 73, 74, 220, 4, 4, - 4, 79, 80, 81, 82, 83, 84, 85, 86, 87, - 88, 220, 90, 91, 92, 4, 94, 4, 137, 138, - 139, 140, 220, 142, 4, 4, 220, 4, 106, 107, - 121, 122, 123, 124, 511, 113, 4, 115, 116, 117, - 118, 119, 120, 520, 4, 4, 4, 125, 126, 127, - 4, 4, 130, 4, 4, 532, 134, 4, 136, 536, - 4, 520, 4, 220, 4, 143, 532, 220, 532, 4, - 547, 3, 3, 532, 4, 4, 4, 536, 4, 3, - 557, 108, 109, 110, 111, 532, 563, 8, 547, 4, - 563, 4, 532, 4, 4, 532, 532, 4, 557, 532, - 520, 4, 557, 536, 563, 4, 583, 220, 563, 563, - 188, 189, 532, 4, 547, 4, 536, 4, 4, 223, - 223, 223, 532, 4, 583, 532, 4, 547, 150, 151, - 152, 153, 154, 155, 4, 532, 532, 557, 532, 4, - 547, 221, 220, 563, 4, 4, 221, 221, 532, 221, - 547, 532, 221, 221, 4, 532, 223, 223, 4, 4, - 222, 222, 222, 583, 223, 4, 547, 532, 221, 221, - 532, 221, 532, 532, 532, 532, 221, 532, 532, 4, - 532, 115, 116, 4, 4, 532, 223, 1240, 532, 222, - 532, 532, 532, 532, 223, 532, 532, 4, 532, 223, - 223, 4, 4, 532, 536, 536, 532, 39, 532, 221, - 4, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 4, 4, 223, 60, 61, - 62, 63, 64, 223, 4, 169, 170, 171, 172, 173, - 174, 175, 176, 177, 178, 179, 180, 181, 223, 4, - 4, 728, 4, 730, 188, 189, 4, 221, 727, 4, - 4, 4, 4, 95, 4, 4, 223, 223, 223, 4, - 4, 730, 4, 4, 4, 223, 221, 223, 221, 4, - 30, 31, 32, 33, 34, 35, 220, 4, 4, 4, - 4, 4, 4, 770, 771, 4, 773, 4, 221, 4, - 777, 221, 4, 4, 4, 4, 4, 4, 4, 4, - 730, 770, 771, 772, 773, 65, 66, 67, 68, 69, - 70, 71, 72, 73, 74, 4, 4, 221, 4, 79, + 72, 74, 736, 69, 1038, 69, 1038, 1038, 637, 68, + 69, 70, 71, 18, 73, 74, 676, 76, 73, 74, + 74, 7, 69, 683, 148, 149, 5, 0, 7, 69, + 9, 3, 69, 69, 6, 221, 69, 70, 71, 185, + 186, 187, 188, 57, 58, 59, 95, 3, 68, 69, + 70, 71, 8, 73, 74, 3, 76, 7, 3, 69, + 8, 7, 69, 8, 71, 3, 115, 116, 117, 94, + 8, 6, 69, 69, 71, 69, 3, 706, 224, 7, + 3, 8, 131, 6, 3, 69, 135, 136, 69, 8, + 71, 7, 69, 138, 139, 140, 141, 221, 143, 204, + 205, 206, 207, 3, 69, 12, 13, 69, 8, 69, + 69, 69, 69, 3, 69, 69, 221, 69, 8, 3, + 3, 3, 69, 6, 8, 69, 8, 69, 69, 69, + 69, 11, 69, 69, 14, 69, 3, 3, 70, 70, + 69, 8, 8, 69, 3, 69, 26, 6, 3, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 15, + 16, 148, 149, 19, 17, 18, 22, 23, 24, 25, + 196, 7, 221, 199, 200, 201, 202, 3, 183, 7, + 3, 10, 8, 116, 117, 8, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, - 4, 4, 4, 223, 94, 95, 223, 223, 223, 4, - 770, 771, 772, 773, 4, 223, 106, 107, 4, 4, - 221, 4, 4, 221, 221, 115, 116, 4, 118, 223, - 120, 223, 4, 4, 4, 125, 126, 127, 4, 4, - 130, 221, 4, 7, 134, 220, 7, 7, 220, 7, - 220, 220, 7, 143, 207, 208, 209, 210, 211, 212, - 213, 214, 215, 216, 217, 218, 219, 7, 5, 220, - 220, 220, 5, 5, 5, 220, 5, 7, 5, 220, - 5, 5, 5, 220, 220, 7, 7, 7, 7, 7, - 5, 7, 5, 220, 220, 220, 5, 220, 188, 189, - 220, 7, 183, 220, 220, 220, 220, 220, 220, 220, - 5, 220, 220, 220, 220, 220, 220, 220, 220, 220, - 220, 220, 220, 220, 220, 7, 7, 220, 7, 7, - 220, 7, 7, 7, 7, 7, 7, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 3, 706, - 6, 3, 6, 6, 3, 6, 3, 3, 6, 3, - 220, 6, 3, 6, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, - 223, 6, 728, 4, 6, 8, 4, 4, 4, 4, - 4, 221, 221, 4, 221, 223, 221, 221, 221, 221, - 221, 221, 4, 4, 4, 4, 221, 221, 221, 1026, - 221, 221, 1029, 221, 223, 1032, 221, 4, 1035, 1032, - 1026, 221, 1026, 1040, 4, 223, 1043, 1026, 1040, 1046, - 1029, 1035, 4, 1032, 1029, 4, 1035, 1032, 1032, 1026, - 1035, 1040, 221, 1060, 1043, 1040, 1026, 1064, 1035, 1026, - 1026, 6, 3, 1026, 223, 1035, 1073, 4, 1035, 1035, - 1040, 1060, 1035, 1080, 1040, 1064, 1026, 1040, 1085, 1029, - 1043, 1070, 1032, 223, 1073, 1035, 1026, 223, 1073, 1026, - 1040, 223, 220, 1043, 220, 1035, 1085, 8, 1035, 1026, - 1026, 8, 1026, 1040, 220, 4, 1043, 8, 1035, 1035, - 1060, 1035, 1026, 1040, 1064, 1026, 1043, 3, 220, 1026, - 1070, 1035, 1085, 1073, 1035, 220, 1040, 220, 1035, 1040, - 220, 1026, 1043, 1040, 1026, 1085, 1026, 1026, 1026, 1026, - 1035, 1026, 1026, 1035, 1026, 1035, 1035, 1035, 1035, 1026, - 1035, 1035, 1026, 1035, 1026, 1026, 1026, 1026, 1035, 1026, - 1026, 1035, 1026, 1035, 1035, 1035, 1035, 1026, 1035, 1035, - 1026, 1035, 1026, 1035, 1035, 8, 1035, 4, 4, 1035, - 220, 1035, 4, 4, 4, 730, 5, 4, 220, 7, - 4, 4, 4, 4, 719, 520, 998, 511, 823, 1025, - 1020, 1038, 1048, 1060, 1055, 1046, 1028, 1026, 566, 532, - 220, 220, 1262, 1037, 1029, 1031, 1034, 1216, 220, 557, - 220, 563, 221, 1085, 1085, 223, 220, 220, 223, 1032, - 1043, 1045, 220, 1041, 221, 221, 220, 220, 1268, 1087, - 1085, 1064, 1070, 794, 773, 1074, 1278, 583, 1300, 1320, - 729, -1, -1, 587, -1, 1262, -1, 536, -1, 1080, - -1, 1268, -1, -1, -1, -1, 1268, -1, 1262, -1, - 547, 1278, -1, 1262, -1, -1, -1, 1262, -1, 1268, - -1, -1, -1, 1268, -1, 1262, -1, -1, -1, 1278, - -1, -1, 1262, 1278, -1, 1262, 1262, -1, 1268, 1262, - -1, -1, 1268, -1, -1, 1268, -1, -1, -1, -1, - -1, -1, 1262, -1, -1, -1, -1, -1, 1268, -1, - -1, -1, 1262, -1, -1, 1262, -1, -1, 1278, -1, - -1, 1268, -1, -1, -1, 1262, 1262, -1, 1262, -1, - -1, 1268, -1, -1, -1, -1, -1, -1, 1262, -1, - -1, 1262, -1, -1, 1268, 1262, -1, 1268, -1, -1, - -1, 1268, -1, -1, -1, -1, -1, 1262, -1, -1, - 1262, -1, 1262, 1262, 1262, 1262, -1, 1262, 1262, -1, - 1262, -1, -1, -1, -1, 1262, -1, -1, 1262, -1, - 1262, 1262, 1262, 1262, -1, 1262, 1262, -1, 1262, -1, - 1262, 1262, -1, 1262, -1, -1, 1262, -1, 1262 + 90, 116, 117, 7, 94, 95, 7, 32, 33, 34, + 35, 116, 117, 7, 3, 7, 106, 107, 108, 8, + 163, 164, 1266, 113, 1266, 1266, 116, 117, 40, 41, + 42, 121, 221, 222, 223, 224, 126, 127, 128, 129, + 130, 66, 67, 68, 159, 160, 161, 137, 3, 3, + 116, 117, 4, 8, 8, 20, 21, 147, 7, 3, + 150, 166, 167, 168, 8, 27, 28, 157, 158, 94, + 95, 96, 162, 145, 146, 165, 3, 8, 221, 169, + 3, 8, 1026, 30, 31, 32, 33, 34, 35, 4, + 96, 116, 117, 151, 152, 153, 154, 155, 156, 189, + 190, 191, 192, 193, 194, 4, 221, 132, 133, 134, + 116, 117, 3, 203, 4, 4, 221, 8, 4, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 8, + 4, 221, 4, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 4, 91, 92, 93, 3, 95, 3, + 3, 3, 8, 4, 8, 221, 8, 436, 437, 4, + 107, 108, 4, 3, 221, 4, 4, 114, 8, 116, + 117, 118, 119, 120, 121, 4, 4, 3, 3, 126, + 127, 128, 8, 8, 131, 4, 4, 4, 135, 195, + 137, 197, 198, 3, 8, 39, 221, 144, 8, 43, + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 4, 4, 221, 60, 61, 62, 63, + 64, 65, 4, 4, 511, 4, 96, 97, 98, 99, + 100, 101, 102, 520, 109, 110, 111, 112, 122, 123, + 124, 125, 189, 190, 4, 532, 116, 117, 4, 536, + 4, 520, 96, 4, 4, 4, 532, 4, 532, 4, + 547, 4, 4, 532, 4, 4, 4, 536, 4, 4, + 557, 4, 4, 4, 221, 532, 563, 3, 547, 8, + 563, 4, 532, 4, 4, 532, 532, 3, 557, 532, + 520, 8, 557, 536, 563, 4, 583, 4, 563, 563, + 4, 4, 532, 4, 547, 4, 536, 4, 4, 4, + 4, 4, 532, 224, 583, 532, 224, 547, 224, 222, + 4, 4, 4, 4, 4, 532, 532, 557, 532, 4, + 547, 224, 4, 563, 222, 222, 4, 222, 532, 222, + 547, 532, 222, 224, 222, 532, 223, 32, 33, 34, + 223, 221, 223, 583, 222, 222, 547, 532, 222, 224, + 532, 224, 532, 532, 532, 532, 4, 532, 532, 39, + 532, 4, 4, 223, 1244, 532, 224, 221, 532, 4, + 532, 532, 532, 532, 4, 532, 532, 224, 532, 224, + 222, 4, 4, 532, 536, 536, 532, 4, 532, 4, + 4, 4, 224, 224, 224, 4, 4, 4, 4, 4, + 95, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 222, 4, 96, 4, 98, 99, + 4, 116, 117, 103, 104, 105, 4, 4, 4, 224, + 224, 728, 4, 730, 224, 130, 116, 117, 727, 4, + 4, 4, 4, 138, 139, 140, 141, 142, 143, 224, + 145, 730, 224, 222, 222, 4, 4, 4, 4, 30, + 31, 32, 33, 34, 35, 4, 4, 4, 222, 4, + 4, 4, 4, 770, 771, 222, 773, 4, 4, 4, + 777, 4, 4, 4, 4, 4, 4, 222, 4, 4, + 730, 770, 771, 772, 773, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 4, 224, 4, 224, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 116, 117, 224, 224, 95, 96, 221, 4, 4, 4, + 770, 771, 772, 773, 4, 224, 107, 108, 222, 4, + 4, 221, 4, 222, 4, 116, 117, 222, 119, 4, + 121, 224, 224, 4, 4, 126, 127, 128, 4, 222, + 131, 4, 7, 7, 135, 7, 7, 221, 221, 221, + 7, 7, 5, 144, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 221, 221, 221, + 5, 5, 5, 189, 190, 221, 5, 7, 5, 5, + 221, 5, 5, 221, 224, 7, 7, 7, 7, 7, + 221, 5, 7, 5, 5, 5, 184, 221, 189, 190, + 221, 221, 221, 221, 221, 221, 7, 221, 221, 221, + 221, 221, 7, 221, 7, 221, 221, 7, 221, 221, + 221, 221, 221, 7, 7, 7, 221, 221, 221, 7, + 221, 221, 221, 7, 221, 221, 7, 7, 4, 4, + 221, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 3, 222, 6, 3, 6, 6, 3, 6, 3, + 3, 6, 3, 224, 6, 3, 6, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 728, 3, 221, 6, 8, 6, 4, 4, + 4, 4, 4, 4, 222, 222, 222, 222, 222, 222, + 222, 4, 222, 224, 4, 4, 4, 4, 222, 222, + 222, 222, 1029, 222, 222, 1032, 222, 224, 1035, 222, + 4, 1038, 1035, 1029, 4, 1029, 1043, 4, 222, 1046, + 1029, 1043, 1049, 1032, 1038, 224, 1035, 1032, 4, 1038, + 1035, 1035, 1029, 1038, 1043, 224, 1063, 1046, 1043, 1029, + 1067, 1038, 1029, 1029, 6, 224, 1029, 224, 1038, 1076, + 3, 1038, 1038, 1043, 1063, 1038, 1083, 1043, 1067, 1029, + 1043, 1088, 1032, 1046, 1073, 1035, 224, 1076, 1038, 1029, + 4, 1076, 1029, 1043, 221, 221, 1046, 8, 1038, 1088, + 221, 1038, 1029, 1029, 8, 1029, 1043, 4, 8, 1046, + 3, 1038, 1038, 1063, 1038, 1029, 1043, 1067, 1029, 1046, + 8, 4, 1029, 1073, 1038, 1088, 1076, 1038, 221, 1043, + 4, 1038, 1043, 221, 1029, 1046, 1043, 1029, 1088, 1029, + 1029, 1029, 1029, 1038, 1029, 1029, 1038, 1029, 1038, 1038, + 1038, 1038, 1029, 1038, 1038, 1029, 1038, 1029, 1029, 1029, + 1029, 1038, 1029, 1029, 1038, 1029, 1038, 1038, 1038, 1038, + 1029, 1038, 1038, 1029, 1038, 1029, 1038, 1038, 4, 1038, + 4, 4, 1038, 5, 1038, 4, 7, 224, 4, 4, + 4, 4, 221, 706, 719, 730, 1000, 1028, 511, 823, + 520, 1023, 1041, 1063, 1051, 1049, 566, 1058, 1031, 1266, + 1029, 1040, 563, 221, 221, 1032, 1034, 1090, 557, 1035, + 532, 1220, 221, 221, 221, 221, 1088, 1088, 222, 221, + 221, 1037, 1272, 1088, 1067, 221, 221, 1048, 1046, 222, + 224, 222, 221, 221, 794, 1044, 1073, 773, 583, 587, + 1282, 1077, 729, 1304, 1324, 1083, -1, -1, -1, 1266, + -1, -1, -1, -1, -1, 1272, 536, -1, -1, -1, + 1272, -1, 1266, -1, -1, 1282, -1, 1266, 547, -1, + -1, 1266, -1, 1272, -1, -1, -1, 1272, -1, 1266, + -1, -1, -1, 1282, -1, -1, 1266, 1282, -1, 1266, + 1266, -1, 1272, 1266, -1, -1, 1272, -1, -1, 1272, + -1, -1, -1, -1, -1, -1, 1266, -1, -1, -1, + -1, -1, 1272, -1, -1, -1, 1266, -1, -1, 1266, + -1, -1, 1282, -1, -1, 1272, -1, -1, -1, 1266, + 1266, -1, 1266, -1, -1, 1272, -1, -1, -1, -1, + -1, -1, 1266, -1, -1, 1266, -1, -1, 1272, 1266, + -1, 1272, -1, -1, -1, 1272, -1, -1, -1, -1, + -1, 1266, -1, -1, 1266, -1, 1266, 1266, 1266, 1266, + -1, 1266, 1266, -1, 1266, -1, -1, -1, -1, 1266, + -1, -1, 1266, -1, 1266, 1266, 1266, 1266, -1, 1266, + 1266, -1, 1266, -1, 1266, 1266, -1, 1266, -1, -1, + 1266, -1, 1266 }; const short Dhcp4Parser::yystos_[] = { - 0, 207, 208, 209, 210, 211, 212, 213, 214, 215, - 216, 217, 218, 219, 225, 226, 227, 228, 229, 230, - 231, 232, 233, 234, 235, 236, 237, 238, 0, 5, - 7, 9, 220, 221, 222, 223, 239, 240, 241, 246, - 7, 255, 7, 260, 7, 314, 7, 427, 7, 511, - 7, 528, 7, 462, 7, 468, 7, 492, 7, 403, - 7, 595, 7, 626, 247, 242, 256, 261, 315, 428, - 512, 529, 463, 469, 493, 404, 596, 627, 239, 248, - 249, 220, 244, 245, 10, 257, 259, 11, 14, 26, + 0, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, 238, 239, 0, 5, + 7, 9, 221, 222, 223, 224, 240, 241, 242, 247, + 7, 256, 7, 261, 7, 315, 7, 429, 7, 513, + 7, 530, 7, 464, 7, 470, 7, 494, 7, 405, + 7, 597, 7, 628, 248, 243, 257, 262, 316, 430, + 514, 531, 465, 471, 495, 406, 598, 629, 240, 249, + 250, 221, 245, 246, 10, 258, 260, 11, 14, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, - 85, 86, 87, 88, 89, 93, 94, 105, 106, 107, - 112, 115, 116, 120, 125, 126, 127, 128, 129, 136, - 146, 149, 156, 157, 161, 164, 168, 188, 189, 190, - 191, 192, 193, 202, 220, 254, 262, 263, 264, 265, - 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, - 277, 278, 280, 281, 282, 283, 284, 285, 286, 289, - 291, 293, 294, 295, 298, 299, 301, 303, 304, 305, - 306, 307, 308, 309, 310, 328, 330, 338, 340, 381, - 390, 397, 411, 421, 445, 446, 447, 448, 452, 460, - 486, 518, 520, 522, 533, 535, 537, 560, 574, 575, - 583, 593, 624, 633, 657, 15, 16, 19, 22, 23, - 24, 25, 254, 312, 313, 316, 318, 321, 324, 325, - 326, 327, 518, 520, 90, 91, 92, 113, 117, 118, - 119, 130, 134, 143, 254, 264, 265, 266, 267, 268, - 269, 270, 271, 272, 273, 278, 281, 282, 283, 284, - 285, 286, 289, 291, 293, 294, 295, 298, 299, 301, - 303, 309, 429, 430, 431, 433, 435, 437, 439, 441, - 443, 445, 446, 447, 448, 451, 486, 505, 518, 520, - 522, 533, 535, 537, 557, 114, 135, 254, 441, 443, - 486, 513, 514, 515, 517, 518, 520, 129, 137, 138, - 139, 140, 141, 142, 144, 254, 486, 518, 520, 530, - 531, 532, 533, 535, 537, 539, 543, 545, 547, 549, - 551, 553, 555, 460, 39, 95, 97, 98, 102, 103, - 104, 254, 358, 470, 471, 472, 473, 474, 475, 476, - 478, 480, 482, 483, 485, 518, 520, 96, 99, 100, - 101, 254, 358, 474, 480, 494, 495, 496, 497, 498, - 500, 501, 502, 503, 504, 518, 520, 147, 148, 254, - 405, 406, 407, 409, 169, 170, 171, 172, 173, 174, - 175, 176, 177, 178, 179, 180, 181, 188, 189, 254, - 518, 520, 597, 598, 599, 600, 602, 603, 605, 606, - 607, 610, 612, 614, 615, 616, 618, 620, 622, 12, - 13, 628, 629, 630, 632, 6, 3, 4, 8, 3, - 258, 3, 8, 625, 311, 331, 4, 4, 4, 534, - 536, 538, 4, 329, 339, 341, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 276, 4, 4, - 4, 4, 4, 287, 290, 292, 4, 4, 4, 4, - 422, 461, 487, 4, 279, 296, 453, 519, 521, 449, - 4, 4, 4, 382, 561, 523, 398, 412, 4, 391, - 576, 584, 594, 300, 302, 4, 4, 4, 634, 658, - 4, 3, 8, 317, 319, 322, 4, 4, 4, 4, - 3, 8, 434, 436, 438, 506, 432, 440, 4, 444, - 442, 558, 3, 8, 516, 4, 3, 8, 556, 544, - 546, 550, 548, 554, 552, 540, 8, 3, 8, 477, - 359, 4, 481, 479, 484, 4, 8, 3, 499, 4, - 4, 4, 8, 3, 408, 410, 3, 8, 4, 613, - 601, 4, 604, 4, 4, 608, 611, 4, 4, 617, - 619, 621, 623, 3, 8, 631, 4, 3, 8, 239, - 239, 220, 4, 4, 4, 4, 223, 223, 223, 4, - 4, 4, 221, 4, 4, 4, 221, 221, 221, 221, - 221, 223, 222, 222, 222, 221, 221, 4, 221, 221, - 223, 223, 223, 4, 4, 4, 223, 223, 222, 223, - 4, 4, 4, 221, 4, 4, 4, 4, 4, 4, - 223, 223, 223, 4, 4, 4, 4, 4, 221, 4, - 4, 4, 4, 4, 4, 223, 223, 223, 4, 4, - 263, 4, 4, 4, 223, 223, 221, 221, 313, 4, - 4, 4, 4, 4, 4, 221, 4, 4, 4, 430, - 4, 221, 514, 4, 4, 4, 4, 4, 4, 4, - 4, 532, 4, 4, 221, 4, 4, 4, 223, 472, - 4, 223, 223, 223, 496, 4, 4, 406, 223, 4, - 4, 221, 4, 221, 221, 4, 4, 223, 223, 4, - 4, 4, 4, 598, 4, 221, 629, 4, 7, 7, - 7, 7, 220, 220, 220, 7, 7, 5, 220, 184, - 185, 186, 187, 223, 288, 220, 220, 5, 5, 5, - 220, 108, 109, 110, 111, 297, 5, 241, 243, 220, - 121, 122, 123, 124, 450, 5, 5, 5, 5, 7, - 7, 7, 7, 7, 220, 220, 5, 7, 5, 250, - 17, 18, 320, 20, 21, 323, 220, 220, 220, 5, - 220, 220, 250, 220, 7, 220, 250, 220, 220, 220, - 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, - 220, 243, 220, 220, 220, 18, 182, 609, 183, 288, - 220, 220, 220, 5, 239, 262, 628, 312, 27, 28, - 332, 333, 334, 336, 39, 43, 44, 45, 46, 47, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 94, 95, 106, 107, 108, + 113, 116, 117, 121, 126, 127, 128, 129, 130, 137, + 147, 150, 157, 158, 162, 165, 169, 189, 190, 191, + 192, 193, 194, 203, 221, 255, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 278, 279, 281, 282, 283, 284, 285, 286, 287, 290, + 292, 294, 295, 296, 299, 300, 302, 304, 305, 306, + 307, 308, 309, 310, 311, 329, 331, 339, 341, 383, + 392, 399, 413, 423, 447, 448, 449, 450, 454, 462, + 488, 520, 522, 524, 535, 537, 539, 562, 576, 577, + 585, 595, 626, 635, 659, 15, 16, 19, 22, 23, + 24, 25, 255, 313, 314, 317, 319, 322, 325, 326, + 327, 328, 520, 522, 91, 92, 93, 114, 118, 119, + 120, 131, 135, 144, 255, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 279, 282, 283, 284, 285, + 286, 287, 290, 292, 294, 295, 296, 299, 300, 302, + 304, 310, 431, 432, 433, 435, 437, 439, 441, 443, + 445, 447, 448, 449, 450, 453, 488, 507, 520, 522, + 524, 535, 537, 539, 559, 115, 136, 255, 443, 445, + 488, 515, 516, 517, 519, 520, 522, 130, 138, 139, + 140, 141, 142, 143, 145, 255, 488, 520, 522, 532, + 533, 534, 535, 537, 539, 541, 545, 547, 549, 551, + 553, 555, 557, 462, 39, 96, 98, 99, 103, 104, + 105, 255, 359, 472, 473, 474, 475, 476, 477, 478, + 480, 482, 484, 485, 487, 520, 522, 97, 100, 101, + 102, 255, 359, 476, 482, 496, 497, 498, 499, 500, + 502, 503, 504, 505, 506, 520, 522, 148, 149, 255, + 407, 408, 409, 411, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 189, 190, 255, + 520, 522, 599, 600, 601, 602, 604, 605, 607, 608, + 609, 612, 614, 616, 617, 618, 620, 622, 624, 12, + 13, 630, 631, 632, 634, 6, 3, 4, 8, 3, + 259, 3, 8, 627, 312, 332, 4, 4, 4, 536, + 538, 540, 4, 330, 340, 342, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 277, 4, 4, + 4, 4, 4, 288, 291, 293, 4, 4, 4, 4, + 424, 463, 489, 4, 280, 297, 455, 521, 523, 451, + 4, 4, 4, 384, 563, 525, 400, 414, 4, 393, + 578, 586, 596, 301, 303, 4, 4, 4, 636, 660, + 4, 3, 8, 318, 320, 323, 4, 4, 4, 4, + 3, 8, 436, 438, 440, 508, 434, 442, 4, 446, + 444, 560, 3, 8, 518, 4, 3, 8, 558, 546, + 548, 552, 550, 556, 554, 542, 8, 3, 8, 479, + 360, 4, 483, 481, 486, 4, 8, 3, 501, 4, + 4, 4, 8, 3, 410, 412, 3, 8, 4, 615, + 603, 4, 606, 4, 4, 610, 613, 4, 4, 619, + 621, 623, 625, 3, 8, 633, 4, 3, 8, 240, + 240, 221, 4, 4, 4, 4, 224, 224, 224, 4, + 4, 4, 222, 4, 4, 4, 222, 222, 222, 222, + 222, 224, 223, 223, 223, 222, 222, 4, 222, 222, + 224, 224, 224, 4, 4, 4, 224, 224, 223, 224, + 4, 4, 4, 222, 4, 4, 4, 4, 4, 4, + 224, 224, 224, 4, 4, 4, 4, 4, 222, 4, + 4, 4, 4, 4, 4, 224, 224, 224, 4, 4, + 264, 4, 4, 4, 224, 224, 222, 222, 314, 4, + 4, 4, 4, 4, 4, 222, 4, 4, 4, 432, + 4, 222, 516, 4, 4, 4, 4, 4, 4, 4, + 4, 534, 4, 4, 222, 4, 4, 4, 224, 474, + 4, 224, 224, 224, 498, 4, 4, 408, 224, 4, + 4, 222, 4, 222, 222, 4, 4, 224, 224, 4, + 4, 4, 4, 600, 4, 222, 631, 4, 7, 7, + 7, 7, 221, 221, 221, 7, 7, 5, 221, 185, + 186, 187, 188, 224, 289, 221, 221, 5, 5, 5, + 221, 109, 110, 111, 112, 298, 5, 242, 244, 221, + 122, 123, 124, 125, 452, 5, 5, 5, 5, 7, + 7, 7, 7, 7, 221, 221, 5, 7, 5, 251, + 17, 18, 321, 20, 21, 324, 221, 221, 221, 5, + 221, 221, 251, 221, 7, 221, 251, 221, 221, 221, + 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, + 221, 244, 221, 221, 221, 18, 183, 611, 184, 289, + 221, 221, 221, 5, 240, 263, 630, 313, 27, 28, + 333, 334, 335, 337, 39, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 60, - 61, 62, 63, 64, 254, 346, 347, 348, 351, 353, - 355, 357, 358, 360, 361, 362, 363, 364, 365, 366, - 367, 368, 369, 372, 373, 375, 377, 379, 346, 7, - 342, 343, 344, 7, 423, 424, 425, 7, 464, 465, - 466, 7, 488, 489, 490, 7, 454, 455, 456, 137, - 138, 139, 140, 142, 383, 384, 385, 386, 387, 388, - 389, 7, 562, 563, 7, 524, 525, 526, 7, 399, - 400, 401, 150, 151, 152, 153, 154, 155, 413, 414, - 415, 416, 417, 418, 419, 420, 158, 159, 160, 254, - 392, 393, 394, 395, 396, 518, 520, 162, 163, 254, - 518, 520, 577, 578, 579, 581, 165, 166, 167, 220, - 518, 520, 585, 586, 587, 588, 590, 591, 597, 7, - 635, 636, 203, 204, 205, 206, 254, 659, 660, 661, - 662, 663, 664, 251, 7, 507, 508, 509, 145, 539, - 541, 559, 342, 8, 8, 8, 335, 337, 3, 8, - 349, 352, 354, 356, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 370, 4, 374, 376, 378, 380, - 3, 8, 8, 345, 6, 3, 426, 6, 3, 467, - 6, 3, 491, 6, 3, 457, 6, 3, 3, 6, - 564, 3, 6, 527, 6, 3, 402, 6, 3, 4, - 4, 4, 4, 4, 4, 3, 8, 4, 4, 4, - 3, 8, 580, 582, 3, 8, 4, 589, 4, 592, - 3, 8, 8, 637, 3, 6, 4, 4, 4, 4, - 3, 8, 220, 252, 253, 510, 6, 3, 542, 8, - 6, 4, 4, 333, 4, 4, 4, 4, 221, 223, - 221, 223, 221, 221, 221, 221, 221, 221, 4, 221, - 4, 4, 4, 4, 347, 346, 344, 429, 425, 470, - 466, 494, 490, 254, 264, 265, 266, 267, 268, 269, - 270, 271, 272, 273, 278, 281, 282, 283, 284, 285, - 286, 289, 291, 293, 294, 295, 298, 299, 301, 303, - 309, 358, 421, 439, 441, 443, 445, 446, 447, 448, - 458, 459, 486, 518, 520, 533, 535, 537, 557, 456, - 384, 131, 132, 133, 254, 264, 265, 266, 309, 358, - 460, 486, 518, 520, 533, 535, 537, 565, 566, 567, - 568, 569, 571, 573, 563, 530, 526, 405, 401, 221, - 221, 221, 221, 221, 221, 414, 223, 221, 221, 393, - 4, 4, 578, 223, 4, 221, 4, 586, 194, 196, - 197, 254, 358, 518, 520, 638, 639, 640, 641, 643, - 636, 223, 223, 223, 223, 660, 6, 3, 513, 509, - 4, 220, 220, 40, 41, 42, 350, 220, 220, 220, - 57, 58, 59, 371, 220, 220, 220, 220, 8, 8, - 8, 8, 3, 8, 570, 572, 4, 8, 3, 8, - 8, 220, 220, 220, 239, 644, 4, 642, 3, 8, - 220, 8, 250, 459, 4, 4, 223, 567, 4, 221, - 4, 639, 220, 220, 5, 220, 7, 645, 646, 647, - 3, 6, 195, 198, 199, 200, 201, 648, 649, 650, - 652, 653, 654, 655, 646, 651, 4, 4, 4, 656, - 3, 8, 4, 223, 221, 221, 4, 649, 220, 220 + 61, 62, 63, 64, 65, 255, 347, 348, 349, 352, + 354, 356, 358, 359, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 373, 374, 375, 377, 379, 381, + 347, 7, 343, 344, 345, 7, 425, 426, 427, 7, + 466, 467, 468, 7, 490, 491, 492, 7, 456, 457, + 458, 138, 139, 140, 141, 143, 385, 386, 387, 388, + 389, 390, 391, 7, 564, 565, 7, 526, 527, 528, + 7, 401, 402, 403, 151, 152, 153, 154, 155, 156, + 415, 416, 417, 418, 419, 420, 421, 422, 159, 160, + 161, 255, 394, 395, 396, 397, 398, 520, 522, 163, + 164, 255, 520, 522, 579, 580, 581, 583, 166, 167, + 168, 221, 520, 522, 587, 588, 589, 590, 592, 593, + 599, 7, 637, 638, 204, 205, 206, 207, 255, 661, + 662, 663, 664, 665, 666, 252, 7, 509, 510, 511, + 146, 541, 543, 561, 343, 8, 8, 8, 336, 338, + 3, 8, 350, 353, 355, 357, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 371, 4, 4, 376, + 378, 380, 382, 3, 8, 8, 346, 6, 3, 428, + 6, 3, 469, 6, 3, 493, 6, 3, 459, 6, + 3, 3, 6, 566, 3, 6, 529, 6, 3, 404, + 6, 3, 4, 4, 4, 4, 4, 4, 3, 8, + 4, 4, 4, 3, 8, 582, 584, 3, 8, 4, + 591, 4, 594, 3, 8, 8, 639, 3, 6, 4, + 4, 4, 4, 3, 8, 221, 253, 254, 512, 6, + 3, 544, 8, 6, 4, 4, 334, 4, 4, 4, + 4, 222, 224, 222, 224, 222, 222, 222, 222, 222, + 222, 4, 224, 222, 4, 4, 4, 4, 348, 347, + 345, 431, 427, 472, 468, 496, 492, 255, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 279, 282, + 283, 284, 285, 286, 287, 290, 292, 294, 295, 296, + 299, 300, 302, 304, 310, 359, 423, 441, 443, 445, + 447, 448, 449, 450, 460, 461, 488, 520, 522, 535, + 537, 539, 559, 458, 386, 132, 133, 134, 255, 265, + 266, 267, 310, 359, 462, 488, 520, 522, 535, 537, + 539, 567, 568, 569, 570, 571, 573, 575, 565, 532, + 528, 407, 403, 222, 222, 222, 222, 222, 222, 416, + 224, 222, 222, 395, 4, 4, 580, 224, 4, 222, + 4, 588, 195, 197, 198, 255, 359, 520, 522, 640, + 641, 642, 643, 645, 638, 224, 224, 224, 224, 662, + 6, 3, 515, 511, 4, 221, 221, 40, 41, 42, + 351, 221, 221, 221, 57, 58, 59, 372, 221, 221, + 221, 221, 8, 8, 8, 8, 3, 8, 572, 574, + 4, 8, 3, 8, 8, 221, 221, 221, 240, 646, + 4, 644, 3, 8, 221, 8, 251, 461, 4, 4, + 224, 569, 4, 222, 4, 641, 221, 221, 5, 221, + 7, 647, 648, 649, 3, 6, 196, 199, 200, 201, + 202, 650, 651, 652, 654, 655, 656, 657, 648, 653, + 4, 4, 4, 658, 3, 8, 4, 224, 222, 222, + 4, 651, 221, 221 }; const short Dhcp4Parser::yyr1_[] = { - 0, 224, 226, 225, 227, 225, 228, 225, 229, 225, - 230, 225, 231, 225, 232, 225, 233, 225, 234, 225, - 235, 225, 236, 225, 237, 225, 238, 225, 239, 239, - 239, 239, 239, 239, 239, 240, 242, 241, 243, 244, - 244, 245, 245, 245, 247, 246, 248, 248, 249, 249, - 249, 251, 250, 252, 252, 253, 253, 253, 254, 256, - 255, 258, 257, 257, 259, 261, 260, 262, 262, 262, - 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, 264, 265, - 266, 267, 268, 269, 270, 271, 272, 273, 274, 276, - 275, 277, 279, 278, 280, 281, 282, 283, 284, 285, - 287, 286, 288, 288, 288, 288, 288, 290, 289, 292, - 291, 293, 294, 296, 295, 297, 297, 297, 297, 298, - 300, 299, 302, 301, 303, 304, 305, 306, 307, 308, - 309, 311, 310, 312, 312, 312, 313, 313, 313, 313, - 313, 313, 313, 313, 313, 313, 315, 314, 317, 316, - 319, 318, 320, 320, 322, 321, 323, 323, 324, 325, - 326, 327, 329, 328, 331, 330, 332, 332, 332, 333, - 333, 335, 334, 337, 336, 339, 338, 341, 340, 342, - 342, 343, 343, 343, 345, 344, 346, 346, 346, 347, - 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, - 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, - 347, 349, 348, 350, 350, 350, 352, 351, 354, 353, - 356, 355, 357, 359, 358, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 370, 369, 371, 371, 371, 372, - 374, 373, 376, 375, 378, 377, 380, 379, 382, 381, - 383, 383, 383, 384, 384, 384, 384, 384, 385, 386, - 387, 388, 389, 391, 390, 392, 392, 392, 393, 393, - 393, 393, 393, 393, 394, 395, 396, 398, 397, 399, - 399, 400, 400, 400, 402, 401, 404, 403, 405, 405, - 405, 405, 406, 406, 408, 407, 410, 409, 412, 411, - 413, 413, 413, 414, 414, 414, 414, 414, 414, 415, - 416, 417, 418, 419, 420, 422, 421, 423, 423, 424, - 424, 424, 426, 425, 428, 427, 429, 429, 429, 430, - 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, - 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, - 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, - 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, - 430, 430, 430, 430, 430, 430, 430, 430, 432, 431, + 0, 225, 227, 226, 228, 226, 229, 226, 230, 226, + 231, 226, 232, 226, 233, 226, 234, 226, 235, 226, + 236, 226, 237, 226, 238, 226, 239, 226, 240, 240, + 240, 240, 240, 240, 240, 241, 243, 242, 244, 245, + 245, 246, 246, 246, 248, 247, 249, 249, 250, 250, + 250, 252, 251, 253, 253, 254, 254, 254, 255, 257, + 256, 259, 258, 258, 260, 262, 261, 263, 263, 263, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 277, + 276, 278, 280, 279, 281, 282, 283, 284, 285, 286, + 288, 287, 289, 289, 289, 289, 289, 291, 290, 293, + 292, 294, 295, 297, 296, 298, 298, 298, 298, 299, + 301, 300, 303, 302, 304, 305, 306, 307, 308, 309, + 310, 312, 311, 313, 313, 313, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 316, 315, 318, 317, + 320, 319, 321, 321, 323, 322, 324, 324, 325, 326, + 327, 328, 330, 329, 332, 331, 333, 333, 333, 334, + 334, 336, 335, 338, 337, 340, 339, 342, 341, 343, + 343, 344, 344, 344, 346, 345, 347, 347, 347, 348, + 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, + 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, + 348, 348, 350, 349, 351, 351, 351, 353, 352, 355, + 354, 357, 356, 358, 360, 359, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 371, 370, 372, 372, 372, + 373, 374, 376, 375, 378, 377, 380, 379, 382, 381, + 384, 383, 385, 385, 385, 386, 386, 386, 386, 386, + 387, 388, 389, 390, 391, 393, 392, 394, 394, 394, + 395, 395, 395, 395, 395, 395, 396, 397, 398, 400, + 399, 401, 401, 402, 402, 402, 404, 403, 406, 405, + 407, 407, 407, 407, 408, 408, 410, 409, 412, 411, + 414, 413, 415, 415, 415, 416, 416, 416, 416, 416, + 416, 417, 418, 419, 420, 421, 422, 424, 423, 425, + 425, 426, 426, 426, 428, 427, 430, 429, 431, 431, + 431, 432, 432, 432, 432, 432, 432, 432, 432, 432, + 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, + 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, + 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, + 432, 432, 432, 432, 432, 432, 432, 432, 432, 432, 434, 433, 436, 435, 438, 437, 440, 439, 442, 441, - 444, 443, 445, 446, 447, 449, 448, 450, 450, 450, - 450, 451, 453, 452, 454, 454, 455, 455, 455, 457, - 456, 458, 458, 458, 459, 459, 459, 459, 459, 459, - 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, - 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, - 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, - 459, 459, 459, 459, 459, 459, 459, 459, 461, 460, - 463, 462, 464, 464, 465, 465, 465, 467, 466, 469, - 468, 470, 470, 471, 471, 471, 472, 472, 472, 472, - 472, 472, 472, 472, 472, 472, 473, 474, 475, 477, - 476, 479, 478, 481, 480, 482, 484, 483, 485, 487, - 486, 488, 488, 489, 489, 489, 491, 490, 493, 492, - 494, 494, 495, 495, 495, 496, 496, 496, 496, 496, - 496, 496, 496, 496, 496, 497, 499, 498, 500, 501, - 502, 503, 504, 506, 505, 507, 507, 508, 508, 508, - 510, 509, 512, 511, 513, 513, 513, 514, 514, 514, - 514, 514, 514, 514, 514, 516, 515, 517, 519, 518, - 521, 520, 523, 522, 524, 524, 525, 525, 525, 527, - 526, 529, 528, 530, 530, 531, 531, 531, 532, 532, - 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, - 532, 532, 532, 534, 533, 536, 535, 538, 537, 540, + 444, 443, 446, 445, 447, 448, 449, 451, 450, 452, + 452, 452, 452, 453, 455, 454, 456, 456, 457, 457, + 457, 459, 458, 460, 460, 460, 461, 461, 461, 461, + 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, + 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, + 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, + 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, + 463, 462, 465, 464, 466, 466, 467, 467, 467, 469, + 468, 471, 470, 472, 472, 473, 473, 473, 474, 474, + 474, 474, 474, 474, 474, 474, 474, 474, 475, 476, + 477, 479, 478, 481, 480, 483, 482, 484, 486, 485, + 487, 489, 488, 490, 490, 491, 491, 491, 493, 492, + 495, 494, 496, 496, 497, 497, 497, 498, 498, 498, + 498, 498, 498, 498, 498, 498, 498, 499, 501, 500, + 502, 503, 504, 505, 506, 508, 507, 509, 509, 510, + 510, 510, 512, 511, 514, 513, 515, 515, 515, 516, + 516, 516, 516, 516, 516, 516, 516, 518, 517, 519, + 521, 520, 523, 522, 525, 524, 526, 526, 527, 527, + 527, 529, 528, 531, 530, 532, 532, 533, 533, 533, + 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, + 534, 534, 534, 534, 534, 536, 535, 538, 537, 540, 539, 542, 541, 544, 543, 546, 545, 548, 547, 550, - 549, 552, 551, 554, 553, 556, 555, 558, 557, 559, - 559, 561, 560, 562, 562, 562, 564, 563, 565, 565, - 566, 566, 566, 567, 567, 567, 567, 567, 567, 567, - 567, 567, 567, 567, 567, 567, 567, 567, 567, 568, - 570, 569, 572, 571, 573, 574, 576, 575, 577, 577, - 577, 578, 578, 578, 578, 578, 580, 579, 582, 581, - 584, 583, 585, 585, 585, 586, 586, 586, 586, 586, - 586, 587, 589, 588, 590, 592, 591, 594, 593, 596, - 595, 597, 597, 597, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 599, 601, 600, 602, 604, 603, 605, 606, - 608, 607, 609, 609, 611, 610, 613, 612, 614, 615, - 617, 616, 619, 618, 621, 620, 623, 622, 625, 624, - 627, 626, 628, 628, 628, 629, 629, 631, 630, 632, - 634, 633, 635, 635, 635, 637, 636, 638, 638, 638, - 639, 639, 639, 639, 639, 639, 639, 640, 642, 641, - 644, 643, 645, 645, 645, 647, 646, 648, 648, 648, - 649, 649, 649, 649, 649, 651, 650, 652, 653, 654, - 656, 655, 658, 657, 659, 659, 659, 660, 660, 660, - 660, 660, 661, 662, 663, 664 + 549, 552, 551, 554, 553, 556, 555, 558, 557, 560, + 559, 561, 561, 563, 562, 564, 564, 564, 566, 565, + 567, 567, 568, 568, 568, 569, 569, 569, 569, 569, + 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, + 569, 570, 572, 571, 574, 573, 575, 576, 578, 577, + 579, 579, 579, 580, 580, 580, 580, 580, 582, 581, + 584, 583, 586, 585, 587, 587, 587, 588, 588, 588, + 588, 588, 588, 589, 591, 590, 592, 594, 593, 596, + 595, 598, 597, 599, 599, 599, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 601, 603, 602, 604, 606, 605, + 607, 608, 610, 609, 611, 611, 613, 612, 615, 614, + 616, 617, 619, 618, 621, 620, 623, 622, 625, 624, + 627, 626, 629, 628, 630, 630, 630, 631, 631, 633, + 632, 634, 636, 635, 637, 637, 637, 639, 638, 640, + 640, 640, 641, 641, 641, 641, 641, 641, 641, 642, + 644, 643, 646, 645, 647, 647, 647, 649, 648, 650, + 650, 650, 651, 651, 651, 651, 651, 653, 652, 654, + 655, 656, 658, 657, 660, 659, 661, 661, 661, 662, + 662, 662, 662, 662, 663, 664, 665, 666 }; const signed char @@ -6059,66 +6074,66 @@ namespace isc { namespace dhcp { 1, 1, 3, 2, 0, 4, 1, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 0, 4, 1, 1, 1, 0, 4, 0, 4, - 0, 4, 3, 0, 4, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 0, 4, 1, 1, 1, 3, - 0, 4, 0, 4, 0, 4, 0, 4, 0, 6, - 1, 3, 2, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 0, 6, 1, 3, 2, 1, 1, - 1, 1, 1, 1, 3, 3, 3, 0, 6, 0, - 1, 1, 3, 2, 0, 4, 0, 4, 1, 3, - 2, 1, 1, 1, 0, 4, 0, 4, 0, 6, - 1, 3, 2, 1, 1, 1, 1, 1, 1, 3, - 3, 3, 3, 3, 3, 0, 6, 0, 1, 1, - 3, 2, 0, 4, 0, 4, 1, 3, 2, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 0, 4, - 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, - 0, 4, 3, 3, 3, 0, 4, 1, 1, 1, - 1, 3, 0, 6, 0, 1, 1, 3, 2, 0, - 4, 1, 3, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 0, 6, - 0, 4, 0, 1, 1, 3, 2, 0, 4, 0, - 4, 0, 1, 1, 3, 2, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 3, 1, 0, - 4, 0, 4, 0, 4, 1, 0, 4, 3, 0, - 6, 0, 1, 1, 3, 2, 0, 4, 0, 4, - 0, 1, 1, 3, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 0, 4, 1, 1, - 3, 3, 3, 0, 6, 0, 1, 1, 3, 2, - 0, 4, 0, 4, 1, 3, 2, 1, 1, 1, - 1, 1, 1, 1, 1, 0, 4, 3, 0, 4, - 0, 4, 0, 6, 0, 1, 1, 3, 2, 0, - 4, 0, 4, 0, 1, 1, 3, 2, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 0, 4, 0, 4, 0, 4, 0, - 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, - 4, 0, 4, 0, 4, 0, 4, 0, 6, 1, - 1, 0, 6, 1, 3, 2, 0, 4, 0, 1, - 1, 3, 2, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 0, 4, 0, 4, 3, 3, 0, 6, 1, 3, - 2, 1, 1, 1, 1, 1, 0, 4, 0, 4, + 1, 1, 0, 4, 1, 1, 1, 0, 4, 0, + 4, 0, 4, 3, 0, 4, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 0, 4, 1, 1, 1, + 3, 3, 0, 4, 0, 4, 0, 4, 0, 4, 0, 6, 1, 3, 2, 1, 1, 1, 1, 1, - 1, 3, 0, 4, 3, 0, 4, 0, 6, 0, - 4, 1, 3, 2, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 0, 6, 1, 3, 2, + 1, 1, 1, 1, 1, 1, 3, 3, 3, 0, + 6, 0, 1, 1, 3, 2, 0, 4, 0, 4, + 1, 3, 2, 1, 1, 1, 0, 4, 0, 4, + 0, 6, 1, 3, 2, 1, 1, 1, 1, 1, + 1, 3, 3, 3, 3, 3, 3, 0, 6, 0, + 1, 1, 3, 2, 0, 4, 0, 4, 1, 3, + 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 3, 0, 4, 3, 0, 4, 3, 3, - 0, 4, 1, 1, 0, 4, 0, 4, 3, 3, - 0, 4, 0, 4, 0, 4, 0, 4, 0, 6, - 0, 4, 1, 3, 2, 1, 1, 0, 6, 3, - 0, 6, 1, 3, 2, 0, 4, 1, 3, 2, - 1, 1, 1, 1, 1, 1, 1, 3, 0, 4, - 0, 6, 1, 3, 2, 0, 4, 1, 3, 2, - 1, 1, 1, 1, 1, 0, 4, 3, 3, 3, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, + 0, 4, 0, 4, 3, 3, 3, 0, 4, 1, + 1, 1, 1, 3, 0, 6, 0, 1, 1, 3, + 2, 0, 4, 1, 3, 2, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 6, 0, 4, 0, 1, 1, 3, 2, 0, + 4, 0, 4, 0, 1, 1, 3, 2, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, + 1, 0, 4, 0, 4, 0, 4, 1, 0, 4, + 3, 0, 6, 0, 1, 1, 3, 2, 0, 4, + 0, 4, 0, 1, 1, 3, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 0, 4, + 1, 1, 3, 3, 3, 0, 6, 0, 1, 1, + 3, 2, 0, 4, 0, 4, 1, 3, 2, 1, + 1, 1, 1, 1, 1, 1, 1, 0, 4, 3, + 0, 4, 0, 4, 0, 6, 0, 1, 1, 3, + 2, 0, 4, 0, 4, 0, 1, 1, 3, 2, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 0, 4, 0, 4, 0, + 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, + 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, + 6, 1, 1, 0, 6, 1, 3, 2, 0, 4, + 0, 1, 1, 3, 2, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 0, 4, 0, 4, 3, 3, 0, 6, + 1, 3, 2, 1, 1, 1, 1, 1, 0, 4, 0, 4, 0, 6, 1, 3, 2, 1, 1, 1, - 1, 1, 3, 3, 3, 3 + 1, 1, 1, 3, 0, 4, 3, 0, 4, 0, + 6, 0, 4, 1, 3, 2, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 3, 0, 4, 3, 0, 4, + 3, 3, 0, 4, 1, 1, 0, 4, 0, 4, + 3, 3, 0, 4, 0, 4, 0, 4, 0, 4, + 0, 6, 0, 4, 1, 3, 2, 1, 1, 0, + 6, 3, 0, 6, 1, 3, 2, 0, 4, 1, + 3, 2, 1, 1, 1, 1, 1, 1, 1, 3, + 0, 4, 0, 6, 1, 3, 2, 0, 4, 1, + 3, 2, 1, 1, 1, 1, 1, 0, 4, 3, + 3, 3, 0, 4, 0, 6, 1, 3, 2, 1, + 1, 1, 1, 1, 3, 3, 3, 3 }; @@ -6146,12 +6161,12 @@ namespace isc { namespace dhcp { "\"read-timeout\"", "\"write-timeout\"", "\"tcp-user-timeout\"", "\"max-reconnect-tries\"", "\"reconnect-wait-time\"", "\"on-fail\"", "\"stop-retry-exit\"", "\"serve-retry-exit\"", - "\"serve-retry-continue\"", "\"max-row-errors\"", "\"trust-anchor\"", - "\"cert-file\"", "\"key-file\"", "\"cipher-list\"", "\"valid-lifetime\"", - "\"min-valid-lifetime\"", "\"max-valid-lifetime\"", "\"renew-timer\"", - "\"rebind-timer\"", "\"calculate-tee-times\"", "\"t1-percent\"", - "\"t2-percent\"", "\"cache-threshold\"", "\"cache-max-age\"", - "\"decline-probation-period\"", "\"server-tag\"", + "\"serve-retry-continue\"", "\"retry-on-startup\"", "\"max-row-errors\"", + "\"trust-anchor\"", "\"cert-file\"", "\"key-file\"", "\"cipher-list\"", + "\"valid-lifetime\"", "\"min-valid-lifetime\"", "\"max-valid-lifetime\"", + "\"renew-timer\"", "\"rebind-timer\"", "\"calculate-tee-times\"", + "\"t1-percent\"", "\"t2-percent\"", "\"cache-threshold\"", + "\"cache-max-age\"", "\"decline-probation-period\"", "\"server-tag\"", "\"statistic-default-sample-count\"", "\"statistic-default-sample-age\"", "\"ddns-send-updates\"", "\"ddns-override-no-update\"", "\"ddns-override-client-update\"", "\"ddns-replace-client-name\"", @@ -6238,9 +6253,9 @@ namespace isc { namespace dhcp { "host", "$@43", "port", "name", "$@44", "persist", "lfc_interval", "readonly", "connect_timeout", "read_timeout", "write_timeout", "tcp_user_timeout", "max_reconnect_tries", "reconnect_wait_time", - "on_fail", "$@45", "on_fail_mode", "max_row_errors", "trust_anchor", - "$@46", "cert_file", "$@47", "key_file", "$@48", "cipher_list", "$@49", - "host_reservation_identifiers", "$@50", + "on_fail", "$@45", "on_fail_mode", "retry_on_startup", "max_row_errors", + "trust_anchor", "$@46", "cert_file", "$@47", "key_file", "$@48", + "cipher_list", "$@49", "host_reservation_identifiers", "$@50", "host_reservation_identifiers_list", "host_reservation_identifier", "duid_id", "hw_address_id", "circuit_id", "client_id", "flex_id", "dhcp_multi_threading", "$@51", "multi_threading_params", @@ -6323,93 +6338,93 @@ namespace isc { namespace dhcp { const short Dhcp4Parser::yyrline_[] = { - 0, 319, 319, 319, 320, 320, 321, 321, 322, 322, - 323, 323, 324, 324, 325, 325, 326, 326, 327, 327, - 328, 328, 329, 329, 330, 330, 331, 331, 339, 340, - 341, 342, 343, 344, 345, 348, 353, 353, 364, 367, - 368, 371, 376, 382, 387, 387, 394, 395, 398, 402, - 406, 412, 412, 419, 420, 423, 427, 431, 441, 450, - 450, 465, 465, 479, 482, 488, 488, 497, 498, 499, - 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, - 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, - 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, - 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, - 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, - 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, - 566, 567, 568, 569, 570, 571, 572, 573, 576, 582, - 588, 594, 600, 606, 612, 618, 624, 630, 636, 642, - 642, 651, 657, 657, 666, 672, 678, 684, 690, 696, - 702, 702, 711, 714, 717, 720, 723, 729, 729, 738, - 738, 747, 756, 766, 766, 775, 778, 781, 784, 789, - 795, 795, 804, 804, 813, 819, 825, 831, 837, 843, - 849, 855, 855, 867, 868, 869, 874, 875, 876, 877, - 878, 879, 880, 881, 882, 883, 886, 886, 895, 895, - 906, 906, 914, 915, 918, 918, 926, 928, 932, 938, - 944, 950, 956, 956, 969, 969, 980, 981, 982, 987, - 988, 991, 991, 1010, 1010, 1028, 1028, 1041, 1041, 1052, - 1053, 1056, 1057, 1058, 1063, 1063, 1073, 1074, 1075, 1080, - 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, - 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, - 1101, 1104, 1104, 1112, 1113, 1114, 1117, 1117, 1126, 1126, - 1135, 1135, 1144, 1150, 1150, 1159, 1165, 1171, 1177, 1183, - 1189, 1195, 1201, 1207, 1213, 1213, 1221, 1222, 1223, 1226, - 1232, 1232, 1241, 1241, 1250, 1250, 1259, 1259, 1268, 1268, - 1279, 1280, 1281, 1286, 1287, 1288, 1289, 1290, 1293, 1298, - 1303, 1308, 1313, 1320, 1320, 1333, 1334, 1335, 1340, 1341, - 1342, 1343, 1344, 1345, 1348, 1354, 1360, 1366, 1366, 1377, - 1378, 1381, 1382, 1383, 1388, 1388, 1398, 1398, 1408, 1409, - 1410, 1413, 1416, 1417, 1420, 1420, 1429, 1429, 1438, 1438, - 1450, 1451, 1452, 1457, 1458, 1459, 1460, 1461, 1462, 1465, - 1471, 1477, 1483, 1489, 1495, 1504, 1504, 1518, 1519, 1522, - 1523, 1524, 1533, 1533, 1559, 1559, 1570, 1571, 1572, 1578, - 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, - 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598, - 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, - 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, - 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1629, 1629, - 1638, 1638, 1647, 1647, 1656, 1656, 1665, 1665, 1674, 1674, - 1683, 1683, 1694, 1700, 1706, 1712, 1712, 1720, 1721, 1722, - 1723, 1726, 1734, 1734, 1746, 1747, 1751, 1752, 1753, 1758, - 1758, 1766, 1767, 1768, 1773, 1774, 1775, 1776, 1777, 1778, - 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, - 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, - 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, - 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1823, 1823, - 1837, 1837, 1846, 1847, 1850, 1851, 1852, 1859, 1859, 1874, - 1874, 1888, 1889, 1892, 1893, 1894, 1899, 1900, 1901, 1902, - 1903, 1904, 1905, 1906, 1907, 1908, 1911, 1913, 1919, 1921, - 1921, 1930, 1930, 1939, 1939, 1948, 1950, 1950, 1959, 1969, - 1969, 1982, 1983, 1988, 1989, 1990, 1997, 1997, 2009, 2009, - 2021, 2022, 2027, 2028, 2029, 2036, 2037, 2038, 2039, 2040, - 2041, 2042, 2043, 2044, 2045, 2048, 2050, 2050, 2059, 2061, - 2063, 2069, 2075, 2084, 2084, 2097, 2098, 2101, 2102, 2103, - 2108, 2108, 2118, 2118, 2128, 2129, 2130, 2135, 2136, 2137, - 2138, 2139, 2140, 2141, 2142, 2145, 2145, 2154, 2160, 2160, - 2185, 2185, 2215, 2215, 2226, 2227, 2230, 2231, 2232, 2237, - 2237, 2246, 2246, 2255, 2256, 2259, 2260, 2261, 2267, 2268, - 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, - 2279, 2280, 2281, 2284, 2284, 2293, 2293, 2302, 2302, 2311, - 2311, 2320, 2320, 2331, 2331, 2340, 2340, 2349, 2349, 2358, - 2358, 2367, 2367, 2376, 2376, 2385, 2385, 2399, 2399, 2410, - 2411, 2417, 2417, 2428, 2429, 2430, 2435, 2435, 2445, 2446, - 2449, 2450, 2451, 2456, 2457, 2458, 2459, 2460, 2461, 2462, - 2463, 2464, 2465, 2466, 2467, 2468, 2469, 2470, 2471, 2474, - 2476, 2476, 2485, 2485, 2494, 2502, 2510, 2510, 2521, 2522, - 2523, 2528, 2529, 2530, 2531, 2532, 2535, 2535, 2544, 2544, - 2556, 2556, 2569, 2570, 2571, 2576, 2577, 2578, 2579, 2580, - 2581, 2584, 2590, 2590, 2599, 2605, 2605, 2615, 2615, 2628, - 2628, 2638, 2639, 2640, 2645, 2646, 2647, 2648, 2649, 2650, - 2651, 2652, 2653, 2654, 2655, 2656, 2657, 2658, 2659, 2660, - 2661, 2662, 2665, 2671, 2671, 2680, 2686, 2686, 2695, 2701, - 2707, 2707, 2716, 2717, 2720, 2720, 2730, 2730, 2740, 2747, - 2754, 2754, 2763, 2763, 2773, 2773, 2783, 2783, 2795, 2795, - 2807, 2807, 2817, 2818, 2819, 2825, 2826, 2829, 2829, 2840, - 2848, 2848, 2861, 2862, 2863, 2869, 2869, 2877, 2878, 2879, - 2884, 2885, 2886, 2887, 2888, 2889, 2890, 2893, 2899, 2899, - 2908, 2908, 2919, 2920, 2921, 2926, 2926, 2934, 2935, 2936, - 2941, 2942, 2943, 2944, 2945, 2948, 2948, 2957, 2963, 2969, - 2975, 2975, 2984, 2984, 2995, 2996, 2997, 3002, 3003, 3004, - 3005, 3006, 3009, 3015, 3021, 3027 + 0, 320, 320, 320, 321, 321, 322, 322, 323, 323, + 324, 324, 325, 325, 326, 326, 327, 327, 328, 328, + 329, 329, 330, 330, 331, 331, 332, 332, 340, 341, + 342, 343, 344, 345, 346, 349, 354, 354, 365, 368, + 369, 372, 377, 383, 388, 388, 395, 396, 399, 403, + 407, 413, 413, 420, 421, 424, 428, 432, 442, 451, + 451, 466, 466, 480, 483, 489, 489, 498, 499, 500, + 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, + 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, + 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, + 567, 568, 569, 570, 571, 572, 573, 574, 577, 583, + 589, 595, 601, 607, 613, 619, 625, 631, 637, 643, + 643, 652, 658, 658, 667, 673, 679, 685, 691, 697, + 703, 703, 712, 715, 718, 721, 724, 730, 730, 739, + 739, 748, 757, 767, 767, 776, 779, 782, 785, 790, + 796, 796, 805, 805, 814, 820, 826, 832, 838, 844, + 850, 856, 856, 868, 869, 870, 875, 876, 877, 878, + 879, 880, 881, 882, 883, 884, 887, 887, 896, 896, + 907, 907, 915, 916, 919, 919, 927, 929, 933, 939, + 945, 951, 957, 957, 970, 970, 981, 982, 983, 988, + 989, 992, 992, 1011, 1011, 1029, 1029, 1042, 1042, 1053, + 1054, 1057, 1058, 1059, 1064, 1064, 1074, 1075, 1076, 1081, + 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, + 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, + 1102, 1103, 1106, 1106, 1114, 1115, 1116, 1119, 1119, 1128, + 1128, 1137, 1137, 1146, 1152, 1152, 1161, 1167, 1173, 1179, + 1185, 1191, 1197, 1203, 1209, 1215, 1215, 1223, 1224, 1225, + 1228, 1234, 1240, 1240, 1249, 1249, 1258, 1258, 1267, 1267, + 1276, 1276, 1287, 1288, 1289, 1294, 1295, 1296, 1297, 1298, + 1301, 1306, 1311, 1316, 1321, 1328, 1328, 1341, 1342, 1343, + 1348, 1349, 1350, 1351, 1352, 1353, 1356, 1362, 1368, 1374, + 1374, 1385, 1386, 1389, 1390, 1391, 1396, 1396, 1406, 1406, + 1416, 1417, 1418, 1421, 1424, 1425, 1428, 1428, 1437, 1437, + 1446, 1446, 1458, 1459, 1460, 1465, 1466, 1467, 1468, 1469, + 1470, 1473, 1479, 1485, 1491, 1497, 1503, 1512, 1512, 1526, + 1527, 1530, 1531, 1532, 1541, 1541, 1567, 1567, 1578, 1579, + 1580, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, + 1595, 1596, 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604, + 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, + 1615, 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, + 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, + 1637, 1637, 1646, 1646, 1655, 1655, 1664, 1664, 1673, 1673, + 1682, 1682, 1691, 1691, 1702, 1708, 1714, 1720, 1720, 1728, + 1729, 1730, 1731, 1734, 1742, 1742, 1754, 1755, 1759, 1760, + 1761, 1766, 1766, 1774, 1775, 1776, 1781, 1782, 1783, 1784, + 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, + 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, + 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, + 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, + 1831, 1831, 1845, 1845, 1854, 1855, 1858, 1859, 1860, 1867, + 1867, 1882, 1882, 1896, 1897, 1900, 1901, 1902, 1907, 1908, + 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1919, 1921, + 1927, 1929, 1929, 1938, 1938, 1947, 1947, 1956, 1958, 1958, + 1967, 1977, 1977, 1990, 1991, 1996, 1997, 1998, 2005, 2005, + 2017, 2017, 2029, 2030, 2035, 2036, 2037, 2044, 2045, 2046, + 2047, 2048, 2049, 2050, 2051, 2052, 2053, 2056, 2058, 2058, + 2067, 2069, 2071, 2077, 2083, 2092, 2092, 2105, 2106, 2109, + 2110, 2111, 2116, 2116, 2126, 2126, 2136, 2137, 2138, 2143, + 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2153, 2153, 2162, + 2168, 2168, 2193, 2193, 2223, 2223, 2234, 2235, 2238, 2239, + 2240, 2245, 2245, 2254, 2254, 2263, 2264, 2267, 2268, 2269, + 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2284, + 2285, 2286, 2287, 2288, 2289, 2292, 2292, 2301, 2301, 2310, + 2310, 2319, 2319, 2328, 2328, 2339, 2339, 2348, 2348, 2357, + 2357, 2366, 2366, 2375, 2375, 2384, 2384, 2393, 2393, 2407, + 2407, 2418, 2419, 2425, 2425, 2436, 2437, 2438, 2443, 2443, + 2453, 2454, 2457, 2458, 2459, 2464, 2465, 2466, 2467, 2468, + 2469, 2470, 2471, 2472, 2473, 2474, 2475, 2476, 2477, 2478, + 2479, 2482, 2484, 2484, 2493, 2493, 2502, 2510, 2518, 2518, + 2529, 2530, 2531, 2536, 2537, 2538, 2539, 2540, 2543, 2543, + 2552, 2552, 2564, 2564, 2577, 2578, 2579, 2584, 2585, 2586, + 2587, 2588, 2589, 2592, 2598, 2598, 2607, 2613, 2613, 2623, + 2623, 2636, 2636, 2646, 2647, 2648, 2653, 2654, 2655, 2656, + 2657, 2658, 2659, 2660, 2661, 2662, 2663, 2664, 2665, 2666, + 2667, 2668, 2669, 2670, 2673, 2679, 2679, 2688, 2694, 2694, + 2703, 2709, 2715, 2715, 2724, 2725, 2728, 2728, 2738, 2738, + 2748, 2755, 2762, 2762, 2771, 2771, 2781, 2781, 2791, 2791, + 2803, 2803, 2815, 2815, 2825, 2826, 2827, 2833, 2834, 2837, + 2837, 2848, 2856, 2856, 2869, 2870, 2871, 2877, 2877, 2885, + 2886, 2887, 2892, 2893, 2894, 2895, 2896, 2897, 2898, 2901, + 2907, 2907, 2916, 2916, 2927, 2928, 2929, 2934, 2934, 2942, + 2943, 2944, 2949, 2950, 2951, 2952, 2953, 2956, 2956, 2965, + 2971, 2977, 2983, 2983, 2992, 2992, 3003, 3004, 3005, 3010, + 3011, 3012, 3013, 3014, 3017, 3023, 3029, 3035 }; void @@ -6442,9 +6457,9 @@ namespace isc { namespace dhcp { #line 14 "dhcp4_parser.yy" } } // isc::dhcp -#line 6446 "dhcp4_parser.cc" +#line 6461 "dhcp4_parser.cc" -#line 3033 "dhcp4_parser.yy" +#line 3041 "dhcp4_parser.yy" void diff --git a/src/bin/dhcp4/dhcp4_parser.h b/src/bin/dhcp4/dhcp4_parser.h index 97b6230626..f61bb44999 100644 --- a/src/bin/dhcp4/dhcp4_parser.h +++ b/src/bin/dhcp4/dhcp4_parser.h @@ -557,170 +557,171 @@ namespace isc { namespace dhcp { TOKEN_STOP_RETRY_EXIT = 312, // "stop-retry-exit" TOKEN_SERVE_RETRY_EXIT = 313, // "serve-retry-exit" TOKEN_SERVE_RETRY_CONTINUE = 314, // "serve-retry-continue" - TOKEN_MAX_ROW_ERRORS = 315, // "max-row-errors" - TOKEN_TRUST_ANCHOR = 316, // "trust-anchor" - TOKEN_CERT_FILE = 317, // "cert-file" - TOKEN_KEY_FILE = 318, // "key-file" - TOKEN_CIPHER_LIST = 319, // "cipher-list" - TOKEN_VALID_LIFETIME = 320, // "valid-lifetime" - TOKEN_MIN_VALID_LIFETIME = 321, // "min-valid-lifetime" - TOKEN_MAX_VALID_LIFETIME = 322, // "max-valid-lifetime" - TOKEN_RENEW_TIMER = 323, // "renew-timer" - TOKEN_REBIND_TIMER = 324, // "rebind-timer" - TOKEN_CALCULATE_TEE_TIMES = 325, // "calculate-tee-times" - TOKEN_T1_PERCENT = 326, // "t1-percent" - TOKEN_T2_PERCENT = 327, // "t2-percent" - TOKEN_CACHE_THRESHOLD = 328, // "cache-threshold" - TOKEN_CACHE_MAX_AGE = 329, // "cache-max-age" - TOKEN_DECLINE_PROBATION_PERIOD = 330, // "decline-probation-period" - TOKEN_SERVER_TAG = 331, // "server-tag" - TOKEN_STATISTIC_DEFAULT_SAMPLE_COUNT = 332, // "statistic-default-sample-count" - TOKEN_STATISTIC_DEFAULT_SAMPLE_AGE = 333, // "statistic-default-sample-age" - TOKEN_DDNS_SEND_UPDATES = 334, // "ddns-send-updates" - TOKEN_DDNS_OVERRIDE_NO_UPDATE = 335, // "ddns-override-no-update" - TOKEN_DDNS_OVERRIDE_CLIENT_UPDATE = 336, // "ddns-override-client-update" - TOKEN_DDNS_REPLACE_CLIENT_NAME = 337, // "ddns-replace-client-name" - TOKEN_DDNS_GENERATED_PREFIX = 338, // "ddns-generated-prefix" - TOKEN_DDNS_QUALIFYING_SUFFIX = 339, // "ddns-qualifying-suffix" - TOKEN_DDNS_UPDATE_ON_RENEW = 340, // "ddns-update-on-renew" - TOKEN_DDNS_USE_CONFLICT_RESOLUTION = 341, // "ddns-use-conflict-resolution" - TOKEN_DDNS_TTL_PERCENT = 342, // "ddns-ttl-percent" - TOKEN_STORE_EXTENDED_INFO = 343, // "store-extended-info" - TOKEN_SUBNET4 = 344, // "subnet4" - TOKEN_SUBNET_4O6_INTERFACE = 345, // "4o6-interface" - TOKEN_SUBNET_4O6_INTERFACE_ID = 346, // "4o6-interface-id" - TOKEN_SUBNET_4O6_SUBNET = 347, // "4o6-subnet" - TOKEN_OPTION_DEF = 348, // "option-def" - TOKEN_OPTION_DATA = 349, // "option-data" - TOKEN_NAME = 350, // "name" - TOKEN_DATA = 351, // "data" - TOKEN_CODE = 352, // "code" - TOKEN_SPACE = 353, // "space" - TOKEN_CSV_FORMAT = 354, // "csv-format" - TOKEN_ALWAYS_SEND = 355, // "always-send" - TOKEN_NEVER_SEND = 356, // "never-send" - TOKEN_RECORD_TYPES = 357, // "record-types" - TOKEN_ENCAPSULATE = 358, // "encapsulate" - TOKEN_ARRAY = 359, // "array" - TOKEN_PARKED_PACKET_LIMIT = 360, // "parked-packet-limit" - TOKEN_ALLOCATOR = 361, // "allocator" - TOKEN_DDNS_CONFLICT_RESOLUTION_MODE = 362, // "ddns-conflict-resolution-mode" - TOKEN_CHECK_WITH_DHCID = 363, // "check-with-dhcid" - TOKEN_NO_CHECK_WITH_DHCID = 364, // "no-check-with-dhcid" - TOKEN_CHECK_EXISTS_WITH_DHCID = 365, // "check-exists-with-dhcid" - TOKEN_NO_CHECK_WITHOUT_DHCID = 366, // "no-check-without-dhcid" - TOKEN_SHARED_NETWORKS = 367, // "shared-networks" - TOKEN_POOLS = 368, // "pools" - TOKEN_POOL = 369, // "pool" - TOKEN_USER_CONTEXT = 370, // "user-context" - TOKEN_COMMENT = 371, // "comment" - TOKEN_SUBNET = 372, // "subnet" - TOKEN_INTERFACE = 373, // "interface" - TOKEN_ID = 374, // "id" - TOKEN_RESERVATION_MODE = 375, // "reservation-mode" - TOKEN_DISABLED = 376, // "disabled" - TOKEN_OUT_OF_POOL = 377, // "out-of-pool" - TOKEN_GLOBAL = 378, // "global" - TOKEN_ALL = 379, // "all" - TOKEN_RESERVATIONS_GLOBAL = 380, // "reservations-global" - TOKEN_RESERVATIONS_IN_SUBNET = 381, // "reservations-in-subnet" - TOKEN_RESERVATIONS_OUT_OF_POOL = 382, // "reservations-out-of-pool" - TOKEN_HOST_RESERVATION_IDENTIFIERS = 383, // "host-reservation-identifiers" - TOKEN_CLIENT_CLASSES = 384, // "client-classes" - TOKEN_REQUIRE_CLIENT_CLASSES = 385, // "require-client-classes" - TOKEN_TEST = 386, // "test" - TOKEN_TEMPLATE_TEST = 387, // "template-test" - TOKEN_ONLY_IF_REQUIRED = 388, // "only-if-required" - TOKEN_CLIENT_CLASS = 389, // "client-class" - TOKEN_POOL_ID = 390, // "pool-id" - TOKEN_RESERVATIONS = 391, // "reservations" - TOKEN_DUID = 392, // "duid" - TOKEN_HW_ADDRESS = 393, // "hw-address" - TOKEN_CIRCUIT_ID = 394, // "circuit-id" - TOKEN_CLIENT_ID = 395, // "client-id" - TOKEN_HOSTNAME = 396, // "hostname" - TOKEN_FLEX_ID = 397, // "flex-id" - TOKEN_RELAY = 398, // "relay" - TOKEN_IP_ADDRESS = 399, // "ip-address" - TOKEN_IP_ADDRESSES = 400, // "ip-addresses" - TOKEN_HOOKS_LIBRARIES = 401, // "hooks-libraries" - TOKEN_LIBRARY = 402, // "library" - TOKEN_PARAMETERS = 403, // "parameters" - TOKEN_EXPIRED_LEASES_PROCESSING = 404, // "expired-leases-processing" - TOKEN_RECLAIM_TIMER_WAIT_TIME = 405, // "reclaim-timer-wait-time" - TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 406, // "flush-reclaimed-timer-wait-time" - TOKEN_HOLD_RECLAIMED_TIME = 407, // "hold-reclaimed-time" - TOKEN_MAX_RECLAIM_LEASES = 408, // "max-reclaim-leases" - TOKEN_MAX_RECLAIM_TIME = 409, // "max-reclaim-time" - TOKEN_UNWARNED_RECLAIM_CYCLES = 410, // "unwarned-reclaim-cycles" - TOKEN_DHCP4O6_PORT = 411, // "dhcp4o6-port" - TOKEN_DHCP_MULTI_THREADING = 412, // "multi-threading" - TOKEN_ENABLE_MULTI_THREADING = 413, // "enable-multi-threading" - TOKEN_THREAD_POOL_SIZE = 414, // "thread-pool-size" - TOKEN_PACKET_QUEUE_SIZE = 415, // "packet-queue-size" - TOKEN_CONTROL_SOCKET = 416, // "control-socket" - TOKEN_SOCKET_TYPE = 417, // "socket-type" - TOKEN_SOCKET_NAME = 418, // "socket-name" - TOKEN_DHCP_QUEUE_CONTROL = 419, // "dhcp-queue-control" - TOKEN_ENABLE_QUEUE = 420, // "enable-queue" - TOKEN_QUEUE_TYPE = 421, // "queue-type" - TOKEN_CAPACITY = 422, // "capacity" - TOKEN_DHCP_DDNS = 423, // "dhcp-ddns" - TOKEN_ENABLE_UPDATES = 424, // "enable-updates" - TOKEN_QUALIFYING_SUFFIX = 425, // "qualifying-suffix" - TOKEN_SERVER_IP = 426, // "server-ip" - TOKEN_SERVER_PORT = 427, // "server-port" - TOKEN_SENDER_IP = 428, // "sender-ip" - TOKEN_SENDER_PORT = 429, // "sender-port" - TOKEN_MAX_QUEUE_SIZE = 430, // "max-queue-size" - TOKEN_NCR_PROTOCOL = 431, // "ncr-protocol" - TOKEN_NCR_FORMAT = 432, // "ncr-format" - TOKEN_OVERRIDE_NO_UPDATE = 433, // "override-no-update" - TOKEN_OVERRIDE_CLIENT_UPDATE = 434, // "override-client-update" - TOKEN_REPLACE_CLIENT_NAME = 435, // "replace-client-name" - TOKEN_GENERATED_PREFIX = 436, // "generated-prefix" - TOKEN_TCP = 437, // "tcp" - TOKEN_JSON = 438, // "JSON" - TOKEN_WHEN_PRESENT = 439, // "when-present" - TOKEN_NEVER = 440, // "never" - TOKEN_ALWAYS = 441, // "always" - TOKEN_WHEN_NOT_PRESENT = 442, // "when-not-present" - TOKEN_HOSTNAME_CHAR_SET = 443, // "hostname-char-set" - TOKEN_HOSTNAME_CHAR_REPLACEMENT = 444, // "hostname-char-replacement" - TOKEN_EARLY_GLOBAL_RESERVATIONS_LOOKUP = 445, // "early-global-reservations-lookup" - TOKEN_IP_RESERVATIONS_UNIQUE = 446, // "ip-reservations-unique" - TOKEN_RESERVATIONS_LOOKUP_FIRST = 447, // "reservations-lookup-first" - TOKEN_LOGGERS = 448, // "loggers" - TOKEN_OUTPUT_OPTIONS = 449, // "output-options" - TOKEN_OUTPUT = 450, // "output" - TOKEN_DEBUGLEVEL = 451, // "debuglevel" - TOKEN_SEVERITY = 452, // "severity" - TOKEN_FLUSH = 453, // "flush" - TOKEN_MAXSIZE = 454, // "maxsize" - TOKEN_MAXVER = 455, // "maxver" - TOKEN_PATTERN = 456, // "pattern" - TOKEN_COMPATIBILITY = 457, // "compatibility" - TOKEN_LENIENT_OPTION_PARSING = 458, // "lenient-option-parsing" - TOKEN_IGNORE_DHCP_SERVER_ID = 459, // "ignore-dhcp-server-identifier" - TOKEN_IGNORE_RAI_LINK_SEL = 460, // "ignore-rai-link-selection" - TOKEN_EXCLUDE_FIRST_LAST_24 = 461, // "exclude-first-last-24" - TOKEN_TOPLEVEL_JSON = 462, // TOPLEVEL_JSON - TOKEN_TOPLEVEL_DHCP4 = 463, // TOPLEVEL_DHCP4 - TOKEN_SUB_DHCP4 = 464, // SUB_DHCP4 - TOKEN_SUB_INTERFACES4 = 465, // SUB_INTERFACES4 - TOKEN_SUB_SUBNET4 = 466, // SUB_SUBNET4 - TOKEN_SUB_POOL4 = 467, // SUB_POOL4 - TOKEN_SUB_RESERVATION = 468, // SUB_RESERVATION - TOKEN_SUB_OPTION_DEFS = 469, // SUB_OPTION_DEFS - TOKEN_SUB_OPTION_DEF = 470, // SUB_OPTION_DEF - TOKEN_SUB_OPTION_DATA = 471, // SUB_OPTION_DATA - TOKEN_SUB_HOOKS_LIBRARY = 472, // SUB_HOOKS_LIBRARY - TOKEN_SUB_DHCP_DDNS = 473, // SUB_DHCP_DDNS - TOKEN_SUB_CONFIG_CONTROL = 474, // SUB_CONFIG_CONTROL - TOKEN_STRING = 475, // "constant string" - TOKEN_INTEGER = 476, // "integer" - TOKEN_FLOAT = 477, // "floating point" - TOKEN_BOOLEAN = 478 // "boolean" + TOKEN_RETRY_ON_STARTUP = 315, // "retry-on-startup" + TOKEN_MAX_ROW_ERRORS = 316, // "max-row-errors" + TOKEN_TRUST_ANCHOR = 317, // "trust-anchor" + TOKEN_CERT_FILE = 318, // "cert-file" + TOKEN_KEY_FILE = 319, // "key-file" + TOKEN_CIPHER_LIST = 320, // "cipher-list" + TOKEN_VALID_LIFETIME = 321, // "valid-lifetime" + TOKEN_MIN_VALID_LIFETIME = 322, // "min-valid-lifetime" + TOKEN_MAX_VALID_LIFETIME = 323, // "max-valid-lifetime" + TOKEN_RENEW_TIMER = 324, // "renew-timer" + TOKEN_REBIND_TIMER = 325, // "rebind-timer" + TOKEN_CALCULATE_TEE_TIMES = 326, // "calculate-tee-times" + TOKEN_T1_PERCENT = 327, // "t1-percent" + TOKEN_T2_PERCENT = 328, // "t2-percent" + TOKEN_CACHE_THRESHOLD = 329, // "cache-threshold" + TOKEN_CACHE_MAX_AGE = 330, // "cache-max-age" + TOKEN_DECLINE_PROBATION_PERIOD = 331, // "decline-probation-period" + TOKEN_SERVER_TAG = 332, // "server-tag" + TOKEN_STATISTIC_DEFAULT_SAMPLE_COUNT = 333, // "statistic-default-sample-count" + TOKEN_STATISTIC_DEFAULT_SAMPLE_AGE = 334, // "statistic-default-sample-age" + TOKEN_DDNS_SEND_UPDATES = 335, // "ddns-send-updates" + TOKEN_DDNS_OVERRIDE_NO_UPDATE = 336, // "ddns-override-no-update" + TOKEN_DDNS_OVERRIDE_CLIENT_UPDATE = 337, // "ddns-override-client-update" + TOKEN_DDNS_REPLACE_CLIENT_NAME = 338, // "ddns-replace-client-name" + TOKEN_DDNS_GENERATED_PREFIX = 339, // "ddns-generated-prefix" + TOKEN_DDNS_QUALIFYING_SUFFIX = 340, // "ddns-qualifying-suffix" + TOKEN_DDNS_UPDATE_ON_RENEW = 341, // "ddns-update-on-renew" + TOKEN_DDNS_USE_CONFLICT_RESOLUTION = 342, // "ddns-use-conflict-resolution" + TOKEN_DDNS_TTL_PERCENT = 343, // "ddns-ttl-percent" + TOKEN_STORE_EXTENDED_INFO = 344, // "store-extended-info" + TOKEN_SUBNET4 = 345, // "subnet4" + TOKEN_SUBNET_4O6_INTERFACE = 346, // "4o6-interface" + TOKEN_SUBNET_4O6_INTERFACE_ID = 347, // "4o6-interface-id" + TOKEN_SUBNET_4O6_SUBNET = 348, // "4o6-subnet" + TOKEN_OPTION_DEF = 349, // "option-def" + TOKEN_OPTION_DATA = 350, // "option-data" + TOKEN_NAME = 351, // "name" + TOKEN_DATA = 352, // "data" + TOKEN_CODE = 353, // "code" + TOKEN_SPACE = 354, // "space" + TOKEN_CSV_FORMAT = 355, // "csv-format" + TOKEN_ALWAYS_SEND = 356, // "always-send" + TOKEN_NEVER_SEND = 357, // "never-send" + TOKEN_RECORD_TYPES = 358, // "record-types" + TOKEN_ENCAPSULATE = 359, // "encapsulate" + TOKEN_ARRAY = 360, // "array" + TOKEN_PARKED_PACKET_LIMIT = 361, // "parked-packet-limit" + TOKEN_ALLOCATOR = 362, // "allocator" + TOKEN_DDNS_CONFLICT_RESOLUTION_MODE = 363, // "ddns-conflict-resolution-mode" + TOKEN_CHECK_WITH_DHCID = 364, // "check-with-dhcid" + TOKEN_NO_CHECK_WITH_DHCID = 365, // "no-check-with-dhcid" + TOKEN_CHECK_EXISTS_WITH_DHCID = 366, // "check-exists-with-dhcid" + TOKEN_NO_CHECK_WITHOUT_DHCID = 367, // "no-check-without-dhcid" + TOKEN_SHARED_NETWORKS = 368, // "shared-networks" + TOKEN_POOLS = 369, // "pools" + TOKEN_POOL = 370, // "pool" + TOKEN_USER_CONTEXT = 371, // "user-context" + TOKEN_COMMENT = 372, // "comment" + TOKEN_SUBNET = 373, // "subnet" + TOKEN_INTERFACE = 374, // "interface" + TOKEN_ID = 375, // "id" + TOKEN_RESERVATION_MODE = 376, // "reservation-mode" + TOKEN_DISABLED = 377, // "disabled" + TOKEN_OUT_OF_POOL = 378, // "out-of-pool" + TOKEN_GLOBAL = 379, // "global" + TOKEN_ALL = 380, // "all" + TOKEN_RESERVATIONS_GLOBAL = 381, // "reservations-global" + TOKEN_RESERVATIONS_IN_SUBNET = 382, // "reservations-in-subnet" + TOKEN_RESERVATIONS_OUT_OF_POOL = 383, // "reservations-out-of-pool" + TOKEN_HOST_RESERVATION_IDENTIFIERS = 384, // "host-reservation-identifiers" + TOKEN_CLIENT_CLASSES = 385, // "client-classes" + TOKEN_REQUIRE_CLIENT_CLASSES = 386, // "require-client-classes" + TOKEN_TEST = 387, // "test" + TOKEN_TEMPLATE_TEST = 388, // "template-test" + TOKEN_ONLY_IF_REQUIRED = 389, // "only-if-required" + TOKEN_CLIENT_CLASS = 390, // "client-class" + TOKEN_POOL_ID = 391, // "pool-id" + TOKEN_RESERVATIONS = 392, // "reservations" + TOKEN_DUID = 393, // "duid" + TOKEN_HW_ADDRESS = 394, // "hw-address" + TOKEN_CIRCUIT_ID = 395, // "circuit-id" + TOKEN_CLIENT_ID = 396, // "client-id" + TOKEN_HOSTNAME = 397, // "hostname" + TOKEN_FLEX_ID = 398, // "flex-id" + TOKEN_RELAY = 399, // "relay" + TOKEN_IP_ADDRESS = 400, // "ip-address" + TOKEN_IP_ADDRESSES = 401, // "ip-addresses" + TOKEN_HOOKS_LIBRARIES = 402, // "hooks-libraries" + TOKEN_LIBRARY = 403, // "library" + TOKEN_PARAMETERS = 404, // "parameters" + TOKEN_EXPIRED_LEASES_PROCESSING = 405, // "expired-leases-processing" + TOKEN_RECLAIM_TIMER_WAIT_TIME = 406, // "reclaim-timer-wait-time" + TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 407, // "flush-reclaimed-timer-wait-time" + TOKEN_HOLD_RECLAIMED_TIME = 408, // "hold-reclaimed-time" + TOKEN_MAX_RECLAIM_LEASES = 409, // "max-reclaim-leases" + TOKEN_MAX_RECLAIM_TIME = 410, // "max-reclaim-time" + TOKEN_UNWARNED_RECLAIM_CYCLES = 411, // "unwarned-reclaim-cycles" + TOKEN_DHCP4O6_PORT = 412, // "dhcp4o6-port" + TOKEN_DHCP_MULTI_THREADING = 413, // "multi-threading" + TOKEN_ENABLE_MULTI_THREADING = 414, // "enable-multi-threading" + TOKEN_THREAD_POOL_SIZE = 415, // "thread-pool-size" + TOKEN_PACKET_QUEUE_SIZE = 416, // "packet-queue-size" + TOKEN_CONTROL_SOCKET = 417, // "control-socket" + TOKEN_SOCKET_TYPE = 418, // "socket-type" + TOKEN_SOCKET_NAME = 419, // "socket-name" + TOKEN_DHCP_QUEUE_CONTROL = 420, // "dhcp-queue-control" + TOKEN_ENABLE_QUEUE = 421, // "enable-queue" + TOKEN_QUEUE_TYPE = 422, // "queue-type" + TOKEN_CAPACITY = 423, // "capacity" + TOKEN_DHCP_DDNS = 424, // "dhcp-ddns" + TOKEN_ENABLE_UPDATES = 425, // "enable-updates" + TOKEN_QUALIFYING_SUFFIX = 426, // "qualifying-suffix" + TOKEN_SERVER_IP = 427, // "server-ip" + TOKEN_SERVER_PORT = 428, // "server-port" + TOKEN_SENDER_IP = 429, // "sender-ip" + TOKEN_SENDER_PORT = 430, // "sender-port" + TOKEN_MAX_QUEUE_SIZE = 431, // "max-queue-size" + TOKEN_NCR_PROTOCOL = 432, // "ncr-protocol" + TOKEN_NCR_FORMAT = 433, // "ncr-format" + TOKEN_OVERRIDE_NO_UPDATE = 434, // "override-no-update" + TOKEN_OVERRIDE_CLIENT_UPDATE = 435, // "override-client-update" + TOKEN_REPLACE_CLIENT_NAME = 436, // "replace-client-name" + TOKEN_GENERATED_PREFIX = 437, // "generated-prefix" + TOKEN_TCP = 438, // "tcp" + TOKEN_JSON = 439, // "JSON" + TOKEN_WHEN_PRESENT = 440, // "when-present" + TOKEN_NEVER = 441, // "never" + TOKEN_ALWAYS = 442, // "always" + TOKEN_WHEN_NOT_PRESENT = 443, // "when-not-present" + TOKEN_HOSTNAME_CHAR_SET = 444, // "hostname-char-set" + TOKEN_HOSTNAME_CHAR_REPLACEMENT = 445, // "hostname-char-replacement" + TOKEN_EARLY_GLOBAL_RESERVATIONS_LOOKUP = 446, // "early-global-reservations-lookup" + TOKEN_IP_RESERVATIONS_UNIQUE = 447, // "ip-reservations-unique" + TOKEN_RESERVATIONS_LOOKUP_FIRST = 448, // "reservations-lookup-first" + TOKEN_LOGGERS = 449, // "loggers" + TOKEN_OUTPUT_OPTIONS = 450, // "output-options" + TOKEN_OUTPUT = 451, // "output" + TOKEN_DEBUGLEVEL = 452, // "debuglevel" + TOKEN_SEVERITY = 453, // "severity" + TOKEN_FLUSH = 454, // "flush" + TOKEN_MAXSIZE = 455, // "maxsize" + TOKEN_MAXVER = 456, // "maxver" + TOKEN_PATTERN = 457, // "pattern" + TOKEN_COMPATIBILITY = 458, // "compatibility" + TOKEN_LENIENT_OPTION_PARSING = 459, // "lenient-option-parsing" + TOKEN_IGNORE_DHCP_SERVER_ID = 460, // "ignore-dhcp-server-identifier" + TOKEN_IGNORE_RAI_LINK_SEL = 461, // "ignore-rai-link-selection" + TOKEN_EXCLUDE_FIRST_LAST_24 = 462, // "exclude-first-last-24" + TOKEN_TOPLEVEL_JSON = 463, // TOPLEVEL_JSON + TOKEN_TOPLEVEL_DHCP4 = 464, // TOPLEVEL_DHCP4 + TOKEN_SUB_DHCP4 = 465, // SUB_DHCP4 + TOKEN_SUB_INTERFACES4 = 466, // SUB_INTERFACES4 + TOKEN_SUB_SUBNET4 = 467, // SUB_SUBNET4 + TOKEN_SUB_POOL4 = 468, // SUB_POOL4 + TOKEN_SUB_RESERVATION = 469, // SUB_RESERVATION + TOKEN_SUB_OPTION_DEFS = 470, // SUB_OPTION_DEFS + TOKEN_SUB_OPTION_DEF = 471, // SUB_OPTION_DEF + TOKEN_SUB_OPTION_DATA = 472, // SUB_OPTION_DATA + TOKEN_SUB_HOOKS_LIBRARY = 473, // SUB_HOOKS_LIBRARY + TOKEN_SUB_DHCP_DDNS = 474, // SUB_DHCP_DDNS + TOKEN_SUB_CONFIG_CONTROL = 475, // SUB_CONFIG_CONTROL + TOKEN_STRING = 476, // "constant string" + TOKEN_INTEGER = 477, // "integer" + TOKEN_FLOAT = 478, // "floating point" + TOKEN_BOOLEAN = 479 // "boolean" }; /// Backward compatibility alias (Bison 3.6). typedef token_kind_type yytokentype; @@ -737,7 +738,7 @@ namespace isc { namespace dhcp { { enum symbol_kind_type { - YYNTOKENS = 224, ///< Number of tokens. + YYNTOKENS = 225, ///< Number of tokens. S_YYEMPTY = -2, S_YYEOF = 0, // "end of file" S_YYerror = 1, // error @@ -799,611 +800,613 @@ namespace isc { namespace dhcp { S_STOP_RETRY_EXIT = 57, // "stop-retry-exit" S_SERVE_RETRY_EXIT = 58, // "serve-retry-exit" S_SERVE_RETRY_CONTINUE = 59, // "serve-retry-continue" - S_MAX_ROW_ERRORS = 60, // "max-row-errors" - S_TRUST_ANCHOR = 61, // "trust-anchor" - S_CERT_FILE = 62, // "cert-file" - S_KEY_FILE = 63, // "key-file" - S_CIPHER_LIST = 64, // "cipher-list" - S_VALID_LIFETIME = 65, // "valid-lifetime" - S_MIN_VALID_LIFETIME = 66, // "min-valid-lifetime" - S_MAX_VALID_LIFETIME = 67, // "max-valid-lifetime" - S_RENEW_TIMER = 68, // "renew-timer" - S_REBIND_TIMER = 69, // "rebind-timer" - S_CALCULATE_TEE_TIMES = 70, // "calculate-tee-times" - S_T1_PERCENT = 71, // "t1-percent" - S_T2_PERCENT = 72, // "t2-percent" - S_CACHE_THRESHOLD = 73, // "cache-threshold" - S_CACHE_MAX_AGE = 74, // "cache-max-age" - S_DECLINE_PROBATION_PERIOD = 75, // "decline-probation-period" - S_SERVER_TAG = 76, // "server-tag" - S_STATISTIC_DEFAULT_SAMPLE_COUNT = 77, // "statistic-default-sample-count" - S_STATISTIC_DEFAULT_SAMPLE_AGE = 78, // "statistic-default-sample-age" - S_DDNS_SEND_UPDATES = 79, // "ddns-send-updates" - S_DDNS_OVERRIDE_NO_UPDATE = 80, // "ddns-override-no-update" - S_DDNS_OVERRIDE_CLIENT_UPDATE = 81, // "ddns-override-client-update" - S_DDNS_REPLACE_CLIENT_NAME = 82, // "ddns-replace-client-name" - S_DDNS_GENERATED_PREFIX = 83, // "ddns-generated-prefix" - S_DDNS_QUALIFYING_SUFFIX = 84, // "ddns-qualifying-suffix" - S_DDNS_UPDATE_ON_RENEW = 85, // "ddns-update-on-renew" - S_DDNS_USE_CONFLICT_RESOLUTION = 86, // "ddns-use-conflict-resolution" - S_DDNS_TTL_PERCENT = 87, // "ddns-ttl-percent" - S_STORE_EXTENDED_INFO = 88, // "store-extended-info" - S_SUBNET4 = 89, // "subnet4" - S_SUBNET_4O6_INTERFACE = 90, // "4o6-interface" - S_SUBNET_4O6_INTERFACE_ID = 91, // "4o6-interface-id" - S_SUBNET_4O6_SUBNET = 92, // "4o6-subnet" - S_OPTION_DEF = 93, // "option-def" - S_OPTION_DATA = 94, // "option-data" - S_NAME = 95, // "name" - S_DATA = 96, // "data" - S_CODE = 97, // "code" - S_SPACE = 98, // "space" - S_CSV_FORMAT = 99, // "csv-format" - S_ALWAYS_SEND = 100, // "always-send" - S_NEVER_SEND = 101, // "never-send" - S_RECORD_TYPES = 102, // "record-types" - S_ENCAPSULATE = 103, // "encapsulate" - S_ARRAY = 104, // "array" - S_PARKED_PACKET_LIMIT = 105, // "parked-packet-limit" - S_ALLOCATOR = 106, // "allocator" - S_DDNS_CONFLICT_RESOLUTION_MODE = 107, // "ddns-conflict-resolution-mode" - S_CHECK_WITH_DHCID = 108, // "check-with-dhcid" - S_NO_CHECK_WITH_DHCID = 109, // "no-check-with-dhcid" - S_CHECK_EXISTS_WITH_DHCID = 110, // "check-exists-with-dhcid" - S_NO_CHECK_WITHOUT_DHCID = 111, // "no-check-without-dhcid" - S_SHARED_NETWORKS = 112, // "shared-networks" - S_POOLS = 113, // "pools" - S_POOL = 114, // "pool" - S_USER_CONTEXT = 115, // "user-context" - S_COMMENT = 116, // "comment" - S_SUBNET = 117, // "subnet" - S_INTERFACE = 118, // "interface" - S_ID = 119, // "id" - S_RESERVATION_MODE = 120, // "reservation-mode" - S_DISABLED = 121, // "disabled" - S_OUT_OF_POOL = 122, // "out-of-pool" - S_GLOBAL = 123, // "global" - S_ALL = 124, // "all" - S_RESERVATIONS_GLOBAL = 125, // "reservations-global" - S_RESERVATIONS_IN_SUBNET = 126, // "reservations-in-subnet" - S_RESERVATIONS_OUT_OF_POOL = 127, // "reservations-out-of-pool" - S_HOST_RESERVATION_IDENTIFIERS = 128, // "host-reservation-identifiers" - S_CLIENT_CLASSES = 129, // "client-classes" - S_REQUIRE_CLIENT_CLASSES = 130, // "require-client-classes" - S_TEST = 131, // "test" - S_TEMPLATE_TEST = 132, // "template-test" - S_ONLY_IF_REQUIRED = 133, // "only-if-required" - S_CLIENT_CLASS = 134, // "client-class" - S_POOL_ID = 135, // "pool-id" - S_RESERVATIONS = 136, // "reservations" - S_DUID = 137, // "duid" - S_HW_ADDRESS = 138, // "hw-address" - S_CIRCUIT_ID = 139, // "circuit-id" - S_CLIENT_ID = 140, // "client-id" - S_HOSTNAME = 141, // "hostname" - S_FLEX_ID = 142, // "flex-id" - S_RELAY = 143, // "relay" - S_IP_ADDRESS = 144, // "ip-address" - S_IP_ADDRESSES = 145, // "ip-addresses" - S_HOOKS_LIBRARIES = 146, // "hooks-libraries" - S_LIBRARY = 147, // "library" - S_PARAMETERS = 148, // "parameters" - S_EXPIRED_LEASES_PROCESSING = 149, // "expired-leases-processing" - S_RECLAIM_TIMER_WAIT_TIME = 150, // "reclaim-timer-wait-time" - S_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 151, // "flush-reclaimed-timer-wait-time" - S_HOLD_RECLAIMED_TIME = 152, // "hold-reclaimed-time" - S_MAX_RECLAIM_LEASES = 153, // "max-reclaim-leases" - S_MAX_RECLAIM_TIME = 154, // "max-reclaim-time" - S_UNWARNED_RECLAIM_CYCLES = 155, // "unwarned-reclaim-cycles" - S_DHCP4O6_PORT = 156, // "dhcp4o6-port" - S_DHCP_MULTI_THREADING = 157, // "multi-threading" - S_ENABLE_MULTI_THREADING = 158, // "enable-multi-threading" - S_THREAD_POOL_SIZE = 159, // "thread-pool-size" - S_PACKET_QUEUE_SIZE = 160, // "packet-queue-size" - S_CONTROL_SOCKET = 161, // "control-socket" - S_SOCKET_TYPE = 162, // "socket-type" - S_SOCKET_NAME = 163, // "socket-name" - S_DHCP_QUEUE_CONTROL = 164, // "dhcp-queue-control" - S_ENABLE_QUEUE = 165, // "enable-queue" - S_QUEUE_TYPE = 166, // "queue-type" - S_CAPACITY = 167, // "capacity" - S_DHCP_DDNS = 168, // "dhcp-ddns" - S_ENABLE_UPDATES = 169, // "enable-updates" - S_QUALIFYING_SUFFIX = 170, // "qualifying-suffix" - S_SERVER_IP = 171, // "server-ip" - S_SERVER_PORT = 172, // "server-port" - S_SENDER_IP = 173, // "sender-ip" - S_SENDER_PORT = 174, // "sender-port" - S_MAX_QUEUE_SIZE = 175, // "max-queue-size" - S_NCR_PROTOCOL = 176, // "ncr-protocol" - S_NCR_FORMAT = 177, // "ncr-format" - S_OVERRIDE_NO_UPDATE = 178, // "override-no-update" - S_OVERRIDE_CLIENT_UPDATE = 179, // "override-client-update" - S_REPLACE_CLIENT_NAME = 180, // "replace-client-name" - S_GENERATED_PREFIX = 181, // "generated-prefix" - S_TCP = 182, // "tcp" - S_JSON = 183, // "JSON" - S_WHEN_PRESENT = 184, // "when-present" - S_NEVER = 185, // "never" - S_ALWAYS = 186, // "always" - S_WHEN_NOT_PRESENT = 187, // "when-not-present" - S_HOSTNAME_CHAR_SET = 188, // "hostname-char-set" - S_HOSTNAME_CHAR_REPLACEMENT = 189, // "hostname-char-replacement" - S_EARLY_GLOBAL_RESERVATIONS_LOOKUP = 190, // "early-global-reservations-lookup" - S_IP_RESERVATIONS_UNIQUE = 191, // "ip-reservations-unique" - S_RESERVATIONS_LOOKUP_FIRST = 192, // "reservations-lookup-first" - S_LOGGERS = 193, // "loggers" - S_OUTPUT_OPTIONS = 194, // "output-options" - S_OUTPUT = 195, // "output" - S_DEBUGLEVEL = 196, // "debuglevel" - S_SEVERITY = 197, // "severity" - S_FLUSH = 198, // "flush" - S_MAXSIZE = 199, // "maxsize" - S_MAXVER = 200, // "maxver" - S_PATTERN = 201, // "pattern" - S_COMPATIBILITY = 202, // "compatibility" - S_LENIENT_OPTION_PARSING = 203, // "lenient-option-parsing" - S_IGNORE_DHCP_SERVER_ID = 204, // "ignore-dhcp-server-identifier" - S_IGNORE_RAI_LINK_SEL = 205, // "ignore-rai-link-selection" - S_EXCLUDE_FIRST_LAST_24 = 206, // "exclude-first-last-24" - S_TOPLEVEL_JSON = 207, // TOPLEVEL_JSON - S_TOPLEVEL_DHCP4 = 208, // TOPLEVEL_DHCP4 - S_SUB_DHCP4 = 209, // SUB_DHCP4 - S_SUB_INTERFACES4 = 210, // SUB_INTERFACES4 - S_SUB_SUBNET4 = 211, // SUB_SUBNET4 - S_SUB_POOL4 = 212, // SUB_POOL4 - S_SUB_RESERVATION = 213, // SUB_RESERVATION - S_SUB_OPTION_DEFS = 214, // SUB_OPTION_DEFS - S_SUB_OPTION_DEF = 215, // SUB_OPTION_DEF - S_SUB_OPTION_DATA = 216, // SUB_OPTION_DATA - S_SUB_HOOKS_LIBRARY = 217, // SUB_HOOKS_LIBRARY - S_SUB_DHCP_DDNS = 218, // SUB_DHCP_DDNS - S_SUB_CONFIG_CONTROL = 219, // SUB_CONFIG_CONTROL - S_STRING = 220, // "constant string" - S_INTEGER = 221, // "integer" - S_FLOAT = 222, // "floating point" - S_BOOLEAN = 223, // "boolean" - S_YYACCEPT = 224, // $accept - S_start = 225, // start - S_226_1 = 226, // $@1 - S_227_2 = 227, // $@2 - S_228_3 = 228, // $@3 - S_229_4 = 229, // $@4 - S_230_5 = 230, // $@5 - S_231_6 = 231, // $@6 - S_232_7 = 232, // $@7 - S_233_8 = 233, // $@8 - S_234_9 = 234, // $@9 - S_235_10 = 235, // $@10 - S_236_11 = 236, // $@11 - S_237_12 = 237, // $@12 - S_238_13 = 238, // $@13 - S_value = 239, // value - S_sub_json = 240, // sub_json - S_map2 = 241, // map2 - S_242_14 = 242, // $@14 - S_map_value = 243, // map_value - S_map_content = 244, // map_content - S_not_empty_map = 245, // not_empty_map - S_list_generic = 246, // list_generic - S_247_15 = 247, // $@15 - S_list_content = 248, // list_content - S_not_empty_list = 249, // not_empty_list - S_list_strings = 250, // list_strings - S_251_16 = 251, // $@16 - S_list_strings_content = 252, // list_strings_content - S_not_empty_list_strings = 253, // not_empty_list_strings - S_unknown_map_entry = 254, // unknown_map_entry - S_syntax_map = 255, // syntax_map - S_256_17 = 256, // $@17 - S_global_object = 257, // global_object - S_258_18 = 258, // $@18 - S_global_object_comma = 259, // global_object_comma - S_sub_dhcp4 = 260, // sub_dhcp4 - S_261_19 = 261, // $@19 - S_global_params = 262, // global_params - S_global_param = 263, // global_param - S_valid_lifetime = 264, // valid_lifetime - S_min_valid_lifetime = 265, // min_valid_lifetime - S_max_valid_lifetime = 266, // max_valid_lifetime - S_renew_timer = 267, // renew_timer - S_rebind_timer = 268, // rebind_timer - S_calculate_tee_times = 269, // calculate_tee_times - S_t1_percent = 270, // t1_percent - S_t2_percent = 271, // t2_percent - S_cache_threshold = 272, // cache_threshold - S_cache_max_age = 273, // cache_max_age - S_decline_probation_period = 274, // decline_probation_period - S_server_tag = 275, // server_tag - S_276_20 = 276, // $@20 - S_parked_packet_limit = 277, // parked_packet_limit - S_allocator = 278, // allocator - S_279_21 = 279, // $@21 - S_echo_client_id = 280, // echo_client_id - S_match_client_id = 281, // match_client_id - S_authoritative = 282, // authoritative - S_ddns_send_updates = 283, // ddns_send_updates - S_ddns_override_no_update = 284, // ddns_override_no_update - S_ddns_override_client_update = 285, // ddns_override_client_update - S_ddns_replace_client_name = 286, // ddns_replace_client_name - S_287_22 = 287, // $@22 - S_ddns_replace_client_name_value = 288, // ddns_replace_client_name_value - S_ddns_generated_prefix = 289, // ddns_generated_prefix - S_290_23 = 290, // $@23 - S_ddns_qualifying_suffix = 291, // ddns_qualifying_suffix - S_292_24 = 292, // $@24 - S_ddns_update_on_renew = 293, // ddns_update_on_renew - S_ddns_use_conflict_resolution = 294, // ddns_use_conflict_resolution - S_ddns_conflict_resolution_mode = 295, // ddns_conflict_resolution_mode - S_296_25 = 296, // $@25 - S_ddns_conflict_resolution_mode_value = 297, // ddns_conflict_resolution_mode_value - S_ddns_ttl_percent = 298, // ddns_ttl_percent - S_hostname_char_set = 299, // hostname_char_set - S_300_26 = 300, // $@26 - S_hostname_char_replacement = 301, // hostname_char_replacement - S_302_27 = 302, // $@27 - S_store_extended_info = 303, // store_extended_info - S_statistic_default_sample_count = 304, // statistic_default_sample_count - S_statistic_default_sample_age = 305, // statistic_default_sample_age - S_early_global_reservations_lookup = 306, // early_global_reservations_lookup - S_ip_reservations_unique = 307, // ip_reservations_unique - S_reservations_lookup_first = 308, // reservations_lookup_first - S_offer_lifetime = 309, // offer_lifetime - S_interfaces_config = 310, // interfaces_config - S_311_28 = 311, // $@28 - S_interfaces_config_params = 312, // interfaces_config_params - S_interfaces_config_param = 313, // interfaces_config_param - S_sub_interfaces4 = 314, // sub_interfaces4 - S_315_29 = 315, // $@29 - S_interfaces_list = 316, // interfaces_list - S_317_30 = 317, // $@30 - S_dhcp_socket_type = 318, // dhcp_socket_type - S_319_31 = 319, // $@31 - S_socket_type = 320, // socket_type - S_outbound_interface = 321, // outbound_interface - S_322_32 = 322, // $@32 - S_outbound_interface_value = 323, // outbound_interface_value - S_re_detect = 324, // re_detect - S_service_sockets_require_all = 325, // service_sockets_require_all - S_service_sockets_retry_wait_time = 326, // service_sockets_retry_wait_time - S_service_sockets_max_retries = 327, // service_sockets_max_retries - S_lease_database = 328, // lease_database - S_329_33 = 329, // $@33 - S_sanity_checks = 330, // sanity_checks - S_331_34 = 331, // $@34 - S_sanity_checks_params = 332, // sanity_checks_params - S_sanity_checks_param = 333, // sanity_checks_param - S_lease_checks = 334, // lease_checks - S_335_35 = 335, // $@35 - S_extended_info_checks = 336, // extended_info_checks - S_337_36 = 337, // $@36 - S_hosts_database = 338, // hosts_database - S_339_37 = 339, // $@37 - S_hosts_databases = 340, // hosts_databases - S_341_38 = 341, // $@38 - S_database_list = 342, // database_list - S_not_empty_database_list = 343, // not_empty_database_list - S_database = 344, // database - S_345_39 = 345, // $@39 - S_database_map_params = 346, // database_map_params - S_database_map_param = 347, // database_map_param - S_database_type = 348, // database_type - S_349_40 = 349, // $@40 - S_db_type = 350, // db_type - S_user = 351, // user - S_352_41 = 352, // $@41 - S_password = 353, // password - S_354_42 = 354, // $@42 - S_host = 355, // host - S_356_43 = 356, // $@43 - S_port = 357, // port - S_name = 358, // name - S_359_44 = 359, // $@44 - S_persist = 360, // persist - S_lfc_interval = 361, // lfc_interval - S_readonly = 362, // readonly - S_connect_timeout = 363, // connect_timeout - S_read_timeout = 364, // read_timeout - S_write_timeout = 365, // write_timeout - S_tcp_user_timeout = 366, // tcp_user_timeout - S_max_reconnect_tries = 367, // max_reconnect_tries - S_reconnect_wait_time = 368, // reconnect_wait_time - S_on_fail = 369, // on_fail - S_370_45 = 370, // $@45 - S_on_fail_mode = 371, // on_fail_mode - S_max_row_errors = 372, // max_row_errors - S_trust_anchor = 373, // trust_anchor - S_374_46 = 374, // $@46 - S_cert_file = 375, // cert_file - S_376_47 = 376, // $@47 - S_key_file = 377, // key_file - S_378_48 = 378, // $@48 - S_cipher_list = 379, // cipher_list - S_380_49 = 380, // $@49 - S_host_reservation_identifiers = 381, // host_reservation_identifiers - S_382_50 = 382, // $@50 - S_host_reservation_identifiers_list = 383, // host_reservation_identifiers_list - S_host_reservation_identifier = 384, // host_reservation_identifier - S_duid_id = 385, // duid_id - S_hw_address_id = 386, // hw_address_id - S_circuit_id = 387, // circuit_id - S_client_id = 388, // client_id - S_flex_id = 389, // flex_id - S_dhcp_multi_threading = 390, // dhcp_multi_threading - S_391_51 = 391, // $@51 - S_multi_threading_params = 392, // multi_threading_params - S_multi_threading_param = 393, // multi_threading_param - S_enable_multi_threading = 394, // enable_multi_threading - S_thread_pool_size = 395, // thread_pool_size - S_packet_queue_size = 396, // packet_queue_size - S_hooks_libraries = 397, // hooks_libraries - S_398_52 = 398, // $@52 - S_hooks_libraries_list = 399, // hooks_libraries_list - S_not_empty_hooks_libraries_list = 400, // not_empty_hooks_libraries_list - S_hooks_library = 401, // hooks_library - S_402_53 = 402, // $@53 - S_sub_hooks_library = 403, // sub_hooks_library - S_404_54 = 404, // $@54 - S_hooks_params = 405, // hooks_params - S_hooks_param = 406, // hooks_param - S_library = 407, // library - S_408_55 = 408, // $@55 - S_parameters = 409, // parameters - S_410_56 = 410, // $@56 - S_expired_leases_processing = 411, // expired_leases_processing - S_412_57 = 412, // $@57 - S_expired_leases_params = 413, // expired_leases_params - S_expired_leases_param = 414, // expired_leases_param - S_reclaim_timer_wait_time = 415, // reclaim_timer_wait_time - S_flush_reclaimed_timer_wait_time = 416, // flush_reclaimed_timer_wait_time - S_hold_reclaimed_time = 417, // hold_reclaimed_time - S_max_reclaim_leases = 418, // max_reclaim_leases - S_max_reclaim_time = 419, // max_reclaim_time - S_unwarned_reclaim_cycles = 420, // unwarned_reclaim_cycles - S_subnet4_list = 421, // subnet4_list - S_422_58 = 422, // $@58 - S_subnet4_list_content = 423, // subnet4_list_content - S_not_empty_subnet4_list = 424, // not_empty_subnet4_list - S_subnet4 = 425, // subnet4 - S_426_59 = 426, // $@59 - S_sub_subnet4 = 427, // sub_subnet4 - S_428_60 = 428, // $@60 - S_subnet4_params = 429, // subnet4_params - S_subnet4_param = 430, // subnet4_param - S_subnet = 431, // subnet - S_432_61 = 432, // $@61 - S_subnet_4o6_interface = 433, // subnet_4o6_interface - S_434_62 = 434, // $@62 - S_subnet_4o6_interface_id = 435, // subnet_4o6_interface_id - S_436_63 = 436, // $@63 - S_subnet_4o6_subnet = 437, // subnet_4o6_subnet - S_438_64 = 438, // $@64 - S_interface = 439, // interface - S_440_65 = 440, // $@65 - S_client_class = 441, // client_class - S_442_66 = 442, // $@66 - S_require_client_classes = 443, // require_client_classes - S_444_67 = 444, // $@67 - S_reservations_global = 445, // reservations_global - S_reservations_in_subnet = 446, // reservations_in_subnet - S_reservations_out_of_pool = 447, // reservations_out_of_pool - S_reservation_mode = 448, // reservation_mode - S_449_68 = 449, // $@68 - S_hr_mode = 450, // hr_mode - S_id = 451, // id - S_shared_networks = 452, // shared_networks - S_453_69 = 453, // $@69 - S_shared_networks_content = 454, // shared_networks_content - S_shared_networks_list = 455, // shared_networks_list - S_shared_network = 456, // shared_network - S_457_70 = 457, // $@70 - S_shared_network_params = 458, // shared_network_params - S_shared_network_param = 459, // shared_network_param - S_option_def_list = 460, // option_def_list - S_461_71 = 461, // $@71 - S_sub_option_def_list = 462, // sub_option_def_list - S_463_72 = 463, // $@72 - S_option_def_list_content = 464, // option_def_list_content - S_not_empty_option_def_list = 465, // not_empty_option_def_list - S_option_def_entry = 466, // option_def_entry - S_467_73 = 467, // $@73 - S_sub_option_def = 468, // sub_option_def - S_469_74 = 469, // $@74 - S_option_def_params = 470, // option_def_params - S_not_empty_option_def_params = 471, // not_empty_option_def_params - S_option_def_param = 472, // option_def_param - S_option_def_name = 473, // option_def_name - S_code = 474, // code - S_option_def_code = 475, // option_def_code - S_option_def_type = 476, // option_def_type - S_477_75 = 477, // $@75 - S_option_def_record_types = 478, // option_def_record_types - S_479_76 = 479, // $@76 - S_space = 480, // space - S_481_77 = 481, // $@77 - S_option_def_space = 482, // option_def_space - S_option_def_encapsulate = 483, // option_def_encapsulate - S_484_78 = 484, // $@78 - S_option_def_array = 485, // option_def_array - S_option_data_list = 486, // option_data_list - S_487_79 = 487, // $@79 - S_option_data_list_content = 488, // option_data_list_content - S_not_empty_option_data_list = 489, // not_empty_option_data_list - S_option_data_entry = 490, // option_data_entry - S_491_80 = 491, // $@80 - S_sub_option_data = 492, // sub_option_data - S_493_81 = 493, // $@81 - S_option_data_params = 494, // option_data_params - S_not_empty_option_data_params = 495, // not_empty_option_data_params - S_option_data_param = 496, // option_data_param - S_option_data_name = 497, // option_data_name - S_option_data_data = 498, // option_data_data - S_499_82 = 499, // $@82 - S_option_data_code = 500, // option_data_code - S_option_data_space = 501, // option_data_space - S_option_data_csv_format = 502, // option_data_csv_format - S_option_data_always_send = 503, // option_data_always_send - S_option_data_never_send = 504, // option_data_never_send - S_pools_list = 505, // pools_list - S_506_83 = 506, // $@83 - S_pools_list_content = 507, // pools_list_content - S_not_empty_pools_list = 508, // not_empty_pools_list - S_pool_list_entry = 509, // pool_list_entry - S_510_84 = 510, // $@84 - S_sub_pool4 = 511, // sub_pool4 - S_512_85 = 512, // $@85 - S_pool_params = 513, // pool_params - S_pool_param = 514, // pool_param - S_pool_entry = 515, // pool_entry - S_516_86 = 516, // $@86 - S_pool_id = 517, // pool_id - S_user_context = 518, // user_context - S_519_87 = 519, // $@87 - S_comment = 520, // comment - S_521_88 = 521, // $@88 - S_reservations = 522, // reservations - S_523_89 = 523, // $@89 - S_reservations_list = 524, // reservations_list - S_not_empty_reservations_list = 525, // not_empty_reservations_list - S_reservation = 526, // reservation - S_527_90 = 527, // $@90 - S_sub_reservation = 528, // sub_reservation - S_529_91 = 529, // $@91 - S_reservation_params = 530, // reservation_params - S_not_empty_reservation_params = 531, // not_empty_reservation_params - S_reservation_param = 532, // reservation_param - S_next_server = 533, // next_server - S_534_92 = 534, // $@92 - S_server_hostname = 535, // server_hostname - S_536_93 = 536, // $@93 - S_boot_file_name = 537, // boot_file_name - S_538_94 = 538, // $@94 - S_ip_address = 539, // ip_address - S_540_95 = 540, // $@95 - S_ip_addresses = 541, // ip_addresses - S_542_96 = 542, // $@96 - S_duid = 543, // duid - S_544_97 = 544, // $@97 - S_hw_address = 545, // hw_address - S_546_98 = 546, // $@98 - S_client_id_value = 547, // client_id_value - S_548_99 = 548, // $@99 - S_circuit_id_value = 549, // circuit_id_value - S_550_100 = 550, // $@100 - S_flex_id_value = 551, // flex_id_value - S_552_101 = 552, // $@101 - S_hostname = 553, // hostname - S_554_102 = 554, // $@102 - S_reservation_client_classes = 555, // reservation_client_classes - S_556_103 = 556, // $@103 - S_relay = 557, // relay - S_558_104 = 558, // $@104 - S_relay_map = 559, // relay_map - S_client_classes = 560, // client_classes - S_561_105 = 561, // $@105 - S_client_classes_list = 562, // client_classes_list - S_client_class_entry = 563, // client_class_entry - S_564_106 = 564, // $@106 - S_client_class_params = 565, // client_class_params - S_not_empty_client_class_params = 566, // not_empty_client_class_params - S_client_class_param = 567, // client_class_param - S_client_class_name = 568, // client_class_name - S_client_class_test = 569, // client_class_test - S_570_107 = 570, // $@107 - S_client_class_template_test = 571, // client_class_template_test - S_572_108 = 572, // $@108 - S_only_if_required = 573, // only_if_required - S_dhcp4o6_port = 574, // dhcp4o6_port - S_control_socket = 575, // control_socket - S_576_109 = 576, // $@109 - S_control_socket_params = 577, // control_socket_params - S_control_socket_param = 578, // control_socket_param - S_control_socket_type = 579, // control_socket_type - S_580_110 = 580, // $@110 - S_control_socket_name = 581, // control_socket_name - S_582_111 = 582, // $@111 - S_dhcp_queue_control = 583, // dhcp_queue_control - S_584_112 = 584, // $@112 - S_queue_control_params = 585, // queue_control_params - S_queue_control_param = 586, // queue_control_param - S_enable_queue = 587, // enable_queue - S_queue_type = 588, // queue_type - S_589_113 = 589, // $@113 - S_capacity = 590, // capacity - S_arbitrary_map_entry = 591, // arbitrary_map_entry - S_592_114 = 592, // $@114 - S_dhcp_ddns = 593, // dhcp_ddns - S_594_115 = 594, // $@115 - S_sub_dhcp_ddns = 595, // sub_dhcp_ddns - S_596_116 = 596, // $@116 - S_dhcp_ddns_params = 597, // dhcp_ddns_params - S_dhcp_ddns_param = 598, // dhcp_ddns_param - S_enable_updates = 599, // enable_updates - S_server_ip = 600, // server_ip - S_601_117 = 601, // $@117 - S_server_port = 602, // server_port - S_sender_ip = 603, // sender_ip - S_604_118 = 604, // $@118 - S_sender_port = 605, // sender_port - S_max_queue_size = 606, // max_queue_size - S_ncr_protocol = 607, // ncr_protocol - S_608_119 = 608, // $@119 - S_ncr_protocol_value = 609, // ncr_protocol_value - S_ncr_format = 610, // ncr_format - S_611_120 = 611, // $@120 - S_dep_qualifying_suffix = 612, // dep_qualifying_suffix - S_613_121 = 613, // $@121 - S_dep_override_no_update = 614, // dep_override_no_update - S_dep_override_client_update = 615, // dep_override_client_update - S_dep_replace_client_name = 616, // dep_replace_client_name - S_617_122 = 617, // $@122 - S_dep_generated_prefix = 618, // dep_generated_prefix - S_619_123 = 619, // $@123 - S_dep_hostname_char_set = 620, // dep_hostname_char_set - S_621_124 = 621, // $@124 - S_dep_hostname_char_replacement = 622, // dep_hostname_char_replacement - S_623_125 = 623, // $@125 - S_config_control = 624, // config_control - S_625_126 = 625, // $@126 - S_sub_config_control = 626, // sub_config_control - S_627_127 = 627, // $@127 - S_config_control_params = 628, // config_control_params - S_config_control_param = 629, // config_control_param - S_config_databases = 630, // config_databases - S_631_128 = 631, // $@128 - S_config_fetch_wait_time = 632, // config_fetch_wait_time - S_loggers = 633, // loggers - S_634_129 = 634, // $@129 - S_loggers_entries = 635, // loggers_entries - S_logger_entry = 636, // logger_entry - S_637_130 = 637, // $@130 - S_logger_params = 638, // logger_params - S_logger_param = 639, // logger_param - S_debuglevel = 640, // debuglevel - S_severity = 641, // severity - S_642_131 = 642, // $@131 - S_output_options_list = 643, // output_options_list - S_644_132 = 644, // $@132 - S_output_options_list_content = 645, // output_options_list_content - S_output_entry = 646, // output_entry - S_647_133 = 647, // $@133 - S_output_params_list = 648, // output_params_list - S_output_params = 649, // output_params - S_output = 650, // output - S_651_134 = 651, // $@134 - S_flush = 652, // flush - S_maxsize = 653, // maxsize - S_maxver = 654, // maxver - S_pattern = 655, // pattern - S_656_135 = 656, // $@135 - S_compatibility = 657, // compatibility - S_658_136 = 658, // $@136 - S_compatibility_params = 659, // compatibility_params - S_compatibility_param = 660, // compatibility_param - S_lenient_option_parsing = 661, // lenient_option_parsing - S_ignore_dhcp_server_identifier = 662, // ignore_dhcp_server_identifier - S_ignore_rai_link_selection = 663, // ignore_rai_link_selection - S_exclude_first_last_24 = 664 // exclude_first_last_24 + S_RETRY_ON_STARTUP = 60, // "retry-on-startup" + S_MAX_ROW_ERRORS = 61, // "max-row-errors" + S_TRUST_ANCHOR = 62, // "trust-anchor" + S_CERT_FILE = 63, // "cert-file" + S_KEY_FILE = 64, // "key-file" + S_CIPHER_LIST = 65, // "cipher-list" + S_VALID_LIFETIME = 66, // "valid-lifetime" + S_MIN_VALID_LIFETIME = 67, // "min-valid-lifetime" + S_MAX_VALID_LIFETIME = 68, // "max-valid-lifetime" + S_RENEW_TIMER = 69, // "renew-timer" + S_REBIND_TIMER = 70, // "rebind-timer" + S_CALCULATE_TEE_TIMES = 71, // "calculate-tee-times" + S_T1_PERCENT = 72, // "t1-percent" + S_T2_PERCENT = 73, // "t2-percent" + S_CACHE_THRESHOLD = 74, // "cache-threshold" + S_CACHE_MAX_AGE = 75, // "cache-max-age" + S_DECLINE_PROBATION_PERIOD = 76, // "decline-probation-period" + S_SERVER_TAG = 77, // "server-tag" + S_STATISTIC_DEFAULT_SAMPLE_COUNT = 78, // "statistic-default-sample-count" + S_STATISTIC_DEFAULT_SAMPLE_AGE = 79, // "statistic-default-sample-age" + S_DDNS_SEND_UPDATES = 80, // "ddns-send-updates" + S_DDNS_OVERRIDE_NO_UPDATE = 81, // "ddns-override-no-update" + S_DDNS_OVERRIDE_CLIENT_UPDATE = 82, // "ddns-override-client-update" + S_DDNS_REPLACE_CLIENT_NAME = 83, // "ddns-replace-client-name" + S_DDNS_GENERATED_PREFIX = 84, // "ddns-generated-prefix" + S_DDNS_QUALIFYING_SUFFIX = 85, // "ddns-qualifying-suffix" + S_DDNS_UPDATE_ON_RENEW = 86, // "ddns-update-on-renew" + S_DDNS_USE_CONFLICT_RESOLUTION = 87, // "ddns-use-conflict-resolution" + S_DDNS_TTL_PERCENT = 88, // "ddns-ttl-percent" + S_STORE_EXTENDED_INFO = 89, // "store-extended-info" + S_SUBNET4 = 90, // "subnet4" + S_SUBNET_4O6_INTERFACE = 91, // "4o6-interface" + S_SUBNET_4O6_INTERFACE_ID = 92, // "4o6-interface-id" + S_SUBNET_4O6_SUBNET = 93, // "4o6-subnet" + S_OPTION_DEF = 94, // "option-def" + S_OPTION_DATA = 95, // "option-data" + S_NAME = 96, // "name" + S_DATA = 97, // "data" + S_CODE = 98, // "code" + S_SPACE = 99, // "space" + S_CSV_FORMAT = 100, // "csv-format" + S_ALWAYS_SEND = 101, // "always-send" + S_NEVER_SEND = 102, // "never-send" + S_RECORD_TYPES = 103, // "record-types" + S_ENCAPSULATE = 104, // "encapsulate" + S_ARRAY = 105, // "array" + S_PARKED_PACKET_LIMIT = 106, // "parked-packet-limit" + S_ALLOCATOR = 107, // "allocator" + S_DDNS_CONFLICT_RESOLUTION_MODE = 108, // "ddns-conflict-resolution-mode" + S_CHECK_WITH_DHCID = 109, // "check-with-dhcid" + S_NO_CHECK_WITH_DHCID = 110, // "no-check-with-dhcid" + S_CHECK_EXISTS_WITH_DHCID = 111, // "check-exists-with-dhcid" + S_NO_CHECK_WITHOUT_DHCID = 112, // "no-check-without-dhcid" + S_SHARED_NETWORKS = 113, // "shared-networks" + S_POOLS = 114, // "pools" + S_POOL = 115, // "pool" + S_USER_CONTEXT = 116, // "user-context" + S_COMMENT = 117, // "comment" + S_SUBNET = 118, // "subnet" + S_INTERFACE = 119, // "interface" + S_ID = 120, // "id" + S_RESERVATION_MODE = 121, // "reservation-mode" + S_DISABLED = 122, // "disabled" + S_OUT_OF_POOL = 123, // "out-of-pool" + S_GLOBAL = 124, // "global" + S_ALL = 125, // "all" + S_RESERVATIONS_GLOBAL = 126, // "reservations-global" + S_RESERVATIONS_IN_SUBNET = 127, // "reservations-in-subnet" + S_RESERVATIONS_OUT_OF_POOL = 128, // "reservations-out-of-pool" + S_HOST_RESERVATION_IDENTIFIERS = 129, // "host-reservation-identifiers" + S_CLIENT_CLASSES = 130, // "client-classes" + S_REQUIRE_CLIENT_CLASSES = 131, // "require-client-classes" + S_TEST = 132, // "test" + S_TEMPLATE_TEST = 133, // "template-test" + S_ONLY_IF_REQUIRED = 134, // "only-if-required" + S_CLIENT_CLASS = 135, // "client-class" + S_POOL_ID = 136, // "pool-id" + S_RESERVATIONS = 137, // "reservations" + S_DUID = 138, // "duid" + S_HW_ADDRESS = 139, // "hw-address" + S_CIRCUIT_ID = 140, // "circuit-id" + S_CLIENT_ID = 141, // "client-id" + S_HOSTNAME = 142, // "hostname" + S_FLEX_ID = 143, // "flex-id" + S_RELAY = 144, // "relay" + S_IP_ADDRESS = 145, // "ip-address" + S_IP_ADDRESSES = 146, // "ip-addresses" + S_HOOKS_LIBRARIES = 147, // "hooks-libraries" + S_LIBRARY = 148, // "library" + S_PARAMETERS = 149, // "parameters" + S_EXPIRED_LEASES_PROCESSING = 150, // "expired-leases-processing" + S_RECLAIM_TIMER_WAIT_TIME = 151, // "reclaim-timer-wait-time" + S_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 152, // "flush-reclaimed-timer-wait-time" + S_HOLD_RECLAIMED_TIME = 153, // "hold-reclaimed-time" + S_MAX_RECLAIM_LEASES = 154, // "max-reclaim-leases" + S_MAX_RECLAIM_TIME = 155, // "max-reclaim-time" + S_UNWARNED_RECLAIM_CYCLES = 156, // "unwarned-reclaim-cycles" + S_DHCP4O6_PORT = 157, // "dhcp4o6-port" + S_DHCP_MULTI_THREADING = 158, // "multi-threading" + S_ENABLE_MULTI_THREADING = 159, // "enable-multi-threading" + S_THREAD_POOL_SIZE = 160, // "thread-pool-size" + S_PACKET_QUEUE_SIZE = 161, // "packet-queue-size" + S_CONTROL_SOCKET = 162, // "control-socket" + S_SOCKET_TYPE = 163, // "socket-type" + S_SOCKET_NAME = 164, // "socket-name" + S_DHCP_QUEUE_CONTROL = 165, // "dhcp-queue-control" + S_ENABLE_QUEUE = 166, // "enable-queue" + S_QUEUE_TYPE = 167, // "queue-type" + S_CAPACITY = 168, // "capacity" + S_DHCP_DDNS = 169, // "dhcp-ddns" + S_ENABLE_UPDATES = 170, // "enable-updates" + S_QUALIFYING_SUFFIX = 171, // "qualifying-suffix" + S_SERVER_IP = 172, // "server-ip" + S_SERVER_PORT = 173, // "server-port" + S_SENDER_IP = 174, // "sender-ip" + S_SENDER_PORT = 175, // "sender-port" + S_MAX_QUEUE_SIZE = 176, // "max-queue-size" + S_NCR_PROTOCOL = 177, // "ncr-protocol" + S_NCR_FORMAT = 178, // "ncr-format" + S_OVERRIDE_NO_UPDATE = 179, // "override-no-update" + S_OVERRIDE_CLIENT_UPDATE = 180, // "override-client-update" + S_REPLACE_CLIENT_NAME = 181, // "replace-client-name" + S_GENERATED_PREFIX = 182, // "generated-prefix" + S_TCP = 183, // "tcp" + S_JSON = 184, // "JSON" + S_WHEN_PRESENT = 185, // "when-present" + S_NEVER = 186, // "never" + S_ALWAYS = 187, // "always" + S_WHEN_NOT_PRESENT = 188, // "when-not-present" + S_HOSTNAME_CHAR_SET = 189, // "hostname-char-set" + S_HOSTNAME_CHAR_REPLACEMENT = 190, // "hostname-char-replacement" + S_EARLY_GLOBAL_RESERVATIONS_LOOKUP = 191, // "early-global-reservations-lookup" + S_IP_RESERVATIONS_UNIQUE = 192, // "ip-reservations-unique" + S_RESERVATIONS_LOOKUP_FIRST = 193, // "reservations-lookup-first" + S_LOGGERS = 194, // "loggers" + S_OUTPUT_OPTIONS = 195, // "output-options" + S_OUTPUT = 196, // "output" + S_DEBUGLEVEL = 197, // "debuglevel" + S_SEVERITY = 198, // "severity" + S_FLUSH = 199, // "flush" + S_MAXSIZE = 200, // "maxsize" + S_MAXVER = 201, // "maxver" + S_PATTERN = 202, // "pattern" + S_COMPATIBILITY = 203, // "compatibility" + S_LENIENT_OPTION_PARSING = 204, // "lenient-option-parsing" + S_IGNORE_DHCP_SERVER_ID = 205, // "ignore-dhcp-server-identifier" + S_IGNORE_RAI_LINK_SEL = 206, // "ignore-rai-link-selection" + S_EXCLUDE_FIRST_LAST_24 = 207, // "exclude-first-last-24" + S_TOPLEVEL_JSON = 208, // TOPLEVEL_JSON + S_TOPLEVEL_DHCP4 = 209, // TOPLEVEL_DHCP4 + S_SUB_DHCP4 = 210, // SUB_DHCP4 + S_SUB_INTERFACES4 = 211, // SUB_INTERFACES4 + S_SUB_SUBNET4 = 212, // SUB_SUBNET4 + S_SUB_POOL4 = 213, // SUB_POOL4 + S_SUB_RESERVATION = 214, // SUB_RESERVATION + S_SUB_OPTION_DEFS = 215, // SUB_OPTION_DEFS + S_SUB_OPTION_DEF = 216, // SUB_OPTION_DEF + S_SUB_OPTION_DATA = 217, // SUB_OPTION_DATA + S_SUB_HOOKS_LIBRARY = 218, // SUB_HOOKS_LIBRARY + S_SUB_DHCP_DDNS = 219, // SUB_DHCP_DDNS + S_SUB_CONFIG_CONTROL = 220, // SUB_CONFIG_CONTROL + S_STRING = 221, // "constant string" + S_INTEGER = 222, // "integer" + S_FLOAT = 223, // "floating point" + S_BOOLEAN = 224, // "boolean" + S_YYACCEPT = 225, // $accept + S_start = 226, // start + S_227_1 = 227, // $@1 + S_228_2 = 228, // $@2 + S_229_3 = 229, // $@3 + S_230_4 = 230, // $@4 + S_231_5 = 231, // $@5 + S_232_6 = 232, // $@6 + S_233_7 = 233, // $@7 + S_234_8 = 234, // $@8 + S_235_9 = 235, // $@9 + S_236_10 = 236, // $@10 + S_237_11 = 237, // $@11 + S_238_12 = 238, // $@12 + S_239_13 = 239, // $@13 + S_value = 240, // value + S_sub_json = 241, // sub_json + S_map2 = 242, // map2 + S_243_14 = 243, // $@14 + S_map_value = 244, // map_value + S_map_content = 245, // map_content + S_not_empty_map = 246, // not_empty_map + S_list_generic = 247, // list_generic + S_248_15 = 248, // $@15 + S_list_content = 249, // list_content + S_not_empty_list = 250, // not_empty_list + S_list_strings = 251, // list_strings + S_252_16 = 252, // $@16 + S_list_strings_content = 253, // list_strings_content + S_not_empty_list_strings = 254, // not_empty_list_strings + S_unknown_map_entry = 255, // unknown_map_entry + S_syntax_map = 256, // syntax_map + S_257_17 = 257, // $@17 + S_global_object = 258, // global_object + S_259_18 = 259, // $@18 + S_global_object_comma = 260, // global_object_comma + S_sub_dhcp4 = 261, // sub_dhcp4 + S_262_19 = 262, // $@19 + S_global_params = 263, // global_params + S_global_param = 264, // global_param + S_valid_lifetime = 265, // valid_lifetime + S_min_valid_lifetime = 266, // min_valid_lifetime + S_max_valid_lifetime = 267, // max_valid_lifetime + S_renew_timer = 268, // renew_timer + S_rebind_timer = 269, // rebind_timer + S_calculate_tee_times = 270, // calculate_tee_times + S_t1_percent = 271, // t1_percent + S_t2_percent = 272, // t2_percent + S_cache_threshold = 273, // cache_threshold + S_cache_max_age = 274, // cache_max_age + S_decline_probation_period = 275, // decline_probation_period + S_server_tag = 276, // server_tag + S_277_20 = 277, // $@20 + S_parked_packet_limit = 278, // parked_packet_limit + S_allocator = 279, // allocator + S_280_21 = 280, // $@21 + S_echo_client_id = 281, // echo_client_id + S_match_client_id = 282, // match_client_id + S_authoritative = 283, // authoritative + S_ddns_send_updates = 284, // ddns_send_updates + S_ddns_override_no_update = 285, // ddns_override_no_update + S_ddns_override_client_update = 286, // ddns_override_client_update + S_ddns_replace_client_name = 287, // ddns_replace_client_name + S_288_22 = 288, // $@22 + S_ddns_replace_client_name_value = 289, // ddns_replace_client_name_value + S_ddns_generated_prefix = 290, // ddns_generated_prefix + S_291_23 = 291, // $@23 + S_ddns_qualifying_suffix = 292, // ddns_qualifying_suffix + S_293_24 = 293, // $@24 + S_ddns_update_on_renew = 294, // ddns_update_on_renew + S_ddns_use_conflict_resolution = 295, // ddns_use_conflict_resolution + S_ddns_conflict_resolution_mode = 296, // ddns_conflict_resolution_mode + S_297_25 = 297, // $@25 + S_ddns_conflict_resolution_mode_value = 298, // ddns_conflict_resolution_mode_value + S_ddns_ttl_percent = 299, // ddns_ttl_percent + S_hostname_char_set = 300, // hostname_char_set + S_301_26 = 301, // $@26 + S_hostname_char_replacement = 302, // hostname_char_replacement + S_303_27 = 303, // $@27 + S_store_extended_info = 304, // store_extended_info + S_statistic_default_sample_count = 305, // statistic_default_sample_count + S_statistic_default_sample_age = 306, // statistic_default_sample_age + S_early_global_reservations_lookup = 307, // early_global_reservations_lookup + S_ip_reservations_unique = 308, // ip_reservations_unique + S_reservations_lookup_first = 309, // reservations_lookup_first + S_offer_lifetime = 310, // offer_lifetime + S_interfaces_config = 311, // interfaces_config + S_312_28 = 312, // $@28 + S_interfaces_config_params = 313, // interfaces_config_params + S_interfaces_config_param = 314, // interfaces_config_param + S_sub_interfaces4 = 315, // sub_interfaces4 + S_316_29 = 316, // $@29 + S_interfaces_list = 317, // interfaces_list + S_318_30 = 318, // $@30 + S_dhcp_socket_type = 319, // dhcp_socket_type + S_320_31 = 320, // $@31 + S_socket_type = 321, // socket_type + S_outbound_interface = 322, // outbound_interface + S_323_32 = 323, // $@32 + S_outbound_interface_value = 324, // outbound_interface_value + S_re_detect = 325, // re_detect + S_service_sockets_require_all = 326, // service_sockets_require_all + S_service_sockets_retry_wait_time = 327, // service_sockets_retry_wait_time + S_service_sockets_max_retries = 328, // service_sockets_max_retries + S_lease_database = 329, // lease_database + S_330_33 = 330, // $@33 + S_sanity_checks = 331, // sanity_checks + S_332_34 = 332, // $@34 + S_sanity_checks_params = 333, // sanity_checks_params + S_sanity_checks_param = 334, // sanity_checks_param + S_lease_checks = 335, // lease_checks + S_336_35 = 336, // $@35 + S_extended_info_checks = 337, // extended_info_checks + S_338_36 = 338, // $@36 + S_hosts_database = 339, // hosts_database + S_340_37 = 340, // $@37 + S_hosts_databases = 341, // hosts_databases + S_342_38 = 342, // $@38 + S_database_list = 343, // database_list + S_not_empty_database_list = 344, // not_empty_database_list + S_database = 345, // database + S_346_39 = 346, // $@39 + S_database_map_params = 347, // database_map_params + S_database_map_param = 348, // database_map_param + S_database_type = 349, // database_type + S_350_40 = 350, // $@40 + S_db_type = 351, // db_type + S_user = 352, // user + S_353_41 = 353, // $@41 + S_password = 354, // password + S_355_42 = 355, // $@42 + S_host = 356, // host + S_357_43 = 357, // $@43 + S_port = 358, // port + S_name = 359, // name + S_360_44 = 360, // $@44 + S_persist = 361, // persist + S_lfc_interval = 362, // lfc_interval + S_readonly = 363, // readonly + S_connect_timeout = 364, // connect_timeout + S_read_timeout = 365, // read_timeout + S_write_timeout = 366, // write_timeout + S_tcp_user_timeout = 367, // tcp_user_timeout + S_max_reconnect_tries = 368, // max_reconnect_tries + S_reconnect_wait_time = 369, // reconnect_wait_time + S_on_fail = 370, // on_fail + S_371_45 = 371, // $@45 + S_on_fail_mode = 372, // on_fail_mode + S_retry_on_startup = 373, // retry_on_startup + S_max_row_errors = 374, // max_row_errors + S_trust_anchor = 375, // trust_anchor + S_376_46 = 376, // $@46 + S_cert_file = 377, // cert_file + S_378_47 = 378, // $@47 + S_key_file = 379, // key_file + S_380_48 = 380, // $@48 + S_cipher_list = 381, // cipher_list + S_382_49 = 382, // $@49 + S_host_reservation_identifiers = 383, // host_reservation_identifiers + S_384_50 = 384, // $@50 + S_host_reservation_identifiers_list = 385, // host_reservation_identifiers_list + S_host_reservation_identifier = 386, // host_reservation_identifier + S_duid_id = 387, // duid_id + S_hw_address_id = 388, // hw_address_id + S_circuit_id = 389, // circuit_id + S_client_id = 390, // client_id + S_flex_id = 391, // flex_id + S_dhcp_multi_threading = 392, // dhcp_multi_threading + S_393_51 = 393, // $@51 + S_multi_threading_params = 394, // multi_threading_params + S_multi_threading_param = 395, // multi_threading_param + S_enable_multi_threading = 396, // enable_multi_threading + S_thread_pool_size = 397, // thread_pool_size + S_packet_queue_size = 398, // packet_queue_size + S_hooks_libraries = 399, // hooks_libraries + S_400_52 = 400, // $@52 + S_hooks_libraries_list = 401, // hooks_libraries_list + S_not_empty_hooks_libraries_list = 402, // not_empty_hooks_libraries_list + S_hooks_library = 403, // hooks_library + S_404_53 = 404, // $@53 + S_sub_hooks_library = 405, // sub_hooks_library + S_406_54 = 406, // $@54 + S_hooks_params = 407, // hooks_params + S_hooks_param = 408, // hooks_param + S_library = 409, // library + S_410_55 = 410, // $@55 + S_parameters = 411, // parameters + S_412_56 = 412, // $@56 + S_expired_leases_processing = 413, // expired_leases_processing + S_414_57 = 414, // $@57 + S_expired_leases_params = 415, // expired_leases_params + S_expired_leases_param = 416, // expired_leases_param + S_reclaim_timer_wait_time = 417, // reclaim_timer_wait_time + S_flush_reclaimed_timer_wait_time = 418, // flush_reclaimed_timer_wait_time + S_hold_reclaimed_time = 419, // hold_reclaimed_time + S_max_reclaim_leases = 420, // max_reclaim_leases + S_max_reclaim_time = 421, // max_reclaim_time + S_unwarned_reclaim_cycles = 422, // unwarned_reclaim_cycles + S_subnet4_list = 423, // subnet4_list + S_424_58 = 424, // $@58 + S_subnet4_list_content = 425, // subnet4_list_content + S_not_empty_subnet4_list = 426, // not_empty_subnet4_list + S_subnet4 = 427, // subnet4 + S_428_59 = 428, // $@59 + S_sub_subnet4 = 429, // sub_subnet4 + S_430_60 = 430, // $@60 + S_subnet4_params = 431, // subnet4_params + S_subnet4_param = 432, // subnet4_param + S_subnet = 433, // subnet + S_434_61 = 434, // $@61 + S_subnet_4o6_interface = 435, // subnet_4o6_interface + S_436_62 = 436, // $@62 + S_subnet_4o6_interface_id = 437, // subnet_4o6_interface_id + S_438_63 = 438, // $@63 + S_subnet_4o6_subnet = 439, // subnet_4o6_subnet + S_440_64 = 440, // $@64 + S_interface = 441, // interface + S_442_65 = 442, // $@65 + S_client_class = 443, // client_class + S_444_66 = 444, // $@66 + S_require_client_classes = 445, // require_client_classes + S_446_67 = 446, // $@67 + S_reservations_global = 447, // reservations_global + S_reservations_in_subnet = 448, // reservations_in_subnet + S_reservations_out_of_pool = 449, // reservations_out_of_pool + S_reservation_mode = 450, // reservation_mode + S_451_68 = 451, // $@68 + S_hr_mode = 452, // hr_mode + S_id = 453, // id + S_shared_networks = 454, // shared_networks + S_455_69 = 455, // $@69 + S_shared_networks_content = 456, // shared_networks_content + S_shared_networks_list = 457, // shared_networks_list + S_shared_network = 458, // shared_network + S_459_70 = 459, // $@70 + S_shared_network_params = 460, // shared_network_params + S_shared_network_param = 461, // shared_network_param + S_option_def_list = 462, // option_def_list + S_463_71 = 463, // $@71 + S_sub_option_def_list = 464, // sub_option_def_list + S_465_72 = 465, // $@72 + S_option_def_list_content = 466, // option_def_list_content + S_not_empty_option_def_list = 467, // not_empty_option_def_list + S_option_def_entry = 468, // option_def_entry + S_469_73 = 469, // $@73 + S_sub_option_def = 470, // sub_option_def + S_471_74 = 471, // $@74 + S_option_def_params = 472, // option_def_params + S_not_empty_option_def_params = 473, // not_empty_option_def_params + S_option_def_param = 474, // option_def_param + S_option_def_name = 475, // option_def_name + S_code = 476, // code + S_option_def_code = 477, // option_def_code + S_option_def_type = 478, // option_def_type + S_479_75 = 479, // $@75 + S_option_def_record_types = 480, // option_def_record_types + S_481_76 = 481, // $@76 + S_space = 482, // space + S_483_77 = 483, // $@77 + S_option_def_space = 484, // option_def_space + S_option_def_encapsulate = 485, // option_def_encapsulate + S_486_78 = 486, // $@78 + S_option_def_array = 487, // option_def_array + S_option_data_list = 488, // option_data_list + S_489_79 = 489, // $@79 + S_option_data_list_content = 490, // option_data_list_content + S_not_empty_option_data_list = 491, // not_empty_option_data_list + S_option_data_entry = 492, // option_data_entry + S_493_80 = 493, // $@80 + S_sub_option_data = 494, // sub_option_data + S_495_81 = 495, // $@81 + S_option_data_params = 496, // option_data_params + S_not_empty_option_data_params = 497, // not_empty_option_data_params + S_option_data_param = 498, // option_data_param + S_option_data_name = 499, // option_data_name + S_option_data_data = 500, // option_data_data + S_501_82 = 501, // $@82 + S_option_data_code = 502, // option_data_code + S_option_data_space = 503, // option_data_space + S_option_data_csv_format = 504, // option_data_csv_format + S_option_data_always_send = 505, // option_data_always_send + S_option_data_never_send = 506, // option_data_never_send + S_pools_list = 507, // pools_list + S_508_83 = 508, // $@83 + S_pools_list_content = 509, // pools_list_content + S_not_empty_pools_list = 510, // not_empty_pools_list + S_pool_list_entry = 511, // pool_list_entry + S_512_84 = 512, // $@84 + S_sub_pool4 = 513, // sub_pool4 + S_514_85 = 514, // $@85 + S_pool_params = 515, // pool_params + S_pool_param = 516, // pool_param + S_pool_entry = 517, // pool_entry + S_518_86 = 518, // $@86 + S_pool_id = 519, // pool_id + S_user_context = 520, // user_context + S_521_87 = 521, // $@87 + S_comment = 522, // comment + S_523_88 = 523, // $@88 + S_reservations = 524, // reservations + S_525_89 = 525, // $@89 + S_reservations_list = 526, // reservations_list + S_not_empty_reservations_list = 527, // not_empty_reservations_list + S_reservation = 528, // reservation + S_529_90 = 529, // $@90 + S_sub_reservation = 530, // sub_reservation + S_531_91 = 531, // $@91 + S_reservation_params = 532, // reservation_params + S_not_empty_reservation_params = 533, // not_empty_reservation_params + S_reservation_param = 534, // reservation_param + S_next_server = 535, // next_server + S_536_92 = 536, // $@92 + S_server_hostname = 537, // server_hostname + S_538_93 = 538, // $@93 + S_boot_file_name = 539, // boot_file_name + S_540_94 = 540, // $@94 + S_ip_address = 541, // ip_address + S_542_95 = 542, // $@95 + S_ip_addresses = 543, // ip_addresses + S_544_96 = 544, // $@96 + S_duid = 545, // duid + S_546_97 = 546, // $@97 + S_hw_address = 547, // hw_address + S_548_98 = 548, // $@98 + S_client_id_value = 549, // client_id_value + S_550_99 = 550, // $@99 + S_circuit_id_value = 551, // circuit_id_value + S_552_100 = 552, // $@100 + S_flex_id_value = 553, // flex_id_value + S_554_101 = 554, // $@101 + S_hostname = 555, // hostname + S_556_102 = 556, // $@102 + S_reservation_client_classes = 557, // reservation_client_classes + S_558_103 = 558, // $@103 + S_relay = 559, // relay + S_560_104 = 560, // $@104 + S_relay_map = 561, // relay_map + S_client_classes = 562, // client_classes + S_563_105 = 563, // $@105 + S_client_classes_list = 564, // client_classes_list + S_client_class_entry = 565, // client_class_entry + S_566_106 = 566, // $@106 + S_client_class_params = 567, // client_class_params + S_not_empty_client_class_params = 568, // not_empty_client_class_params + S_client_class_param = 569, // client_class_param + S_client_class_name = 570, // client_class_name + S_client_class_test = 571, // client_class_test + S_572_107 = 572, // $@107 + S_client_class_template_test = 573, // client_class_template_test + S_574_108 = 574, // $@108 + S_only_if_required = 575, // only_if_required + S_dhcp4o6_port = 576, // dhcp4o6_port + S_control_socket = 577, // control_socket + S_578_109 = 578, // $@109 + S_control_socket_params = 579, // control_socket_params + S_control_socket_param = 580, // control_socket_param + S_control_socket_type = 581, // control_socket_type + S_582_110 = 582, // $@110 + S_control_socket_name = 583, // control_socket_name + S_584_111 = 584, // $@111 + S_dhcp_queue_control = 585, // dhcp_queue_control + S_586_112 = 586, // $@112 + S_queue_control_params = 587, // queue_control_params + S_queue_control_param = 588, // queue_control_param + S_enable_queue = 589, // enable_queue + S_queue_type = 590, // queue_type + S_591_113 = 591, // $@113 + S_capacity = 592, // capacity + S_arbitrary_map_entry = 593, // arbitrary_map_entry + S_594_114 = 594, // $@114 + S_dhcp_ddns = 595, // dhcp_ddns + S_596_115 = 596, // $@115 + S_sub_dhcp_ddns = 597, // sub_dhcp_ddns + S_598_116 = 598, // $@116 + S_dhcp_ddns_params = 599, // dhcp_ddns_params + S_dhcp_ddns_param = 600, // dhcp_ddns_param + S_enable_updates = 601, // enable_updates + S_server_ip = 602, // server_ip + S_603_117 = 603, // $@117 + S_server_port = 604, // server_port + S_sender_ip = 605, // sender_ip + S_606_118 = 606, // $@118 + S_sender_port = 607, // sender_port + S_max_queue_size = 608, // max_queue_size + S_ncr_protocol = 609, // ncr_protocol + S_610_119 = 610, // $@119 + S_ncr_protocol_value = 611, // ncr_protocol_value + S_ncr_format = 612, // ncr_format + S_613_120 = 613, // $@120 + S_dep_qualifying_suffix = 614, // dep_qualifying_suffix + S_615_121 = 615, // $@121 + S_dep_override_no_update = 616, // dep_override_no_update + S_dep_override_client_update = 617, // dep_override_client_update + S_dep_replace_client_name = 618, // dep_replace_client_name + S_619_122 = 619, // $@122 + S_dep_generated_prefix = 620, // dep_generated_prefix + S_621_123 = 621, // $@123 + S_dep_hostname_char_set = 622, // dep_hostname_char_set + S_623_124 = 623, // $@124 + S_dep_hostname_char_replacement = 624, // dep_hostname_char_replacement + S_625_125 = 625, // $@125 + S_config_control = 626, // config_control + S_627_126 = 627, // $@126 + S_sub_config_control = 628, // sub_config_control + S_629_127 = 629, // $@127 + S_config_control_params = 630, // config_control_params + S_config_control_param = 631, // config_control_param + S_config_databases = 632, // config_databases + S_633_128 = 633, // $@128 + S_config_fetch_wait_time = 634, // config_fetch_wait_time + S_loggers = 635, // loggers + S_636_129 = 636, // $@129 + S_loggers_entries = 637, // loggers_entries + S_logger_entry = 638, // logger_entry + S_639_130 = 639, // $@130 + S_logger_params = 640, // logger_params + S_logger_param = 641, // logger_param + S_debuglevel = 642, // debuglevel + S_severity = 643, // severity + S_644_131 = 644, // $@131 + S_output_options_list = 645, // output_options_list + S_646_132 = 646, // $@132 + S_output_options_list_content = 647, // output_options_list_content + S_output_entry = 648, // output_entry + S_649_133 = 649, // $@133 + S_output_params_list = 650, // output_params_list + S_output_params = 651, // output_params + S_output = 652, // output + S_653_134 = 653, // $@134 + S_flush = 654, // flush + S_maxsize = 655, // maxsize + S_maxver = 656, // maxver + S_pattern = 657, // pattern + S_658_135 = 658, // $@135 + S_compatibility = 659, // compatibility + S_660_136 = 660, // $@136 + S_compatibility_params = 661, // compatibility_params + S_compatibility_param = 662, // compatibility_param + S_lenient_option_parsing = 663, // lenient_option_parsing + S_ignore_dhcp_server_identifier = 664, // ignore_dhcp_server_identifier + S_ignore_rai_link_selection = 665, // ignore_rai_link_selection + S_exclude_first_last_24 = 666 // exclude_first_last_24 }; }; @@ -2712,6 +2715,21 @@ switch (yykind) return symbol_type (token::TOKEN_SERVE_RETRY_CONTINUE, l); } #endif +#if 201103L <= YY_CPLUSPLUS + static + symbol_type + make_RETRY_ON_STARTUP (location_type l) + { + return symbol_type (token::TOKEN_RETRY_ON_STARTUP, std::move (l)); + } +#else + static + symbol_type + make_RETRY_ON_STARTUP (const location_type& l) + { + return symbol_type (token::TOKEN_RETRY_ON_STARTUP, l); + } +#endif #if 201103L <= YY_CPLUSPLUS static symbol_type @@ -5502,8 +5520,8 @@ switch (yykind) /// Constants. enum { - yylast_ = 1348, ///< Last index in yytable_. - yynnts_ = 441, ///< Number of nonterminal symbols. + yylast_ = 1352, ///< Last index in yytable_. + yynnts_ = 442, ///< Number of nonterminal symbols. yyfinal_ = 28 ///< Termination state number. }; @@ -5570,10 +5588,10 @@ switch (yykind) 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, 217, 218, 219, 220, 221, 222, 223 + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224 }; // Last valid token kind. - const int code_max = 478; + const int code_max = 479; if (t <= 0) return symbol_kind::S_YYEOF; @@ -5748,7 +5766,7 @@ switch (yykind) #line 14 "dhcp4_parser.yy" } } // isc::dhcp -#line 5752 "dhcp4_parser.h" +#line 5770 "dhcp4_parser.h" diff --git a/src/bin/dhcp4/dhcp4_parser.yy b/src/bin/dhcp4/dhcp4_parser.yy index bd5393f6f9..451ac79063 100644 --- a/src/bin/dhcp4/dhcp4_parser.yy +++ b/src/bin/dhcp4/dhcp4_parser.yy @@ -109,6 +109,7 @@ using namespace std; STOP_RETRY_EXIT "stop-retry-exit" SERVE_RETRY_EXIT "serve-retry-exit" SERVE_RETRY_CONTINUE "serve-retry-continue" + RETRY_ON_STARTUP "retry-on-startup" MAX_ROW_ERRORS "max-row-errors" TRUST_ANCHOR "trust-anchor" CERT_FILE "cert-file" @@ -1093,6 +1094,7 @@ database_map_param: database_type | max_reconnect_tries | reconnect_wait_time | on_fail + | retry_on_startup | max_row_errors | trust_anchor | cert_file @@ -1223,6 +1225,12 @@ on_fail_mode: STOP_RETRY_EXIT { $$ = ElementPtr(new StringElement("stop-retry-ex | SERVE_RETRY_CONTINUE { $$ = ElementPtr(new StringElement("serve-retry-continue", ctx.loc2pos(@1))); } ; +retry_on_startup: RETRY_ON_STARTUP COLON BOOLEAN { + ctx.unique("retry-on-startup", ctx.loc2pos(@1)); + ElementPtr n(new BoolElement($3, ctx.loc2pos(@3))); + ctx.stack_.back()->set("retry-on-startup", n); +}; + max_row_errors: MAX_ROW_ERRORS COLON INTEGER { ctx.unique("max-row-errors", ctx.loc2pos(@1)); ElementPtr n(new IntElement($3, ctx.loc2pos(@3))); diff --git a/src/bin/dhcp4/tests/dhcp4_srv_unittest.cc b/src/bin/dhcp4/tests/dhcp4_srv_unittest.cc index 5917972ec8..9f9b0cecd9 100644 --- a/src/bin/dhcp4/tests/dhcp4_srv_unittest.cc +++ b/src/bin/dhcp4/tests/dhcp4_srv_unittest.cc @@ -53,15 +53,16 @@ #include #include -using namespace std; using namespace isc; -using namespace isc::dhcp; -using namespace isc::data; using namespace isc::asiolink; using namespace isc::cb; using namespace isc::config; +using namespace isc::data; +using namespace isc::db; +using namespace isc::dhcp; using namespace isc::dhcp::test; using namespace isc::util; +using namespace std; namespace { @@ -2879,11 +2880,8 @@ Dhcpv4SrvTest::loadConfigFile(const string& path) { // CommandMgr uses IO service to run asynchronous socket operations. CommandMgr::instance().setIOService(srv.getIOService()); - // LeaseMgr uses IO service to run asynchronous timers. - LeaseMgr::setIOService(srv.getIOService()); - - // HostMgr uses IO service to run asynchronous timers. - HostMgr::setIOService(srv.getIOService()); + // DatabaseConnection uses IO service to run asynchronous timers. + DatabaseConnection::setIOService(srv.getIOService()); Parser4Context parser; ConstElementPtr json; @@ -2917,11 +2915,8 @@ Dhcpv4SrvTest::loadConfigFile(const string& path) { // Reset CommandMgr IO service. CommandMgr::instance().setIOService(IOServicePtr()); - // Reset LeaseMgr IO service. - LeaseMgr::setIOService(IOServicePtr()); - - // Reset HostMgr IO service. - HostMgr::setIOService(IOServicePtr()); + // Reset DatabaseConnection IO service. + DatabaseConnection::setIOService(IOServicePtr()); } /// @brief Class which handles initialization of database diff --git a/src/bin/dhcp4/tests/dhcp4_test_utils.h b/src/bin/dhcp4/tests/dhcp4_test_utils.h index fa4cf7e0c7..ee43823875 100644 --- a/src/bin/dhcp4/tests/dhcp4_test_utils.h +++ b/src/bin/dhcp4/tests/dhcp4_test_utils.h @@ -125,7 +125,7 @@ public: // Create fixed server id. server_id_.reset(new Option4AddrLst(DHO_DHCP_SERVER_IDENTIFIER, asiolink::IOAddress("192.0.3.1"))); - LeaseMgr::setIOService(getIOService()); + db::DatabaseConnection::setIOService(getIOService()); } /// @brief Returns fixed server identifier assigned to the naked server diff --git a/src/bin/dhcp6/ctrl_dhcp6_srv.cc b/src/bin/dhcp6/ctrl_dhcp6_srv.cc index 514df2bb1e..e8e6958952 100644 --- a/src/bin/dhcp6/ctrl_dhcp6_srv.cc +++ b/src/bin/dhcp6/ctrl_dhcp6_srv.cc @@ -916,6 +916,10 @@ isc::data::ConstElementPtr ControlledDhcpv6Srv::processConfig(isc::data::ConstElementPtr config) { ControlledDhcpv6Srv* srv = ControlledDhcpv6Srv::getInstance(); + // Allow DB reconnect on startup. The database connection parameters specify + // respective details. + DbConnectionInitWithRetry retry; + // Single stream instance used in all error clauses std::ostringstream err; @@ -1174,11 +1178,8 @@ ControlledDhcpv6Srv::ControlledDhcpv6Srv(uint16_t server_port /*= DHCP6_SERVER_P // CommandMgr uses IO service to run asynchronous socket operations. CommandMgr::instance().setIOService(getIOService()); - // LeaseMgr uses IO service to run asynchronous timers. - LeaseMgr::setIOService(getIOService()); - - // HostMgr uses IO service to run asynchronous timers. - HostMgr::setIOService(getIOService()); + // DatabaseConnection uses IO service to run asynchronous timers. + DatabaseConnection::setIOService(getIOService()); // These are the commands always supported by the DHCPv6 server. // Please keep the list in alphabetic order. @@ -1314,11 +1315,8 @@ ControlledDhcpv6Srv::~ControlledDhcpv6Srv() { CommandMgr::instance().deregisterCommand("status-get"); CommandMgr::instance().deregisterCommand("version-get"); - // LeaseMgr uses IO service to run asynchronous timers. - LeaseMgr::setIOService(IOServicePtr()); - - // HostMgr uses IO service to run asynchronous timers. - HostMgr::setIOService(IOServicePtr()); + // Reset DatabaseConnection IO service. + DatabaseConnection::setIOService(IOServicePtr()); } catch (...) { // Don't want to throw exceptions from the destructor. The server // is shutting down anyway. diff --git a/src/bin/dhcp6/dhcp6_lexer.cc b/src/bin/dhcp6/dhcp6_lexer.cc index e4de07d71f..59a7db9523 100644 --- a/src/bin/dhcp6/dhcp6_lexer.cc +++ b/src/bin/dhcp6/dhcp6_lexer.cc @@ -1,6 +1,6 @@ -#line 1 "dhcp6_lexer.cc" +#line 2 "dhcp6_lexer.cc" -#line 3 "dhcp6_lexer.cc" +#line 4 "dhcp6_lexer.cc" #define YY_INT_ALIGNED short int @@ -691,8 +691,8 @@ static void yynoreturn yy_fatal_error ( const char* msg ); /* %% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \ */\ (yy_c_buf_p) = yy_cp; /* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */ -#define YY_NUM_RULES 237 -#define YY_END_OF_BUFFER 238 +#define YY_NUM_RULES 238 +#define YY_END_OF_BUFFER 239 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -700,21 +700,21 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[2304] = +static const flex_int16_t yy_accept[2319] = { 0, - 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, - 238, 236, 10, 11, 236, 1, 230, 227, 230, 230, - 236, 229, 228, 236, 236, 236, 236, 236, 223, 224, - 236, 236, 236, 225, 226, 5, 5, 5, 236, 236, - 236, 10, 11, 0, 0, 218, 0, 0, 0, 0, + 231, 231, 0, 0, 0, 0, 0, 0, 0, 0, + 239, 237, 10, 11, 237, 1, 231, 228, 231, 231, + 237, 230, 229, 237, 237, 237, 237, 237, 224, 225, + 237, 237, 237, 226, 227, 5, 5, 5, 237, 237, + 237, 10, 11, 0, 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 230, 230, 0, 229, 230, 3, 2, 6, 0, 230, + 231, 231, 0, 230, 231, 3, 2, 6, 0, 231, 0, 0, 0, 0, 0, 0, 4, 0, 0, 9, - 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 221, 0, 0, + 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -724,12 +724,12 @@ static const flex_int16_t yy_accept[2304] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 8, 0, - 0, 0, 187, 0, 0, 188, 0, 0, 0, 0, - 0, 0, 0, 0, 220, 222, 0, 0, 0, 0, + 0, 0, 188, 0, 0, 189, 0, 0, 0, 0, + 0, 0, 0, 0, 221, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -737,225 +737,226 @@ static const flex_int16_t yy_accept[2304] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 235, 233, 0, 232, 231, - 0, 0, 0, 0, 0, 0, 186, 0, 0, 28, - 0, 27, 0, 0, 139, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 236, 234, 0, 233, + 232, 0, 0, 0, 0, 0, 0, 187, 0, 0, + 28, 0, 27, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 234, 231, 0, 0, 0, 0, 0, 29, - 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 143, 0, 0, 0, 0, 0, - 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 235, 232, 0, 0, 0, 0, + 0, 29, 0, 0, 31, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, + 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, - 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, + 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 125, 0, 0, 62, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 165, 0, - - 191, 0, 55, 0, 59, 0, 0, 0, 0, 0, - 0, 37, 34, 33, 0, 0, 0, 0, 0, 179, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, - 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, - 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, - - 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 180, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 175, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7, 35, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 126, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 138, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 158, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 155, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 120, 0, 0, 0, 0, 0, 0, + 0, 166, 0, 192, 0, 55, 0, 59, 0, 0, + 0, 0, 0, 0, 37, 34, 33, 0, 0, 0, + 0, 0, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 129, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - - 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, + 0, 0, 0, 0, 0, 0, 0, 0, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 184, 152, 0, 0, 0, 0, 0, 0, 0, 157, - 56, 0, 0, 0, 0, 0, 0, 70, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, - 0, 63, 126, 0, 0, 0, 0, 0, 0, 0, - - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 211, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 135, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 173, 0, 0, 0, 0, 0, 0, 0, 78, 0, - - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 60, 0, 119, 0, - 0, 0, 170, 0, 0, 0, 0, 0, 54, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, - 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - - 0, 0, 0, 0, 0, 0, 0, 212, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 130, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 0, 0, 185, 14, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 57, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 119, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 172, 189, 0, 40, 0, 181, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 20, 0, 117, 0, 0, - 112, 0, 0, 0, 0, 0, 0, 183, 0, 0, - 58, 0, 121, 0, 210, 0, 0, 0, 0, 0, - - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 89, 0, 0, 0, 0, 0, 0, 0, 148, 149, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 116, 0, 0, 0, 79, 0, 0, + 0, 0, 0, 0, 0, 0, 7, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 178, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 144, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 113, 137, 0, 0, 0, - - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 86, 0, 0, 0, 0, 0, 17, - 0, 15, 0, 0, 207, 206, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 30, 0, 0, 0, 164, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 200, 0, 0, 209, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 131, 0, 169, 0, 46, 0, 0, 64, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - - 19, 0, 0, 0, 0, 0, 0, 0, 92, 0, - 0, 133, 66, 87, 0, 0, 177, 0, 0, 0, - 0, 168, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 76, 0, 127, 0, 0, 0, - 0, 0, 0, 0, 151, 0, 0, 0, 216, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 124, 0, 0, 0, 0, - 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, - 0, 0, 0, 166, 0, 0, 0, 67, 0, 0, - 0, 0, 0, 0, 0, 162, 51, 0, 0, 0, - 205, 38, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, - 0, 48, 0, 0, 18, 0, 0, 0, 75, 0, - 0, 0, 0, 0, 154, 153, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 156, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 83, 0, 0, 0, 0, 0, 150, 0, - 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 122, 0, 0, - 0, 0, 0, 0, 182, 0, 0, 0, 50, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, + 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 111, 0, 71, 0, 0, 0, 0, 0, 104, 0, - 0, 36, 0, 52, 0, 0, 0, 0, 0, 0, - - 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 198, 0, 0, 0, 0, 167, 0, + 0, 0, 0, 0, 0, 0, 0, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 134, 0, 0, 0, 0, 0, 72, 0, 0, 0, - 0, 68, 203, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, - 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 204, 0, 0, 13, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 185, 153, 0, 0, 0, + 0, 0, 0, 0, 158, 56, 0, 0, 0, 0, + 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 160, 0, 0, 63, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 208, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 197, 0, 85, - 0, 84, 0, 21, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 105, 0, 147, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, - 0, 0, 196, 0, 0, 0, 0, 0, 74, 0, - 0, 90, 0, 69, 0, 23, 0, 140, 0, 0, + 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 212, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 136, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, - 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, + 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 107, 53, - 0, 0, 0, 100, 0, 0, 0, 0, 202, 0, - 0, 0, 0, 214, 217, 82, 81, 22, 0, 145, + 0, 0, 60, 0, 120, 0, 0, 0, 171, 0, + 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, + 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, - 163, 141, 0, 0, 0, 0, 0, 0, 0, 106, - 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, - 0, 194, 0, 0, 0, 0, 0, 0, 199, 0, - 0, 98, 0, 88, 0, 0, 0, 0, 0, 0, - 142, 0, 0, 0, 0, 0, 0, 0, 0, 193, - 0, 0, 26, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 97, 0, 0, 0, 0, 44, 42, 0, 0, - 0, 0, 102, 0, 0, 146, 0, 94, 0, 103, - 0, 0, 0, 0, 0, 0, 0, 93, 0, 195, + 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 131, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, + 0, 186, 14, 0, 0, 0, 0, 0, 0, 0, - 43, 213, 0 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 173, 190, 0, 40, 0, 182, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 20, 0, 118, 0, 0, 113, 0, + 0, 0, 0, 0, 0, 184, 0, 0, 58, 0, + + 122, 0, 211, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, + 0, 0, 0, 0, 0, 0, 0, 149, 150, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 117, 0, 0, 0, 80, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 179, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 145, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 114, 138, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 87, 0, 0, 0, 0, 0, 0, 17, + 0, 15, 0, 0, 208, 207, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 30, 0, 0, 0, 165, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 201, 0, 0, 210, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 132, 0, 170, 0, 46, 0, 0, 64, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 19, 0, 0, 0, 0, 0, 0, 0, 93, 0, + 0, 134, 66, 88, 0, 0, 178, 0, 0, 0, + 0, 169, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 77, 0, 128, 0, 0, + 0, 0, 0, 0, 0, 152, 0, 0, 0, 217, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 125, 0, 0, 0, + 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, + 0, 0, 0, 0, 0, 167, 0, 0, 0, 67, + 0, 0, 0, 0, 0, 0, 0, 163, 51, 0, + 0, 0, 206, 38, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, + 0, 0, 0, 48, 0, 0, 18, 0, 0, 0, + 76, 0, 0, 0, 0, 0, 155, 154, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, + 0, 151, 0, 0, 0, 65, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 123, 0, 0, 0, 0, 0, 0, 183, 0, 0, + 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 112, 0, 71, 0, 0, 0, + + 0, 0, 105, 0, 0, 36, 0, 52, 0, 0, + 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 199, 0, 0, + 0, 0, 168, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 135, 0, 0, 0, 0, 74, + 0, 72, 0, 0, 0, 0, 68, 204, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 25, 39, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 205, 0, 0, 13, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 198, 0, 86, 0, 85, 0, 21, 0, + 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, + 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 124, 0, 0, 0, 197, 0, 0, + + 0, 0, 0, 75, 0, 0, 91, 0, 69, 0, + 23, 0, 141, 0, 0, 0, 0, 0, 0, 0, + 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 102, 0, 0, 0, 0, 0, 47, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 73, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 108, 53, 0, 0, 0, 101, 0, + + 0, 0, 0, 203, 0, 0, 0, 0, 215, 218, + 83, 82, 22, 0, 146, 164, 142, 0, 0, 0, + 0, 0, 0, 0, 107, 0, 0, 97, 0, 0, + 0, 0, 0, 0, 0, 0, 195, 0, 0, 0, + 0, 0, 0, 200, 0, 0, 99, 0, 89, 0, + 0, 0, 0, 0, 0, 143, 0, 0, 0, 0, + 0, 0, 0, 0, 194, 0, 0, 26, 216, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, + 0, 44, 42, 0, 0, 0, 0, 103, 0, 0, + + 147, 0, 95, 0, 104, 0, 0, 0, 0, 0, + 0, 0, 94, 0, 196, 43, 214, 0 } ; static const YY_CHAR yy_ec[256] = @@ -1002,280 +1003,281 @@ static const YY_CHAR yy_meta[77] = 1, 1, 1, 1, 1, 1 } ; -static const flex_int16_t yy_base[2312] = +static const flex_int16_t yy_base[2327] = { 0, 0, 75, 21, 28, 39, 47, 53, 61, 95, 103, - 2750, 2751, 31, 2746, 151, 0, 216, 2751, 223, 230, - 13, 237, 2751, 2726, 124, 17, 4, 34, 2751, 2751, - 23, 43, 64, 2751, 2751, 2751, 56, 2734, 2684, 0, - 2724, 106, 2741, 2, 268, 2751, 85, 90, 2687, 2708, - 98, 77, 2708, 235, 231, 97, 207, 298, 226, 312, - 293, 62, 254, 205, 203, 223, 2687, 252, 321, 336, - 289, 339, 2670, 21, 344, 394, 354, 2689, 348, 0, - 408, 422, 448, 456, 462, 2751, 0, 2751, 438, 470, - 240, 256, 244, 321, 322, 278, 2751, 2686, 2730, 2751, + 2767, 2768, 31, 2763, 151, 0, 216, 2768, 223, 230, + 13, 237, 2768, 2743, 124, 17, 4, 34, 2768, 2768, + 23, 43, 64, 2768, 2768, 2768, 56, 2751, 2701, 0, + 2741, 106, 2758, 2, 268, 2768, 85, 90, 2704, 2725, + 98, 77, 2725, 235, 231, 97, 207, 298, 226, 312, + 293, 62, 254, 205, 203, 223, 2704, 252, 321, 336, + 289, 339, 2687, 21, 344, 394, 354, 2706, 348, 0, + 408, 422, 448, 456, 462, 2768, 0, 2768, 438, 470, + 240, 256, 244, 321, 322, 278, 2768, 2703, 2747, 2768, - 266, 2751, 484, 315, 374, 2684, 2728, 323, 17, 334, - 362, 2722, 379, 377, 384, 391, 2726, 0, 548, 439, - 2665, 431, 2664, 2665, 2671, 440, 2657, 2658, 2663, 76, - 2673, 2656, 2665, 2655, 445, 452, 63, 2658, 2656, 444, - 2645, 2706, 16, 2648, 2704, 2641, 180, 2662, 2662, 2656, - 209, 2649, 2647, 2648, 2640, 2645, 2639, 388, 2650, 373, - 2635, 2634, 2648, 455, 2689, 2633, 451, 2645, 459, 2633, - 518, 2634, 462, 2646, 2643, 2644, 379, 2642, 2680, 2679, - 405, 200, 2623, 2627, 458, 2623, 2615, 2632, 2624, 2626, - 0, 481, 498, 473, 503, 500, 498, 2622, 2751, 512, + 266, 2768, 484, 315, 374, 2701, 2745, 323, 17, 334, + 362, 2739, 379, 377, 384, 391, 2743, 0, 548, 439, + 2682, 431, 2681, 2682, 2688, 440, 2674, 2675, 2680, 76, + 2690, 2673, 2682, 2672, 445, 452, 63, 2675, 2673, 444, + 2662, 2723, 16, 2665, 2721, 2658, 180, 2679, 2679, 2673, + 209, 2666, 2664, 2665, 2657, 2662, 2656, 388, 2667, 373, + 2652, 2651, 2665, 455, 2706, 2650, 451, 2662, 459, 2650, + 518, 2651, 462, 2663, 2660, 2661, 379, 2659, 2697, 2696, + 405, 200, 2640, 2644, 458, 2640, 2632, 2649, 2641, 2643, + 0, 481, 498, 473, 503, 500, 498, 2639, 2768, 512, - 530, 2617, 2751, 519, 515, 2751, 2674, 552, 559, 2673, - 560, 2672, 554, 2671, 2751, 2751, 603, 530, 566, 2627, - 2619, 2623, 2624, 2604, 2615, 2617, 2616, 334, 541, 2657, - 2618, 2599, 2596, 2604, 2610, 2598, 2612, 2608, 2599, 2608, - 2608, 2603, 2595, 2597, 2600, 2580, 2584, 2597, 2599, 2596, - 2588, 2578, 2581, 2595, 2751, 2581, 2589, 82, 2630, 2573, - 2582, 2627, 2571, 2581, 2624, 579, 2580, 2622, 2564, 2566, - 2577, 2618, 569, 2622, 2573, 2553, 2568, 528, 2558, 2564, - 488, 2555, 2553, 347, 2553, 2559, 2550, 2549, 2562, 2555, - 2545, 2556, 2560, 2559, 2553, 480, 2560, 2555, 2547, 2537, + 530, 2634, 2768, 521, 515, 2768, 2691, 552, 559, 2690, + 560, 2689, 555, 2688, 2768, 2768, 604, 530, 567, 2644, + 2636, 2640, 2641, 2621, 2632, 2634, 2633, 334, 541, 2674, + 2635, 2616, 2613, 2621, 2627, 2615, 2629, 2625, 2616, 2625, + 2625, 2620, 2612, 2614, 2617, 2597, 2601, 2614, 2616, 2613, + 2605, 2595, 2598, 2612, 2768, 2598, 2606, 82, 2647, 2590, + 2599, 2644, 2588, 2598, 2641, 545, 2597, 2639, 2581, 2583, + 2594, 2635, 580, 2639, 2590, 2570, 2585, 528, 2575, 2581, + 488, 2572, 2570, 347, 2570, 2576, 2567, 2566, 2579, 2572, + 2562, 2573, 2577, 2576, 2570, 480, 2577, 2572, 2564, 2554, - 2552, 2547, 2551, 2532, 2548, 2534, 2540, 2547, 2529, 214, - 2534, 2531, 2530, 600, 2529, 2524, 2538, 2537, 580, 2536, - 2539, 2521, 2529, 2517, 581, 2751, 2751, 585, 2751, 2751, - 2515, 550, 582, 2565, 597, 2576, 2751, 595, 606, 2751, - 2575, 2751, 2569, 649, 2751, 2528, 595, 2505, 2524, 2507, - 2524, 2563, 2520, 2510, 2565, 2517, 2520, 2511, 2514, 2500, - 2511, 631, 2553, 2508, 2505, 2506, 634, 2510, 2553, 2485, - 2497, 2492, 2489, 2485, 2487, 2490, 2540, 2494, 2483, 2499, - 2536, 2479, 672, 2492, 2492, 2475, 2476, 2489, 2487, 2485, - 2485, 2484, 2479, 2486, 2481, 2466, 615, 2475, 2478, 2473, + 2569, 2555, 2563, 2567, 2548, 2564, 2550, 2556, 2563, 2545, + 214, 2550, 2547, 2546, 585, 2545, 2540, 2554, 2553, 581, + 2552, 2555, 2537, 2545, 2533, 584, 2768, 2768, 587, 2768, + 2768, 2531, 550, 592, 2581, 599, 2592, 2768, 569, 607, + 2768, 2591, 2768, 2585, 650, 2768, 2544, 597, 2521, 2540, + 2523, 2540, 2579, 2536, 2526, 2581, 2533, 2536, 2527, 2530, + 2516, 2527, 632, 2569, 2524, 2521, 2522, 628, 2526, 2569, + 2501, 2513, 2508, 2505, 2501, 2503, 2506, 2556, 2510, 2499, + 2515, 2552, 2495, 673, 2508, 2508, 2491, 2492, 2505, 2503, + 2501, 2501, 2500, 2495, 2502, 2497, 2482, 616, 2491, 2494, - 618, 2472, 2468, 2521, 594, 603, 2751, 2477, 2514, 2461, - 2460, 2453, 2455, 2467, 2458, 2465, 2446, 2463, 2455, 2451, - 2456, 678, 2506, 2456, 633, 2453, 2456, 2456, 2454, 50, - 2444, 2456, 625, 2431, 2432, 2453, 2444, 2434, 2431, 2445, - 639, 2431, 2443, 2442, 2441, 2436, 2481, 2438, 2437, 2436, - 2435, 2418, 2426, 2479, 2435, 2477, 2414, 2475, 2414, 698, - 2427, 2425, 2751, 2751, 2425, 655, 2465, 2469, 2468, 2751, - 2467, 617, 2751, 661, 732, 2423, 668, 2465, 2459, 2409, - 2411, 2413, 2400, 2397, 2751, 2402, 2395, 2407, 2410, 2397, - 2396, 2751, 2406, 661, 2397, 2394, 2406, 539, 2391, 2393, + 2489, 580, 2488, 2484, 2537, 595, 605, 2768, 2493, 2530, + 2477, 2476, 2469, 2471, 2483, 2474, 2481, 2462, 2479, 2471, + 2467, 2472, 677, 2522, 2472, 632, 2469, 2472, 2472, 2470, + 50, 2460, 2472, 625, 2447, 2448, 2469, 2460, 2450, 2442, + 2446, 2460, 637, 2446, 2458, 2457, 2456, 2451, 2496, 2453, + 2452, 2451, 2450, 2433, 2441, 2494, 2450, 2492, 2429, 2490, + 2429, 686, 2442, 2440, 2768, 2768, 2440, 631, 2480, 2484, + 2483, 2768, 2482, 619, 2768, 659, 731, 2438, 658, 2480, + 2474, 2424, 2426, 2428, 2415, 2412, 2768, 2417, 2410, 2422, + 2425, 2412, 2411, 2768, 2421, 661, 2412, 2409, 2421, 492, - 2751, 2441, 2398, 2383, 2385, 2396, 2394, 2394, 2388, 699, - 2395, 2383, 2376, 2430, 2751, 2374, 2390, 2427, 2431, 2384, - 2378, 2380, 2381, 2365, 2374, 2419, 2367, 2366, 2361, 2360, - 2362, 2358, 2354, 654, 2373, 2347, 2354, 2359, 2352, 2368, - 2405, 2409, 2751, 2351, 2347, 702, 2355, 2354, 2348, 2355, - 2340, 2350, 2338, 2352, 2352, 2340, 2336, 2341, 2337, 2332, - 2751, 2341, 2391, 2751, 2330, 2329, 2322, 2339, 2381, 2380, - 2322, 2321, 2326, 2335, 2329, 2323, 2332, 708, 2372, 2331, - 2315, 2310, 2306, 2312, 649, 2326, 2319, 2323, 2306, 2367, - 2305, 2305, 2359, 2301, 2302, 2301, 2299, 2316, 2751, 2312, + 2406, 2408, 2768, 2456, 2413, 2398, 2400, 2411, 2409, 2409, + 2403, 699, 2410, 2398, 2391, 2445, 2768, 2389, 2405, 2442, + 2446, 2399, 2393, 2395, 2396, 2380, 2389, 2434, 2382, 2381, + 2376, 2375, 2377, 2373, 2369, 654, 2388, 2362, 2369, 2374, + 2367, 2383, 2420, 2424, 2768, 2366, 2362, 700, 2370, 2369, + 2363, 2370, 2355, 2365, 2353, 2367, 2367, 2355, 2351, 2356, + 2352, 2347, 2768, 2356, 2406, 2768, 2345, 2344, 2337, 2354, + 2396, 2395, 2337, 2336, 2341, 2350, 2344, 2338, 2347, 702, + 2387, 2346, 2330, 2325, 2383, 2320, 2326, 649, 2340, 2333, + 2337, 2320, 2381, 2319, 2319, 2373, 2315, 2316, 2315, 2313, - 2751, 2352, 2751, 2300, 2751, 2310, 2349, 2348, 2305, 2351, - 691, 2751, 2751, 2751, 669, 608, 674, 2288, 725, 2751, - 693, 2306, 2286, 2296, 2341, 2340, 2282, 2292, 2337, 2279, - 2286, 2279, 2287, 2280, 2289, 2271, 2271, 2286, 2285, 2269, - 478, 2283, 2282, 2266, 2281, 2263, 2313, 2277, 2274, 2317, - 2258, 2260, 2272, 2272, 2270, 2270, 2751, 2255, 2252, 2313, - 2265, 2257, 2263, 2254, 2262, 2751, 2247, 2258, 2262, 2244, - 2256, 2248, 686, 2239, 2238, 2232, 2237, 2234, 2249, 2248, - 2249, 2228, 2238, 2244, 2290, 2242, 2241, 2233, 2224, 2751, - 2225, 2227, 2751, 2222, 2228, 2233, 2275, 2274, 757, 2232, + 2330, 2768, 2326, 2768, 2366, 2768, 2314, 2768, 2324, 2363, + 2362, 2319, 2365, 723, 2768, 2768, 2768, 709, 674, 677, + 2302, 725, 2768, 671, 2320, 2300, 2310, 2355, 2354, 2296, + 2306, 2351, 2293, 2300, 2293, 2301, 2294, 2303, 2285, 2285, + 2300, 2299, 2283, 478, 2297, 2296, 2280, 2295, 2277, 2327, + 2291, 2288, 2331, 2272, 2274, 2286, 2286, 2284, 2284, 2768, + 2269, 2266, 2327, 2279, 2271, 2277, 2268, 2276, 2768, 2261, + 2272, 2276, 2258, 2270, 2262, 610, 2253, 2252, 2246, 2251, + 2248, 2263, 2262, 2263, 2242, 2252, 2258, 2304, 2256, 2255, + 2247, 2238, 2768, 2239, 2241, 2768, 2236, 2242, 2247, 2289, - 2272, 2214, 2270, 2214, 2217, 2215, 2217, 2208, 2223, 2751, - 2221, 2207, 758, 2199, 2203, 2219, 2216, 2211, 2207, 2255, - 2204, 2211, 2252, 2751, 2195, 2193, 2207, 2206, 2209, 2246, - 2245, 2189, 2243, 2200, 2180, 26, 27, 2751, 211, 323, - 377, 487, 493, 505, 506, 557, 625, 610, 668, 669, - 681, 674, 2751, 2751, 700, 721, 720, 726, 739, 690, - 700, 721, 715, 705, 701, 715, 716, 726, 774, 737, - 737, 779, 782, 734, 730, 735, 736, 746, 751, 737, - 740, 743, 752, 753, 737, 797, 756, 748, 759, 802, - 762, 755, 755, 757, 761, 767, 810, 770, 817, 772, + 2288, 727, 2246, 2286, 2228, 2284, 2228, 2231, 2229, 2231, + 2222, 2237, 2768, 2235, 2221, 755, 2213, 2217, 2233, 2230, + 2225, 2221, 2269, 2218, 2225, 2266, 2768, 2209, 2207, 2221, + 2220, 2223, 2208, 2259, 2254, 213, 365, 377, 425, 494, + 593, 2768, 557, 594, 665, 735, 668, 669, 669, 674, + 740, 703, 709, 700, 704, 699, 2768, 2768, 725, 739, + 739, 731, 747, 709, 706, 728, 722, 711, 713, 727, + 728, 738, 784, 741, 741, 790, 791, 742, 738, 743, + 744, 754, 760, 746, 749, 752, 761, 761, 745, 805, + 764, 756, 766, 809, 769, 762, 762, 764, 768, 774, - 773, 2751, 776, 771, 762, 777, 782, 779, 776, 783, - 782, 770, 784, 782, 790, 829, 788, 836, 837, 778, - 791, 777, 787, 837, 792, 845, 2751, 846, 799, 797, - 799, 795, 789, 805, 853, 849, 809, 798, 2751, 800, - 801, 812, 801, 814, 804, 817, 864, 820, 805, 867, - 868, 808, 823, 2751, 817, 811, 822, 807, 818, 831, - 822, 811, 817, 875, 836, 820, 820, 833, 880, 881, - 825, 843, 838, 843, 840, 887, 826, 838, 839, 846, - 837, 834, 2751, 903, 857, 858, 846, 860, 850, 853, - 864, 855, 861, 862, 890, 882, 911, 912, 886, 859, + 817, 777, 824, 779, 780, 2768, 783, 778, 769, 784, + 789, 786, 783, 790, 789, 777, 791, 789, 797, 836, + 795, 843, 844, 785, 798, 784, 794, 844, 799, 852, + 2768, 853, 806, 804, 806, 802, 796, 812, 860, 856, + 816, 805, 2768, 807, 808, 819, 808, 821, 811, 824, + 871, 827, 812, 874, 875, 815, 830, 2768, 824, 818, + 829, 814, 825, 838, 829, 818, 824, 882, 843, 827, + 827, 840, 887, 888, 832, 839, 851, 846, 851, 848, + 895, 834, 846, 847, 854, 845, 842, 2768, 911, 865, + 866, 854, 868, 858, 861, 872, 863, 869, 870, 898, - 873, 855, 862, 876, 924, 878, 875, 873, 2751, 877, - 872, 887, 884, 870, 872, 891, 888, 888, 890, 878, - 885, 886, 896, 938, 902, 941, 901, 891, 904, 890, - 889, 895, 954, 898, 893, 894, 900, 916, 899, 956, - 908, 958, 2751, 919, 919, 912, 923, 921, 969, 908, - 910, 925, 926, 914, 912, 977, 931, 917, 923, 921, - 2751, 2751, 937, 936, 937, 942, 930, 940, 942, 2751, - 2751, 942, 944, 931, 949, 936, 938, 2751, 935, 953, - 940, 940, 941, 996, 939, 943, 961, 1005, 2751, 963, - 1007, 2751, 2751, 949, 963, 963, 1011, 956, 955, 959, + 890, 919, 920, 894, 867, 881, 863, 870, 884, 932, + 886, 883, 881, 2768, 885, 880, 895, 892, 878, 880, + 899, 896, 896, 898, 886, 893, 894, 904, 946, 910, + 949, 909, 899, 912, 898, 897, 903, 962, 906, 901, + 902, 908, 924, 907, 964, 916, 966, 2768, 927, 927, + 920, 931, 929, 977, 916, 918, 933, 934, 922, 920, + 985, 939, 925, 931, 929, 2768, 2768, 945, 944, 945, + 950, 938, 948, 950, 2768, 2768, 950, 952, 939, 957, + 944, 946, 2768, 943, 961, 948, 948, 949, 1004, 947, + 951, 969, 1013, 2768, 971, 1015, 2768, 2768, 957, 971, - 953, 969, 1017, 967, 957, 958, 954, 964, 968, 979, - 980, 975, 977, 970, 972, 968, 985, 975, 990, 973, - 1035, 989, 994, 971, 994, 980, 979, 2751, 986, 988, - 1040, 1041, 990, 1003, 1044, 988, 1003, 997, 1021, 1031, - 1019, 1027, 1039, 1056, 1002, 1054, 1014, 1057, 2751, 1063, - 1003, 1022, 1012, 1011, 1006, 1007, 1019, 1014, 1010, 1028, - 1020, 1015, 1016, 1026, 1035, 1074, 1022, 1021, 1042, 1034, - 1029, 1085, 1091, 1045, 1036, 2751, 1050, 1041, 1049, 1051, - 1036, 1052, 1042, 1054, 1051, 1049, 1099, 1062, 1046, 1047, - 2751, 1063, 1066, 1049, 1051, 1112, 1052, 1071, 2751, 1070, + 971, 1019, 964, 963, 967, 961, 977, 1025, 975, 965, + 966, 962, 972, 976, 987, 988, 983, 1030, 986, 979, + 981, 977, 994, 984, 999, 982, 1044, 998, 1003, 980, + 1003, 989, 988, 2768, 995, 997, 1049, 1050, 999, 1012, + 1053, 997, 1012, 1006, 1030, 1040, 1028, 1036, 1048, 1065, + 1011, 1063, 1023, 1066, 2768, 1072, 1012, 1031, 1021, 1020, + 1015, 1016, 1028, 1023, 1019, 1037, 1029, 1024, 1025, 1035, + 1044, 1083, 1031, 1030, 1051, 1043, 1038, 1094, 1100, 1054, + 1045, 2768, 1059, 1050, 1058, 1060, 1045, 1061, 1051, 1063, + 1060, 1058, 1108, 1071, 1055, 1056, 2768, 1072, 1075, 1058, - 1073, 1060, 1055, 1073, 1061, 1117, 1072, 1068, 1065, 1121, - 1067, 1123, 1082, 1068, 1086, 1086, 1086, 1072, 1087, 1079, - 1075, 1076, 1094, 1093, 1080, 1097, 2751, 1081, 2751, 1090, - 1140, 1090, 2751, 1098, 1101, 1094, 1151, 1095, 2751, 1098, - 1103, 1150, 1098, 1099, 1111, 1105, 1106, 1104, 1115, 1163, - 1104, 1105, 1166, 1167, 1108, 1120, 1113, 2751, 1109, 1117, - 1116, 1170, 1109, 1130, 1116, 1117, 1118, 1119, 1125, 1133, - 1124, 1138, 1139, 1140, 1155, 1184, 1167, 1159, 1164, 2751, - 1147, 1151, 1134, 1134, 2751, 1135, 1137, 1148, 1138, 1158, - 1157, 1148, 1159, 1205, 1144, 1156, 1165, 1158, 1162, 1166, + 1060, 1121, 1061, 1080, 2768, 1079, 1082, 1069, 1064, 1082, + 1070, 1126, 1081, 1077, 1074, 1130, 1076, 1132, 1091, 1077, + 1095, 1095, 1095, 1081, 1096, 1088, 1084, 1085, 1103, 1102, + 1089, 1106, 2768, 1090, 2768, 1099, 1149, 1099, 2768, 1107, + 1110, 1103, 1160, 1104, 2768, 1107, 1112, 1159, 1107, 1108, + 1120, 1114, 1115, 1113, 1110, 1125, 1173, 1114, 1115, 1176, + 1177, 1118, 1130, 1123, 2768, 1119, 1128, 1126, 1180, 1119, + 1140, 1126, 1127, 1128, 1129, 1135, 1143, 1134, 1148, 1149, + 1150, 1165, 1194, 1177, 1169, 1174, 2768, 1157, 1161, 1144, + 1144, 2768, 1145, 1147, 1158, 1148, 1168, 1167, 1158, 1169, - 1149, 1166, 1167, 1158, 1216, 1164, 1168, 2751, 1218, 1164, - 1182, 1164, 1164, 1185, 1182, 1225, 1171, 1189, 1177, 1191, - 1177, 1185, 1194, 1174, 1189, 1196, 1241, 1242, 2751, 1192, - 1244, 1245, 1184, 1194, 1204, 1188, 1208, 1191, 1193, 1193, - 1200, 1209, 1197, 1204, 1199, 1206, 1218, 1262, 1206, 1264, - 1206, 1223, 1267, 1214, 1218, 1219, 1217, 1215, 1210, 1274, - 1222, 1219, 1277, 1224, 1279, 1275, 1281, 1231, 2751, 1220, - 1237, 1230, 1221, 1240, 1234, 1229, 1239, 1240, 1237, 1249, - 2751, 1233, 1229, 2751, 2751, 1235, 1298, 1254, 1235, 1254, - 1255, 1257, 1299, 1249, 1306, 1307, 1257, 1262, 1256, 1254, + 1215, 1154, 1166, 1175, 1168, 1172, 1176, 1159, 1176, 1177, + 1168, 1226, 1174, 1178, 2768, 1228, 1174, 1192, 1174, 1174, + 1195, 1192, 1235, 1181, 1199, 1187, 1201, 1187, 1195, 1204, + 1184, 1199, 1206, 1251, 1252, 2768, 1202, 1254, 1255, 1194, + 1204, 1214, 1198, 1218, 1201, 1203, 1203, 1210, 1219, 1207, + 1214, 1209, 1216, 1228, 1272, 1216, 1274, 1216, 1233, 1277, + 1224, 1228, 1229, 1227, 1225, 1220, 1284, 1232, 1229, 1287, + 1234, 1289, 1285, 1291, 1241, 2768, 1230, 1247, 1240, 1231, + 1250, 1244, 1239, 1249, 1250, 1247, 1242, 1260, 2768, 1244, + 1240, 2768, 2768, 1246, 1309, 1265, 1246, 1265, 1266, 1268, - 1265, 1247, 1252, 1258, 1284, 1297, 1285, 1299, 1286, 1321, - 1273, 1273, 1277, 1325, 1265, 1265, 1268, 1285, 1280, 1284, - 1279, 2751, 1276, 1289, 1273, 1290, 1270, 1291, 1281, 1280, - 1336, 1286, 2751, 1300, 1302, 1305, 1289, 1298, 1302, 1307, - 1293, 1356, 1306, 1311, 1298, 1312, 1310, 1302, 1308, 1304, - 1322, 1323, 1324, 2751, 2751, 1322, 2751, 1324, 2751, 1309, - 1320, 1311, 1330, 1323, 1321, 1376, 1330, 1327, 1374, 1335, - 1324, 1331, 1336, 1333, 1339, 2751, 1332, 2751, 1324, 1388, - 2751, 1389, 1333, 1334, 1341, 1388, 1347, 2751, 1348, 1336, - 2751, 1346, 2751, 1337, 2751, 1337, 1338, 1341, 1355, 1360, + 1310, 1260, 1317, 1318, 1268, 1273, 1267, 1265, 1276, 1258, + 1263, 1269, 1295, 1308, 1296, 1310, 1297, 1332, 1284, 1284, + 1288, 1336, 1276, 1276, 1279, 1296, 1291, 1295, 1290, 2768, + 1287, 1300, 1284, 1301, 1281, 1302, 1292, 1291, 1347, 1297, + 2768, 1311, 1313, 1316, 1300, 1309, 1313, 1318, 1304, 1367, + 1317, 1322, 1309, 1323, 1321, 1313, 1319, 1315, 1333, 1334, + 1335, 2768, 2768, 1333, 2768, 1335, 2768, 1320, 1331, 1322, + 1341, 1334, 1332, 1387, 1341, 1338, 1385, 1346, 1335, 1342, + 1347, 1344, 1350, 2768, 1343, 2768, 1335, 1399, 2768, 1400, + 1344, 1345, 1352, 1399, 1358, 2768, 1359, 1347, 2768, 1357, - 1343, 1354, 1406, 1360, 1361, 1404, 1357, 1411, 1407, 1413, - 2751, 1361, 1358, 1416, 1417, 1371, 1372, 1374, 2751, 2751, - 1366, 1361, 1418, 1364, 1380, 1364, 1376, 1365, 1424, 1407, - 1408, 1400, 1433, 2751, 1387, 1378, 1389, 2751, 1437, 1371, - 1382, 1397, 1436, 1385, 1396, 1384, 1383, 1399, 1400, 1397, - 1444, 1404, 1406, 1395, 1405, 1411, 1399, 1399, 1459, 1455, - 1457, 1463, 1417, 2751, 1420, 1419, 1421, 1412, 1415, 1424, - 1425, 1422, 1412, 1415, 1415, 1477, 1421, 1479, 1423, 1481, - 1421, 1426, 1485, 2751, 1440, 1419, 1434, 1427, 1430, 1443, - 1446, 1445, 1443, 1495, 1446, 2751, 2751, 1442, 1443, 1453, + 2768, 1348, 2768, 1348, 1349, 1352, 1366, 1371, 1354, 1365, + 1417, 1371, 1372, 1415, 1378, 1369, 1423, 1419, 1425, 2768, + 1373, 1370, 1428, 1429, 1383, 1384, 1386, 2768, 2768, 1378, + 1373, 1430, 1376, 1392, 1376, 1388, 1377, 1436, 1419, 1420, + 1412, 1445, 2768, 1399, 1390, 1401, 2768, 1449, 1383, 1394, + 1409, 1448, 1397, 1408, 1396, 1395, 1411, 1412, 1409, 1456, + 1416, 1418, 1407, 1417, 1423, 1411, 1411, 1471, 1467, 1469, + 1475, 1430, 2768, 1432, 1431, 1433, 1424, 1427, 1436, 1437, + 1434, 1424, 1427, 1427, 1489, 1433, 1491, 1435, 1493, 1433, + 1438, 1497, 2768, 1452, 1431, 1446, 1439, 1442, 1455, 1458, - 1438, 1497, 1441, 1504, 1457, 1443, 1507, 1508, 1509, 1450, - 1460, 1512, 1466, 2751, 1458, 1459, 1461, 1517, 1457, 2751, - 1474, 2751, 1473, 1463, 2751, 2751, 1476, 1459, 1479, 1480, - 1466, 1468, 1530, 1477, 1532, 1478, 1472, 1499, 1517, 1532, - 1518, 2751, 1538, 1486, 1536, 2751, 1481, 1543, 1490, 1484, - 1481, 1484, 1486, 1482, 1545, 1505, 1547, 1497, 1509, 1512, - 1509, 1501, 1504, 1497, 1560, 1507, 2751, 1506, 1505, 2751, - 1507, 1569, 1519, 1510, 1567, 1526, 1526, 1529, 1529, 1526, - 1573, 1532, 2751, 1524, 2751, 1525, 2751, 1535, 1527, 2751, - 1579, 1538, 1539, 1536, 1583, 1529, 1544, 1587, 1546, 1538, + 1457, 1455, 1507, 1458, 2768, 2768, 1454, 1455, 1465, 1450, + 1509, 1453, 1516, 1469, 1455, 1519, 1520, 1521, 1462, 1472, + 1524, 1478, 2768, 1470, 1471, 1473, 1529, 1470, 1470, 2768, + 1488, 2768, 1485, 1476, 2768, 2768, 1489, 1472, 1492, 1493, + 1479, 1481, 1543, 1490, 1545, 1491, 1485, 1512, 1530, 1545, + 1531, 2768, 1551, 1499, 1549, 2768, 1494, 1556, 1503, 1497, + 1494, 1497, 1499, 1495, 1558, 1518, 1560, 1510, 1522, 1525, + 1522, 1514, 1517, 1510, 1573, 1520, 2768, 1519, 1518, 2768, + 1520, 1582, 1532, 1523, 1580, 1539, 1539, 1542, 1542, 1539, + 1586, 1545, 2768, 1537, 2768, 1538, 2768, 1548, 1540, 2768, - 2751, 1535, 1535, 1536, 1542, 1541, 1539, 1596, 2751, 1555, - 1555, 2751, 2751, 2751, 1599, 1543, 2751, 1560, 1545, 1546, - 1552, 2751, 1561, 1611, 1556, 1548, 1554, 1564, 1576, 1569, - 1575, 1565, 1623, 1573, 2751, 1582, 2751, 1579, 1627, 1604, - 1605, 1611, 1596, 1604, 2751, 1587, 1572, 1635, 2751, 1636, - 1590, 1595, 1577, 1640, 1641, 1582, 1638, 1602, 1595, 1591, - 1584, 1592, 1644, 1599, 1600, 2751, 1590, 1606, 1604, 1661, - 2751, 1596, 1658, 1619, 1619, 1615, 1662, 1607, 1612, 1610, - 1672, 1625, 1613, 1675, 1671, 1623, 1678, 1636, 1625, 1619, - 1682, 1621, 1630, 1623, 1637, 1640, 1688, 1689, 1628, 1645, + 1592, 1551, 1552, 1549, 1596, 1542, 1557, 1600, 1559, 1551, + 2768, 1548, 1548, 1549, 1555, 1554, 1552, 1609, 2768, 1568, + 1568, 2768, 2768, 2768, 1612, 1556, 2768, 1573, 1558, 1559, + 1565, 2768, 1574, 1562, 1626, 1570, 1563, 1568, 1579, 1590, + 1583, 1589, 1579, 1637, 1587, 2768, 1596, 2768, 1593, 1641, + 1618, 1619, 1625, 1610, 1618, 2768, 1601, 1586, 1649, 2768, + 1650, 1604, 1609, 1591, 1654, 1655, 1596, 1652, 1616, 1609, + 1605, 1598, 1606, 1658, 1613, 1614, 2768, 1604, 1620, 1618, + 1675, 2768, 1610, 1672, 1633, 1633, 1629, 1676, 1621, 1626, + 1624, 1686, 1639, 1627, 1689, 1685, 1637, 1692, 1650, 1639, - 1641, 1639, 1632, 1647, 1631, 1692, 1693, 1694, 1695, 1655, - 1648, 1647, 1647, 1642, 2751, 1650, 1656, 1647, 1648, 1647, - 1649, 1707, 1650, 2751, 1646, 1664, 1716, 2751, 1684, 1698, - 1697, 1686, 1688, 1722, 1672, 2751, 2751, 1663, 1674, 1726, - 2751, 2751, 1680, 1670, 1675, 1673, 1726, 1681, 1687, 1673, - 1676, 1692, 1681, 1679, 1679, 1681, 2751, 1749, 1684, 1693, - 1740, 1685, 1690, 1753, 1699, 1709, 1710, 2751, 1758, 1708, - 1755, 2751, 1703, 1711, 2751, 1702, 1717, 1705, 2751, 1715, - 1716, 1717, 1769, 1724, 2751, 2751, 1766, 1729, 1705, 1723, - 1724, 1725, 1734, 1716, 1722, 1724, 1736, 1735, 1726, 1779, + 1633, 1696, 1635, 1644, 1637, 1651, 1654, 1702, 1703, 1642, + 1659, 1655, 1653, 1646, 1661, 1645, 1706, 1707, 1708, 1709, + 1669, 1662, 1661, 1661, 1656, 1657, 2768, 1665, 1671, 1662, + 1663, 1662, 1664, 1722, 1665, 2768, 1661, 1679, 1731, 2768, + 1699, 1713, 1712, 1701, 1703, 1737, 1687, 2768, 2768, 1678, + 1689, 1741, 2768, 2768, 1695, 1685, 1690, 1688, 1741, 1697, + 1702, 1688, 1691, 1707, 1696, 1694, 1694, 1696, 2768, 1764, + 1699, 1708, 1755, 1700, 1705, 1768, 1714, 1724, 1725, 2768, + 1773, 1723, 1770, 2768, 1718, 1726, 2768, 1717, 1732, 1720, + 2768, 1730, 1731, 1732, 1784, 1739, 2768, 2768, 1781, 1744, - 1728, 1724, 1725, 1726, 1784, 1790, 1737, 1792, 1742, 1732, - 1748, 1741, 2751, 1774, 1798, 1780, 1795, 1801, 2751, 1747, - 1803, 1742, 2751, 1744, 1746, 1756, 1803, 1748, 1763, 1750, - 1812, 1766, 1752, 1759, 1759, 1770, 1771, 2751, 1765, 1760, - 1774, 1760, 1823, 1775, 2751, 1822, 1770, 1767, 2751, 1781, - 1768, 1789, 1785, 1787, 1835, 1785, 1782, 1790, 1784, 2751, - 1840, 1778, 1780, 1796, 1789, 1790, 1780, 1796, 1797, 1791, - 1807, 1797, 1852, 1809, 1793, 1802, 1851, 1806, 1858, 1804, - 2751, 1798, 2751, 1805, 1862, 1863, 1860, 1861, 2751, 1843, - 1849, 2751, 1821, 2751, 1865, 1814, 1825, 1826, 1811, 1812, + 1720, 1738, 1739, 1740, 1749, 1731, 1737, 1739, 1751, 1750, + 1741, 1794, 1743, 1739, 1744, 1741, 1742, 1800, 1806, 1753, + 1808, 1758, 1748, 1764, 1757, 2768, 1790, 1814, 1796, 1811, + 1817, 2768, 1763, 1819, 1758, 2768, 1760, 1762, 1772, 1819, + 1764, 1779, 1766, 1828, 1782, 1768, 1775, 1775, 1786, 1787, + 2768, 1781, 1776, 1790, 1776, 1839, 1791, 2768, 1838, 1786, + 1783, 2768, 1797, 1784, 1805, 1801, 1803, 1851, 1801, 1798, + 1806, 1800, 2768, 1856, 1794, 1796, 1812, 1805, 1806, 1796, + 1812, 1813, 1807, 1823, 1813, 1868, 1825, 1809, 1818, 1867, + 1873, 1823, 1875, 1821, 2768, 1815, 2768, 1822, 1879, 1880, - 1820, 1877, 2751, 1822, 1874, 1875, 1827, 1822, 1840, 1837, - 1828, 1841, 1836, 2751, 1833, 1838, 1836, 1891, 1892, 1837, - 1836, 1850, 1837, 2751, 1852, 1853, 1854, 1855, 2751, 1845, - 1857, 1905, 1855, 1860, 1908, 1847, 1855, 1849, 1857, 1870, - 2751, 1871, 1852, 1853, 1860, 1862, 2751, 1876, 1873, 1916, - 1874, 2751, 2751, 1878, 1904, 1905, 1903, 1866, 1866, 1875, - 1882, 1875, 1874, 1885, 1872, 2751, 1888, 1876, 1879, 1938, - 1875, 1894, 1885, 1897, 1890, 1889, 1898, 1900, 1904, 2751, - 2751, 1897, 1888, 1890, 1954, 1894, 1956, 1895, 1958, 1913, - 1960, 2751, 1899, 1962, 2751, 1958, 1917, 1914, 1919, 1906, + 1877, 1878, 2768, 1860, 1866, 2768, 1838, 2768, 1882, 1831, + 1842, 1843, 1828, 1829, 1837, 1894, 2768, 1839, 1891, 1892, + 1844, 1839, 1857, 1854, 1845, 1858, 1853, 2768, 1850, 1855, + 1853, 1908, 1909, 1854, 1853, 1867, 1854, 2768, 1869, 1870, + 1871, 1872, 2768, 1862, 1874, 1922, 1872, 1877, 1925, 1864, + 1872, 1866, 1874, 1887, 2768, 1888, 1869, 1870, 1877, 2768, + 1879, 2768, 1893, 1890, 1933, 1891, 2768, 2768, 1895, 1921, + 1922, 1920, 1883, 1883, 1892, 1899, 1892, 1891, 1902, 1889, + 2768, 1905, 1893, 1896, 1955, 1892, 1911, 1902, 1914, 1907, + 1906, 1915, 1917, 1921, 2768, 2768, 1914, 1905, 1907, 1971, - 1914, 1925, 1912, 1923, 1909, 1907, 1915, 1914, 1919, 1911, - 1956, 1980, 1962, 1982, 1932, 1921, 1934, 1924, 1941, 1940, - 1984, 1925, 1944, 1945, 2751, 1950, 1943, 1995, 1949, 1936, - 1951, 1999, 1953, 1956, 1943, 1952, 1953, 2751, 2005, 2751, - 1957, 2751, 1966, 2751, 2010, 2751, 1949, 2012, 1956, 2014, - 1954, 2016, 1961, 2013, 2014, 1973, 2016, 1959, 1963, 1981, - 2025, 1981, 2008, 2751, 2004, 2751, 1974, 1968, 1965, 2027, - 1990, 1983, 1979, 2036, 1976, 1978, 1977, 1984, 2751, 1980, - 2042, 1983, 2751, 1988, 1998, 1983, 1991, 1993, 2751, 1994, - 1988, 2751, 2000, 2751, 1996, 2751, 2007, 2751, 2009, 2009, + 1911, 1973, 1912, 1975, 1930, 1977, 2768, 1916, 1979, 2768, + 1975, 1934, 1931, 1936, 1923, 1931, 1942, 1929, 1940, 1926, + 1924, 1932, 1931, 1936, 1928, 1973, 1997, 1979, 1999, 1949, + 1938, 1951, 1941, 1958, 1957, 2001, 1942, 1961, 1962, 2768, + 1967, 1960, 2012, 1966, 1953, 1968, 2016, 1970, 1973, 1960, + 1969, 1970, 2768, 2022, 2768, 1974, 2768, 1983, 2768, 2027, + 2768, 1966, 2029, 1973, 2031, 1971, 2033, 1978, 2030, 2031, + 1990, 2033, 1976, 1980, 1998, 2042, 1998, 2025, 2768, 2021, + 2768, 1991, 1985, 1982, 2044, 2007, 2000, 1996, 2053, 1993, + 1995, 1994, 2001, 2768, 1997, 2059, 2000, 2768, 2005, 2015, - 2000, 2059, 2000, 2010, 1995, 2008, 2751, 2010, 2041, 2047, - 2019, 2017, 2069, 2007, 2009, 2006, 2030, 2751, 2017, 2024, - 2025, 2028, 2017, 2751, 2074, 2018, 2026, 2035, 2034, 2037, - 2038, 2039, 2032, 2027, 2028, 2028, 2040, 2037, 2751, 2048, - 2036, 2092, 2040, 2052, 2080, 2101, 2102, 2046, 2751, 2046, - 2058, 2106, 2052, 2054, 2052, 2053, 2111, 2061, 2048, 2063, - 2068, 2116, 2117, 2118, 2119, 2120, 2074, 2122, 2123, 2124, - 2065, 2070, 2066, 2082, 2065, 2077, 2071, 2133, 2751, 2751, - 2078, 2089, 2136, 2751, 2090, 2075, 2093, 2084, 2751, 2085, - 2099, 2095, 2088, 2751, 2751, 2751, 2751, 2751, 2145, 2751, + 2000, 2008, 2010, 2768, 2011, 2005, 2768, 2017, 2768, 2013, + 2768, 2024, 2768, 2026, 2026, 2017, 2076, 2017, 2027, 2012, + 2025, 2768, 2027, 2058, 2064, 2036, 2034, 2086, 2024, 2026, + 2023, 2047, 2768, 2034, 2041, 2042, 2045, 2034, 2768, 2091, + 2035, 2043, 2052, 2051, 2054, 2055, 2056, 2049, 2044, 2045, + 2045, 2057, 2054, 2768, 2065, 2053, 2109, 2057, 2069, 2097, + 2118, 2119, 2063, 2768, 2063, 2075, 2123, 2069, 2071, 2069, + 2070, 2128, 2078, 2065, 2080, 2085, 2133, 2134, 2135, 2136, + 2137, 2091, 2139, 2140, 2141, 2082, 2087, 2083, 2099, 2082, + 2094, 2088, 2150, 2768, 2768, 2095, 2106, 2153, 2768, 2107, - 2751, 2751, 2085, 2093, 2088, 2144, 2107, 2104, 2152, 2751, - 2148, 2111, 2751, 2155, 2094, 2157, 2097, 2110, 2109, 2110, - 2100, 2751, 2101, 2164, 2114, 2123, 2116, 2163, 2751, 2114, - 2108, 2751, 2120, 2751, 2167, 2173, 2112, 2128, 2176, 2177, - 2751, 2131, 2125, 2118, 2138, 2125, 2137, 2128, 2132, 2751, - 2182, 2128, 2751, 2751, 2128, 2136, 2186, 2143, 2136, 2148, - 2195, 2140, 2140, 2136, 2138, 2200, 2201, 2140, 2156, 2141, - 2158, 2751, 2206, 2150, 2157, 2209, 2751, 2751, 2159, 2211, - 2156, 2213, 2751, 2161, 2160, 2751, 2161, 2751, 2155, 2751, - 2155, 2172, 2173, 2221, 2164, 2223, 2224, 2751, 2225, 2751, + 2092, 2110, 2101, 2768, 2102, 2116, 2112, 2105, 2768, 2768, + 2768, 2768, 2768, 2162, 2768, 2768, 2768, 2102, 2110, 2105, + 2161, 2124, 2121, 2169, 2768, 2165, 2128, 2768, 2172, 2111, + 2174, 2114, 2127, 2126, 2127, 2117, 2768, 2118, 2181, 2131, + 2140, 2133, 2180, 2768, 2131, 2125, 2768, 2137, 2768, 2184, + 2190, 2129, 2145, 2193, 2194, 2768, 2148, 2142, 2135, 2155, + 2142, 2154, 2145, 2149, 2768, 2199, 2145, 2768, 2768, 2145, + 2153, 2203, 2160, 2153, 2165, 2212, 2157, 2157, 2153, 2155, + 2217, 2218, 2157, 2173, 2158, 2175, 2768, 2223, 2167, 2174, + 2226, 2768, 2768, 2176, 2228, 2173, 2230, 2768, 2178, 2177, - 2751, 2751, 2751, 2231, 2234, 2237, 2238, 2240, 2243, 2246, - 2249 + 2768, 2178, 2768, 2172, 2768, 2172, 2189, 2190, 2238, 2181, + 2240, 2241, 2768, 2242, 2768, 2768, 2768, 2768, 2248, 2251, + 2254, 2255, 2257, 2260, 2263, 2266 } ; -static const flex_int16_t yy_def[2312] = +static const flex_int16_t yy_def[2327] = { 0, - 2304, 2304, 2305, 2305, 2304, 2304, 2304, 2304, 2304, 2304, - 2303, 2303, 2303, 2303, 2303, 2306, 2303, 2303, 2303, 2303, - 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, - 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2307, - 2303, 2303, 2303, 2308, 15, 2303, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2309, 45, 45, + 2319, 2319, 2320, 2320, 2319, 2319, 2319, 2319, 2319, 2319, + 2318, 2318, 2318, 2318, 2318, 2321, 2318, 2318, 2318, 2318, + 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, + 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2322, + 2318, 2318, 2318, 2323, 15, 2318, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 2324, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 2306, - 2303, 2303, 2303, 2303, 2303, 2303, 2310, 2303, 2303, 2303, - 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2307, 2303, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 2321, + 2318, 2318, 2318, 2318, 2318, 2318, 2325, 2318, 2318, 2318, + 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2322, 2318, - 2308, 2303, 2303, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 2311, 45, 2309, 45, + 2323, 2318, 2318, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 2326, 45, 2324, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, @@ -1283,14 +1285,14 @@ static const flex_int16_t yy_def[2312] = 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 2310, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 45, + 2325, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 45, - 45, 45, 2303, 45, 45, 2303, 45, 45, 45, 45, - 45, 45, 45, 2311, 2303, 2303, 119, 45, 45, 45, + 45, 45, 2318, 45, 45, 2318, 45, 45, 45, 45, + 45, 45, 45, 2326, 2318, 2318, 119, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 2303, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 2318, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, @@ -1298,246 +1300,247 @@ static const flex_int16_t yy_def[2312] = 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 2303, 2303, 2303, 2303, 2303, 2303, - 2303, 45, 45, 45, 45, 45, 2303, 45, 45, 2303, - 45, 2303, 45, 119, 2303, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 2318, 2318, 2318, 2318, 2318, + 2318, 2318, 45, 45, 45, 45, 45, 2318, 45, 45, + 2318, 45, 2318, 45, 119, 2318, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 2303, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 2318, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 2303, 2303, 2303, 45, 45, 45, 45, 2303, - 45, 45, 2303, 45, 119, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 2303, 45, 45, 45, 45, 45, - 45, 2303, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 2318, 2318, 2318, 45, 45, 45, + 45, 2318, 45, 45, 2318, 45, 119, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 2318, 45, 45, 45, + 45, 45, 45, 2318, 45, 45, 45, 45, 45, 45, - 2303, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 2303, 45, 45, 45, 45, 45, + 45, 45, 2318, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 2318, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 2303, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 2318, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 2318, 45, 45, 2318, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 2303, 45, 45, 2303, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2303, 45, - 2303, 45, 2303, 45, 2303, 45, 45, 45, 2303, 45, - 45, 2303, 2303, 2303, 45, 45, 45, 45, 45, 2303, + 45, 2318, 45, 2318, 45, 2318, 45, 2318, 45, 45, + 45, 2318, 45, 45, 2318, 2318, 2318, 45, 45, 45, + 45, 45, 2318, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 2318, + 45, 45, 45, 45, 45, 45, 45, 45, 2318, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 2303, 45, 45, 45, - 45, 45, 45, 45, 45, 2303, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 2303, - 45, 45, 2303, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 2318, 45, 45, 2318, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 2303, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 2303, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2303, 45, 45, + 45, 45, 2318, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 2318, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 2303, 2303, 45, 45, 45, 45, 45, 45, + 45, 2318, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 2318, 2318, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 2303, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 2303, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2303, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 2303, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 2318, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 2303, 45, 45, 45, 45, 45, 45, 45, + 2318, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 2318, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 2318, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 2318, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2303, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 2318, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 2318, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 2303, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 2303, 2303, 45, 45, 45, 45, 45, 45, 45, 2303, - 2303, 45, 45, 45, 45, 45, 45, 2303, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2303, 45, - 45, 2303, 2303, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 2318, 2318, 45, 45, 45, + 45, 45, 45, 45, 2318, 2318, 45, 45, 45, 45, + 45, 45, 2318, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 2318, 45, 45, 2318, 2318, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2303, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2303, 45, + 45, 45, 45, 2318, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 2318, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 2303, 45, 45, 45, 45, + 45, 2318, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 2318, 45, 45, 45, + + 45, 45, 45, 45, 2318, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 2303, 45, 45, 45, 45, 45, 45, 45, 2303, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 2318, 45, 2318, 45, 45, 45, 2318, 45, + 45, 45, 45, 45, 2318, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 2318, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 2318, 45, 45, 45, + 45, 2318, 45, 45, 45, 45, 45, 45, 45, 45, + + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 2318, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 2318, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 2318, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 2318, 45, + 45, 2318, 2318, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 2303, 45, 2303, 45, - 45, 45, 2303, 45, 45, 45, 45, 45, 2303, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 2318, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2303, 45, 45, + 2318, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 2303, - 45, 45, 45, 45, 2303, 45, 45, 45, 45, 45, + 45, 2318, 2318, 45, 2318, 45, 2318, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 2318, 45, 2318, 45, 45, 2318, 45, + 45, 45, 45, 45, 45, 2318, 45, 45, 2318, 45, - 45, 45, 45, 45, 45, 45, 45, 2303, 45, 45, + 2318, 45, 2318, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 2318, + 45, 45, 45, 45, 45, 45, 45, 2318, 2318, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2303, 45, + 45, 45, 2318, 45, 45, 45, 2318, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 2318, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2303, 45, + 45, 45, 2318, 45, 45, 45, 45, 45, 45, 45, + + 45, 45, 45, 45, 2318, 2318, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 2303, 45, 45, 2303, 2303, 45, 45, 45, 45, 45, + 45, 45, 2318, 45, 45, 45, 45, 45, 45, 2318, + 45, 2318, 45, 45, 2318, 2318, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 2318, 45, 45, 45, 2318, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 2318, 45, 45, 2318, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 2318, 45, 2318, 45, 2318, 45, 45, 2318, + + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 2318, 45, 45, 45, 45, 45, 45, 45, 2318, 45, + 45, 2318, 2318, 2318, 45, 45, 2318, 45, 45, 45, + 45, 2318, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 2318, 45, 2318, 45, 45, + 45, 45, 45, 45, 45, 2318, 45, 45, 45, 2318, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 2318, 45, 45, 45, + 45, 2318, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 2303, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 2303, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 2303, 2303, 45, 2303, 45, 2303, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 2303, 45, 2303, 45, 45, - 2303, 45, 45, 45, 45, 45, 45, 2303, 45, 45, - 2303, 45, 2303, 45, 2303, 45, 45, 45, 45, 45, - - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 2303, 45, 45, 45, 45, 45, 45, 45, 2303, 2303, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 2303, 45, 45, 45, 2303, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 2303, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 2303, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 2303, 2303, 45, 45, 45, - - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 2303, 45, 45, 45, 45, 45, 2303, - 45, 2303, 45, 45, 2303, 2303, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 2303, 45, 45, 45, 2303, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 2303, 45, 45, 2303, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 2303, 45, 2303, 45, 2303, 45, 45, 2303, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - - 2303, 45, 45, 45, 45, 45, 45, 45, 2303, 45, - 45, 2303, 2303, 2303, 45, 45, 2303, 45, 45, 45, - 45, 2303, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 2303, 45, 2303, 45, 45, 45, - 45, 45, 45, 45, 2303, 45, 45, 45, 2303, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 2303, 45, 45, 45, 45, - 2303, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 2303, 45, 45, 45, 45, 45, - 45, 45, 45, 2303, 45, 45, 45, 2303, 45, 45, - 45, 45, 45, 45, 45, 2303, 2303, 45, 45, 45, - 2303, 2303, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 2303, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2303, 45, 45, - 45, 2303, 45, 45, 2303, 45, 45, 45, 2303, 45, - 45, 45, 45, 45, 2303, 2303, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 2303, 45, 45, 45, 45, 45, 2303, 45, - 45, 45, 2303, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2303, 45, 45, - 45, 45, 45, 45, 2303, 45, 45, 45, 2303, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 2303, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 2303, 45, 2303, 45, 45, 45, 45, 45, 2303, 45, - 45, 2303, 45, 2303, 45, 45, 45, 45, 45, 45, - - 45, 45, 2303, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 2303, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 2303, 45, 45, 45, 45, 2303, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 2303, 45, 45, 45, 45, 45, 2303, 45, 45, 45, - 45, 2303, 2303, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 2303, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 2303, - 2303, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 2303, 45, 45, 2303, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 2318, 45, 45, 45, + 45, 45, 45, 45, 45, 2318, 45, 45, 45, 2318, + 45, 45, 45, 45, 45, 45, 45, 2318, 2318, 45, + 45, 45, 2318, 2318, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 2318, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 2318, + 45, 45, 45, 2318, 45, 45, 2318, 45, 45, 45, + 2318, 45, 45, 45, 45, 45, 2318, 2318, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 2303, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2303, 45, 2303, - 45, 2303, 45, 2303, 45, 2303, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 2318, 45, 45, 45, 45, + 45, 2318, 45, 45, 45, 2318, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 2303, 45, 2303, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2303, 45, - 45, 45, 2303, 45, 45, 45, 45, 45, 2303, 45, - 45, 2303, 45, 2303, 45, 2303, 45, 2303, 45, 45, + 2318, 45, 45, 45, 45, 45, 45, 2318, 45, 45, + 45, 2318, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 2318, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 2318, 45, 2318, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 2303, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 2303, 45, 45, - 45, 45, 45, 2303, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2303, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2303, 45, + 45, 45, 2318, 45, 45, 2318, 45, 2318, 45, 45, + 45, 45, 45, 45, 45, 45, 2318, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 2318, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 2318, 45, 45, + 45, 45, 2318, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 2318, 45, 45, 45, 45, 2318, + 45, 2318, 45, 45, 45, 45, 2318, 2318, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 2303, 2303, - 45, 45, 45, 2303, 45, 45, 45, 45, 2303, 45, - 45, 45, 45, 2303, 2303, 2303, 2303, 2303, 45, 2303, + 2318, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 2318, 2318, 45, 45, 45, 45, - 2303, 2303, 45, 45, 45, 45, 45, 45, 45, 2303, - 45, 45, 2303, 45, 45, 45, 45, 45, 45, 45, - 45, 2303, 45, 45, 45, 45, 45, 45, 2303, 45, - 45, 2303, 45, 2303, 45, 45, 45, 45, 45, 45, - 2303, 45, 45, 45, 45, 45, 45, 45, 45, 2303, - 45, 45, 2303, 2303, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 2318, 45, 45, 2318, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 2303, 45, 45, 45, 45, 2303, 2303, 45, 45, - 45, 45, 2303, 45, 45, 2303, 45, 2303, 45, 2303, - 45, 45, 45, 45, 45, 45, 45, 2303, 45, 2303, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 2318, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 2318, 45, 2318, 45, 2318, 45, 2318, 45, + 2318, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 2318, 45, + 2318, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 2318, 45, 45, 45, 2318, 45, 45, - 2303, 2303, 0, 2303, 2303, 2303, 2303, 2303, 2303, 2303, - 2303 + 45, 45, 45, 2318, 45, 45, 2318, 45, 2318, 45, + 2318, 45, 2318, 45, 45, 45, 45, 45, 45, 45, + 45, 2318, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 2318, 45, 45, 45, 45, 45, 2318, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 2318, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 2318, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 2318, 2318, 45, 45, 45, 2318, 45, + + 45, 45, 45, 2318, 45, 45, 45, 45, 2318, 2318, + 2318, 2318, 2318, 45, 2318, 2318, 2318, 45, 45, 45, + 45, 45, 45, 45, 2318, 45, 45, 2318, 45, 45, + 45, 45, 45, 45, 45, 45, 2318, 45, 45, 45, + 45, 45, 45, 2318, 45, 45, 2318, 45, 2318, 45, + 45, 45, 45, 45, 45, 2318, 45, 45, 45, 45, + 45, 45, 45, 45, 2318, 45, 45, 2318, 2318, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 2318, 45, 45, 45, + 45, 2318, 2318, 45, 45, 45, 45, 2318, 45, 45, + + 2318, 45, 2318, 45, 2318, 45, 45, 45, 45, 45, + 45, 45, 2318, 45, 2318, 2318, 2318, 0, 2318, 2318, + 2318, 2318, 2318, 2318, 2318, 2318 } ; -static const flex_int16_t yy_nxt[2828] = +static const flex_int16_t yy_nxt[2845] = { 0, - 2303, 13, 14, 13, 2303, 15, 16, 102, 17, 18, + 2318, 13, 14, 13, 2318, 15, 16, 102, 17, 18, 19, 20, 21, 22, 22, 22, 22, 22, 23, 24, 86, 255, 37, 14, 37, 87, 25, 26, 38, 37, - 14, 37, 42, 27, 42, 38, 878, 879, 28, 91, + 14, 37, 42, 27, 42, 38, 2318, 2318, 28, 91, 13, 14, 13, 92, 29, 91, 30, 103, 13, 14, 13, 205, 25, 31, 13, 14, 13, 42, 40, 42, - 572, 32, 13, 14, 13, 91, 40, 33, 256, 170, + 574, 32, 13, 14, 13, 91, 40, 33, 256, 170, 93, 94, 92, 171, 34, 35, 13, 14, 13, 205, 15, 16, 92, 17, 18, 19, 20, 21, 22, 22, 22, 22, 22, 23, 24, 39, 13, 14, 13, 93, 93, 25, 26, 39, 13, 14, 13, 42, 27, 42, - 134, 95, 573, 28, 109, 246, 41, 104, 105, 29, + 134, 95, 575, 28, 109, 246, 41, 104, 105, 29, 108, 30, 115, 135, 41, 233, 234, 25, 31, 96, - 388, 247, 89, 136, 89, 235, 32, 90, 90, 90, - 90, 90, 33, 109, 104, 105, 108, 389, 115, 34, + 389, 247, 89, 136, 89, 235, 32, 90, 90, 90, + 90, 90, 33, 109, 104, 105, 108, 390, 115, 34, 35, 44, 44, 44, 45, 45, 46, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 47, 45, 48, 49, 50, 51, 45, @@ -1550,8 +1553,8 @@ static const flex_int16_t yy_nxt[2828] = 82, 82, 82, 82, 81, 116, 84, 84, 84, 84, 84, 261, 83, 85, 85, 85, 85, 85, 81, 83, 84, 84, 84, 84, 84, 113, 83, 138, 104, 265, - 315, 111, 116, 83, 139, 140, 316, 114, 83, 112, - 141, 102, 192, 142, 143, 83, 108, 447, 880, 448, + 316, 111, 116, 83, 139, 140, 317, 114, 83, 112, + 141, 102, 192, 142, 143, 83, 108, 449, 879, 450, 266, 113, 83, 194, 144, 120, 145, 111, 193, 83, 45, 121, 45, 45, 45, 45, 114, 112, 45, 192, @@ -1562,294 +1565,296 @@ static const flex_int16_t yy_nxt[2828] = 105, 128, 159, 45, 129, 130, 197, 45, 131, 132, 160, 45, 161, 192, 193, 204, 200, 162, 163, 45, 122, 133, 111, 45, 123, 45, 119, 105, 124, 151, - 112, 125, 207, 152, 126, 881, 116, 153, 127, 115, + 112, 125, 207, 152, 126, 880, 116, 153, 127, 115, 195, 196, 204, 275, 156, 200, 157, 164, 158, 154, - 165, 166, 172, 155, 356, 419, 173, 357, 112, 174, + 165, 166, 172, 155, 357, 420, 173, 358, 112, 174, 201, 167, 208, 116, 168, 115, 175, 176, 179, 180, - 420, 177, 178, 190, 210, 187, 211, 213, 113, 212, - 188, 85, 85, 85, 85, 85, 201, 309, 208, 882, + 421, 177, 178, 190, 210, 187, 211, 213, 113, 212, + 188, 85, 85, 85, 85, 85, 201, 310, 208, 881, 114, 208, 276, 81, 83, 82, 82, 82, 82, 82, - 210, 310, 210, 213, 181, 211, 182, 212, 83, 183, + 210, 311, 210, 213, 181, 211, 182, 212, 83, 183, 184, 90, 90, 90, 90, 90, 89, 273, 89, 185, - 83, 90, 90, 90, 90, 90, 186, 81, 314, 84, + 83, 90, 90, 90, 90, 90, 186, 81, 315, 84, 84, 84, 84, 84, 83, 85, 85, 85, 85, 85, 200, 221, 83, 90, 90, 90, 90, 90, 83, 101, - 222, 227, 883, 240, 223, 241, 101, 211, 218, 327, + 222, 227, 882, 240, 223, 241, 101, 211, 218, 328, - 228, 229, 243, 250, 884, 280, 251, 290, 83, 219, - 252, 291, 242, 286, 83, 244, 287, 288, 325, 245, - 281, 282, 283, 303, 327, 327, 319, 304, 293, 101, - 326, 305, 326, 101, 332, 345, 415, 101, 411, 432, - 325, 783, 433, 885, 784, 101, 416, 325, 336, 101, - 330, 101, 101, 216, 333, 886, 335, 326, 887, 329, - 332, 217, 217, 217, 217, 217, 294, 295, 296, 328, - 217, 217, 217, 217, 217, 217, 336, 297, 338, 298, - 333, 299, 300, 339, 301, 335, 341, 343, 332, 397, - 645, 412, 346, 466, 358, 338, 217, 217, 217, 217, + 228, 229, 243, 250, 883, 280, 251, 290, 83, 219, + 252, 291, 242, 286, 83, 244, 287, 288, 326, 245, + 281, 282, 283, 304, 328, 328, 320, 305, 293, 101, + 327, 306, 327, 101, 333, 346, 416, 101, 412, 433, + 326, 787, 434, 648, 788, 101, 417, 326, 337, 101, + 331, 101, 101, 216, 334, 398, 649, 327, 336, 330, + 333, 217, 217, 217, 217, 217, 294, 295, 296, 329, + 217, 217, 217, 217, 217, 217, 337, 297, 339, 298, + 334, 299, 300, 340, 301, 302, 342, 336, 344, 333, + 341, 413, 347, 468, 359, 454, 217, 217, 217, 217, - 217, 217, 359, 646, 338, 340, 341, 463, 360, 339, - 452, 463, 341, 467, 347, 343, 344, 344, 344, 344, - 344, 406, 466, 469, 888, 344, 344, 344, 344, 344, - 344, 471, 341, 463, 472, 889, 492, 464, 466, 471, - 467, 493, 758, 615, 498, 398, 457, 544, 399, 469, - 499, 344, 344, 344, 344, 344, 344, 545, 890, 732, - 471, 472, 475, 475, 475, 475, 475, 477, 546, 615, - 758, 475, 475, 475, 475, 475, 475, 515, 532, 533, - 534, 539, 516, 561, 535, 566, 576, 540, 562, 567, - 577, 585, 610, 757, 616, 586, 617, 475, 475, 475, + 217, 217, 360, 884, 339, 473, 339, 342, 361, 340, + 465, 399, 342, 465, 400, 348, 344, 345, 345, 345, + 345, 345, 468, 469, 885, 471, 345, 345, 345, 345, + 345, 345, 407, 342, 473, 474, 465, 494, 500, 466, + 468, 473, 495, 541, 501, 618, 886, 459, 546, 542, + 469, 471, 345, 345, 345, 345, 345, 345, 547, 736, + 818, 819, 474, 477, 477, 477, 477, 477, 613, 479, + 548, 618, 477, 477, 477, 477, 477, 477, 517, 534, + 535, 536, 563, 518, 568, 537, 578, 564, 569, 588, + 579, 608, 619, 589, 620, 613, 609, 613, 477, 477, - 475, 475, 475, 605, 657, 610, 681, 693, 606, 658, - 759, 634, 694, 724, 733, 635, 682, 755, 725, 757, - 891, 610, 616, 636, 617, 637, 638, 639, 640, 641, - 754, 892, 756, 517, 619, 761, 814, 815, 518, 759, - 893, 894, 895, 755, 563, 45, 45, 45, 45, 45, - 896, 897, 900, 762, 45, 45, 45, 45, 45, 45, - 763, 756, 839, 854, 898, 899, 901, 840, 855, 902, - 903, 895, 904, 905, 906, 907, 908, 896, 897, 909, - 45, 45, 45, 45, 45, 45, 910, 911, 912, 914, - 913, 899, 915, 898, 916, 917, 918, 919, 920, 921, + 477, 477, 477, 477, 660, 696, 684, 727, 762, 661, + 697, 637, 728, 763, 737, 638, 685, 887, 890, 891, + 619, 892, 620, 639, 622, 640, 641, 642, 643, 644, + 758, 766, 843, 761, 519, 765, 762, 844, 767, 520, + 888, 893, 763, 565, 45, 45, 45, 45, 45, 759, + 894, 895, 889, 45, 45, 45, 45, 45, 45, 761, + 858, 896, 897, 898, 760, 859, 899, 900, 901, 903, + 902, 905, 906, 904, 845, 759, 907, 908, 909, 45, + 45, 45, 45, 45, 45, 910, 911, 912, 913, 914, + 915, 916, 917, 760, 918, 901, 900, 902, 903, 904, - 922, 923, 924, 925, 841, 926, 927, 928, 929, 930, - 856, 931, 932, 933, 934, 935, 938, 939, 940, 936, - 941, 942, 943, 937, 944, 945, 946, 947, 948, 949, - 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, - 960, 961, 962, 963, 964, 965, 966, 968, 969, 967, - 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, - 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, - 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, - 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, - 1010, 1011, 1012, 1013, 1014, 1016, 1017, 1020, 1021, 1022, + 919, 920, 921, 922, 923, 924, 925, 860, 926, 927, + 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, + 938, 939, 940, 943, 944, 945, 941, 946, 947, 948, + 942, 949, 950, 951, 952, 953, 954, 955, 956, 957, + 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, + 968, 969, 970, 971, 973, 974, 972, 975, 976, 977, + 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, + 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, + 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, + 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, - 1023, 1015, 1025, 1018, 1026, 1027, 1024, 1019, 1028, 1029, - 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, - 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, - 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, - 1060, 1061, 1062, 1063, 1064, 1065, 1039, 1066, 1067, 1040, - 1068, 1069, 1043, 1070, 1071, 1072, 1073, 1074, 1075, 1076, - 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, - 1087, 1088, 1089, 1090, 1091, 1093, 1094, 1095, 1096, 1092, - 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, - 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, + 1018, 1019, 1020, 1022, 1023, 1026, 1027, 1028, 1029, 1021, + 1031, 1024, 1032, 1033, 1030, 1025, 1034, 1035, 1036, 1037, + 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, + 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, + 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, + 1068, 1069, 1070, 1071, 1045, 1072, 1073, 1046, 1074, 1075, + 1049, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, + 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, + 1095, 1096, 1097, 1099, 1100, 1101, 1102, 1098, 1103, 1104, + 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, - 1117, 1118, 1120, 1121, 1122, 1119, 1123, 1124, 1125, 1126, - 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, - 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, - 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1155, 1156, 1157, - 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1154, 1166, - 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, - 1177, 1180, 1178, 1181, 1182, 1179, 1183, 1184, 1185, 1186, - 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, - 1197, 1198, 1199, 1200, 1201, 1202, 1176, 1175, 1203, 1177, - 1178, 1179, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, + 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, + 1126, 1127, 1128, 1125, 1129, 1130, 1131, 1132, 1133, 1134, + 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, + 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, + 1155, 1156, 1157, 1158, 1159, 1160, 1162, 1163, 1164, 1165, + 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1161, 1173, 1174, + 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, + 1187, 1185, 1188, 1189, 1186, 1190, 1191, 1192, 1193, 1194, + 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, + 1205, 1206, 1207, 1208, 1209, 1183, 1182, 1210, 1184, 1185, - 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, - 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1232, 1233, - 1234, 1235, 1230, 1236, 1237, 1238, 1239, 1240, 1241, 1242, - 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, - 1253, 1254, 1255, 1256, 1257, 1259, 1260, 1261, 1262, 1263, - 1264, 1265, 1266, 1267, 1268, 1258, 1269, 1270, 1271, 1272, - 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, - 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1231, 1291, - 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, - 1302, 1303, 1304, 1305, 1306, 1308, 1307, 1309, 1310, 1311, + 1186, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, + 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, + 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1239, 1240, 1241, + 1242, 1237, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, + 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, + 1261, 1262, 1263, 1264, 1266, 1267, 1268, 1269, 1270, 1271, + 1272, 1273, 1274, 1275, 1265, 1276, 1277, 1278, 1279, 1280, + 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, + 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1238, 1298, 1299, + 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, - 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, - 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, - 1332, 1333, 1305, 1307, 1308, 1309, 1334, 1335, 1336, 1337, - 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, - 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, - 1359, 1361, 1362, 1363, 1358, 1364, 1365, 1366, 1367, 1368, - 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, - 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, - 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, - 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1360, 1406, 1407, + 1310, 1311, 1312, 1313, 1314, 1316, 1315, 1317, 1318, 1319, + 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, + 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, + 1340, 1341, 1313, 1315, 1316, 1317, 1342, 1343, 1344, 1345, + 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, + 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, + 1367, 1369, 1370, 1371, 1366, 1372, 1373, 1374, 1375, 1376, + 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, + 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, + 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, - 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, - 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, - 1428, 1429, 1430, 1431, 1433, 1432, 1434, 1435, 1436, 1437, - 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, - 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1430, 1456, - 1429, 1432, 1431, 1433, 1457, 1458, 1459, 1460, 1461, 1462, - 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, - 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, - 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, - 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, + 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1368, 1414, 1415, + 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, + 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, + 1436, 1437, 1438, 1439, 1440, 1442, 1441, 1443, 1444, 1445, + 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, + 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1439, + 1465, 1438, 1441, 1440, 1442, 1466, 1467, 1468, 1469, 1470, + 1471, 1472, 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, + 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, + 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, - 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, - 1513, 1514, 1515, 1516, 1517, 1519, 1520, 1521, 1522, 1523, - 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, - 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, - 1544, 1545, 1546, 1548, 1549, 1550, 1551, 1552, 1553, 1554, - 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, - 1565, 1566, 1539, 1540, 1567, 1568, 1541, 1569, 1570, 1571, - 1518, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, - 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1547, - 1590, 1591, 1592, 1593, 1595, 1596, 1597, 1598, 1599, 1600, + 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, + 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, + 1521, 1522, 1523, 1524, 1525, 1526, 1528, 1529, 1530, 1531, + 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, + 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, + 1552, 1553, 1554, 1555, 1556, 1558, 1559, 1560, 1561, 1562, + 1563, 1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1572, + 1573, 1574, 1575, 1576, 1549, 1550, 1577, 1578, 1551, 1579, + 1580, 1527, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, + 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598, - 1601, 1594, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, - 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619, - 1620, 1621, 1622, 1624, 1625, 1627, 1626, 1623, 1628, 1629, - 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, - 1640, 1641, 1642, 1645, 1644, 1646, 1647, 1648, 1649, 1650, - 1651, 1652, 1653, 1654, 1655, 1656, 1657, 1658, 1659, 1660, - 1661, 1662, 1663, 1664, 1665, 1666, 1643, 1641, 1667, 1640, - 1644, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, - 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, - 1687, 1688, 1689, 1690, 1643, 1691, 1692, 1693, 1694, 1695, + 1599, 1557, 1600, 1601, 1602, 1603, 1605, 1606, 1607, 1608, + 1609, 1610, 1611, 1604, 1612, 1613, 1614, 1615, 1616, 1617, + 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, + 1628, 1629, 1630, 1631, 1632, 1634, 1635, 1638, 1636, 1633, + 1637, 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647, + 1648, 1649, 1650, 1651, 1652, 1653, 1656, 1655, 1657, 1658, + 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, + 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1654, + 1652, 1678, 1651, 1655, 1679, 1680, 1681, 1682, 1683, 1684, + 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, - 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, - 1706, 1707, 1708, 1709, 1710, 1711, 1715, 1712, 1716, 1717, - 1713, 1718, 1719, 1714, 1720, 1721, 1722, 1723, 1724, 1725, - 1726, 1727, 1728, 1729, 1730, 1732, 1731, 1733, 1734, 1735, - 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1747, - 1748, 1749, 1745, 1750, 1751, 1752, 1753, 1754, 1755, 1756, - 1729, 1730, 1731, 1746, 1732, 1733, 1757, 1758, 1759, 1760, - 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1770, 1771, - 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, - 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, + 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1654, 1702, 1703, + 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713, + 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1726, + 1723, 1727, 1728, 1724, 1729, 1730, 1725, 1731, 1732, 1733, + 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1744, + 1743, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, + 1754, 1755, 1756, 1759, 1760, 1761, 1757, 1762, 1763, 1764, + 1765, 1766, 1767, 1768, 1741, 1742, 1743, 1758, 1744, 1745, + 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, + 1779, 1780, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, - 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, - 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, - 1812, 1813, 1814, 1815, 1817, 1816, 1818, 1819, 1820, 1821, - 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1769, 1830, - 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1840, 1841, 1815, - 1842, 1814, 1816, 1817, 1838, 1818, 1843, 1844, 1845, 1839, - 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, - 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, - 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, - 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, + 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, + 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, + 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, + 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1830, + 1829, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, + 1840, 1841, 1781, 1842, 1843, 1844, 1845, 1846, 1847, 1848, + 1849, 1850, 1853, 1854, 1828, 1855, 1827, 1829, 1830, 1851, + 1831, 1856, 1857, 1858, 1852, 1859, 1860, 1861, 1862, 1863, + 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, + 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, - 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, - 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, - 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1888, - 1890, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, - 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, - 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, - 1944, 1945, 1946, 1947, 1948, 1950, 1951, 1952, 1953, 1949, - 1954, 1955, 1956, 1958, 1957, 1959, 1960, 1961, 1962, 1963, - 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, - 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1956, + 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, + 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, + 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, + 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, + 1924, 1925, 1926, 1927, 1928, 1902, 1904, 1929, 1930, 1931, + 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, + 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, + 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, + 1962, 1963, 1965, 1966, 1967, 1968, 1964, 1969, 1970, 1971, + 1973, 1972, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, - 1957, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, - 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, - 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, - 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, - 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, - 2032, 2033, 2034, 2035, 2036, 2011, 2012, 2037, 2013, 2038, - 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, - 2049, 2050, 2051, 2052, 2053, 2054, 2055, 2056, 2057, 2058, - 2060, 2061, 2059, 2062, 2063, 2064, 2065, 2066, 2067, 2068, - 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, + 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, + 1992, 1993, 1994, 1995, 1996, 1997, 1971, 1972, 1998, 1999, + 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, + 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, + 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, + 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, + 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, + 2050, 2051, 2026, 2027, 2052, 2028, 2053, 2054, 2055, 2056, + 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, + 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2075, 2076, 2074, - 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, - 2089, 2063, 2065, 2090, 2091, 2092, 2093, 2094, 2095, 2096, - 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, - 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2114, 2115, 2116, - 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, - 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2109, 2135, - 2110, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, - 2145, 2147, 2146, 2148, 2149, 2150, 2151, 2152, 2153, 2154, - 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2164, - 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2145, 2146, 2172, + 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, + 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2094, 2095, 2096, + 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2078, 2080, + 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2114, + 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, + 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, + 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, + 2145, 2146, 2147, 2148, 2149, 2124, 2150, 2125, 2151, 2152, + 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2162, 2161, + 2163, 2164, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, - 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2190, 2191, 2192, - 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, - 2203, 2178, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, - 2212, 2213, 2214, 2215, 2216, 2217, 2218, 2219, 2220, 2221, - 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, - 2232, 2233, 2234, 2235, 2236, 2237, 2238, 2239, 2240, 2241, - 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, - 2252, 2253, 2254, 2255, 2256, 2257, 2258, 2260, 2259, 2261, - 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, + 2183, 2184, 2185, 2186, 2160, 2161, 2187, 2188, 2189, 2190, + 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, + 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, + 2211, 2212, 2213, 2214, 2215, 2216, 2217, 2218, 2193, 2219, + 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, + 2230, 2231, 2232, 2233, 2234, 2235, 2236, 2237, 2238, 2239, + 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, + 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2258, 2259, + 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, - 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, - 2282, 2283, 2284, 2285, 2286, 2287, 2288, 2289, 2290, 2291, - 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2301, - 2302, 12, 12, 12, 36, 36, 36, 80, 99, 80, - 101, 101, 101, 117, 117, 117, 191, 877, 191, 214, - 214, 214, 876, 875, 874, 873, 872, 871, 870, 869, - 868, 867, 866, 865, 864, 863, 862, 861, 860, 859, - 858, 857, 853, 852, 851, 850, 849, 848, 847, 846, - 845, 844, 843, 842, 838, 837, 836, 835, 834, 833, - 832, 831, 830, 829, 828, 827, 826, 825, 824, 823, + 2270, 2271, 2272, 2273, 2275, 2274, 2276, 2277, 2278, 2279, + 2280, 2281, 2282, 2283, 2284, 2285, 2286, 2287, 2288, 2289, + 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, + 2300, 2301, 2302, 2303, 2304, 2305, 2306, 2307, 2308, 2309, + 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 12, 12, + 12, 36, 36, 36, 80, 99, 80, 101, 101, 101, + 117, 117, 117, 191, 878, 191, 214, 214, 214, 877, + 876, 875, 874, 873, 872, 871, 870, 869, 868, 867, + 866, 865, 864, 863, 862, 861, 857, 856, 855, 854, + 853, 852, 851, 850, 849, 848, 847, 846, 842, 841, - 822, 821, 820, 819, 818, 817, 816, 813, 812, 811, - 810, 809, 808, 807, 806, 805, 804, 803, 802, 801, - 800, 799, 798, 797, 796, 795, 794, 793, 792, 791, - 790, 789, 788, 787, 786, 785, 782, 781, 780, 779, - 778, 777, 776, 775, 774, 773, 772, 771, 770, 769, - 768, 767, 766, 765, 764, 760, 754, 753, 752, 751, - 750, 749, 748, 747, 746, 745, 744, 743, 742, 741, - 740, 739, 738, 737, 736, 735, 734, 731, 730, 729, - 728, 727, 726, 723, 722, 721, 720, 719, 718, 717, - 716, 715, 714, 713, 712, 711, 710, 709, 708, 707, + 840, 839, 838, 837, 836, 835, 834, 833, 832, 831, + 830, 829, 828, 827, 826, 825, 824, 823, 822, 821, + 820, 817, 816, 815, 814, 813, 812, 811, 810, 809, + 808, 807, 806, 805, 804, 803, 802, 801, 800, 799, + 798, 797, 796, 795, 794, 793, 792, 791, 790, 789, + 786, 785, 784, 783, 782, 781, 780, 779, 778, 777, + 776, 775, 774, 773, 772, 771, 770, 769, 768, 764, + 758, 757, 756, 755, 754, 753, 752, 751, 750, 749, + 748, 747, 746, 745, 744, 743, 742, 741, 740, 739, + 738, 735, 734, 733, 732, 731, 730, 729, 726, 725, - 706, 705, 704, 703, 702, 701, 700, 699, 698, 697, - 696, 695, 692, 691, 690, 689, 688, 687, 686, 685, - 684, 683, 680, 679, 678, 677, 676, 675, 674, 673, - 672, 671, 670, 669, 668, 667, 666, 665, 664, 663, - 662, 661, 660, 659, 656, 655, 654, 653, 652, 651, - 650, 649, 648, 647, 644, 643, 642, 633, 632, 631, - 630, 629, 628, 627, 626, 625, 624, 623, 622, 621, - 620, 618, 614, 613, 612, 611, 609, 608, 607, 604, - 603, 602, 601, 600, 599, 598, 597, 596, 595, 594, - 593, 592, 591, 590, 589, 588, 587, 584, 583, 582, + 724, 723, 722, 721, 720, 719, 718, 717, 716, 715, + 714, 713, 712, 711, 710, 709, 708, 707, 706, 705, + 704, 703, 702, 701, 700, 699, 698, 695, 694, 693, + 692, 691, 690, 689, 688, 687, 686, 683, 682, 681, + 680, 679, 678, 677, 676, 675, 674, 673, 672, 671, + 670, 669, 668, 667, 666, 665, 664, 663, 662, 659, + 658, 657, 656, 655, 654, 653, 652, 651, 650, 647, + 646, 645, 636, 635, 634, 633, 632, 631, 630, 629, + 628, 627, 626, 625, 624, 623, 621, 617, 616, 615, + 614, 612, 611, 610, 607, 606, 605, 604, 603, 602, - 581, 580, 579, 578, 575, 574, 571, 570, 569, 568, - 565, 564, 560, 559, 558, 557, 556, 555, 554, 553, - 552, 551, 550, 549, 548, 547, 543, 542, 541, 538, - 537, 536, 531, 530, 529, 528, 527, 526, 525, 524, - 523, 522, 521, 520, 519, 514, 513, 512, 511, 510, - 509, 508, 507, 506, 505, 504, 503, 502, 501, 500, - 497, 496, 495, 494, 491, 490, 489, 488, 487, 486, - 485, 484, 483, 482, 481, 480, 479, 478, 476, 474, - 473, 470, 468, 465, 462, 461, 460, 459, 458, 456, - 455, 454, 453, 451, 450, 449, 446, 445, 444, 443, + 601, 600, 599, 598, 597, 596, 595, 594, 593, 592, + 591, 590, 587, 586, 585, 584, 583, 582, 581, 580, + 577, 576, 573, 572, 571, 570, 567, 566, 562, 561, + 560, 559, 558, 557, 556, 555, 554, 553, 552, 551, + 550, 549, 545, 544, 543, 540, 539, 538, 533, 532, + 531, 530, 529, 528, 527, 526, 525, 524, 523, 522, + 521, 516, 515, 514, 513, 512, 511, 510, 509, 508, + 507, 506, 505, 504, 503, 502, 499, 498, 497, 496, + 493, 492, 491, 490, 489, 488, 487, 486, 485, 484, + 483, 482, 481, 480, 478, 476, 475, 472, 470, 467, - 442, 441, 440, 439, 438, 437, 436, 435, 434, 431, - 430, 429, 428, 427, 426, 425, 424, 423, 422, 421, - 418, 417, 414, 413, 410, 409, 408, 407, 405, 404, - 403, 402, 401, 400, 396, 395, 394, 393, 392, 391, - 390, 387, 386, 385, 384, 383, 382, 381, 380, 379, - 378, 377, 376, 375, 374, 373, 372, 371, 370, 369, - 368, 367, 366, 365, 364, 363, 362, 361, 355, 354, - 353, 352, 351, 350, 349, 348, 215, 342, 340, 337, - 334, 331, 324, 323, 322, 321, 320, 318, 317, 313, - 312, 311, 308, 307, 306, 302, 292, 289, 285, 284, + 464, 463, 462, 461, 460, 458, 457, 456, 455, 453, + 452, 451, 448, 447, 446, 445, 444, 443, 442, 441, + 440, 439, 438, 437, 436, 435, 432, 431, 430, 429, + 428, 427, 426, 425, 424, 423, 422, 419, 418, 415, + 414, 411, 410, 409, 408, 406, 405, 404, 403, 402, + 401, 397, 396, 395, 394, 393, 392, 391, 388, 387, + 386, 385, 384, 383, 382, 381, 380, 379, 378, 377, + 376, 375, 374, 373, 372, 371, 370, 369, 368, 367, + 366, 365, 364, 363, 362, 356, 355, 354, 353, 352, + 351, 350, 349, 215, 343, 341, 338, 335, 332, 325, - 279, 278, 277, 274, 272, 271, 270, 269, 268, 267, - 264, 263, 262, 259, 258, 257, 254, 253, 249, 248, - 239, 238, 237, 236, 232, 231, 230, 226, 225, 224, - 220, 215, 209, 203, 202, 199, 198, 189, 169, 146, - 110, 107, 106, 43, 100, 98, 97, 88, 43, 2303, - 11, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, - 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, - 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, - 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, - 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, + 324, 323, 322, 321, 319, 318, 314, 313, 312, 309, + 308, 307, 303, 292, 289, 285, 284, 279, 278, 277, + 274, 272, 271, 270, 269, 268, 267, 264, 263, 262, + 259, 258, 257, 254, 253, 249, 248, 239, 238, 237, + 236, 232, 231, 230, 226, 225, 224, 220, 215, 209, + 203, 202, 199, 198, 189, 169, 146, 110, 107, 106, + 43, 100, 98, 97, 88, 43, 2318, 11, 2318, 2318, + 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, + 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, + 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, - 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, - 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, - 2303, 2303, 2303, 2303, 2303, 2303, 2303 + 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, + 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, + 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, + 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, + 2318, 2318, 2318, 2318 } ; -static const flex_int16_t yy_chk[2828] = +static const flex_int16_t yy_chk[2845] = { 0, 0, 1, 1, 1, 0, 1, 1, 44, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 21, 143, 3, 3, 3, 21, 1, 1, 3, 4, - 4, 4, 13, 1, 13, 4, 736, 737, 1, 26, + 4, 4, 13, 1, 13, 4, 0, 0, 1, 26, 5, 5, 5, 27, 1, 31, 1, 44, 6, 6, 6, 109, 1, 1, 7, 7, 7, 37, 7, 37, - 430, 1, 8, 8, 8, 26, 8, 1, 143, 74, + 431, 1, 8, 8, 8, 26, 8, 1, 143, 74, 28, 31, 27, 74, 1, 1, 2, 2, 2, 109, 2, 2, 32, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 9, 9, 9, 28, 33, 2, 2, 6, 10, 10, 10, 42, 2, 42, - 62, 32, 430, 2, 52, 137, 9, 47, 48, 2, + 62, 32, 431, 2, 52, 137, 9, 47, 48, 2, 51, 2, 56, 62, 10, 130, 130, 2, 2, 33, 258, 137, 25, 62, 25, 130, 2, 25, 25, 25, 25, 25, 2, 52, 47, 48, 51, 258, 56, 2, @@ -1866,7 +1871,7 @@ static const flex_int16_t yy_chk[2828] = 19, 147, 17, 20, 20, 20, 20, 20, 22, 19, 22, 22, 22, 22, 22, 55, 20, 64, 59, 151, 182, 54, 57, 22, 64, 65, 182, 55, 17, 54, - 65, 101, 91, 65, 66, 19, 63, 310, 739, 310, + 65, 101, 91, 65, 66, 19, 63, 311, 736, 311, 151, 55, 20, 93, 66, 59, 66, 54, 92, 22, 45, 59, 45, 45, 45, 45, 55, 54, 45, 91, @@ -1877,277 +1882,279 @@ static const flex_int16_t yy_chk[2828] = 60, 61, 71, 58, 61, 61, 96, 58, 61, 61, 71, 58, 71, 94, 95, 108, 104, 71, 71, 58, 60, 61, 70, 58, 60, 58, 58, 60, 60, 69, - 70, 60, 110, 69, 60, 740, 79, 69, 60, 77, + 70, 60, 110, 69, 60, 737, 79, 69, 60, 77, 94, 95, 108, 160, 70, 104, 70, 72, 70, 69, 72, 72, 75, 69, 228, 284, 75, 228, 70, 75, 105, 72, 111, 79, 72, 77, 75, 75, 76, 76, 284, 75, 75, 79, 113, 77, 114, 116, 76, 115, - 77, 81, 81, 81, 81, 81, 105, 177, 158, 741, + 77, 81, 81, 81, 81, 81, 105, 177, 158, 738, 76, 111, 160, 82, 81, 82, 82, 82, 82, 82, 181, 177, 113, 116, 76, 114, 76, 115, 82, 76, 76, 89, 89, 89, 89, 89, 83, 158, 83, 76, 81, 83, 83, 83, 83, 83, 76, 84, 181, 84, 84, 84, 84, 84, 82, 85, 85, 85, 85, 85, 120, 122, 84, 90, 90, 90, 90, 90, 85, 103, - 122, 126, 742, 135, 122, 135, 103, 185, 120, 194, + 122, 126, 739, 135, 122, 135, 103, 185, 120, 194, - 126, 126, 136, 140, 742, 164, 140, 169, 84, 120, + 126, 126, 136, 140, 740, 164, 140, 169, 84, 120, 140, 169, 135, 167, 85, 136, 167, 167, 192, 136, 164, 164, 164, 173, 197, 194, 185, 173, 171, 103, 193, 173, 196, 103, 200, 218, 281, 103, 278, 296, - 195, 641, 296, 743, 641, 103, 281, 192, 205, 103, - 197, 103, 103, 119, 201, 744, 204, 193, 745, 196, + 195, 644, 296, 500, 644, 103, 281, 192, 205, 103, + 197, 103, 103, 119, 201, 266, 500, 193, 204, 196, 200, 119, 119, 119, 119, 119, 171, 171, 171, 195, 119, 119, 119, 119, 119, 119, 205, 171, 208, 171, - 201, 171, 171, 209, 171, 204, 211, 213, 219, 266, - 498, 278, 218, 332, 229, 273, 119, 119, 119, 119, + 201, 171, 171, 209, 171, 171, 211, 204, 213, 219, + 315, 278, 218, 333, 229, 315, 119, 119, 119, 119, - 119, 119, 229, 498, 208, 314, 319, 325, 229, 209, - 314, 328, 211, 333, 219, 213, 217, 217, 217, 217, - 217, 273, 332, 335, 746, 217, 217, 217, 217, 217, - 217, 338, 319, 325, 339, 747, 362, 328, 347, 406, - 333, 362, 616, 472, 367, 266, 319, 405, 266, 335, - 367, 217, 217, 217, 217, 217, 217, 405, 748, 585, - 338, 339, 344, 344, 344, 344, 344, 347, 406, 472, - 616, 344, 344, 344, 344, 344, 344, 383, 397, 397, - 397, 401, 383, 422, 397, 425, 433, 401, 422, 425, - 433, 441, 466, 615, 474, 441, 474, 344, 344, 344, + 119, 119, 229, 741, 208, 339, 273, 320, 229, 209, + 326, 266, 211, 329, 266, 219, 213, 217, 217, 217, + 217, 217, 333, 334, 743, 336, 217, 217, 217, 217, + 217, 217, 273, 320, 339, 340, 326, 363, 368, 329, + 348, 407, 363, 402, 368, 474, 744, 320, 406, 402, + 334, 336, 217, 217, 217, 217, 217, 217, 406, 588, + 676, 676, 340, 345, 345, 345, 345, 345, 468, 348, + 407, 474, 345, 345, 345, 345, 345, 345, 384, 398, + 398, 398, 423, 384, 426, 398, 434, 423, 426, 443, + 434, 462, 476, 443, 476, 479, 462, 468, 345, 345, - 344, 344, 344, 460, 510, 477, 534, 546, 460, 510, - 617, 494, 546, 578, 585, 494, 534, 611, 578, 615, - 749, 466, 474, 494, 474, 494, 494, 494, 494, 494, - 619, 750, 611, 383, 477, 619, 673, 673, 383, 617, - 751, 752, 755, 611, 422, 475, 475, 475, 475, 475, - 756, 757, 760, 621, 475, 475, 475, 475, 475, 475, - 621, 611, 699, 713, 758, 759, 761, 699, 713, 762, - 763, 755, 764, 765, 766, 767, 768, 756, 757, 769, - 475, 475, 475, 475, 475, 475, 770, 771, 771, 772, - 771, 759, 773, 758, 774, 775, 776, 777, 778, 779, + 345, 345, 345, 345, 512, 548, 536, 580, 619, 512, + 548, 496, 580, 620, 588, 496, 536, 745, 747, 748, + 476, 749, 476, 496, 479, 496, 496, 496, 496, 496, + 622, 624, 702, 618, 384, 622, 619, 702, 624, 384, + 746, 750, 620, 423, 477, 477, 477, 477, 477, 614, + 751, 752, 746, 477, 477, 477, 477, 477, 477, 618, + 716, 753, 754, 755, 614, 716, 756, 759, 760, 762, + 761, 764, 765, 763, 702, 614, 766, 767, 768, 477, + 477, 477, 477, 477, 477, 769, 770, 771, 772, 773, + 774, 775, 775, 614, 775, 760, 759, 761, 762, 763, - 780, 781, 782, 783, 699, 784, 785, 786, 787, 788, - 713, 789, 790, 791, 792, 793, 794, 795, 796, 793, - 797, 798, 799, 793, 800, 801, 803, 804, 805, 806, - 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, - 817, 818, 819, 820, 821, 822, 823, 824, 825, 823, - 826, 828, 829, 830, 831, 832, 833, 834, 835, 836, - 837, 838, 840, 841, 842, 843, 844, 845, 846, 847, - 848, 849, 850, 851, 852, 853, 855, 856, 857, 858, - 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, - 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, + 776, 777, 778, 779, 780, 781, 782, 716, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, + 795, 796, 797, 798, 799, 800, 797, 801, 802, 803, + 797, 804, 805, 807, 808, 809, 810, 811, 812, 813, + 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, + 824, 825, 826, 827, 828, 829, 827, 830, 832, 833, + 834, 835, 836, 837, 838, 839, 840, 841, 842, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, + 855, 856, 857, 859, 860, 861, 862, 863, 864, 865, + 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, - 879, 873, 880, 875, 881, 882, 879, 875, 884, 885, - 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, - 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, - 906, 907, 908, 910, 911, 912, 913, 914, 915, 916, - 917, 918, 919, 920, 921, 922, 895, 923, 924, 896, - 925, 926, 899, 927, 928, 929, 930, 931, 932, 933, - 934, 935, 936, 937, 938, 939, 940, 941, 942, 944, - 945, 946, 947, 948, 949, 950, 951, 952, 953, 949, - 954, 955, 956, 957, 958, 959, 960, 963, 964, 965, - 966, 967, 968, 969, 972, 973, 974, 975, 976, 977, + 876, 877, 878, 879, 880, 881, 882, 883, 884, 878, + 885, 880, 886, 887, 884, 880, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, + 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, + 913, 915, 916, 917, 918, 919, 920, 921, 922, 923, + 924, 925, 926, 927, 900, 928, 929, 901, 930, 931, + 904, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 949, 950, 951, + 952, 953, 954, 955, 956, 957, 958, 954, 959, 960, + 961, 962, 963, 964, 965, 968, 969, 970, 971, 972, - 979, 980, 981, 982, 983, 980, 984, 985, 986, 987, - 988, 990, 991, 994, 995, 996, 997, 998, 999, 1000, - 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, - 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, - 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1029, 1017, 1030, - 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, - 1041, 1044, 1042, 1045, 1046, 1043, 1047, 1048, 1050, 1051, - 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, - 1062, 1063, 1064, 1065, 1066, 1067, 1040, 1039, 1068, 1041, - 1042, 1043, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1077, + 973, 974, 977, 978, 979, 980, 981, 982, 984, 985, + 986, 987, 988, 985, 989, 990, 991, 992, 993, 995, + 996, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, + 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, + 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, + 1028, 1029, 1030, 1031, 1032, 1033, 1035, 1023, 1036, 1037, + 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, + 1050, 1048, 1051, 1052, 1049, 1053, 1054, 1056, 1057, 1058, + 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, + 1069, 1070, 1071, 1072, 1073, 1046, 1045, 1074, 1047, 1048, - 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, - 1088, 1089, 1090, 1092, 1093, 1094, 1095, 1096, 1097, 1098, - 1100, 1101, 1096, 1102, 1103, 1104, 1105, 1106, 1107, 1108, - 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, - 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1128, 1130, - 1131, 1132, 1134, 1135, 1136, 1123, 1137, 1138, 1140, 1141, - 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, - 1152, 1153, 1154, 1155, 1156, 1157, 1159, 1160, 1096, 1161, - 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, - 1172, 1173, 1174, 1175, 1176, 1178, 1177, 1179, 1181, 1182, + 1049, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1083, 1084, + 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, + 1095, 1096, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1106, + 1107, 1102, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, + 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, + 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1134, 1136, 1137, + 1138, 1140, 1141, 1142, 1129, 1143, 1144, 1146, 1147, 1148, + 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, + 1159, 1160, 1161, 1162, 1163, 1164, 1166, 1102, 1167, 1168, + 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, - 1183, 1184, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, - 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, - 1204, 1205, 1175, 1177, 1178, 1179, 1206, 1207, 1209, 1210, - 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, - 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1230, 1231, - 1232, 1233, 1234, 1235, 1231, 1236, 1237, 1238, 1239, 1240, - 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, - 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, - 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1270, 1271, - 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1232, 1279, 1280, + 1179, 1180, 1181, 1182, 1183, 1185, 1184, 1186, 1188, 1189, + 1190, 1191, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, + 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, + 1211, 1212, 1182, 1184, 1185, 1186, 1213, 1214, 1216, 1217, + 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, + 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1237, 1238, + 1239, 1240, 1241, 1242, 1238, 1243, 1244, 1245, 1246, 1247, + 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, + 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, + 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1277, 1278, - 1282, 1283, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, - 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, - 1304, 1305, 1306, 1307, 1309, 1308, 1310, 1311, 1312, 1313, - 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, - 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1306, 1334, - 1305, 1308, 1307, 1309, 1335, 1336, 1337, 1338, 1339, 1340, - 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, - 1351, 1352, 1353, 1356, 1358, 1360, 1361, 1362, 1363, 1364, - 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, - 1375, 1377, 1379, 1380, 1382, 1383, 1384, 1385, 1386, 1387, + 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1239, 1286, 1287, + 1288, 1290, 1291, 1294, 1295, 1296, 1297, 1298, 1299, 1300, + 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, + 1311, 1312, 1313, 1314, 1315, 1317, 1316, 1318, 1319, 1320, + 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1331, + 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1314, + 1342, 1313, 1316, 1315, 1317, 1343, 1344, 1345, 1346, 1347, + 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, + 1358, 1359, 1360, 1361, 1364, 1366, 1368, 1369, 1370, 1371, + 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, - 1389, 1390, 1392, 1394, 1396, 1397, 1398, 1399, 1400, 1401, - 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1412, - 1413, 1414, 1415, 1416, 1417, 1418, 1421, 1422, 1423, 1424, - 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1435, - 1436, 1437, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, - 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, - 1457, 1458, 1430, 1431, 1459, 1460, 1432, 1461, 1462, 1463, - 1406, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, - 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1439, - 1483, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, + 1382, 1383, 1385, 1387, 1388, 1390, 1391, 1392, 1393, 1394, + 1395, 1397, 1398, 1400, 1402, 1404, 1405, 1406, 1407, 1408, + 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, + 1419, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1430, 1431, + 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, + 1442, 1444, 1445, 1446, 1448, 1449, 1450, 1451, 1452, 1453, + 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, + 1464, 1465, 1466, 1467, 1439, 1440, 1468, 1469, 1441, 1470, + 1471, 1414, 1472, 1474, 1475, 1476, 1477, 1478, 1479, 1480, + 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, - 1494, 1487, 1495, 1498, 1499, 1500, 1501, 1502, 1503, 1504, - 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1515, - 1516, 1517, 1518, 1519, 1521, 1523, 1521, 1518, 1524, 1527, - 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, - 1538, 1539, 1540, 1543, 1541, 1544, 1545, 1547, 1548, 1549, - 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, - 1560, 1561, 1562, 1563, 1564, 1565, 1540, 1539, 1566, 1538, - 1541, 1568, 1569, 1571, 1572, 1573, 1574, 1575, 1576, 1577, - 1578, 1579, 1580, 1581, 1582, 1584, 1586, 1588, 1589, 1591, - 1592, 1593, 1594, 1595, 1540, 1596, 1597, 1598, 1599, 1600, + 1491, 1448, 1492, 1494, 1495, 1496, 1497, 1498, 1499, 1500, + 1501, 1502, 1503, 1496, 1504, 1507, 1508, 1509, 1510, 1511, + 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, + 1522, 1524, 1525, 1526, 1527, 1528, 1529, 1533, 1531, 1527, + 1531, 1534, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, + 1545, 1546, 1547, 1548, 1549, 1550, 1553, 1551, 1554, 1555, + 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, + 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1550, + 1549, 1576, 1548, 1551, 1578, 1579, 1581, 1582, 1583, 1584, + 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1594, 1596, - 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1610, 1611, 1615, - 1616, 1618, 1619, 1620, 1621, 1623, 1624, 1623, 1625, 1626, - 1623, 1627, 1628, 1623, 1629, 1630, 1631, 1632, 1633, 1634, - 1636, 1638, 1639, 1640, 1641, 1643, 1642, 1644, 1646, 1647, - 1648, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657, 1659, - 1660, 1661, 1658, 1662, 1663, 1664, 1665, 1667, 1668, 1669, - 1640, 1641, 1642, 1658, 1643, 1644, 1670, 1672, 1673, 1674, - 1675, 1676, 1677, 1678, 1679, 1680, 1680, 1681, 1682, 1683, - 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, - 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, + 1598, 1599, 1601, 1602, 1603, 1604, 1605, 1550, 1606, 1607, + 1608, 1609, 1610, 1612, 1613, 1614, 1615, 1616, 1617, 1618, + 1620, 1621, 1625, 1626, 1628, 1629, 1630, 1631, 1633, 1634, + 1633, 1635, 1636, 1633, 1637, 1638, 1633, 1639, 1640, 1641, + 1642, 1643, 1644, 1645, 1647, 1649, 1650, 1651, 1652, 1654, + 1653, 1655, 1657, 1658, 1659, 1661, 1662, 1663, 1664, 1665, + 1666, 1667, 1668, 1670, 1671, 1672, 1669, 1673, 1674, 1675, + 1676, 1678, 1679, 1680, 1651, 1652, 1653, 1669, 1654, 1655, + 1681, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, + 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, - 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713, - 1714, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1725, - 1726, 1727, 1729, 1730, 1732, 1731, 1733, 1734, 1735, 1738, - 1739, 1740, 1743, 1744, 1745, 1746, 1747, 1748, 1681, 1749, - 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1759, 1760, 1730, - 1761, 1729, 1731, 1732, 1758, 1733, 1762, 1763, 1764, 1758, - 1765, 1766, 1767, 1769, 1770, 1771, 1773, 1774, 1776, 1777, - 1778, 1780, 1781, 1782, 1783, 1784, 1787, 1788, 1789, 1790, - 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, - 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, + 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, + 1711, 1712, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, + 1721, 1722, 1723, 1724, 1725, 1726, 1728, 1729, 1730, 1731, + 1732, 1733, 1734, 1735, 1737, 1738, 1739, 1741, 1742, 1744, + 1743, 1745, 1746, 1747, 1750, 1751, 1752, 1755, 1756, 1757, + 1758, 1759, 1692, 1760, 1761, 1762, 1763, 1764, 1765, 1766, + 1767, 1768, 1771, 1772, 1742, 1773, 1741, 1743, 1744, 1770, + 1745, 1774, 1775, 1776, 1770, 1777, 1778, 1779, 1781, 1782, + 1783, 1785, 1786, 1788, 1789, 1790, 1792, 1793, 1794, 1795, + 1796, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, - 1811, 1812, 1814, 1815, 1816, 1817, 1818, 1820, 1821, 1822, - 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, - 1834, 1835, 1836, 1837, 1839, 1840, 1841, 1842, 1843, 1814, - 1816, 1844, 1846, 1847, 1848, 1850, 1851, 1852, 1853, 1854, - 1855, 1856, 1857, 1858, 1859, 1861, 1862, 1863, 1864, 1865, - 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, - 1876, 1877, 1878, 1879, 1880, 1882, 1884, 1885, 1886, 1880, - 1887, 1888, 1890, 1893, 1891, 1895, 1896, 1897, 1898, 1899, - 1900, 1901, 1902, 1904, 1905, 1906, 1907, 1908, 1909, 1910, - 1911, 1912, 1913, 1915, 1916, 1917, 1918, 1919, 1920, 1890, + 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, + 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1827, 1828, + 1829, 1830, 1831, 1833, 1834, 1835, 1837, 1838, 1839, 1840, + 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, + 1852, 1853, 1854, 1855, 1856, 1827, 1829, 1857, 1859, 1860, + 1861, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, + 1872, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, + 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, + 1893, 1894, 1896, 1898, 1899, 1900, 1894, 1901, 1902, 1904, + 1907, 1905, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, - 1891, 1921, 1922, 1923, 1925, 1926, 1927, 1928, 1930, 1931, - 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1942, - 1943, 1944, 1945, 1946, 1948, 1949, 1950, 1951, 1954, 1955, - 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, - 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, - 1977, 1978, 1979, 1982, 1983, 1955, 1956, 1984, 1957, 1985, - 1986, 1987, 1988, 1989, 1990, 1991, 1993, 1994, 1996, 1997, - 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, - 2008, 2009, 2007, 2010, 2011, 2012, 2013, 2014, 2015, 2016, - 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2026, 2027, + 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, + 1929, 1930, 1931, 1932, 1933, 1934, 1904, 1905, 1935, 1936, + 1937, 1939, 1940, 1941, 1942, 1944, 1945, 1946, 1947, 1948, + 1949, 1950, 1951, 1952, 1953, 1954, 1956, 1957, 1958, 1959, + 1961, 1963, 1964, 1965, 1966, 1969, 1970, 1971, 1972, 1973, + 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1982, 1983, 1984, + 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, + 1997, 1998, 1970, 1971, 1999, 1972, 2000, 2001, 2002, 2003, + 2004, 2005, 2006, 2008, 2009, 2011, 2012, 2013, 2014, 2015, + 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2022, - 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, - 2039, 2011, 2013, 2041, 2043, 2045, 2047, 2048, 2049, 2050, - 2051, 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, - 2061, 2062, 2063, 2065, 2067, 2068, 2069, 2070, 2071, 2072, - 2073, 2074, 2075, 2076, 2077, 2078, 2080, 2081, 2082, 2084, - 2085, 2086, 2087, 2088, 2090, 2091, 2093, 2095, 2063, 2097, - 2065, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2108, - 2109, 2111, 2110, 2112, 2113, 2114, 2115, 2116, 2117, 2119, - 2120, 2121, 2122, 2123, 2125, 2126, 2127, 2128, 2129, 2130, - 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2109, 2110, 2138, + 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, + 2035, 2036, 2037, 2038, 2039, 2041, 2042, 2043, 2044, 2045, + 2046, 2047, 2048, 2049, 2050, 2051, 2052, 2054, 2026, 2028, + 2056, 2058, 2060, 2062, 2063, 2064, 2065, 2066, 2067, 2068, + 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, + 2080, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2090, + 2091, 2092, 2093, 2095, 2096, 2097, 2099, 2100, 2101, 2102, + 2103, 2105, 2106, 2108, 2110, 2078, 2112, 2080, 2114, 2115, + 2116, 2117, 2118, 2119, 2120, 2121, 2123, 2124, 2126, 2125, + 2127, 2128, 2129, 2130, 2131, 2132, 2134, 2135, 2136, 2137, - 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2150, - 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, - 2161, 2162, 2163, 2164, 2165, 2166, 2167, 2168, 2169, 2170, - 2171, 2145, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2181, - 2182, 2183, 2185, 2186, 2187, 2188, 2190, 2191, 2192, 2193, - 2199, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2211, 2212, - 2214, 2215, 2216, 2217, 2218, 2219, 2220, 2221, 2223, 2224, - 2225, 2226, 2227, 2228, 2230, 2231, 2233, 2235, 2236, 2237, - 2238, 2239, 2240, 2242, 2243, 2244, 2245, 2246, 2245, 2247, - 2248, 2249, 2251, 2252, 2255, 2256, 2257, 2258, 2259, 2260, + 2138, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, + 2149, 2150, 2151, 2152, 2124, 2125, 2153, 2155, 2156, 2157, + 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, + 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, + 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2160, 2187, + 2188, 2189, 2190, 2191, 2192, 2193, 2196, 2197, 2198, 2200, + 2201, 2202, 2203, 2205, 2206, 2207, 2208, 2214, 2218, 2219, + 2220, 2221, 2222, 2223, 2224, 2226, 2227, 2229, 2230, 2231, + 2232, 2233, 2234, 2235, 2236, 2238, 2239, 2240, 2241, 2242, + 2243, 2245, 2246, 2248, 2250, 2251, 2252, 2253, 2254, 2255, - 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, - 2271, 2273, 2274, 2275, 2276, 2279, 2280, 2281, 2282, 2284, - 2285, 2287, 2289, 2291, 2292, 2293, 2294, 2295, 2296, 2297, - 2299, 2304, 2304, 2304, 2305, 2305, 2305, 2306, 2307, 2306, - 2308, 2308, 2308, 2309, 2309, 2309, 2310, 735, 2310, 2311, - 2311, 2311, 734, 733, 732, 731, 730, 729, 728, 727, - 726, 725, 723, 722, 721, 720, 719, 718, 717, 716, - 715, 714, 712, 711, 709, 708, 707, 706, 705, 704, - 703, 702, 701, 700, 698, 697, 696, 695, 694, 692, - 691, 689, 688, 687, 686, 685, 684, 683, 682, 681, + 2257, 2258, 2259, 2260, 2261, 2260, 2262, 2263, 2264, 2266, + 2267, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, + 2279, 2280, 2281, 2282, 2283, 2284, 2285, 2286, 2288, 2289, + 2290, 2291, 2294, 2295, 2296, 2297, 2299, 2300, 2302, 2304, + 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2314, 2319, 2319, + 2319, 2320, 2320, 2320, 2321, 2322, 2321, 2323, 2323, 2323, + 2324, 2324, 2324, 2325, 735, 2325, 2326, 2326, 2326, 734, + 733, 732, 731, 730, 729, 728, 726, 725, 724, 723, + 722, 721, 720, 719, 718, 717, 715, 714, 712, 711, + 710, 709, 708, 707, 706, 705, 704, 703, 701, 700, - 680, 679, 678, 677, 676, 675, 674, 672, 671, 670, - 669, 668, 667, 665, 664, 663, 662, 661, 660, 659, - 658, 656, 655, 654, 653, 652, 651, 650, 649, 648, - 647, 646, 645, 644, 643, 642, 640, 639, 638, 637, - 636, 635, 634, 633, 632, 631, 630, 629, 628, 627, - 626, 625, 624, 623, 622, 618, 610, 609, 608, 607, - 606, 604, 602, 600, 598, 597, 596, 595, 594, 593, - 592, 591, 590, 589, 588, 587, 586, 584, 583, 582, - 581, 580, 579, 577, 576, 575, 574, 573, 572, 571, - 570, 569, 568, 567, 566, 565, 563, 562, 560, 559, + 699, 698, 697, 695, 694, 692, 691, 690, 689, 688, + 687, 686, 685, 684, 683, 682, 681, 680, 679, 678, + 677, 675, 674, 673, 672, 671, 670, 668, 667, 666, + 665, 664, 663, 662, 661, 659, 658, 657, 656, 655, + 654, 653, 652, 651, 650, 649, 648, 647, 646, 645, + 643, 642, 641, 640, 639, 638, 637, 636, 635, 634, + 633, 632, 631, 630, 629, 628, 627, 626, 625, 621, + 613, 612, 611, 610, 609, 607, 605, 603, 601, 600, + 599, 598, 597, 596, 595, 594, 593, 592, 591, 590, + 589, 587, 586, 585, 584, 583, 582, 581, 579, 578, - 558, 557, 556, 555, 554, 553, 552, 551, 550, 549, - 548, 547, 545, 544, 542, 541, 540, 539, 538, 537, - 536, 535, 533, 532, 531, 530, 529, 528, 527, 526, - 525, 524, 523, 522, 521, 520, 519, 518, 517, 516, - 514, 513, 512, 511, 509, 508, 507, 506, 505, 504, - 503, 502, 500, 499, 497, 496, 495, 493, 491, 490, - 489, 488, 487, 486, 484, 483, 482, 481, 480, 479, - 478, 476, 471, 469, 468, 467, 465, 462, 461, 459, - 458, 457, 456, 455, 454, 453, 452, 451, 450, 449, - 448, 447, 446, 445, 444, 443, 442, 440, 439, 438, + 577, 576, 575, 574, 573, 572, 571, 570, 569, 568, + 567, 565, 564, 562, 561, 560, 559, 558, 557, 556, + 555, 554, 553, 552, 551, 550, 549, 547, 546, 544, + 543, 542, 541, 540, 539, 538, 537, 535, 534, 533, + 532, 531, 530, 529, 528, 527, 526, 525, 524, 523, + 522, 521, 520, 519, 518, 516, 515, 514, 513, 511, + 510, 509, 508, 507, 506, 505, 504, 502, 501, 499, + 498, 497, 495, 493, 492, 491, 490, 489, 488, 486, + 485, 484, 483, 482, 481, 480, 478, 473, 471, 470, + 469, 467, 464, 463, 461, 460, 459, 458, 457, 456, - 437, 436, 435, 434, 432, 431, 429, 428, 427, 426, - 424, 423, 421, 420, 419, 418, 417, 416, 415, 414, - 413, 412, 411, 410, 409, 408, 404, 403, 402, 400, - 399, 398, 396, 395, 394, 393, 392, 391, 390, 389, - 388, 387, 386, 385, 384, 382, 381, 380, 379, 378, - 377, 376, 375, 374, 373, 372, 371, 370, 369, 368, - 366, 365, 364, 363, 361, 360, 359, 358, 357, 356, - 355, 354, 353, 352, 351, 350, 349, 348, 346, 343, - 341, 336, 334, 331, 324, 323, 322, 321, 320, 318, - 317, 316, 315, 313, 312, 311, 309, 308, 307, 306, + 455, 454, 453, 452, 451, 450, 449, 448, 447, 446, + 445, 444, 442, 441, 440, 439, 438, 437, 436, 435, + 433, 432, 430, 429, 428, 427, 425, 424, 422, 421, + 420, 419, 418, 417, 416, 415, 414, 413, 412, 411, + 410, 409, 405, 404, 403, 401, 400, 399, 397, 396, + 395, 394, 393, 392, 391, 390, 389, 388, 387, 386, + 385, 383, 382, 381, 380, 379, 378, 377, 376, 375, + 374, 373, 372, 371, 370, 369, 367, 366, 365, 364, + 362, 361, 360, 359, 358, 357, 356, 355, 354, 353, + 352, 351, 350, 349, 347, 344, 342, 337, 335, 332, - 305, 304, 303, 302, 301, 300, 299, 298, 297, 295, - 294, 293, 292, 291, 290, 289, 288, 287, 286, 285, - 283, 282, 280, 279, 277, 276, 275, 274, 272, 271, - 270, 269, 268, 267, 265, 264, 263, 262, 261, 260, - 259, 257, 256, 254, 253, 252, 251, 250, 249, 248, - 247, 246, 245, 244, 243, 242, 241, 240, 239, 238, - 237, 236, 235, 234, 233, 232, 231, 230, 227, 226, - 225, 224, 223, 222, 221, 220, 214, 212, 210, 207, - 202, 198, 190, 189, 188, 187, 186, 184, 183, 180, - 179, 178, 176, 175, 174, 172, 170, 168, 166, 165, + 325, 324, 323, 322, 321, 319, 318, 317, 316, 314, + 313, 312, 310, 309, 308, 307, 306, 305, 304, 303, + 302, 301, 300, 299, 298, 297, 295, 294, 293, 292, + 291, 290, 289, 288, 287, 286, 285, 283, 282, 280, + 279, 277, 276, 275, 274, 272, 271, 270, 269, 268, + 267, 265, 264, 263, 262, 261, 260, 259, 257, 256, + 254, 253, 252, 251, 250, 249, 248, 247, 246, 245, + 244, 243, 242, 241, 240, 239, 238, 237, 236, 235, + 234, 233, 232, 231, 230, 227, 226, 225, 224, 223, + 222, 221, 220, 214, 212, 210, 207, 202, 198, 190, - 163, 162, 161, 159, 157, 156, 155, 154, 153, 152, - 150, 149, 148, 146, 145, 144, 142, 141, 139, 138, - 134, 133, 132, 131, 129, 128, 127, 125, 124, 123, - 121, 117, 112, 107, 106, 99, 98, 78, 73, 67, - 53, 50, 49, 43, 41, 39, 38, 24, 14, 11, - 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, - 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, - 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, - 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, - 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, + 189, 188, 187, 186, 184, 183, 180, 179, 178, 176, + 175, 174, 172, 170, 168, 166, 165, 163, 162, 161, + 159, 157, 156, 155, 154, 153, 152, 150, 149, 148, + 146, 145, 144, 142, 141, 139, 138, 134, 133, 132, + 131, 129, 128, 127, 125, 124, 123, 121, 117, 112, + 107, 106, 99, 98, 78, 73, 67, 53, 50, 49, + 43, 41, 39, 38, 24, 14, 11, 2318, 2318, 2318, + 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, + 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, + 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, - 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, - 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, 2303, - 2303, 2303, 2303, 2303, 2303, 2303, 2303 + 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, + 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, + 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, + 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, + 2318, 2318, 2318, 2318 } ; static yy_state_type yy_last_accepting_state; @@ -2156,7 +2163,7 @@ static char *yy_last_accepting_cpos; extern int yy_flex_debug; int yy_flex_debug = 1; -static const flex_int16_t yy_rule_linenum[237] = +static const flex_int16_t yy_rule_linenum[238] = { 0, 149, 151, 153, 158, 159, 164, 165, 166, 178, 181, 186, 193, 202, 211, 220, 229, 238, 247, 256, 265, @@ -2165,25 +2172,25 @@ static const flex_int16_t yy_rule_linenum[237] = 469, 478, 487, 496, 505, 514, 523, 532, 541, 550, 559, 568, 577, 586, 595, 608, 617, 626, 635, 646, 657, 668, 679, 691, 702, 713, 724, 735, 746, 757, - 768, 777, 786, 795, 806, 815, 826, 837, 848, 859, - 871, 883, 895, 907, 919, 931, 942, 953, 962, 971, - 980, 991, 1002, 1011, 1020, 1031, 1042, 1053, 1064, 1075, + 768, 777, 786, 795, 806, 817, 826, 837, 848, 859, + 870, 882, 894, 906, 918, 930, 942, 953, 964, 973, + 982, 991, 1002, 1013, 1022, 1031, 1042, 1053, 1064, 1075, - 1086, 1097, 1108, 1119, 1128, 1137, 1146, 1158, 1169, 1179, - 1190, 1199, 1208, 1223, 1239, 1248, 1257, 1266, 1275, 1284, - 1293, 1302, 1311, 1320, 1329, 1338, 1347, 1371, 1395, 1404, - 1414, 1424, 1433, 1443, 1454, 1463, 1472, 1481, 1490, 1499, - 1510, 1521, 1532, 1542, 1551, 1560, 1569, 1580, 1591, 1602, - 1613, 1624, 1633, 1642, 1651, 1660, 1669, 1678, 1687, 1696, - 1705, 1714, 1724, 1736, 1749, 1758, 1767, 1776, 1786, 1796, - 1805, 1816, 1826, 1835, 1845, 1855, 1864, 1873, 1882, 1891, - 1901, 1910, 1919, 1928, 1937, 1946, 1955, 1964, 1973, 1982, - 1991, 2000, 2009, 2018, 2027, 2036, 2045, 2054, 2063, 2072, + 1086, 1097, 1108, 1119, 1130, 1139, 1148, 1157, 1169, 1180, + 1190, 1201, 1210, 1219, 1234, 1250, 1259, 1268, 1277, 1286, + 1295, 1304, 1313, 1322, 1331, 1340, 1349, 1358, 1382, 1406, + 1415, 1425, 1435, 1444, 1454, 1465, 1474, 1483, 1492, 1501, + 1510, 1521, 1532, 1543, 1553, 1562, 1571, 1580, 1591, 1602, + 1613, 1624, 1635, 1644, 1653, 1662, 1671, 1680, 1689, 1698, + 1707, 1716, 1725, 1735, 1747, 1760, 1769, 1778, 1787, 1797, + 1807, 1816, 1827, 1837, 1846, 1856, 1866, 1875, 1884, 1893, + 1902, 1912, 1921, 1930, 1939, 1948, 1957, 1966, 1975, 1984, + 1993, 2002, 2011, 2020, 2029, 2038, 2047, 2056, 2065, 2074, - 2081, 2090, 2099, 2108, 2117, 2126, 2135, 2144, 2153, 2162, - 2171, 2180, 2189, 2198, 2207, 2216, 2225, 2234, 2335, 2351, - 2400, 2408, 2423, 2424, 2425, 2426, 2427, 2428, 2430, 2448, - 2461, 2466, 2470, 2472, 2474, 2476 + 2083, 2092, 2101, 2110, 2119, 2128, 2137, 2146, 2155, 2164, + 2173, 2182, 2191, 2200, 2209, 2218, 2227, 2236, 2245, 2346, + 2362, 2411, 2419, 2434, 2435, 2436, 2437, 2438, 2439, 2441, + 2459, 2472, 2477, 2481, 2483, 2485, 2487 } ; /* The intent behind this definition is that it'll catch @@ -2238,7 +2245,7 @@ using namespace isc::dhcp; /* To avoid the call to exit... oops! */ #define YY_FATAL_ERROR(msg) isc::dhcp::Parser6Context::fatal(msg) -#line 2241 "dhcp6_lexer.cc" +#line 2249 "dhcp6_lexer.cc" /* noyywrap disables automatic rewinding for the next file to parse. Since we always parse only a single string, there's no need to do any wraps. And using yywrap requires linking with -lfl, which provides the default yywrap @@ -2264,8 +2271,8 @@ using namespace isc::dhcp; by moving it ahead by yyleng bytes. yyleng specifies the length of the currently matched token. */ #define YY_USER_ACTION driver.loc_.columns(yyleng); -#line 2267 "dhcp6_lexer.cc" -#line 2268 "dhcp6_lexer.cc" +#line 2275 "dhcp6_lexer.cc" +#line 2276 "dhcp6_lexer.cc" #define INITIAL 0 #define COMMENT 1 @@ -2595,7 +2602,7 @@ YY_DECL } -#line 2598 "dhcp6_lexer.cc" +#line 2606 "dhcp6_lexer.cc" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -2624,13 +2631,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 2304 ) + if ( yy_current_state >= 2319 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } - while ( yy_current_state != 2303 ); + while ( yy_current_state != 2318 ); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); @@ -2649,13 +2656,13 @@ do_action: /* This label is used only to access EOF actions. */ { if ( yy_act == 0 ) fprintf( stderr, "--scanner backing up\n" ); - else if ( yy_act < 237 ) + else if ( yy_act < 238 ) fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n", (long)yy_rule_linenum[yy_act], yytext ); - else if ( yy_act == 237 ) + else if ( yy_act == 238 ) fprintf( stderr, "--accepting default rule (\"%s\")\n", yytext ); - else if ( yy_act == 238 ) + else if ( yy_act == 239 ) fprintf( stderr, "--(end of buffer or a NUL)\n" ); else fprintf( stderr, "--EOF (start condition %d)\n", YY_START ); @@ -3555,9 +3562,9 @@ YY_RULE_SETUP case isc::dhcp::Parser6Context::LEASE_DATABASE: case isc::dhcp::Parser6Context::HOSTS_DATABASE: case isc::dhcp::Parser6Context::CONFIG_DATABASE: - return isc::dhcp::Dhcp6Parser::make_MAX_RECONNECT_TRIES(driver.loc_); + return isc::dhcp::Dhcp6Parser::make_RETRY_ON_STARTUP(driver.loc_); default: - return isc::dhcp::Dhcp6Parser::make_STRING("max-reconnect-tries", driver.loc_); + return isc::dhcp::Dhcp6Parser::make_STRING("retry-on-startup", driver.loc_); } } YY_BREAK @@ -3567,23 +3574,23 @@ YY_RULE_SETUP { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: - return isc::dhcp::Dhcp6Parser::make_MAX_ROW_ERRORS(driver.loc_); + case isc::dhcp::Parser6Context::HOSTS_DATABASE: + case isc::dhcp::Parser6Context::CONFIG_DATABASE: + return isc::dhcp::Dhcp6Parser::make_MAX_RECONNECT_TRIES(driver.loc_); default: - return isc::dhcp::Dhcp6Parser::make_STRING("max-row-errors", driver.loc_); + return isc::dhcp::Dhcp6Parser::make_STRING("max-reconnect-tries", driver.loc_); } } YY_BREAK case 76: YY_RULE_SETUP -#line 815 "dhcp6_lexer.ll" +#line 817 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: - case isc::dhcp::Parser6Context::HOSTS_DATABASE: - case isc::dhcp::Parser6Context::CONFIG_DATABASE: - return isc::dhcp::Dhcp6Parser::make_TRUST_ANCHOR(driver.loc_); + return isc::dhcp::Dhcp6Parser::make_MAX_ROW_ERRORS(driver.loc_); default: - return isc::dhcp::Dhcp6Parser::make_STRING("trust-anchor", driver.loc_); + return isc::dhcp::Dhcp6Parser::make_STRING("max-row-errors", driver.loc_); } } YY_BREAK @@ -3595,9 +3602,9 @@ YY_RULE_SETUP case isc::dhcp::Parser6Context::LEASE_DATABASE: case isc::dhcp::Parser6Context::HOSTS_DATABASE: case isc::dhcp::Parser6Context::CONFIG_DATABASE: - return isc::dhcp::Dhcp6Parser::make_CERT_FILE(driver.loc_); + return isc::dhcp::Dhcp6Parser::make_TRUST_ANCHOR(driver.loc_); default: - return isc::dhcp::Dhcp6Parser::make_STRING("cert-file", driver.loc_); + return isc::dhcp::Dhcp6Parser::make_STRING("trust-anchor", driver.loc_); } } YY_BREAK @@ -3609,9 +3616,9 @@ YY_RULE_SETUP case isc::dhcp::Parser6Context::LEASE_DATABASE: case isc::dhcp::Parser6Context::HOSTS_DATABASE: case isc::dhcp::Parser6Context::CONFIG_DATABASE: - return isc::dhcp::Dhcp6Parser::make_KEY_FILE(driver.loc_); + return isc::dhcp::Dhcp6Parser::make_CERT_FILE(driver.loc_); default: - return isc::dhcp::Dhcp6Parser::make_STRING("key-file", driver.loc_); + return isc::dhcp::Dhcp6Parser::make_STRING("cert-file", driver.loc_); } } YY_BREAK @@ -3623,15 +3630,29 @@ YY_RULE_SETUP case isc::dhcp::Parser6Context::LEASE_DATABASE: case isc::dhcp::Parser6Context::HOSTS_DATABASE: case isc::dhcp::Parser6Context::CONFIG_DATABASE: - return isc::dhcp::Dhcp6Parser::make_CIPHER_LIST(driver.loc_); + return isc::dhcp::Dhcp6Parser::make_KEY_FILE(driver.loc_); default: - return isc::dhcp::Dhcp6Parser::make_STRING("cipher-list", driver.loc_); + return isc::dhcp::Dhcp6Parser::make_STRING("key-file", driver.loc_); } } YY_BREAK case 80: YY_RULE_SETUP #line 859 "dhcp6_lexer.ll" +{ + switch(driver.ctx_) { + case isc::dhcp::Parser6Context::LEASE_DATABASE: + case isc::dhcp::Parser6Context::HOSTS_DATABASE: + case isc::dhcp::Parser6Context::CONFIG_DATABASE: + return isc::dhcp::Dhcp6Parser::make_CIPHER_LIST(driver.loc_); + default: + return isc::dhcp::Dhcp6Parser::make_STRING("cipher-list", driver.loc_); + } +} + YY_BREAK +case 81: +YY_RULE_SETUP +#line 870 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3644,9 +3665,9 @@ YY_RULE_SETUP } } YY_BREAK -case 81: +case 82: YY_RULE_SETUP -#line 871 "dhcp6_lexer.ll" +#line 882 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3659,9 +3680,9 @@ YY_RULE_SETUP } } YY_BREAK -case 82: +case 83: YY_RULE_SETUP -#line 883 "dhcp6_lexer.ll" +#line 894 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3674,9 +3695,9 @@ YY_RULE_SETUP } } YY_BREAK -case 83: +case 84: YY_RULE_SETUP -#line 895 "dhcp6_lexer.ll" +#line 906 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3689,9 +3710,9 @@ YY_RULE_SETUP } } YY_BREAK -case 84: +case 85: YY_RULE_SETUP -#line 907 "dhcp6_lexer.ll" +#line 918 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3704,9 +3725,9 @@ YY_RULE_SETUP } } YY_BREAK -case 85: +case 86: YY_RULE_SETUP -#line 919 "dhcp6_lexer.ll" +#line 930 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3719,9 +3740,9 @@ YY_RULE_SETUP } } YY_BREAK -case 86: +case 87: YY_RULE_SETUP -#line 931 "dhcp6_lexer.ll" +#line 942 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3733,9 +3754,9 @@ YY_RULE_SETUP } } YY_BREAK -case 87: +case 88: YY_RULE_SETUP -#line 942 "dhcp6_lexer.ll" +#line 953 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3747,9 +3768,9 @@ YY_RULE_SETUP } } YY_BREAK -case 88: +case 89: YY_RULE_SETUP -#line 953 "dhcp6_lexer.ll" +#line 964 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3759,9 +3780,9 @@ YY_RULE_SETUP } } YY_BREAK -case 89: +case 90: YY_RULE_SETUP -#line 962 "dhcp6_lexer.ll" +#line 973 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3771,9 +3792,9 @@ YY_RULE_SETUP } } YY_BREAK -case 90: +case 91: YY_RULE_SETUP -#line 971 "dhcp6_lexer.ll" +#line 982 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3783,20 +3804,6 @@ YY_RULE_SETUP } } YY_BREAK -case 91: -YY_RULE_SETUP -#line 980 "dhcp6_lexer.ll" -{ - switch(driver.ctx_) { - case isc::dhcp::Parser6Context::DHCP6: - case isc::dhcp::Parser6Context::SUBNET6: - case isc::dhcp::Parser6Context::SHARED_NETWORK: - return isc::dhcp::Dhcp6Parser::make_ALLOCATOR(driver.loc_); - default: - return isc::dhcp::Dhcp6Parser::make_STRING("allocator", driver.loc_); - } -} - YY_BREAK case 92: YY_RULE_SETUP #line 991 "dhcp6_lexer.ll" @@ -3805,15 +3812,29 @@ YY_RULE_SETUP case isc::dhcp::Parser6Context::DHCP6: case isc::dhcp::Parser6Context::SUBNET6: case isc::dhcp::Parser6Context::SHARED_NETWORK: - return isc::dhcp::Dhcp6Parser::make_PD_ALLOCATOR(driver.loc_); + return isc::dhcp::Dhcp6Parser::make_ALLOCATOR(driver.loc_); default: - return isc::dhcp::Dhcp6Parser::make_STRING("pd-allocator", driver.loc_); + return isc::dhcp::Dhcp6Parser::make_STRING("allocator", driver.loc_); } } YY_BREAK case 93: YY_RULE_SETUP #line 1002 "dhcp6_lexer.ll" +{ + switch(driver.ctx_) { + case isc::dhcp::Parser6Context::DHCP6: + case isc::dhcp::Parser6Context::SUBNET6: + case isc::dhcp::Parser6Context::SHARED_NETWORK: + return isc::dhcp::Dhcp6Parser::make_PD_ALLOCATOR(driver.loc_); + default: + return isc::dhcp::Dhcp6Parser::make_STRING("pd-allocator", driver.loc_); + } +} + YY_BREAK +case 94: +YY_RULE_SETUP +#line 1013 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3823,9 +3844,9 @@ YY_RULE_SETUP } } YY_BREAK -case 94: +case 95: YY_RULE_SETUP -#line 1011 "dhcp6_lexer.ll" +#line 1022 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3835,20 +3856,6 @@ YY_RULE_SETUP } } YY_BREAK -case 95: -YY_RULE_SETUP -#line 1020 "dhcp6_lexer.ll" -{ - switch(driver.ctx_) { - case isc::dhcp::Parser6Context::DHCP6: - case isc::dhcp::Parser6Context::SUBNET6: - case isc::dhcp::Parser6Context::SHARED_NETWORK: - return isc::dhcp::Dhcp6Parser::make_DDNS_SEND_UPDATES(driver.loc_); - default: - return isc::dhcp::Dhcp6Parser::make_STRING("ddns-send-updates", driver.loc_); - } -} - YY_BREAK case 96: YY_RULE_SETUP #line 1031 "dhcp6_lexer.ll" @@ -3857,9 +3864,9 @@ YY_RULE_SETUP case isc::dhcp::Parser6Context::DHCP6: case isc::dhcp::Parser6Context::SUBNET6: case isc::dhcp::Parser6Context::SHARED_NETWORK: - return isc::dhcp::Dhcp6Parser::make_DDNS_OVERRIDE_NO_UPDATE(driver.loc_); + return isc::dhcp::Dhcp6Parser::make_DDNS_SEND_UPDATES(driver.loc_); default: - return isc::dhcp::Dhcp6Parser::make_STRING("ddns-override-no-update", driver.loc_); + return isc::dhcp::Dhcp6Parser::make_STRING("ddns-send-updates", driver.loc_); } } YY_BREAK @@ -3871,9 +3878,9 @@ YY_RULE_SETUP case isc::dhcp::Parser6Context::DHCP6: case isc::dhcp::Parser6Context::SUBNET6: case isc::dhcp::Parser6Context::SHARED_NETWORK: - return isc::dhcp::Dhcp6Parser::make_DDNS_OVERRIDE_CLIENT_UPDATE(driver.loc_); + return isc::dhcp::Dhcp6Parser::make_DDNS_OVERRIDE_NO_UPDATE(driver.loc_); default: - return isc::dhcp::Dhcp6Parser::make_STRING("ddns-override-client-update", driver.loc_); + return isc::dhcp::Dhcp6Parser::make_STRING("ddns-override-no-update", driver.loc_); } } YY_BREAK @@ -3885,9 +3892,9 @@ YY_RULE_SETUP case isc::dhcp::Parser6Context::DHCP6: case isc::dhcp::Parser6Context::SUBNET6: case isc::dhcp::Parser6Context::SHARED_NETWORK: - return isc::dhcp::Dhcp6Parser::make_DDNS_REPLACE_CLIENT_NAME(driver.loc_); + return isc::dhcp::Dhcp6Parser::make_DDNS_OVERRIDE_CLIENT_UPDATE(driver.loc_); default: - return isc::dhcp::Dhcp6Parser::make_STRING("ddns-replace-client-name", driver.loc_); + return isc::dhcp::Dhcp6Parser::make_STRING("ddns-override-client-update", driver.loc_); } } YY_BREAK @@ -3899,9 +3906,9 @@ YY_RULE_SETUP case isc::dhcp::Parser6Context::DHCP6: case isc::dhcp::Parser6Context::SUBNET6: case isc::dhcp::Parser6Context::SHARED_NETWORK: - return isc::dhcp::Dhcp6Parser::make_DDNS_GENERATED_PREFIX(driver.loc_); + return isc::dhcp::Dhcp6Parser::make_DDNS_REPLACE_CLIENT_NAME(driver.loc_); default: - return isc::dhcp::Dhcp6Parser::make_STRING("ddns-generated-prefix", driver.loc_); + return isc::dhcp::Dhcp6Parser::make_STRING("ddns-replace-client-name", driver.loc_); } } YY_BREAK @@ -3913,9 +3920,9 @@ YY_RULE_SETUP case isc::dhcp::Parser6Context::DHCP6: case isc::dhcp::Parser6Context::SUBNET6: case isc::dhcp::Parser6Context::SHARED_NETWORK: - return isc::dhcp::Dhcp6Parser::make_DDNS_QUALIFYING_SUFFIX(driver.loc_); + return isc::dhcp::Dhcp6Parser::make_DDNS_GENERATED_PREFIX(driver.loc_); default: - return isc::dhcp::Dhcp6Parser::make_STRING("ddns-qualifying-suffix", driver.loc_); + return isc::dhcp::Dhcp6Parser::make_STRING("ddns-generated-prefix", driver.loc_); } } YY_BREAK @@ -3927,9 +3934,9 @@ YY_RULE_SETUP case isc::dhcp::Parser6Context::DHCP6: case isc::dhcp::Parser6Context::SUBNET6: case isc::dhcp::Parser6Context::SHARED_NETWORK: - return isc::dhcp::Dhcp6Parser::make_DDNS_UPDATE_ON_RENEW(driver.loc_); + return isc::dhcp::Dhcp6Parser::make_DDNS_QUALIFYING_SUFFIX(driver.loc_); default: - return isc::dhcp::Dhcp6Parser::make_STRING("ddns-update-on-renew", driver.loc_); + return isc::dhcp::Dhcp6Parser::make_STRING("ddns-qualifying-suffix", driver.loc_); } } YY_BREAK @@ -3941,9 +3948,9 @@ YY_RULE_SETUP case isc::dhcp::Parser6Context::DHCP6: case isc::dhcp::Parser6Context::SUBNET6: case isc::dhcp::Parser6Context::SHARED_NETWORK: - return isc::dhcp::Dhcp6Parser::make_DDNS_USE_CONFLICT_RESOLUTION(driver.loc_); + return isc::dhcp::Dhcp6Parser::make_DDNS_UPDATE_ON_RENEW(driver.loc_); default: - return isc::dhcp::Dhcp6Parser::make_STRING("ddns-use-conflict-resolution", driver.loc_); + return isc::dhcp::Dhcp6Parser::make_STRING("ddns-update-on-renew", driver.loc_); } } YY_BREAK @@ -3955,15 +3962,29 @@ YY_RULE_SETUP case isc::dhcp::Parser6Context::DHCP6: case isc::dhcp::Parser6Context::SUBNET6: case isc::dhcp::Parser6Context::SHARED_NETWORK: - return isc::dhcp::Dhcp6Parser::make_DDNS_CONFLICT_RESOLUTION_MODE(driver.loc_); + return isc::dhcp::Dhcp6Parser::make_DDNS_USE_CONFLICT_RESOLUTION(driver.loc_); default: - return isc::dhcp::Dhcp6Parser::make_STRING("ddns-conflict-resolution-mode", driver.loc_); + return isc::dhcp::Dhcp6Parser::make_STRING("ddns-use-conflict-resolution", driver.loc_); } } YY_BREAK case 104: YY_RULE_SETUP #line 1119 "dhcp6_lexer.ll" +{ + switch(driver.ctx_) { + case isc::dhcp::Parser6Context::DHCP6: + case isc::dhcp::Parser6Context::SUBNET6: + case isc::dhcp::Parser6Context::SHARED_NETWORK: + return isc::dhcp::Dhcp6Parser::make_DDNS_CONFLICT_RESOLUTION_MODE(driver.loc_); + default: + return isc::dhcp::Dhcp6Parser::make_STRING("ddns-conflict-resolution-mode", driver.loc_); + } +} + YY_BREAK +case 105: +YY_RULE_SETUP +#line 1130 "dhcp6_lexer.ll" { if (driver.ctx_ == isc::dhcp::Parser6Context::DDNS_CONFLICT_RESOLUTION_MODE) { return isc::dhcp::Dhcp6Parser::make_CHECK_WITH_DHCID(driver.loc_); @@ -3973,9 +3994,9 @@ YY_RULE_SETUP return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_); } YY_BREAK -case 105: +case 106: YY_RULE_SETUP -#line 1128 "dhcp6_lexer.ll" +#line 1139 "dhcp6_lexer.ll" { if (driver.ctx_ == isc::dhcp::Parser6Context::DDNS_CONFLICT_RESOLUTION_MODE) { return isc::dhcp::Dhcp6Parser::make_NO_CHECK_WITH_DHCID(driver.loc_); @@ -3985,9 +4006,9 @@ YY_RULE_SETUP return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_); } YY_BREAK -case 106: +case 107: YY_RULE_SETUP -#line 1137 "dhcp6_lexer.ll" +#line 1148 "dhcp6_lexer.ll" { if (driver.ctx_ == isc::dhcp::Parser6Context::DDNS_CONFLICT_RESOLUTION_MODE) { return isc::dhcp::Dhcp6Parser::make_CHECK_EXISTS_WITH_DHCID(driver.loc_); @@ -3997,9 +4018,9 @@ YY_RULE_SETUP return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_); } YY_BREAK -case 107: +case 108: YY_RULE_SETUP -#line 1146 "dhcp6_lexer.ll" +#line 1157 "dhcp6_lexer.ll" { if (driver.ctx_ == isc::dhcp::Parser6Context::DDNS_CONFLICT_RESOLUTION_MODE) { return isc::dhcp::Dhcp6Parser::make_NO_CHECK_WITHOUT_DHCID(driver.loc_); @@ -4009,9 +4030,9 @@ YY_RULE_SETUP return isc::dhcp::Dhcp6Parser::make_STRING(tmp, driver.loc_); } YY_BREAK -case 108: +case 109: YY_RULE_SETUP -#line 1158 "dhcp6_lexer.ll" +#line 1169 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4023,9 +4044,9 @@ YY_RULE_SETUP } } YY_BREAK -case 109: +case 110: YY_RULE_SETUP -#line 1169 "dhcp6_lexer.ll" +#line 1180 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4036,9 +4057,9 @@ YY_RULE_SETUP } } YY_BREAK -case 110: +case 111: YY_RULE_SETUP -#line 1179 "dhcp6_lexer.ll" +#line 1190 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4050,9 +4071,9 @@ YY_RULE_SETUP } } YY_BREAK -case 111: +case 112: YY_RULE_SETUP -#line 1190 "dhcp6_lexer.ll" +#line 1201 "dhcp6_lexer.ll" { switch (driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4062,9 +4083,9 @@ YY_RULE_SETUP } } YY_BREAK -case 112: +case 113: YY_RULE_SETUP -#line 1199 "dhcp6_lexer.ll" +#line 1210 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4074,9 +4095,9 @@ YY_RULE_SETUP } } YY_BREAK -case 113: +case 114: YY_RULE_SETUP -#line 1208 "dhcp6_lexer.ll" +#line 1219 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4092,9 +4113,9 @@ YY_RULE_SETUP } } YY_BREAK -case 114: +case 115: YY_RULE_SETUP -#line 1223 "dhcp6_lexer.ll" +#line 1234 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -4111,9 +4132,9 @@ YY_RULE_SETUP } } YY_BREAK -case 115: +case 116: YY_RULE_SETUP -#line 1239 "dhcp6_lexer.ll" +#line 1250 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DATA: @@ -4123,9 +4144,9 @@ YY_RULE_SETUP } } YY_BREAK -case 116: +case 117: YY_RULE_SETUP -#line 1248 "dhcp6_lexer.ll" +#line 1259 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DATA: @@ -4135,9 +4156,9 @@ YY_RULE_SETUP } } YY_BREAK -case 117: +case 118: YY_RULE_SETUP -#line 1257 "dhcp6_lexer.ll" +#line 1268 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DATA: @@ -4147,9 +4168,9 @@ YY_RULE_SETUP } } YY_BREAK -case 118: +case 119: YY_RULE_SETUP -#line 1266 "dhcp6_lexer.ll" +#line 1277 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -4159,9 +4180,9 @@ YY_RULE_SETUP } } YY_BREAK -case 119: +case 120: YY_RULE_SETUP -#line 1275 "dhcp6_lexer.ll" +#line 1286 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -4171,9 +4192,9 @@ YY_RULE_SETUP } } YY_BREAK -case 120: +case 121: YY_RULE_SETUP -#line 1284 "dhcp6_lexer.ll" +#line 1295 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::PD_POOLS: @@ -4183,9 +4204,9 @@ YY_RULE_SETUP } } YY_BREAK -case 121: +case 122: YY_RULE_SETUP -#line 1293 "dhcp6_lexer.ll" +#line 1304 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::PD_POOLS: @@ -4195,9 +4216,9 @@ YY_RULE_SETUP } } YY_BREAK -case 122: +case 123: YY_RULE_SETUP -#line 1302 "dhcp6_lexer.ll" +#line 1313 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::PD_POOLS: @@ -4207,9 +4228,9 @@ YY_RULE_SETUP } } YY_BREAK -case 123: +case 124: YY_RULE_SETUP -#line 1311 "dhcp6_lexer.ll" +#line 1322 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::PD_POOLS: @@ -4219,9 +4240,9 @@ YY_RULE_SETUP } } YY_BREAK -case 124: +case 125: YY_RULE_SETUP -#line 1320 "dhcp6_lexer.ll" +#line 1331 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::PD_POOLS: @@ -4231,9 +4252,9 @@ YY_RULE_SETUP } } YY_BREAK -case 125: +case 126: YY_RULE_SETUP -#line 1329 "dhcp6_lexer.ll" +#line 1340 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::POOLS: @@ -4243,9 +4264,9 @@ YY_RULE_SETUP } } YY_BREAK -case 126: +case 127: YY_RULE_SETUP -#line 1338 "dhcp6_lexer.ll" +#line 1349 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::POOLS: @@ -4255,9 +4276,9 @@ YY_RULE_SETUP } } YY_BREAK -case 127: +case 128: YY_RULE_SETUP -#line 1347 "dhcp6_lexer.ll" +#line 1358 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4282,9 +4303,9 @@ YY_RULE_SETUP } } YY_BREAK -case 128: +case 129: YY_RULE_SETUP -#line 1371 "dhcp6_lexer.ll" +#line 1382 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4309,9 +4330,9 @@ YY_RULE_SETUP } } YY_BREAK -case 129: +case 130: YY_RULE_SETUP -#line 1395 "dhcp6_lexer.ll" +#line 1406 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -4321,9 +4342,9 @@ YY_RULE_SETUP } } YY_BREAK -case 130: +case 131: YY_RULE_SETUP -#line 1404 "dhcp6_lexer.ll" +#line 1415 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -4334,9 +4355,9 @@ YY_RULE_SETUP } } YY_BREAK -case 131: +case 132: YY_RULE_SETUP -#line 1414 "dhcp6_lexer.ll" +#line 1425 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -4347,9 +4368,9 @@ YY_RULE_SETUP } } YY_BREAK -case 132: +case 133: YY_RULE_SETUP -#line 1424 "dhcp6_lexer.ll" +#line 1435 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -4359,9 +4380,9 @@ YY_RULE_SETUP } } YY_BREAK -case 133: +case 134: YY_RULE_SETUP -#line 1433 "dhcp6_lexer.ll" +#line 1444 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -4372,9 +4393,9 @@ YY_RULE_SETUP } } YY_BREAK -case 134: +case 135: YY_RULE_SETUP -#line 1443 "dhcp6_lexer.ll" +#line 1454 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4386,9 +4407,9 @@ YY_RULE_SETUP } } YY_BREAK -case 135: +case 136: YY_RULE_SETUP -#line 1454 "dhcp6_lexer.ll" +#line 1465 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RESERVATION_MODE: @@ -4398,9 +4419,9 @@ YY_RULE_SETUP } } YY_BREAK -case 136: +case 137: YY_RULE_SETUP -#line 1463 "dhcp6_lexer.ll" +#line 1474 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RESERVATION_MODE: @@ -4410,9 +4431,9 @@ YY_RULE_SETUP } } YY_BREAK -case 137: +case 138: YY_RULE_SETUP -#line 1472 "dhcp6_lexer.ll" +#line 1483 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RESERVATION_MODE: @@ -4422,9 +4443,9 @@ YY_RULE_SETUP } } YY_BREAK -case 138: +case 139: YY_RULE_SETUP -#line 1481 "dhcp6_lexer.ll" +#line 1492 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RESERVATION_MODE: @@ -4434,9 +4455,9 @@ YY_RULE_SETUP } } YY_BREAK -case 139: +case 140: YY_RULE_SETUP -#line 1490 "dhcp6_lexer.ll" +#line 1501 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RESERVATION_MODE: @@ -4446,20 +4467,6 @@ YY_RULE_SETUP } } YY_BREAK -case 140: -YY_RULE_SETUP -#line 1499 "dhcp6_lexer.ll" -{ - switch(driver.ctx_) { - case isc::dhcp::Parser6Context::DHCP6: - case isc::dhcp::Parser6Context::SUBNET6: - case isc::dhcp::Parser6Context::SHARED_NETWORK: - return isc::dhcp::Dhcp6Parser::make_RESERVATIONS_GLOBAL(driver.loc_); - default: - return isc::dhcp::Dhcp6Parser::make_STRING("reservations-global", driver.loc_); - } -} - YY_BREAK case 141: YY_RULE_SETUP #line 1510 "dhcp6_lexer.ll" @@ -4468,9 +4475,9 @@ YY_RULE_SETUP case isc::dhcp::Parser6Context::DHCP6: case isc::dhcp::Parser6Context::SUBNET6: case isc::dhcp::Parser6Context::SHARED_NETWORK: - return isc::dhcp::Dhcp6Parser::make_RESERVATIONS_IN_SUBNET(driver.loc_); + return isc::dhcp::Dhcp6Parser::make_RESERVATIONS_GLOBAL(driver.loc_); default: - return isc::dhcp::Dhcp6Parser::make_STRING("reservations-in-subnet", driver.loc_); + return isc::dhcp::Dhcp6Parser::make_STRING("reservations-global", driver.loc_); } } YY_BREAK @@ -4482,15 +4489,29 @@ YY_RULE_SETUP case isc::dhcp::Parser6Context::DHCP6: case isc::dhcp::Parser6Context::SUBNET6: case isc::dhcp::Parser6Context::SHARED_NETWORK: - return isc::dhcp::Dhcp6Parser::make_RESERVATIONS_OUT_OF_POOL(driver.loc_); + return isc::dhcp::Dhcp6Parser::make_RESERVATIONS_IN_SUBNET(driver.loc_); default: - return isc::dhcp::Dhcp6Parser::make_STRING("reservations-out-of-pool", driver.loc_); + return isc::dhcp::Dhcp6Parser::make_STRING("reservations-in-subnet", driver.loc_); } } YY_BREAK case 143: YY_RULE_SETUP #line 1532 "dhcp6_lexer.ll" +{ + switch(driver.ctx_) { + case isc::dhcp::Parser6Context::DHCP6: + case isc::dhcp::Parser6Context::SUBNET6: + case isc::dhcp::Parser6Context::SHARED_NETWORK: + return isc::dhcp::Dhcp6Parser::make_RESERVATIONS_OUT_OF_POOL(driver.loc_); + default: + return isc::dhcp::Dhcp6Parser::make_STRING("reservations-out-of-pool", driver.loc_); + } +} + YY_BREAK +case 144: +YY_RULE_SETUP +#line 1543 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DEF: @@ -4501,9 +4522,9 @@ YY_RULE_SETUP } } YY_BREAK -case 144: +case 145: YY_RULE_SETUP -#line 1542 "dhcp6_lexer.ll" +#line 1553 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4513,9 +4534,9 @@ YY_RULE_SETUP } } YY_BREAK -case 145: +case 146: YY_RULE_SETUP -#line 1551 "dhcp6_lexer.ll" +#line 1562 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4525,9 +4546,9 @@ YY_RULE_SETUP } } YY_BREAK -case 146: +case 147: YY_RULE_SETUP -#line 1560 "dhcp6_lexer.ll" +#line 1571 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4537,20 +4558,6 @@ YY_RULE_SETUP } } YY_BREAK -case 147: -YY_RULE_SETUP -#line 1569 "dhcp6_lexer.ll" -{ - switch(driver.ctx_) { - case isc::dhcp::Parser6Context::DHCP6: - case isc::dhcp::Parser6Context::SUBNET6: - case isc::dhcp::Parser6Context::SHARED_NETWORK: - return isc::dhcp::Dhcp6Parser::make_CALCULATE_TEE_TIMES(driver.loc_); - default: - return isc::dhcp::Dhcp6Parser::make_STRING("calculate-tee-times", driver.loc_); - } -} - YY_BREAK case 148: YY_RULE_SETUP #line 1580 "dhcp6_lexer.ll" @@ -4559,9 +4566,9 @@ YY_RULE_SETUP case isc::dhcp::Parser6Context::DHCP6: case isc::dhcp::Parser6Context::SUBNET6: case isc::dhcp::Parser6Context::SHARED_NETWORK: - return isc::dhcp::Dhcp6Parser::make_T1_PERCENT(driver.loc_); + return isc::dhcp::Dhcp6Parser::make_CALCULATE_TEE_TIMES(driver.loc_); default: - return isc::dhcp::Dhcp6Parser::make_STRING("t1-percent", driver.loc_); + return isc::dhcp::Dhcp6Parser::make_STRING("calculate-tee-times", driver.loc_); } } YY_BREAK @@ -4573,9 +4580,9 @@ YY_RULE_SETUP case isc::dhcp::Parser6Context::DHCP6: case isc::dhcp::Parser6Context::SUBNET6: case isc::dhcp::Parser6Context::SHARED_NETWORK: - return isc::dhcp::Dhcp6Parser::make_T2_PERCENT(driver.loc_); + return isc::dhcp::Dhcp6Parser::make_T1_PERCENT(driver.loc_); default: - return isc::dhcp::Dhcp6Parser::make_STRING("t2-percent", driver.loc_); + return isc::dhcp::Dhcp6Parser::make_STRING("t1-percent", driver.loc_); } } YY_BREAK @@ -4587,9 +4594,9 @@ YY_RULE_SETUP case isc::dhcp::Parser6Context::DHCP6: case isc::dhcp::Parser6Context::SUBNET6: case isc::dhcp::Parser6Context::SHARED_NETWORK: - return isc::dhcp::Dhcp6Parser::make_CACHE_THRESHOLD(driver.loc_); + return isc::dhcp::Dhcp6Parser::make_T2_PERCENT(driver.loc_); default: - return isc::dhcp::Dhcp6Parser::make_STRING("cache-threshold", driver.loc_); + return isc::dhcp::Dhcp6Parser::make_STRING("t2-percent", driver.loc_); } } YY_BREAK @@ -4601,15 +4608,29 @@ YY_RULE_SETUP case isc::dhcp::Parser6Context::DHCP6: case isc::dhcp::Parser6Context::SUBNET6: case isc::dhcp::Parser6Context::SHARED_NETWORK: - return isc::dhcp::Dhcp6Parser::make_CACHE_MAX_AGE(driver.loc_); + return isc::dhcp::Dhcp6Parser::make_CACHE_THRESHOLD(driver.loc_); default: - return isc::dhcp::Dhcp6Parser::make_STRING("cache-max-age", driver.loc_); + return isc::dhcp::Dhcp6Parser::make_STRING("cache-threshold", driver.loc_); } } YY_BREAK case 152: YY_RULE_SETUP #line 1624 "dhcp6_lexer.ll" +{ + switch(driver.ctx_) { + case isc::dhcp::Parser6Context::DHCP6: + case isc::dhcp::Parser6Context::SUBNET6: + case isc::dhcp::Parser6Context::SHARED_NETWORK: + return isc::dhcp::Dhcp6Parser::make_CACHE_MAX_AGE(driver.loc_); + default: + return isc::dhcp::Dhcp6Parser::make_STRING("cache-max-age", driver.loc_); + } +} + YY_BREAK +case 153: +YY_RULE_SETUP +#line 1635 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4619,9 +4640,9 @@ YY_RULE_SETUP } } YY_BREAK -case 153: +case 154: YY_RULE_SETUP -#line 1633 "dhcp6_lexer.ll" +#line 1644 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LOGGERS: @@ -4631,9 +4652,9 @@ YY_RULE_SETUP } } YY_BREAK -case 154: +case 155: YY_RULE_SETUP -#line 1642 "dhcp6_lexer.ll" +#line 1653 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LOGGERS: @@ -4643,9 +4664,9 @@ YY_RULE_SETUP } } YY_BREAK -case 155: +case 156: YY_RULE_SETUP -#line 1651 "dhcp6_lexer.ll" +#line 1662 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OUTPUT_OPTIONS: @@ -4655,9 +4676,9 @@ YY_RULE_SETUP } } YY_BREAK -case 156: +case 157: YY_RULE_SETUP -#line 1660 "dhcp6_lexer.ll" +#line 1671 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OUTPUT_OPTIONS: @@ -4667,9 +4688,9 @@ YY_RULE_SETUP } } YY_BREAK -case 157: +case 158: YY_RULE_SETUP -#line 1669 "dhcp6_lexer.ll" +#line 1680 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OUTPUT_OPTIONS: @@ -4679,9 +4700,9 @@ YY_RULE_SETUP } } YY_BREAK -case 158: +case 159: YY_RULE_SETUP -#line 1678 "dhcp6_lexer.ll" +#line 1689 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OUTPUT_OPTIONS: @@ -4691,9 +4712,9 @@ YY_RULE_SETUP } } YY_BREAK -case 159: +case 160: YY_RULE_SETUP -#line 1687 "dhcp6_lexer.ll" +#line 1698 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OUTPUT_OPTIONS: @@ -4703,9 +4724,9 @@ YY_RULE_SETUP } } YY_BREAK -case 160: +case 161: YY_RULE_SETUP -#line 1696 "dhcp6_lexer.ll" +#line 1707 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LOGGERS: @@ -4715,9 +4736,9 @@ YY_RULE_SETUP } } YY_BREAK -case 161: +case 162: YY_RULE_SETUP -#line 1705 "dhcp6_lexer.ll" +#line 1716 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LOGGERS: @@ -4727,9 +4748,9 @@ YY_RULE_SETUP } } YY_BREAK -case 162: +case 163: YY_RULE_SETUP -#line 1714 "dhcp6_lexer.ll" +#line 1725 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4740,9 +4761,9 @@ YY_RULE_SETUP } } YY_BREAK -case 163: +case 164: YY_RULE_SETUP -#line 1724 "dhcp6_lexer.ll" +#line 1735 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -4755,9 +4776,9 @@ YY_RULE_SETUP } } YY_BREAK -case 164: +case 165: YY_RULE_SETUP -#line 1736 "dhcp6_lexer.ll" +#line 1747 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -4771,9 +4792,9 @@ YY_RULE_SETUP } } YY_BREAK -case 165: +case 166: YY_RULE_SETUP -#line 1749 "dhcp6_lexer.ll" +#line 1760 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::CLIENT_CLASSES: @@ -4783,9 +4804,9 @@ YY_RULE_SETUP } } YY_BREAK -case 166: +case 167: YY_RULE_SETUP -#line 1758 "dhcp6_lexer.ll" +#line 1769 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::CLIENT_CLASSES: @@ -4795,9 +4816,9 @@ YY_RULE_SETUP } } YY_BREAK -case 167: +case 168: YY_RULE_SETUP -#line 1767 "dhcp6_lexer.ll" +#line 1778 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::CLIENT_CLASSES: @@ -4807,9 +4828,9 @@ YY_RULE_SETUP } } YY_BREAK -case 168: +case 169: YY_RULE_SETUP -#line 1776 "dhcp6_lexer.ll" +#line 1787 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4820,9 +4841,9 @@ YY_RULE_SETUP } } YY_BREAK -case 169: +case 170: YY_RULE_SETUP -#line 1786 "dhcp6_lexer.ll" +#line 1797 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RESERVATIONS: @@ -4833,9 +4854,9 @@ YY_RULE_SETUP } } YY_BREAK -case 170: +case 171: YY_RULE_SETUP -#line 1796 "dhcp6_lexer.ll" +#line 1807 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RESERVATIONS: @@ -4845,9 +4866,9 @@ YY_RULE_SETUP } } YY_BREAK -case 171: +case 172: YY_RULE_SETUP -#line 1805 "dhcp6_lexer.ll" +#line 1816 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::MAC_SOURCES: @@ -4859,9 +4880,9 @@ YY_RULE_SETUP } } YY_BREAK -case 172: +case 173: YY_RULE_SETUP -#line 1816 "dhcp6_lexer.ll" +#line 1827 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::HOST_RESERVATION_IDENTIFIERS: @@ -4872,9 +4893,9 @@ YY_RULE_SETUP } } YY_BREAK -case 173: +case 174: YY_RULE_SETUP -#line 1826 "dhcp6_lexer.ll" +#line 1837 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RESERVATIONS: @@ -4884,9 +4905,9 @@ YY_RULE_SETUP } } YY_BREAK -case 174: +case 175: YY_RULE_SETUP -#line 1835 "dhcp6_lexer.ll" +#line 1846 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::HOST_RESERVATION_IDENTIFIERS: @@ -4897,9 +4918,9 @@ YY_RULE_SETUP } } YY_BREAK -case 175: +case 176: YY_RULE_SETUP -#line 1845 "dhcp6_lexer.ll" +#line 1856 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DEF: @@ -4910,9 +4931,9 @@ YY_RULE_SETUP } } YY_BREAK -case 176: +case 177: YY_RULE_SETUP -#line 1855 "dhcp6_lexer.ll" +#line 1866 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DATA: @@ -4922,9 +4943,9 @@ YY_RULE_SETUP } } YY_BREAK -case 177: +case 178: YY_RULE_SETUP -#line 1864 "dhcp6_lexer.ll" +#line 1875 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DEF: @@ -4934,9 +4955,9 @@ YY_RULE_SETUP } } YY_BREAK -case 178: +case 179: YY_RULE_SETUP -#line 1873 "dhcp6_lexer.ll" +#line 1884 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DEF: @@ -4946,9 +4967,9 @@ YY_RULE_SETUP } } YY_BREAK -case 179: +case 180: YY_RULE_SETUP -#line 1882 "dhcp6_lexer.ll" +#line 1893 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DEF: @@ -4958,9 +4979,9 @@ YY_RULE_SETUP } } YY_BREAK -case 180: +case 181: YY_RULE_SETUP -#line 1891 "dhcp6_lexer.ll" +#line 1902 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -4971,9 +4992,9 @@ YY_RULE_SETUP } } YY_BREAK -case 181: +case 182: YY_RULE_SETUP -#line 1901 "dhcp6_lexer.ll" +#line 1912 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RELAY: @@ -4983,9 +5004,9 @@ YY_RULE_SETUP } } YY_BREAK -case 182: +case 183: YY_RULE_SETUP -#line 1910 "dhcp6_lexer.ll" +#line 1921 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4995,9 +5016,9 @@ YY_RULE_SETUP } } YY_BREAK -case 183: +case 184: YY_RULE_SETUP -#line 1919 "dhcp6_lexer.ll" +#line 1930 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::HOOKS_LIBRARIES: @@ -5007,9 +5028,9 @@ YY_RULE_SETUP } } YY_BREAK -case 184: +case 185: YY_RULE_SETUP -#line 1928 "dhcp6_lexer.ll" +#line 1939 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::HOOKS_LIBRARIES: @@ -5019,9 +5040,9 @@ YY_RULE_SETUP } } YY_BREAK -case 185: +case 186: YY_RULE_SETUP -#line 1937 "dhcp6_lexer.ll" +#line 1948 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -5031,9 +5052,9 @@ YY_RULE_SETUP } } YY_BREAK -case 186: +case 187: YY_RULE_SETUP -#line 1946 "dhcp6_lexer.ll" +#line 1957 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DUID_TYPE: @@ -5043,9 +5064,9 @@ YY_RULE_SETUP } } YY_BREAK -case 187: +case 188: YY_RULE_SETUP -#line 1955 "dhcp6_lexer.ll" +#line 1966 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DUID_TYPE: @@ -5055,9 +5076,9 @@ YY_RULE_SETUP } } YY_BREAK -case 188: +case 189: YY_RULE_SETUP -#line 1964 "dhcp6_lexer.ll" +#line 1975 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DUID_TYPE: @@ -5067,9 +5088,9 @@ YY_RULE_SETUP } } YY_BREAK -case 189: +case 190: YY_RULE_SETUP -#line 1973 "dhcp6_lexer.ll" +#line 1984 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SERVER_ID: @@ -5079,9 +5100,9 @@ YY_RULE_SETUP } } YY_BREAK -case 190: +case 191: YY_RULE_SETUP -#line 1982 "dhcp6_lexer.ll" +#line 1993 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SERVER_ID: @@ -5091,9 +5112,9 @@ YY_RULE_SETUP } } YY_BREAK -case 191: +case 192: YY_RULE_SETUP -#line 1991 "dhcp6_lexer.ll" +#line 2002 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SERVER_ID: @@ -5103,9 +5124,9 @@ YY_RULE_SETUP } } YY_BREAK -case 192: +case 193: YY_RULE_SETUP -#line 2000 "dhcp6_lexer.ll" +#line 2011 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SERVER_ID: @@ -5115,9 +5136,9 @@ YY_RULE_SETUP } } YY_BREAK -case 193: +case 194: YY_RULE_SETUP -#line 2009 "dhcp6_lexer.ll" +#line 2020 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -5127,9 +5148,9 @@ YY_RULE_SETUP } } YY_BREAK -case 194: +case 195: YY_RULE_SETUP -#line 2018 "dhcp6_lexer.ll" +#line 2029 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING: @@ -5139,9 +5160,9 @@ YY_RULE_SETUP } } YY_BREAK -case 195: +case 196: YY_RULE_SETUP -#line 2027 "dhcp6_lexer.ll" +#line 2038 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING: @@ -5151,9 +5172,9 @@ YY_RULE_SETUP } } YY_BREAK -case 196: +case 197: YY_RULE_SETUP -#line 2036 "dhcp6_lexer.ll" +#line 2047 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING: @@ -5163,9 +5184,9 @@ YY_RULE_SETUP } } YY_BREAK -case 197: +case 198: YY_RULE_SETUP -#line 2045 "dhcp6_lexer.ll" +#line 2056 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING: @@ -5175,9 +5196,9 @@ YY_RULE_SETUP } } YY_BREAK -case 198: +case 199: YY_RULE_SETUP -#line 2054 "dhcp6_lexer.ll" +#line 2065 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING: @@ -5187,9 +5208,9 @@ YY_RULE_SETUP } } YY_BREAK -case 199: +case 200: YY_RULE_SETUP -#line 2063 "dhcp6_lexer.ll" +#line 2074 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING: @@ -5199,9 +5220,9 @@ YY_RULE_SETUP } } YY_BREAK -case 200: +case 201: YY_RULE_SETUP -#line 2072 "dhcp6_lexer.ll" +#line 2083 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -5211,9 +5232,9 @@ YY_RULE_SETUP } } YY_BREAK -case 201: +case 202: YY_RULE_SETUP -#line 2081 "dhcp6_lexer.ll" +#line 2092 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -5223,9 +5244,9 @@ YY_RULE_SETUP } } YY_BREAK -case 202: +case 203: YY_RULE_SETUP -#line 2090 "dhcp6_lexer.ll" +#line 2101 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP_MULTI_THREADING: @@ -5235,9 +5256,9 @@ YY_RULE_SETUP } } YY_BREAK -case 203: +case 204: YY_RULE_SETUP -#line 2099 "dhcp6_lexer.ll" +#line 2110 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP_MULTI_THREADING: @@ -5247,9 +5268,9 @@ YY_RULE_SETUP } } YY_BREAK -case 204: +case 205: YY_RULE_SETUP -#line 2108 "dhcp6_lexer.ll" +#line 2119 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP_MULTI_THREADING: @@ -5259,9 +5280,9 @@ YY_RULE_SETUP } } YY_BREAK -case 205: +case 206: YY_RULE_SETUP -#line 2117 "dhcp6_lexer.ll" +#line 2128 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -5271,9 +5292,9 @@ YY_RULE_SETUP } } YY_BREAK -case 206: +case 207: YY_RULE_SETUP -#line 2126 "dhcp6_lexer.ll" +#line 2137 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::CONTROL_SOCKET: @@ -5283,9 +5304,9 @@ YY_RULE_SETUP } } YY_BREAK -case 207: +case 208: YY_RULE_SETUP -#line 2135 "dhcp6_lexer.ll" +#line 2146 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::CONTROL_SOCKET: @@ -5295,9 +5316,9 @@ YY_RULE_SETUP } } YY_BREAK -case 208: +case 209: YY_RULE_SETUP -#line 2144 "dhcp6_lexer.ll" +#line 2155 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -5307,9 +5328,9 @@ YY_RULE_SETUP } } YY_BREAK -case 209: +case 210: YY_RULE_SETUP -#line 2153 "dhcp6_lexer.ll" +#line 2164 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP_QUEUE_CONTROL: @@ -5319,9 +5340,9 @@ YY_RULE_SETUP } } YY_BREAK -case 210: +case 211: YY_RULE_SETUP -#line 2162 "dhcp6_lexer.ll" +#line 2173 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP_QUEUE_CONTROL: @@ -5331,9 +5352,9 @@ YY_RULE_SETUP } } YY_BREAK -case 211: +case 212: YY_RULE_SETUP -#line 2171 "dhcp6_lexer.ll" +#line 2182 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP_QUEUE_CONTROL: @@ -5343,9 +5364,9 @@ YY_RULE_SETUP } } YY_BREAK -case 212: +case 213: YY_RULE_SETUP -#line 2180 "dhcp6_lexer.ll" +#line 2191 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -5355,9 +5376,9 @@ YY_RULE_SETUP } } YY_BREAK -case 213: +case 214: YY_RULE_SETUP -#line 2189 "dhcp6_lexer.ll" +#line 2200 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -5367,9 +5388,9 @@ YY_RULE_SETUP } } YY_BREAK -case 214: +case 215: YY_RULE_SETUP -#line 2198 "dhcp6_lexer.ll" +#line 2209 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -5379,9 +5400,9 @@ YY_RULE_SETUP } } YY_BREAK -case 215: +case 216: YY_RULE_SETUP -#line 2207 "dhcp6_lexer.ll" +#line 2218 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -5391,9 +5412,9 @@ YY_RULE_SETUP } } YY_BREAK -case 216: +case 217: YY_RULE_SETUP -#line 2216 "dhcp6_lexer.ll" +#line 2227 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -5403,9 +5424,9 @@ YY_RULE_SETUP } } YY_BREAK -case 217: +case 218: YY_RULE_SETUP -#line 2225 "dhcp6_lexer.ll" +#line 2236 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::COMPATIBILITY: @@ -5415,9 +5436,9 @@ YY_RULE_SETUP } } YY_BREAK -case 218: +case 219: YY_RULE_SETUP -#line 2234 "dhcp6_lexer.ll" +#line 2245 "dhcp6_lexer.ll" { /* A string has been matched. It contains the actual string and single quotes. We need to get those quotes out of the way and just use its content, e.g. @@ -5519,10 +5540,10 @@ YY_RULE_SETUP return isc::dhcp::Dhcp6Parser::make_STRING(decoded, driver.loc_); } YY_BREAK -case 219: -/* rule 219 can match eol */ +case 220: +/* rule 220 can match eol */ YY_RULE_SETUP -#line 2335 "dhcp6_lexer.ll" +#line 2346 "dhcp6_lexer.ll" { /* Bad string with a forbidden control character inside */ std::string raw(yytext+1); @@ -5539,10 +5560,10 @@ YY_RULE_SETUP pos + 1); } YY_BREAK -case 220: -/* rule 220 can match eol */ +case 221: +/* rule 221 can match eol */ YY_RULE_SETUP -#line 2351 "dhcp6_lexer.ll" +#line 2362 "dhcp6_lexer.ll" { /* Bad string with a bad escape inside */ std::string raw(yytext+1); @@ -5592,9 +5613,9 @@ YY_RULE_SETUP pos); } YY_BREAK -case 221: +case 222: YY_RULE_SETUP -#line 2400 "dhcp6_lexer.ll" +#line 2411 "dhcp6_lexer.ll" { /* Bad string with an open escape at the end */ std::string raw(yytext+1); @@ -5603,9 +5624,9 @@ YY_RULE_SETUP raw.size() + 1); } YY_BREAK -case 222: +case 223: YY_RULE_SETUP -#line 2408 "dhcp6_lexer.ll" +#line 2419 "dhcp6_lexer.ll" { /* Bad string with an open unicode escape at the end */ std::string raw(yytext+1); @@ -5621,39 +5642,39 @@ YY_RULE_SETUP pos + 1); } YY_BREAK -case 223: -YY_RULE_SETUP -#line 2423 "dhcp6_lexer.ll" -{ return isc::dhcp::Dhcp6Parser::make_LSQUARE_BRACKET(driver.loc_); } - YY_BREAK case 224: YY_RULE_SETUP -#line 2424 "dhcp6_lexer.ll" -{ return isc::dhcp::Dhcp6Parser::make_RSQUARE_BRACKET(driver.loc_); } +#line 2434 "dhcp6_lexer.ll" +{ return isc::dhcp::Dhcp6Parser::make_LSQUARE_BRACKET(driver.loc_); } YY_BREAK case 225: YY_RULE_SETUP -#line 2425 "dhcp6_lexer.ll" -{ return isc::dhcp::Dhcp6Parser::make_LCURLY_BRACKET(driver.loc_); } +#line 2435 "dhcp6_lexer.ll" +{ return isc::dhcp::Dhcp6Parser::make_RSQUARE_BRACKET(driver.loc_); } YY_BREAK case 226: YY_RULE_SETUP -#line 2426 "dhcp6_lexer.ll" -{ return isc::dhcp::Dhcp6Parser::make_RCURLY_BRACKET(driver.loc_); } +#line 2436 "dhcp6_lexer.ll" +{ return isc::dhcp::Dhcp6Parser::make_LCURLY_BRACKET(driver.loc_); } YY_BREAK case 227: YY_RULE_SETUP -#line 2427 "dhcp6_lexer.ll" -{ return isc::dhcp::Dhcp6Parser::make_COMMA(driver.loc_); } +#line 2437 "dhcp6_lexer.ll" +{ return isc::dhcp::Dhcp6Parser::make_RCURLY_BRACKET(driver.loc_); } YY_BREAK case 228: YY_RULE_SETUP -#line 2428 "dhcp6_lexer.ll" -{ return isc::dhcp::Dhcp6Parser::make_COLON(driver.loc_); } +#line 2438 "dhcp6_lexer.ll" +{ return isc::dhcp::Dhcp6Parser::make_COMMA(driver.loc_); } YY_BREAK case 229: YY_RULE_SETUP -#line 2430 "dhcp6_lexer.ll" +#line 2439 "dhcp6_lexer.ll" +{ return isc::dhcp::Dhcp6Parser::make_COLON(driver.loc_); } + YY_BREAK +case 230: +YY_RULE_SETUP +#line 2441 "dhcp6_lexer.ll" { /* An integer was found. */ std::string tmp(yytext); @@ -5672,9 +5693,9 @@ YY_RULE_SETUP return isc::dhcp::Dhcp6Parser::make_INTEGER(integer, driver.loc_); } YY_BREAK -case 230: +case 231: YY_RULE_SETUP -#line 2448 "dhcp6_lexer.ll" +#line 2459 "dhcp6_lexer.ll" { /* A floating point was found. */ std::string tmp(yytext); @@ -5688,43 +5709,43 @@ YY_RULE_SETUP return isc::dhcp::Dhcp6Parser::make_FLOAT(fp, driver.loc_); } YY_BREAK -case 231: +case 232: YY_RULE_SETUP -#line 2461 "dhcp6_lexer.ll" +#line 2472 "dhcp6_lexer.ll" { string tmp(yytext); return isc::dhcp::Dhcp6Parser::make_BOOLEAN(tmp == "true", driver.loc_); } YY_BREAK -case 232: +case 233: YY_RULE_SETUP -#line 2466 "dhcp6_lexer.ll" +#line 2477 "dhcp6_lexer.ll" { return isc::dhcp::Dhcp6Parser::make_NULL_TYPE(driver.loc_); } YY_BREAK -case 233: -YY_RULE_SETUP -#line 2470 "dhcp6_lexer.ll" -driver.error (driver.loc_, "JSON true reserved keyword is lower case only"); - YY_BREAK case 234: YY_RULE_SETUP -#line 2472 "dhcp6_lexer.ll" -driver.error (driver.loc_, "JSON false reserved keyword is lower case only"); +#line 2481 "dhcp6_lexer.ll" +driver.error (driver.loc_, "JSON true reserved keyword is lower case only"); YY_BREAK case 235: YY_RULE_SETUP -#line 2474 "dhcp6_lexer.ll" -driver.error (driver.loc_, "JSON null reserved keyword is lower case only"); +#line 2483 "dhcp6_lexer.ll" +driver.error (driver.loc_, "JSON false reserved keyword is lower case only"); YY_BREAK case 236: YY_RULE_SETUP -#line 2476 "dhcp6_lexer.ll" +#line 2485 "dhcp6_lexer.ll" +driver.error (driver.loc_, "JSON null reserved keyword is lower case only"); + YY_BREAK +case 237: +YY_RULE_SETUP +#line 2487 "dhcp6_lexer.ll" driver.error (driver.loc_, "Invalid character: " + std::string(yytext)); YY_BREAK case YY_STATE_EOF(INITIAL): -#line 2478 "dhcp6_lexer.ll" +#line 2489 "dhcp6_lexer.ll" { if (driver.states_.empty()) { return isc::dhcp::Dhcp6Parser::make_END(driver.loc_); @@ -5748,12 +5769,12 @@ case YY_STATE_EOF(INITIAL): BEGIN(DIR_EXIT); } YY_BREAK -case 237: +case 238: YY_RULE_SETUP -#line 2501 "dhcp6_lexer.ll" +#line 2512 "dhcp6_lexer.ll" ECHO; YY_BREAK -#line 5756 "dhcp6_lexer.cc" +#line 5778 "dhcp6_lexer.cc" case YY_END_OF_BUFFER: { @@ -6072,7 +6093,7 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 2304 ) + if ( yy_current_state >= 2319 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -6105,11 +6126,11 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 2304 ) + if ( yy_current_state >= 2319 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 2303); + yy_is_jam = (yy_current_state == 2318); return yy_is_jam ? 0 : yy_current_state; } @@ -6858,7 +6879,7 @@ void yyfree (void * ptr ) /* %ok-for-header */ -#line 2501 "dhcp6_lexer.ll" +#line 2512 "dhcp6_lexer.ll" using namespace isc::dhcp; diff --git a/src/bin/dhcp6/dhcp6_lexer.ll b/src/bin/dhcp6/dhcp6_lexer.ll index 5165223e48..9ea7f00687 100644 --- a/src/bin/dhcp6/dhcp6_lexer.ll +++ b/src/bin/dhcp6/dhcp6_lexer.ll @@ -791,6 +791,17 @@ ControlCharacterFill [^"\\]|\\["\\/bfnrtu] } } +\"retry-on-startup\" { + switch(driver.ctx_) { + case isc::dhcp::Parser6Context::LEASE_DATABASE: + case isc::dhcp::Parser6Context::HOSTS_DATABASE: + case isc::dhcp::Parser6Context::CONFIG_DATABASE: + return isc::dhcp::Dhcp6Parser::make_RETRY_ON_STARTUP(driver.loc_); + default: + return isc::dhcp::Dhcp6Parser::make_STRING("retry-on-startup", driver.loc_); + } +} + \"max-reconnect-tries\" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: diff --git a/src/bin/dhcp6/dhcp6_parser.cc b/src/bin/dhcp6/dhcp6_parser.cc index 23814f7887..e18c3412b4 100644 --- a/src/bin/dhcp6/dhcp6_parser.cc +++ b/src/bin/dhcp6/dhcp6_parser.cc @@ -407,79 +407,79 @@ namespace isc { namespace dhcp { switch (yykind) { case symbol_kind::S_STRING: // "constant string" -#line 314 "dhcp6_parser.yy" +#line 315 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < std::string > (); } #line 413 "dhcp6_parser.cc" break; case symbol_kind::S_INTEGER: // "integer" -#line 314 "dhcp6_parser.yy" +#line 315 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < int64_t > (); } #line 419 "dhcp6_parser.cc" break; case symbol_kind::S_FLOAT: // "floating point" -#line 314 "dhcp6_parser.yy" +#line 315 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < double > (); } #line 425 "dhcp6_parser.cc" break; case symbol_kind::S_BOOLEAN: // "boolean" -#line 314 "dhcp6_parser.yy" +#line 315 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < bool > (); } #line 431 "dhcp6_parser.cc" break; case symbol_kind::S_value: // value -#line 314 "dhcp6_parser.yy" +#line 315 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 437 "dhcp6_parser.cc" break; case symbol_kind::S_map_value: // map_value -#line 314 "dhcp6_parser.yy" +#line 315 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 443 "dhcp6_parser.cc" break; case symbol_kind::S_ddns_replace_client_name_value: // ddns_replace_client_name_value -#line 314 "dhcp6_parser.yy" +#line 315 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 449 "dhcp6_parser.cc" break; case symbol_kind::S_ddns_conflict_resolution_mode_value: // ddns_conflict_resolution_mode_value -#line 314 "dhcp6_parser.yy" +#line 315 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 455 "dhcp6_parser.cc" break; case symbol_kind::S_db_type: // db_type -#line 314 "dhcp6_parser.yy" +#line 315 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 461 "dhcp6_parser.cc" break; case symbol_kind::S_on_fail_mode: // on_fail_mode -#line 314 "dhcp6_parser.yy" +#line 315 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 467 "dhcp6_parser.cc" break; case symbol_kind::S_hr_mode: // hr_mode -#line 314 "dhcp6_parser.yy" +#line 315 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 473 "dhcp6_parser.cc" break; case symbol_kind::S_duid_type: // duid_type -#line 314 "dhcp6_parser.yy" +#line 315 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 479 "dhcp6_parser.cc" break; case symbol_kind::S_ncr_protocol_value: // ncr_protocol_value -#line 314 "dhcp6_parser.yy" +#line 315 "dhcp6_parser.yy" { yyoutput << yysym.value.template as < ElementPtr > (); } #line 485 "dhcp6_parser.cc" break; @@ -760,133 +760,133 @@ namespace isc { namespace dhcp { switch (yyn) { case 2: // $@1: %empty -#line 323 "dhcp6_parser.yy" +#line 324 "dhcp6_parser.yy" { ctx.ctx_ = ctx.NO_KEYWORD; } #line 766 "dhcp6_parser.cc" break; case 4: // $@2: %empty -#line 324 "dhcp6_parser.yy" +#line 325 "dhcp6_parser.yy" { ctx.ctx_ = ctx.CONFIG; } #line 772 "dhcp6_parser.cc" break; case 6: // $@3: %empty -#line 325 "dhcp6_parser.yy" +#line 326 "dhcp6_parser.yy" { ctx.ctx_ = ctx.DHCP6; } #line 778 "dhcp6_parser.cc" break; case 8: // $@4: %empty -#line 326 "dhcp6_parser.yy" +#line 327 "dhcp6_parser.yy" { ctx.ctx_ = ctx.INTERFACES_CONFIG; } #line 784 "dhcp6_parser.cc" break; case 10: // $@5: %empty -#line 327 "dhcp6_parser.yy" +#line 328 "dhcp6_parser.yy" { ctx.ctx_ = ctx.SUBNET6; } #line 790 "dhcp6_parser.cc" break; case 12: // $@6: %empty -#line 328 "dhcp6_parser.yy" +#line 329 "dhcp6_parser.yy" { ctx.ctx_ = ctx.POOLS; } #line 796 "dhcp6_parser.cc" break; case 14: // $@7: %empty -#line 329 "dhcp6_parser.yy" +#line 330 "dhcp6_parser.yy" { ctx.ctx_ = ctx.PD_POOLS; } #line 802 "dhcp6_parser.cc" break; case 16: // $@8: %empty -#line 330 "dhcp6_parser.yy" +#line 331 "dhcp6_parser.yy" { ctx.ctx_ = ctx.RESERVATIONS; } #line 808 "dhcp6_parser.cc" break; case 18: // $@9: %empty -#line 331 "dhcp6_parser.yy" +#line 332 "dhcp6_parser.yy" { ctx.ctx_ = ctx.DHCP6; } #line 814 "dhcp6_parser.cc" break; case 20: // $@10: %empty -#line 332 "dhcp6_parser.yy" +#line 333 "dhcp6_parser.yy" { ctx.ctx_ = ctx.OPTION_DEF; } #line 820 "dhcp6_parser.cc" break; case 22: // $@11: %empty -#line 333 "dhcp6_parser.yy" +#line 334 "dhcp6_parser.yy" { ctx.ctx_ = ctx.OPTION_DATA; } #line 826 "dhcp6_parser.cc" break; case 24: // $@12: %empty -#line 334 "dhcp6_parser.yy" +#line 335 "dhcp6_parser.yy" { ctx.ctx_ = ctx.HOOKS_LIBRARIES; } #line 832 "dhcp6_parser.cc" break; case 26: // $@13: %empty -#line 335 "dhcp6_parser.yy" +#line 336 "dhcp6_parser.yy" { ctx.ctx_ = ctx.DHCP_DDNS; } #line 838 "dhcp6_parser.cc" break; case 28: // $@14: %empty -#line 336 "dhcp6_parser.yy" +#line 337 "dhcp6_parser.yy" { ctx.ctx_ = ctx.CONFIG_CONTROL; } #line 844 "dhcp6_parser.cc" break; case 30: // value: "integer" -#line 344 "dhcp6_parser.yy" +#line 345 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); } #line 850 "dhcp6_parser.cc" break; case 31: // value: "floating point" -#line 345 "dhcp6_parser.yy" +#line 346 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); } #line 856 "dhcp6_parser.cc" break; case 32: // value: "boolean" -#line 346 "dhcp6_parser.yy" +#line 347 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); } #line 862 "dhcp6_parser.cc" break; case 33: // value: "constant string" -#line 347 "dhcp6_parser.yy" +#line 348 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); } #line 868 "dhcp6_parser.cc" break; case 34: // value: "null" -#line 348 "dhcp6_parser.yy" +#line 349 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); } #line 874 "dhcp6_parser.cc" break; case 35: // value: map2 -#line 349 "dhcp6_parser.yy" +#line 350 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } #line 880 "dhcp6_parser.cc" break; case 36: // value: list_generic -#line 350 "dhcp6_parser.yy" +#line 351 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } #line 886 "dhcp6_parser.cc" break; case 37: // sub_json: value -#line 353 "dhcp6_parser.yy" +#line 354 "dhcp6_parser.yy" { // Push back the JSON value on the stack ctx.stack_.push_back(yystack_[0].value.as < ElementPtr > ()); @@ -895,7 +895,7 @@ namespace isc { namespace dhcp { break; case 38: // $@15: %empty -#line 358 "dhcp6_parser.yy" +#line 359 "dhcp6_parser.yy" { // This code is executed when we're about to start parsing // the content of the map @@ -906,7 +906,7 @@ namespace isc { namespace dhcp { break; case 39: // map2: "{" $@15 map_content "}" -#line 363 "dhcp6_parser.yy" +#line 364 "dhcp6_parser.yy" { // map parsing completed. If we ever want to do any wrap up // (maybe some sanity checking), this would be the best place @@ -916,13 +916,13 @@ namespace isc { namespace dhcp { break; case 40: // map_value: map2 -#line 369 "dhcp6_parser.yy" +#line 370 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } #line 922 "dhcp6_parser.cc" break; case 43: // not_empty_map: "constant string" ":" value -#line 376 "dhcp6_parser.yy" +#line 377 "dhcp6_parser.yy" { // map containing a single entry ctx.unique(yystack_[2].value.as < std::string > (), ctx.loc2pos(yystack_[2].location)); @@ -932,7 +932,7 @@ namespace isc { namespace dhcp { break; case 44: // not_empty_map: not_empty_map "," "constant string" ":" value -#line 381 "dhcp6_parser.yy" +#line 382 "dhcp6_parser.yy" { // map consisting of a shorter map followed by // comma and string:value @@ -943,7 +943,7 @@ namespace isc { namespace dhcp { break; case 45: // not_empty_map: not_empty_map "," -#line 387 "dhcp6_parser.yy" +#line 388 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } @@ -951,7 +951,7 @@ namespace isc { namespace dhcp { break; case 46: // $@16: %empty -#line 392 "dhcp6_parser.yy" +#line 393 "dhcp6_parser.yy" { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(l); @@ -960,7 +960,7 @@ namespace isc { namespace dhcp { break; case 47: // list_generic: "[" $@16 list_content "]" -#line 395 "dhcp6_parser.yy" +#line 396 "dhcp6_parser.yy" { // list parsing complete. Put any sanity checking here } @@ -968,7 +968,7 @@ namespace isc { namespace dhcp { break; case 50: // not_empty_list: value -#line 403 "dhcp6_parser.yy" +#line 404 "dhcp6_parser.yy" { // List consisting of a single element. ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ()); @@ -977,7 +977,7 @@ namespace isc { namespace dhcp { break; case 51: // not_empty_list: not_empty_list "," value -#line 407 "dhcp6_parser.yy" +#line 408 "dhcp6_parser.yy" { // List ending with , and a value. ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ()); @@ -986,7 +986,7 @@ namespace isc { namespace dhcp { break; case 52: // not_empty_list: not_empty_list "," -#line 411 "dhcp6_parser.yy" +#line 412 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } @@ -994,7 +994,7 @@ namespace isc { namespace dhcp { break; case 53: // $@17: %empty -#line 417 "dhcp6_parser.yy" +#line 418 "dhcp6_parser.yy" { // List parsing about to start } @@ -1002,7 +1002,7 @@ namespace isc { namespace dhcp { break; case 54: // list_strings: "[" $@17 list_strings_content "]" -#line 419 "dhcp6_parser.yy" +#line 420 "dhcp6_parser.yy" { // list parsing complete. Put any sanity checking here //ctx.stack_.pop_back(); @@ -1011,7 +1011,7 @@ namespace isc { namespace dhcp { break; case 57: // not_empty_list_strings: "constant string" -#line 428 "dhcp6_parser.yy" +#line 429 "dhcp6_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(s); @@ -1020,7 +1020,7 @@ namespace isc { namespace dhcp { break; case 58: // not_empty_list_strings: not_empty_list_strings "," "constant string" -#line 432 "dhcp6_parser.yy" +#line 433 "dhcp6_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(s); @@ -1029,7 +1029,7 @@ namespace isc { namespace dhcp { break; case 59: // not_empty_list_strings: not_empty_list_strings "," -#line 436 "dhcp6_parser.yy" +#line 437 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } @@ -1037,7 +1037,7 @@ namespace isc { namespace dhcp { break; case 60: // unknown_map_entry: "constant string" ":" -#line 446 "dhcp6_parser.yy" +#line 447 "dhcp6_parser.yy" { const std::string& where = ctx.contextName(); const std::string& keyword = yystack_[1].value.as < std::string > (); @@ -1048,7 +1048,7 @@ namespace isc { namespace dhcp { break; case 61: // $@18: %empty -#line 455 "dhcp6_parser.yy" +#line 456 "dhcp6_parser.yy" { // This code is executed when we're about to start parsing // the content of the map @@ -1059,7 +1059,7 @@ namespace isc { namespace dhcp { break; case 62: // syntax_map: "{" $@18 global_object "}" -#line 460 "dhcp6_parser.yy" +#line 461 "dhcp6_parser.yy" { // map parsing completed. If we ever want to do any wrap up // (maybe some sanity checking), this would be the best place @@ -1072,7 +1072,7 @@ namespace isc { namespace dhcp { break; case 63: // $@19: %empty -#line 470 "dhcp6_parser.yy" +#line 471 "dhcp6_parser.yy" { // This code is executed when we're about to start parsing // the content of the map @@ -1087,7 +1087,7 @@ namespace isc { namespace dhcp { break; case 64: // global_object: "Dhcp6" $@19 ":" "{" global_params "}" -#line 479 "dhcp6_parser.yy" +#line 480 "dhcp6_parser.yy" { // No global parameter is required ctx.stack_.pop_back(); @@ -1097,7 +1097,7 @@ namespace isc { namespace dhcp { break; case 66: // global_object_comma: global_object "," -#line 487 "dhcp6_parser.yy" +#line 488 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } @@ -1105,7 +1105,7 @@ namespace isc { namespace dhcp { break; case 67: // $@20: %empty -#line 493 "dhcp6_parser.yy" +#line 494 "dhcp6_parser.yy" { // Parse the Dhcp6 map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -1115,7 +1115,7 @@ namespace isc { namespace dhcp { break; case 68: // sub_dhcp6: "{" $@20 global_params "}" -#line 497 "dhcp6_parser.yy" +#line 498 "dhcp6_parser.yy" { // No global parameter is required // parsing completed @@ -1124,7 +1124,7 @@ namespace isc { namespace dhcp { break; case 71: // global_params: global_params "," -#line 504 "dhcp6_parser.yy" +#line 505 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } @@ -1132,7 +1132,7 @@ namespace isc { namespace dhcp { break; case 141: // $@21: %empty -#line 582 "dhcp6_parser.yy" +#line 583 "dhcp6_parser.yy" { ctx.unique("data-directory", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); @@ -1141,7 +1141,7 @@ namespace isc { namespace dhcp { break; case 142: // data_directory: "data-directory" $@21 ":" "constant string" -#line 585 "dhcp6_parser.yy" +#line 586 "dhcp6_parser.yy" { ElementPtr datadir(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("data-directory", datadir); @@ -1151,7 +1151,7 @@ namespace isc { namespace dhcp { break; case 143: // preferred_lifetime: "preferred-lifetime" ":" "integer" -#line 591 "dhcp6_parser.yy" +#line 592 "dhcp6_parser.yy" { ctx.unique("preferred-lifetime", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -1161,7 +1161,7 @@ namespace isc { namespace dhcp { break; case 144: // min_preferred_lifetime: "min-preferred-lifetime" ":" "integer" -#line 597 "dhcp6_parser.yy" +#line 598 "dhcp6_parser.yy" { ctx.unique("min-preferred-lifetime", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -1171,7 +1171,7 @@ namespace isc { namespace dhcp { break; case 145: // max_preferred_lifetime: "max-preferred-lifetime" ":" "integer" -#line 603 "dhcp6_parser.yy" +#line 604 "dhcp6_parser.yy" { ctx.unique("max-preferred-lifetime", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -1181,7 +1181,7 @@ namespace isc { namespace dhcp { break; case 146: // valid_lifetime: "valid-lifetime" ":" "integer" -#line 609 "dhcp6_parser.yy" +#line 610 "dhcp6_parser.yy" { ctx.unique("valid-lifetime", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -1191,7 +1191,7 @@ namespace isc { namespace dhcp { break; case 147: // min_valid_lifetime: "min-valid-lifetime" ":" "integer" -#line 615 "dhcp6_parser.yy" +#line 616 "dhcp6_parser.yy" { ctx.unique("min-valid-lifetime", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -1201,7 +1201,7 @@ namespace isc { namespace dhcp { break; case 148: // max_valid_lifetime: "max-valid-lifetime" ":" "integer" -#line 621 "dhcp6_parser.yy" +#line 622 "dhcp6_parser.yy" { ctx.unique("max-valid-lifetime", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -1211,7 +1211,7 @@ namespace isc { namespace dhcp { break; case 149: // renew_timer: "renew-timer" ":" "integer" -#line 627 "dhcp6_parser.yy" +#line 628 "dhcp6_parser.yy" { ctx.unique("renew-timer", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -1221,7 +1221,7 @@ namespace isc { namespace dhcp { break; case 150: // rebind_timer: "rebind-timer" ":" "integer" -#line 633 "dhcp6_parser.yy" +#line 634 "dhcp6_parser.yy" { ctx.unique("rebind-timer", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -1231,7 +1231,7 @@ namespace isc { namespace dhcp { break; case 151: // calculate_tee_times: "calculate-tee-times" ":" "boolean" -#line 639 "dhcp6_parser.yy" +#line 640 "dhcp6_parser.yy" { ctx.unique("calculate-tee-times", ctx.loc2pos(yystack_[2].location)); ElementPtr ctt(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); @@ -1241,7 +1241,7 @@ namespace isc { namespace dhcp { break; case 152: // t1_percent: "t1-percent" ":" "floating point" -#line 645 "dhcp6_parser.yy" +#line 646 "dhcp6_parser.yy" { ctx.unique("t1-percent", ctx.loc2pos(yystack_[2].location)); ElementPtr t1(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); @@ -1251,7 +1251,7 @@ namespace isc { namespace dhcp { break; case 153: // t2_percent: "t2-percent" ":" "floating point" -#line 651 "dhcp6_parser.yy" +#line 652 "dhcp6_parser.yy" { ctx.unique("t2-percent", ctx.loc2pos(yystack_[2].location)); ElementPtr t2(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); @@ -1261,7 +1261,7 @@ namespace isc { namespace dhcp { break; case 154: // cache_threshold: "cache-threshold" ":" "floating point" -#line 657 "dhcp6_parser.yy" +#line 658 "dhcp6_parser.yy" { ctx.unique("cache-threshold", ctx.loc2pos(yystack_[2].location)); ElementPtr ct(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); @@ -1271,7 +1271,7 @@ namespace isc { namespace dhcp { break; case 155: // cache_max_age: "cache-max-age" ":" "integer" -#line 663 "dhcp6_parser.yy" +#line 664 "dhcp6_parser.yy" { ctx.unique("cache-max-age", ctx.loc2pos(yystack_[2].location)); ElementPtr cm(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -1281,7 +1281,7 @@ namespace isc { namespace dhcp { break; case 156: // decline_probation_period: "decline-probation-period" ":" "integer" -#line 669 "dhcp6_parser.yy" +#line 670 "dhcp6_parser.yy" { ctx.unique("decline-probation-period", ctx.loc2pos(yystack_[2].location)); ElementPtr dpp(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -1291,7 +1291,7 @@ namespace isc { namespace dhcp { break; case 157: // ddns_send_updates: "ddns-send-updates" ":" "boolean" -#line 675 "dhcp6_parser.yy" +#line 676 "dhcp6_parser.yy" { ctx.unique("ddns-send-updates", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); @@ -1301,7 +1301,7 @@ namespace isc { namespace dhcp { break; case 158: // ddns_override_no_update: "ddns-override-no-update" ":" "boolean" -#line 681 "dhcp6_parser.yy" +#line 682 "dhcp6_parser.yy" { ctx.unique("ddns-override-no-update", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); @@ -1311,7 +1311,7 @@ namespace isc { namespace dhcp { break; case 159: // ddns_override_client_update: "ddns-override-client-update" ":" "boolean" -#line 687 "dhcp6_parser.yy" +#line 688 "dhcp6_parser.yy" { ctx.unique("ddns-override-client-update", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); @@ -1321,7 +1321,7 @@ namespace isc { namespace dhcp { break; case 160: // $@22: %empty -#line 693 "dhcp6_parser.yy" +#line 694 "dhcp6_parser.yy" { ctx.unique("ddns-replace-client-name", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.REPLACE_CLIENT_NAME); @@ -1330,7 +1330,7 @@ namespace isc { namespace dhcp { break; case 161: // ddns_replace_client_name: "ddns-replace-client-name" $@22 ":" ddns_replace_client_name_value -#line 696 "dhcp6_parser.yy" +#line 697 "dhcp6_parser.yy" { ctx.stack_.back()->set("ddns-replace-client-name", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); @@ -1339,7 +1339,7 @@ namespace isc { namespace dhcp { break; case 162: // ddns_replace_client_name_value: "when-present" -#line 702 "dhcp6_parser.yy" +#line 703 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location))); } @@ -1347,7 +1347,7 @@ namespace isc { namespace dhcp { break; case 163: // ddns_replace_client_name_value: "never" -#line 705 "dhcp6_parser.yy" +#line 706 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location))); } @@ -1355,7 +1355,7 @@ namespace isc { namespace dhcp { break; case 164: // ddns_replace_client_name_value: "always" -#line 708 "dhcp6_parser.yy" +#line 709 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location))); } @@ -1363,7 +1363,7 @@ namespace isc { namespace dhcp { break; case 165: // ddns_replace_client_name_value: "when-not-present" -#line 711 "dhcp6_parser.yy" +#line 712 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location))); } @@ -1371,7 +1371,7 @@ namespace isc { namespace dhcp { break; case 166: // ddns_replace_client_name_value: "boolean" -#line 714 "dhcp6_parser.yy" +#line 715 "dhcp6_parser.yy" { error(yystack_[0].location, "boolean values for the replace-client-name are " "no longer supported"); @@ -1380,7 +1380,7 @@ namespace isc { namespace dhcp { break; case 167: // $@23: %empty -#line 720 "dhcp6_parser.yy" +#line 721 "dhcp6_parser.yy" { ctx.unique("ddns-generated-prefix", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); @@ -1389,7 +1389,7 @@ namespace isc { namespace dhcp { break; case 168: // ddns_generated_prefix: "ddns-generated-prefix" $@23 ":" "constant string" -#line 723 "dhcp6_parser.yy" +#line 724 "dhcp6_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ddns-generated-prefix", s); @@ -1399,7 +1399,7 @@ namespace isc { namespace dhcp { break; case 169: // $@24: %empty -#line 729 "dhcp6_parser.yy" +#line 730 "dhcp6_parser.yy" { ctx.unique("ddns-qualifying-suffix", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); @@ -1408,7 +1408,7 @@ namespace isc { namespace dhcp { break; case 170: // ddns_qualifying_suffix: "ddns-qualifying-suffix" $@24 ":" "constant string" -#line 732 "dhcp6_parser.yy" +#line 733 "dhcp6_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ddns-qualifying-suffix", s); @@ -1418,7 +1418,7 @@ namespace isc { namespace dhcp { break; case 171: // ddns_update_on_renew: "ddns-update-on-renew" ":" "boolean" -#line 738 "dhcp6_parser.yy" +#line 739 "dhcp6_parser.yy" { ctx.unique("ddns-update-on-renew", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); @@ -1428,7 +1428,7 @@ namespace isc { namespace dhcp { break; case 172: // ddns_use_conflict_resolution: "ddns-use-conflict-resolution" ":" "boolean" -#line 747 "dhcp6_parser.yy" +#line 748 "dhcp6_parser.yy" { ctx.unique("ddns-use-conflict-resolution", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); @@ -1442,7 +1442,7 @@ namespace isc { namespace dhcp { break; case 173: // $@25: %empty -#line 757 "dhcp6_parser.yy" +#line 758 "dhcp6_parser.yy" { ctx.unique("ddns-conflict-resolution-mode", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.DDNS_CONFLICT_RESOLUTION_MODE); @@ -1451,7 +1451,7 @@ namespace isc { namespace dhcp { break; case 174: // ddns_conflict_resolution_mode: "ddns-conflict-resolution-mode" $@25 ":" ddns_conflict_resolution_mode_value -#line 760 "dhcp6_parser.yy" +#line 761 "dhcp6_parser.yy" { ctx.stack_.back()->set("ddns-conflict-resolution-mode", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); @@ -1460,7 +1460,7 @@ namespace isc { namespace dhcp { break; case 175: // ddns_conflict_resolution_mode_value: "check-with-dhcid" -#line 766 "dhcp6_parser.yy" +#line 767 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("check-with-dhcid", ctx.loc2pos(yystack_[0].location))); } @@ -1468,7 +1468,7 @@ namespace isc { namespace dhcp { break; case 176: // ddns_conflict_resolution_mode_value: "no-check-with-dhcid" -#line 769 "dhcp6_parser.yy" +#line 770 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("no-check-with-dhcid", ctx.loc2pos(yystack_[0].location))); } @@ -1476,7 +1476,7 @@ namespace isc { namespace dhcp { break; case 177: // ddns_conflict_resolution_mode_value: "check-exists-with-dhcid" -#line 772 "dhcp6_parser.yy" +#line 773 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("check-exists-with-dhcid", ctx.loc2pos(yystack_[0].location))); } @@ -1484,7 +1484,7 @@ namespace isc { namespace dhcp { break; case 178: // ddns_conflict_resolution_mode_value: "no-check-without-dhcid" -#line 775 "dhcp6_parser.yy" +#line 776 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("no-check-without-dhcid", ctx.loc2pos(yystack_[0].location))); } @@ -1492,7 +1492,7 @@ namespace isc { namespace dhcp { break; case 179: // ddns_ttl_percent: "ddns-ttl-percent" ":" "floating point" -#line 780 "dhcp6_parser.yy" +#line 781 "dhcp6_parser.yy" { ctx.unique("ddns-ttl-percent", ctx.loc2pos(yystack_[2].location)); ElementPtr ttl(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); @@ -1502,7 +1502,7 @@ namespace isc { namespace dhcp { break; case 180: // $@26: %empty -#line 786 "dhcp6_parser.yy" +#line 787 "dhcp6_parser.yy" { ctx.unique("hostname-char-set", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); @@ -1511,7 +1511,7 @@ namespace isc { namespace dhcp { break; case 181: // hostname_char_set: "hostname-char-set" $@26 ":" "constant string" -#line 789 "dhcp6_parser.yy" +#line 790 "dhcp6_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hostname-char-set", s); @@ -1521,7 +1521,7 @@ namespace isc { namespace dhcp { break; case 182: // $@27: %empty -#line 795 "dhcp6_parser.yy" +#line 796 "dhcp6_parser.yy" { ctx.unique("hostname-char-replacement", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); @@ -1530,7 +1530,7 @@ namespace isc { namespace dhcp { break; case 183: // hostname_char_replacement: "hostname-char-replacement" $@27 ":" "constant string" -#line 798 "dhcp6_parser.yy" +#line 799 "dhcp6_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hostname-char-replacement", s); @@ -1540,7 +1540,7 @@ namespace isc { namespace dhcp { break; case 184: // store_extended_info: "store-extended-info" ":" "boolean" -#line 804 "dhcp6_parser.yy" +#line 805 "dhcp6_parser.yy" { ctx.unique("store-extended-info", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); @@ -1550,7 +1550,7 @@ namespace isc { namespace dhcp { break; case 185: // statistic_default_sample_count: "statistic-default-sample-count" ":" "integer" -#line 810 "dhcp6_parser.yy" +#line 811 "dhcp6_parser.yy" { ctx.unique("statistic-default-sample-count", ctx.loc2pos(yystack_[2].location)); ElementPtr count(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -1560,7 +1560,7 @@ namespace isc { namespace dhcp { break; case 186: // statistic_default_sample_age: "statistic-default-sample-age" ":" "integer" -#line 816 "dhcp6_parser.yy" +#line 817 "dhcp6_parser.yy" { ctx.unique("statistic-default-sample-age", ctx.loc2pos(yystack_[2].location)); ElementPtr age(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -1570,7 +1570,7 @@ namespace isc { namespace dhcp { break; case 187: // $@28: %empty -#line 822 "dhcp6_parser.yy" +#line 823 "dhcp6_parser.yy" { ctx.unique("server-tag", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); @@ -1579,7 +1579,7 @@ namespace isc { namespace dhcp { break; case 188: // server_tag: "server-tag" $@28 ":" "constant string" -#line 825 "dhcp6_parser.yy" +#line 826 "dhcp6_parser.yy" { ElementPtr stag(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("server-tag", stag); @@ -1589,7 +1589,7 @@ namespace isc { namespace dhcp { break; case 189: // parked_packet_limit: "parked-packet-limit" ":" "integer" -#line 831 "dhcp6_parser.yy" +#line 832 "dhcp6_parser.yy" { ctx.unique("parked-packet-limit", ctx.loc2pos(yystack_[2].location)); ElementPtr ppl(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -1599,7 +1599,7 @@ namespace isc { namespace dhcp { break; case 190: // $@29: %empty -#line 837 "dhcp6_parser.yy" +#line 838 "dhcp6_parser.yy" { ctx.unique("allocator", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); @@ -1608,7 +1608,7 @@ namespace isc { namespace dhcp { break; case 191: // allocator: "allocator" $@29 ":" "constant string" -#line 840 "dhcp6_parser.yy" +#line 841 "dhcp6_parser.yy" { ElementPtr al(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("allocator", al); @@ -1618,7 +1618,7 @@ namespace isc { namespace dhcp { break; case 192: // $@30: %empty -#line 846 "dhcp6_parser.yy" +#line 847 "dhcp6_parser.yy" { ctx.unique("pd-allocator", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); @@ -1627,7 +1627,7 @@ namespace isc { namespace dhcp { break; case 193: // pd_allocator: "pd-allocator" $@30 ":" "constant string" -#line 849 "dhcp6_parser.yy" +#line 850 "dhcp6_parser.yy" { ElementPtr al(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("pd-allocator", al); @@ -1637,7 +1637,7 @@ namespace isc { namespace dhcp { break; case 194: // early_global_reservations_lookup: "early-global-reservations-lookup" ":" "boolean" -#line 855 "dhcp6_parser.yy" +#line 856 "dhcp6_parser.yy" { ctx.unique("early-global-reservations-lookup", ctx.loc2pos(yystack_[2].location)); ElementPtr early(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); @@ -1647,7 +1647,7 @@ namespace isc { namespace dhcp { break; case 195: // ip_reservations_unique: "ip-reservations-unique" ":" "boolean" -#line 861 "dhcp6_parser.yy" +#line 862 "dhcp6_parser.yy" { ctx.unique("ip-reservations-unique", ctx.loc2pos(yystack_[2].location)); ElementPtr unique(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); @@ -1657,7 +1657,7 @@ namespace isc { namespace dhcp { break; case 196: // reservations_lookup_first: "reservations-lookup-first" ":" "boolean" -#line 867 "dhcp6_parser.yy" +#line 868 "dhcp6_parser.yy" { ctx.unique("reservations-lookup-first", ctx.loc2pos(yystack_[2].location)); ElementPtr first(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); @@ -1667,7 +1667,7 @@ namespace isc { namespace dhcp { break; case 197: // $@31: %empty -#line 873 "dhcp6_parser.yy" +#line 874 "dhcp6_parser.yy" { ctx.unique("interfaces-config", ctx.loc2pos(yystack_[0].location)); ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -1679,7 +1679,7 @@ namespace isc { namespace dhcp { break; case 198: // interfaces_config: "interfaces-config" $@31 ":" "{" interfaces_config_params "}" -#line 879 "dhcp6_parser.yy" +#line 880 "dhcp6_parser.yy" { // No interfaces config param is required ctx.stack_.pop_back(); @@ -1689,7 +1689,7 @@ namespace isc { namespace dhcp { break; case 199: // $@32: %empty -#line 885 "dhcp6_parser.yy" +#line 886 "dhcp6_parser.yy" { // Parse the interfaces-config map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -1699,7 +1699,7 @@ namespace isc { namespace dhcp { break; case 200: // sub_interfaces6: "{" $@32 interfaces_config_params "}" -#line 889 "dhcp6_parser.yy" +#line 890 "dhcp6_parser.yy" { // No interfaces config param is required // parsing completed @@ -1708,7 +1708,7 @@ namespace isc { namespace dhcp { break; case 203: // interfaces_config_params: interfaces_config_params "," -#line 896 "dhcp6_parser.yy" +#line 897 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } @@ -1716,7 +1716,7 @@ namespace isc { namespace dhcp { break; case 212: // $@33: %empty -#line 911 "dhcp6_parser.yy" +#line 912 "dhcp6_parser.yy" { ctx.unique("interfaces", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -1728,7 +1728,7 @@ namespace isc { namespace dhcp { break; case 213: // interfaces_list: "interfaces" $@33 ":" list_strings -#line 917 "dhcp6_parser.yy" +#line 918 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); @@ -1737,7 +1737,7 @@ namespace isc { namespace dhcp { break; case 214: // re_detect: "re-detect" ":" "boolean" -#line 922 "dhcp6_parser.yy" +#line 923 "dhcp6_parser.yy" { ctx.unique("re-detect", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); @@ -1747,7 +1747,7 @@ namespace isc { namespace dhcp { break; case 215: // service_sockets_require_all: "service-sockets-require-all" ":" "boolean" -#line 928 "dhcp6_parser.yy" +#line 929 "dhcp6_parser.yy" { ctx.unique("service-sockets-require-all", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); @@ -1757,7 +1757,7 @@ namespace isc { namespace dhcp { break; case 216: // service_sockets_retry_wait_time: "service-sockets-retry-wait-time" ":" "integer" -#line 934 "dhcp6_parser.yy" +#line 935 "dhcp6_parser.yy" { ctx.unique("service-sockets-retry-wait-time", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -1767,7 +1767,7 @@ namespace isc { namespace dhcp { break; case 217: // service_sockets_max_retries: "service-sockets-max-retries" ":" "integer" -#line 940 "dhcp6_parser.yy" +#line 941 "dhcp6_parser.yy" { ctx.unique("service-sockets-max-retries", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -1777,7 +1777,7 @@ namespace isc { namespace dhcp { break; case 218: // $@34: %empty -#line 946 "dhcp6_parser.yy" +#line 947 "dhcp6_parser.yy" { ctx.unique("lease-database", ctx.loc2pos(yystack_[0].location)); ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -1789,7 +1789,7 @@ namespace isc { namespace dhcp { break; case 219: // lease_database: "lease-database" $@34 ":" "{" database_map_params "}" -#line 952 "dhcp6_parser.yy" +#line 953 "dhcp6_parser.yy" { // The type parameter is required ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location)); @@ -1800,7 +1800,7 @@ namespace isc { namespace dhcp { break; case 220: // $@35: %empty -#line 959 "dhcp6_parser.yy" +#line 960 "dhcp6_parser.yy" { ctx.unique("hosts-database", ctx.loc2pos(yystack_[0].location)); ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -1812,7 +1812,7 @@ namespace isc { namespace dhcp { break; case 221: // hosts_database: "hosts-database" $@35 ":" "{" database_map_params "}" -#line 965 "dhcp6_parser.yy" +#line 966 "dhcp6_parser.yy" { // The type parameter is required ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location)); @@ -1823,7 +1823,7 @@ namespace isc { namespace dhcp { break; case 222: // $@36: %empty -#line 972 "dhcp6_parser.yy" +#line 973 "dhcp6_parser.yy" { ctx.unique("hosts-databases", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -1835,7 +1835,7 @@ namespace isc { namespace dhcp { break; case 223: // hosts_databases: "hosts-databases" $@36 ":" "[" database_list "]" -#line 978 "dhcp6_parser.yy" +#line 979 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); @@ -1844,7 +1844,7 @@ namespace isc { namespace dhcp { break; case 228: // not_empty_database_list: not_empty_database_list "," -#line 989 "dhcp6_parser.yy" +#line 990 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } @@ -1852,7 +1852,7 @@ namespace isc { namespace dhcp { break; case 229: // $@37: %empty -#line 994 "dhcp6_parser.yy" +#line 995 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); @@ -1862,7 +1862,7 @@ namespace isc { namespace dhcp { break; case 230: // database: "{" $@37 database_map_params "}" -#line 998 "dhcp6_parser.yy" +#line 999 "dhcp6_parser.yy" { // The type parameter is required ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); @@ -1872,15 +1872,15 @@ namespace isc { namespace dhcp { break; case 233: // database_map_params: database_map_params "," -#line 1006 "dhcp6_parser.yy" +#line 1007 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } #line 1880 "dhcp6_parser.cc" break; - case 256: // $@38: %empty -#line 1035 "dhcp6_parser.yy" + case 257: // $@38: %empty +#line 1037 "dhcp6_parser.yy" { ctx.unique("type", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.DATABASE_TYPE); @@ -1888,8 +1888,8 @@ namespace isc { namespace dhcp { #line 1889 "dhcp6_parser.cc" break; - case 257: // database_type: "type" $@38 ":" db_type -#line 1038 "dhcp6_parser.yy" + case 258: // database_type: "type" $@38 ":" db_type +#line 1040 "dhcp6_parser.yy" { ctx.stack_.back()->set("type", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); @@ -1897,26 +1897,26 @@ namespace isc { namespace dhcp { #line 1898 "dhcp6_parser.cc" break; - case 258: // db_type: "memfile" -#line 1043 "dhcp6_parser.yy" + case 259: // db_type: "memfile" +#line 1045 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("memfile", ctx.loc2pos(yystack_[0].location))); } #line 1904 "dhcp6_parser.cc" break; - case 259: // db_type: "mysql" -#line 1044 "dhcp6_parser.yy" + case 260: // db_type: "mysql" +#line 1046 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("mysql", ctx.loc2pos(yystack_[0].location))); } #line 1910 "dhcp6_parser.cc" break; - case 260: // db_type: "postgresql" -#line 1045 "dhcp6_parser.yy" + case 261: // db_type: "postgresql" +#line 1047 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("postgresql", ctx.loc2pos(yystack_[0].location))); } #line 1916 "dhcp6_parser.cc" break; - case 261: // $@39: %empty -#line 1048 "dhcp6_parser.yy" + case 262: // $@39: %empty +#line 1050 "dhcp6_parser.yy" { ctx.unique("user", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); @@ -1924,8 +1924,8 @@ namespace isc { namespace dhcp { #line 1925 "dhcp6_parser.cc" break; - case 262: // user: "user" $@39 ":" "constant string" -#line 1051 "dhcp6_parser.yy" + case 263: // user: "user" $@39 ":" "constant string" +#line 1053 "dhcp6_parser.yy" { ElementPtr user(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("user", user); @@ -1934,8 +1934,8 @@ namespace isc { namespace dhcp { #line 1935 "dhcp6_parser.cc" break; - case 263: // $@40: %empty -#line 1057 "dhcp6_parser.yy" + case 264: // $@40: %empty +#line 1059 "dhcp6_parser.yy" { ctx.unique("password", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); @@ -1943,8 +1943,8 @@ namespace isc { namespace dhcp { #line 1944 "dhcp6_parser.cc" break; - case 264: // password: "password" $@40 ":" "constant string" -#line 1060 "dhcp6_parser.yy" + case 265: // password: "password" $@40 ":" "constant string" +#line 1062 "dhcp6_parser.yy" { ElementPtr pwd(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("password", pwd); @@ -1953,8 +1953,8 @@ namespace isc { namespace dhcp { #line 1954 "dhcp6_parser.cc" break; - case 265: // $@41: %empty -#line 1066 "dhcp6_parser.yy" + case 266: // $@41: %empty +#line 1068 "dhcp6_parser.yy" { ctx.unique("host", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); @@ -1962,8 +1962,8 @@ namespace isc { namespace dhcp { #line 1963 "dhcp6_parser.cc" break; - case 266: // host: "host" $@41 ":" "constant string" -#line 1069 "dhcp6_parser.yy" + case 267: // host: "host" $@41 ":" "constant string" +#line 1071 "dhcp6_parser.yy" { ElementPtr h(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("host", h); @@ -1972,8 +1972,8 @@ namespace isc { namespace dhcp { #line 1973 "dhcp6_parser.cc" break; - case 267: // port: "port" ":" "integer" -#line 1075 "dhcp6_parser.yy" + case 268: // port: "port" ":" "integer" +#line 1077 "dhcp6_parser.yy" { ctx.unique("port", ctx.loc2pos(yystack_[2].location)); ElementPtr p(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -1982,8 +1982,8 @@ namespace isc { namespace dhcp { #line 1983 "dhcp6_parser.cc" break; - case 268: // $@42: %empty -#line 1081 "dhcp6_parser.yy" + case 269: // $@42: %empty +#line 1083 "dhcp6_parser.yy" { ctx.unique("name", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); @@ -1991,8 +1991,8 @@ namespace isc { namespace dhcp { #line 1992 "dhcp6_parser.cc" break; - case 269: // name: "name" $@42 ":" "constant string" -#line 1084 "dhcp6_parser.yy" + case 270: // name: "name" $@42 ":" "constant string" +#line 1086 "dhcp6_parser.yy" { ElementPtr name(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("name", name); @@ -2001,8 +2001,8 @@ namespace isc { namespace dhcp { #line 2002 "dhcp6_parser.cc" break; - case 270: // persist: "persist" ":" "boolean" -#line 1090 "dhcp6_parser.yy" + case 271: // persist: "persist" ":" "boolean" +#line 1092 "dhcp6_parser.yy" { ctx.unique("persist", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); @@ -2011,8 +2011,8 @@ namespace isc { namespace dhcp { #line 2012 "dhcp6_parser.cc" break; - case 271: // lfc_interval: "lfc-interval" ":" "integer" -#line 1096 "dhcp6_parser.yy" + case 272: // lfc_interval: "lfc-interval" ":" "integer" +#line 1098 "dhcp6_parser.yy" { ctx.unique("lfc-interval", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -2021,8 +2021,8 @@ namespace isc { namespace dhcp { #line 2022 "dhcp6_parser.cc" break; - case 272: // readonly: "readonly" ":" "boolean" -#line 1102 "dhcp6_parser.yy" + case 273: // readonly: "readonly" ":" "boolean" +#line 1104 "dhcp6_parser.yy" { ctx.unique("readonly", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); @@ -2031,8 +2031,8 @@ namespace isc { namespace dhcp { #line 2032 "dhcp6_parser.cc" break; - case 273: // connect_timeout: "connect-timeout" ":" "integer" -#line 1108 "dhcp6_parser.yy" + case 274: // connect_timeout: "connect-timeout" ":" "integer" +#line 1110 "dhcp6_parser.yy" { ctx.unique("connect-timeout", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -2041,8 +2041,8 @@ namespace isc { namespace dhcp { #line 2042 "dhcp6_parser.cc" break; - case 274: // read_timeout: "read-timeout" ":" "integer" -#line 1114 "dhcp6_parser.yy" + case 275: // read_timeout: "read-timeout" ":" "integer" +#line 1116 "dhcp6_parser.yy" { ctx.unique("read-timeout", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -2051,8 +2051,8 @@ namespace isc { namespace dhcp { #line 2052 "dhcp6_parser.cc" break; - case 275: // write_timeout: "write-timeout" ":" "integer" -#line 1120 "dhcp6_parser.yy" + case 276: // write_timeout: "write-timeout" ":" "integer" +#line 1122 "dhcp6_parser.yy" { ctx.unique("write-timeout", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -2061,8 +2061,8 @@ namespace isc { namespace dhcp { #line 2062 "dhcp6_parser.cc" break; - case 276: // tcp_user_timeout: "tcp-user-timeout" ":" "integer" -#line 1126 "dhcp6_parser.yy" + case 277: // tcp_user_timeout: "tcp-user-timeout" ":" "integer" +#line 1128 "dhcp6_parser.yy" { ctx.unique("tcp-user-timeout", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -2071,8 +2071,8 @@ namespace isc { namespace dhcp { #line 2072 "dhcp6_parser.cc" break; - case 277: // reconnect_wait_time: "reconnect-wait-time" ":" "integer" -#line 1133 "dhcp6_parser.yy" + case 278: // reconnect_wait_time: "reconnect-wait-time" ":" "integer" +#line 1135 "dhcp6_parser.yy" { ctx.unique("reconnect-wait-time", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); @@ -2081,8 +2081,8 @@ namespace isc { namespace dhcp { #line 2082 "dhcp6_parser.cc" break; - case 278: // $@43: %empty -#line 1139 "dhcp6_parser.yy" + case 279: // $@43: %empty +#line 1141 "dhcp6_parser.yy" { ctx.unique("on-fail", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.DATABASE_ON_FAIL); @@ -2090,8 +2090,8 @@ namespace isc { namespace dhcp { #line 2091 "dhcp6_parser.cc" break; - case 279: // on_fail: "on-fail" $@43 ":" on_fail_mode -#line 1142 "dhcp6_parser.yy" + case 280: // on_fail: "on-fail" $@43 ":" on_fail_mode +#line 1144 "dhcp6_parser.yy" { ctx.stack_.back()->set("on-fail", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); @@ -2099,122 +2099,132 @@ namespace isc { namespace dhcp { #line 2100 "dhcp6_parser.cc" break; - case 280: // on_fail_mode: "stop-retry-exit" -#line 1147 "dhcp6_parser.yy" + case 281: // on_fail_mode: "stop-retry-exit" +#line 1149 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("stop-retry-exit", ctx.loc2pos(yystack_[0].location))); } #line 2106 "dhcp6_parser.cc" break; - case 281: // on_fail_mode: "serve-retry-exit" -#line 1148 "dhcp6_parser.yy" + case 282: // on_fail_mode: "serve-retry-exit" +#line 1150 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("serve-retry-exit", ctx.loc2pos(yystack_[0].location))); } #line 2112 "dhcp6_parser.cc" break; - case 282: // on_fail_mode: "serve-retry-continue" -#line 1149 "dhcp6_parser.yy" + case 283: // on_fail_mode: "serve-retry-continue" +#line 1151 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("serve-retry-continue", ctx.loc2pos(yystack_[0].location))); } #line 2118 "dhcp6_parser.cc" break; - case 283: // max_row_errors: "max-row-errors" ":" "integer" -#line 1152 "dhcp6_parser.yy" + case 284: // retry_on_startup: "retry-on-startup" ":" "boolean" +#line 1154 "dhcp6_parser.yy" + { + ctx.unique("retry-on-startup", ctx.loc2pos(yystack_[2].location)); + ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->set("retry-on-startup", n); +} +#line 2128 "dhcp6_parser.cc" + break; + + case 285: // max_row_errors: "max-row-errors" ":" "integer" +#line 1160 "dhcp6_parser.yy" { ctx.unique("max-row-errors", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-row-errors", n); } -#line 2128 "dhcp6_parser.cc" +#line 2138 "dhcp6_parser.cc" break; - case 284: // max_reconnect_tries: "max-reconnect-tries" ":" "integer" -#line 1158 "dhcp6_parser.yy" + case 286: // max_reconnect_tries: "max-reconnect-tries" ":" "integer" +#line 1166 "dhcp6_parser.yy" { ctx.unique("max-reconnect-tries", ctx.loc2pos(yystack_[2].location)); ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-reconnect-tries", n); } -#line 2138 "dhcp6_parser.cc" +#line 2148 "dhcp6_parser.cc" break; - case 285: // $@44: %empty -#line 1164 "dhcp6_parser.yy" + case 287: // $@44: %empty +#line 1172 "dhcp6_parser.yy" { ctx.unique("trust-anchor", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2147 "dhcp6_parser.cc" +#line 2157 "dhcp6_parser.cc" break; - case 286: // trust_anchor: "trust-anchor" $@44 ":" "constant string" -#line 1167 "dhcp6_parser.yy" + case 288: // trust_anchor: "trust-anchor" $@44 ":" "constant string" +#line 1175 "dhcp6_parser.yy" { ElementPtr ca(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("trust-anchor", ca); ctx.leave(); } -#line 2157 "dhcp6_parser.cc" +#line 2167 "dhcp6_parser.cc" break; - case 287: // $@45: %empty -#line 1173 "dhcp6_parser.yy" + case 289: // $@45: %empty +#line 1181 "dhcp6_parser.yy" { ctx.unique("cert-file", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2166 "dhcp6_parser.cc" +#line 2176 "dhcp6_parser.cc" break; - case 288: // cert_file: "cert-file" $@45 ":" "constant string" -#line 1176 "dhcp6_parser.yy" + case 290: // cert_file: "cert-file" $@45 ":" "constant string" +#line 1184 "dhcp6_parser.yy" { ElementPtr cert(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("cert-file", cert); ctx.leave(); } -#line 2176 "dhcp6_parser.cc" +#line 2186 "dhcp6_parser.cc" break; - case 289: // $@46: %empty -#line 1182 "dhcp6_parser.yy" + case 291: // $@46: %empty +#line 1190 "dhcp6_parser.yy" { ctx.unique("key-file", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2185 "dhcp6_parser.cc" +#line 2195 "dhcp6_parser.cc" break; - case 290: // key_file: "key-file" $@46 ":" "constant string" -#line 1185 "dhcp6_parser.yy" + case 292: // key_file: "key-file" $@46 ":" "constant string" +#line 1193 "dhcp6_parser.yy" { ElementPtr key(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("key-file", key); ctx.leave(); } -#line 2195 "dhcp6_parser.cc" +#line 2205 "dhcp6_parser.cc" break; - case 291: // $@47: %empty -#line 1191 "dhcp6_parser.yy" + case 293: // $@47: %empty +#line 1199 "dhcp6_parser.yy" { ctx.unique("cipher-list", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2204 "dhcp6_parser.cc" +#line 2214 "dhcp6_parser.cc" break; - case 292: // cipher_list: "cipher-list" $@47 ":" "constant string" -#line 1194 "dhcp6_parser.yy" + case 294: // cipher_list: "cipher-list" $@47 ":" "constant string" +#line 1202 "dhcp6_parser.yy" { ElementPtr cl(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("cipher-list", cl); ctx.leave(); } -#line 2214 "dhcp6_parser.cc" +#line 2224 "dhcp6_parser.cc" break; - case 293: // $@48: %empty -#line 1200 "dhcp6_parser.yy" + case 295: // $@48: %empty +#line 1208 "dhcp6_parser.yy" { ctx.unique("sanity-checks", ctx.loc2pos(yystack_[0].location)); ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -2222,37 +2232,37 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(m); ctx.enter(ctx.SANITY_CHECKS); } -#line 2226 "dhcp6_parser.cc" +#line 2236 "dhcp6_parser.cc" break; - case 294: // sanity_checks: "sanity-checks" $@48 ":" "{" sanity_checks_params "}" -#line 1206 "dhcp6_parser.yy" + case 296: // sanity_checks: "sanity-checks" $@48 ":" "{" sanity_checks_params "}" +#line 1214 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 2235 "dhcp6_parser.cc" +#line 2245 "dhcp6_parser.cc" break; - case 297: // sanity_checks_params: sanity_checks_params "," -#line 1213 "dhcp6_parser.yy" + case 299: // sanity_checks_params: sanity_checks_params "," +#line 1221 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2243 "dhcp6_parser.cc" +#line 2253 "dhcp6_parser.cc" break; - case 300: // $@49: %empty -#line 1222 "dhcp6_parser.yy" + case 302: // $@49: %empty +#line 1230 "dhcp6_parser.yy" { ctx.unique("lease-checks", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2252 "dhcp6_parser.cc" +#line 2262 "dhcp6_parser.cc" break; - case 301: // lease_checks: "lease-checks" $@49 ":" "constant string" -#line 1225 "dhcp6_parser.yy" + case 303: // lease_checks: "lease-checks" $@49 ":" "constant string" +#line 1233 "dhcp6_parser.yy" { if ( (string(yystack_[0].value.as < std::string > ()) == "none") || @@ -2268,20 +2278,20 @@ namespace isc { namespace dhcp { ", supported values are: none, warn, fix, fix-del, del"); } } -#line 2272 "dhcp6_parser.cc" +#line 2282 "dhcp6_parser.cc" break; - case 302: // $@50: %empty -#line 1241 "dhcp6_parser.yy" + case 304: // $@50: %empty +#line 1249 "dhcp6_parser.yy" { ctx.unique("extended-info-checks", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2281 "dhcp6_parser.cc" +#line 2291 "dhcp6_parser.cc" break; - case 303: // extended_info_checks: "extended-info-checks" $@50 ":" "constant string" -#line 1244 "dhcp6_parser.yy" + case 305: // extended_info_checks: "extended-info-checks" $@50 ":" "constant string" +#line 1252 "dhcp6_parser.yy" { if ( (string(yystack_[0].value.as < std::string > ()) == "none") || @@ -2296,11 +2306,11 @@ namespace isc { namespace dhcp { ", supported values are: none, fix, strict, pedantic"); } } -#line 2300 "dhcp6_parser.cc" +#line 2310 "dhcp6_parser.cc" break; - case 304: // $@51: %empty -#line 1259 "dhcp6_parser.yy" + case 306: // $@51: %empty +#line 1267 "dhcp6_parser.yy" { ctx.unique("mac-sources", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -2308,46 +2318,46 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.MAC_SOURCES); } -#line 2312 "dhcp6_parser.cc" +#line 2322 "dhcp6_parser.cc" break; - case 305: // mac_sources: "mac-sources" $@51 ":" "[" mac_sources_list "]" -#line 1265 "dhcp6_parser.yy" + case 307: // mac_sources: "mac-sources" $@51 ":" "[" mac_sources_list "]" +#line 1273 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 2321 "dhcp6_parser.cc" +#line 2331 "dhcp6_parser.cc" break; - case 308: // mac_sources_list: mac_sources_list "," -#line 1272 "dhcp6_parser.yy" + case 310: // mac_sources_list: mac_sources_list "," +#line 1280 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2329 "dhcp6_parser.cc" +#line 2339 "dhcp6_parser.cc" break; - case 311: // duid_id: "duid" -#line 1281 "dhcp6_parser.yy" + case 313: // duid_id: "duid" +#line 1289 "dhcp6_parser.yy" { ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(duid); } -#line 2338 "dhcp6_parser.cc" +#line 2348 "dhcp6_parser.cc" break; - case 312: // string_id: "constant string" -#line 1286 "dhcp6_parser.yy" + case 314: // string_id: "constant string" +#line 1294 "dhcp6_parser.yy" { ElementPtr duid(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(duid); } -#line 2347 "dhcp6_parser.cc" +#line 2357 "dhcp6_parser.cc" break; - case 313: // $@52: %empty -#line 1291 "dhcp6_parser.yy" + case 315: // $@52: %empty +#line 1299 "dhcp6_parser.yy" { ctx.unique("host-reservation-identifiers", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -2355,46 +2365,46 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.HOST_RESERVATION_IDENTIFIERS); } -#line 2359 "dhcp6_parser.cc" +#line 2369 "dhcp6_parser.cc" break; - case 314: // host_reservation_identifiers: "host-reservation-identifiers" $@52 ":" "[" host_reservation_identifiers_list "]" -#line 1297 "dhcp6_parser.yy" + case 316: // host_reservation_identifiers: "host-reservation-identifiers" $@52 ":" "[" host_reservation_identifiers_list "]" +#line 1305 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 2368 "dhcp6_parser.cc" +#line 2378 "dhcp6_parser.cc" break; - case 317: // host_reservation_identifiers_list: host_reservation_identifiers_list "," -#line 1304 "dhcp6_parser.yy" + case 319: // host_reservation_identifiers_list: host_reservation_identifiers_list "," +#line 1312 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2376 "dhcp6_parser.cc" +#line 2386 "dhcp6_parser.cc" break; - case 321: // hw_address_id: "hw-address" -#line 1314 "dhcp6_parser.yy" + case 323: // hw_address_id: "hw-address" +#line 1322 "dhcp6_parser.yy" { ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(hwaddr); } -#line 2385 "dhcp6_parser.cc" +#line 2395 "dhcp6_parser.cc" break; - case 322: // flex_id: "flex-id" -#line 1319 "dhcp6_parser.yy" + case 324: // flex_id: "flex-id" +#line 1327 "dhcp6_parser.yy" { ElementPtr flex_id(new StringElement("flex-id", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(flex_id); } -#line 2394 "dhcp6_parser.cc" +#line 2404 "dhcp6_parser.cc" break; - case 323: // $@53: %empty -#line 1326 "dhcp6_parser.yy" + case 325: // $@53: %empty +#line 1334 "dhcp6_parser.yy" { ctx.unique("relay-supplied-options", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -2402,20 +2412,20 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.NO_KEYWORD); } -#line 2406 "dhcp6_parser.cc" +#line 2416 "dhcp6_parser.cc" break; - case 324: // relay_supplied_options: "relay-supplied-options" $@53 ":" "[" list_content "]" -#line 1332 "dhcp6_parser.yy" + case 326: // relay_supplied_options: "relay-supplied-options" $@53 ":" "[" list_content "]" +#line 1340 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 2415 "dhcp6_parser.cc" +#line 2425 "dhcp6_parser.cc" break; - case 325: // $@54: %empty -#line 1339 "dhcp6_parser.yy" + case 327: // $@54: %empty +#line 1347 "dhcp6_parser.yy" { ctx.unique("multi-threading", ctx.loc2pos(yystack_[0].location)); ElementPtr mt(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -2423,60 +2433,60 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(mt); ctx.enter(ctx.DHCP_MULTI_THREADING); } -#line 2427 "dhcp6_parser.cc" +#line 2437 "dhcp6_parser.cc" break; - case 326: // dhcp_multi_threading: "multi-threading" $@54 ":" "{" multi_threading_params "}" -#line 1345 "dhcp6_parser.yy" + case 328: // dhcp_multi_threading: "multi-threading" $@54 ":" "{" multi_threading_params "}" +#line 1353 "dhcp6_parser.yy" { // The enable parameter is required. ctx.require("enable-multi-threading", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); ctx.leave(); } -#line 2438 "dhcp6_parser.cc" +#line 2448 "dhcp6_parser.cc" break; - case 329: // multi_threading_params: multi_threading_params "," -#line 1354 "dhcp6_parser.yy" + case 331: // multi_threading_params: multi_threading_params "," +#line 1362 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2446 "dhcp6_parser.cc" +#line 2456 "dhcp6_parser.cc" break; - case 336: // enable_multi_threading: "enable-multi-threading" ":" "boolean" -#line 1367 "dhcp6_parser.yy" + case 338: // enable_multi_threading: "enable-multi-threading" ":" "boolean" +#line 1375 "dhcp6_parser.yy" { ctx.unique("enable-multi-threading", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("enable-multi-threading", b); } -#line 2456 "dhcp6_parser.cc" +#line 2466 "dhcp6_parser.cc" break; - case 337: // thread_pool_size: "thread-pool-size" ":" "integer" -#line 1373 "dhcp6_parser.yy" + case 339: // thread_pool_size: "thread-pool-size" ":" "integer" +#line 1381 "dhcp6_parser.yy" { ctx.unique("thread-pool-size", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("thread-pool-size", prf); } -#line 2466 "dhcp6_parser.cc" +#line 2476 "dhcp6_parser.cc" break; - case 338: // packet_queue_size: "packet-queue-size" ":" "integer" -#line 1379 "dhcp6_parser.yy" + case 340: // packet_queue_size: "packet-queue-size" ":" "integer" +#line 1387 "dhcp6_parser.yy" { ctx.unique("packet-queue-size", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("packet-queue-size", prf); } -#line 2476 "dhcp6_parser.cc" +#line 2486 "dhcp6_parser.cc" break; - case 339: // $@55: %empty -#line 1385 "dhcp6_parser.yy" + case 341: // $@55: %empty +#line 1393 "dhcp6_parser.yy" { ctx.unique("hooks-libraries", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -2484,113 +2494,113 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.HOOKS_LIBRARIES); } -#line 2488 "dhcp6_parser.cc" +#line 2498 "dhcp6_parser.cc" break; - case 340: // hooks_libraries: "hooks-libraries" $@55 ":" "[" hooks_libraries_list "]" -#line 1391 "dhcp6_parser.yy" + case 342: // hooks_libraries: "hooks-libraries" $@55 ":" "[" hooks_libraries_list "]" +#line 1399 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 2497 "dhcp6_parser.cc" +#line 2507 "dhcp6_parser.cc" break; - case 345: // not_empty_hooks_libraries_list: not_empty_hooks_libraries_list "," -#line 1402 "dhcp6_parser.yy" + case 347: // not_empty_hooks_libraries_list: not_empty_hooks_libraries_list "," +#line 1410 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2505 "dhcp6_parser.cc" +#line 2515 "dhcp6_parser.cc" break; - case 346: // $@56: %empty -#line 1407 "dhcp6_parser.yy" + case 348: // $@56: %empty +#line 1415 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 2515 "dhcp6_parser.cc" +#line 2525 "dhcp6_parser.cc" break; - case 347: // hooks_library: "{" $@56 hooks_params "}" -#line 1411 "dhcp6_parser.yy" + case 349: // hooks_library: "{" $@56 hooks_params "}" +#line 1419 "dhcp6_parser.yy" { // The library hooks parameter is required ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 2525 "dhcp6_parser.cc" +#line 2535 "dhcp6_parser.cc" break; - case 348: // $@57: %empty -#line 1417 "dhcp6_parser.yy" + case 350: // $@57: %empty +#line 1425 "dhcp6_parser.yy" { // Parse the hooks-libraries list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 2535 "dhcp6_parser.cc" +#line 2545 "dhcp6_parser.cc" break; - case 349: // sub_hooks_library: "{" $@57 hooks_params "}" -#line 1421 "dhcp6_parser.yy" + case 351: // sub_hooks_library: "{" $@57 hooks_params "}" +#line 1429 "dhcp6_parser.yy" { // The library hooks parameter is required ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 2545 "dhcp6_parser.cc" +#line 2555 "dhcp6_parser.cc" break; - case 352: // hooks_params: hooks_params "," -#line 1429 "dhcp6_parser.yy" + case 354: // hooks_params: hooks_params "," +#line 1437 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2553 "dhcp6_parser.cc" +#line 2563 "dhcp6_parser.cc" break; - case 356: // $@58: %empty -#line 1439 "dhcp6_parser.yy" + case 358: // $@58: %empty +#line 1447 "dhcp6_parser.yy" { ctx.unique("library", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2562 "dhcp6_parser.cc" +#line 2572 "dhcp6_parser.cc" break; - case 357: // library: "library" $@58 ":" "constant string" -#line 1442 "dhcp6_parser.yy" + case 359: // library: "library" $@58 ":" "constant string" +#line 1450 "dhcp6_parser.yy" { ElementPtr lib(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("library", lib); ctx.leave(); } -#line 2572 "dhcp6_parser.cc" +#line 2582 "dhcp6_parser.cc" break; - case 358: // $@59: %empty -#line 1448 "dhcp6_parser.yy" + case 360: // $@59: %empty +#line 1456 "dhcp6_parser.yy" { ctx.unique("parameters", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2581 "dhcp6_parser.cc" +#line 2591 "dhcp6_parser.cc" break; - case 359: // parameters: "parameters" $@59 ":" map_value -#line 1451 "dhcp6_parser.yy" + case 361: // parameters: "parameters" $@59 ":" map_value +#line 1459 "dhcp6_parser.yy" { ctx.stack_.back()->set("parameters", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 2590 "dhcp6_parser.cc" +#line 2600 "dhcp6_parser.cc" break; - case 360: // $@60: %empty -#line 1457 "dhcp6_parser.yy" + case 362: // $@60: %empty +#line 1465 "dhcp6_parser.yy" { ctx.unique("expired-leases-processing", ctx.loc2pos(yystack_[0].location)); ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -2598,89 +2608,89 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(m); ctx.enter(ctx.EXPIRED_LEASES_PROCESSING); } -#line 2602 "dhcp6_parser.cc" +#line 2612 "dhcp6_parser.cc" break; - case 361: // expired_leases_processing: "expired-leases-processing" $@60 ":" "{" expired_leases_params "}" -#line 1463 "dhcp6_parser.yy" + case 363: // expired_leases_processing: "expired-leases-processing" $@60 ":" "{" expired_leases_params "}" +#line 1471 "dhcp6_parser.yy" { // No expired lease parameter is required ctx.stack_.pop_back(); ctx.leave(); } -#line 2612 "dhcp6_parser.cc" +#line 2622 "dhcp6_parser.cc" break; - case 364: // expired_leases_params: expired_leases_params "," -#line 1471 "dhcp6_parser.yy" + case 366: // expired_leases_params: expired_leases_params "," +#line 1479 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2620 "dhcp6_parser.cc" +#line 2630 "dhcp6_parser.cc" break; - case 371: // reclaim_timer_wait_time: "reclaim-timer-wait-time" ":" "integer" -#line 1484 "dhcp6_parser.yy" + case 373: // reclaim_timer_wait_time: "reclaim-timer-wait-time" ":" "integer" +#line 1492 "dhcp6_parser.yy" { ctx.unique("reclaim-timer-wait-time", ctx.loc2pos(yystack_[2].location)); ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("reclaim-timer-wait-time", value); } -#line 2630 "dhcp6_parser.cc" +#line 2640 "dhcp6_parser.cc" break; - case 372: // flush_reclaimed_timer_wait_time: "flush-reclaimed-timer-wait-time" ":" "integer" -#line 1490 "dhcp6_parser.yy" + case 374: // flush_reclaimed_timer_wait_time: "flush-reclaimed-timer-wait-time" ":" "integer" +#line 1498 "dhcp6_parser.yy" { ctx.unique("flush-reclaimed-timer-wait-time", ctx.loc2pos(yystack_[2].location)); ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("flush-reclaimed-timer-wait-time", value); } -#line 2640 "dhcp6_parser.cc" +#line 2650 "dhcp6_parser.cc" break; - case 373: // hold_reclaimed_time: "hold-reclaimed-time" ":" "integer" -#line 1496 "dhcp6_parser.yy" + case 375: // hold_reclaimed_time: "hold-reclaimed-time" ":" "integer" +#line 1504 "dhcp6_parser.yy" { ctx.unique("hold-reclaimed-time", ctx.loc2pos(yystack_[2].location)); ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hold-reclaimed-time", value); } -#line 2650 "dhcp6_parser.cc" +#line 2660 "dhcp6_parser.cc" break; - case 374: // max_reclaim_leases: "max-reclaim-leases" ":" "integer" -#line 1502 "dhcp6_parser.yy" + case 376: // max_reclaim_leases: "max-reclaim-leases" ":" "integer" +#line 1510 "dhcp6_parser.yy" { ctx.unique("max-reclaim-leases", ctx.loc2pos(yystack_[2].location)); ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-reclaim-leases", value); } -#line 2660 "dhcp6_parser.cc" +#line 2670 "dhcp6_parser.cc" break; - case 375: // max_reclaim_time: "max-reclaim-time" ":" "integer" -#line 1508 "dhcp6_parser.yy" + case 377: // max_reclaim_time: "max-reclaim-time" ":" "integer" +#line 1516 "dhcp6_parser.yy" { ctx.unique("max-reclaim-time", ctx.loc2pos(yystack_[2].location)); ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-reclaim-time", value); } -#line 2670 "dhcp6_parser.cc" +#line 2680 "dhcp6_parser.cc" break; - case 376: // unwarned_reclaim_cycles: "unwarned-reclaim-cycles" ":" "integer" -#line 1514 "dhcp6_parser.yy" + case 378: // unwarned_reclaim_cycles: "unwarned-reclaim-cycles" ":" "integer" +#line 1522 "dhcp6_parser.yy" { ctx.unique("unwarned-reclaim-cycles", ctx.loc2pos(yystack_[2].location)); ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("unwarned-reclaim-cycles", value); } -#line 2680 "dhcp6_parser.cc" +#line 2690 "dhcp6_parser.cc" break; - case 377: // $@61: %empty -#line 1523 "dhcp6_parser.yy" + case 379: // $@61: %empty +#line 1531 "dhcp6_parser.yy" { ctx.unique("subnet6", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -2688,38 +2698,38 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.SUBNET6); } -#line 2692 "dhcp6_parser.cc" +#line 2702 "dhcp6_parser.cc" break; - case 378: // subnet6_list: "subnet6" $@61 ":" "[" subnet6_list_content "]" -#line 1529 "dhcp6_parser.yy" + case 380: // subnet6_list: "subnet6" $@61 ":" "[" subnet6_list_content "]" +#line 1537 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 2701 "dhcp6_parser.cc" +#line 2711 "dhcp6_parser.cc" break; - case 383: // not_empty_subnet6_list: not_empty_subnet6_list "," -#line 1543 "dhcp6_parser.yy" + case 385: // not_empty_subnet6_list: not_empty_subnet6_list "," +#line 1551 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2709 "dhcp6_parser.cc" +#line 2719 "dhcp6_parser.cc" break; - case 384: // $@62: %empty -#line 1552 "dhcp6_parser.yy" + case 386: // $@62: %empty +#line 1560 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 2719 "dhcp6_parser.cc" +#line 2729 "dhcp6_parser.cc" break; - case 385: // subnet6: "{" $@62 subnet6_params "}" -#line 1556 "dhcp6_parser.yy" + case 387: // subnet6: "{" $@62 subnet6_params "}" +#line 1564 "dhcp6_parser.yy" { // Once we reached this place, the subnet parsing is now complete. // If we want to, we can implement default values here. @@ -2741,115 +2751,115 @@ namespace isc { namespace dhcp { ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 2745 "dhcp6_parser.cc" +#line 2755 "dhcp6_parser.cc" break; - case 386: // $@63: %empty -#line 1578 "dhcp6_parser.yy" + case 388: // $@63: %empty +#line 1586 "dhcp6_parser.yy" { // Parse the subnet6 list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 2755 "dhcp6_parser.cc" +#line 2765 "dhcp6_parser.cc" break; - case 387: // sub_subnet6: "{" $@63 subnet6_params "}" -#line 1582 "dhcp6_parser.yy" + case 389: // sub_subnet6: "{" $@63 subnet6_params "}" +#line 1590 "dhcp6_parser.yy" { // The subnet subnet6 parameter is required ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 2765 "dhcp6_parser.cc" +#line 2775 "dhcp6_parser.cc" break; - case 390: // subnet6_params: subnet6_params "," -#line 1591 "dhcp6_parser.yy" + case 392: // subnet6_params: subnet6_params "," +#line 1599 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2773 "dhcp6_parser.cc" +#line 2783 "dhcp6_parser.cc" break; - case 438: // $@64: %empty -#line 1646 "dhcp6_parser.yy" + case 440: // $@64: %empty +#line 1654 "dhcp6_parser.yy" { ctx.unique("subnet", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2782 "dhcp6_parser.cc" +#line 2792 "dhcp6_parser.cc" break; - case 439: // subnet: "subnet" $@64 ":" "constant string" -#line 1649 "dhcp6_parser.yy" + case 441: // subnet: "subnet" $@64 ":" "constant string" +#line 1657 "dhcp6_parser.yy" { ElementPtr subnet(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("subnet", subnet); ctx.leave(); } -#line 2792 "dhcp6_parser.cc" +#line 2802 "dhcp6_parser.cc" break; - case 440: // $@65: %empty -#line 1655 "dhcp6_parser.yy" + case 442: // $@65: %empty +#line 1663 "dhcp6_parser.yy" { ctx.unique("interface", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2801 "dhcp6_parser.cc" +#line 2811 "dhcp6_parser.cc" break; - case 441: // interface: "interface" $@65 ":" "constant string" -#line 1658 "dhcp6_parser.yy" + case 443: // interface: "interface" $@65 ":" "constant string" +#line 1666 "dhcp6_parser.yy" { ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("interface", iface); ctx.leave(); } -#line 2811 "dhcp6_parser.cc" +#line 2821 "dhcp6_parser.cc" break; - case 442: // $@66: %empty -#line 1664 "dhcp6_parser.yy" + case 444: // $@66: %empty +#line 1672 "dhcp6_parser.yy" { ctx.unique("interface-id", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2820 "dhcp6_parser.cc" +#line 2830 "dhcp6_parser.cc" break; - case 443: // interface_id: "interface-id" $@66 ":" "constant string" -#line 1667 "dhcp6_parser.yy" + case 445: // interface_id: "interface-id" $@66 ":" "constant string" +#line 1675 "dhcp6_parser.yy" { ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("interface-id", iface); ctx.leave(); } -#line 2830 "dhcp6_parser.cc" +#line 2840 "dhcp6_parser.cc" break; - case 444: // $@67: %empty -#line 1673 "dhcp6_parser.yy" + case 446: // $@67: %empty +#line 1681 "dhcp6_parser.yy" { ctx.unique("client-class", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 2839 "dhcp6_parser.cc" +#line 2849 "dhcp6_parser.cc" break; - case 445: // client_class: "client-class" $@67 ":" "constant string" -#line 1676 "dhcp6_parser.yy" + case 447: // client_class: "client-class" $@67 ":" "constant string" +#line 1684 "dhcp6_parser.yy" { ElementPtr cls(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("client-class", cls); ctx.leave(); } -#line 2849 "dhcp6_parser.cc" +#line 2859 "dhcp6_parser.cc" break; - case 446: // $@68: %empty -#line 1682 "dhcp6_parser.yy" + case 448: // $@68: %empty +#line 1690 "dhcp6_parser.yy" { ctx.unique("require-client-classes", ctx.loc2pos(yystack_[0].location)); ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -2857,112 +2867,112 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(c); ctx.enter(ctx.NO_KEYWORD); } -#line 2861 "dhcp6_parser.cc" +#line 2871 "dhcp6_parser.cc" break; - case 447: // require_client_classes: "require-client-classes" $@68 ":" list_strings -#line 1688 "dhcp6_parser.yy" + case 449: // require_client_classes: "require-client-classes" $@68 ":" list_strings +#line 1696 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 2870 "dhcp6_parser.cc" +#line 2880 "dhcp6_parser.cc" break; - case 448: // reservations_global: "reservations-global" ":" "boolean" -#line 1693 "dhcp6_parser.yy" + case 450: // reservations_global: "reservations-global" ":" "boolean" +#line 1701 "dhcp6_parser.yy" { ctx.unique("reservations-global", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("reservations-global", b); } -#line 2880 "dhcp6_parser.cc" +#line 2890 "dhcp6_parser.cc" break; - case 449: // reservations_in_subnet: "reservations-in-subnet" ":" "boolean" -#line 1699 "dhcp6_parser.yy" + case 451: // reservations_in_subnet: "reservations-in-subnet" ":" "boolean" +#line 1707 "dhcp6_parser.yy" { ctx.unique("reservations-in-subnet", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("reservations-in-subnet", b); } -#line 2890 "dhcp6_parser.cc" +#line 2900 "dhcp6_parser.cc" break; - case 450: // reservations_out_of_pool: "reservations-out-of-pool" ":" "boolean" -#line 1705 "dhcp6_parser.yy" + case 452: // reservations_out_of_pool: "reservations-out-of-pool" ":" "boolean" +#line 1713 "dhcp6_parser.yy" { ctx.unique("reservations-out-of-pool", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("reservations-out-of-pool", b); } -#line 2900 "dhcp6_parser.cc" +#line 2910 "dhcp6_parser.cc" break; - case 451: // $@69: %empty -#line 1711 "dhcp6_parser.yy" + case 453: // $@69: %empty +#line 1719 "dhcp6_parser.yy" { ctx.unique("reservation-mode", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.RESERVATION_MODE); } -#line 2909 "dhcp6_parser.cc" +#line 2919 "dhcp6_parser.cc" break; - case 452: // reservation_mode: "reservation-mode" $@69 ":" hr_mode -#line 1714 "dhcp6_parser.yy" + case 454: // reservation_mode: "reservation-mode" $@69 ":" hr_mode +#line 1722 "dhcp6_parser.yy" { ctx.stack_.back()->set("reservation-mode", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 2918 "dhcp6_parser.cc" +#line 2928 "dhcp6_parser.cc" break; - case 453: // hr_mode: "disabled" -#line 1719 "dhcp6_parser.yy" + case 455: // hr_mode: "disabled" +#line 1727 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("disabled", ctx.loc2pos(yystack_[0].location))); } -#line 2924 "dhcp6_parser.cc" +#line 2934 "dhcp6_parser.cc" break; - case 454: // hr_mode: "out-of-pool" -#line 1720 "dhcp6_parser.yy" + case 456: // hr_mode: "out-of-pool" +#line 1728 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(yystack_[0].location))); } -#line 2930 "dhcp6_parser.cc" +#line 2940 "dhcp6_parser.cc" break; - case 455: // hr_mode: "global" -#line 1721 "dhcp6_parser.yy" + case 457: // hr_mode: "global" +#line 1729 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("global", ctx.loc2pos(yystack_[0].location))); } -#line 2936 "dhcp6_parser.cc" +#line 2946 "dhcp6_parser.cc" break; - case 456: // hr_mode: "all" -#line 1722 "dhcp6_parser.yy" + case 458: // hr_mode: "all" +#line 1730 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("all", ctx.loc2pos(yystack_[0].location))); } -#line 2942 "dhcp6_parser.cc" +#line 2952 "dhcp6_parser.cc" break; - case 457: // id: "id" ":" "integer" -#line 1725 "dhcp6_parser.yy" + case 459: // id: "id" ":" "integer" +#line 1733 "dhcp6_parser.yy" { ctx.unique("id", ctx.loc2pos(yystack_[2].location)); ElementPtr id(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("id", id); } -#line 2952 "dhcp6_parser.cc" +#line 2962 "dhcp6_parser.cc" break; - case 458: // rapid_commit: "rapid-commit" ":" "boolean" -#line 1731 "dhcp6_parser.yy" + case 460: // rapid_commit: "rapid-commit" ":" "boolean" +#line 1739 "dhcp6_parser.yy" { ctx.unique("rapid-commit", ctx.loc2pos(yystack_[2].location)); ElementPtr rc(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("rapid-commit", rc); } -#line 2962 "dhcp6_parser.cc" +#line 2972 "dhcp6_parser.cc" break; - case 459: // $@70: %empty -#line 1739 "dhcp6_parser.yy" + case 461: // $@70: %empty +#line 1747 "dhcp6_parser.yy" { ctx.unique("shared-networks", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -2970,54 +2980,54 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.SHARED_NETWORK); } -#line 2974 "dhcp6_parser.cc" +#line 2984 "dhcp6_parser.cc" break; - case 460: // shared_networks: "shared-networks" $@70 ":" "[" shared_networks_content "]" -#line 1745 "dhcp6_parser.yy" + case 462: // shared_networks: "shared-networks" $@70 ":" "[" shared_networks_content "]" +#line 1753 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 2983 "dhcp6_parser.cc" +#line 2993 "dhcp6_parser.cc" break; - case 465: // shared_networks_list: shared_networks_list "," -#line 1758 "dhcp6_parser.yy" + case 467: // shared_networks_list: shared_networks_list "," +#line 1766 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 2991 "dhcp6_parser.cc" +#line 3001 "dhcp6_parser.cc" break; - case 466: // $@71: %empty -#line 1763 "dhcp6_parser.yy" + case 468: // $@71: %empty +#line 1771 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 3001 "dhcp6_parser.cc" +#line 3011 "dhcp6_parser.cc" break; - case 467: // shared_network: "{" $@71 shared_network_params "}" -#line 1767 "dhcp6_parser.yy" + case 469: // shared_network: "{" $@71 shared_network_params "}" +#line 1775 "dhcp6_parser.yy" { ctx.stack_.pop_back(); } -#line 3009 "dhcp6_parser.cc" +#line 3019 "dhcp6_parser.cc" break; - case 470: // shared_network_params: shared_network_params "," -#line 1773 "dhcp6_parser.yy" + case 472: // shared_network_params: shared_network_params "," +#line 1781 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3017 "dhcp6_parser.cc" +#line 3027 "dhcp6_parser.cc" break; - case 515: // $@72: %empty -#line 1828 "dhcp6_parser.yy" + case 517: // $@72: %empty +#line 1836 "dhcp6_parser.yy" { ctx.unique("option-def", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3025,55 +3035,55 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.OPTION_DEF); } -#line 3029 "dhcp6_parser.cc" +#line 3039 "dhcp6_parser.cc" break; - case 516: // option_def_list: "option-def" $@72 ":" "[" option_def_list_content "]" -#line 1834 "dhcp6_parser.yy" + case 518: // option_def_list: "option-def" $@72 ":" "[" option_def_list_content "]" +#line 1842 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3038 "dhcp6_parser.cc" +#line 3048 "dhcp6_parser.cc" break; - case 517: // $@73: %empty -#line 1842 "dhcp6_parser.yy" + case 519: // $@73: %empty +#line 1850 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 3047 "dhcp6_parser.cc" +#line 3057 "dhcp6_parser.cc" break; - case 518: // sub_option_def_list: "{" $@73 option_def_list "}" -#line 1845 "dhcp6_parser.yy" + case 520: // sub_option_def_list: "{" $@73 option_def_list "}" +#line 1853 "dhcp6_parser.yy" { // parsing completed } -#line 3055 "dhcp6_parser.cc" +#line 3065 "dhcp6_parser.cc" break; - case 523: // not_empty_option_def_list: not_empty_option_def_list "," -#line 1857 "dhcp6_parser.yy" + case 525: // not_empty_option_def_list: not_empty_option_def_list "," +#line 1865 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3063 "dhcp6_parser.cc" +#line 3073 "dhcp6_parser.cc" break; - case 524: // $@74: %empty -#line 1864 "dhcp6_parser.yy" + case 526: // $@74: %empty +#line 1872 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 3073 "dhcp6_parser.cc" +#line 3083 "dhcp6_parser.cc" break; - case 525: // option_def_entry: "{" $@74 option_def_params "}" -#line 1868 "dhcp6_parser.yy" + case 527: // option_def_entry: "{" $@74 option_def_params "}" +#line 1876 "dhcp6_parser.yy" { // The name, code and type option def parameters are required. ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); @@ -3081,21 +3091,21 @@ namespace isc { namespace dhcp { ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 3085 "dhcp6_parser.cc" +#line 3095 "dhcp6_parser.cc" break; - case 526: // $@75: %empty -#line 1879 "dhcp6_parser.yy" + case 528: // $@75: %empty +#line 1887 "dhcp6_parser.yy" { // Parse the option-def list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 3095 "dhcp6_parser.cc" +#line 3105 "dhcp6_parser.cc" break; - case 527: // sub_option_def: "{" $@75 option_def_params "}" -#line 1883 "dhcp6_parser.yy" + case 529: // sub_option_def: "{" $@75 option_def_params "}" +#line 1891 "dhcp6_parser.yy" { // The name, code and type option def parameters are required. ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); @@ -3103,115 +3113,115 @@ namespace isc { namespace dhcp { ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 3107 "dhcp6_parser.cc" +#line 3117 "dhcp6_parser.cc" break; - case 532: // not_empty_option_def_params: not_empty_option_def_params "," -#line 1899 "dhcp6_parser.yy" + case 534: // not_empty_option_def_params: not_empty_option_def_params "," +#line 1907 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3115 "dhcp6_parser.cc" +#line 3125 "dhcp6_parser.cc" break; - case 544: // code: "code" ":" "integer" -#line 1918 "dhcp6_parser.yy" + case 546: // code: "code" ":" "integer" +#line 1926 "dhcp6_parser.yy" { ctx.unique("code", ctx.loc2pos(yystack_[2].location)); ElementPtr code(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("code", code); } -#line 3125 "dhcp6_parser.cc" +#line 3135 "dhcp6_parser.cc" break; - case 546: // $@76: %empty -#line 1926 "dhcp6_parser.yy" + case 548: // $@76: %empty +#line 1934 "dhcp6_parser.yy" { ctx.unique("type", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3134 "dhcp6_parser.cc" +#line 3144 "dhcp6_parser.cc" break; - case 547: // option_def_type: "type" $@76 ":" "constant string" -#line 1929 "dhcp6_parser.yy" + case 549: // option_def_type: "type" $@76 ":" "constant string" +#line 1937 "dhcp6_parser.yy" { ElementPtr prf(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("type", prf); ctx.leave(); } -#line 3144 "dhcp6_parser.cc" +#line 3154 "dhcp6_parser.cc" break; - case 548: // $@77: %empty -#line 1935 "dhcp6_parser.yy" + case 550: // $@77: %empty +#line 1943 "dhcp6_parser.yy" { ctx.unique("record-types", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3153 "dhcp6_parser.cc" +#line 3163 "dhcp6_parser.cc" break; - case 549: // option_def_record_types: "record-types" $@77 ":" "constant string" -#line 1938 "dhcp6_parser.yy" + case 551: // option_def_record_types: "record-types" $@77 ":" "constant string" +#line 1946 "dhcp6_parser.yy" { ElementPtr rtypes(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("record-types", rtypes); ctx.leave(); } -#line 3163 "dhcp6_parser.cc" +#line 3173 "dhcp6_parser.cc" break; - case 550: // $@78: %empty -#line 1944 "dhcp6_parser.yy" + case 552: // $@78: %empty +#line 1952 "dhcp6_parser.yy" { ctx.unique("space", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3172 "dhcp6_parser.cc" +#line 3182 "dhcp6_parser.cc" break; - case 551: // space: "space" $@78 ":" "constant string" -#line 1947 "dhcp6_parser.yy" + case 553: // space: "space" $@78 ":" "constant string" +#line 1955 "dhcp6_parser.yy" { ElementPtr space(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("space", space); ctx.leave(); } -#line 3182 "dhcp6_parser.cc" +#line 3192 "dhcp6_parser.cc" break; - case 553: // $@79: %empty -#line 1955 "dhcp6_parser.yy" + case 555: // $@79: %empty +#line 1963 "dhcp6_parser.yy" { ctx.unique("encapsulate", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3191 "dhcp6_parser.cc" +#line 3201 "dhcp6_parser.cc" break; - case 554: // option_def_encapsulate: "encapsulate" $@79 ":" "constant string" -#line 1958 "dhcp6_parser.yy" + case 556: // option_def_encapsulate: "encapsulate" $@79 ":" "constant string" +#line 1966 "dhcp6_parser.yy" { ElementPtr encap(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("encapsulate", encap); ctx.leave(); } -#line 3201 "dhcp6_parser.cc" +#line 3211 "dhcp6_parser.cc" break; - case 555: // option_def_array: "array" ":" "boolean" -#line 1964 "dhcp6_parser.yy" + case 557: // option_def_array: "array" ":" "boolean" +#line 1972 "dhcp6_parser.yy" { ctx.unique("array", ctx.loc2pos(yystack_[2].location)); ElementPtr array(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("array", array); } -#line 3211 "dhcp6_parser.cc" +#line 3221 "dhcp6_parser.cc" break; - case 556: // $@80: %empty -#line 1974 "dhcp6_parser.yy" + case 558: // $@80: %empty +#line 1982 "dhcp6_parser.yy" { ctx.unique("option-data", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3219,123 +3229,123 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.OPTION_DATA); } -#line 3223 "dhcp6_parser.cc" +#line 3233 "dhcp6_parser.cc" break; - case 557: // option_data_list: "option-data" $@80 ":" "[" option_data_list_content "]" -#line 1980 "dhcp6_parser.yy" + case 559: // option_data_list: "option-data" $@80 ":" "[" option_data_list_content "]" +#line 1988 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3232 "dhcp6_parser.cc" +#line 3242 "dhcp6_parser.cc" break; - case 562: // not_empty_option_data_list: not_empty_option_data_list "," -#line 1995 "dhcp6_parser.yy" + case 564: // not_empty_option_data_list: not_empty_option_data_list "," +#line 2003 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3240 "dhcp6_parser.cc" +#line 3250 "dhcp6_parser.cc" break; - case 563: // $@81: %empty -#line 2002 "dhcp6_parser.yy" + case 565: // $@81: %empty +#line 2010 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 3250 "dhcp6_parser.cc" +#line 3260 "dhcp6_parser.cc" break; - case 564: // option_data_entry: "{" $@81 option_data_params "}" -#line 2006 "dhcp6_parser.yy" + case 566: // option_data_entry: "{" $@81 option_data_params "}" +#line 2014 "dhcp6_parser.yy" { /// @todo: the code or name parameters are required. ctx.stack_.pop_back(); } -#line 3259 "dhcp6_parser.cc" +#line 3269 "dhcp6_parser.cc" break; - case 565: // $@82: %empty -#line 2014 "dhcp6_parser.yy" + case 567: // $@82: %empty +#line 2022 "dhcp6_parser.yy" { // Parse the option-data list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 3269 "dhcp6_parser.cc" +#line 3279 "dhcp6_parser.cc" break; - case 566: // sub_option_data: "{" $@82 option_data_params "}" -#line 2018 "dhcp6_parser.yy" + case 568: // sub_option_data: "{" $@82 option_data_params "}" +#line 2026 "dhcp6_parser.yy" { /// @todo: the code or name parameters are required. // parsing completed } -#line 3278 "dhcp6_parser.cc" +#line 3288 "dhcp6_parser.cc" break; - case 571: // not_empty_option_data_params: not_empty_option_data_params "," -#line 2034 "dhcp6_parser.yy" + case 573: // not_empty_option_data_params: not_empty_option_data_params "," +#line 2042 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3286 "dhcp6_parser.cc" +#line 3296 "dhcp6_parser.cc" break; - case 583: // $@83: %empty -#line 2055 "dhcp6_parser.yy" + case 585: // $@83: %empty +#line 2063 "dhcp6_parser.yy" { ctx.unique("data", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3295 "dhcp6_parser.cc" +#line 3305 "dhcp6_parser.cc" break; - case 584: // option_data_data: "data" $@83 ":" "constant string" -#line 2058 "dhcp6_parser.yy" + case 586: // option_data_data: "data" $@83 ":" "constant string" +#line 2066 "dhcp6_parser.yy" { ElementPtr data(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("data", data); ctx.leave(); } -#line 3305 "dhcp6_parser.cc" +#line 3315 "dhcp6_parser.cc" break; - case 587: // option_data_csv_format: "csv-format" ":" "boolean" -#line 2068 "dhcp6_parser.yy" + case 589: // option_data_csv_format: "csv-format" ":" "boolean" +#line 2076 "dhcp6_parser.yy" { ctx.unique("csv-format", ctx.loc2pos(yystack_[2].location)); ElementPtr csv(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("csv-format", csv); } -#line 3315 "dhcp6_parser.cc" +#line 3325 "dhcp6_parser.cc" break; - case 588: // option_data_always_send: "always-send" ":" "boolean" -#line 2074 "dhcp6_parser.yy" + case 590: // option_data_always_send: "always-send" ":" "boolean" +#line 2082 "dhcp6_parser.yy" { ctx.unique("always-send", ctx.loc2pos(yystack_[2].location)); ElementPtr persist(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("always-send", persist); } -#line 3325 "dhcp6_parser.cc" +#line 3335 "dhcp6_parser.cc" break; - case 589: // option_data_never_send: "never-send" ":" "boolean" -#line 2080 "dhcp6_parser.yy" + case 591: // option_data_never_send: "never-send" ":" "boolean" +#line 2088 "dhcp6_parser.yy" { ctx.unique("never-send", ctx.loc2pos(yystack_[2].location)); ElementPtr cancel(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("never-send", cancel); } -#line 3335 "dhcp6_parser.cc" +#line 3345 "dhcp6_parser.cc" break; - case 590: // $@84: %empty -#line 2089 "dhcp6_parser.yy" + case 592: // $@84: %empty +#line 2097 "dhcp6_parser.yy" { ctx.unique("pools", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3343,113 +3353,113 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.POOLS); } -#line 3347 "dhcp6_parser.cc" +#line 3357 "dhcp6_parser.cc" break; - case 591: // pools_list: "pools" $@84 ":" "[" pools_list_content "]" -#line 2095 "dhcp6_parser.yy" + case 593: // pools_list: "pools" $@84 ":" "[" pools_list_content "]" +#line 2103 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3356 "dhcp6_parser.cc" +#line 3366 "dhcp6_parser.cc" break; - case 596: // not_empty_pools_list: not_empty_pools_list "," -#line 2108 "dhcp6_parser.yy" + case 598: // not_empty_pools_list: not_empty_pools_list "," +#line 2116 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3364 "dhcp6_parser.cc" +#line 3374 "dhcp6_parser.cc" break; - case 597: // $@85: %empty -#line 2113 "dhcp6_parser.yy" + case 599: // $@85: %empty +#line 2121 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 3374 "dhcp6_parser.cc" +#line 3384 "dhcp6_parser.cc" break; - case 598: // pool_list_entry: "{" $@85 pool_params "}" -#line 2117 "dhcp6_parser.yy" + case 600: // pool_list_entry: "{" $@85 pool_params "}" +#line 2125 "dhcp6_parser.yy" { // The pool parameter is required. ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 3384 "dhcp6_parser.cc" +#line 3394 "dhcp6_parser.cc" break; - case 599: // $@86: %empty -#line 2123 "dhcp6_parser.yy" + case 601: // $@86: %empty +#line 2131 "dhcp6_parser.yy" { // Parse the pool list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 3394 "dhcp6_parser.cc" +#line 3404 "dhcp6_parser.cc" break; - case 600: // sub_pool6: "{" $@86 pool_params "}" -#line 2127 "dhcp6_parser.yy" + case 602: // sub_pool6: "{" $@86 pool_params "}" +#line 2135 "dhcp6_parser.yy" { // The pool parameter is required. ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 3404 "dhcp6_parser.cc" +#line 3414 "dhcp6_parser.cc" break; - case 603: // pool_params: pool_params "," -#line 2135 "dhcp6_parser.yy" + case 605: // pool_params: pool_params "," +#line 2143 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3412 "dhcp6_parser.cc" +#line 3422 "dhcp6_parser.cc" break; - case 612: // $@87: %empty -#line 2150 "dhcp6_parser.yy" + case 614: // $@87: %empty +#line 2158 "dhcp6_parser.yy" { ctx.unique("pool", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3421 "dhcp6_parser.cc" +#line 3431 "dhcp6_parser.cc" break; - case 613: // pool_entry: "pool" $@87 ":" "constant string" -#line 2153 "dhcp6_parser.yy" + case 615: // pool_entry: "pool" $@87 ":" "constant string" +#line 2161 "dhcp6_parser.yy" { ElementPtr pool(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("pool", pool); ctx.leave(); } -#line 3431 "dhcp6_parser.cc" +#line 3441 "dhcp6_parser.cc" break; - case 614: // pool_id: "pool-id" ":" "integer" -#line 2159 "dhcp6_parser.yy" + case 616: // pool_id: "pool-id" ":" "integer" +#line 2167 "dhcp6_parser.yy" { ctx.unique("pool-id", ctx.loc2pos(yystack_[2].location)); ElementPtr id(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("pool-id", id); } -#line 3441 "dhcp6_parser.cc" +#line 3451 "dhcp6_parser.cc" break; - case 615: // $@88: %empty -#line 2165 "dhcp6_parser.yy" + case 617: // $@88: %empty +#line 2173 "dhcp6_parser.yy" { ctx.enter(ctx.NO_KEYWORD); } -#line 3449 "dhcp6_parser.cc" +#line 3459 "dhcp6_parser.cc" break; - case 616: // user_context: "user-context" $@88 ":" map_value -#line 2167 "dhcp6_parser.yy" + case 618: // user_context: "user-context" $@88 ":" map_value +#line 2175 "dhcp6_parser.yy" { ElementPtr parent = ctx.stack_.back(); ElementPtr user_context = yystack_[0].value.as < ElementPtr > (); @@ -3472,19 +3482,19 @@ namespace isc { namespace dhcp { parent->set("user-context", user_context); ctx.leave(); } -#line 3476 "dhcp6_parser.cc" +#line 3486 "dhcp6_parser.cc" break; - case 617: // $@89: %empty -#line 2190 "dhcp6_parser.yy" + case 619: // $@89: %empty +#line 2198 "dhcp6_parser.yy" { ctx.enter(ctx.NO_KEYWORD); } -#line 3484 "dhcp6_parser.cc" +#line 3494 "dhcp6_parser.cc" break; - case 618: // comment: "comment" $@89 ":" "constant string" -#line 2192 "dhcp6_parser.yy" + case 620: // comment: "comment" $@89 ":" "constant string" +#line 2200 "dhcp6_parser.yy" { ElementPtr parent = ctx.stack_.back(); ElementPtr user_context(new MapElement(ctx.loc2pos(yystack_[3].location))); @@ -3509,11 +3519,11 @@ namespace isc { namespace dhcp { parent->set("user-context", user_context); ctx.leave(); } -#line 3513 "dhcp6_parser.cc" +#line 3523 "dhcp6_parser.cc" break; - case 619: // $@90: %empty -#line 2220 "dhcp6_parser.yy" + case 621: // $@90: %empty +#line 2228 "dhcp6_parser.yy" { ctx.unique("pd-pools", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3521,38 +3531,38 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.PD_POOLS); } -#line 3525 "dhcp6_parser.cc" +#line 3535 "dhcp6_parser.cc" break; - case 620: // pd_pools_list: "pd-pools" $@90 ":" "[" pd_pools_list_content "]" -#line 2226 "dhcp6_parser.yy" + case 622: // pd_pools_list: "pd-pools" $@90 ":" "[" pd_pools_list_content "]" +#line 2234 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3534 "dhcp6_parser.cc" +#line 3544 "dhcp6_parser.cc" break; - case 625: // not_empty_pd_pools_list: not_empty_pd_pools_list "," -#line 2239 "dhcp6_parser.yy" + case 627: // not_empty_pd_pools_list: not_empty_pd_pools_list "," +#line 2247 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3542 "dhcp6_parser.cc" +#line 3552 "dhcp6_parser.cc" break; - case 626: // $@91: %empty -#line 2244 "dhcp6_parser.yy" + case 628: // $@91: %empty +#line 2252 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 3552 "dhcp6_parser.cc" +#line 3562 "dhcp6_parser.cc" break; - case 627: // pd_pool_entry: "{" $@91 pd_pool_params "}" -#line 2248 "dhcp6_parser.yy" + case 629: // pd_pool_entry: "{" $@91 pd_pool_params "}" +#line 2256 "dhcp6_parser.yy" { // The prefix, prefix len and delegated len parameters are required. ctx.require("prefix", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); @@ -3560,21 +3570,21 @@ namespace isc { namespace dhcp { ctx.require("delegated-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 3564 "dhcp6_parser.cc" +#line 3574 "dhcp6_parser.cc" break; - case 628: // $@92: %empty -#line 2256 "dhcp6_parser.yy" + case 630: // $@92: %empty +#line 2264 "dhcp6_parser.yy" { // Parse the pd-pool list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 3574 "dhcp6_parser.cc" +#line 3584 "dhcp6_parser.cc" break; - case 629: // sub_pd_pool: "{" $@92 pd_pool_params "}" -#line 2260 "dhcp6_parser.yy" + case 631: // sub_pd_pool: "{" $@92 pd_pool_params "}" +#line 2268 "dhcp6_parser.yy" { // The prefix, prefix len and delegated len parameters are required. ctx.require("prefix", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); @@ -3582,87 +3592,87 @@ namespace isc { namespace dhcp { ctx.require("delegated-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 3586 "dhcp6_parser.cc" +#line 3596 "dhcp6_parser.cc" break; - case 632: // pd_pool_params: pd_pool_params "," -#line 2270 "dhcp6_parser.yy" + case 634: // pd_pool_params: pd_pool_params "," +#line 2278 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3594 "dhcp6_parser.cc" +#line 3604 "dhcp6_parser.cc" break; - case 644: // $@93: %empty -#line 2288 "dhcp6_parser.yy" + case 646: // $@93: %empty +#line 2296 "dhcp6_parser.yy" { ctx.unique("prefix", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3603 "dhcp6_parser.cc" +#line 3613 "dhcp6_parser.cc" break; - case 645: // pd_prefix: "prefix" $@93 ":" "constant string" -#line 2291 "dhcp6_parser.yy" + case 647: // pd_prefix: "prefix" $@93 ":" "constant string" +#line 2299 "dhcp6_parser.yy" { ElementPtr prf(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("prefix", prf); ctx.leave(); } -#line 3613 "dhcp6_parser.cc" +#line 3623 "dhcp6_parser.cc" break; - case 646: // pd_prefix_len: "prefix-len" ":" "integer" -#line 2297 "dhcp6_parser.yy" + case 648: // pd_prefix_len: "prefix-len" ":" "integer" +#line 2305 "dhcp6_parser.yy" { ctx.unique("prefix-len", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("prefix-len", prf); } -#line 3623 "dhcp6_parser.cc" +#line 3633 "dhcp6_parser.cc" break; - case 647: // $@94: %empty -#line 2303 "dhcp6_parser.yy" + case 649: // $@94: %empty +#line 2311 "dhcp6_parser.yy" { ctx.unique("excluded-prefix", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3632 "dhcp6_parser.cc" +#line 3642 "dhcp6_parser.cc" break; - case 648: // excluded_prefix: "excluded-prefix" $@94 ":" "constant string" -#line 2306 "dhcp6_parser.yy" + case 650: // excluded_prefix: "excluded-prefix" $@94 ":" "constant string" +#line 2314 "dhcp6_parser.yy" { ElementPtr prf(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("excluded-prefix", prf); ctx.leave(); } -#line 3642 "dhcp6_parser.cc" +#line 3652 "dhcp6_parser.cc" break; - case 649: // excluded_prefix_len: "excluded-prefix-len" ":" "integer" -#line 2312 "dhcp6_parser.yy" + case 651: // excluded_prefix_len: "excluded-prefix-len" ":" "integer" +#line 2320 "dhcp6_parser.yy" { ctx.unique("excluded-prefix-len", ctx.loc2pos(yystack_[2].location)); ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("excluded-prefix-len", prf); } -#line 3652 "dhcp6_parser.cc" +#line 3662 "dhcp6_parser.cc" break; - case 650: // pd_delegated_len: "delegated-len" ":" "integer" -#line 2318 "dhcp6_parser.yy" + case 652: // pd_delegated_len: "delegated-len" ":" "integer" +#line 2326 "dhcp6_parser.yy" { ctx.unique("delegated-len", ctx.loc2pos(yystack_[2].location)); ElementPtr deleg(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("delegated-len", deleg); } -#line 3662 "dhcp6_parser.cc" +#line 3672 "dhcp6_parser.cc" break; - case 651: // $@95: %empty -#line 2327 "dhcp6_parser.yy" + case 653: // $@95: %empty +#line 2335 "dhcp6_parser.yy" { ctx.unique("reservations", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3670,74 +3680,74 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.RESERVATIONS); } -#line 3674 "dhcp6_parser.cc" +#line 3684 "dhcp6_parser.cc" break; - case 652: // reservations: "reservations" $@95 ":" "[" reservations_list "]" -#line 2333 "dhcp6_parser.yy" + case 654: // reservations: "reservations" $@95 ":" "[" reservations_list "]" +#line 2341 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3683 "dhcp6_parser.cc" +#line 3693 "dhcp6_parser.cc" break; - case 657: // not_empty_reservations_list: not_empty_reservations_list "," -#line 2344 "dhcp6_parser.yy" + case 659: // not_empty_reservations_list: not_empty_reservations_list "," +#line 2352 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3691 "dhcp6_parser.cc" +#line 3701 "dhcp6_parser.cc" break; - case 658: // $@96: %empty -#line 2349 "dhcp6_parser.yy" + case 660: // $@96: %empty +#line 2357 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 3701 "dhcp6_parser.cc" +#line 3711 "dhcp6_parser.cc" break; - case 659: // reservation: "{" $@96 reservation_params "}" -#line 2353 "dhcp6_parser.yy" + case 661: // reservation: "{" $@96 reservation_params "}" +#line 2361 "dhcp6_parser.yy" { /// @todo: an identifier parameter is required. ctx.stack_.pop_back(); } -#line 3710 "dhcp6_parser.cc" +#line 3720 "dhcp6_parser.cc" break; - case 660: // $@97: %empty -#line 2358 "dhcp6_parser.yy" + case 662: // $@97: %empty +#line 2366 "dhcp6_parser.yy" { // Parse the reservations list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 3720 "dhcp6_parser.cc" +#line 3730 "dhcp6_parser.cc" break; - case 661: // sub_reservation: "{" $@97 reservation_params "}" -#line 2362 "dhcp6_parser.yy" + case 663: // sub_reservation: "{" $@97 reservation_params "}" +#line 2370 "dhcp6_parser.yy" { /// @todo: an identifier parameter is required. // parsing completed } -#line 3729 "dhcp6_parser.cc" +#line 3739 "dhcp6_parser.cc" break; - case 666: // not_empty_reservation_params: not_empty_reservation_params "," -#line 2373 "dhcp6_parser.yy" + case 668: // not_empty_reservation_params: not_empty_reservation_params "," +#line 2381 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3737 "dhcp6_parser.cc" +#line 3747 "dhcp6_parser.cc" break; - case 678: // $@98: %empty -#line 2392 "dhcp6_parser.yy" + case 680: // $@98: %empty +#line 2400 "dhcp6_parser.yy" { ctx.unique("ip-addresses", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3745,20 +3755,20 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.NO_KEYWORD); } -#line 3749 "dhcp6_parser.cc" +#line 3759 "dhcp6_parser.cc" break; - case 679: // ip_addresses: "ip-addresses" $@98 ":" list_strings -#line 2398 "dhcp6_parser.yy" + case 681: // ip_addresses: "ip-addresses" $@98 ":" list_strings +#line 2406 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3758 "dhcp6_parser.cc" +#line 3768 "dhcp6_parser.cc" break; - case 680: // $@99: %empty -#line 2403 "dhcp6_parser.yy" + case 682: // $@99: %empty +#line 2411 "dhcp6_parser.yy" { ctx.unique("prefixes", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3766,96 +3776,96 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.NO_KEYWORD); } -#line 3770 "dhcp6_parser.cc" +#line 3780 "dhcp6_parser.cc" break; - case 681: // prefixes: "prefixes" $@99 ":" list_strings -#line 2409 "dhcp6_parser.yy" + case 683: // prefixes: "prefixes" $@99 ":" list_strings +#line 2417 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3779 "dhcp6_parser.cc" +#line 3789 "dhcp6_parser.cc" break; - case 682: // $@100: %empty -#line 2414 "dhcp6_parser.yy" + case 684: // $@100: %empty +#line 2422 "dhcp6_parser.yy" { ctx.unique("duid", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3788 "dhcp6_parser.cc" +#line 3798 "dhcp6_parser.cc" break; - case 683: // duid: "duid" $@100 ":" "constant string" -#line 2417 "dhcp6_parser.yy" + case 685: // duid: "duid" $@100 ":" "constant string" +#line 2425 "dhcp6_parser.yy" { ElementPtr d(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("duid", d); ctx.leave(); } -#line 3798 "dhcp6_parser.cc" +#line 3808 "dhcp6_parser.cc" break; - case 684: // $@101: %empty -#line 2423 "dhcp6_parser.yy" + case 686: // $@101: %empty +#line 2431 "dhcp6_parser.yy" { ctx.unique("hw-address", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3807 "dhcp6_parser.cc" +#line 3817 "dhcp6_parser.cc" break; - case 685: // hw_address: "hw-address" $@101 ":" "constant string" -#line 2426 "dhcp6_parser.yy" + case 687: // hw_address: "hw-address" $@101 ":" "constant string" +#line 2434 "dhcp6_parser.yy" { ElementPtr hw(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hw-address", hw); ctx.leave(); } -#line 3817 "dhcp6_parser.cc" +#line 3827 "dhcp6_parser.cc" break; - case 686: // $@102: %empty -#line 2432 "dhcp6_parser.yy" + case 688: // $@102: %empty +#line 2440 "dhcp6_parser.yy" { ctx.unique("hostname", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3826 "dhcp6_parser.cc" +#line 3836 "dhcp6_parser.cc" break; - case 687: // hostname: "hostname" $@102 ":" "constant string" -#line 2435 "dhcp6_parser.yy" + case 689: // hostname: "hostname" $@102 ":" "constant string" +#line 2443 "dhcp6_parser.yy" { ElementPtr host(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hostname", host); ctx.leave(); } -#line 3836 "dhcp6_parser.cc" +#line 3846 "dhcp6_parser.cc" break; - case 688: // $@103: %empty -#line 2441 "dhcp6_parser.yy" + case 690: // $@103: %empty +#line 2449 "dhcp6_parser.yy" { ctx.unique("flex-id", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3845 "dhcp6_parser.cc" +#line 3855 "dhcp6_parser.cc" break; - case 689: // flex_id_value: "flex-id" $@103 ":" "constant string" -#line 2444 "dhcp6_parser.yy" + case 691: // flex_id_value: "flex-id" $@103 ":" "constant string" +#line 2452 "dhcp6_parser.yy" { ElementPtr hw(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("flex-id", hw); ctx.leave(); } -#line 3855 "dhcp6_parser.cc" +#line 3865 "dhcp6_parser.cc" break; - case 690: // $@104: %empty -#line 2450 "dhcp6_parser.yy" + case 692: // $@104: %empty +#line 2458 "dhcp6_parser.yy" { ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location)); ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3863,20 +3873,20 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(c); ctx.enter(ctx.NO_KEYWORD); } -#line 3867 "dhcp6_parser.cc" +#line 3877 "dhcp6_parser.cc" break; - case 691: // reservation_client_classes: "client-classes" $@104 ":" list_strings -#line 2456 "dhcp6_parser.yy" + case 693: // reservation_client_classes: "client-classes" $@104 ":" list_strings +#line 2464 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3876 "dhcp6_parser.cc" +#line 3886 "dhcp6_parser.cc" break; - case 692: // $@105: %empty -#line 2464 "dhcp6_parser.yy" + case 694: // $@105: %empty +#line 2472 "dhcp6_parser.yy" { ctx.unique("relay", ctx.loc2pos(yystack_[0].location)); ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -3884,39 +3894,39 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(m); ctx.enter(ctx.RELAY); } -#line 3888 "dhcp6_parser.cc" +#line 3898 "dhcp6_parser.cc" break; - case 693: // relay: "relay" $@105 ":" "{" relay_map "}" -#line 2470 "dhcp6_parser.yy" + case 695: // relay: "relay" $@105 ":" "{" relay_map "}" +#line 2478 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3897 "dhcp6_parser.cc" +#line 3907 "dhcp6_parser.cc" break; - case 696: // $@106: %empty -#line 2479 "dhcp6_parser.yy" + case 698: // $@106: %empty +#line 2487 "dhcp6_parser.yy" { ctx.unique("ip-address", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3906 "dhcp6_parser.cc" +#line 3916 "dhcp6_parser.cc" break; - case 697: // ip_address: "ip-address" $@106 ":" "constant string" -#line 2482 "dhcp6_parser.yy" + case 699: // ip_address: "ip-address" $@106 ":" "constant string" +#line 2490 "dhcp6_parser.yy" { ElementPtr addr(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ip-address", addr); ctx.leave(); } -#line 3916 "dhcp6_parser.cc" +#line 3926 "dhcp6_parser.cc" break; - case 698: // $@107: %empty -#line 2491 "dhcp6_parser.yy" + case 700: // $@107: %empty +#line 2499 "dhcp6_parser.yy" { ctx.unique("client-classes", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -3924,104 +3934,104 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.CLIENT_CLASSES); } -#line 3928 "dhcp6_parser.cc" +#line 3938 "dhcp6_parser.cc" break; - case 699: // client_classes: "client-classes" $@107 ":" "[" client_classes_list "]" -#line 2497 "dhcp6_parser.yy" + case 701: // client_classes: "client-classes" $@107 ":" "[" client_classes_list "]" +#line 2505 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 3937 "dhcp6_parser.cc" +#line 3947 "dhcp6_parser.cc" break; - case 702: // client_classes_list: client_classes_list "," -#line 2504 "dhcp6_parser.yy" + case 704: // client_classes_list: client_classes_list "," +#line 2512 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3945 "dhcp6_parser.cc" +#line 3955 "dhcp6_parser.cc" break; - case 703: // $@108: %empty -#line 2509 "dhcp6_parser.yy" + case 705: // $@108: %empty +#line 2517 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 3955 "dhcp6_parser.cc" +#line 3965 "dhcp6_parser.cc" break; - case 704: // client_class_entry: "{" $@108 client_class_params "}" -#line 2513 "dhcp6_parser.yy" + case 706: // client_class_entry: "{" $@108 client_class_params "}" +#line 2521 "dhcp6_parser.yy" { // The name client class parameter is required. ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 3965 "dhcp6_parser.cc" +#line 3975 "dhcp6_parser.cc" break; - case 709: // not_empty_client_class_params: not_empty_client_class_params "," -#line 2525 "dhcp6_parser.yy" + case 711: // not_empty_client_class_params: not_empty_client_class_params "," +#line 2533 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 3973 "dhcp6_parser.cc" +#line 3983 "dhcp6_parser.cc" break; - case 725: // $@109: %empty -#line 2548 "dhcp6_parser.yy" + case 727: // $@109: %empty +#line 2556 "dhcp6_parser.yy" { ctx.unique("test", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 3982 "dhcp6_parser.cc" +#line 3992 "dhcp6_parser.cc" break; - case 726: // client_class_test: "test" $@109 ":" "constant string" -#line 2551 "dhcp6_parser.yy" + case 728: // client_class_test: "test" $@109 ":" "constant string" +#line 2559 "dhcp6_parser.yy" { ElementPtr test(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("test", test); ctx.leave(); } -#line 3992 "dhcp6_parser.cc" +#line 4002 "dhcp6_parser.cc" break; - case 727: // $@110: %empty -#line 2557 "dhcp6_parser.yy" + case 729: // $@110: %empty +#line 2565 "dhcp6_parser.yy" { ctx.unique("template-test", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4001 "dhcp6_parser.cc" +#line 4011 "dhcp6_parser.cc" break; - case 728: // client_class_template_test: "template-test" $@110 ":" "constant string" -#line 2560 "dhcp6_parser.yy" + case 730: // client_class_template_test: "template-test" $@110 ":" "constant string" +#line 2568 "dhcp6_parser.yy" { ElementPtr template_test(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("template-test", template_test); ctx.leave(); } -#line 4011 "dhcp6_parser.cc" +#line 4021 "dhcp6_parser.cc" break; - case 729: // only_if_required: "only-if-required" ":" "boolean" -#line 2566 "dhcp6_parser.yy" + case 731: // only_if_required: "only-if-required" ":" "boolean" +#line 2574 "dhcp6_parser.yy" { ctx.unique("only-if-required", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("only-if-required", b); } -#line 4021 "dhcp6_parser.cc" +#line 4031 "dhcp6_parser.cc" break; - case 730: // $@111: %empty -#line 2575 "dhcp6_parser.yy" + case 732: // $@111: %empty +#line 2583 "dhcp6_parser.yy" { ctx.unique("server-id", ctx.loc2pos(yystack_[0].location)); ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -4029,125 +4039,125 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(m); ctx.enter(ctx.SERVER_ID); } -#line 4033 "dhcp6_parser.cc" +#line 4043 "dhcp6_parser.cc" break; - case 731: // server_id: "server-id" $@111 ":" "{" server_id_params "}" -#line 2581 "dhcp6_parser.yy" + case 733: // server_id: "server-id" $@111 ":" "{" server_id_params "}" +#line 2589 "dhcp6_parser.yy" { // The type parameter is required. ctx.require("type", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); ctx.leave(); } -#line 4044 "dhcp6_parser.cc" +#line 4054 "dhcp6_parser.cc" break; - case 734: // server_id_params: server_id_params "," -#line 2590 "dhcp6_parser.yy" + case 736: // server_id_params: server_id_params "," +#line 2598 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4052 "dhcp6_parser.cc" +#line 4062 "dhcp6_parser.cc" break; - case 744: // $@112: %empty -#line 2606 "dhcp6_parser.yy" + case 746: // $@112: %empty +#line 2614 "dhcp6_parser.yy" { ctx.unique("type", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.DUID_TYPE); } -#line 4061 "dhcp6_parser.cc" +#line 4071 "dhcp6_parser.cc" break; - case 745: // server_id_type: "type" $@112 ":" duid_type -#line 2609 "dhcp6_parser.yy" + case 747: // server_id_type: "type" $@112 ":" duid_type +#line 2617 "dhcp6_parser.yy" { ctx.stack_.back()->set("type", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 4070 "dhcp6_parser.cc" +#line 4080 "dhcp6_parser.cc" break; - case 746: // duid_type: "LLT" -#line 2614 "dhcp6_parser.yy" + case 748: // duid_type: "LLT" +#line 2622 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("LLT", ctx.loc2pos(yystack_[0].location))); } -#line 4076 "dhcp6_parser.cc" +#line 4086 "dhcp6_parser.cc" break; - case 747: // duid_type: "EN" -#line 2615 "dhcp6_parser.yy" + case 749: // duid_type: "EN" +#line 2623 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("EN", ctx.loc2pos(yystack_[0].location))); } -#line 4082 "dhcp6_parser.cc" +#line 4092 "dhcp6_parser.cc" break; - case 748: // duid_type: "LL" -#line 2616 "dhcp6_parser.yy" + case 750: // duid_type: "LL" +#line 2624 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("LL", ctx.loc2pos(yystack_[0].location))); } -#line 4088 "dhcp6_parser.cc" +#line 4098 "dhcp6_parser.cc" break; - case 749: // htype: "htype" ":" "integer" -#line 2619 "dhcp6_parser.yy" + case 751: // htype: "htype" ":" "integer" +#line 2627 "dhcp6_parser.yy" { ctx.unique("htype", ctx.loc2pos(yystack_[2].location)); ElementPtr htype(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("htype", htype); } -#line 4098 "dhcp6_parser.cc" +#line 4108 "dhcp6_parser.cc" break; - case 750: // $@113: %empty -#line 2625 "dhcp6_parser.yy" + case 752: // $@113: %empty +#line 2633 "dhcp6_parser.yy" { ctx.unique("identifier", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4107 "dhcp6_parser.cc" +#line 4117 "dhcp6_parser.cc" break; - case 751: // identifier: "identifier" $@113 ":" "constant string" -#line 2628 "dhcp6_parser.yy" + case 753: // identifier: "identifier" $@113 ":" "constant string" +#line 2636 "dhcp6_parser.yy" { ElementPtr id(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("identifier", id); ctx.leave(); } -#line 4117 "dhcp6_parser.cc" +#line 4127 "dhcp6_parser.cc" break; - case 752: // time: "time" ":" "integer" -#line 2634 "dhcp6_parser.yy" + case 754: // time: "time" ":" "integer" +#line 2642 "dhcp6_parser.yy" { ctx.unique("time", ctx.loc2pos(yystack_[2].location)); ElementPtr time(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("time", time); } -#line 4127 "dhcp6_parser.cc" +#line 4137 "dhcp6_parser.cc" break; - case 753: // enterprise_id: "enterprise-id" ":" "integer" -#line 2640 "dhcp6_parser.yy" + case 755: // enterprise_id: "enterprise-id" ":" "integer" +#line 2648 "dhcp6_parser.yy" { ctx.unique("enterprise-id", ctx.loc2pos(yystack_[2].location)); ElementPtr time(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("enterprise-id", time); } -#line 4137 "dhcp6_parser.cc" +#line 4147 "dhcp6_parser.cc" break; - case 754: // dhcp4o6_port: "dhcp4o6-port" ":" "integer" -#line 2648 "dhcp6_parser.yy" + case 756: // dhcp4o6_port: "dhcp4o6-port" ":" "integer" +#line 2656 "dhcp6_parser.yy" { ctx.unique("dhcp4o6-port", ctx.loc2pos(yystack_[2].location)); ElementPtr time(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("dhcp4o6-port", time); } -#line 4147 "dhcp6_parser.cc" +#line 4157 "dhcp6_parser.cc" break; - case 755: // $@114: %empty -#line 2656 "dhcp6_parser.yy" + case 757: // $@114: %empty +#line 2664 "dhcp6_parser.yy" { ctx.unique("control-socket", ctx.loc2pos(yystack_[0].location)); ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -4155,66 +4165,66 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(m); ctx.enter(ctx.CONTROL_SOCKET); } -#line 4159 "dhcp6_parser.cc" +#line 4169 "dhcp6_parser.cc" break; - case 756: // control_socket: "control-socket" $@114 ":" "{" control_socket_params "}" -#line 2662 "dhcp6_parser.yy" + case 758: // control_socket: "control-socket" $@114 ":" "{" control_socket_params "}" +#line 2670 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 4168 "dhcp6_parser.cc" +#line 4178 "dhcp6_parser.cc" break; - case 759: // control_socket_params: control_socket_params "," -#line 2669 "dhcp6_parser.yy" + case 761: // control_socket_params: control_socket_params "," +#line 2677 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4176 "dhcp6_parser.cc" +#line 4186 "dhcp6_parser.cc" break; - case 765: // $@115: %empty -#line 2681 "dhcp6_parser.yy" + case 767: // $@115: %empty +#line 2689 "dhcp6_parser.yy" { ctx.unique("socket-type", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4185 "dhcp6_parser.cc" +#line 4195 "dhcp6_parser.cc" break; - case 766: // socket_type: "socket-type" $@115 ":" "constant string" -#line 2684 "dhcp6_parser.yy" + case 768: // socket_type: "socket-type" $@115 ":" "constant string" +#line 2692 "dhcp6_parser.yy" { ElementPtr stype(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("socket-type", stype); ctx.leave(); } -#line 4195 "dhcp6_parser.cc" +#line 4205 "dhcp6_parser.cc" break; - case 767: // $@116: %empty -#line 2690 "dhcp6_parser.yy" + case 769: // $@116: %empty +#line 2698 "dhcp6_parser.yy" { ctx.unique("socket-name", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4204 "dhcp6_parser.cc" +#line 4214 "dhcp6_parser.cc" break; - case 768: // socket_name: "socket-name" $@116 ":" "constant string" -#line 2693 "dhcp6_parser.yy" + case 770: // socket_name: "socket-name" $@116 ":" "constant string" +#line 2701 "dhcp6_parser.yy" { ElementPtr name(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("socket-name", name); ctx.leave(); } -#line 4214 "dhcp6_parser.cc" +#line 4224 "dhcp6_parser.cc" break; - case 769: // $@117: %empty -#line 2702 "dhcp6_parser.yy" + case 771: // $@117: %empty +#line 2710 "dhcp6_parser.yy" { ctx.unique("dhcp-queue-control", ctx.loc2pos(yystack_[0].location)); ElementPtr qc(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -4222,87 +4232,87 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(qc); ctx.enter(ctx.DHCP_QUEUE_CONTROL); } -#line 4226 "dhcp6_parser.cc" +#line 4236 "dhcp6_parser.cc" break; - case 770: // dhcp_queue_control: "dhcp-queue-control" $@117 ":" "{" queue_control_params "}" -#line 2708 "dhcp6_parser.yy" + case 772: // dhcp_queue_control: "dhcp-queue-control" $@117 ":" "{" queue_control_params "}" +#line 2716 "dhcp6_parser.yy" { // The enable queue parameter is required. ctx.require("enable-queue", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); ctx.leave(); } -#line 4237 "dhcp6_parser.cc" +#line 4247 "dhcp6_parser.cc" break; - case 773: // queue_control_params: queue_control_params "," -#line 2717 "dhcp6_parser.yy" + case 775: // queue_control_params: queue_control_params "," +#line 2725 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4245 "dhcp6_parser.cc" +#line 4255 "dhcp6_parser.cc" break; - case 780: // enable_queue: "enable-queue" ":" "boolean" -#line 2730 "dhcp6_parser.yy" + case 782: // enable_queue: "enable-queue" ":" "boolean" +#line 2738 "dhcp6_parser.yy" { ctx.unique("enable-queue", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("enable-queue", b); } -#line 4255 "dhcp6_parser.cc" +#line 4265 "dhcp6_parser.cc" break; - case 781: // $@118: %empty -#line 2736 "dhcp6_parser.yy" + case 783: // $@118: %empty +#line 2744 "dhcp6_parser.yy" { ctx.unique("queue-type", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4264 "dhcp6_parser.cc" +#line 4274 "dhcp6_parser.cc" break; - case 782: // queue_type: "queue-type" $@118 ":" "constant string" -#line 2739 "dhcp6_parser.yy" + case 784: // queue_type: "queue-type" $@118 ":" "constant string" +#line 2747 "dhcp6_parser.yy" { ElementPtr qt(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("queue-type", qt); ctx.leave(); } -#line 4274 "dhcp6_parser.cc" +#line 4284 "dhcp6_parser.cc" break; - case 783: // capacity: "capacity" ":" "integer" -#line 2745 "dhcp6_parser.yy" + case 785: // capacity: "capacity" ":" "integer" +#line 2753 "dhcp6_parser.yy" { ctx.unique("capacity", ctx.loc2pos(yystack_[2].location)); ElementPtr c(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("capacity", c); } -#line 4284 "dhcp6_parser.cc" +#line 4294 "dhcp6_parser.cc" break; - case 784: // $@119: %empty -#line 2751 "dhcp6_parser.yy" + case 786: // $@119: %empty +#line 2759 "dhcp6_parser.yy" { ctx.unique(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4293 "dhcp6_parser.cc" +#line 4303 "dhcp6_parser.cc" break; - case 785: // arbitrary_map_entry: "constant string" $@119 ":" value -#line 2754 "dhcp6_parser.yy" + case 787: // arbitrary_map_entry: "constant string" $@119 ":" value +#line 2762 "dhcp6_parser.yy" { ctx.stack_.back()->set(yystack_[3].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 4302 "dhcp6_parser.cc" +#line 4312 "dhcp6_parser.cc" break; - case 786: // $@120: %empty -#line 2761 "dhcp6_parser.yy" + case 788: // $@120: %empty +#line 2769 "dhcp6_parser.yy" { ctx.unique("dhcp-ddns", ctx.loc2pos(yystack_[0].location)); ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -4310,291 +4320,291 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(m); ctx.enter(ctx.DHCP_DDNS); } -#line 4314 "dhcp6_parser.cc" +#line 4324 "dhcp6_parser.cc" break; - case 787: // dhcp_ddns: "dhcp-ddns" $@120 ":" "{" dhcp_ddns_params "}" -#line 2767 "dhcp6_parser.yy" + case 789: // dhcp_ddns: "dhcp-ddns" $@120 ":" "{" dhcp_ddns_params "}" +#line 2775 "dhcp6_parser.yy" { // The enable updates DHCP DDNS parameter is required. ctx.require("enable-updates", ctx.loc2pos(yystack_[2].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); ctx.leave(); } -#line 4325 "dhcp6_parser.cc" +#line 4335 "dhcp6_parser.cc" break; - case 788: // $@121: %empty -#line 2774 "dhcp6_parser.yy" + case 790: // $@121: %empty +#line 2782 "dhcp6_parser.yy" { // Parse the dhcp-ddns map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 4335 "dhcp6_parser.cc" +#line 4345 "dhcp6_parser.cc" break; - case 789: // sub_dhcp_ddns: "{" $@121 dhcp_ddns_params "}" -#line 2778 "dhcp6_parser.yy" + case 791: // sub_dhcp_ddns: "{" $@121 dhcp_ddns_params "}" +#line 2786 "dhcp6_parser.yy" { // The enable updates DHCP DDNS parameter is required. ctx.require("enable-updates", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 4345 "dhcp6_parser.cc" +#line 4355 "dhcp6_parser.cc" break; - case 792: // dhcp_ddns_params: dhcp_ddns_params "," -#line 2786 "dhcp6_parser.yy" + case 794: // dhcp_ddns_params: dhcp_ddns_params "," +#line 2794 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4353 "dhcp6_parser.cc" +#line 4363 "dhcp6_parser.cc" break; - case 811: // enable_updates: "enable-updates" ":" "boolean" -#line 2811 "dhcp6_parser.yy" + case 813: // enable_updates: "enable-updates" ":" "boolean" +#line 2819 "dhcp6_parser.yy" { ctx.unique("enable-updates", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("enable-updates", b); } -#line 4363 "dhcp6_parser.cc" +#line 4373 "dhcp6_parser.cc" break; - case 812: // $@122: %empty -#line 2818 "dhcp6_parser.yy" + case 814: // $@122: %empty +#line 2826 "dhcp6_parser.yy" { ctx.unique("qualifying-suffix", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4372 "dhcp6_parser.cc" +#line 4382 "dhcp6_parser.cc" break; - case 813: // dep_qualifying_suffix: "qualifying-suffix" $@122 ":" "constant string" -#line 2821 "dhcp6_parser.yy" + case 815: // dep_qualifying_suffix: "qualifying-suffix" $@122 ":" "constant string" +#line 2829 "dhcp6_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("qualifying-suffix", s); ctx.leave(); } -#line 4382 "dhcp6_parser.cc" +#line 4392 "dhcp6_parser.cc" break; - case 814: // $@123: %empty -#line 2827 "dhcp6_parser.yy" + case 816: // $@123: %empty +#line 2835 "dhcp6_parser.yy" { ctx.unique("server-ip", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4391 "dhcp6_parser.cc" +#line 4401 "dhcp6_parser.cc" break; - case 815: // server_ip: "server-ip" $@123 ":" "constant string" -#line 2830 "dhcp6_parser.yy" + case 817: // server_ip: "server-ip" $@123 ":" "constant string" +#line 2838 "dhcp6_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("server-ip", s); ctx.leave(); } -#line 4401 "dhcp6_parser.cc" +#line 4411 "dhcp6_parser.cc" break; - case 816: // server_port: "server-port" ":" "integer" -#line 2836 "dhcp6_parser.yy" + case 818: // server_port: "server-port" ":" "integer" +#line 2844 "dhcp6_parser.yy" { ctx.unique("server-port", ctx.loc2pos(yystack_[2].location)); ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("server-port", i); } -#line 4411 "dhcp6_parser.cc" +#line 4421 "dhcp6_parser.cc" break; - case 817: // $@124: %empty -#line 2842 "dhcp6_parser.yy" + case 819: // $@124: %empty +#line 2850 "dhcp6_parser.yy" { ctx.unique("sender-ip", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4420 "dhcp6_parser.cc" +#line 4430 "dhcp6_parser.cc" break; - case 818: // sender_ip: "sender-ip" $@124 ":" "constant string" -#line 2845 "dhcp6_parser.yy" + case 820: // sender_ip: "sender-ip" $@124 ":" "constant string" +#line 2853 "dhcp6_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("sender-ip", s); ctx.leave(); } -#line 4430 "dhcp6_parser.cc" +#line 4440 "dhcp6_parser.cc" break; - case 819: // sender_port: "sender-port" ":" "integer" -#line 2851 "dhcp6_parser.yy" + case 821: // sender_port: "sender-port" ":" "integer" +#line 2859 "dhcp6_parser.yy" { ctx.unique("sender-port", ctx.loc2pos(yystack_[2].location)); ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("sender-port", i); } -#line 4440 "dhcp6_parser.cc" +#line 4450 "dhcp6_parser.cc" break; - case 820: // max_queue_size: "max-queue-size" ":" "integer" -#line 2857 "dhcp6_parser.yy" + case 822: // max_queue_size: "max-queue-size" ":" "integer" +#line 2865 "dhcp6_parser.yy" { ctx.unique("max-queue-size", ctx.loc2pos(yystack_[2].location)); ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-queue-size", i); } -#line 4450 "dhcp6_parser.cc" +#line 4460 "dhcp6_parser.cc" break; - case 821: // $@125: %empty -#line 2863 "dhcp6_parser.yy" + case 823: // $@125: %empty +#line 2871 "dhcp6_parser.yy" { ctx.unique("ncr-protocol", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NCR_PROTOCOL); } -#line 4459 "dhcp6_parser.cc" +#line 4469 "dhcp6_parser.cc" break; - case 822: // ncr_protocol: "ncr-protocol" $@125 ":" ncr_protocol_value -#line 2866 "dhcp6_parser.yy" + case 824: // ncr_protocol: "ncr-protocol" $@125 ":" ncr_protocol_value +#line 2874 "dhcp6_parser.yy" { ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 4468 "dhcp6_parser.cc" +#line 4478 "dhcp6_parser.cc" break; - case 823: // ncr_protocol_value: "UDP" -#line 2872 "dhcp6_parser.yy" + case 825: // ncr_protocol_value: "UDP" +#line 2880 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); } -#line 4474 "dhcp6_parser.cc" +#line 4484 "dhcp6_parser.cc" break; - case 824: // ncr_protocol_value: "TCP" -#line 2873 "dhcp6_parser.yy" + case 826: // ncr_protocol_value: "TCP" +#line 2881 "dhcp6_parser.yy" { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); } -#line 4480 "dhcp6_parser.cc" +#line 4490 "dhcp6_parser.cc" break; - case 825: // $@126: %empty -#line 2876 "dhcp6_parser.yy" + case 827: // $@126: %empty +#line 2884 "dhcp6_parser.yy" { ctx.unique("ncr-format", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NCR_FORMAT); } -#line 4489 "dhcp6_parser.cc" +#line 4499 "dhcp6_parser.cc" break; - case 826: // ncr_format: "ncr-format" $@126 ":" "JSON" -#line 2879 "dhcp6_parser.yy" + case 828: // ncr_format: "ncr-format" $@126 ":" "JSON" +#line 2887 "dhcp6_parser.yy" { ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ncr-format", json); ctx.leave(); } -#line 4499 "dhcp6_parser.cc" +#line 4509 "dhcp6_parser.cc" break; - case 827: // dep_override_no_update: "override-no-update" ":" "boolean" -#line 2886 "dhcp6_parser.yy" + case 829: // dep_override_no_update: "override-no-update" ":" "boolean" +#line 2894 "dhcp6_parser.yy" { ctx.unique("override-no-update", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("override-no-update", b); } -#line 4509 "dhcp6_parser.cc" +#line 4519 "dhcp6_parser.cc" break; - case 828: // dep_override_client_update: "override-client-update" ":" "boolean" -#line 2893 "dhcp6_parser.yy" + case 830: // dep_override_client_update: "override-client-update" ":" "boolean" +#line 2901 "dhcp6_parser.yy" { ctx.unique("override-client-update", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("override-client-update", b); } -#line 4519 "dhcp6_parser.cc" +#line 4529 "dhcp6_parser.cc" break; - case 829: // $@127: %empty -#line 2900 "dhcp6_parser.yy" + case 831: // $@127: %empty +#line 2908 "dhcp6_parser.yy" { ctx.unique("replace-client-name", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.REPLACE_CLIENT_NAME); } -#line 4528 "dhcp6_parser.cc" +#line 4538 "dhcp6_parser.cc" break; - case 830: // dep_replace_client_name: "replace-client-name" $@127 ":" ddns_replace_client_name_value -#line 2903 "dhcp6_parser.yy" + case 832: // dep_replace_client_name: "replace-client-name" $@127 ":" ddns_replace_client_name_value +#line 2911 "dhcp6_parser.yy" { ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as < ElementPtr > ()); ctx.leave(); } -#line 4537 "dhcp6_parser.cc" +#line 4547 "dhcp6_parser.cc" break; - case 831: // $@128: %empty -#line 2909 "dhcp6_parser.yy" + case 833: // $@128: %empty +#line 2917 "dhcp6_parser.yy" { ctx.unique("generated-prefix", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4546 "dhcp6_parser.cc" +#line 4556 "dhcp6_parser.cc" break; - case 832: // dep_generated_prefix: "generated-prefix" $@128 ":" "constant string" -#line 2912 "dhcp6_parser.yy" + case 834: // dep_generated_prefix: "generated-prefix" $@128 ":" "constant string" +#line 2920 "dhcp6_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("generated-prefix", s); ctx.leave(); } -#line 4556 "dhcp6_parser.cc" +#line 4566 "dhcp6_parser.cc" break; - case 833: // $@129: %empty -#line 2919 "dhcp6_parser.yy" + case 835: // $@129: %empty +#line 2927 "dhcp6_parser.yy" { ctx.unique("hostname-char-set", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4565 "dhcp6_parser.cc" +#line 4575 "dhcp6_parser.cc" break; - case 834: // dep_hostname_char_set: "hostname-char-set" $@129 ":" "constant string" -#line 2922 "dhcp6_parser.yy" + case 836: // dep_hostname_char_set: "hostname-char-set" $@129 ":" "constant string" +#line 2930 "dhcp6_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hostname-char-set", s); ctx.leave(); } -#line 4575 "dhcp6_parser.cc" +#line 4585 "dhcp6_parser.cc" break; - case 835: // $@130: %empty -#line 2929 "dhcp6_parser.yy" + case 837: // $@130: %empty +#line 2937 "dhcp6_parser.yy" { ctx.unique("hostname-char-replacement", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4584 "dhcp6_parser.cc" +#line 4594 "dhcp6_parser.cc" break; - case 836: // dep_hostname_char_replacement: "hostname-char-replacement" $@130 ":" "constant string" -#line 2932 "dhcp6_parser.yy" + case 838: // dep_hostname_char_replacement: "hostname-char-replacement" $@130 ":" "constant string" +#line 2940 "dhcp6_parser.yy" { ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hostname-char-replacement", s); ctx.leave(); } -#line 4594 "dhcp6_parser.cc" +#line 4604 "dhcp6_parser.cc" break; - case 837: // $@131: %empty -#line 2941 "dhcp6_parser.yy" + case 839: // $@131: %empty +#line 2949 "dhcp6_parser.yy" { ctx.unique("config-control", ctx.loc2pos(yystack_[0].location)); ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -4602,48 +4612,48 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(i); ctx.enter(ctx.CONFIG_CONTROL); } -#line 4606 "dhcp6_parser.cc" +#line 4616 "dhcp6_parser.cc" break; - case 838: // config_control: "config-control" $@131 ":" "{" config_control_params "}" -#line 2947 "dhcp6_parser.yy" + case 840: // config_control: "config-control" $@131 ":" "{" config_control_params "}" +#line 2955 "dhcp6_parser.yy" { // No config control params are required ctx.stack_.pop_back(); ctx.leave(); } -#line 4616 "dhcp6_parser.cc" +#line 4626 "dhcp6_parser.cc" break; - case 839: // $@132: %empty -#line 2953 "dhcp6_parser.yy" + case 841: // $@132: %empty +#line 2961 "dhcp6_parser.yy" { // Parse the config-control map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 4626 "dhcp6_parser.cc" +#line 4636 "dhcp6_parser.cc" break; - case 840: // sub_config_control: "{" $@132 config_control_params "}" -#line 2957 "dhcp6_parser.yy" + case 842: // sub_config_control: "{" $@132 config_control_params "}" +#line 2965 "dhcp6_parser.yy" { // No config_control params are required // parsing completed } -#line 4635 "dhcp6_parser.cc" +#line 4645 "dhcp6_parser.cc" break; - case 843: // config_control_params: config_control_params "," -#line 2965 "dhcp6_parser.yy" + case 845: // config_control_params: config_control_params "," +#line 2973 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4643 "dhcp6_parser.cc" +#line 4653 "dhcp6_parser.cc" break; - case 846: // $@133: %empty -#line 2975 "dhcp6_parser.yy" + case 848: // $@133: %empty +#line 2983 "dhcp6_parser.yy" { ctx.unique("config-databases", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -4651,30 +4661,30 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.CONFIG_DATABASE); } -#line 4655 "dhcp6_parser.cc" +#line 4665 "dhcp6_parser.cc" break; - case 847: // config_databases: "config-databases" $@133 ":" "[" database_list "]" -#line 2981 "dhcp6_parser.yy" + case 849: // config_databases: "config-databases" $@133 ":" "[" database_list "]" +#line 2989 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 4664 "dhcp6_parser.cc" +#line 4674 "dhcp6_parser.cc" break; - case 848: // config_fetch_wait_time: "config-fetch-wait-time" ":" "integer" -#line 2986 "dhcp6_parser.yy" + case 850: // config_fetch_wait_time: "config-fetch-wait-time" ":" "integer" +#line 2994 "dhcp6_parser.yy" { ctx.unique("config-fetch-wait-time", ctx.loc2pos(yystack_[2].location)); ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("config-fetch-wait-time", value); } -#line 4674 "dhcp6_parser.cc" +#line 4684 "dhcp6_parser.cc" break; - case 849: // $@134: %empty -#line 2994 "dhcp6_parser.yy" + case 851: // $@134: %empty +#line 3002 "dhcp6_parser.yy" { ctx.unique("loggers", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -4682,83 +4692,83 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.LOGGERS); } -#line 4686 "dhcp6_parser.cc" +#line 4696 "dhcp6_parser.cc" break; - case 850: // loggers: "loggers" $@134 ":" "[" loggers_entries "]" -#line 3000 "dhcp6_parser.yy" + case 852: // loggers: "loggers" $@134 ":" "[" loggers_entries "]" +#line 3008 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 4695 "dhcp6_parser.cc" +#line 4705 "dhcp6_parser.cc" break; - case 853: // loggers_entries: loggers_entries "," -#line 3009 "dhcp6_parser.yy" + case 855: // loggers_entries: loggers_entries "," +#line 3017 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4703 "dhcp6_parser.cc" +#line 4713 "dhcp6_parser.cc" break; - case 854: // $@135: %empty -#line 3015 "dhcp6_parser.yy" + case 856: // $@135: %empty +#line 3023 "dhcp6_parser.yy" { ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(l); ctx.stack_.push_back(l); } -#line 4713 "dhcp6_parser.cc" +#line 4723 "dhcp6_parser.cc" break; - case 855: // logger_entry: "{" $@135 logger_params "}" -#line 3019 "dhcp6_parser.yy" + case 857: // logger_entry: "{" $@135 logger_params "}" +#line 3027 "dhcp6_parser.yy" { ctx.stack_.pop_back(); } -#line 4721 "dhcp6_parser.cc" +#line 4731 "dhcp6_parser.cc" break; - case 858: // logger_params: logger_params "," -#line 3025 "dhcp6_parser.yy" + case 860: // logger_params: logger_params "," +#line 3033 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4729 "dhcp6_parser.cc" +#line 4739 "dhcp6_parser.cc" break; - case 866: // debuglevel: "debuglevel" ":" "integer" -#line 3039 "dhcp6_parser.yy" + case 868: // debuglevel: "debuglevel" ":" "integer" +#line 3047 "dhcp6_parser.yy" { ctx.unique("debuglevel", ctx.loc2pos(yystack_[2].location)); ElementPtr dl(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("debuglevel", dl); } -#line 4739 "dhcp6_parser.cc" +#line 4749 "dhcp6_parser.cc" break; - case 867: // $@136: %empty -#line 3045 "dhcp6_parser.yy" + case 869: // $@136: %empty +#line 3053 "dhcp6_parser.yy" { ctx.unique("severity", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4748 "dhcp6_parser.cc" +#line 4758 "dhcp6_parser.cc" break; - case 868: // severity: "severity" $@136 ":" "constant string" -#line 3048 "dhcp6_parser.yy" + case 870: // severity: "severity" $@136 ":" "constant string" +#line 3056 "dhcp6_parser.yy" { ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("severity", sev); ctx.leave(); } -#line 4758 "dhcp6_parser.cc" +#line 4768 "dhcp6_parser.cc" break; - case 869: // $@137: %empty -#line 3054 "dhcp6_parser.yy" + case 871: // $@137: %empty +#line 3062 "dhcp6_parser.yy" { ctx.unique("output-options", ctx.loc2pos(yystack_[0].location)); ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); @@ -4766,122 +4776,122 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(l); ctx.enter(ctx.OUTPUT_OPTIONS); } -#line 4770 "dhcp6_parser.cc" +#line 4780 "dhcp6_parser.cc" break; - case 870: // output_options_list: "output-options" $@137 ":" "[" output_options_list_content "]" -#line 3060 "dhcp6_parser.yy" + case 872: // output_options_list: "output-options" $@137 ":" "[" output_options_list_content "]" +#line 3068 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 4779 "dhcp6_parser.cc" +#line 4789 "dhcp6_parser.cc" break; - case 873: // output_options_list_content: output_options_list_content "," -#line 3067 "dhcp6_parser.yy" + case 875: // output_options_list_content: output_options_list_content "," +#line 3075 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4787 "dhcp6_parser.cc" +#line 4797 "dhcp6_parser.cc" break; - case 874: // $@138: %empty -#line 3072 "dhcp6_parser.yy" + case 876: // $@138: %empty +#line 3080 "dhcp6_parser.yy" { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 4797 "dhcp6_parser.cc" +#line 4807 "dhcp6_parser.cc" break; - case 875: // output_entry: "{" $@138 output_params_list "}" -#line 3076 "dhcp6_parser.yy" + case 877: // output_entry: "{" $@138 output_params_list "}" +#line 3084 "dhcp6_parser.yy" { ctx.stack_.pop_back(); } -#line 4805 "dhcp6_parser.cc" +#line 4815 "dhcp6_parser.cc" break; - case 878: // output_params_list: output_params_list "," -#line 3082 "dhcp6_parser.yy" + case 880: // output_params_list: output_params_list "," +#line 3090 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4813 "dhcp6_parser.cc" +#line 4823 "dhcp6_parser.cc" break; - case 884: // $@139: %empty -#line 3094 "dhcp6_parser.yy" + case 886: // $@139: %empty +#line 3102 "dhcp6_parser.yy" { ctx.unique("output", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4822 "dhcp6_parser.cc" +#line 4832 "dhcp6_parser.cc" break; - case 885: // output: "output" $@139 ":" "constant string" -#line 3097 "dhcp6_parser.yy" + case 887: // output: "output" $@139 ":" "constant string" +#line 3105 "dhcp6_parser.yy" { ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("output", sev); ctx.leave(); } -#line 4832 "dhcp6_parser.cc" +#line 4842 "dhcp6_parser.cc" break; - case 886: // flush: "flush" ":" "boolean" -#line 3103 "dhcp6_parser.yy" + case 888: // flush: "flush" ":" "boolean" +#line 3111 "dhcp6_parser.yy" { ctx.unique("flush", ctx.loc2pos(yystack_[2].location)); ElementPtr flush(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("flush", flush); } -#line 4842 "dhcp6_parser.cc" +#line 4852 "dhcp6_parser.cc" break; - case 887: // maxsize: "maxsize" ":" "integer" -#line 3109 "dhcp6_parser.yy" + case 889: // maxsize: "maxsize" ":" "integer" +#line 3117 "dhcp6_parser.yy" { ctx.unique("maxsize", ctx.loc2pos(yystack_[2].location)); ElementPtr maxsize(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("maxsize", maxsize); } -#line 4852 "dhcp6_parser.cc" +#line 4862 "dhcp6_parser.cc" break; - case 888: // maxver: "maxver" ":" "integer" -#line 3115 "dhcp6_parser.yy" + case 890: // maxver: "maxver" ":" "integer" +#line 3123 "dhcp6_parser.yy" { ctx.unique("maxver", ctx.loc2pos(yystack_[2].location)); ElementPtr maxver(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("maxver", maxver); } -#line 4862 "dhcp6_parser.cc" +#line 4872 "dhcp6_parser.cc" break; - case 889: // $@140: %empty -#line 3121 "dhcp6_parser.yy" + case 891: // $@140: %empty +#line 3129 "dhcp6_parser.yy" { ctx.unique("pattern", ctx.loc2pos(yystack_[0].location)); ctx.enter(ctx.NO_KEYWORD); } -#line 4871 "dhcp6_parser.cc" +#line 4881 "dhcp6_parser.cc" break; - case 890: // pattern: "pattern" $@140 ":" "constant string" -#line 3124 "dhcp6_parser.yy" + case 892: // pattern: "pattern" $@140 ":" "constant string" +#line 3132 "dhcp6_parser.yy" { ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("pattern", sev); ctx.leave(); } -#line 4881 "dhcp6_parser.cc" +#line 4891 "dhcp6_parser.cc" break; - case 891: // $@141: %empty -#line 3130 "dhcp6_parser.yy" + case 893: // $@141: %empty +#line 3138 "dhcp6_parser.yy" { ctx.unique("compatibility", ctx.loc2pos(yystack_[0].location)); ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); @@ -4889,38 +4899,38 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(i); ctx.enter(ctx.COMPATIBILITY); } -#line 4893 "dhcp6_parser.cc" +#line 4903 "dhcp6_parser.cc" break; - case 892: // compatibility: "compatibility" $@141 ":" "{" compatibility_params "}" -#line 3136 "dhcp6_parser.yy" + case 894: // compatibility: "compatibility" $@141 ":" "{" compatibility_params "}" +#line 3144 "dhcp6_parser.yy" { ctx.stack_.pop_back(); ctx.leave(); } -#line 4902 "dhcp6_parser.cc" +#line 4912 "dhcp6_parser.cc" break; - case 895: // compatibility_params: compatibility_params "," -#line 3143 "dhcp6_parser.yy" + case 897: // compatibility_params: compatibility_params "," +#line 3151 "dhcp6_parser.yy" { ctx.warnAboutExtraCommas(yystack_[0].location); } -#line 4910 "dhcp6_parser.cc" +#line 4920 "dhcp6_parser.cc" break; - case 898: // lenient_option_parsing: "lenient-option-parsing" ":" "boolean" -#line 3152 "dhcp6_parser.yy" + case 900: // lenient_option_parsing: "lenient-option-parsing" ":" "boolean" +#line 3160 "dhcp6_parser.yy" { ctx.unique("lenient-option-parsing", ctx.loc2pos(yystack_[2].location)); ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("lenient-option-parsing", b); } -#line 4920 "dhcp6_parser.cc" +#line 4930 "dhcp6_parser.cc" break; -#line 4924 "dhcp6_parser.cc" +#line 4934 "dhcp6_parser.cc" default: break; @@ -5272,152 +5282,152 @@ namespace isc { namespace dhcp { } - const short Dhcp6Parser::yypact_ninf_ = -1044; + const short Dhcp6Parser::yypact_ninf_ = -1047; const signed char Dhcp6Parser::yytable_ninf_ = -1; const short Dhcp6Parser::yypact_[] = { - 638, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - -1044, -1044, -1044, -1044, -1044, 46, 26, 48, 56, 70, - 77, 94, 108, 114, 159, 175, 179, 190, 204, 248, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, 26, -181, - 40, 166, 23, 593, -15, 67, 219, 8, 236, 341, - -92, 693, 115, -1044, 207, 258, 85, 255, 278, -1044, - 71, -1044, -1044, -1044, -1044, -1044, -1044, -1044, 289, 291, - 292, 298, 299, 307, 310, 311, 334, 348, 364, 388, - 389, 395, -1044, 430, 441, 449, 450, 455, -1044, -1044, - -1044, 456, 459, 460, 461, -1044, -1044, -1044, 465, -1044, - -1044, -1044, -1044, -1044, -1044, -1044, 466, 467, 468, -1044, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, 469, -1044, - -1044, -1044, -1044, -1044, -1044, 471, 473, 475, -1044, -1044, - 476, -1044, 88, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - -1044, -1044, -1044, 477, 478, 479, 480, -1044, 99, -1044, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - -1044, -1044, 482, 483, -1044, -1044, -1044, -1044, -1044, -1044, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - -1044, -1044, -1044, -1044, -1044, -1044, 101, -1044, -1044, -1044, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, 489, -1044, -1044, - -1044, -1044, 137, -1044, -1044, -1044, -1044, -1044, -1044, 490, - -1044, 492, 493, -1044, -1044, -1044, -1044, -1044, -1044, 140, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, 297, 328, -1044, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, 337, -1044, -1044, - 494, -1044, -1044, -1044, 497, -1044, -1044, 362, 339, -1044, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - -1044, -1044, 499, 500, 503, -1044, -1044, -1044, -1044, 502, - 369, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - -1044, -1044, -1044, -1044, 154, -1044, -1044, -1044, 504, -1044, - -1044, 508, -1044, 509, 510, -1044, -1044, 511, 514, -1044, - -1044, -1044, -1044, -1044, -1044, -1044, 160, -1044, -1044, -1044, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - -1044, -1044, -1044, -1044, 516, 176, -1044, -1044, -1044, -1044, - 26, 26, -1044, 302, 518, -1044, -1044, 519, 522, 528, - 532, 533, 534, 313, 317, 318, 321, 323, 326, 330, - 332, 320, 324, 340, 342, 335, 344, 550, 350, 354, - 336, 343, 353, 553, 561, 564, 355, 357, 360, 358, - 568, 586, 587, 367, 590, 594, 596, 597, 598, 599, - 600, 377, 378, 384, 611, 612, 613, 614, 615, 616, - 618, 619, 625, 371, 626, 627, 628, 630, 632, 633, - 410, 411, 413, 652, 653, -1044, 166, -1044, 654, 431, - 442, 445, 447, 23, -1044, 670, 671, 672, 673, 674, - 453, 454, 677, 683, 684, 593, -1044, 685, 464, -15, - -1044, 687, 470, 689, 472, 484, 67, -1044, 691, 695, - 704, 705, 707, 711, 712, -1044, 219, -1044, 713, 714, - 495, 715, 716, 725, 505, -1044, 236, 726, 506, 515, - 517, -1044, 341, 728, 732, -51, -1044, 520, 738, 740, - 521, 745, 524, 526, 749, 750, 527, 541, 766, 767, - 768, 780, 693, -1044, 783, 570, 115, -1044, -1044, -1044, - 786, 795, 578, 797, 798, 799, 800, 803, -1044, -1044, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - -1044, -1044, 584, -1044, -1044, -1044, -1044, -1044, -94, 585, - 603, -1044, -1044, -1044, -1044, 806, 807, 810, -1044, 604, - 605, 322, 816, 815, 606, 325, -1044, -1044, -1044, 818, - 819, 827, 826, 829, 831, 832, 833, 834, -1044, 835, - 836, 837, 838, 621, 622, -1044, -1044, -1044, 858, 857, - -1044, 860, -1044, -1044, -1044, -1044, -1044, 861, 862, 656, - 657, 658, -1044, -1044, 860, 659, 878, -1044, 661, -1044, - -1044, 662, -1044, 665, -1044, -1044, -1044, 860, 860, 860, - 666, 667, 668, 669, -1044, 675, 678, -1044, 679, 680, - 681, -1044, -1044, 682, -1044, -1044, -1044, -1044, 686, 815, - -1044, -1044, 688, 690, -1044, 692, -1044, -1044, -38, 648, - -1044, -1044, -94, 694, 696, 697, -1044, 890, -1044, -1044, - 26, 166, -1044, 115, 23, 349, 349, 889, -1044, -1044, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, 891, 892, 901, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, 902, -1044, -1044, - -1044, -1044, -1044, -1044, -1044, -1044, -93, 26, 60, 120, - 903, 905, 907, 42, 243, 142, -42, -60, 693, -1044, - -1044, 909, -174, -1044, -1044, 913, 916, -1044, -1044, -1044, - -1044, -1044, -75, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - -1044, -1044, 889, -1044, 177, 206, 268, -1044, -1044, -1044, - -1044, 893, 920, 921, 922, 923, 924, 925, 926, 928, - 929, -1044, 930, -1044, -1044, -1044, -1044, -1044, 274, -1044, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - -1044, 275, -1044, 931, 932, -1044, -1044, 933, 935, -1044, - -1044, 934, 938, -1044, -1044, 936, 940, -1044, -1044, 939, - 941, -1044, -1044, -1044, 119, -1044, -1044, -1044, 942, -1044, - -1044, -1044, 141, -1044, -1044, -1044, -1044, -1044, 276, -1044, - -1044, -1044, -1044, 161, -1044, -1044, 943, 944, -1044, -1044, - 945, 947, -1044, 948, 949, 950, 951, 952, 953, 314, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, 954, - 955, 956, -1044, -1044, -1044, -1044, 327, -1044, -1044, -1044, - -1044, -1044, -1044, 957, 958, 959, -1044, 329, -1044, -1044, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, 331, - -1044, -1044, -1044, 960, -1044, 961, -1044, -1044, -1044, 338, - -1044, -1044, -1044, -1044, -1044, 345, -1044, 209, -1044, 962, - -1044, 346, -1044, -1044, 721, -1044, 963, 964, -1044, -1044, - 965, 967, -1044, -1044, -1044, 966, -1044, 969, -1044, -1044, - -1044, 968, 972, 973, 974, 710, 751, 742, 752, 747, - 755, 756, 757, 758, 759, 983, 762, 986, 987, 989, - 990, 349, -1044, -1044, 349, -1044, 889, 593, -1044, 891, - 236, -1044, 892, 341, -1044, 901, 706, -1044, 902, -93, - -1044, -1044, 60, -1044, 992, 995, 120, -1044, 359, 903, - -1044, 219, -1044, 905, -92, -1044, 907, 775, 776, 778, - 779, 782, 785, 42, -1044, 1011, 1012, 791, 794, 802, - 243, -1044, 804, 805, 840, 142, -1044, 1022, 1026, -42, - -1044, 825, 1040, 842, 1060, -60, -1044, -1044, 96, 909, - -1044, 841, -174, -1044, -1044, 1073, 1079, -15, -1044, 913, - 67, -1044, 916, 1080, -1044, -1044, 381, 866, 880, 918, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - 408, -1044, 919, 937, 946, 970, -1044, 366, -1044, 368, - -1044, 1077, -1044, 1078, -1044, -1044, -1044, -1044, -1044, -1044, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - -1044, -1044, -1044, -1044, -1044, 397, -1044, -1044, -1044, -1044, - -1044, -1044, -1044, -1044, 971, 975, -1044, -1044, -1044, 1114, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - -1044, 1133, 1148, -1044, -1044, -1044, -1044, -1044, -1044, 1145, - -1044, 412, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - 301, 976, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - 977, 978, -1044, -1044, 979, -1044, 26, -1044, -1044, 1150, - -1044, -1044, -1044, -1044, -1044, 425, -1044, -1044, -1044, -1044, - -1044, -1044, -1044, -1044, 980, 427, -1044, 428, -1044, 981, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, 706, - -1044, -1044, -1044, 1151, 1152, 982, -1044, 359, -1044, -1044, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, 1153, - 991, 1154, 96, -1044, -1044, -1044, -1044, -1044, -1044, 984, - 993, -1044, -1044, 1155, -1044, 994, -1044, -1044, -1044, 1156, - -1044, -1044, 259, -1044, 0, 1156, -1044, -1044, 1157, 1160, - 1161, -1044, 429, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - 1162, 996, 997, 999, 1163, 0, -1044, 1001, -1044, -1044, - -1044, 1002, -1044, -1044, -1044 + 637, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, -1047, 53, 26, 29, 48, 70, + 72, 93, 108, 114, 123, 133, 160, 175, 186, 208, + -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, 26, -182, + 74, 166, 23, 592, 197, -12, 214, 169, 102, 87, + -101, 692, 94, -1047, 266, 275, 85, 272, 290, -1047, + 77, -1047, -1047, -1047, -1047, -1047, -1047, -1047, 98, 292, + 293, 295, 296, 316, 320, 322, 357, 371, 373, 389, + 390, 401, -1047, 403, 404, 431, 449, 450, -1047, -1047, + -1047, 457, 460, 461, 464, -1047, -1047, -1047, 465, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, 466, 467, 468, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, 469, -1047, + -1047, -1047, -1047, -1047, -1047, 471, 473, 475, -1047, -1047, + 476, -1047, 78, -1047, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, 477, 478, 479, 480, -1047, 96, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, -1047, 482, 483, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, 106, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, -1047, 489, -1047, -1047, + -1047, -1047, 125, -1047, -1047, -1047, -1047, -1047, -1047, 490, + -1047, 492, 493, -1047, -1047, -1047, -1047, -1047, -1047, 126, + -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, -1047, 328, 415, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, -1047, 418, -1047, -1047, + 494, -1047, -1047, -1047, 497, -1047, -1047, 444, 500, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, -1047, 503, 504, 506, -1047, -1047, -1047, -1047, 496, + 509, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, 140, -1047, -1047, -1047, 510, -1047, + -1047, 511, -1047, 514, 516, -1047, -1047, 518, 519, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, 154, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, 522, 176, -1047, -1047, -1047, -1047, + 26, 26, -1047, 287, 523, -1047, -1047, 528, 532, 533, + 534, 535, 539, 317, 321, 324, 325, 327, 329, 331, + 334, 318, 337, 338, 340, 342, 343, 545, 344, 345, + 335, 351, 352, 553, 563, 570, 354, 356, 359, 361, + 582, 587, 589, 367, 593, 594, 596, 597, 598, 599, + 600, 376, 377, 383, 611, 612, 613, 614, 615, 616, + 618, 619, 625, 405, 626, 627, 630, 632, 633, 634, + 410, 427, 428, 654, 655, -1047, 166, -1047, 666, 445, + 446, 451, 452, 23, -1047, 667, 669, 672, 673, 677, + 455, 458, 684, 685, 686, 592, -1047, 687, 472, 197, + -1047, 689, 481, 691, 484, 488, -12, -1047, 694, 706, + 712, 713, 714, 715, 716, -1047, 214, -1047, 717, 725, + 505, 726, 729, 730, 507, -1047, 102, 738, 515, 520, + 521, -1047, 87, 739, 741, 0, -1047, 524, 743, 744, + 525, 750, 542, 543, 751, 767, 555, 558, 768, 786, + 792, 798, 692, -1047, 799, 577, 94, -1047, -1047, -1047, + 801, 702, 470, 800, 802, 803, 804, 636, -1047, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, -1047, 580, -1047, -1047, -1047, -1047, -1047, 90, 586, + 595, -1047, -1047, -1047, -1047, 810, 817, 818, -1047, 602, + 603, 262, 819, 823, 605, 341, -1047, -1047, -1047, 827, + 828, 829, 830, 831, 833, 835, 834, 836, -1047, 837, + 838, 839, 840, 638, 639, -1047, -1047, -1047, 858, 859, + -1047, 862, -1047, -1047, -1047, -1047, -1047, 876, 877, 657, + 658, 659, -1047, -1047, 862, 660, 880, -1047, 664, -1047, + -1047, 665, -1047, 668, -1047, -1047, -1047, 862, 862, 862, + 670, 671, 674, 678, -1047, 679, 680, -1047, 681, 682, + 683, -1047, -1047, 688, -1047, -1047, -1047, -1047, 690, 823, + -1047, -1047, 693, 695, -1047, 696, -1047, -1047, -14, 617, + -1047, -1047, 90, 697, 698, 699, -1047, 887, -1047, -1047, + 26, 166, -1047, 94, 23, 350, 350, 886, -1047, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, -1047, 888, 891, 892, + -1047, -1047, -1047, -1047, -1047, -1047, -1047, 896, -1047, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, -107, 26, 24, 136, + 903, 904, 905, 219, 42, 237, 36, -61, 692, -1047, + -1047, 906, -144, -1047, -1047, 908, 910, -1047, -1047, -1047, + -1047, -1047, -83, -1047, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, -1047, 886, -1047, 248, 258, 330, -1047, -1047, -1047, + -1047, 916, 922, 923, 924, 925, 926, 928, 929, 930, + 931, -1047, 932, 933, -1047, -1047, -1047, -1047, -1047, 332, + -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, 336, -1047, 934, 935, -1047, -1047, 936, + 938, -1047, -1047, 937, 941, -1047, -1047, 939, 943, -1047, + -1047, 942, 944, -1047, -1047, -1047, 95, -1047, -1047, -1047, + 945, -1047, -1047, -1047, 206, -1047, -1047, -1047, -1047, -1047, + 339, -1047, -1047, -1047, -1047, 210, -1047, -1047, 946, 947, + -1047, -1047, 948, 950, -1047, 951, 952, 953, 954, 955, + 956, 398, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, 957, 958, 959, -1047, -1047, -1047, -1047, 412, -1047, + -1047, -1047, -1047, -1047, -1047, 960, 961, 962, -1047, 413, + -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, 414, -1047, -1047, -1047, 963, -1047, 964, -1047, -1047, + -1047, 416, -1047, -1047, -1047, -1047, -1047, 422, -1047, 244, + -1047, 965, -1047, 424, -1047, -1047, 723, -1047, 966, 967, + -1047, -1047, 968, 970, -1047, -1047, -1047, 969, -1047, 972, + -1047, -1047, -1047, 971, 975, 976, 977, 749, 710, 755, + 742, 756, 757, 758, 759, 760, 761, 986, 762, 766, + 990, 992, 993, 995, 350, -1047, -1047, 350, -1047, 886, + 592, -1047, 888, 102, -1047, 891, 87, -1047, 892, 705, + -1047, 896, -107, -1047, -1047, 24, -1047, 998, 1000, 136, + -1047, 358, 903, -1047, 214, -1047, 904, -101, -1047, 905, + 778, 780, 781, 784, 787, 791, 219, -1047, 1015, 1016, + 796, 806, 807, 42, -1047, 842, 808, 820, 237, -1047, + 1025, 1027, 36, -1047, 843, 1052, 855, 1063, -61, -1047, + -1047, 99, 906, -1047, 856, -144, -1047, -1047, 1081, 1066, + 197, -1047, 908, -12, -1047, 910, 1084, -1047, -1047, 283, + 863, 868, 882, -1047, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, 274, -1047, -1047, 895, 918, 920, 921, + -1047, 425, -1047, 426, -1047, 1146, -1047, 1148, -1047, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, 433, + -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, 940, 949, + -1047, -1047, -1047, 1153, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, -1047, 1150, 1156, -1047, -1047, -1047, + -1047, -1047, -1047, 1152, -1047, 434, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, 192, 973, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, 974, 978, -1047, -1047, 979, -1047, + 26, -1047, -1047, 1157, -1047, -1047, -1047, -1047, -1047, 440, + -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, 980, 441, + -1047, 442, -1047, 981, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, 705, -1047, -1047, -1047, 1158, 1159, 982, + -1047, 358, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, 1160, 983, 1161, 99, -1047, -1047, -1047, + -1047, -1047, -1047, 987, 989, -1047, -1047, 1162, -1047, 994, + -1047, -1047, -1047, 1163, -1047, -1047, 273, -1047, -9, 1163, + -1047, -1047, 1164, 1165, 1167, -1047, 448, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, 1168, 996, 985, 991, 1169, -9, + -1047, 997, -1047, -1047, -1047, 1001, -1047, -1047, -1047 }; const short @@ -5427,18 +5437,18 @@ namespace isc { namespace dhcp { 20, 22, 24, 26, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 46, 38, 34, 33, 30, 31, 32, 37, 3, - 35, 36, 61, 5, 67, 7, 199, 9, 386, 11, - 599, 13, 628, 15, 660, 17, 517, 19, 526, 21, - 565, 23, 348, 25, 788, 27, 839, 29, 48, 41, - 0, 0, 0, 0, 0, 0, 662, 0, 528, 567, + 35, 36, 61, 5, 67, 7, 199, 9, 388, 11, + 601, 13, 630, 15, 662, 17, 519, 19, 528, 21, + 567, 23, 350, 25, 790, 27, 841, 29, 48, 41, + 0, 0, 0, 0, 0, 0, 664, 0, 530, 569, 0, 0, 0, 50, 0, 49, 0, 0, 42, 63, - 0, 65, 141, 837, 197, 218, 220, 222, 0, 0, + 0, 65, 141, 839, 197, 218, 220, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 160, 167, - 169, 0, 0, 0, 0, 377, 515, 556, 0, 190, - 192, 173, 459, 615, 617, 451, 0, 0, 0, 304, - 323, 313, 293, 698, 651, 339, 360, 730, 0, 325, - 755, 769, 786, 180, 182, 0, 0, 0, 849, 891, + 169, 0, 0, 0, 0, 379, 517, 558, 0, 190, + 192, 173, 461, 617, 619, 453, 0, 0, 0, 306, + 325, 315, 295, 700, 653, 341, 362, 732, 0, 327, + 757, 771, 788, 180, 182, 0, 0, 0, 851, 893, 0, 140, 0, 69, 72, 73, 74, 75, 76, 77, 78, 79, 80, 111, 112, 113, 114, 115, 81, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 117, @@ -5447,27 +5457,27 @@ namespace isc { namespace dhcp { 94, 95, 82, 108, 109, 110, 107, 83, 92, 93, 101, 102, 104, 91, 96, 97, 98, 99, 100, 105, 116, 136, 212, 0, 0, 0, 0, 211, 0, 201, - 204, 205, 206, 207, 208, 209, 210, 590, 619, 438, - 440, 442, 0, 0, 446, 444, 692, 437, 391, 392, - 393, 394, 395, 396, 397, 398, 417, 418, 419, 420, - 421, 424, 425, 426, 427, 428, 429, 430, 431, 432, - 433, 422, 423, 434, 435, 436, 0, 388, 402, 403, - 404, 407, 408, 411, 412, 413, 410, 405, 406, 399, - 400, 415, 416, 401, 409, 414, 612, 0, 611, 607, - 608, 606, 0, 601, 604, 605, 609, 610, 644, 0, - 647, 0, 0, 643, 637, 638, 636, 641, 642, 0, - 630, 633, 634, 639, 640, 635, 690, 678, 680, 682, - 684, 686, 688, 677, 674, 675, 676, 0, 663, 664, - 669, 670, 667, 671, 672, 673, 668, 0, 546, 268, - 0, 550, 548, 553, 0, 542, 543, 0, 529, 530, - 533, 545, 534, 535, 536, 552, 537, 538, 539, 540, - 541, 583, 0, 0, 0, 581, 582, 585, 586, 0, - 568, 569, 572, 573, 574, 575, 576, 577, 578, 579, - 580, 356, 358, 353, 0, 350, 354, 355, 0, 812, - 814, 0, 817, 0, 0, 821, 825, 0, 0, 829, - 831, 833, 835, 810, 808, 809, 0, 790, 793, 805, - 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, - 804, 806, 807, 846, 0, 0, 841, 844, 845, 47, + 204, 205, 206, 207, 208, 209, 210, 592, 621, 440, + 442, 444, 0, 0, 448, 446, 694, 439, 393, 394, + 395, 396, 397, 398, 399, 400, 419, 420, 421, 422, + 423, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 435, 424, 425, 436, 437, 438, 0, 390, 404, 405, + 406, 409, 410, 413, 414, 415, 412, 407, 408, 401, + 402, 417, 418, 403, 411, 416, 614, 0, 613, 609, + 610, 608, 0, 603, 606, 607, 611, 612, 646, 0, + 649, 0, 0, 645, 639, 640, 638, 643, 644, 0, + 632, 635, 636, 641, 642, 637, 692, 680, 682, 684, + 686, 688, 690, 679, 676, 677, 678, 0, 665, 666, + 671, 672, 669, 673, 674, 675, 670, 0, 548, 269, + 0, 552, 550, 555, 0, 544, 545, 0, 531, 532, + 535, 547, 536, 537, 538, 554, 539, 540, 541, 542, + 543, 585, 0, 0, 0, 583, 584, 587, 588, 0, + 570, 571, 574, 575, 576, 577, 578, 579, 580, 581, + 582, 358, 360, 355, 0, 352, 356, 357, 0, 814, + 816, 0, 819, 0, 0, 823, 827, 0, 0, 831, + 833, 835, 837, 812, 810, 811, 0, 792, 795, 807, + 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, + 806, 808, 809, 848, 0, 0, 843, 846, 847, 47, 52, 0, 39, 45, 0, 66, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5477,142 +5487,142 @@ namespace isc { namespace dhcp { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 71, 68, 0, 0, 0, 0, 0, 203, 200, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 390, 387, 0, 0, 603, - 600, 0, 0, 0, 0, 0, 632, 629, 0, 0, - 0, 0, 0, 0, 0, 661, 666, 518, 0, 0, - 0, 0, 0, 0, 0, 527, 532, 0, 0, 0, - 0, 566, 571, 0, 0, 352, 349, 0, 0, 0, + 0, 0, 0, 0, 0, 392, 389, 0, 0, 605, + 602, 0, 0, 0, 0, 0, 634, 631, 0, 0, + 0, 0, 0, 0, 0, 663, 668, 520, 0, 0, + 0, 0, 0, 0, 0, 529, 534, 0, 0, 0, + 0, 568, 573, 0, 0, 354, 351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 792, 789, 0, 0, 843, 840, 51, 43, + 0, 0, 794, 791, 0, 0, 845, 842, 51, 43, 0, 0, 0, 0, 0, 0, 0, 0, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 0, 185, 186, 157, 158, 159, 0, 0, 0, 171, 172, 179, 184, 0, 0, 0, 189, 0, - 0, 0, 0, 0, 0, 0, 448, 449, 450, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 754, 0, + 0, 0, 0, 0, 0, 0, 450, 451, 452, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 756, 0, 0, 0, 0, 0, 0, 194, 195, 196, 0, 0, 70, 0, 214, 215, 216, 217, 202, 0, 0, 0, - 0, 0, 457, 458, 0, 0, 0, 389, 0, 614, - 602, 0, 646, 0, 649, 650, 631, 0, 0, 0, - 0, 0, 0, 0, 665, 0, 0, 544, 0, 0, - 0, 555, 531, 0, 587, 588, 589, 570, 0, 0, - 351, 811, 0, 0, 816, 0, 819, 820, 0, 0, - 827, 828, 0, 0, 0, 0, 791, 0, 848, 842, + 0, 0, 459, 460, 0, 0, 0, 391, 0, 616, + 604, 0, 648, 0, 651, 652, 633, 0, 0, 0, + 0, 0, 0, 0, 667, 0, 0, 546, 0, 0, + 0, 557, 533, 0, 589, 590, 591, 572, 0, 0, + 353, 813, 0, 0, 818, 0, 821, 822, 0, 0, + 829, 830, 0, 0, 0, 0, 793, 0, 850, 844, 0, 0, 142, 0, 0, 0, 0, 224, 188, 162, - 163, 164, 165, 166, 161, 168, 170, 379, 519, 558, - 191, 193, 175, 176, 177, 178, 174, 461, 40, 616, - 618, 453, 454, 455, 456, 452, 0, 48, 0, 0, - 0, 653, 341, 0, 0, 0, 0, 0, 0, 181, - 183, 0, 0, 53, 213, 592, 621, 439, 441, 443, - 447, 445, 0, 613, 645, 648, 691, 679, 681, 683, - 685, 687, 689, 547, 269, 551, 549, 554, 584, 357, - 359, 813, 815, 818, 823, 824, 822, 826, 830, 832, - 834, 836, 224, 44, 0, 0, 0, 256, 261, 263, - 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 278, 0, 285, 287, 289, 291, 255, 0, 231, - 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, - 244, 245, 246, 248, 249, 250, 247, 251, 252, 253, - 254, 0, 229, 0, 225, 226, 384, 0, 380, 381, - 524, 0, 520, 521, 563, 0, 559, 560, 466, 0, - 462, 463, 311, 312, 0, 306, 309, 310, 0, 321, - 322, 318, 0, 315, 319, 320, 300, 302, 0, 295, - 298, 299, 703, 0, 700, 658, 0, 654, 655, 346, - 0, 342, 343, 0, 0, 0, 0, 0, 0, 0, - 362, 365, 366, 367, 368, 369, 370, 744, 750, 0, - 0, 0, 743, 740, 741, 742, 0, 732, 735, 738, - 736, 737, 739, 0, 0, 0, 335, 0, 327, 330, - 331, 332, 333, 334, 765, 767, 764, 762, 763, 0, - 757, 760, 761, 0, 781, 0, 784, 777, 778, 0, - 771, 774, 775, 776, 779, 0, 854, 0, 851, 0, - 897, 0, 893, 896, 55, 597, 0, 593, 594, 626, - 0, 622, 623, 696, 695, 0, 694, 0, 64, 838, - 198, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 163, 164, 165, 166, 161, 168, 170, 381, 521, 560, + 191, 193, 175, 176, 177, 178, 174, 463, 40, 618, + 620, 455, 456, 457, 458, 454, 0, 48, 0, 0, + 0, 655, 343, 0, 0, 0, 0, 0, 0, 181, + 183, 0, 0, 53, 213, 594, 623, 441, 443, 445, + 449, 447, 0, 615, 647, 650, 693, 681, 683, 685, + 687, 689, 691, 549, 270, 553, 551, 556, 586, 359, + 361, 815, 817, 820, 825, 826, 824, 828, 832, 834, + 836, 838, 224, 44, 0, 0, 0, 257, 262, 264, + 266, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 279, 0, 0, 287, 289, 291, 293, 256, 0, + 231, 234, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 246, 248, 249, 250, 251, 247, 252, + 253, 254, 255, 0, 229, 0, 225, 226, 386, 0, + 382, 383, 526, 0, 522, 523, 565, 0, 561, 562, + 468, 0, 464, 465, 313, 314, 0, 308, 311, 312, + 0, 323, 324, 320, 0, 317, 321, 322, 302, 304, + 0, 297, 300, 301, 705, 0, 702, 660, 0, 656, + 657, 348, 0, 344, 345, 0, 0, 0, 0, 0, + 0, 0, 364, 367, 368, 369, 370, 371, 372, 746, + 752, 0, 0, 0, 745, 742, 743, 744, 0, 734, + 737, 740, 738, 739, 741, 0, 0, 0, 337, 0, + 329, 332, 333, 334, 335, 336, 767, 769, 766, 764, + 765, 0, 759, 762, 763, 0, 783, 0, 786, 779, + 780, 0, 773, 776, 777, 778, 781, 0, 856, 0, + 853, 0, 899, 0, 895, 898, 55, 599, 0, 595, + 596, 628, 0, 624, 625, 698, 697, 0, 696, 0, + 64, 840, 198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 233, 219, 221, 0, 223, 228, 0, 378, 383, - 528, 516, 523, 567, 557, 562, 0, 460, 465, 308, - 305, 324, 317, 314, 0, 0, 297, 294, 705, 702, - 699, 662, 652, 657, 0, 340, 345, 0, 0, 0, - 0, 0, 0, 364, 361, 0, 0, 0, 0, 0, - 734, 731, 0, 0, 0, 329, 326, 0, 0, 759, - 756, 0, 0, 0, 0, 773, 770, 787, 0, 853, - 850, 0, 895, 892, 57, 0, 56, 0, 591, 596, - 0, 620, 625, 0, 693, 847, 0, 0, 0, 0, - 267, 270, 271, 272, 273, 274, 275, 276, 284, 277, - 0, 283, 0, 0, 0, 0, 232, 0, 227, 0, - 382, 0, 522, 0, 561, 514, 485, 486, 487, 489, - 490, 491, 475, 476, 494, 495, 496, 497, 498, 501, - 502, 503, 504, 505, 506, 507, 508, 509, 510, 499, - 500, 511, 512, 513, 471, 472, 473, 474, 483, 484, - 480, 481, 482, 479, 488, 0, 468, 477, 492, 493, - 478, 464, 307, 316, 0, 0, 296, 725, 727, 0, - 723, 717, 718, 719, 720, 721, 722, 724, 714, 715, - 716, 0, 706, 707, 710, 711, 712, 713, 701, 0, - 656, 0, 344, 371, 372, 373, 374, 375, 376, 363, - 0, 0, 749, 752, 753, 733, 336, 337, 338, 328, - 0, 0, 758, 780, 0, 783, 0, 772, 869, 0, - 867, 865, 859, 863, 864, 0, 856, 861, 862, 860, - 852, 898, 894, 54, 59, 0, 595, 0, 624, 0, - 258, 259, 260, 257, 262, 264, 266, 280, 281, 282, - 279, 286, 288, 290, 292, 230, 385, 525, 564, 470, - 467, 301, 303, 0, 0, 0, 704, 709, 659, 347, - 746, 747, 748, 745, 751, 766, 768, 782, 785, 0, - 0, 0, 858, 855, 58, 598, 627, 697, 469, 0, - 0, 729, 708, 0, 866, 0, 857, 726, 728, 0, - 868, 874, 0, 871, 0, 873, 870, 884, 0, 0, - 0, 889, 0, 876, 879, 880, 881, 882, 883, 872, - 0, 0, 0, 0, 0, 878, 875, 0, 886, 887, - 888, 0, 877, 885, 890 + 0, 0, 0, 0, 233, 219, 221, 0, 223, 228, + 0, 380, 385, 530, 518, 525, 569, 559, 564, 0, + 462, 467, 310, 307, 326, 319, 316, 0, 0, 299, + 296, 707, 704, 701, 664, 654, 659, 0, 342, 347, + 0, 0, 0, 0, 0, 0, 366, 363, 0, 0, + 0, 0, 0, 736, 733, 0, 0, 0, 331, 328, + 0, 0, 761, 758, 0, 0, 0, 0, 775, 772, + 789, 0, 855, 852, 0, 897, 894, 57, 0, 56, + 0, 593, 598, 0, 622, 627, 0, 695, 849, 0, + 0, 0, 0, 268, 271, 272, 273, 274, 275, 276, + 277, 286, 278, 0, 284, 285, 0, 0, 0, 0, + 232, 0, 227, 0, 384, 0, 524, 0, 563, 516, + 487, 488, 489, 491, 492, 493, 477, 478, 496, 497, + 498, 499, 500, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 512, 501, 502, 513, 514, 515, 473, 474, + 475, 476, 485, 486, 482, 483, 484, 481, 490, 0, + 470, 479, 494, 495, 480, 466, 309, 318, 0, 0, + 298, 727, 729, 0, 725, 719, 720, 721, 722, 723, + 724, 726, 716, 717, 718, 0, 708, 709, 712, 713, + 714, 715, 703, 0, 658, 0, 346, 373, 374, 375, + 376, 377, 378, 365, 0, 0, 751, 754, 755, 735, + 338, 339, 340, 330, 0, 0, 760, 782, 0, 785, + 0, 774, 871, 0, 869, 867, 861, 865, 866, 0, + 858, 863, 864, 862, 854, 900, 896, 54, 59, 0, + 597, 0, 626, 0, 259, 260, 261, 258, 263, 265, + 267, 281, 282, 283, 280, 288, 290, 292, 294, 230, + 387, 527, 566, 472, 469, 303, 305, 0, 0, 0, + 706, 711, 661, 349, 748, 749, 750, 747, 753, 768, + 770, 784, 787, 0, 0, 0, 860, 857, 58, 600, + 629, 699, 471, 0, 0, 731, 710, 0, 868, 0, + 859, 728, 730, 0, 870, 876, 0, 873, 0, 875, + 872, 886, 0, 0, 0, 891, 0, 878, 881, 882, + 883, 884, 885, 874, 0, 0, 0, 0, 0, 880, + 877, 0, 888, 889, 890, 0, 879, 887, 892 }; const short Dhcp6Parser::yypgoto_[] = { - -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - -1044, -1044, -1044, -1044, -1044, -1044, -4, -1044, -621, -1044, - 439, -1044, -1044, -1044, -1044, 372, -1044, -627, -1044, -1044, - -1044, -71, -1044, -1044, -1044, -1044, -1044, -1044, -1044, 418, - 644, -1044, -1044, -43, -39, 10, 14, 15, 17, -24, - -21, -17, -11, 30, 32, 33, -1044, 37, 43, 44, - 47, -1044, 432, 50, -1044, 51, -1044, 62, 63, 64, - -1044, -1044, 65, 66, -1044, 68, -1044, 69, -1044, -1044, - -1044, -1044, -1044, 76, -1044, 79, -1044, -1044, -1044, -1044, - -1044, -1044, -1044, -1044, 419, 639, -1044, -1044, -1044, -1044, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, 333, -1044, - 121, -1044, -745, 125, -1044, -1044, -1044, -1044, -1044, -1044, - -1044, -1044, -1044, -1044, -41, -1044, -788, -1044, -1044, -1044, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - 102, -1044, -1044, -1044, -1044, -1044, -1044, -1044, 110, -768, - -1044, -1044, -1044, -1044, 109, -1044, -1044, -1044, -1044, -1044, - -1044, -1044, 75, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - 97, -1044, -1044, -1044, 98, 601, -1044, -1044, -1044, -1044, - -1044, -1044, -1044, 91, -1044, -1044, -1044, -1044, -1044, -1044, - -1043, -1044, -1044, -1044, 126, -1044, -1044, -1044, 130, 643, - -1044, -1044, -1041, -1044, -1040, -1044, 84, -1044, 86, -1044, - 80, 81, 82, 83, -1044, -1044, -1044, -1039, -1044, -1044, - -1044, -1044, 122, -1044, -1044, -120, 1115, -1044, -1044, -1044, - -1044, -1044, 129, -1044, -1044, -1044, 133, -1044, 623, -1044, - -66, -1044, -1044, -1044, -1044, -1044, -65, -1044, -1044, -1044, - -1044, -1044, -16, -1044, -1044, -1044, 132, -1044, -1044, -1044, - 131, -1044, 640, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - -1044, -1044, -1044, -1044, -1044, 78, -1044, -1044, -1044, 93, - 649, -1044, -1044, -1044, -57, -1044, -3, -1044, -1044, -1044, - -1044, -1044, 89, -1044, -1044, -1044, 100, 676, -1044, -1044, - -1044, -1044, -1044, -1044, -1044, -45, -1044, -1044, -1044, 145, - -1044, -1044, -1044, 127, -1044, 646, 403, -1044, -1044, -1044, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - -1037, -1044, -1044, -1044, -1044, -1044, -1044, -1044, 150, -1044, - -1044, -1044, -86, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - -1044, -1044, 134, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - -1044, -1044, -1044, -1044, -1044, 124, -1044, -1044, -1044, -1044, - -1044, -1044, -1044, 128, -1044, -1044, -1044, -1044, -1044, -1044, - -1044, -1044, -1044, -1044, 437, 634, -1044, -1044, -1044, -1044, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, -1044, - -1044, -1044, -1044, -1044, -1044, 486, 631, -1044, -1044, -1044, - -1044, -1044, -1044, 123, -1044, -1044, -91, -1044, -1044, -1044, - -1044, -1044, -1044, -115, -1044, -1044, -131, -1044, -1044, -1044, - -1044, -1044, -1044, -1044, -1044, -1044, -1044, 135, -1044 + -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, -4, -1047, -602, -1047, + 113, -1047, -1047, -1047, -1047, 387, -1047, -644, -1047, -1047, + -1047, -71, -1047, -1047, -1047, -1047, -1047, -1047, -1047, 429, + 650, -1047, -1047, -43, -39, 10, 14, 15, 17, -24, + -21, -17, -11, 30, 32, 33, -1047, 37, 43, 44, + 47, -1047, 435, 50, -1047, 51, -1047, 62, 63, 64, + -1047, -1047, 65, 66, -1047, 68, -1047, 69, -1047, -1047, + -1047, -1047, -1047, 76, -1047, 79, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, 430, 645, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, 346, -1047, + 120, -1047, -745, 127, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, -41, -1047, -788, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, 103, -1047, -1047, -1047, -1047, -1047, -1047, -1047, 111, + -768, -1047, -1047, -1047, -1047, 110, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, 88, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, 97, -1047, -1047, -1047, 100, 604, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, 101, -1047, -1047, -1047, -1047, -1047, + -1047, -1046, -1047, -1047, -1047, 128, -1047, -1047, -1047, 131, + 647, -1047, -1047, -1044, -1047, -1043, -1047, 84, -1047, 86, + -1047, 80, 81, 82, 83, -1047, -1047, -1047, -1042, -1047, + -1047, -1047, -1047, 122, -1047, -1047, -119, 1118, -1047, -1047, + -1047, -1047, -1047, 137, -1047, -1047, -1047, 135, -1047, 646, + -1047, -66, -1047, -1047, -1047, -1047, -1047, -65, -1047, -1047, + -1047, -1047, -1047, -16, -1047, -1047, -1047, 141, -1047, -1047, + -1047, 142, -1047, 621, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, 89, -1047, -1047, -1047, + 71, 675, -1047, -1047, -1047, -57, -1047, -3, -1047, -1047, + -1047, -1047, -1047, 91, -1047, -1047, -1047, 104, 676, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, -45, -1047, -1047, -1047, + 143, -1047, -1047, -1047, 144, -1047, 701, 419, -1047, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, -1040, -1047, -1047, -1047, -1047, -1047, -1047, -1047, 148, + -1047, -1047, -1047, -88, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, 132, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, 124, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, 116, -1047, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, -1047, 443, 641, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, 485, 640, -1047, -1047, + -1047, -1047, -1047, -1047, 117, -1047, -1047, -96, -1047, -1047, + -1047, -1047, -1047, -1047, -115, -1047, -1047, -134, -1047, -1047, + -1047, -1047, -1047, -1047, -1047, -1047, -1047, -1047, 129, -1047 }; const short @@ -5620,195 +5630,195 @@ namespace isc { namespace dhcp { { 0, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 83, 39, 40, 69, - 779, 87, 88, 41, 68, 84, 85, 804, 1014, 1125, - 1126, 867, 43, 70, 90, 454, 91, 45, 71, 162, + 779, 87, 88, 41, 68, 84, 85, 804, 1016, 1128, + 1129, 868, 43, 70, 90, 454, 91, 45, 71, 162, 163, 164, 457, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 483, 764, 183, 484, 184, 485, 185, 186, 187, 496, 776, 188, 189, 518, 190, 519, 191, 192, 193, 194, 477, 195, 196, 494, 197, 495, 198, 199, 200, 201, 459, 47, 72, 238, 239, 240, 528, 241, 242, - 243, 244, 202, 460, 203, 461, 204, 462, 893, 894, - 895, 1054, 868, 869, 870, 1031, 1293, 871, 1032, 872, - 1033, 873, 1034, 874, 875, 569, 876, 877, 878, 879, - 880, 881, 882, 883, 884, 1045, 1300, 885, 886, 887, - 1047, 888, 1048, 889, 1049, 890, 1050, 205, 507, 928, - 929, 930, 1074, 931, 1075, 206, 504, 914, 915, 916, - 917, 207, 506, 922, 923, 924, 925, 208, 505, 209, - 514, 977, 978, 979, 980, 981, 210, 510, 940, 941, - 942, 1084, 63, 80, 404, 405, 406, 583, 407, 584, - 211, 511, 949, 950, 951, 952, 953, 954, 955, 956, - 212, 490, 897, 898, 899, 1057, 49, 73, 286, 287, - 288, 537, 289, 538, 290, 539, 291, 543, 292, 542, - 213, 214, 215, 216, 500, 785, 297, 298, 217, 497, - 909, 910, 911, 1066, 1205, 1206, 218, 491, 57, 77, - 901, 902, 903, 1060, 59, 78, 367, 368, 369, 370, - 371, 372, 373, 568, 374, 572, 375, 571, 376, 377, - 573, 378, 219, 492, 905, 906, 907, 1063, 61, 79, - 389, 390, 391, 392, 393, 577, 394, 395, 396, 397, - 398, 300, 535, 1016, 1017, 1018, 1127, 51, 74, 312, - 313, 314, 547, 315, 220, 498, 221, 499, 303, 536, - 1020, 1021, 1022, 1130, 53, 75, 329, 330, 331, 551, - 332, 333, 553, 334, 335, 222, 509, 936, 937, 938, - 1081, 55, 76, 347, 348, 349, 350, 559, 351, 560, - 352, 561, 353, 562, 354, 563, 355, 564, 356, 558, - 305, 544, 1025, 1026, 1133, 223, 508, 933, 934, 1078, - 1231, 1232, 1233, 1234, 1235, 1313, 1236, 1314, 1237, 224, - 512, 966, 967, 968, 1095, 1323, 969, 970, 1096, 971, - 972, 225, 226, 515, 989, 990, 991, 1107, 992, 1108, - 227, 516, 999, 1000, 1001, 1002, 1112, 1003, 1004, 1114, - 228, 517, 65, 81, 426, 427, 428, 429, 588, 430, - 589, 431, 432, 591, 433, 434, 435, 594, 836, 436, - 595, 437, 438, 439, 598, 440, 599, 441, 600, 442, - 601, 229, 458, 67, 82, 445, 446, 447, 604, 448, - 230, 523, 1007, 1008, 1118, 1275, 1276, 1277, 1278, 1331, - 1279, 1329, 1352, 1353, 1354, 1362, 1363, 1364, 1370, 1365, - 1366, 1367, 1368, 1374, 231, 524, 1011, 1012, 1013 + 243, 244, 202, 460, 203, 461, 204, 462, 895, 896, + 897, 1057, 869, 870, 871, 1033, 1297, 872, 1034, 873, + 1035, 874, 1036, 875, 876, 569, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 1047, 1304, 886, 887, 888, + 889, 1050, 890, 1051, 891, 1052, 892, 1053, 205, 507, + 930, 931, 932, 1077, 933, 1078, 206, 504, 916, 917, + 918, 919, 207, 506, 924, 925, 926, 927, 208, 505, + 209, 514, 979, 980, 981, 982, 983, 210, 510, 942, + 943, 944, 1087, 63, 80, 404, 405, 406, 583, 407, + 584, 211, 511, 951, 952, 953, 954, 955, 956, 957, + 958, 212, 490, 899, 900, 901, 1060, 49, 73, 286, + 287, 288, 537, 289, 538, 290, 539, 291, 543, 292, + 542, 213, 214, 215, 216, 500, 785, 297, 298, 217, + 497, 911, 912, 913, 1069, 1209, 1210, 218, 491, 57, + 77, 903, 904, 905, 1063, 59, 78, 367, 368, 369, + 370, 371, 372, 373, 568, 374, 572, 375, 571, 376, + 377, 573, 378, 219, 492, 907, 908, 909, 1066, 61, + 79, 389, 390, 391, 392, 393, 577, 394, 395, 396, + 397, 398, 300, 535, 1018, 1019, 1020, 1130, 51, 74, + 312, 313, 314, 547, 315, 220, 498, 221, 499, 303, + 536, 1022, 1023, 1024, 1133, 53, 75, 329, 330, 331, + 551, 332, 333, 553, 334, 335, 222, 509, 938, 939, + 940, 1084, 55, 76, 347, 348, 349, 350, 559, 351, + 560, 352, 561, 353, 562, 354, 563, 355, 564, 356, + 558, 305, 544, 1027, 1028, 1136, 223, 508, 935, 936, + 1081, 1235, 1236, 1237, 1238, 1239, 1317, 1240, 1318, 1241, + 224, 512, 968, 969, 970, 1098, 1327, 971, 972, 1099, + 973, 974, 225, 226, 515, 991, 992, 993, 1110, 994, + 1111, 227, 516, 1001, 1002, 1003, 1004, 1115, 1005, 1006, + 1117, 228, 517, 65, 81, 426, 427, 428, 429, 588, + 430, 589, 431, 432, 591, 433, 434, 435, 594, 836, + 436, 595, 437, 438, 439, 598, 440, 599, 441, 600, + 442, 601, 229, 458, 67, 82, 445, 446, 447, 604, + 448, 230, 523, 1009, 1010, 1121, 1279, 1280, 1281, 1282, + 1335, 1283, 1333, 1356, 1357, 1358, 1366, 1367, 1368, 1374, + 1369, 1370, 1371, 1372, 1378, 231, 524, 1013, 1014, 1015 }; const short Dhcp6Parser::yytable_[] = { - 161, 237, 257, 308, 323, 343, 963, 365, 385, 403, - 423, 891, 38, 387, 388, 245, 301, 316, 327, 345, - 921, 379, 399, 1195, 424, 1196, 1197, 1204, 304, 1210, - 258, 31, 778, 32, 259, 33, 1009, 366, 386, 232, - 233, 234, 235, 236, 86, 912, 30, 133, 134, 264, - 89, 160, 265, 401, 402, 42, 266, 299, 311, 326, - 344, 337, 267, 44, 127, 133, 134, 810, 1023, 246, - 302, 317, 328, 346, 455, 380, 400, 46, 425, 456, - 816, 817, 818, 260, 48, 306, 126, 261, 262, 451, - 263, 526, 133, 134, 401, 402, 527, 759, 760, 761, - 762, 50, 533, 268, 545, 269, 270, 534, 778, 546, - 271, 993, 994, 995, 254, 52, 272, 273, 255, 307, - 274, 54, 1069, 275, 276, 1070, 984, 985, 443, 444, - 133, 134, 913, 160, 763, 277, 278, 279, 280, 281, - 549, 282, 283, 556, 1072, 550, 127, 1073, 557, 284, - 834, 835, 285, 293, 294, 295, 296, 585, 309, 324, - 310, 325, 586, 602, 1079, 996, 56, 1080, 603, 318, - 319, 320, 321, 322, 133, 134, 359, 92, 93, 606, - 526, 94, 58, 160, 607, 1028, 60, 95, 96, 97, - 943, 944, 945, 946, 947, 948, 254, 62, 912, 919, - 255, 920, 1357, 133, 134, 1358, 1359, 1360, 1361, 606, - 160, 64, 1119, 449, 1029, 1120, 98, 99, 100, 101, - 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 126, 127, 926, 927, 160, 133, - 134, 34, 35, 36, 37, 66, 128, 129, 130, 131, - 358, 450, 1355, 452, 132, 1356, 1195, 957, 1196, 1197, - 1204, 533, 1210, 133, 134, 852, 1030, 1051, 1051, 1076, - 135, 453, 1052, 1053, 1077, 136, 137, 138, 139, 140, - 141, 142, 160, 463, 143, 464, 465, 1268, 127, 1269, - 1270, 144, 466, 467, 921, 565, 973, 974, 975, 1157, - 145, 468, 963, 146, 469, 470, 359, 1093, 360, 361, - 147, 160, 1094, 362, 363, 364, 133, 134, 148, 149, - 1100, 566, 1105, 150, 1109, 1101, 151, 1106, 471, 1110, - 152, 1115, 576, 133, 134, 567, 1116, 336, 602, 1122, - 133, 134, 472, 1117, 1123, 337, 338, 339, 340, 341, - 342, 153, 154, 155, 156, 157, 158, 160, 473, 1051, - 575, 545, 582, 847, 1305, 159, 1306, 848, 849, 850, - 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, - 861, 160, 474, 475, 862, 863, 864, 865, 866, 476, - 1309, 958, 959, 960, 961, 1310, 1290, 1291, 1292, 98, - 99, 100, 101, 102, 103, 585, 772, 773, 774, 775, - 1319, 359, 381, 360, 361, 382, 383, 384, 1332, 359, - 549, 556, 1375, 1333, 478, 1335, 1336, 1376, 127, 359, - 781, 782, 783, 784, 160, 479, 608, 609, 133, 134, - 1297, 1298, 1299, 480, 481, 161, 1320, 1321, 1322, 482, - 486, 160, 237, 487, 488, 489, 133, 134, 160, 493, + 161, 237, 257, 308, 323, 343, 965, 365, 385, 403, + 423, 893, 38, 387, 388, 245, 301, 316, 327, 345, + 923, 379, 399, 1199, 424, 1200, 1201, 1208, 304, 1214, + 258, 31, 914, 32, 259, 33, 42, 366, 386, 232, + 233, 234, 235, 236, 86, 401, 402, 133, 134, 264, + 810, 778, 265, 30, 337, 44, 266, 299, 311, 326, + 344, 1025, 267, 816, 817, 818, 959, 1011, 127, 246, + 302, 317, 328, 346, 852, 380, 400, 46, 425, 48, + 455, 526, 160, 260, 89, 456, 527, 261, 262, 451, + 263, 318, 319, 320, 321, 322, 133, 134, 1072, 533, + 50, 1073, 463, 268, 534, 269, 270, 443, 444, 545, + 271, 995, 996, 997, 546, 52, 272, 273, 254, 915, + 274, 54, 255, 275, 276, 160, 358, 778, 549, 556, + 56, 133, 134, 550, 557, 277, 278, 279, 280, 281, + 58, 282, 283, 585, 133, 134, 401, 402, 586, 284, + 133, 134, 285, 293, 294, 295, 296, 602, 309, 324, + 310, 325, 603, 914, 921, 998, 922, 60, 359, 381, + 360, 361, 382, 383, 384, 834, 835, 92, 93, 606, + 359, 94, 62, 359, 607, 360, 361, 95, 96, 97, + 362, 363, 364, 64, 1361, 133, 134, 1362, 1363, 1364, + 1365, 960, 961, 962, 963, 986, 987, 133, 134, 1075, + 133, 134, 1076, 1082, 160, 66, 1083, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 126, 127, 1122, 126, 160, + 1123, 526, 34, 35, 36, 37, 1030, 128, 129, 130, + 131, 606, 160, 928, 929, 132, 1031, 1199, 160, 1200, + 1201, 1208, 449, 1214, 133, 134, 1359, 127, 450, 1360, + 452, 135, 759, 760, 761, 762, 136, 137, 138, 139, + 140, 141, 142, 453, 127, 143, 464, 465, 306, 466, + 467, 1272, 144, 1273, 1274, 133, 134, 923, 1294, 1295, + 1296, 145, 1161, 160, 146, 965, 1301, 1302, 1303, 763, + 468, 147, 133, 134, 469, 160, 470, 254, 160, 148, + 149, 255, 307, 533, 150, 1054, 565, 151, 1032, 1054, + 1055, 152, 1079, 336, 1056, 133, 134, 1080, 1324, 1325, + 1326, 337, 338, 339, 340, 341, 342, 772, 773, 774, + 775, 471, 153, 154, 155, 156, 157, 158, 945, 946, + 947, 948, 949, 950, 847, 472, 159, 473, 848, 849, + 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, + 860, 861, 160, 474, 475, 862, 863, 864, 865, 866, + 867, 1096, 975, 976, 977, 476, 1097, 478, 479, 98, + 99, 100, 101, 102, 103, 1103, 1108, 1112, 566, 1118, + 1104, 1109, 1113, 160, 1119, 602, 567, 1125, 1054, 545, + 1120, 359, 1126, 1309, 1310, 480, 1313, 585, 127, 359, + 160, 1314, 1323, 1336, 549, 556, 608, 609, 1337, 1339, + 1340, 1379, 575, 481, 482, 161, 1380, 781, 782, 783, + 784, 486, 237, 160, 487, 488, 133, 134, 489, 493, 501, 502, 503, 513, 257, 520, 245, 521, 308, 522, - 525, 529, 530, 531, 532, 323, 540, 541, 301, 1217, - 1218, 1219, 316, 548, 552, 343, 554, 555, 570, 327, - 304, 574, 258, 578, 579, 365, 259, 580, 587, 345, - 581, 385, 590, 592, 593, 596, 387, 388, 597, 379, - 605, 264, 611, 612, 265, 399, 613, 610, 266, 299, - 246, 423, 614, 311, 267, 366, 615, 616, 617, 618, - 326, 386, 302, 619, 620, 424, 317, 621, 626, 622, - 344, 627, 623, 328, 632, 260, 624, 638, 625, 261, - 262, 630, 263, 346, 635, 639, 160, 628, 640, 629, - 631, 636, 645, 380, 160, 268, 633, 269, 270, 400, - 634, 637, 271, 641, 160, 642, 644, 643, 272, 273, - 646, 647, 274, 648, 649, 275, 276, 668, 650, 425, + 525, 529, 530, 531, 532, 323, 540, 541, 301, 1221, + 1222, 1223, 316, 548, 552, 343, 554, 555, 570, 327, + 304, 574, 258, 576, 581, 365, 259, 578, 579, 345, + 580, 385, 582, 610, 587, 590, 387, 388, 592, 379, + 593, 264, 596, 597, 265, 399, 605, 611, 266, 299, + 246, 423, 612, 311, 267, 366, 613, 614, 615, 616, + 326, 386, 302, 617, 618, 424, 317, 626, 619, 632, + 344, 620, 621, 328, 622, 260, 623, 638, 624, 261, + 262, 625, 263, 346, 635, 627, 628, 639, 629, 630, + 631, 633, 634, 380, 640, 268, 160, 269, 270, 400, + 636, 637, 271, 641, 160, 642, 645, 643, 272, 273, + 644, 646, 274, 647, 648, 275, 276, 649, 650, 425, 651, 652, 653, 654, 655, 656, 657, 277, 278, 279, 280, 281, 658, 282, 283, 659, 660, 661, 662, 663, 664, 284, 665, 666, 285, 293, 294, 295, 296, 667, - 669, 670, 671, 309, 672, 310, 673, 674, 675, 676, - 324, 677, 325, 98, 99, 100, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 678, 679, 681, 682, + 669, 670, 668, 309, 671, 310, 672, 673, 674, 675, + 324, 757, 325, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 676, 677, 678, 679, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, - 683, 684, 127, 685, 687, 688, 689, 690, 691, 692, - 161, 694, 693, 237, 129, 130, 131, 695, 696, 698, - 699, 701, 247, 703, 248, 707, 702, 245, 704, 708, - 133, 134, 249, 250, 251, 252, 253, 135, 709, 710, - 705, 711, 136, 137, 138, 712, 713, 715, 716, 718, - 719, 717, 254, 962, 976, 986, 255, 423, 144, 720, - 723, 1010, 728, 721, 724, 256, 729, 964, 982, 987, - 997, 424, 732, 725, 733, 726, 843, 734, 731, 735, - 736, 246, 737, 738, 739, 740, 98, 99, 100, 101, - 102, 103, 104, 105, 106, 107, 108, 109, 110, 741, - 742, 743, 744, 115, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 745, 127, 359, 747, 153, 154, - 750, 965, 983, 988, 998, 425, 748, 129, 130, 131, - 133, 134, 751, 752, 753, 754, 755, 756, 757, 758, - 765, 767, 768, 133, 134, 769, 250, 251, 160, 253, - 135, 777, 32, 786, 787, 136, 137, 138, 766, 770, - 771, 780, 788, 789, 790, 254, 791, 792, 837, 255, - 793, 794, 795, 796, 797, 798, 799, 800, 256, 1, + 681, 687, 127, 688, 682, 683, 689, 690, 684, 685, + 161, 691, 692, 237, 129, 130, 131, 693, 694, 695, + 696, 698, 247, 701, 248, 703, 752, 245, 707, 699, + 133, 134, 249, 250, 251, 252, 253, 135, 702, 751, + 708, 704, 136, 137, 138, 705, 709, 710, 711, 712, + 713, 715, 254, 964, 978, 988, 255, 423, 144, 716, + 718, 1012, 717, 719, 720, 256, 721, 966, 984, 989, + 999, 424, 723, 728, 724, 729, 843, 732, 733, 725, + 726, 246, 734, 731, 735, 738, 98, 99, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 736, + 737, 739, 742, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 740, 127, 359, 741, 153, 154, + 743, 967, 985, 990, 1000, 425, 744, 129, 130, 131, + 133, 134, 745, 747, 748, 750, 758, 753, 837, 754, + 755, 756, 765, 133, 134, 767, 250, 251, 160, 253, + 135, 766, 768, 769, 777, 136, 137, 138, 770, 771, + 32, 780, 786, 787, 788, 254, 790, 789, 791, 255, + 792, 793, 830, 794, 795, 796, 797, 798, 256, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 801, 802, 803, 805, 806, 408, 409, + 12, 13, 14, 801, 799, 800, 802, 803, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, - 420, 807, 808, 809, 811, 812, 813, 814, 421, 422, - 815, 819, 820, 821, 822, 842, 892, 1035, 896, 900, - 823, 153, 154, 824, 825, 826, 827, 828, 904, 908, - 932, 829, 935, 831, 939, 832, 1006, 833, 160, 839, - 1015, 840, 841, 1019, 1036, 1037, 1038, 1039, 1040, 1041, - 1042, 160, 1043, 1044, 1046, 1056, 1140, 1055, 1059, 1058, - 1061, 1062, 1064, 1065, 1068, 1067, 1124, 1083, 1071, 1082, - 1086, 1085, 1087, 1088, 1089, 1090, 1091, 1092, 1097, 1098, - 1099, 1102, 1103, 1104, 1111, 1113, 1121, 1129, 1142, 1128, - 1132, 1131, 1136, 1144, 1134, 1135, 1137, 1138, 1139, 1141, - 1143, 1145, 1146, 1147, 1148, 1149, 257, 1150, 1151, 365, - 1152, 1153, 385, 1154, 1155, 1165, 1214, 387, 388, 1215, - 301, 1243, 1244, 379, 1245, 1246, 399, 1220, 1247, 1208, - 343, 1248, 304, 403, 258, 1250, 1251, 1252, 259, 366, - 1253, 1229, 386, 1166, 345, 1194, 1260, 1167, 1254, 962, - 1261, 1257, 1256, 264, 976, 1221, 265, 1227, 986, 1222, - 266, 299, 1172, 964, 1264, 1173, 267, 1271, 982, 1174, - 1207, 1010, 987, 1263, 302, 1175, 308, 380, 997, 323, - 400, 1273, 1228, 1209, 1266, 344, 1258, 260, 1265, 1281, - 316, 261, 262, 327, 263, 1230, 1168, 1272, 346, 1283, - 1169, 1170, 1284, 1171, 1289, 1307, 1308, 268, 1223, 269, - 270, 1294, 1224, 1225, 271, 1226, 1176, 965, 1177, 1178, - 272, 273, 983, 1179, 274, 1295, 988, 275, 276, 1180, - 1181, 311, 998, 1182, 326, 1274, 1183, 1184, 1315, 277, - 278, 279, 280, 281, 317, 282, 283, 328, 1185, 1186, - 1187, 1188, 1189, 284, 1190, 1191, 285, 293, 294, 295, - 296, 1316, 1192, 1296, 1301, 1193, 1200, 1201, 1202, 1203, - 1198, 1317, 1199, 1318, 1330, 1339, 1340, 1343, 1345, 918, - 1349, 1371, 1302, 1351, 1372, 1373, 1377, 1381, 830, 844, - 680, 1303, 686, 846, 838, 1027, 1156, 1158, 1216, 1212, - 1259, 1213, 1241, 1242, 1249, 1160, 730, 1159, 697, 1338, - 1211, 1162, 357, 1161, 1163, 1304, 1311, 1164, 700, 722, - 1312, 1324, 1325, 1326, 1327, 1334, 1337, 1286, 1239, 1347, - 1341, 309, 714, 310, 324, 1024, 325, 1344, 1348, 1350, - 1285, 1288, 727, 1379, 1378, 1380, 1383, 1384, 1240, 1238, - 1287, 1342, 706, 1262, 1255, 1005, 746, 749, 1165, 845, - 1369, 1346, 1280, 1267, 1382, 0, 1220, 0, 0, 0, - 0, 0, 1208, 0, 0, 0, 0, 1282, 0, 0, - 1229, 1271, 1328, 0, 0, 0, 1166, 0, 1194, 0, - 1167, 0, 0, 0, 1221, 1273, 1227, 0, 1222, 0, - 0, 0, 0, 0, 0, 1172, 0, 0, 1173, 0, - 0, 1272, 1174, 1207, 0, 0, 0, 0, 1175, 0, - 0, 1228, 0, 0, 0, 0, 1209, 0, 0, 0, - 0, 0, 0, 0, 1230, 0, 0, 0, 0, 1168, - 0, 0, 0, 1169, 1170, 0, 1171, 1223, 0, 1274, - 0, 1224, 1225, 0, 1226, 0, 0, 0, 0, 1176, - 0, 1177, 1178, 0, 0, 0, 1179, 0, 0, 0, - 0, 0, 1180, 1181, 0, 0, 1182, 0, 0, 1183, - 1184, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1185, 1186, 1187, 1188, 1189, 0, 1190, 1191, 0, - 0, 0, 0, 0, 0, 1192, 0, 0, 1193, 1200, - 1201, 1202, 1203, 1198, 0, 1199 + 420, 805, 806, 807, 808, 809, 811, 812, 421, 422, + 813, 814, 842, 894, 815, 898, 819, 820, 902, 906, + 821, 153, 154, 910, 822, 823, 824, 825, 826, 827, + 934, 937, 941, 1008, 828, 1017, 829, 1021, 160, 831, + 1037, 832, 833, 839, 840, 841, 1038, 1039, 1040, 1041, + 1042, 160, 1043, 1044, 1045, 1046, 1048, 1049, 1059, 1144, + 1058, 1062, 1061, 1064, 1065, 1067, 1068, 1071, 1070, 1127, + 1086, 1074, 1085, 1089, 1088, 1090, 1091, 1092, 1093, 1094, + 1095, 1100, 1101, 1102, 1105, 1106, 1107, 1114, 1116, 1124, + 1132, 1146, 1131, 1135, 1134, 1139, 1143, 1137, 1138, 1140, + 1141, 1142, 1145, 1147, 1148, 1149, 1150, 1151, 1152, 257, + 1153, 1154, 365, 1155, 1156, 385, 1157, 1158, 1169, 1159, + 387, 388, 1218, 301, 1219, 1247, 379, 1248, 1249, 399, + 1224, 1250, 1212, 343, 1251, 304, 403, 258, 1252, 1254, + 1255, 259, 366, 1256, 1233, 386, 1170, 345, 1198, 1264, + 1171, 1265, 964, 1257, 1258, 1261, 264, 978, 1225, 265, + 1231, 988, 1226, 266, 299, 1176, 966, 1262, 1177, 267, + 1275, 984, 1178, 1211, 1012, 989, 1268, 302, 1179, 308, + 380, 999, 323, 400, 1277, 1232, 1213, 1270, 344, 1288, + 260, 1260, 1267, 316, 261, 262, 327, 263, 1234, 1172, + 1276, 346, 1269, 1173, 1174, 1285, 1175, 1287, 1293, 1298, + 268, 1227, 269, 270, 1299, 1228, 1229, 271, 1230, 1180, + 967, 1181, 1182, 272, 273, 985, 1183, 274, 1300, 990, + 275, 276, 1184, 1185, 311, 1000, 1186, 326, 1278, 1187, + 1188, 1305, 277, 278, 279, 280, 281, 317, 282, 283, + 328, 1189, 1190, 1191, 1192, 1193, 284, 1194, 1195, 285, + 293, 294, 295, 296, 1306, 1196, 1307, 1308, 1197, 1204, + 1205, 1206, 1207, 1202, 1311, 1203, 1312, 1319, 1320, 1321, + 1322, 1334, 1343, 1344, 1347, 1349, 1315, 1353, 1375, 1376, + 1355, 1377, 1381, 1385, 920, 1316, 680, 838, 686, 1162, + 844, 1160, 1220, 1216, 846, 1217, 1246, 1245, 1029, 730, + 1164, 1163, 697, 1215, 1342, 357, 1263, 1253, 1165, 1328, + 1329, 1289, 1166, 727, 1330, 1331, 1338, 1341, 1167, 1168, + 1348, 1345, 1383, 1351, 309, 1352, 310, 324, 1384, 325, + 1354, 1290, 722, 1387, 700, 1382, 1292, 1388, 1243, 1244, + 1242, 1026, 706, 1346, 1271, 1259, 1266, 1291, 845, 1284, + 1350, 1007, 1169, 746, 1373, 1386, 749, 0, 0, 0, + 1224, 0, 0, 0, 1286, 0, 1212, 0, 0, 0, + 0, 0, 0, 0, 1233, 1275, 1332, 714, 0, 0, + 1170, 0, 1198, 0, 1171, 0, 0, 0, 1225, 1277, + 1231, 0, 1226, 0, 0, 0, 0, 0, 0, 1176, + 0, 0, 1177, 0, 0, 1276, 1178, 1211, 0, 0, + 0, 0, 1179, 0, 0, 1232, 0, 0, 0, 0, + 1213, 0, 0, 0, 0, 0, 0, 0, 1234, 0, + 0, 0, 0, 1172, 0, 0, 0, 1173, 1174, 0, + 1175, 1227, 0, 1278, 0, 1228, 1229, 0, 1230, 0, + 0, 0, 0, 1180, 0, 1181, 1182, 0, 0, 0, + 1183, 0, 0, 0, 0, 0, 1184, 1185, 0, 0, + 1186, 0, 0, 1187, 1188, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1189, 1190, 1191, 1192, 1193, + 0, 1194, 1195, 0, 0, 0, 0, 0, 0, 1196, + 0, 0, 1197, 1204, 1205, 1206, 1207, 1202, 0, 1203 }; const short @@ -5816,383 +5826,384 @@ namespace isc { namespace dhcp { { 71, 72, 73, 74, 75, 76, 794, 78, 79, 80, 81, 756, 16, 79, 79, 72, 73, 74, 75, 76, - 788, 78, 79, 1066, 81, 1066, 1066, 1066, 73, 1066, - 73, 5, 653, 7, 73, 9, 210, 78, 79, 16, - 17, 18, 19, 20, 225, 138, 0, 107, 108, 73, - 10, 225, 73, 145, 146, 7, 73, 73, 74, 75, - 76, 136, 73, 7, 79, 107, 108, 694, 143, 72, - 73, 74, 75, 76, 3, 78, 79, 7, 81, 8, - 707, 708, 709, 73, 7, 100, 78, 73, 73, 4, - 73, 3, 107, 108, 145, 146, 8, 191, 192, 193, - 194, 7, 3, 73, 3, 73, 73, 8, 729, 8, - 73, 171, 172, 173, 129, 7, 73, 73, 133, 134, - 73, 7, 3, 73, 73, 6, 168, 169, 13, 14, - 107, 108, 225, 225, 228, 73, 73, 73, 73, 73, - 3, 73, 73, 3, 3, 8, 79, 6, 8, 73, - 188, 189, 73, 73, 73, 73, 73, 3, 74, 75, - 74, 75, 8, 3, 3, 225, 7, 6, 8, 102, - 103, 104, 105, 106, 107, 108, 80, 11, 12, 3, - 3, 15, 7, 225, 8, 8, 7, 21, 22, 23, - 148, 149, 150, 151, 152, 153, 129, 7, 138, 139, - 133, 141, 202, 107, 108, 205, 206, 207, 208, 3, - 225, 7, 3, 6, 8, 6, 50, 51, 52, 53, + 788, 78, 79, 1069, 81, 1069, 1069, 1069, 73, 1069, + 73, 5, 139, 7, 73, 9, 7, 78, 79, 16, + 17, 18, 19, 20, 226, 146, 147, 108, 109, 73, + 694, 653, 73, 0, 137, 7, 73, 73, 74, 75, + 76, 144, 73, 707, 708, 709, 24, 211, 80, 72, + 73, 74, 75, 76, 32, 78, 79, 7, 81, 7, + 3, 3, 226, 73, 10, 8, 8, 73, 73, 4, + 73, 103, 104, 105, 106, 107, 108, 109, 3, 3, + 7, 6, 4, 73, 8, 73, 73, 13, 14, 3, + 73, 172, 173, 174, 8, 7, 73, 73, 130, 226, + 73, 7, 134, 73, 73, 226, 24, 729, 3, 3, + 7, 108, 109, 8, 8, 73, 73, 73, 73, 73, + 7, 73, 73, 3, 108, 109, 146, 147, 8, 73, + 108, 109, 73, 73, 73, 73, 73, 3, 74, 75, + 74, 75, 8, 139, 140, 226, 142, 7, 81, 82, + 83, 84, 85, 86, 87, 189, 190, 11, 12, 3, + 81, 15, 7, 81, 8, 83, 84, 21, 22, 23, + 88, 89, 90, 7, 203, 108, 109, 206, 207, 208, + 209, 159, 160, 161, 162, 169, 170, 108, 109, 3, + 108, 109, 6, 3, 226, 7, 6, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, - 74, 75, 76, 77, 78, 79, 126, 127, 225, 107, - 108, 225, 226, 227, 228, 7, 90, 91, 92, 93, - 24, 3, 3, 8, 98, 6, 1309, 24, 1309, 1309, - 1309, 3, 1309, 107, 108, 32, 8, 3, 3, 3, - 114, 3, 8, 8, 8, 119, 120, 121, 122, 123, - 124, 125, 225, 4, 128, 4, 4, 201, 79, 203, - 204, 135, 4, 4, 1072, 8, 164, 165, 166, 1054, - 144, 4, 1100, 147, 4, 4, 80, 3, 82, 83, - 154, 225, 8, 87, 88, 89, 107, 108, 162, 163, - 3, 3, 3, 167, 3, 8, 170, 8, 4, 8, - 174, 3, 3, 107, 108, 8, 8, 128, 3, 3, - 107, 108, 4, 8, 8, 136, 137, 138, 139, 140, - 141, 195, 196, 197, 198, 199, 200, 225, 4, 3, - 8, 3, 3, 24, 8, 209, 8, 28, 29, 30, - 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, - 41, 225, 4, 4, 45, 46, 47, 48, 49, 4, - 3, 158, 159, 160, 161, 8, 25, 26, 27, 50, - 51, 52, 53, 54, 55, 3, 94, 95, 96, 97, - 8, 80, 81, 82, 83, 84, 85, 86, 3, 80, - 3, 3, 3, 8, 4, 8, 8, 8, 79, 80, - 115, 116, 117, 118, 225, 4, 450, 451, 107, 108, - 42, 43, 44, 4, 4, 526, 155, 156, 157, 4, - 4, 225, 533, 4, 4, 4, 107, 108, 225, 4, + 74, 75, 76, 77, 78, 79, 80, 3, 79, 226, + 6, 3, 226, 227, 228, 229, 8, 91, 92, 93, + 94, 3, 226, 127, 128, 99, 8, 1313, 226, 1313, + 1313, 1313, 6, 1313, 108, 109, 3, 80, 3, 6, + 8, 115, 192, 193, 194, 195, 120, 121, 122, 123, + 124, 125, 126, 3, 80, 129, 4, 4, 101, 4, + 4, 202, 136, 204, 205, 108, 109, 1075, 25, 26, + 27, 145, 1057, 226, 148, 1103, 42, 43, 44, 229, + 4, 155, 108, 109, 4, 226, 4, 130, 226, 163, + 164, 134, 135, 3, 168, 3, 8, 171, 8, 3, + 8, 175, 3, 129, 8, 108, 109, 8, 156, 157, + 158, 137, 138, 139, 140, 141, 142, 95, 96, 97, + 98, 4, 196, 197, 198, 199, 200, 201, 149, 150, + 151, 152, 153, 154, 24, 4, 210, 4, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 226, 4, 4, 45, 46, 47, 48, 49, + 50, 3, 165, 166, 167, 4, 8, 4, 4, 51, + 52, 53, 54, 55, 56, 3, 3, 3, 3, 3, + 8, 8, 8, 226, 8, 3, 8, 3, 3, 3, + 8, 81, 8, 8, 8, 4, 3, 3, 80, 81, + 226, 8, 8, 3, 3, 3, 450, 451, 8, 8, + 8, 3, 8, 4, 4, 526, 8, 116, 117, 118, + 119, 4, 533, 226, 4, 4, 108, 109, 4, 4, 4, 4, 4, 4, 545, 4, 533, 4, 549, 4, - 4, 4, 4, 4, 4, 556, 4, 4, 545, 130, - 131, 132, 549, 4, 4, 566, 4, 4, 4, 556, - 545, 4, 545, 4, 4, 576, 545, 4, 4, 566, - 8, 582, 4, 4, 4, 4, 582, 582, 4, 576, - 4, 545, 4, 4, 545, 582, 4, 225, 545, 545, - 533, 602, 4, 549, 545, 576, 4, 4, 4, 226, - 556, 582, 545, 226, 226, 602, 549, 226, 228, 226, - 566, 227, 226, 556, 4, 545, 226, 4, 226, 545, - 545, 226, 545, 566, 228, 4, 225, 227, 4, 227, - 226, 228, 4, 576, 225, 545, 226, 545, 545, 582, - 226, 228, 545, 228, 225, 228, 228, 227, 545, 545, - 4, 4, 545, 226, 4, 545, 545, 226, 4, 602, - 4, 4, 4, 4, 4, 228, 228, 545, 545, 545, - 545, 545, 228, 545, 545, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 556, 4, 4, 545, 131, + 132, 133, 549, 4, 4, 566, 4, 4, 4, 556, + 545, 4, 545, 3, 8, 576, 545, 4, 4, 566, + 4, 582, 3, 226, 4, 4, 582, 582, 4, 576, + 4, 545, 4, 4, 545, 582, 4, 4, 545, 545, + 533, 602, 4, 549, 545, 576, 4, 4, 4, 4, + 556, 582, 545, 4, 227, 602, 549, 229, 227, 4, + 566, 227, 227, 556, 227, 545, 227, 4, 227, 545, + 545, 227, 545, 566, 229, 228, 228, 4, 228, 227, + 227, 227, 227, 576, 4, 545, 226, 545, 545, 582, + 229, 229, 545, 229, 226, 229, 4, 228, 545, 545, + 229, 4, 545, 4, 227, 545, 545, 4, 4, 602, + 4, 4, 4, 4, 4, 229, 229, 545, 545, 545, + 545, 545, 229, 545, 545, 4, 4, 4, 4, 4, 4, 545, 4, 4, 545, 545, 545, 545, 545, 4, - 4, 4, 4, 549, 4, 549, 4, 4, 228, 228, - 556, 228, 556, 50, 51, 52, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, 4, 4, 4, 228, - 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, - 228, 226, 79, 226, 4, 4, 4, 4, 4, 226, - 751, 4, 228, 754, 91, 92, 93, 4, 4, 4, - 226, 4, 99, 4, 101, 4, 226, 754, 226, 4, - 107, 108, 109, 110, 111, 112, 113, 114, 4, 4, - 226, 4, 119, 120, 121, 4, 4, 4, 4, 4, - 4, 226, 129, 794, 795, 796, 133, 798, 135, 4, - 4, 802, 4, 228, 228, 142, 4, 794, 795, 796, - 797, 798, 4, 228, 4, 228, 750, 226, 228, 4, - 226, 754, 226, 4, 4, 228, 50, 51, 52, 53, - 54, 55, 56, 57, 58, 59, 60, 61, 62, 228, - 4, 4, 4, 67, 68, 69, 70, 71, 72, 73, - 74, 75, 76, 77, 4, 79, 80, 4, 195, 196, - 4, 794, 795, 796, 797, 798, 226, 91, 92, 93, - 107, 108, 7, 225, 7, 7, 7, 7, 5, 225, - 225, 5, 5, 107, 108, 5, 110, 111, 225, 113, - 114, 5, 7, 5, 5, 119, 120, 121, 225, 225, - 225, 225, 5, 7, 5, 129, 5, 5, 190, 133, - 7, 7, 7, 7, 7, 7, 225, 225, 142, 211, - 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, - 222, 223, 224, 5, 7, 5, 5, 5, 175, 176, - 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, - 187, 225, 225, 225, 225, 7, 225, 225, 195, 196, - 225, 225, 225, 225, 225, 5, 7, 4, 7, 7, - 225, 195, 196, 225, 225, 225, 225, 225, 7, 7, - 7, 225, 7, 225, 7, 225, 7, 225, 225, 225, - 7, 225, 225, 7, 4, 4, 4, 4, 4, 4, - 4, 225, 4, 4, 4, 3, 226, 6, 3, 6, - 6, 3, 6, 3, 3, 6, 225, 3, 6, 6, - 3, 6, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 3, 226, 6, - 3, 6, 4, 226, 8, 6, 4, 4, 4, 228, - 228, 226, 226, 226, 226, 226, 1057, 4, 226, 1060, - 4, 4, 1063, 4, 4, 1066, 4, 1063, 1063, 4, - 1057, 226, 226, 1060, 226, 226, 1063, 1078, 226, 1066, - 1081, 226, 1057, 1084, 1057, 4, 4, 226, 1057, 1060, - 226, 1078, 1063, 1066, 1081, 1066, 4, 1066, 226, 1100, - 4, 226, 228, 1057, 1105, 1078, 1057, 1078, 1109, 1078, - 1057, 1057, 1066, 1100, 4, 1066, 1057, 1118, 1105, 1066, - 1066, 1122, 1109, 228, 1057, 1066, 1127, 1060, 1115, 1130, - 1063, 1118, 1078, 1066, 4, 1081, 226, 1057, 226, 228, - 1127, 1057, 1057, 1130, 1057, 1078, 1066, 1118, 1081, 6, - 1066, 1066, 3, 1066, 4, 8, 8, 1057, 1078, 1057, - 1057, 225, 1078, 1078, 1057, 1078, 1066, 1100, 1066, 1066, - 1057, 1057, 1105, 1066, 1057, 225, 1109, 1057, 1057, 1066, - 1066, 1127, 1115, 1066, 1130, 1118, 1066, 1066, 4, 1057, - 1057, 1057, 1057, 1057, 1127, 1057, 1057, 1130, 1066, 1066, - 1066, 1066, 1066, 1057, 1066, 1066, 1057, 1057, 1057, 1057, - 1057, 8, 1066, 225, 225, 1066, 1066, 1066, 1066, 1066, - 1066, 3, 1066, 8, 4, 4, 4, 4, 4, 787, - 5, 4, 225, 7, 4, 4, 4, 4, 729, 751, - 526, 225, 533, 754, 742, 842, 1051, 1056, 1076, 1069, - 1105, 1072, 1084, 1086, 1093, 1059, 585, 1057, 545, 1309, - 1068, 1062, 77, 1060, 1063, 225, 225, 1065, 549, 576, - 225, 225, 225, 225, 225, 225, 225, 1129, 1081, 225, - 228, 1127, 566, 1127, 1130, 812, 1130, 226, 225, 225, - 1127, 1132, 582, 226, 228, 226, 225, 225, 1083, 1079, - 1130, 1317, 556, 1109, 1100, 798, 602, 606, 1309, 753, - 1355, 1332, 1119, 1115, 1375, -1, 1317, -1, -1, -1, - -1, -1, 1309, -1, -1, -1, -1, 1122, -1, -1, - 1317, 1332, 1266, -1, -1, -1, 1309, -1, 1309, -1, - 1309, -1, -1, -1, 1317, 1332, 1317, -1, 1317, -1, - -1, -1, -1, -1, -1, 1309, -1, -1, 1309, -1, - -1, 1332, 1309, 1309, -1, -1, -1, -1, 1309, -1, - -1, 1317, -1, -1, -1, -1, 1309, -1, -1, -1, - -1, -1, -1, -1, 1317, -1, -1, -1, -1, 1309, - -1, -1, -1, 1309, 1309, -1, 1309, 1317, -1, 1332, - -1, 1317, 1317, -1, 1317, -1, -1, -1, -1, 1309, - -1, 1309, 1309, -1, -1, -1, 1309, -1, -1, -1, - -1, -1, 1309, 1309, -1, -1, 1309, -1, -1, 1309, - 1309, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 1309, 1309, 1309, 1309, 1309, -1, 1309, 1309, -1, - -1, -1, -1, -1, -1, 1309, -1, -1, 1309, 1309, - 1309, 1309, 1309, 1309, -1, 1309 + 4, 4, 227, 549, 4, 549, 4, 4, 4, 229, + 556, 5, 556, 51, 52, 53, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 229, 229, 4, 4, + 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, + 4, 4, 80, 4, 229, 229, 4, 4, 227, 227, + 751, 4, 227, 754, 92, 93, 94, 229, 4, 4, + 4, 4, 100, 4, 102, 4, 226, 754, 4, 227, + 108, 109, 110, 111, 112, 113, 114, 115, 227, 7, + 4, 227, 120, 121, 122, 227, 4, 4, 4, 4, + 4, 4, 130, 794, 795, 796, 134, 798, 136, 4, + 4, 802, 227, 4, 4, 143, 229, 794, 795, 796, + 797, 798, 4, 4, 229, 4, 750, 4, 4, 229, + 229, 754, 227, 229, 4, 4, 51, 52, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 227, + 227, 4, 4, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 229, 80, 81, 229, 196, 197, + 4, 794, 795, 796, 797, 798, 4, 92, 93, 94, + 108, 109, 4, 4, 227, 4, 226, 7, 191, 7, + 7, 7, 226, 108, 109, 5, 111, 112, 226, 114, + 115, 226, 5, 5, 5, 120, 121, 122, 226, 226, + 7, 226, 5, 5, 5, 130, 5, 7, 5, 134, + 5, 7, 729, 7, 7, 7, 7, 7, 143, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 5, 226, 226, 7, 5, 176, 177, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 5, 5, 226, 226, 226, 226, 7, 196, 197, + 226, 226, 5, 7, 226, 7, 226, 226, 7, 7, + 226, 196, 197, 7, 226, 226, 226, 226, 226, 226, + 7, 7, 7, 7, 226, 7, 226, 7, 226, 226, + 4, 226, 226, 226, 226, 226, 4, 4, 4, 4, + 4, 226, 4, 4, 4, 4, 4, 4, 3, 229, + 6, 3, 6, 6, 3, 6, 3, 3, 6, 226, + 3, 6, 6, 3, 6, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 3, 229, 6, 3, 6, 4, 227, 8, 6, 4, + 4, 4, 227, 227, 227, 227, 227, 227, 227, 1060, + 4, 229, 1063, 227, 4, 1066, 4, 4, 1069, 4, + 1066, 1066, 4, 1060, 4, 227, 1063, 227, 227, 1066, + 1081, 227, 1069, 1084, 227, 1060, 1087, 1060, 227, 4, + 4, 1060, 1063, 227, 1081, 1066, 1069, 1084, 1069, 4, + 1069, 4, 1103, 227, 227, 227, 1060, 1108, 1081, 1060, + 1081, 1112, 1081, 1060, 1060, 1069, 1103, 227, 1069, 1060, + 1121, 1108, 1069, 1069, 1125, 1112, 4, 1060, 1069, 1130, + 1063, 1118, 1133, 1066, 1121, 1081, 1069, 4, 1084, 3, + 1060, 229, 229, 1130, 1060, 1060, 1133, 1060, 1081, 1069, + 1121, 1084, 227, 1069, 1069, 229, 1069, 6, 4, 226, + 1060, 1081, 1060, 1060, 226, 1081, 1081, 1060, 1081, 1069, + 1103, 1069, 1069, 1060, 1060, 1108, 1069, 1060, 226, 1112, + 1060, 1060, 1069, 1069, 1130, 1118, 1069, 1133, 1121, 1069, + 1069, 226, 1060, 1060, 1060, 1060, 1060, 1130, 1060, 1060, + 1133, 1069, 1069, 1069, 1069, 1069, 1060, 1069, 1069, 1060, + 1060, 1060, 1060, 1060, 226, 1069, 226, 226, 1069, 1069, + 1069, 1069, 1069, 1069, 8, 1069, 8, 4, 8, 3, + 8, 4, 4, 4, 4, 4, 226, 5, 4, 4, + 7, 4, 4, 4, 787, 226, 526, 742, 533, 1059, + 751, 1054, 1079, 1072, 754, 1075, 1089, 1087, 842, 585, + 1062, 1060, 545, 1071, 1313, 77, 1108, 1096, 1063, 226, + 226, 1130, 1065, 582, 226, 226, 226, 226, 1066, 1068, + 227, 229, 227, 226, 1130, 226, 1130, 1133, 227, 1133, + 226, 1132, 576, 226, 549, 229, 1135, 226, 1084, 1086, + 1082, 812, 556, 1321, 1118, 1103, 1112, 1133, 753, 1122, + 1336, 798, 1313, 602, 1359, 1379, 606, -1, -1, -1, + 1321, -1, -1, -1, 1125, -1, 1313, -1, -1, -1, + -1, -1, -1, -1, 1321, 1336, 1270, 566, -1, -1, + 1313, -1, 1313, -1, 1313, -1, -1, -1, 1321, 1336, + 1321, -1, 1321, -1, -1, -1, -1, -1, -1, 1313, + -1, -1, 1313, -1, -1, 1336, 1313, 1313, -1, -1, + -1, -1, 1313, -1, -1, 1321, -1, -1, -1, -1, + 1313, -1, -1, -1, -1, -1, -1, -1, 1321, -1, + -1, -1, -1, 1313, -1, -1, -1, 1313, 1313, -1, + 1313, 1321, -1, 1336, -1, 1321, 1321, -1, 1321, -1, + -1, -1, -1, 1313, -1, 1313, 1313, -1, -1, -1, + 1313, -1, -1, -1, -1, -1, 1313, 1313, -1, -1, + 1313, -1, -1, 1313, 1313, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 1313, 1313, 1313, 1313, 1313, + -1, 1313, 1313, -1, -1, -1, -1, -1, -1, 1313, + -1, -1, 1313, 1313, 1313, 1313, 1313, 1313, -1, 1313 }; const short Dhcp6Parser::yystos_[] = { - 0, 211, 212, 213, 214, 215, 216, 217, 218, 219, - 220, 221, 222, 223, 224, 230, 231, 232, 233, 234, - 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, - 0, 5, 7, 9, 225, 226, 227, 228, 245, 246, - 247, 252, 7, 261, 7, 266, 7, 321, 7, 435, - 7, 516, 7, 533, 7, 550, 7, 467, 7, 473, - 7, 497, 7, 411, 7, 621, 7, 652, 253, 248, - 262, 267, 322, 436, 517, 534, 551, 468, 474, 498, - 412, 622, 653, 245, 254, 255, 225, 250, 251, 10, - 263, 265, 11, 12, 15, 21, 22, 23, 50, 51, - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 74, 75, 76, 77, 78, 79, 90, 91, - 92, 93, 98, 107, 108, 114, 119, 120, 121, 122, - 123, 124, 125, 128, 135, 144, 147, 154, 162, 163, - 167, 170, 174, 195, 196, 197, 198, 199, 200, 209, - 225, 260, 268, 269, 270, 272, 273, 274, 275, 276, - 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, - 287, 288, 289, 292, 294, 296, 297, 298, 301, 302, - 304, 306, 307, 308, 309, 311, 312, 314, 316, 317, - 318, 319, 331, 333, 335, 376, 384, 390, 396, 398, - 405, 419, 429, 449, 450, 451, 452, 457, 465, 491, - 523, 525, 544, 574, 588, 600, 601, 609, 619, 650, - 659, 683, 16, 17, 18, 19, 20, 260, 323, 324, - 325, 327, 328, 329, 330, 523, 525, 99, 101, 109, - 110, 111, 112, 113, 129, 133, 142, 260, 272, 273, - 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, - 284, 286, 287, 288, 289, 292, 294, 296, 297, 298, - 301, 302, 304, 306, 312, 314, 437, 438, 439, 441, - 443, 445, 447, 449, 450, 451, 452, 455, 456, 491, - 510, 523, 525, 527, 544, 569, 100, 134, 260, 445, - 447, 491, 518, 519, 520, 522, 523, 525, 102, 103, - 104, 105, 106, 260, 445, 447, 491, 523, 525, 535, - 536, 537, 539, 540, 542, 543, 128, 136, 137, 138, - 139, 140, 141, 260, 491, 523, 525, 552, 553, 554, - 555, 557, 559, 561, 563, 565, 567, 465, 24, 80, - 82, 83, 87, 88, 89, 260, 353, 475, 476, 477, - 478, 479, 480, 481, 483, 485, 487, 488, 490, 523, - 525, 81, 84, 85, 86, 260, 353, 479, 485, 499, - 500, 501, 502, 503, 505, 506, 507, 508, 509, 523, - 525, 145, 146, 260, 413, 414, 415, 417, 175, 176, - 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, - 187, 195, 196, 260, 523, 525, 623, 624, 625, 626, - 628, 630, 631, 633, 634, 635, 638, 640, 641, 642, - 644, 646, 648, 13, 14, 654, 655, 656, 658, 6, - 3, 4, 8, 3, 264, 3, 8, 271, 651, 320, - 332, 334, 336, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 310, 4, 4, - 4, 4, 4, 290, 293, 295, 4, 4, 4, 4, - 430, 466, 492, 4, 313, 315, 299, 458, 524, 526, - 453, 4, 4, 4, 385, 397, 391, 377, 575, 545, - 406, 420, 589, 4, 399, 602, 610, 620, 303, 305, - 4, 4, 4, 660, 684, 4, 3, 8, 326, 4, - 4, 4, 4, 3, 8, 511, 528, 440, 442, 444, - 4, 4, 448, 446, 570, 3, 8, 521, 4, 3, - 8, 538, 4, 541, 4, 4, 3, 8, 568, 556, - 558, 560, 562, 564, 566, 8, 3, 8, 482, 354, - 4, 486, 484, 489, 4, 8, 3, 504, 4, 4, - 4, 8, 3, 416, 418, 3, 8, 4, 627, 629, - 4, 632, 4, 4, 636, 639, 4, 4, 643, 645, - 647, 649, 3, 8, 657, 4, 3, 8, 245, 245, - 225, 4, 4, 4, 4, 4, 4, 4, 226, 226, - 226, 226, 226, 226, 226, 226, 228, 227, 227, 227, - 226, 226, 4, 226, 226, 228, 228, 228, 4, 4, - 4, 228, 228, 227, 228, 4, 4, 4, 226, 4, - 4, 4, 4, 4, 4, 4, 228, 228, 228, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 226, 4, - 4, 4, 4, 4, 4, 228, 228, 228, 4, 4, - 269, 4, 228, 228, 226, 226, 324, 4, 4, 4, - 4, 4, 226, 228, 4, 4, 4, 438, 4, 226, - 519, 4, 226, 4, 226, 226, 536, 4, 4, 4, - 4, 4, 4, 4, 554, 4, 4, 226, 4, 4, - 4, 228, 477, 4, 228, 228, 228, 501, 4, 4, - 414, 228, 4, 4, 226, 4, 226, 226, 4, 4, - 228, 228, 4, 4, 4, 4, 624, 4, 226, 655, - 4, 7, 225, 7, 7, 7, 7, 5, 225, 191, - 192, 193, 194, 228, 291, 225, 225, 5, 5, 5, - 225, 225, 94, 95, 96, 97, 300, 5, 247, 249, - 225, 115, 116, 117, 118, 454, 5, 5, 5, 7, - 5, 5, 5, 7, 7, 7, 7, 7, 7, 225, - 225, 5, 7, 5, 256, 5, 5, 225, 225, 225, - 256, 225, 7, 225, 225, 225, 256, 256, 256, 225, - 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, - 249, 225, 225, 225, 188, 189, 637, 190, 291, 225, - 225, 225, 5, 245, 268, 654, 323, 24, 28, 29, + 0, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 231, 232, 233, 234, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 0, 5, 7, 9, 226, 227, 228, 229, 246, 247, + 248, 253, 7, 262, 7, 267, 7, 322, 7, 437, + 7, 518, 7, 535, 7, 552, 7, 469, 7, 475, + 7, 499, 7, 413, 7, 623, 7, 654, 254, 249, + 263, 268, 323, 438, 519, 536, 553, 470, 476, 500, + 414, 624, 655, 246, 255, 256, 226, 251, 252, 10, + 264, 266, 11, 12, 15, 21, 22, 23, 51, 52, + 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 91, 92, + 93, 94, 99, 108, 109, 115, 120, 121, 122, 123, + 124, 125, 126, 129, 136, 145, 148, 155, 163, 164, + 168, 171, 175, 196, 197, 198, 199, 200, 201, 210, + 226, 261, 269, 270, 271, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 293, 295, 297, 298, 299, 302, 303, + 305, 307, 308, 309, 310, 312, 313, 315, 317, 318, + 319, 320, 332, 334, 336, 378, 386, 392, 398, 400, + 407, 421, 431, 451, 452, 453, 454, 459, 467, 493, + 525, 527, 546, 576, 590, 602, 603, 611, 621, 652, + 661, 685, 16, 17, 18, 19, 20, 261, 324, 325, + 326, 328, 329, 330, 331, 525, 527, 100, 102, 110, + 111, 112, 113, 114, 130, 134, 143, 261, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 287, 288, 289, 290, 293, 295, 297, 298, 299, + 302, 303, 305, 307, 313, 315, 439, 440, 441, 443, + 445, 447, 449, 451, 452, 453, 454, 457, 458, 493, + 512, 525, 527, 529, 546, 571, 101, 135, 261, 447, + 449, 493, 520, 521, 522, 524, 525, 527, 103, 104, + 105, 106, 107, 261, 447, 449, 493, 525, 527, 537, + 538, 539, 541, 542, 544, 545, 129, 137, 138, 139, + 140, 141, 142, 261, 493, 525, 527, 554, 555, 556, + 557, 559, 561, 563, 565, 567, 569, 467, 24, 81, + 83, 84, 88, 89, 90, 261, 354, 477, 478, 479, + 480, 481, 482, 483, 485, 487, 489, 490, 492, 525, + 527, 82, 85, 86, 87, 261, 354, 481, 487, 501, + 502, 503, 504, 505, 507, 508, 509, 510, 511, 525, + 527, 146, 147, 261, 415, 416, 417, 419, 176, 177, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 196, 197, 261, 525, 527, 625, 626, 627, 628, + 630, 632, 633, 635, 636, 637, 640, 642, 643, 644, + 646, 648, 650, 13, 14, 656, 657, 658, 660, 6, + 3, 4, 8, 3, 265, 3, 8, 272, 653, 321, + 333, 335, 337, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 311, 4, 4, + 4, 4, 4, 291, 294, 296, 4, 4, 4, 4, + 432, 468, 494, 4, 314, 316, 300, 460, 526, 528, + 455, 4, 4, 4, 387, 399, 393, 379, 577, 547, + 408, 422, 591, 4, 401, 604, 612, 622, 304, 306, + 4, 4, 4, 662, 686, 4, 3, 8, 327, 4, + 4, 4, 4, 3, 8, 513, 530, 442, 444, 446, + 4, 4, 450, 448, 572, 3, 8, 523, 4, 3, + 8, 540, 4, 543, 4, 4, 3, 8, 570, 558, + 560, 562, 564, 566, 568, 8, 3, 8, 484, 355, + 4, 488, 486, 491, 4, 8, 3, 506, 4, 4, + 4, 8, 3, 418, 420, 3, 8, 4, 629, 631, + 4, 634, 4, 4, 638, 641, 4, 4, 645, 647, + 649, 651, 3, 8, 659, 4, 3, 8, 246, 246, + 226, 4, 4, 4, 4, 4, 4, 4, 227, 227, + 227, 227, 227, 227, 227, 227, 229, 228, 228, 228, + 227, 227, 4, 227, 227, 229, 229, 229, 4, 4, + 4, 229, 229, 228, 229, 4, 4, 4, 227, 4, + 4, 4, 4, 4, 4, 4, 229, 229, 229, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 227, 4, + 4, 4, 4, 4, 4, 229, 229, 229, 4, 4, + 270, 4, 229, 229, 227, 227, 325, 4, 4, 4, + 4, 4, 227, 229, 4, 4, 4, 440, 4, 227, + 521, 4, 227, 4, 227, 227, 538, 4, 4, 4, + 4, 4, 4, 4, 556, 4, 4, 227, 4, 4, + 4, 229, 479, 4, 229, 229, 229, 503, 4, 4, + 416, 229, 4, 4, 227, 4, 227, 227, 4, 4, + 229, 229, 4, 4, 4, 4, 626, 4, 227, 657, + 4, 7, 226, 7, 7, 7, 7, 5, 226, 192, + 193, 194, 195, 229, 292, 226, 226, 5, 5, 5, + 226, 226, 95, 96, 97, 98, 301, 5, 248, 250, + 226, 116, 117, 118, 119, 456, 5, 5, 5, 7, + 5, 5, 5, 7, 7, 7, 7, 7, 7, 226, + 226, 5, 7, 5, 257, 5, 5, 226, 226, 226, + 257, 226, 7, 226, 226, 226, 257, 257, 257, 226, + 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, + 250, 226, 226, 226, 189, 190, 639, 191, 292, 226, + 226, 226, 5, 246, 269, 656, 324, 24, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 45, 46, 47, 48, 49, 260, 341, 342, - 343, 346, 348, 350, 352, 353, 355, 356, 357, 358, - 359, 360, 361, 362, 363, 366, 367, 368, 370, 372, - 374, 341, 7, 337, 338, 339, 7, 431, 432, 433, - 7, 469, 470, 471, 7, 493, 494, 495, 7, 459, - 460, 461, 138, 225, 386, 387, 388, 389, 254, 139, - 141, 388, 392, 393, 394, 395, 126, 127, 378, 379, - 380, 382, 7, 576, 577, 7, 546, 547, 548, 7, - 407, 408, 409, 148, 149, 150, 151, 152, 153, 421, - 422, 423, 424, 425, 426, 427, 428, 24, 158, 159, - 160, 161, 260, 355, 523, 525, 590, 591, 592, 595, - 596, 598, 599, 164, 165, 166, 260, 400, 401, 402, - 403, 404, 523, 525, 168, 169, 260, 523, 525, 603, - 604, 605, 607, 171, 172, 173, 225, 523, 525, 611, - 612, 613, 614, 616, 617, 623, 7, 661, 662, 210, - 260, 685, 686, 687, 257, 7, 512, 513, 514, 7, - 529, 530, 531, 143, 555, 571, 572, 337, 8, 8, - 8, 344, 347, 349, 351, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 364, 4, 369, 371, 373, - 375, 3, 8, 8, 340, 6, 3, 434, 6, 3, - 472, 6, 3, 496, 6, 3, 462, 6, 3, 3, - 6, 6, 3, 6, 381, 383, 3, 8, 578, 3, - 6, 549, 6, 3, 410, 6, 3, 4, 4, 4, - 4, 4, 4, 3, 8, 593, 597, 4, 4, 4, - 3, 8, 4, 4, 4, 3, 8, 606, 608, 3, - 8, 4, 615, 4, 618, 3, 8, 8, 663, 3, - 6, 4, 3, 8, 225, 258, 259, 515, 6, 3, - 532, 6, 3, 573, 8, 6, 4, 4, 4, 4, - 226, 228, 226, 228, 226, 226, 226, 226, 226, 226, - 4, 226, 4, 4, 4, 4, 342, 341, 339, 437, - 433, 475, 471, 499, 495, 260, 272, 273, 274, 275, - 276, 277, 278, 279, 280, 281, 282, 283, 284, 286, - 287, 288, 289, 292, 294, 296, 297, 298, 301, 302, - 304, 306, 312, 314, 353, 429, 441, 443, 445, 447, - 449, 450, 451, 452, 456, 463, 464, 491, 523, 525, - 569, 461, 387, 393, 4, 4, 379, 130, 131, 132, - 260, 272, 273, 274, 275, 276, 277, 353, 491, 523, - 525, 579, 580, 581, 582, 583, 585, 587, 577, 552, - 548, 413, 409, 226, 226, 226, 226, 226, 226, 422, - 4, 4, 226, 226, 226, 591, 228, 226, 226, 401, - 4, 4, 604, 228, 4, 226, 4, 612, 201, 203, - 204, 260, 353, 523, 525, 664, 665, 666, 667, 669, - 662, 228, 686, 6, 3, 518, 514, 535, 531, 4, - 25, 26, 27, 345, 225, 225, 225, 42, 43, 44, - 365, 225, 225, 225, 225, 8, 8, 8, 8, 3, - 8, 225, 225, 584, 586, 4, 8, 3, 8, 8, - 155, 156, 157, 594, 225, 225, 225, 225, 245, 670, - 4, 668, 3, 8, 225, 8, 8, 225, 464, 4, - 4, 228, 581, 4, 226, 4, 665, 225, 225, 5, - 225, 7, 671, 672, 673, 3, 6, 202, 205, 206, - 207, 208, 674, 675, 676, 678, 679, 680, 681, 672, - 677, 4, 4, 4, 682, 3, 8, 4, 228, 226, - 226, 4, 675, 225, 225 + 40, 41, 45, 46, 47, 48, 49, 50, 261, 342, + 343, 344, 347, 349, 351, 353, 354, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 367, 368, 369, 370, + 372, 374, 376, 342, 7, 338, 339, 340, 7, 433, + 434, 435, 7, 471, 472, 473, 7, 495, 496, 497, + 7, 461, 462, 463, 139, 226, 388, 389, 390, 391, + 255, 140, 142, 390, 394, 395, 396, 397, 127, 128, + 380, 381, 382, 384, 7, 578, 579, 7, 548, 549, + 550, 7, 409, 410, 411, 149, 150, 151, 152, 153, + 154, 423, 424, 425, 426, 427, 428, 429, 430, 24, + 159, 160, 161, 162, 261, 356, 525, 527, 592, 593, + 594, 597, 598, 600, 601, 165, 166, 167, 261, 402, + 403, 404, 405, 406, 525, 527, 169, 170, 261, 525, + 527, 605, 606, 607, 609, 172, 173, 174, 226, 525, + 527, 613, 614, 615, 616, 618, 619, 625, 7, 663, + 664, 211, 261, 687, 688, 689, 258, 7, 514, 515, + 516, 7, 531, 532, 533, 144, 557, 573, 574, 338, + 8, 8, 8, 345, 348, 350, 352, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 365, 4, 4, + 371, 373, 375, 377, 3, 8, 8, 341, 6, 3, + 436, 6, 3, 474, 6, 3, 498, 6, 3, 464, + 6, 3, 3, 6, 6, 3, 6, 383, 385, 3, + 8, 580, 3, 6, 551, 6, 3, 412, 6, 3, + 4, 4, 4, 4, 4, 4, 3, 8, 595, 599, + 4, 4, 4, 3, 8, 4, 4, 4, 3, 8, + 608, 610, 3, 8, 4, 617, 4, 620, 3, 8, + 8, 665, 3, 6, 4, 3, 8, 226, 259, 260, + 517, 6, 3, 534, 6, 3, 575, 8, 6, 4, + 4, 4, 4, 227, 229, 227, 229, 227, 227, 227, + 227, 227, 227, 4, 229, 227, 4, 4, 4, 4, + 343, 342, 340, 439, 435, 477, 473, 501, 497, 261, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 287, 288, 289, 290, 293, 295, 297, + 298, 299, 302, 303, 305, 307, 313, 315, 354, 431, + 443, 445, 447, 449, 451, 452, 453, 454, 458, 465, + 466, 493, 525, 527, 571, 463, 389, 395, 4, 4, + 381, 131, 132, 133, 261, 273, 274, 275, 276, 277, + 278, 354, 493, 525, 527, 581, 582, 583, 584, 585, + 587, 589, 579, 554, 550, 415, 411, 227, 227, 227, + 227, 227, 227, 424, 4, 4, 227, 227, 227, 593, + 229, 227, 227, 403, 4, 4, 606, 229, 4, 227, + 4, 614, 202, 204, 205, 261, 354, 525, 527, 666, + 667, 668, 669, 671, 664, 229, 688, 6, 3, 520, + 516, 537, 533, 4, 25, 26, 27, 346, 226, 226, + 226, 42, 43, 44, 366, 226, 226, 226, 226, 8, + 8, 8, 8, 3, 8, 226, 226, 586, 588, 4, + 8, 3, 8, 8, 156, 157, 158, 596, 226, 226, + 226, 226, 246, 672, 4, 670, 3, 8, 226, 8, + 8, 226, 466, 4, 4, 229, 583, 4, 227, 4, + 667, 226, 226, 5, 226, 7, 673, 674, 675, 3, + 6, 203, 206, 207, 208, 209, 676, 677, 678, 680, + 681, 682, 683, 674, 679, 4, 4, 4, 684, 3, + 8, 4, 229, 227, 227, 4, 677, 226, 226 }; const short Dhcp6Parser::yyr1_[] = { - 0, 229, 231, 230, 232, 230, 233, 230, 234, 230, - 235, 230, 236, 230, 237, 230, 238, 230, 239, 230, - 240, 230, 241, 230, 242, 230, 243, 230, 244, 230, - 245, 245, 245, 245, 245, 245, 245, 246, 248, 247, - 249, 250, 250, 251, 251, 251, 253, 252, 254, 254, - 255, 255, 255, 257, 256, 258, 258, 259, 259, 259, - 260, 262, 261, 264, 263, 263, 265, 267, 266, 268, - 268, 268, 269, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - 269, 271, 270, 272, 273, 274, 275, 276, 277, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, - 290, 289, 291, 291, 291, 291, 291, 293, 292, 295, - 294, 296, 297, 299, 298, 300, 300, 300, 300, 301, - 303, 302, 305, 304, 306, 307, 308, 310, 309, 311, - 313, 312, 315, 314, 316, 317, 318, 320, 319, 322, - 321, 323, 323, 323, 324, 324, 324, 324, 324, 324, - 324, 324, 326, 325, 327, 328, 329, 330, 332, 331, - 334, 333, 336, 335, 337, 337, 338, 338, 338, 340, - 339, 341, 341, 341, 342, 342, 342, 342, 342, 342, - 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, - 342, 342, 342, 342, 342, 342, 344, 343, 345, 345, - 345, 347, 346, 349, 348, 351, 350, 352, 354, 353, - 355, 356, 357, 358, 359, 360, 361, 362, 364, 363, - 365, 365, 365, 366, 367, 369, 368, 371, 370, 373, - 372, 375, 374, 377, 376, 378, 378, 378, 379, 379, - 381, 380, 383, 382, 385, 384, 386, 386, 386, 387, - 387, 388, 389, 391, 390, 392, 392, 392, 393, 393, - 393, 394, 395, 397, 396, 399, 398, 400, 400, 400, - 401, 401, 401, 401, 401, 401, 402, 403, 404, 406, - 405, 407, 407, 408, 408, 408, 410, 409, 412, 411, - 413, 413, 413, 413, 414, 414, 416, 415, 418, 417, - 420, 419, 421, 421, 421, 422, 422, 422, 422, 422, - 422, 423, 424, 425, 426, 427, 428, 430, 429, 431, - 431, 432, 432, 432, 434, 433, 436, 435, 437, 437, - 437, 438, 438, 438, 438, 438, 438, 438, 438, 438, - 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, - 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, - 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, - 438, 438, 438, 438, 438, 438, 438, 438, 440, 439, - 442, 441, 444, 443, 446, 445, 448, 447, 449, 450, - 451, 453, 452, 454, 454, 454, 454, 455, 456, 458, - 457, 459, 459, 460, 460, 460, 462, 461, 463, 463, - 463, 464, 464, 464, 464, 464, 464, 464, 464, 464, - 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, - 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, - 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, - 464, 464, 464, 464, 464, 466, 465, 468, 467, 469, - 469, 470, 470, 470, 472, 471, 474, 473, 475, 475, - 476, 476, 476, 477, 477, 477, 477, 477, 477, 477, - 477, 477, 477, 478, 479, 480, 482, 481, 484, 483, - 486, 485, 487, 489, 488, 490, 492, 491, 493, 493, - 494, 494, 494, 496, 495, 498, 497, 499, 499, 500, - 500, 500, 501, 501, 501, 501, 501, 501, 501, 501, - 501, 501, 502, 504, 503, 505, 506, 507, 508, 509, - 511, 510, 512, 512, 513, 513, 513, 515, 514, 517, - 516, 518, 518, 518, 519, 519, 519, 519, 519, 519, - 519, 519, 521, 520, 522, 524, 523, 526, 525, 528, - 527, 529, 529, 530, 530, 530, 532, 531, 534, 533, - 535, 535, 535, 536, 536, 536, 536, 536, 536, 536, - 536, 536, 536, 536, 538, 537, 539, 541, 540, 542, - 543, 545, 544, 546, 546, 547, 547, 547, 549, 548, - 551, 550, 552, 552, 553, 553, 553, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, 556, 555, + 0, 230, 232, 231, 233, 231, 234, 231, 235, 231, + 236, 231, 237, 231, 238, 231, 239, 231, 240, 231, + 241, 231, 242, 231, 243, 231, 244, 231, 245, 231, + 246, 246, 246, 246, 246, 246, 246, 247, 249, 248, + 250, 251, 251, 252, 252, 252, 254, 253, 255, 255, + 256, 256, 256, 258, 257, 259, 259, 260, 260, 260, + 261, 263, 262, 265, 264, 264, 266, 268, 267, 269, + 269, 269, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 272, 271, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 291, 290, 292, 292, 292, 292, 292, 294, 293, 296, + 295, 297, 298, 300, 299, 301, 301, 301, 301, 302, + 304, 303, 306, 305, 307, 308, 309, 311, 310, 312, + 314, 313, 316, 315, 317, 318, 319, 321, 320, 323, + 322, 324, 324, 324, 325, 325, 325, 325, 325, 325, + 325, 325, 327, 326, 328, 329, 330, 331, 333, 332, + 335, 334, 337, 336, 338, 338, 339, 339, 339, 341, + 340, 342, 342, 342, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 345, 344, 346, + 346, 346, 348, 347, 350, 349, 352, 351, 353, 355, + 354, 356, 357, 358, 359, 360, 361, 362, 363, 365, + 364, 366, 366, 366, 367, 368, 369, 371, 370, 373, + 372, 375, 374, 377, 376, 379, 378, 380, 380, 380, + 381, 381, 383, 382, 385, 384, 387, 386, 388, 388, + 388, 389, 389, 390, 391, 393, 392, 394, 394, 394, + 395, 395, 395, 396, 397, 399, 398, 401, 400, 402, + 402, 402, 403, 403, 403, 403, 403, 403, 404, 405, + 406, 408, 407, 409, 409, 410, 410, 410, 412, 411, + 414, 413, 415, 415, 415, 415, 416, 416, 418, 417, + 420, 419, 422, 421, 423, 423, 423, 424, 424, 424, + 424, 424, 424, 425, 426, 427, 428, 429, 430, 432, + 431, 433, 433, 434, 434, 434, 436, 435, 438, 437, + 439, 439, 439, 440, 440, 440, 440, 440, 440, 440, + 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, + 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, + 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, + 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, + 442, 441, 444, 443, 446, 445, 448, 447, 450, 449, + 451, 452, 453, 455, 454, 456, 456, 456, 456, 457, + 458, 460, 459, 461, 461, 462, 462, 462, 464, 463, + 465, 465, 465, 466, 466, 466, 466, 466, 466, 466, + 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, + 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, + 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, + 466, 466, 466, 466, 466, 466, 466, 468, 467, 470, + 469, 471, 471, 472, 472, 472, 474, 473, 476, 475, + 477, 477, 478, 478, 478, 479, 479, 479, 479, 479, + 479, 479, 479, 479, 479, 480, 481, 482, 484, 483, + 486, 485, 488, 487, 489, 491, 490, 492, 494, 493, + 495, 495, 496, 496, 496, 498, 497, 500, 499, 501, + 501, 502, 502, 502, 503, 503, 503, 503, 503, 503, + 503, 503, 503, 503, 504, 506, 505, 507, 508, 509, + 510, 511, 513, 512, 514, 514, 515, 515, 515, 517, + 516, 519, 518, 520, 520, 520, 521, 521, 521, 521, + 521, 521, 521, 521, 523, 522, 524, 526, 525, 528, + 527, 530, 529, 531, 531, 532, 532, 532, 534, 533, + 536, 535, 537, 537, 537, 538, 538, 538, 538, 538, + 538, 538, 538, 538, 538, 538, 540, 539, 541, 543, + 542, 544, 545, 547, 546, 548, 548, 549, 549, 549, + 551, 550, 553, 552, 554, 554, 555, 555, 555, 556, + 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 558, 557, 560, 559, 562, 561, 564, 563, 566, 565, - 568, 567, 570, 569, 571, 571, 573, 572, 575, 574, - 576, 576, 576, 578, 577, 579, 579, 580, 580, 580, - 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, - 581, 581, 581, 581, 582, 584, 583, 586, 585, 587, - 589, 588, 590, 590, 590, 591, 591, 591, 591, 591, - 591, 591, 591, 591, 593, 592, 594, 594, 594, 595, - 597, 596, 598, 599, 600, 602, 601, 603, 603, 603, - 604, 604, 604, 604, 604, 606, 605, 608, 607, 610, - 609, 611, 611, 611, 612, 612, 612, 612, 612, 612, - 613, 615, 614, 616, 618, 617, 620, 619, 622, 621, - 623, 623, 623, 624, 624, 624, 624, 624, 624, 624, - 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, - 624, 625, 627, 626, 629, 628, 630, 632, 631, 633, - 634, 636, 635, 637, 637, 639, 638, 640, 641, 643, - 642, 645, 644, 647, 646, 649, 648, 651, 650, 653, - 652, 654, 654, 654, 655, 655, 657, 656, 658, 660, - 659, 661, 661, 661, 663, 662, 664, 664, 664, 665, - 665, 665, 665, 665, 665, 665, 666, 668, 667, 670, - 669, 671, 671, 671, 673, 672, 674, 674, 674, 675, - 675, 675, 675, 675, 677, 676, 678, 679, 680, 682, - 681, 684, 683, 685, 685, 685, 686, 686, 687 + 568, 567, 570, 569, 572, 571, 573, 573, 575, 574, + 577, 576, 578, 578, 578, 580, 579, 581, 581, 582, + 582, 582, 583, 583, 583, 583, 583, 583, 583, 583, + 583, 583, 583, 583, 583, 583, 584, 586, 585, 588, + 587, 589, 591, 590, 592, 592, 592, 593, 593, 593, + 593, 593, 593, 593, 593, 593, 595, 594, 596, 596, + 596, 597, 599, 598, 600, 601, 602, 604, 603, 605, + 605, 605, 606, 606, 606, 606, 606, 608, 607, 610, + 609, 612, 611, 613, 613, 613, 614, 614, 614, 614, + 614, 614, 615, 617, 616, 618, 620, 619, 622, 621, + 624, 623, 625, 625, 625, 626, 626, 626, 626, 626, + 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, + 626, 626, 626, 627, 629, 628, 631, 630, 632, 634, + 633, 635, 636, 638, 637, 639, 639, 641, 640, 642, + 643, 645, 644, 647, 646, 649, 648, 651, 650, 653, + 652, 655, 654, 656, 656, 656, 657, 657, 659, 658, + 660, 662, 661, 663, 663, 663, 665, 664, 666, 666, + 666, 667, 667, 667, 667, 667, 667, 667, 668, 670, + 669, 672, 671, 673, 673, 673, 675, 674, 676, 676, + 676, 677, 677, 677, 677, 677, 679, 678, 680, 681, + 682, 684, 683, 686, 685, 687, 687, 687, 688, 688, + 689 }; const signed char @@ -6223,71 +6234,72 @@ namespace isc { namespace dhcp { 0, 6, 0, 6, 0, 1, 1, 3, 2, 0, 4, 1, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 0, 4, 1, 1, - 1, 0, 4, 0, 4, 0, 4, 3, 0, 4, - 3, 3, 3, 3, 3, 3, 3, 3, 0, 4, - 1, 1, 1, 3, 3, 0, 4, 0, 4, 0, - 4, 0, 4, 0, 6, 1, 3, 2, 1, 1, - 0, 4, 0, 4, 0, 6, 1, 3, 2, 1, - 1, 1, 1, 0, 6, 1, 3, 2, 1, 1, - 1, 1, 1, 0, 6, 0, 6, 1, 3, 2, - 1, 1, 1, 1, 1, 1, 3, 3, 3, 0, - 6, 0, 1, 1, 3, 2, 0, 4, 0, 4, - 1, 3, 2, 1, 1, 1, 0, 4, 0, 4, - 0, 6, 1, 3, 2, 1, 1, 1, 1, 1, - 1, 3, 3, 3, 3, 3, 3, 0, 6, 0, - 1, 1, 3, 2, 0, 4, 0, 4, 1, 3, - 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 0, 4, - 0, 4, 0, 4, 0, 4, 0, 4, 3, 3, - 3, 0, 4, 1, 1, 1, 1, 3, 3, 0, - 6, 0, 1, 1, 3, 2, 0, 4, 1, 3, - 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 0, 6, 0, 4, 0, - 1, 1, 3, 2, 0, 4, 0, 4, 0, 1, - 1, 3, 2, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 3, 1, 0, 4, 0, 4, - 0, 4, 1, 0, 4, 3, 0, 6, 0, 1, - 1, 3, 2, 0, 4, 0, 4, 0, 1, 1, - 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 0, 4, 1, 1, 3, 3, 3, - 0, 6, 0, 1, 1, 3, 2, 0, 4, 0, - 4, 1, 3, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 0, 4, 3, 0, 4, 0, 4, 0, - 6, 0, 1, 1, 3, 2, 0, 4, 0, 4, - 1, 3, 2, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 0, 4, 3, 0, 4, 3, + 1, 1, 1, 1, 1, 1, 1, 0, 4, 1, + 1, 1, 0, 4, 0, 4, 0, 4, 3, 0, + 4, 3, 3, 3, 3, 3, 3, 3, 3, 0, + 4, 1, 1, 1, 3, 3, 3, 0, 4, 0, + 4, 0, 4, 0, 4, 0, 6, 1, 3, 2, + 1, 1, 0, 4, 0, 4, 0, 6, 1, 3, + 2, 1, 1, 1, 1, 0, 6, 1, 3, 2, + 1, 1, 1, 1, 1, 0, 6, 0, 6, 1, + 3, 2, 1, 1, 1, 1, 1, 1, 3, 3, 3, 0, 6, 0, 1, 1, 3, 2, 0, 4, - 0, 4, 0, 1, 1, 3, 2, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 0, 4, - 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, - 0, 4, 0, 6, 1, 1, 0, 4, 0, 6, - 1, 3, 2, 0, 4, 0, 1, 1, 3, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 0, 4, 0, 4, 3, - 0, 6, 1, 3, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 0, 4, 1, 1, 1, 3, - 0, 4, 3, 3, 3, 0, 6, 1, 3, 2, - 1, 1, 1, 1, 1, 0, 4, 0, 4, 0, - 6, 1, 3, 2, 1, 1, 1, 1, 1, 1, - 3, 0, 4, 3, 0, 4, 0, 6, 0, 4, + 0, 4, 1, 3, 2, 1, 1, 1, 0, 4, + 0, 4, 0, 6, 1, 3, 2, 1, 1, 1, + 1, 1, 1, 3, 3, 3, 3, 3, 3, 0, + 6, 0, 1, 1, 3, 2, 0, 4, 0, 4, 1, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 3, 0, 4, 0, 4, 3, 0, 4, 3, - 3, 0, 4, 1, 1, 0, 4, 3, 3, 0, - 4, 0, 4, 0, 4, 0, 4, 0, 6, 0, - 4, 1, 3, 2, 1, 1, 0, 6, 3, 0, - 6, 1, 3, 2, 0, 4, 1, 3, 2, 1, - 1, 1, 1, 1, 1, 1, 3, 0, 4, 0, - 6, 1, 3, 2, 0, 4, 1, 3, 2, 1, - 1, 1, 1, 1, 0, 4, 3, 3, 3, 0, - 4, 0, 6, 1, 3, 2, 1, 1, 3 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, + 3, 3, 3, 0, 4, 1, 1, 1, 1, 3, + 3, 0, 6, 0, 1, 1, 3, 2, 0, 4, + 1, 3, 2, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 0, 6, 0, + 4, 0, 1, 1, 3, 2, 0, 4, 0, 4, + 0, 1, 1, 3, 2, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 3, 1, 0, 4, + 0, 4, 0, 4, 1, 0, 4, 3, 0, 6, + 0, 1, 1, 3, 2, 0, 4, 0, 4, 0, + 1, 1, 3, 2, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 0, 4, 1, 1, 3, + 3, 3, 0, 6, 0, 1, 1, 3, 2, 0, + 4, 0, 4, 1, 3, 2, 1, 1, 1, 1, + 1, 1, 1, 1, 0, 4, 3, 0, 4, 0, + 4, 0, 6, 0, 1, 1, 3, 2, 0, 4, + 0, 4, 1, 3, 2, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 4, 3, 0, + 4, 3, 3, 0, 6, 0, 1, 1, 3, 2, + 0, 4, 0, 4, 0, 1, 1, 3, 2, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, + 0, 4, 0, 4, 0, 6, 1, 1, 0, 4, + 0, 6, 1, 3, 2, 0, 4, 0, 1, 1, + 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 0, 4, 0, + 4, 3, 0, 6, 1, 3, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 4, 1, 1, + 1, 3, 0, 4, 3, 3, 3, 0, 6, 1, + 3, 2, 1, 1, 1, 1, 1, 0, 4, 0, + 4, 0, 6, 1, 3, 2, 1, 1, 1, 1, + 1, 1, 3, 0, 4, 3, 0, 4, 0, 6, + 0, 4, 1, 3, 2, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 3, 0, 4, 0, 4, 3, 0, + 4, 3, 3, 0, 4, 1, 1, 0, 4, 3, + 3, 0, 4, 0, 4, 0, 4, 0, 4, 0, + 6, 0, 4, 1, 3, 2, 1, 1, 0, 6, + 3, 0, 6, 1, 3, 2, 0, 4, 1, 3, + 2, 1, 1, 1, 1, 1, 1, 1, 3, 0, + 4, 0, 6, 1, 3, 2, 0, 4, 1, 3, + 2, 1, 1, 1, 1, 1, 0, 4, 3, 3, + 3, 0, 4, 0, 6, 1, 3, 2, 1, 1, + 3 }; @@ -6310,8 +6322,8 @@ namespace isc { namespace dhcp { "\"read-timeout\"", "\"write-timeout\"", "\"tcp-user-timeout\"", "\"max-reconnect-tries\"", "\"reconnect-wait-time\"", "\"on-fail\"", "\"stop-retry-exit\"", "\"serve-retry-exit\"", - "\"serve-retry-continue\"", "\"max-row-errors\"", "\"trust-anchor\"", - "\"cert-file\"", "\"key-file\"", "\"cipher-list\"", + "\"serve-retry-continue\"", "\"retry-on-startup\"", "\"max-row-errors\"", + "\"trust-anchor\"", "\"cert-file\"", "\"key-file\"", "\"cipher-list\"", "\"preferred-lifetime\"", "\"min-preferred-lifetime\"", "\"max-preferred-lifetime\"", "\"valid-lifetime\"", "\"min-valid-lifetime\"", "\"max-valid-lifetime\"", "\"renew-timer\"", @@ -6405,12 +6417,13 @@ namespace isc { namespace dhcp { "password", "$@40", "host", "$@41", "port", "name", "$@42", "persist", "lfc_interval", "readonly", "connect_timeout", "read_timeout", "write_timeout", "tcp_user_timeout", "reconnect_wait_time", "on_fail", - "$@43", "on_fail_mode", "max_row_errors", "max_reconnect_tries", - "trust_anchor", "$@44", "cert_file", "$@45", "key_file", "$@46", - "cipher_list", "$@47", "sanity_checks", "$@48", "sanity_checks_params", - "sanity_checks_param", "lease_checks", "$@49", "extended_info_checks", - "$@50", "mac_sources", "$@51", "mac_sources_list", "mac_sources_value", - "duid_id", "string_id", "host_reservation_identifiers", "$@52", + "$@43", "on_fail_mode", "retry_on_startup", "max_row_errors", + "max_reconnect_tries", "trust_anchor", "$@44", "cert_file", "$@45", + "key_file", "$@46", "cipher_list", "$@47", "sanity_checks", "$@48", + "sanity_checks_params", "sanity_checks_param", "lease_checks", "$@49", + "extended_info_checks", "$@50", "mac_sources", "$@51", + "mac_sources_list", "mac_sources_value", "duid_id", "string_id", + "host_reservation_identifiers", "$@52", "host_reservation_identifiers_list", "host_reservation_identifier", "hw_address_id", "flex_id", "relay_supplied_options", "$@53", "dhcp_multi_threading", "$@54", "multi_threading_params", @@ -6494,96 +6507,97 @@ namespace isc { namespace dhcp { const short Dhcp6Parser::yyrline_[] = { - 0, 323, 323, 323, 324, 324, 325, 325, 326, 326, - 327, 327, 328, 328, 329, 329, 330, 330, 331, 331, - 332, 332, 333, 333, 334, 334, 335, 335, 336, 336, - 344, 345, 346, 347, 348, 349, 350, 353, 358, 358, - 369, 372, 373, 376, 381, 387, 392, 392, 399, 400, - 403, 407, 411, 417, 417, 424, 425, 428, 432, 436, - 446, 455, 455, 470, 470, 484, 487, 493, 493, 502, - 503, 504, 511, 512, 513, 514, 515, 516, 517, 518, - 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, - 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, - 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, - 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, - 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, - 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, - 579, 582, 582, 591, 597, 603, 609, 615, 621, 627, - 633, 639, 645, 651, 657, 663, 669, 675, 681, 687, - 693, 693, 702, 705, 708, 711, 714, 720, 720, 729, - 729, 738, 747, 757, 757, 766, 769, 772, 775, 780, - 786, 786, 795, 795, 804, 810, 816, 822, 822, 831, - 837, 837, 846, 846, 855, 861, 867, 873, 873, 885, - 885, 894, 895, 896, 901, 902, 903, 904, 905, 906, - 907, 908, 911, 911, 922, 928, 934, 940, 946, 946, - 959, 959, 972, 972, 983, 984, 987, 988, 989, 994, - 994, 1004, 1005, 1006, 1011, 1012, 1013, 1014, 1015, 1016, - 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, - 1027, 1028, 1029, 1030, 1031, 1032, 1035, 1035, 1043, 1044, - 1045, 1048, 1048, 1057, 1057, 1066, 1066, 1075, 1081, 1081, - 1090, 1096, 1102, 1108, 1114, 1120, 1126, 1133, 1139, 1139, - 1147, 1148, 1149, 1152, 1158, 1164, 1164, 1173, 1173, 1182, - 1182, 1191, 1191, 1200, 1200, 1211, 1212, 1213, 1218, 1219, - 1222, 1222, 1241, 1241, 1259, 1259, 1270, 1271, 1272, 1277, - 1278, 1281, 1286, 1291, 1291, 1302, 1303, 1304, 1309, 1310, - 1311, 1314, 1319, 1326, 1326, 1339, 1339, 1352, 1353, 1354, - 1359, 1360, 1361, 1362, 1363, 1364, 1367, 1373, 1379, 1385, - 1385, 1396, 1397, 1400, 1401, 1402, 1407, 1407, 1417, 1417, - 1427, 1428, 1429, 1432, 1435, 1436, 1439, 1439, 1448, 1448, - 1457, 1457, 1469, 1470, 1471, 1476, 1477, 1478, 1479, 1480, - 1481, 1484, 1490, 1496, 1502, 1508, 1514, 1523, 1523, 1537, - 1538, 1541, 1542, 1543, 1552, 1552, 1578, 1578, 1589, 1590, - 1591, 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, - 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, - 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, - 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, - 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1646, 1646, - 1655, 1655, 1664, 1664, 1673, 1673, 1682, 1682, 1693, 1699, - 1705, 1711, 1711, 1719, 1720, 1721, 1722, 1725, 1731, 1739, - 1739, 1751, 1752, 1756, 1757, 1758, 1763, 1763, 1771, 1772, - 1773, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, - 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, - 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, - 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, - 1817, 1818, 1819, 1820, 1821, 1828, 1828, 1842, 1842, 1851, - 1852, 1855, 1856, 1857, 1864, 1864, 1879, 1879, 1893, 1894, - 1897, 1898, 1899, 1904, 1905, 1906, 1907, 1908, 1909, 1910, - 1911, 1912, 1913, 1916, 1918, 1924, 1926, 1926, 1935, 1935, - 1944, 1944, 1953, 1955, 1955, 1964, 1974, 1974, 1987, 1988, - 1993, 1994, 1995, 2002, 2002, 2014, 2014, 2026, 2027, 2032, - 2033, 2034, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, - 2049, 2050, 2053, 2055, 2055, 2064, 2066, 2068, 2074, 2080, - 2089, 2089, 2102, 2103, 2106, 2107, 2108, 2113, 2113, 2123, - 2123, 2133, 2134, 2135, 2140, 2141, 2142, 2143, 2144, 2145, - 2146, 2147, 2150, 2150, 2159, 2165, 2165, 2190, 2190, 2220, - 2220, 2233, 2234, 2237, 2238, 2239, 2244, 2244, 2256, 2256, - 2268, 2269, 2270, 2275, 2276, 2277, 2278, 2279, 2280, 2281, - 2282, 2283, 2284, 2285, 2288, 2288, 2297, 2303, 2303, 2312, - 2318, 2327, 2327, 2338, 2339, 2342, 2343, 2344, 2349, 2349, - 2358, 2358, 2367, 2368, 2371, 2372, 2373, 2379, 2380, 2381, - 2382, 2383, 2384, 2385, 2386, 2387, 2388, 2389, 2392, 2392, - 2403, 2403, 2414, 2414, 2423, 2423, 2432, 2432, 2441, 2441, - 2450, 2450, 2464, 2464, 2475, 2476, 2479, 2479, 2491, 2491, - 2502, 2503, 2504, 2509, 2509, 2519, 2520, 2523, 2524, 2525, - 2530, 2531, 2532, 2533, 2534, 2535, 2536, 2537, 2538, 2539, - 2540, 2541, 2542, 2543, 2546, 2548, 2548, 2557, 2557, 2566, - 2575, 2575, 2588, 2589, 2590, 2595, 2596, 2597, 2598, 2599, - 2600, 2601, 2602, 2603, 2606, 2606, 2614, 2615, 2616, 2619, - 2625, 2625, 2634, 2640, 2648, 2656, 2656, 2667, 2668, 2669, - 2674, 2675, 2676, 2677, 2678, 2681, 2681, 2690, 2690, 2702, - 2702, 2715, 2716, 2717, 2722, 2723, 2724, 2725, 2726, 2727, - 2730, 2736, 2736, 2745, 2751, 2751, 2761, 2761, 2774, 2774, - 2784, 2785, 2786, 2791, 2792, 2793, 2794, 2795, 2796, 2797, - 2798, 2799, 2800, 2801, 2802, 2803, 2804, 2805, 2806, 2807, - 2808, 2811, 2818, 2818, 2827, 2827, 2836, 2842, 2842, 2851, - 2857, 2863, 2863, 2872, 2873, 2876, 2876, 2886, 2893, 2900, - 2900, 2909, 2909, 2919, 2919, 2929, 2929, 2941, 2941, 2953, - 2953, 2963, 2964, 2965, 2971, 2972, 2975, 2975, 2986, 2994, - 2994, 3007, 3008, 3009, 3015, 3015, 3023, 3024, 3025, 3030, - 3031, 3032, 3033, 3034, 3035, 3036, 3039, 3045, 3045, 3054, - 3054, 3065, 3066, 3067, 3072, 3072, 3080, 3081, 3082, 3087, - 3088, 3089, 3090, 3091, 3094, 3094, 3103, 3109, 3115, 3121, - 3121, 3130, 3130, 3141, 3142, 3143, 3148, 3149, 3152 + 0, 324, 324, 324, 325, 325, 326, 326, 327, 327, + 328, 328, 329, 329, 330, 330, 331, 331, 332, 332, + 333, 333, 334, 334, 335, 335, 336, 336, 337, 337, + 345, 346, 347, 348, 349, 350, 351, 354, 359, 359, + 370, 373, 374, 377, 382, 388, 393, 393, 400, 401, + 404, 408, 412, 418, 418, 425, 426, 429, 433, 437, + 447, 456, 456, 471, 471, 485, 488, 494, 494, 503, + 504, 505, 512, 513, 514, 515, 516, 517, 518, 519, + 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, + 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, + 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, + 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, + 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, + 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, + 580, 583, 583, 592, 598, 604, 610, 616, 622, 628, + 634, 640, 646, 652, 658, 664, 670, 676, 682, 688, + 694, 694, 703, 706, 709, 712, 715, 721, 721, 730, + 730, 739, 748, 758, 758, 767, 770, 773, 776, 781, + 787, 787, 796, 796, 805, 811, 817, 823, 823, 832, + 838, 838, 847, 847, 856, 862, 868, 874, 874, 886, + 886, 895, 896, 897, 902, 903, 904, 905, 906, 907, + 908, 909, 912, 912, 923, 929, 935, 941, 947, 947, + 960, 960, 973, 973, 984, 985, 988, 989, 990, 995, + 995, 1005, 1006, 1007, 1012, 1013, 1014, 1015, 1016, 1017, + 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, + 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1037, 1037, 1045, + 1046, 1047, 1050, 1050, 1059, 1059, 1068, 1068, 1077, 1083, + 1083, 1092, 1098, 1104, 1110, 1116, 1122, 1128, 1135, 1141, + 1141, 1149, 1150, 1151, 1154, 1160, 1166, 1172, 1172, 1181, + 1181, 1190, 1190, 1199, 1199, 1208, 1208, 1219, 1220, 1221, + 1226, 1227, 1230, 1230, 1249, 1249, 1267, 1267, 1278, 1279, + 1280, 1285, 1286, 1289, 1294, 1299, 1299, 1310, 1311, 1312, + 1317, 1318, 1319, 1322, 1327, 1334, 1334, 1347, 1347, 1360, + 1361, 1362, 1367, 1368, 1369, 1370, 1371, 1372, 1375, 1381, + 1387, 1393, 1393, 1404, 1405, 1408, 1409, 1410, 1415, 1415, + 1425, 1425, 1435, 1436, 1437, 1440, 1443, 1444, 1447, 1447, + 1456, 1456, 1465, 1465, 1477, 1478, 1479, 1484, 1485, 1486, + 1487, 1488, 1489, 1492, 1498, 1504, 1510, 1516, 1522, 1531, + 1531, 1545, 1546, 1549, 1550, 1551, 1560, 1560, 1586, 1586, + 1597, 1598, 1599, 1605, 1606, 1607, 1608, 1609, 1610, 1611, + 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619, 1620, 1621, + 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, + 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, + 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, + 1654, 1654, 1663, 1663, 1672, 1672, 1681, 1681, 1690, 1690, + 1701, 1707, 1713, 1719, 1719, 1727, 1728, 1729, 1730, 1733, + 1739, 1747, 1747, 1759, 1760, 1764, 1765, 1766, 1771, 1771, + 1779, 1780, 1781, 1786, 1787, 1788, 1789, 1790, 1791, 1792, + 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, + 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, + 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, + 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1836, 1836, 1850, + 1850, 1859, 1860, 1863, 1864, 1865, 1872, 1872, 1887, 1887, + 1901, 1902, 1905, 1906, 1907, 1912, 1913, 1914, 1915, 1916, + 1917, 1918, 1919, 1920, 1921, 1924, 1926, 1932, 1934, 1934, + 1943, 1943, 1952, 1952, 1961, 1963, 1963, 1972, 1982, 1982, + 1995, 1996, 2001, 2002, 2003, 2010, 2010, 2022, 2022, 2034, + 2035, 2040, 2041, 2042, 2049, 2050, 2051, 2052, 2053, 2054, + 2055, 2056, 2057, 2058, 2061, 2063, 2063, 2072, 2074, 2076, + 2082, 2088, 2097, 2097, 2110, 2111, 2114, 2115, 2116, 2121, + 2121, 2131, 2131, 2141, 2142, 2143, 2148, 2149, 2150, 2151, + 2152, 2153, 2154, 2155, 2158, 2158, 2167, 2173, 2173, 2198, + 2198, 2228, 2228, 2241, 2242, 2245, 2246, 2247, 2252, 2252, + 2264, 2264, 2276, 2277, 2278, 2283, 2284, 2285, 2286, 2287, + 2288, 2289, 2290, 2291, 2292, 2293, 2296, 2296, 2305, 2311, + 2311, 2320, 2326, 2335, 2335, 2346, 2347, 2350, 2351, 2352, + 2357, 2357, 2366, 2366, 2375, 2376, 2379, 2380, 2381, 2387, + 2388, 2389, 2390, 2391, 2392, 2393, 2394, 2395, 2396, 2397, + 2400, 2400, 2411, 2411, 2422, 2422, 2431, 2431, 2440, 2440, + 2449, 2449, 2458, 2458, 2472, 2472, 2483, 2484, 2487, 2487, + 2499, 2499, 2510, 2511, 2512, 2517, 2517, 2527, 2528, 2531, + 2532, 2533, 2538, 2539, 2540, 2541, 2542, 2543, 2544, 2545, + 2546, 2547, 2548, 2549, 2550, 2551, 2554, 2556, 2556, 2565, + 2565, 2574, 2583, 2583, 2596, 2597, 2598, 2603, 2604, 2605, + 2606, 2607, 2608, 2609, 2610, 2611, 2614, 2614, 2622, 2623, + 2624, 2627, 2633, 2633, 2642, 2648, 2656, 2664, 2664, 2675, + 2676, 2677, 2682, 2683, 2684, 2685, 2686, 2689, 2689, 2698, + 2698, 2710, 2710, 2723, 2724, 2725, 2730, 2731, 2732, 2733, + 2734, 2735, 2738, 2744, 2744, 2753, 2759, 2759, 2769, 2769, + 2782, 2782, 2792, 2793, 2794, 2799, 2800, 2801, 2802, 2803, + 2804, 2805, 2806, 2807, 2808, 2809, 2810, 2811, 2812, 2813, + 2814, 2815, 2816, 2819, 2826, 2826, 2835, 2835, 2844, 2850, + 2850, 2859, 2865, 2871, 2871, 2880, 2881, 2884, 2884, 2894, + 2901, 2908, 2908, 2917, 2917, 2927, 2927, 2937, 2937, 2949, + 2949, 2961, 2961, 2971, 2972, 2973, 2979, 2980, 2983, 2983, + 2994, 3002, 3002, 3015, 3016, 3017, 3023, 3023, 3031, 3032, + 3033, 3038, 3039, 3040, 3041, 3042, 3043, 3044, 3047, 3053, + 3053, 3062, 3062, 3073, 3074, 3075, 3080, 3080, 3088, 3089, + 3090, 3095, 3096, 3097, 3098, 3099, 3102, 3102, 3111, 3117, + 3123, 3129, 3129, 3138, 3138, 3149, 3150, 3151, 3156, 3157, + 3160 }; void @@ -6616,9 +6630,9 @@ namespace isc { namespace dhcp { #line 14 "dhcp6_parser.yy" } } // isc::dhcp -#line 6620 "dhcp6_parser.cc" +#line 6634 "dhcp6_parser.cc" -#line 3158 "dhcp6_parser.yy" +#line 3166 "dhcp6_parser.yy" void diff --git a/src/bin/dhcp6/dhcp6_parser.h b/src/bin/dhcp6/dhcp6_parser.h index dfffdfe425..e504a35427 100644 --- a/src/bin/dhcp6/dhcp6_parser.h +++ b/src/bin/dhcp6/dhcp6_parser.h @@ -541,190 +541,191 @@ namespace isc { namespace dhcp { TOKEN_STOP_RETRY_EXIT = 297, // "stop-retry-exit" TOKEN_SERVE_RETRY_EXIT = 298, // "serve-retry-exit" TOKEN_SERVE_RETRY_CONTINUE = 299, // "serve-retry-continue" - TOKEN_MAX_ROW_ERRORS = 300, // "max-row-errors" - TOKEN_TRUST_ANCHOR = 301, // "trust-anchor" - TOKEN_CERT_FILE = 302, // "cert-file" - TOKEN_KEY_FILE = 303, // "key-file" - TOKEN_CIPHER_LIST = 304, // "cipher-list" - TOKEN_PREFERRED_LIFETIME = 305, // "preferred-lifetime" - TOKEN_MIN_PREFERRED_LIFETIME = 306, // "min-preferred-lifetime" - TOKEN_MAX_PREFERRED_LIFETIME = 307, // "max-preferred-lifetime" - TOKEN_VALID_LIFETIME = 308, // "valid-lifetime" - TOKEN_MIN_VALID_LIFETIME = 309, // "min-valid-lifetime" - TOKEN_MAX_VALID_LIFETIME = 310, // "max-valid-lifetime" - TOKEN_RENEW_TIMER = 311, // "renew-timer" - TOKEN_REBIND_TIMER = 312, // "rebind-timer" - TOKEN_CALCULATE_TEE_TIMES = 313, // "calculate-tee-times" - TOKEN_T1_PERCENT = 314, // "t1-percent" - TOKEN_T2_PERCENT = 315, // "t2-percent" - TOKEN_CACHE_THRESHOLD = 316, // "cache-threshold" - TOKEN_CACHE_MAX_AGE = 317, // "cache-max-age" - TOKEN_DECLINE_PROBATION_PERIOD = 318, // "decline-probation-period" - TOKEN_SERVER_TAG = 319, // "server-tag" - TOKEN_STATISTIC_DEFAULT_SAMPLE_COUNT = 320, // "statistic-default-sample-count" - TOKEN_STATISTIC_DEFAULT_SAMPLE_AGE = 321, // "statistic-default-sample-age" - TOKEN_DDNS_SEND_UPDATES = 322, // "ddns-send-updates" - TOKEN_DDNS_OVERRIDE_NO_UPDATE = 323, // "ddns-override-no-update" - TOKEN_DDNS_OVERRIDE_CLIENT_UPDATE = 324, // "ddns-override-client-update" - TOKEN_DDNS_REPLACE_CLIENT_NAME = 325, // "ddns-replace-client-name" - TOKEN_DDNS_GENERATED_PREFIX = 326, // "ddns-generated-prefix" - TOKEN_DDNS_QUALIFYING_SUFFIX = 327, // "ddns-qualifying-suffix" - TOKEN_DDNS_UPDATE_ON_RENEW = 328, // "ddns-update-on-renew" - TOKEN_DDNS_USE_CONFLICT_RESOLUTION = 329, // "ddns-use-conflict-resolution" - TOKEN_DDNS_TTL_PERCENT = 330, // "ddns-ttl-percent" - TOKEN_STORE_EXTENDED_INFO = 331, // "store-extended-info" - TOKEN_SUBNET6 = 332, // "subnet6" - TOKEN_OPTION_DEF = 333, // "option-def" - TOKEN_OPTION_DATA = 334, // "option-data" - TOKEN_NAME = 335, // "name" - TOKEN_DATA = 336, // "data" - TOKEN_CODE = 337, // "code" - TOKEN_SPACE = 338, // "space" - TOKEN_CSV_FORMAT = 339, // "csv-format" - TOKEN_ALWAYS_SEND = 340, // "always-send" - TOKEN_NEVER_SEND = 341, // "never-send" - TOKEN_RECORD_TYPES = 342, // "record-types" - TOKEN_ENCAPSULATE = 343, // "encapsulate" - TOKEN_ARRAY = 344, // "array" - TOKEN_PARKED_PACKET_LIMIT = 345, // "parked-packet-limit" - TOKEN_ALLOCATOR = 346, // "allocator" - TOKEN_PD_ALLOCATOR = 347, // "pd-allocator" - TOKEN_DDNS_CONFLICT_RESOLUTION_MODE = 348, // "ddns-conflict-resolution-mode" - TOKEN_CHECK_WITH_DHCID = 349, // "check-with-dhcid" - TOKEN_NO_CHECK_WITH_DHCID = 350, // "no-check-with-dhcid" - TOKEN_CHECK_EXISTS_WITH_DHCID = 351, // "check-exists-with-dhcid" - TOKEN_NO_CHECK_WITHOUT_DHCID = 352, // "no-check-without-dhcid" - TOKEN_SHARED_NETWORKS = 353, // "shared-networks" - TOKEN_POOLS = 354, // "pools" - TOKEN_POOL = 355, // "pool" - TOKEN_PD_POOLS = 356, // "pd-pools" - TOKEN_PREFIX = 357, // "prefix" - TOKEN_PREFIX_LEN = 358, // "prefix-len" - TOKEN_EXCLUDED_PREFIX = 359, // "excluded-prefix" - TOKEN_EXCLUDED_PREFIX_LEN = 360, // "excluded-prefix-len" - TOKEN_DELEGATED_LEN = 361, // "delegated-len" - TOKEN_USER_CONTEXT = 362, // "user-context" - TOKEN_COMMENT = 363, // "comment" - TOKEN_SUBNET = 364, // "subnet" - TOKEN_INTERFACE = 365, // "interface" - TOKEN_INTERFACE_ID = 366, // "interface-id" - TOKEN_ID = 367, // "id" - TOKEN_RAPID_COMMIT = 368, // "rapid-commit" - TOKEN_RESERVATION_MODE = 369, // "reservation-mode" - TOKEN_DISABLED = 370, // "disabled" - TOKEN_OUT_OF_POOL = 371, // "out-of-pool" - TOKEN_GLOBAL = 372, // "global" - TOKEN_ALL = 373, // "all" - TOKEN_RESERVATIONS_GLOBAL = 374, // "reservations-global" - TOKEN_RESERVATIONS_IN_SUBNET = 375, // "reservations-in-subnet" - TOKEN_RESERVATIONS_OUT_OF_POOL = 376, // "reservations-out-of-pool" - TOKEN_MAC_SOURCES = 377, // "mac-sources" - TOKEN_RELAY_SUPPLIED_OPTIONS = 378, // "relay-supplied-options" - TOKEN_HOST_RESERVATION_IDENTIFIERS = 379, // "host-reservation-identifiers" - TOKEN_SANITY_CHECKS = 380, // "sanity-checks" - TOKEN_LEASE_CHECKS = 381, // "lease-checks" - TOKEN_EXTENDED_INFO_CHECKS = 382, // "extended-info-checks" - TOKEN_CLIENT_CLASSES = 383, // "client-classes" - TOKEN_REQUIRE_CLIENT_CLASSES = 384, // "require-client-classes" - TOKEN_TEST = 385, // "test" - TOKEN_TEMPLATE_TEST = 386, // "template-test" - TOKEN_ONLY_IF_REQUIRED = 387, // "only-if-required" - TOKEN_CLIENT_CLASS = 388, // "client-class" - TOKEN_POOL_ID = 389, // "pool-id" - TOKEN_RESERVATIONS = 390, // "reservations" - TOKEN_IP_ADDRESSES = 391, // "ip-addresses" - TOKEN_PREFIXES = 392, // "prefixes" - TOKEN_DUID = 393, // "duid" - TOKEN_HW_ADDRESS = 394, // "hw-address" - TOKEN_HOSTNAME = 395, // "hostname" - TOKEN_FLEX_ID = 396, // "flex-id" - TOKEN_RELAY = 397, // "relay" - TOKEN_IP_ADDRESS = 398, // "ip-address" - TOKEN_HOOKS_LIBRARIES = 399, // "hooks-libraries" - TOKEN_LIBRARY = 400, // "library" - TOKEN_PARAMETERS = 401, // "parameters" - TOKEN_EXPIRED_LEASES_PROCESSING = 402, // "expired-leases-processing" - TOKEN_RECLAIM_TIMER_WAIT_TIME = 403, // "reclaim-timer-wait-time" - TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 404, // "flush-reclaimed-timer-wait-time" - TOKEN_HOLD_RECLAIMED_TIME = 405, // "hold-reclaimed-time" - TOKEN_MAX_RECLAIM_LEASES = 406, // "max-reclaim-leases" - TOKEN_MAX_RECLAIM_TIME = 407, // "max-reclaim-time" - TOKEN_UNWARNED_RECLAIM_CYCLES = 408, // "unwarned-reclaim-cycles" - TOKEN_SERVER_ID = 409, // "server-id" - TOKEN_LLT = 410, // "LLT" - TOKEN_EN = 411, // "EN" - TOKEN_LL = 412, // "LL" - TOKEN_IDENTIFIER = 413, // "identifier" - TOKEN_HTYPE = 414, // "htype" - TOKEN_TIME = 415, // "time" - TOKEN_ENTERPRISE_ID = 416, // "enterprise-id" - TOKEN_DHCP4O6_PORT = 417, // "dhcp4o6-port" - TOKEN_DHCP_MULTI_THREADING = 418, // "multi-threading" - TOKEN_ENABLE_MULTI_THREADING = 419, // "enable-multi-threading" - TOKEN_THREAD_POOL_SIZE = 420, // "thread-pool-size" - TOKEN_PACKET_QUEUE_SIZE = 421, // "packet-queue-size" - TOKEN_CONTROL_SOCKET = 422, // "control-socket" - TOKEN_SOCKET_TYPE = 423, // "socket-type" - TOKEN_SOCKET_NAME = 424, // "socket-name" - TOKEN_DHCP_QUEUE_CONTROL = 425, // "dhcp-queue-control" - TOKEN_ENABLE_QUEUE = 426, // "enable-queue" - TOKEN_QUEUE_TYPE = 427, // "queue-type" - TOKEN_CAPACITY = 428, // "capacity" - TOKEN_DHCP_DDNS = 429, // "dhcp-ddns" - TOKEN_ENABLE_UPDATES = 430, // "enable-updates" - TOKEN_QUALIFYING_SUFFIX = 431, // "qualifying-suffix" - TOKEN_SERVER_IP = 432, // "server-ip" - TOKEN_SERVER_PORT = 433, // "server-port" - TOKEN_SENDER_IP = 434, // "sender-ip" - TOKEN_SENDER_PORT = 435, // "sender-port" - TOKEN_MAX_QUEUE_SIZE = 436, // "max-queue-size" - TOKEN_NCR_PROTOCOL = 437, // "ncr-protocol" - TOKEN_NCR_FORMAT = 438, // "ncr-format" - TOKEN_OVERRIDE_NO_UPDATE = 439, // "override-no-update" - TOKEN_OVERRIDE_CLIENT_UPDATE = 440, // "override-client-update" - TOKEN_REPLACE_CLIENT_NAME = 441, // "replace-client-name" - TOKEN_GENERATED_PREFIX = 442, // "generated-prefix" - TOKEN_UDP = 443, // "UDP" - TOKEN_TCP = 444, // "TCP" - TOKEN_JSON = 445, // "JSON" - TOKEN_WHEN_PRESENT = 446, // "when-present" - TOKEN_NEVER = 447, // "never" - TOKEN_ALWAYS = 448, // "always" - TOKEN_WHEN_NOT_PRESENT = 449, // "when-not-present" - TOKEN_HOSTNAME_CHAR_SET = 450, // "hostname-char-set" - TOKEN_HOSTNAME_CHAR_REPLACEMENT = 451, // "hostname-char-replacement" - TOKEN_EARLY_GLOBAL_RESERVATIONS_LOOKUP = 452, // "early-global-reservations-lookup" - TOKEN_IP_RESERVATIONS_UNIQUE = 453, // "ip-reservations-unique" - TOKEN_RESERVATIONS_LOOKUP_FIRST = 454, // "reservations-lookup-first" - TOKEN_LOGGERS = 455, // "loggers" - TOKEN_OUTPUT_OPTIONS = 456, // "output-options" - TOKEN_OUTPUT = 457, // "output" - TOKEN_DEBUGLEVEL = 458, // "debuglevel" - TOKEN_SEVERITY = 459, // "severity" - TOKEN_FLUSH = 460, // "flush" - TOKEN_MAXSIZE = 461, // "maxsize" - TOKEN_MAXVER = 462, // "maxver" - TOKEN_PATTERN = 463, // "pattern" - TOKEN_COMPATIBILITY = 464, // "compatibility" - TOKEN_LENIENT_OPTION_PARSING = 465, // "lenient-option-parsing" - TOKEN_TOPLEVEL_JSON = 466, // TOPLEVEL_JSON - TOKEN_TOPLEVEL_DHCP6 = 467, // TOPLEVEL_DHCP6 - TOKEN_SUB_DHCP6 = 468, // SUB_DHCP6 - TOKEN_SUB_INTERFACES6 = 469, // SUB_INTERFACES6 - TOKEN_SUB_SUBNET6 = 470, // SUB_SUBNET6 - TOKEN_SUB_POOL6 = 471, // SUB_POOL6 - TOKEN_SUB_PD_POOL = 472, // SUB_PD_POOL - TOKEN_SUB_RESERVATION = 473, // SUB_RESERVATION - TOKEN_SUB_OPTION_DEFS = 474, // SUB_OPTION_DEFS - TOKEN_SUB_OPTION_DEF = 475, // SUB_OPTION_DEF - TOKEN_SUB_OPTION_DATA = 476, // SUB_OPTION_DATA - TOKEN_SUB_HOOKS_LIBRARY = 477, // SUB_HOOKS_LIBRARY - TOKEN_SUB_DHCP_DDNS = 478, // SUB_DHCP_DDNS - TOKEN_SUB_CONFIG_CONTROL = 479, // SUB_CONFIG_CONTROL - TOKEN_STRING = 480, // "constant string" - TOKEN_INTEGER = 481, // "integer" - TOKEN_FLOAT = 482, // "floating point" - TOKEN_BOOLEAN = 483 // "boolean" + TOKEN_RETRY_ON_STARTUP = 300, // "retry-on-startup" + TOKEN_MAX_ROW_ERRORS = 301, // "max-row-errors" + TOKEN_TRUST_ANCHOR = 302, // "trust-anchor" + TOKEN_CERT_FILE = 303, // "cert-file" + TOKEN_KEY_FILE = 304, // "key-file" + TOKEN_CIPHER_LIST = 305, // "cipher-list" + TOKEN_PREFERRED_LIFETIME = 306, // "preferred-lifetime" + TOKEN_MIN_PREFERRED_LIFETIME = 307, // "min-preferred-lifetime" + TOKEN_MAX_PREFERRED_LIFETIME = 308, // "max-preferred-lifetime" + TOKEN_VALID_LIFETIME = 309, // "valid-lifetime" + TOKEN_MIN_VALID_LIFETIME = 310, // "min-valid-lifetime" + TOKEN_MAX_VALID_LIFETIME = 311, // "max-valid-lifetime" + TOKEN_RENEW_TIMER = 312, // "renew-timer" + TOKEN_REBIND_TIMER = 313, // "rebind-timer" + TOKEN_CALCULATE_TEE_TIMES = 314, // "calculate-tee-times" + TOKEN_T1_PERCENT = 315, // "t1-percent" + TOKEN_T2_PERCENT = 316, // "t2-percent" + TOKEN_CACHE_THRESHOLD = 317, // "cache-threshold" + TOKEN_CACHE_MAX_AGE = 318, // "cache-max-age" + TOKEN_DECLINE_PROBATION_PERIOD = 319, // "decline-probation-period" + TOKEN_SERVER_TAG = 320, // "server-tag" + TOKEN_STATISTIC_DEFAULT_SAMPLE_COUNT = 321, // "statistic-default-sample-count" + TOKEN_STATISTIC_DEFAULT_SAMPLE_AGE = 322, // "statistic-default-sample-age" + TOKEN_DDNS_SEND_UPDATES = 323, // "ddns-send-updates" + TOKEN_DDNS_OVERRIDE_NO_UPDATE = 324, // "ddns-override-no-update" + TOKEN_DDNS_OVERRIDE_CLIENT_UPDATE = 325, // "ddns-override-client-update" + TOKEN_DDNS_REPLACE_CLIENT_NAME = 326, // "ddns-replace-client-name" + TOKEN_DDNS_GENERATED_PREFIX = 327, // "ddns-generated-prefix" + TOKEN_DDNS_QUALIFYING_SUFFIX = 328, // "ddns-qualifying-suffix" + TOKEN_DDNS_UPDATE_ON_RENEW = 329, // "ddns-update-on-renew" + TOKEN_DDNS_USE_CONFLICT_RESOLUTION = 330, // "ddns-use-conflict-resolution" + TOKEN_DDNS_TTL_PERCENT = 331, // "ddns-ttl-percent" + TOKEN_STORE_EXTENDED_INFO = 332, // "store-extended-info" + TOKEN_SUBNET6 = 333, // "subnet6" + TOKEN_OPTION_DEF = 334, // "option-def" + TOKEN_OPTION_DATA = 335, // "option-data" + TOKEN_NAME = 336, // "name" + TOKEN_DATA = 337, // "data" + TOKEN_CODE = 338, // "code" + TOKEN_SPACE = 339, // "space" + TOKEN_CSV_FORMAT = 340, // "csv-format" + TOKEN_ALWAYS_SEND = 341, // "always-send" + TOKEN_NEVER_SEND = 342, // "never-send" + TOKEN_RECORD_TYPES = 343, // "record-types" + TOKEN_ENCAPSULATE = 344, // "encapsulate" + TOKEN_ARRAY = 345, // "array" + TOKEN_PARKED_PACKET_LIMIT = 346, // "parked-packet-limit" + TOKEN_ALLOCATOR = 347, // "allocator" + TOKEN_PD_ALLOCATOR = 348, // "pd-allocator" + TOKEN_DDNS_CONFLICT_RESOLUTION_MODE = 349, // "ddns-conflict-resolution-mode" + TOKEN_CHECK_WITH_DHCID = 350, // "check-with-dhcid" + TOKEN_NO_CHECK_WITH_DHCID = 351, // "no-check-with-dhcid" + TOKEN_CHECK_EXISTS_WITH_DHCID = 352, // "check-exists-with-dhcid" + TOKEN_NO_CHECK_WITHOUT_DHCID = 353, // "no-check-without-dhcid" + TOKEN_SHARED_NETWORKS = 354, // "shared-networks" + TOKEN_POOLS = 355, // "pools" + TOKEN_POOL = 356, // "pool" + TOKEN_PD_POOLS = 357, // "pd-pools" + TOKEN_PREFIX = 358, // "prefix" + TOKEN_PREFIX_LEN = 359, // "prefix-len" + TOKEN_EXCLUDED_PREFIX = 360, // "excluded-prefix" + TOKEN_EXCLUDED_PREFIX_LEN = 361, // "excluded-prefix-len" + TOKEN_DELEGATED_LEN = 362, // "delegated-len" + TOKEN_USER_CONTEXT = 363, // "user-context" + TOKEN_COMMENT = 364, // "comment" + TOKEN_SUBNET = 365, // "subnet" + TOKEN_INTERFACE = 366, // "interface" + TOKEN_INTERFACE_ID = 367, // "interface-id" + TOKEN_ID = 368, // "id" + TOKEN_RAPID_COMMIT = 369, // "rapid-commit" + TOKEN_RESERVATION_MODE = 370, // "reservation-mode" + TOKEN_DISABLED = 371, // "disabled" + TOKEN_OUT_OF_POOL = 372, // "out-of-pool" + TOKEN_GLOBAL = 373, // "global" + TOKEN_ALL = 374, // "all" + TOKEN_RESERVATIONS_GLOBAL = 375, // "reservations-global" + TOKEN_RESERVATIONS_IN_SUBNET = 376, // "reservations-in-subnet" + TOKEN_RESERVATIONS_OUT_OF_POOL = 377, // "reservations-out-of-pool" + TOKEN_MAC_SOURCES = 378, // "mac-sources" + TOKEN_RELAY_SUPPLIED_OPTIONS = 379, // "relay-supplied-options" + TOKEN_HOST_RESERVATION_IDENTIFIERS = 380, // "host-reservation-identifiers" + TOKEN_SANITY_CHECKS = 381, // "sanity-checks" + TOKEN_LEASE_CHECKS = 382, // "lease-checks" + TOKEN_EXTENDED_INFO_CHECKS = 383, // "extended-info-checks" + TOKEN_CLIENT_CLASSES = 384, // "client-classes" + TOKEN_REQUIRE_CLIENT_CLASSES = 385, // "require-client-classes" + TOKEN_TEST = 386, // "test" + TOKEN_TEMPLATE_TEST = 387, // "template-test" + TOKEN_ONLY_IF_REQUIRED = 388, // "only-if-required" + TOKEN_CLIENT_CLASS = 389, // "client-class" + TOKEN_POOL_ID = 390, // "pool-id" + TOKEN_RESERVATIONS = 391, // "reservations" + TOKEN_IP_ADDRESSES = 392, // "ip-addresses" + TOKEN_PREFIXES = 393, // "prefixes" + TOKEN_DUID = 394, // "duid" + TOKEN_HW_ADDRESS = 395, // "hw-address" + TOKEN_HOSTNAME = 396, // "hostname" + TOKEN_FLEX_ID = 397, // "flex-id" + TOKEN_RELAY = 398, // "relay" + TOKEN_IP_ADDRESS = 399, // "ip-address" + TOKEN_HOOKS_LIBRARIES = 400, // "hooks-libraries" + TOKEN_LIBRARY = 401, // "library" + TOKEN_PARAMETERS = 402, // "parameters" + TOKEN_EXPIRED_LEASES_PROCESSING = 403, // "expired-leases-processing" + TOKEN_RECLAIM_TIMER_WAIT_TIME = 404, // "reclaim-timer-wait-time" + TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 405, // "flush-reclaimed-timer-wait-time" + TOKEN_HOLD_RECLAIMED_TIME = 406, // "hold-reclaimed-time" + TOKEN_MAX_RECLAIM_LEASES = 407, // "max-reclaim-leases" + TOKEN_MAX_RECLAIM_TIME = 408, // "max-reclaim-time" + TOKEN_UNWARNED_RECLAIM_CYCLES = 409, // "unwarned-reclaim-cycles" + TOKEN_SERVER_ID = 410, // "server-id" + TOKEN_LLT = 411, // "LLT" + TOKEN_EN = 412, // "EN" + TOKEN_LL = 413, // "LL" + TOKEN_IDENTIFIER = 414, // "identifier" + TOKEN_HTYPE = 415, // "htype" + TOKEN_TIME = 416, // "time" + TOKEN_ENTERPRISE_ID = 417, // "enterprise-id" + TOKEN_DHCP4O6_PORT = 418, // "dhcp4o6-port" + TOKEN_DHCP_MULTI_THREADING = 419, // "multi-threading" + TOKEN_ENABLE_MULTI_THREADING = 420, // "enable-multi-threading" + TOKEN_THREAD_POOL_SIZE = 421, // "thread-pool-size" + TOKEN_PACKET_QUEUE_SIZE = 422, // "packet-queue-size" + TOKEN_CONTROL_SOCKET = 423, // "control-socket" + TOKEN_SOCKET_TYPE = 424, // "socket-type" + TOKEN_SOCKET_NAME = 425, // "socket-name" + TOKEN_DHCP_QUEUE_CONTROL = 426, // "dhcp-queue-control" + TOKEN_ENABLE_QUEUE = 427, // "enable-queue" + TOKEN_QUEUE_TYPE = 428, // "queue-type" + TOKEN_CAPACITY = 429, // "capacity" + TOKEN_DHCP_DDNS = 430, // "dhcp-ddns" + TOKEN_ENABLE_UPDATES = 431, // "enable-updates" + TOKEN_QUALIFYING_SUFFIX = 432, // "qualifying-suffix" + TOKEN_SERVER_IP = 433, // "server-ip" + TOKEN_SERVER_PORT = 434, // "server-port" + TOKEN_SENDER_IP = 435, // "sender-ip" + TOKEN_SENDER_PORT = 436, // "sender-port" + TOKEN_MAX_QUEUE_SIZE = 437, // "max-queue-size" + TOKEN_NCR_PROTOCOL = 438, // "ncr-protocol" + TOKEN_NCR_FORMAT = 439, // "ncr-format" + TOKEN_OVERRIDE_NO_UPDATE = 440, // "override-no-update" + TOKEN_OVERRIDE_CLIENT_UPDATE = 441, // "override-client-update" + TOKEN_REPLACE_CLIENT_NAME = 442, // "replace-client-name" + TOKEN_GENERATED_PREFIX = 443, // "generated-prefix" + TOKEN_UDP = 444, // "UDP" + TOKEN_TCP = 445, // "TCP" + TOKEN_JSON = 446, // "JSON" + TOKEN_WHEN_PRESENT = 447, // "when-present" + TOKEN_NEVER = 448, // "never" + TOKEN_ALWAYS = 449, // "always" + TOKEN_WHEN_NOT_PRESENT = 450, // "when-not-present" + TOKEN_HOSTNAME_CHAR_SET = 451, // "hostname-char-set" + TOKEN_HOSTNAME_CHAR_REPLACEMENT = 452, // "hostname-char-replacement" + TOKEN_EARLY_GLOBAL_RESERVATIONS_LOOKUP = 453, // "early-global-reservations-lookup" + TOKEN_IP_RESERVATIONS_UNIQUE = 454, // "ip-reservations-unique" + TOKEN_RESERVATIONS_LOOKUP_FIRST = 455, // "reservations-lookup-first" + TOKEN_LOGGERS = 456, // "loggers" + TOKEN_OUTPUT_OPTIONS = 457, // "output-options" + TOKEN_OUTPUT = 458, // "output" + TOKEN_DEBUGLEVEL = 459, // "debuglevel" + TOKEN_SEVERITY = 460, // "severity" + TOKEN_FLUSH = 461, // "flush" + TOKEN_MAXSIZE = 462, // "maxsize" + TOKEN_MAXVER = 463, // "maxver" + TOKEN_PATTERN = 464, // "pattern" + TOKEN_COMPATIBILITY = 465, // "compatibility" + TOKEN_LENIENT_OPTION_PARSING = 466, // "lenient-option-parsing" + TOKEN_TOPLEVEL_JSON = 467, // TOPLEVEL_JSON + TOKEN_TOPLEVEL_DHCP6 = 468, // TOPLEVEL_DHCP6 + TOKEN_SUB_DHCP6 = 469, // SUB_DHCP6 + TOKEN_SUB_INTERFACES6 = 470, // SUB_INTERFACES6 + TOKEN_SUB_SUBNET6 = 471, // SUB_SUBNET6 + TOKEN_SUB_POOL6 = 472, // SUB_POOL6 + TOKEN_SUB_PD_POOL = 473, // SUB_PD_POOL + TOKEN_SUB_RESERVATION = 474, // SUB_RESERVATION + TOKEN_SUB_OPTION_DEFS = 475, // SUB_OPTION_DEFS + TOKEN_SUB_OPTION_DEF = 476, // SUB_OPTION_DEF + TOKEN_SUB_OPTION_DATA = 477, // SUB_OPTION_DATA + TOKEN_SUB_HOOKS_LIBRARY = 478, // SUB_HOOKS_LIBRARY + TOKEN_SUB_DHCP_DDNS = 479, // SUB_DHCP_DDNS + TOKEN_SUB_CONFIG_CONTROL = 480, // SUB_CONFIG_CONTROL + TOKEN_STRING = 481, // "constant string" + TOKEN_INTEGER = 482, // "integer" + TOKEN_FLOAT = 483, // "floating point" + TOKEN_BOOLEAN = 484 // "boolean" }; /// Backward compatibility alias (Bison 3.6). typedef token_kind_type yytokentype; @@ -741,7 +742,7 @@ namespace isc { namespace dhcp { { enum symbol_kind_type { - YYNTOKENS = 229, ///< Number of tokens. + YYNTOKENS = 230, ///< Number of tokens. S_YYEMPTY = -2, S_YYEOF = 0, // "end of file" S_YYerror = 1, // error @@ -788,649 +789,651 @@ namespace isc { namespace dhcp { S_STOP_RETRY_EXIT = 42, // "stop-retry-exit" S_SERVE_RETRY_EXIT = 43, // "serve-retry-exit" S_SERVE_RETRY_CONTINUE = 44, // "serve-retry-continue" - S_MAX_ROW_ERRORS = 45, // "max-row-errors" - S_TRUST_ANCHOR = 46, // "trust-anchor" - S_CERT_FILE = 47, // "cert-file" - S_KEY_FILE = 48, // "key-file" - S_CIPHER_LIST = 49, // "cipher-list" - S_PREFERRED_LIFETIME = 50, // "preferred-lifetime" - S_MIN_PREFERRED_LIFETIME = 51, // "min-preferred-lifetime" - S_MAX_PREFERRED_LIFETIME = 52, // "max-preferred-lifetime" - S_VALID_LIFETIME = 53, // "valid-lifetime" - S_MIN_VALID_LIFETIME = 54, // "min-valid-lifetime" - S_MAX_VALID_LIFETIME = 55, // "max-valid-lifetime" - S_RENEW_TIMER = 56, // "renew-timer" - S_REBIND_TIMER = 57, // "rebind-timer" - S_CALCULATE_TEE_TIMES = 58, // "calculate-tee-times" - S_T1_PERCENT = 59, // "t1-percent" - S_T2_PERCENT = 60, // "t2-percent" - S_CACHE_THRESHOLD = 61, // "cache-threshold" - S_CACHE_MAX_AGE = 62, // "cache-max-age" - S_DECLINE_PROBATION_PERIOD = 63, // "decline-probation-period" - S_SERVER_TAG = 64, // "server-tag" - S_STATISTIC_DEFAULT_SAMPLE_COUNT = 65, // "statistic-default-sample-count" - S_STATISTIC_DEFAULT_SAMPLE_AGE = 66, // "statistic-default-sample-age" - S_DDNS_SEND_UPDATES = 67, // "ddns-send-updates" - S_DDNS_OVERRIDE_NO_UPDATE = 68, // "ddns-override-no-update" - S_DDNS_OVERRIDE_CLIENT_UPDATE = 69, // "ddns-override-client-update" - S_DDNS_REPLACE_CLIENT_NAME = 70, // "ddns-replace-client-name" - S_DDNS_GENERATED_PREFIX = 71, // "ddns-generated-prefix" - S_DDNS_QUALIFYING_SUFFIX = 72, // "ddns-qualifying-suffix" - S_DDNS_UPDATE_ON_RENEW = 73, // "ddns-update-on-renew" - S_DDNS_USE_CONFLICT_RESOLUTION = 74, // "ddns-use-conflict-resolution" - S_DDNS_TTL_PERCENT = 75, // "ddns-ttl-percent" - S_STORE_EXTENDED_INFO = 76, // "store-extended-info" - S_SUBNET6 = 77, // "subnet6" - S_OPTION_DEF = 78, // "option-def" - S_OPTION_DATA = 79, // "option-data" - S_NAME = 80, // "name" - S_DATA = 81, // "data" - S_CODE = 82, // "code" - S_SPACE = 83, // "space" - S_CSV_FORMAT = 84, // "csv-format" - S_ALWAYS_SEND = 85, // "always-send" - S_NEVER_SEND = 86, // "never-send" - S_RECORD_TYPES = 87, // "record-types" - S_ENCAPSULATE = 88, // "encapsulate" - S_ARRAY = 89, // "array" - S_PARKED_PACKET_LIMIT = 90, // "parked-packet-limit" - S_ALLOCATOR = 91, // "allocator" - S_PD_ALLOCATOR = 92, // "pd-allocator" - S_DDNS_CONFLICT_RESOLUTION_MODE = 93, // "ddns-conflict-resolution-mode" - S_CHECK_WITH_DHCID = 94, // "check-with-dhcid" - S_NO_CHECK_WITH_DHCID = 95, // "no-check-with-dhcid" - S_CHECK_EXISTS_WITH_DHCID = 96, // "check-exists-with-dhcid" - S_NO_CHECK_WITHOUT_DHCID = 97, // "no-check-without-dhcid" - S_SHARED_NETWORKS = 98, // "shared-networks" - S_POOLS = 99, // "pools" - S_POOL = 100, // "pool" - S_PD_POOLS = 101, // "pd-pools" - S_PREFIX = 102, // "prefix" - S_PREFIX_LEN = 103, // "prefix-len" - S_EXCLUDED_PREFIX = 104, // "excluded-prefix" - S_EXCLUDED_PREFIX_LEN = 105, // "excluded-prefix-len" - S_DELEGATED_LEN = 106, // "delegated-len" - S_USER_CONTEXT = 107, // "user-context" - S_COMMENT = 108, // "comment" - S_SUBNET = 109, // "subnet" - S_INTERFACE = 110, // "interface" - S_INTERFACE_ID = 111, // "interface-id" - S_ID = 112, // "id" - S_RAPID_COMMIT = 113, // "rapid-commit" - S_RESERVATION_MODE = 114, // "reservation-mode" - S_DISABLED = 115, // "disabled" - S_OUT_OF_POOL = 116, // "out-of-pool" - S_GLOBAL = 117, // "global" - S_ALL = 118, // "all" - S_RESERVATIONS_GLOBAL = 119, // "reservations-global" - S_RESERVATIONS_IN_SUBNET = 120, // "reservations-in-subnet" - S_RESERVATIONS_OUT_OF_POOL = 121, // "reservations-out-of-pool" - S_MAC_SOURCES = 122, // "mac-sources" - S_RELAY_SUPPLIED_OPTIONS = 123, // "relay-supplied-options" - S_HOST_RESERVATION_IDENTIFIERS = 124, // "host-reservation-identifiers" - S_SANITY_CHECKS = 125, // "sanity-checks" - S_LEASE_CHECKS = 126, // "lease-checks" - S_EXTENDED_INFO_CHECKS = 127, // "extended-info-checks" - S_CLIENT_CLASSES = 128, // "client-classes" - S_REQUIRE_CLIENT_CLASSES = 129, // "require-client-classes" - S_TEST = 130, // "test" - S_TEMPLATE_TEST = 131, // "template-test" - S_ONLY_IF_REQUIRED = 132, // "only-if-required" - S_CLIENT_CLASS = 133, // "client-class" - S_POOL_ID = 134, // "pool-id" - S_RESERVATIONS = 135, // "reservations" - S_IP_ADDRESSES = 136, // "ip-addresses" - S_PREFIXES = 137, // "prefixes" - S_DUID = 138, // "duid" - S_HW_ADDRESS = 139, // "hw-address" - S_HOSTNAME = 140, // "hostname" - S_FLEX_ID = 141, // "flex-id" - S_RELAY = 142, // "relay" - S_IP_ADDRESS = 143, // "ip-address" - S_HOOKS_LIBRARIES = 144, // "hooks-libraries" - S_LIBRARY = 145, // "library" - S_PARAMETERS = 146, // "parameters" - S_EXPIRED_LEASES_PROCESSING = 147, // "expired-leases-processing" - S_RECLAIM_TIMER_WAIT_TIME = 148, // "reclaim-timer-wait-time" - S_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 149, // "flush-reclaimed-timer-wait-time" - S_HOLD_RECLAIMED_TIME = 150, // "hold-reclaimed-time" - S_MAX_RECLAIM_LEASES = 151, // "max-reclaim-leases" - S_MAX_RECLAIM_TIME = 152, // "max-reclaim-time" - S_UNWARNED_RECLAIM_CYCLES = 153, // "unwarned-reclaim-cycles" - S_SERVER_ID = 154, // "server-id" - S_LLT = 155, // "LLT" - S_EN = 156, // "EN" - S_LL = 157, // "LL" - S_IDENTIFIER = 158, // "identifier" - S_HTYPE = 159, // "htype" - S_TIME = 160, // "time" - S_ENTERPRISE_ID = 161, // "enterprise-id" - S_DHCP4O6_PORT = 162, // "dhcp4o6-port" - S_DHCP_MULTI_THREADING = 163, // "multi-threading" - S_ENABLE_MULTI_THREADING = 164, // "enable-multi-threading" - S_THREAD_POOL_SIZE = 165, // "thread-pool-size" - S_PACKET_QUEUE_SIZE = 166, // "packet-queue-size" - S_CONTROL_SOCKET = 167, // "control-socket" - S_SOCKET_TYPE = 168, // "socket-type" - S_SOCKET_NAME = 169, // "socket-name" - S_DHCP_QUEUE_CONTROL = 170, // "dhcp-queue-control" - S_ENABLE_QUEUE = 171, // "enable-queue" - S_QUEUE_TYPE = 172, // "queue-type" - S_CAPACITY = 173, // "capacity" - S_DHCP_DDNS = 174, // "dhcp-ddns" - S_ENABLE_UPDATES = 175, // "enable-updates" - S_QUALIFYING_SUFFIX = 176, // "qualifying-suffix" - S_SERVER_IP = 177, // "server-ip" - S_SERVER_PORT = 178, // "server-port" - S_SENDER_IP = 179, // "sender-ip" - S_SENDER_PORT = 180, // "sender-port" - S_MAX_QUEUE_SIZE = 181, // "max-queue-size" - S_NCR_PROTOCOL = 182, // "ncr-protocol" - S_NCR_FORMAT = 183, // "ncr-format" - S_OVERRIDE_NO_UPDATE = 184, // "override-no-update" - S_OVERRIDE_CLIENT_UPDATE = 185, // "override-client-update" - S_REPLACE_CLIENT_NAME = 186, // "replace-client-name" - S_GENERATED_PREFIX = 187, // "generated-prefix" - S_UDP = 188, // "UDP" - S_TCP = 189, // "TCP" - S_JSON = 190, // "JSON" - S_WHEN_PRESENT = 191, // "when-present" - S_NEVER = 192, // "never" - S_ALWAYS = 193, // "always" - S_WHEN_NOT_PRESENT = 194, // "when-not-present" - S_HOSTNAME_CHAR_SET = 195, // "hostname-char-set" - S_HOSTNAME_CHAR_REPLACEMENT = 196, // "hostname-char-replacement" - S_EARLY_GLOBAL_RESERVATIONS_LOOKUP = 197, // "early-global-reservations-lookup" - S_IP_RESERVATIONS_UNIQUE = 198, // "ip-reservations-unique" - S_RESERVATIONS_LOOKUP_FIRST = 199, // "reservations-lookup-first" - S_LOGGERS = 200, // "loggers" - S_OUTPUT_OPTIONS = 201, // "output-options" - S_OUTPUT = 202, // "output" - S_DEBUGLEVEL = 203, // "debuglevel" - S_SEVERITY = 204, // "severity" - S_FLUSH = 205, // "flush" - S_MAXSIZE = 206, // "maxsize" - S_MAXVER = 207, // "maxver" - S_PATTERN = 208, // "pattern" - S_COMPATIBILITY = 209, // "compatibility" - S_LENIENT_OPTION_PARSING = 210, // "lenient-option-parsing" - S_TOPLEVEL_JSON = 211, // TOPLEVEL_JSON - S_TOPLEVEL_DHCP6 = 212, // TOPLEVEL_DHCP6 - S_SUB_DHCP6 = 213, // SUB_DHCP6 - S_SUB_INTERFACES6 = 214, // SUB_INTERFACES6 - S_SUB_SUBNET6 = 215, // SUB_SUBNET6 - S_SUB_POOL6 = 216, // SUB_POOL6 - S_SUB_PD_POOL = 217, // SUB_PD_POOL - S_SUB_RESERVATION = 218, // SUB_RESERVATION - S_SUB_OPTION_DEFS = 219, // SUB_OPTION_DEFS - S_SUB_OPTION_DEF = 220, // SUB_OPTION_DEF - S_SUB_OPTION_DATA = 221, // SUB_OPTION_DATA - S_SUB_HOOKS_LIBRARY = 222, // SUB_HOOKS_LIBRARY - S_SUB_DHCP_DDNS = 223, // SUB_DHCP_DDNS - S_SUB_CONFIG_CONTROL = 224, // SUB_CONFIG_CONTROL - S_STRING = 225, // "constant string" - S_INTEGER = 226, // "integer" - S_FLOAT = 227, // "floating point" - S_BOOLEAN = 228, // "boolean" - S_YYACCEPT = 229, // $accept - S_start = 230, // start - S_231_1 = 231, // $@1 - S_232_2 = 232, // $@2 - S_233_3 = 233, // $@3 - S_234_4 = 234, // $@4 - S_235_5 = 235, // $@5 - S_236_6 = 236, // $@6 - S_237_7 = 237, // $@7 - S_238_8 = 238, // $@8 - S_239_9 = 239, // $@9 - S_240_10 = 240, // $@10 - S_241_11 = 241, // $@11 - S_242_12 = 242, // $@12 - S_243_13 = 243, // $@13 - S_244_14 = 244, // $@14 - S_value = 245, // value - S_sub_json = 246, // sub_json - S_map2 = 247, // map2 - S_248_15 = 248, // $@15 - S_map_value = 249, // map_value - S_map_content = 250, // map_content - S_not_empty_map = 251, // not_empty_map - S_list_generic = 252, // list_generic - S_253_16 = 253, // $@16 - S_list_content = 254, // list_content - S_not_empty_list = 255, // not_empty_list - S_list_strings = 256, // list_strings - S_257_17 = 257, // $@17 - S_list_strings_content = 258, // list_strings_content - S_not_empty_list_strings = 259, // not_empty_list_strings - S_unknown_map_entry = 260, // unknown_map_entry - S_syntax_map = 261, // syntax_map - S_262_18 = 262, // $@18 - S_global_object = 263, // global_object - S_264_19 = 264, // $@19 - S_global_object_comma = 265, // global_object_comma - S_sub_dhcp6 = 266, // sub_dhcp6 - S_267_20 = 267, // $@20 - S_global_params = 268, // global_params - S_global_param = 269, // global_param - S_data_directory = 270, // data_directory - S_271_21 = 271, // $@21 - S_preferred_lifetime = 272, // preferred_lifetime - S_min_preferred_lifetime = 273, // min_preferred_lifetime - S_max_preferred_lifetime = 274, // max_preferred_lifetime - S_valid_lifetime = 275, // valid_lifetime - S_min_valid_lifetime = 276, // min_valid_lifetime - S_max_valid_lifetime = 277, // max_valid_lifetime - S_renew_timer = 278, // renew_timer - S_rebind_timer = 279, // rebind_timer - S_calculate_tee_times = 280, // calculate_tee_times - S_t1_percent = 281, // t1_percent - S_t2_percent = 282, // t2_percent - S_cache_threshold = 283, // cache_threshold - S_cache_max_age = 284, // cache_max_age - S_decline_probation_period = 285, // decline_probation_period - S_ddns_send_updates = 286, // ddns_send_updates - S_ddns_override_no_update = 287, // ddns_override_no_update - S_ddns_override_client_update = 288, // ddns_override_client_update - S_ddns_replace_client_name = 289, // ddns_replace_client_name - S_290_22 = 290, // $@22 - S_ddns_replace_client_name_value = 291, // ddns_replace_client_name_value - S_ddns_generated_prefix = 292, // ddns_generated_prefix - S_293_23 = 293, // $@23 - S_ddns_qualifying_suffix = 294, // ddns_qualifying_suffix - S_295_24 = 295, // $@24 - S_ddns_update_on_renew = 296, // ddns_update_on_renew - S_ddns_use_conflict_resolution = 297, // ddns_use_conflict_resolution - S_ddns_conflict_resolution_mode = 298, // ddns_conflict_resolution_mode - S_299_25 = 299, // $@25 - S_ddns_conflict_resolution_mode_value = 300, // ddns_conflict_resolution_mode_value - S_ddns_ttl_percent = 301, // ddns_ttl_percent - S_hostname_char_set = 302, // hostname_char_set - S_303_26 = 303, // $@26 - S_hostname_char_replacement = 304, // hostname_char_replacement - S_305_27 = 305, // $@27 - S_store_extended_info = 306, // store_extended_info - S_statistic_default_sample_count = 307, // statistic_default_sample_count - S_statistic_default_sample_age = 308, // statistic_default_sample_age - S_server_tag = 309, // server_tag - S_310_28 = 310, // $@28 - S_parked_packet_limit = 311, // parked_packet_limit - S_allocator = 312, // allocator - S_313_29 = 313, // $@29 - S_pd_allocator = 314, // pd_allocator - S_315_30 = 315, // $@30 - S_early_global_reservations_lookup = 316, // early_global_reservations_lookup - S_ip_reservations_unique = 317, // ip_reservations_unique - S_reservations_lookup_first = 318, // reservations_lookup_first - S_interfaces_config = 319, // interfaces_config - S_320_31 = 320, // $@31 - S_sub_interfaces6 = 321, // sub_interfaces6 - S_322_32 = 322, // $@32 - S_interfaces_config_params = 323, // interfaces_config_params - S_interfaces_config_param = 324, // interfaces_config_param - S_interfaces_list = 325, // interfaces_list - S_326_33 = 326, // $@33 - S_re_detect = 327, // re_detect - S_service_sockets_require_all = 328, // service_sockets_require_all - S_service_sockets_retry_wait_time = 329, // service_sockets_retry_wait_time - S_service_sockets_max_retries = 330, // service_sockets_max_retries - S_lease_database = 331, // lease_database - S_332_34 = 332, // $@34 - S_hosts_database = 333, // hosts_database - S_334_35 = 334, // $@35 - S_hosts_databases = 335, // hosts_databases - S_336_36 = 336, // $@36 - S_database_list = 337, // database_list - S_not_empty_database_list = 338, // not_empty_database_list - S_database = 339, // database - S_340_37 = 340, // $@37 - S_database_map_params = 341, // database_map_params - S_database_map_param = 342, // database_map_param - S_database_type = 343, // database_type - S_344_38 = 344, // $@38 - S_db_type = 345, // db_type - S_user = 346, // user - S_347_39 = 347, // $@39 - S_password = 348, // password - S_349_40 = 349, // $@40 - S_host = 350, // host - S_351_41 = 351, // $@41 - S_port = 352, // port - S_name = 353, // name - S_354_42 = 354, // $@42 - S_persist = 355, // persist - S_lfc_interval = 356, // lfc_interval - S_readonly = 357, // readonly - S_connect_timeout = 358, // connect_timeout - S_read_timeout = 359, // read_timeout - S_write_timeout = 360, // write_timeout - S_tcp_user_timeout = 361, // tcp_user_timeout - S_reconnect_wait_time = 362, // reconnect_wait_time - S_on_fail = 363, // on_fail - S_364_43 = 364, // $@43 - S_on_fail_mode = 365, // on_fail_mode - S_max_row_errors = 366, // max_row_errors - S_max_reconnect_tries = 367, // max_reconnect_tries - S_trust_anchor = 368, // trust_anchor - S_369_44 = 369, // $@44 - S_cert_file = 370, // cert_file - S_371_45 = 371, // $@45 - S_key_file = 372, // key_file - S_373_46 = 373, // $@46 - S_cipher_list = 374, // cipher_list - S_375_47 = 375, // $@47 - S_sanity_checks = 376, // sanity_checks - S_377_48 = 377, // $@48 - S_sanity_checks_params = 378, // sanity_checks_params - S_sanity_checks_param = 379, // sanity_checks_param - S_lease_checks = 380, // lease_checks - S_381_49 = 381, // $@49 - S_extended_info_checks = 382, // extended_info_checks - S_383_50 = 383, // $@50 - S_mac_sources = 384, // mac_sources - S_385_51 = 385, // $@51 - S_mac_sources_list = 386, // mac_sources_list - S_mac_sources_value = 387, // mac_sources_value - S_duid_id = 388, // duid_id - S_string_id = 389, // string_id - S_host_reservation_identifiers = 390, // host_reservation_identifiers - S_391_52 = 391, // $@52 - S_host_reservation_identifiers_list = 392, // host_reservation_identifiers_list - S_host_reservation_identifier = 393, // host_reservation_identifier - S_hw_address_id = 394, // hw_address_id - S_flex_id = 395, // flex_id - S_relay_supplied_options = 396, // relay_supplied_options - S_397_53 = 397, // $@53 - S_dhcp_multi_threading = 398, // dhcp_multi_threading - S_399_54 = 399, // $@54 - S_multi_threading_params = 400, // multi_threading_params - S_multi_threading_param = 401, // multi_threading_param - S_enable_multi_threading = 402, // enable_multi_threading - S_thread_pool_size = 403, // thread_pool_size - S_packet_queue_size = 404, // packet_queue_size - S_hooks_libraries = 405, // hooks_libraries - S_406_55 = 406, // $@55 - S_hooks_libraries_list = 407, // hooks_libraries_list - S_not_empty_hooks_libraries_list = 408, // not_empty_hooks_libraries_list - S_hooks_library = 409, // hooks_library - S_410_56 = 410, // $@56 - S_sub_hooks_library = 411, // sub_hooks_library - S_412_57 = 412, // $@57 - S_hooks_params = 413, // hooks_params - S_hooks_param = 414, // hooks_param - S_library = 415, // library - S_416_58 = 416, // $@58 - S_parameters = 417, // parameters - S_418_59 = 418, // $@59 - S_expired_leases_processing = 419, // expired_leases_processing - S_420_60 = 420, // $@60 - S_expired_leases_params = 421, // expired_leases_params - S_expired_leases_param = 422, // expired_leases_param - S_reclaim_timer_wait_time = 423, // reclaim_timer_wait_time - S_flush_reclaimed_timer_wait_time = 424, // flush_reclaimed_timer_wait_time - S_hold_reclaimed_time = 425, // hold_reclaimed_time - S_max_reclaim_leases = 426, // max_reclaim_leases - S_max_reclaim_time = 427, // max_reclaim_time - S_unwarned_reclaim_cycles = 428, // unwarned_reclaim_cycles - S_subnet6_list = 429, // subnet6_list - S_430_61 = 430, // $@61 - S_subnet6_list_content = 431, // subnet6_list_content - S_not_empty_subnet6_list = 432, // not_empty_subnet6_list - S_subnet6 = 433, // subnet6 - S_434_62 = 434, // $@62 - S_sub_subnet6 = 435, // sub_subnet6 - S_436_63 = 436, // $@63 - S_subnet6_params = 437, // subnet6_params - S_subnet6_param = 438, // subnet6_param - S_subnet = 439, // subnet - S_440_64 = 440, // $@64 - S_interface = 441, // interface - S_442_65 = 442, // $@65 - S_interface_id = 443, // interface_id - S_444_66 = 444, // $@66 - S_client_class = 445, // client_class - S_446_67 = 446, // $@67 - S_require_client_classes = 447, // require_client_classes - S_448_68 = 448, // $@68 - S_reservations_global = 449, // reservations_global - S_reservations_in_subnet = 450, // reservations_in_subnet - S_reservations_out_of_pool = 451, // reservations_out_of_pool - S_reservation_mode = 452, // reservation_mode - S_453_69 = 453, // $@69 - S_hr_mode = 454, // hr_mode - S_id = 455, // id - S_rapid_commit = 456, // rapid_commit - S_shared_networks = 457, // shared_networks - S_458_70 = 458, // $@70 - S_shared_networks_content = 459, // shared_networks_content - S_shared_networks_list = 460, // shared_networks_list - S_shared_network = 461, // shared_network - S_462_71 = 462, // $@71 - S_shared_network_params = 463, // shared_network_params - S_shared_network_param = 464, // shared_network_param - S_option_def_list = 465, // option_def_list - S_466_72 = 466, // $@72 - S_sub_option_def_list = 467, // sub_option_def_list - S_468_73 = 468, // $@73 - S_option_def_list_content = 469, // option_def_list_content - S_not_empty_option_def_list = 470, // not_empty_option_def_list - S_option_def_entry = 471, // option_def_entry - S_472_74 = 472, // $@74 - S_sub_option_def = 473, // sub_option_def - S_474_75 = 474, // $@75 - S_option_def_params = 475, // option_def_params - S_not_empty_option_def_params = 476, // not_empty_option_def_params - S_option_def_param = 477, // option_def_param - S_option_def_name = 478, // option_def_name - S_code = 479, // code - S_option_def_code = 480, // option_def_code - S_option_def_type = 481, // option_def_type - S_482_76 = 482, // $@76 - S_option_def_record_types = 483, // option_def_record_types - S_484_77 = 484, // $@77 - S_space = 485, // space - S_486_78 = 486, // $@78 - S_option_def_space = 487, // option_def_space - S_option_def_encapsulate = 488, // option_def_encapsulate - S_489_79 = 489, // $@79 - S_option_def_array = 490, // option_def_array - S_option_data_list = 491, // option_data_list - S_492_80 = 492, // $@80 - S_option_data_list_content = 493, // option_data_list_content - S_not_empty_option_data_list = 494, // not_empty_option_data_list - S_option_data_entry = 495, // option_data_entry - S_496_81 = 496, // $@81 - S_sub_option_data = 497, // sub_option_data - S_498_82 = 498, // $@82 - S_option_data_params = 499, // option_data_params - S_not_empty_option_data_params = 500, // not_empty_option_data_params - S_option_data_param = 501, // option_data_param - S_option_data_name = 502, // option_data_name - S_option_data_data = 503, // option_data_data - S_504_83 = 504, // $@83 - S_option_data_code = 505, // option_data_code - S_option_data_space = 506, // option_data_space - S_option_data_csv_format = 507, // option_data_csv_format - S_option_data_always_send = 508, // option_data_always_send - S_option_data_never_send = 509, // option_data_never_send - S_pools_list = 510, // pools_list - S_511_84 = 511, // $@84 - S_pools_list_content = 512, // pools_list_content - S_not_empty_pools_list = 513, // not_empty_pools_list - S_pool_list_entry = 514, // pool_list_entry - S_515_85 = 515, // $@85 - S_sub_pool6 = 516, // sub_pool6 - S_517_86 = 517, // $@86 - S_pool_params = 518, // pool_params - S_pool_param = 519, // pool_param - S_pool_entry = 520, // pool_entry - S_521_87 = 521, // $@87 - S_pool_id = 522, // pool_id - S_user_context = 523, // user_context - S_524_88 = 524, // $@88 - S_comment = 525, // comment - S_526_89 = 526, // $@89 - S_pd_pools_list = 527, // pd_pools_list - S_528_90 = 528, // $@90 - S_pd_pools_list_content = 529, // pd_pools_list_content - S_not_empty_pd_pools_list = 530, // not_empty_pd_pools_list - S_pd_pool_entry = 531, // pd_pool_entry - S_532_91 = 532, // $@91 - S_sub_pd_pool = 533, // sub_pd_pool - S_534_92 = 534, // $@92 - S_pd_pool_params = 535, // pd_pool_params - S_pd_pool_param = 536, // pd_pool_param - S_pd_prefix = 537, // pd_prefix - S_538_93 = 538, // $@93 - S_pd_prefix_len = 539, // pd_prefix_len - S_excluded_prefix = 540, // excluded_prefix - S_541_94 = 541, // $@94 - S_excluded_prefix_len = 542, // excluded_prefix_len - S_pd_delegated_len = 543, // pd_delegated_len - S_reservations = 544, // reservations - S_545_95 = 545, // $@95 - S_reservations_list = 546, // reservations_list - S_not_empty_reservations_list = 547, // not_empty_reservations_list - S_reservation = 548, // reservation - S_549_96 = 549, // $@96 - S_sub_reservation = 550, // sub_reservation - S_551_97 = 551, // $@97 - S_reservation_params = 552, // reservation_params - S_not_empty_reservation_params = 553, // not_empty_reservation_params - S_reservation_param = 554, // reservation_param - S_ip_addresses = 555, // ip_addresses - S_556_98 = 556, // $@98 - S_prefixes = 557, // prefixes - S_558_99 = 558, // $@99 - S_duid = 559, // duid - S_560_100 = 560, // $@100 - S_hw_address = 561, // hw_address - S_562_101 = 562, // $@101 - S_hostname = 563, // hostname - S_564_102 = 564, // $@102 - S_flex_id_value = 565, // flex_id_value - S_566_103 = 566, // $@103 - S_reservation_client_classes = 567, // reservation_client_classes - S_568_104 = 568, // $@104 - S_relay = 569, // relay - S_570_105 = 570, // $@105 - S_relay_map = 571, // relay_map - S_ip_address = 572, // ip_address - S_573_106 = 573, // $@106 - S_client_classes = 574, // client_classes - S_575_107 = 575, // $@107 - S_client_classes_list = 576, // client_classes_list - S_client_class_entry = 577, // client_class_entry - S_578_108 = 578, // $@108 - S_client_class_params = 579, // client_class_params - S_not_empty_client_class_params = 580, // not_empty_client_class_params - S_client_class_param = 581, // client_class_param - S_client_class_name = 582, // client_class_name - S_client_class_test = 583, // client_class_test - S_584_109 = 584, // $@109 - S_client_class_template_test = 585, // client_class_template_test - S_586_110 = 586, // $@110 - S_only_if_required = 587, // only_if_required - S_server_id = 588, // server_id - S_589_111 = 589, // $@111 - S_server_id_params = 590, // server_id_params - S_server_id_param = 591, // server_id_param - S_server_id_type = 592, // server_id_type - S_593_112 = 593, // $@112 - S_duid_type = 594, // duid_type - S_htype = 595, // htype - S_identifier = 596, // identifier - S_597_113 = 597, // $@113 - S_time = 598, // time - S_enterprise_id = 599, // enterprise_id - S_dhcp4o6_port = 600, // dhcp4o6_port - S_control_socket = 601, // control_socket - S_602_114 = 602, // $@114 - S_control_socket_params = 603, // control_socket_params - S_control_socket_param = 604, // control_socket_param - S_socket_type = 605, // socket_type - S_606_115 = 606, // $@115 - S_socket_name = 607, // socket_name - S_608_116 = 608, // $@116 - S_dhcp_queue_control = 609, // dhcp_queue_control - S_610_117 = 610, // $@117 - S_queue_control_params = 611, // queue_control_params - S_queue_control_param = 612, // queue_control_param - S_enable_queue = 613, // enable_queue - S_queue_type = 614, // queue_type - S_615_118 = 615, // $@118 - S_capacity = 616, // capacity - S_arbitrary_map_entry = 617, // arbitrary_map_entry - S_618_119 = 618, // $@119 - S_dhcp_ddns = 619, // dhcp_ddns - S_620_120 = 620, // $@120 - S_sub_dhcp_ddns = 621, // sub_dhcp_ddns - S_622_121 = 622, // $@121 - S_dhcp_ddns_params = 623, // dhcp_ddns_params - S_dhcp_ddns_param = 624, // dhcp_ddns_param - S_enable_updates = 625, // enable_updates - S_dep_qualifying_suffix = 626, // dep_qualifying_suffix - S_627_122 = 627, // $@122 - S_server_ip = 628, // server_ip - S_629_123 = 629, // $@123 - S_server_port = 630, // server_port - S_sender_ip = 631, // sender_ip - S_632_124 = 632, // $@124 - S_sender_port = 633, // sender_port - S_max_queue_size = 634, // max_queue_size - S_ncr_protocol = 635, // ncr_protocol - S_636_125 = 636, // $@125 - S_ncr_protocol_value = 637, // ncr_protocol_value - S_ncr_format = 638, // ncr_format - S_639_126 = 639, // $@126 - S_dep_override_no_update = 640, // dep_override_no_update - S_dep_override_client_update = 641, // dep_override_client_update - S_dep_replace_client_name = 642, // dep_replace_client_name - S_643_127 = 643, // $@127 - S_dep_generated_prefix = 644, // dep_generated_prefix - S_645_128 = 645, // $@128 - S_dep_hostname_char_set = 646, // dep_hostname_char_set - S_647_129 = 647, // $@129 - S_dep_hostname_char_replacement = 648, // dep_hostname_char_replacement - S_649_130 = 649, // $@130 - S_config_control = 650, // config_control - S_651_131 = 651, // $@131 - S_sub_config_control = 652, // sub_config_control - S_653_132 = 653, // $@132 - S_config_control_params = 654, // config_control_params - S_config_control_param = 655, // config_control_param - S_config_databases = 656, // config_databases - S_657_133 = 657, // $@133 - S_config_fetch_wait_time = 658, // config_fetch_wait_time - S_loggers = 659, // loggers - S_660_134 = 660, // $@134 - S_loggers_entries = 661, // loggers_entries - S_logger_entry = 662, // logger_entry - S_663_135 = 663, // $@135 - S_logger_params = 664, // logger_params - S_logger_param = 665, // logger_param - S_debuglevel = 666, // debuglevel - S_severity = 667, // severity - S_668_136 = 668, // $@136 - S_output_options_list = 669, // output_options_list - S_670_137 = 670, // $@137 - S_output_options_list_content = 671, // output_options_list_content - S_output_entry = 672, // output_entry - S_673_138 = 673, // $@138 - S_output_params_list = 674, // output_params_list - S_output_params = 675, // output_params - S_output = 676, // output - S_677_139 = 677, // $@139 - S_flush = 678, // flush - S_maxsize = 679, // maxsize - S_maxver = 680, // maxver - S_pattern = 681, // pattern - S_682_140 = 682, // $@140 - S_compatibility = 683, // compatibility - S_684_141 = 684, // $@141 - S_compatibility_params = 685, // compatibility_params - S_compatibility_param = 686, // compatibility_param - S_lenient_option_parsing = 687 // lenient_option_parsing + S_RETRY_ON_STARTUP = 45, // "retry-on-startup" + S_MAX_ROW_ERRORS = 46, // "max-row-errors" + S_TRUST_ANCHOR = 47, // "trust-anchor" + S_CERT_FILE = 48, // "cert-file" + S_KEY_FILE = 49, // "key-file" + S_CIPHER_LIST = 50, // "cipher-list" + S_PREFERRED_LIFETIME = 51, // "preferred-lifetime" + S_MIN_PREFERRED_LIFETIME = 52, // "min-preferred-lifetime" + S_MAX_PREFERRED_LIFETIME = 53, // "max-preferred-lifetime" + S_VALID_LIFETIME = 54, // "valid-lifetime" + S_MIN_VALID_LIFETIME = 55, // "min-valid-lifetime" + S_MAX_VALID_LIFETIME = 56, // "max-valid-lifetime" + S_RENEW_TIMER = 57, // "renew-timer" + S_REBIND_TIMER = 58, // "rebind-timer" + S_CALCULATE_TEE_TIMES = 59, // "calculate-tee-times" + S_T1_PERCENT = 60, // "t1-percent" + S_T2_PERCENT = 61, // "t2-percent" + S_CACHE_THRESHOLD = 62, // "cache-threshold" + S_CACHE_MAX_AGE = 63, // "cache-max-age" + S_DECLINE_PROBATION_PERIOD = 64, // "decline-probation-period" + S_SERVER_TAG = 65, // "server-tag" + S_STATISTIC_DEFAULT_SAMPLE_COUNT = 66, // "statistic-default-sample-count" + S_STATISTIC_DEFAULT_SAMPLE_AGE = 67, // "statistic-default-sample-age" + S_DDNS_SEND_UPDATES = 68, // "ddns-send-updates" + S_DDNS_OVERRIDE_NO_UPDATE = 69, // "ddns-override-no-update" + S_DDNS_OVERRIDE_CLIENT_UPDATE = 70, // "ddns-override-client-update" + S_DDNS_REPLACE_CLIENT_NAME = 71, // "ddns-replace-client-name" + S_DDNS_GENERATED_PREFIX = 72, // "ddns-generated-prefix" + S_DDNS_QUALIFYING_SUFFIX = 73, // "ddns-qualifying-suffix" + S_DDNS_UPDATE_ON_RENEW = 74, // "ddns-update-on-renew" + S_DDNS_USE_CONFLICT_RESOLUTION = 75, // "ddns-use-conflict-resolution" + S_DDNS_TTL_PERCENT = 76, // "ddns-ttl-percent" + S_STORE_EXTENDED_INFO = 77, // "store-extended-info" + S_SUBNET6 = 78, // "subnet6" + S_OPTION_DEF = 79, // "option-def" + S_OPTION_DATA = 80, // "option-data" + S_NAME = 81, // "name" + S_DATA = 82, // "data" + S_CODE = 83, // "code" + S_SPACE = 84, // "space" + S_CSV_FORMAT = 85, // "csv-format" + S_ALWAYS_SEND = 86, // "always-send" + S_NEVER_SEND = 87, // "never-send" + S_RECORD_TYPES = 88, // "record-types" + S_ENCAPSULATE = 89, // "encapsulate" + S_ARRAY = 90, // "array" + S_PARKED_PACKET_LIMIT = 91, // "parked-packet-limit" + S_ALLOCATOR = 92, // "allocator" + S_PD_ALLOCATOR = 93, // "pd-allocator" + S_DDNS_CONFLICT_RESOLUTION_MODE = 94, // "ddns-conflict-resolution-mode" + S_CHECK_WITH_DHCID = 95, // "check-with-dhcid" + S_NO_CHECK_WITH_DHCID = 96, // "no-check-with-dhcid" + S_CHECK_EXISTS_WITH_DHCID = 97, // "check-exists-with-dhcid" + S_NO_CHECK_WITHOUT_DHCID = 98, // "no-check-without-dhcid" + S_SHARED_NETWORKS = 99, // "shared-networks" + S_POOLS = 100, // "pools" + S_POOL = 101, // "pool" + S_PD_POOLS = 102, // "pd-pools" + S_PREFIX = 103, // "prefix" + S_PREFIX_LEN = 104, // "prefix-len" + S_EXCLUDED_PREFIX = 105, // "excluded-prefix" + S_EXCLUDED_PREFIX_LEN = 106, // "excluded-prefix-len" + S_DELEGATED_LEN = 107, // "delegated-len" + S_USER_CONTEXT = 108, // "user-context" + S_COMMENT = 109, // "comment" + S_SUBNET = 110, // "subnet" + S_INTERFACE = 111, // "interface" + S_INTERFACE_ID = 112, // "interface-id" + S_ID = 113, // "id" + S_RAPID_COMMIT = 114, // "rapid-commit" + S_RESERVATION_MODE = 115, // "reservation-mode" + S_DISABLED = 116, // "disabled" + S_OUT_OF_POOL = 117, // "out-of-pool" + S_GLOBAL = 118, // "global" + S_ALL = 119, // "all" + S_RESERVATIONS_GLOBAL = 120, // "reservations-global" + S_RESERVATIONS_IN_SUBNET = 121, // "reservations-in-subnet" + S_RESERVATIONS_OUT_OF_POOL = 122, // "reservations-out-of-pool" + S_MAC_SOURCES = 123, // "mac-sources" + S_RELAY_SUPPLIED_OPTIONS = 124, // "relay-supplied-options" + S_HOST_RESERVATION_IDENTIFIERS = 125, // "host-reservation-identifiers" + S_SANITY_CHECKS = 126, // "sanity-checks" + S_LEASE_CHECKS = 127, // "lease-checks" + S_EXTENDED_INFO_CHECKS = 128, // "extended-info-checks" + S_CLIENT_CLASSES = 129, // "client-classes" + S_REQUIRE_CLIENT_CLASSES = 130, // "require-client-classes" + S_TEST = 131, // "test" + S_TEMPLATE_TEST = 132, // "template-test" + S_ONLY_IF_REQUIRED = 133, // "only-if-required" + S_CLIENT_CLASS = 134, // "client-class" + S_POOL_ID = 135, // "pool-id" + S_RESERVATIONS = 136, // "reservations" + S_IP_ADDRESSES = 137, // "ip-addresses" + S_PREFIXES = 138, // "prefixes" + S_DUID = 139, // "duid" + S_HW_ADDRESS = 140, // "hw-address" + S_HOSTNAME = 141, // "hostname" + S_FLEX_ID = 142, // "flex-id" + S_RELAY = 143, // "relay" + S_IP_ADDRESS = 144, // "ip-address" + S_HOOKS_LIBRARIES = 145, // "hooks-libraries" + S_LIBRARY = 146, // "library" + S_PARAMETERS = 147, // "parameters" + S_EXPIRED_LEASES_PROCESSING = 148, // "expired-leases-processing" + S_RECLAIM_TIMER_WAIT_TIME = 149, // "reclaim-timer-wait-time" + S_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 150, // "flush-reclaimed-timer-wait-time" + S_HOLD_RECLAIMED_TIME = 151, // "hold-reclaimed-time" + S_MAX_RECLAIM_LEASES = 152, // "max-reclaim-leases" + S_MAX_RECLAIM_TIME = 153, // "max-reclaim-time" + S_UNWARNED_RECLAIM_CYCLES = 154, // "unwarned-reclaim-cycles" + S_SERVER_ID = 155, // "server-id" + S_LLT = 156, // "LLT" + S_EN = 157, // "EN" + S_LL = 158, // "LL" + S_IDENTIFIER = 159, // "identifier" + S_HTYPE = 160, // "htype" + S_TIME = 161, // "time" + S_ENTERPRISE_ID = 162, // "enterprise-id" + S_DHCP4O6_PORT = 163, // "dhcp4o6-port" + S_DHCP_MULTI_THREADING = 164, // "multi-threading" + S_ENABLE_MULTI_THREADING = 165, // "enable-multi-threading" + S_THREAD_POOL_SIZE = 166, // "thread-pool-size" + S_PACKET_QUEUE_SIZE = 167, // "packet-queue-size" + S_CONTROL_SOCKET = 168, // "control-socket" + S_SOCKET_TYPE = 169, // "socket-type" + S_SOCKET_NAME = 170, // "socket-name" + S_DHCP_QUEUE_CONTROL = 171, // "dhcp-queue-control" + S_ENABLE_QUEUE = 172, // "enable-queue" + S_QUEUE_TYPE = 173, // "queue-type" + S_CAPACITY = 174, // "capacity" + S_DHCP_DDNS = 175, // "dhcp-ddns" + S_ENABLE_UPDATES = 176, // "enable-updates" + S_QUALIFYING_SUFFIX = 177, // "qualifying-suffix" + S_SERVER_IP = 178, // "server-ip" + S_SERVER_PORT = 179, // "server-port" + S_SENDER_IP = 180, // "sender-ip" + S_SENDER_PORT = 181, // "sender-port" + S_MAX_QUEUE_SIZE = 182, // "max-queue-size" + S_NCR_PROTOCOL = 183, // "ncr-protocol" + S_NCR_FORMAT = 184, // "ncr-format" + S_OVERRIDE_NO_UPDATE = 185, // "override-no-update" + S_OVERRIDE_CLIENT_UPDATE = 186, // "override-client-update" + S_REPLACE_CLIENT_NAME = 187, // "replace-client-name" + S_GENERATED_PREFIX = 188, // "generated-prefix" + S_UDP = 189, // "UDP" + S_TCP = 190, // "TCP" + S_JSON = 191, // "JSON" + S_WHEN_PRESENT = 192, // "when-present" + S_NEVER = 193, // "never" + S_ALWAYS = 194, // "always" + S_WHEN_NOT_PRESENT = 195, // "when-not-present" + S_HOSTNAME_CHAR_SET = 196, // "hostname-char-set" + S_HOSTNAME_CHAR_REPLACEMENT = 197, // "hostname-char-replacement" + S_EARLY_GLOBAL_RESERVATIONS_LOOKUP = 198, // "early-global-reservations-lookup" + S_IP_RESERVATIONS_UNIQUE = 199, // "ip-reservations-unique" + S_RESERVATIONS_LOOKUP_FIRST = 200, // "reservations-lookup-first" + S_LOGGERS = 201, // "loggers" + S_OUTPUT_OPTIONS = 202, // "output-options" + S_OUTPUT = 203, // "output" + S_DEBUGLEVEL = 204, // "debuglevel" + S_SEVERITY = 205, // "severity" + S_FLUSH = 206, // "flush" + S_MAXSIZE = 207, // "maxsize" + S_MAXVER = 208, // "maxver" + S_PATTERN = 209, // "pattern" + S_COMPATIBILITY = 210, // "compatibility" + S_LENIENT_OPTION_PARSING = 211, // "lenient-option-parsing" + S_TOPLEVEL_JSON = 212, // TOPLEVEL_JSON + S_TOPLEVEL_DHCP6 = 213, // TOPLEVEL_DHCP6 + S_SUB_DHCP6 = 214, // SUB_DHCP6 + S_SUB_INTERFACES6 = 215, // SUB_INTERFACES6 + S_SUB_SUBNET6 = 216, // SUB_SUBNET6 + S_SUB_POOL6 = 217, // SUB_POOL6 + S_SUB_PD_POOL = 218, // SUB_PD_POOL + S_SUB_RESERVATION = 219, // SUB_RESERVATION + S_SUB_OPTION_DEFS = 220, // SUB_OPTION_DEFS + S_SUB_OPTION_DEF = 221, // SUB_OPTION_DEF + S_SUB_OPTION_DATA = 222, // SUB_OPTION_DATA + S_SUB_HOOKS_LIBRARY = 223, // SUB_HOOKS_LIBRARY + S_SUB_DHCP_DDNS = 224, // SUB_DHCP_DDNS + S_SUB_CONFIG_CONTROL = 225, // SUB_CONFIG_CONTROL + S_STRING = 226, // "constant string" + S_INTEGER = 227, // "integer" + S_FLOAT = 228, // "floating point" + S_BOOLEAN = 229, // "boolean" + S_YYACCEPT = 230, // $accept + S_start = 231, // start + S_232_1 = 232, // $@1 + S_233_2 = 233, // $@2 + S_234_3 = 234, // $@3 + S_235_4 = 235, // $@4 + S_236_5 = 236, // $@5 + S_237_6 = 237, // $@6 + S_238_7 = 238, // $@7 + S_239_8 = 239, // $@8 + S_240_9 = 240, // $@9 + S_241_10 = 241, // $@10 + S_242_11 = 242, // $@11 + S_243_12 = 243, // $@12 + S_244_13 = 244, // $@13 + S_245_14 = 245, // $@14 + S_value = 246, // value + S_sub_json = 247, // sub_json + S_map2 = 248, // map2 + S_249_15 = 249, // $@15 + S_map_value = 250, // map_value + S_map_content = 251, // map_content + S_not_empty_map = 252, // not_empty_map + S_list_generic = 253, // list_generic + S_254_16 = 254, // $@16 + S_list_content = 255, // list_content + S_not_empty_list = 256, // not_empty_list + S_list_strings = 257, // list_strings + S_258_17 = 258, // $@17 + S_list_strings_content = 259, // list_strings_content + S_not_empty_list_strings = 260, // not_empty_list_strings + S_unknown_map_entry = 261, // unknown_map_entry + S_syntax_map = 262, // syntax_map + S_263_18 = 263, // $@18 + S_global_object = 264, // global_object + S_265_19 = 265, // $@19 + S_global_object_comma = 266, // global_object_comma + S_sub_dhcp6 = 267, // sub_dhcp6 + S_268_20 = 268, // $@20 + S_global_params = 269, // global_params + S_global_param = 270, // global_param + S_data_directory = 271, // data_directory + S_272_21 = 272, // $@21 + S_preferred_lifetime = 273, // preferred_lifetime + S_min_preferred_lifetime = 274, // min_preferred_lifetime + S_max_preferred_lifetime = 275, // max_preferred_lifetime + S_valid_lifetime = 276, // valid_lifetime + S_min_valid_lifetime = 277, // min_valid_lifetime + S_max_valid_lifetime = 278, // max_valid_lifetime + S_renew_timer = 279, // renew_timer + S_rebind_timer = 280, // rebind_timer + S_calculate_tee_times = 281, // calculate_tee_times + S_t1_percent = 282, // t1_percent + S_t2_percent = 283, // t2_percent + S_cache_threshold = 284, // cache_threshold + S_cache_max_age = 285, // cache_max_age + S_decline_probation_period = 286, // decline_probation_period + S_ddns_send_updates = 287, // ddns_send_updates + S_ddns_override_no_update = 288, // ddns_override_no_update + S_ddns_override_client_update = 289, // ddns_override_client_update + S_ddns_replace_client_name = 290, // ddns_replace_client_name + S_291_22 = 291, // $@22 + S_ddns_replace_client_name_value = 292, // ddns_replace_client_name_value + S_ddns_generated_prefix = 293, // ddns_generated_prefix + S_294_23 = 294, // $@23 + S_ddns_qualifying_suffix = 295, // ddns_qualifying_suffix + S_296_24 = 296, // $@24 + S_ddns_update_on_renew = 297, // ddns_update_on_renew + S_ddns_use_conflict_resolution = 298, // ddns_use_conflict_resolution + S_ddns_conflict_resolution_mode = 299, // ddns_conflict_resolution_mode + S_300_25 = 300, // $@25 + S_ddns_conflict_resolution_mode_value = 301, // ddns_conflict_resolution_mode_value + S_ddns_ttl_percent = 302, // ddns_ttl_percent + S_hostname_char_set = 303, // hostname_char_set + S_304_26 = 304, // $@26 + S_hostname_char_replacement = 305, // hostname_char_replacement + S_306_27 = 306, // $@27 + S_store_extended_info = 307, // store_extended_info + S_statistic_default_sample_count = 308, // statistic_default_sample_count + S_statistic_default_sample_age = 309, // statistic_default_sample_age + S_server_tag = 310, // server_tag + S_311_28 = 311, // $@28 + S_parked_packet_limit = 312, // parked_packet_limit + S_allocator = 313, // allocator + S_314_29 = 314, // $@29 + S_pd_allocator = 315, // pd_allocator + S_316_30 = 316, // $@30 + S_early_global_reservations_lookup = 317, // early_global_reservations_lookup + S_ip_reservations_unique = 318, // ip_reservations_unique + S_reservations_lookup_first = 319, // reservations_lookup_first + S_interfaces_config = 320, // interfaces_config + S_321_31 = 321, // $@31 + S_sub_interfaces6 = 322, // sub_interfaces6 + S_323_32 = 323, // $@32 + S_interfaces_config_params = 324, // interfaces_config_params + S_interfaces_config_param = 325, // interfaces_config_param + S_interfaces_list = 326, // interfaces_list + S_327_33 = 327, // $@33 + S_re_detect = 328, // re_detect + S_service_sockets_require_all = 329, // service_sockets_require_all + S_service_sockets_retry_wait_time = 330, // service_sockets_retry_wait_time + S_service_sockets_max_retries = 331, // service_sockets_max_retries + S_lease_database = 332, // lease_database + S_333_34 = 333, // $@34 + S_hosts_database = 334, // hosts_database + S_335_35 = 335, // $@35 + S_hosts_databases = 336, // hosts_databases + S_337_36 = 337, // $@36 + S_database_list = 338, // database_list + S_not_empty_database_list = 339, // not_empty_database_list + S_database = 340, // database + S_341_37 = 341, // $@37 + S_database_map_params = 342, // database_map_params + S_database_map_param = 343, // database_map_param + S_database_type = 344, // database_type + S_345_38 = 345, // $@38 + S_db_type = 346, // db_type + S_user = 347, // user + S_348_39 = 348, // $@39 + S_password = 349, // password + S_350_40 = 350, // $@40 + S_host = 351, // host + S_352_41 = 352, // $@41 + S_port = 353, // port + S_name = 354, // name + S_355_42 = 355, // $@42 + S_persist = 356, // persist + S_lfc_interval = 357, // lfc_interval + S_readonly = 358, // readonly + S_connect_timeout = 359, // connect_timeout + S_read_timeout = 360, // read_timeout + S_write_timeout = 361, // write_timeout + S_tcp_user_timeout = 362, // tcp_user_timeout + S_reconnect_wait_time = 363, // reconnect_wait_time + S_on_fail = 364, // on_fail + S_365_43 = 365, // $@43 + S_on_fail_mode = 366, // on_fail_mode + S_retry_on_startup = 367, // retry_on_startup + S_max_row_errors = 368, // max_row_errors + S_max_reconnect_tries = 369, // max_reconnect_tries + S_trust_anchor = 370, // trust_anchor + S_371_44 = 371, // $@44 + S_cert_file = 372, // cert_file + S_373_45 = 373, // $@45 + S_key_file = 374, // key_file + S_375_46 = 375, // $@46 + S_cipher_list = 376, // cipher_list + S_377_47 = 377, // $@47 + S_sanity_checks = 378, // sanity_checks + S_379_48 = 379, // $@48 + S_sanity_checks_params = 380, // sanity_checks_params + S_sanity_checks_param = 381, // sanity_checks_param + S_lease_checks = 382, // lease_checks + S_383_49 = 383, // $@49 + S_extended_info_checks = 384, // extended_info_checks + S_385_50 = 385, // $@50 + S_mac_sources = 386, // mac_sources + S_387_51 = 387, // $@51 + S_mac_sources_list = 388, // mac_sources_list + S_mac_sources_value = 389, // mac_sources_value + S_duid_id = 390, // duid_id + S_string_id = 391, // string_id + S_host_reservation_identifiers = 392, // host_reservation_identifiers + S_393_52 = 393, // $@52 + S_host_reservation_identifiers_list = 394, // host_reservation_identifiers_list + S_host_reservation_identifier = 395, // host_reservation_identifier + S_hw_address_id = 396, // hw_address_id + S_flex_id = 397, // flex_id + S_relay_supplied_options = 398, // relay_supplied_options + S_399_53 = 399, // $@53 + S_dhcp_multi_threading = 400, // dhcp_multi_threading + S_401_54 = 401, // $@54 + S_multi_threading_params = 402, // multi_threading_params + S_multi_threading_param = 403, // multi_threading_param + S_enable_multi_threading = 404, // enable_multi_threading + S_thread_pool_size = 405, // thread_pool_size + S_packet_queue_size = 406, // packet_queue_size + S_hooks_libraries = 407, // hooks_libraries + S_408_55 = 408, // $@55 + S_hooks_libraries_list = 409, // hooks_libraries_list + S_not_empty_hooks_libraries_list = 410, // not_empty_hooks_libraries_list + S_hooks_library = 411, // hooks_library + S_412_56 = 412, // $@56 + S_sub_hooks_library = 413, // sub_hooks_library + S_414_57 = 414, // $@57 + S_hooks_params = 415, // hooks_params + S_hooks_param = 416, // hooks_param + S_library = 417, // library + S_418_58 = 418, // $@58 + S_parameters = 419, // parameters + S_420_59 = 420, // $@59 + S_expired_leases_processing = 421, // expired_leases_processing + S_422_60 = 422, // $@60 + S_expired_leases_params = 423, // expired_leases_params + S_expired_leases_param = 424, // expired_leases_param + S_reclaim_timer_wait_time = 425, // reclaim_timer_wait_time + S_flush_reclaimed_timer_wait_time = 426, // flush_reclaimed_timer_wait_time + S_hold_reclaimed_time = 427, // hold_reclaimed_time + S_max_reclaim_leases = 428, // max_reclaim_leases + S_max_reclaim_time = 429, // max_reclaim_time + S_unwarned_reclaim_cycles = 430, // unwarned_reclaim_cycles + S_subnet6_list = 431, // subnet6_list + S_432_61 = 432, // $@61 + S_subnet6_list_content = 433, // subnet6_list_content + S_not_empty_subnet6_list = 434, // not_empty_subnet6_list + S_subnet6 = 435, // subnet6 + S_436_62 = 436, // $@62 + S_sub_subnet6 = 437, // sub_subnet6 + S_438_63 = 438, // $@63 + S_subnet6_params = 439, // subnet6_params + S_subnet6_param = 440, // subnet6_param + S_subnet = 441, // subnet + S_442_64 = 442, // $@64 + S_interface = 443, // interface + S_444_65 = 444, // $@65 + S_interface_id = 445, // interface_id + S_446_66 = 446, // $@66 + S_client_class = 447, // client_class + S_448_67 = 448, // $@67 + S_require_client_classes = 449, // require_client_classes + S_450_68 = 450, // $@68 + S_reservations_global = 451, // reservations_global + S_reservations_in_subnet = 452, // reservations_in_subnet + S_reservations_out_of_pool = 453, // reservations_out_of_pool + S_reservation_mode = 454, // reservation_mode + S_455_69 = 455, // $@69 + S_hr_mode = 456, // hr_mode + S_id = 457, // id + S_rapid_commit = 458, // rapid_commit + S_shared_networks = 459, // shared_networks + S_460_70 = 460, // $@70 + S_shared_networks_content = 461, // shared_networks_content + S_shared_networks_list = 462, // shared_networks_list + S_shared_network = 463, // shared_network + S_464_71 = 464, // $@71 + S_shared_network_params = 465, // shared_network_params + S_shared_network_param = 466, // shared_network_param + S_option_def_list = 467, // option_def_list + S_468_72 = 468, // $@72 + S_sub_option_def_list = 469, // sub_option_def_list + S_470_73 = 470, // $@73 + S_option_def_list_content = 471, // option_def_list_content + S_not_empty_option_def_list = 472, // not_empty_option_def_list + S_option_def_entry = 473, // option_def_entry + S_474_74 = 474, // $@74 + S_sub_option_def = 475, // sub_option_def + S_476_75 = 476, // $@75 + S_option_def_params = 477, // option_def_params + S_not_empty_option_def_params = 478, // not_empty_option_def_params + S_option_def_param = 479, // option_def_param + S_option_def_name = 480, // option_def_name + S_code = 481, // code + S_option_def_code = 482, // option_def_code + S_option_def_type = 483, // option_def_type + S_484_76 = 484, // $@76 + S_option_def_record_types = 485, // option_def_record_types + S_486_77 = 486, // $@77 + S_space = 487, // space + S_488_78 = 488, // $@78 + S_option_def_space = 489, // option_def_space + S_option_def_encapsulate = 490, // option_def_encapsulate + S_491_79 = 491, // $@79 + S_option_def_array = 492, // option_def_array + S_option_data_list = 493, // option_data_list + S_494_80 = 494, // $@80 + S_option_data_list_content = 495, // option_data_list_content + S_not_empty_option_data_list = 496, // not_empty_option_data_list + S_option_data_entry = 497, // option_data_entry + S_498_81 = 498, // $@81 + S_sub_option_data = 499, // sub_option_data + S_500_82 = 500, // $@82 + S_option_data_params = 501, // option_data_params + S_not_empty_option_data_params = 502, // not_empty_option_data_params + S_option_data_param = 503, // option_data_param + S_option_data_name = 504, // option_data_name + S_option_data_data = 505, // option_data_data + S_506_83 = 506, // $@83 + S_option_data_code = 507, // option_data_code + S_option_data_space = 508, // option_data_space + S_option_data_csv_format = 509, // option_data_csv_format + S_option_data_always_send = 510, // option_data_always_send + S_option_data_never_send = 511, // option_data_never_send + S_pools_list = 512, // pools_list + S_513_84 = 513, // $@84 + S_pools_list_content = 514, // pools_list_content + S_not_empty_pools_list = 515, // not_empty_pools_list + S_pool_list_entry = 516, // pool_list_entry + S_517_85 = 517, // $@85 + S_sub_pool6 = 518, // sub_pool6 + S_519_86 = 519, // $@86 + S_pool_params = 520, // pool_params + S_pool_param = 521, // pool_param + S_pool_entry = 522, // pool_entry + S_523_87 = 523, // $@87 + S_pool_id = 524, // pool_id + S_user_context = 525, // user_context + S_526_88 = 526, // $@88 + S_comment = 527, // comment + S_528_89 = 528, // $@89 + S_pd_pools_list = 529, // pd_pools_list + S_530_90 = 530, // $@90 + S_pd_pools_list_content = 531, // pd_pools_list_content + S_not_empty_pd_pools_list = 532, // not_empty_pd_pools_list + S_pd_pool_entry = 533, // pd_pool_entry + S_534_91 = 534, // $@91 + S_sub_pd_pool = 535, // sub_pd_pool + S_536_92 = 536, // $@92 + S_pd_pool_params = 537, // pd_pool_params + S_pd_pool_param = 538, // pd_pool_param + S_pd_prefix = 539, // pd_prefix + S_540_93 = 540, // $@93 + S_pd_prefix_len = 541, // pd_prefix_len + S_excluded_prefix = 542, // excluded_prefix + S_543_94 = 543, // $@94 + S_excluded_prefix_len = 544, // excluded_prefix_len + S_pd_delegated_len = 545, // pd_delegated_len + S_reservations = 546, // reservations + S_547_95 = 547, // $@95 + S_reservations_list = 548, // reservations_list + S_not_empty_reservations_list = 549, // not_empty_reservations_list + S_reservation = 550, // reservation + S_551_96 = 551, // $@96 + S_sub_reservation = 552, // sub_reservation + S_553_97 = 553, // $@97 + S_reservation_params = 554, // reservation_params + S_not_empty_reservation_params = 555, // not_empty_reservation_params + S_reservation_param = 556, // reservation_param + S_ip_addresses = 557, // ip_addresses + S_558_98 = 558, // $@98 + S_prefixes = 559, // prefixes + S_560_99 = 560, // $@99 + S_duid = 561, // duid + S_562_100 = 562, // $@100 + S_hw_address = 563, // hw_address + S_564_101 = 564, // $@101 + S_hostname = 565, // hostname + S_566_102 = 566, // $@102 + S_flex_id_value = 567, // flex_id_value + S_568_103 = 568, // $@103 + S_reservation_client_classes = 569, // reservation_client_classes + S_570_104 = 570, // $@104 + S_relay = 571, // relay + S_572_105 = 572, // $@105 + S_relay_map = 573, // relay_map + S_ip_address = 574, // ip_address + S_575_106 = 575, // $@106 + S_client_classes = 576, // client_classes + S_577_107 = 577, // $@107 + S_client_classes_list = 578, // client_classes_list + S_client_class_entry = 579, // client_class_entry + S_580_108 = 580, // $@108 + S_client_class_params = 581, // client_class_params + S_not_empty_client_class_params = 582, // not_empty_client_class_params + S_client_class_param = 583, // client_class_param + S_client_class_name = 584, // client_class_name + S_client_class_test = 585, // client_class_test + S_586_109 = 586, // $@109 + S_client_class_template_test = 587, // client_class_template_test + S_588_110 = 588, // $@110 + S_only_if_required = 589, // only_if_required + S_server_id = 590, // server_id + S_591_111 = 591, // $@111 + S_server_id_params = 592, // server_id_params + S_server_id_param = 593, // server_id_param + S_server_id_type = 594, // server_id_type + S_595_112 = 595, // $@112 + S_duid_type = 596, // duid_type + S_htype = 597, // htype + S_identifier = 598, // identifier + S_599_113 = 599, // $@113 + S_time = 600, // time + S_enterprise_id = 601, // enterprise_id + S_dhcp4o6_port = 602, // dhcp4o6_port + S_control_socket = 603, // control_socket + S_604_114 = 604, // $@114 + S_control_socket_params = 605, // control_socket_params + S_control_socket_param = 606, // control_socket_param + S_socket_type = 607, // socket_type + S_608_115 = 608, // $@115 + S_socket_name = 609, // socket_name + S_610_116 = 610, // $@116 + S_dhcp_queue_control = 611, // dhcp_queue_control + S_612_117 = 612, // $@117 + S_queue_control_params = 613, // queue_control_params + S_queue_control_param = 614, // queue_control_param + S_enable_queue = 615, // enable_queue + S_queue_type = 616, // queue_type + S_617_118 = 617, // $@118 + S_capacity = 618, // capacity + S_arbitrary_map_entry = 619, // arbitrary_map_entry + S_620_119 = 620, // $@119 + S_dhcp_ddns = 621, // dhcp_ddns + S_622_120 = 622, // $@120 + S_sub_dhcp_ddns = 623, // sub_dhcp_ddns + S_624_121 = 624, // $@121 + S_dhcp_ddns_params = 625, // dhcp_ddns_params + S_dhcp_ddns_param = 626, // dhcp_ddns_param + S_enable_updates = 627, // enable_updates + S_dep_qualifying_suffix = 628, // dep_qualifying_suffix + S_629_122 = 629, // $@122 + S_server_ip = 630, // server_ip + S_631_123 = 631, // $@123 + S_server_port = 632, // server_port + S_sender_ip = 633, // sender_ip + S_634_124 = 634, // $@124 + S_sender_port = 635, // sender_port + S_max_queue_size = 636, // max_queue_size + S_ncr_protocol = 637, // ncr_protocol + S_638_125 = 638, // $@125 + S_ncr_protocol_value = 639, // ncr_protocol_value + S_ncr_format = 640, // ncr_format + S_641_126 = 641, // $@126 + S_dep_override_no_update = 642, // dep_override_no_update + S_dep_override_client_update = 643, // dep_override_client_update + S_dep_replace_client_name = 644, // dep_replace_client_name + S_645_127 = 645, // $@127 + S_dep_generated_prefix = 646, // dep_generated_prefix + S_647_128 = 647, // $@128 + S_dep_hostname_char_set = 648, // dep_hostname_char_set + S_649_129 = 649, // $@129 + S_dep_hostname_char_replacement = 650, // dep_hostname_char_replacement + S_651_130 = 651, // $@130 + S_config_control = 652, // config_control + S_653_131 = 653, // $@131 + S_sub_config_control = 654, // sub_config_control + S_655_132 = 655, // $@132 + S_config_control_params = 656, // config_control_params + S_config_control_param = 657, // config_control_param + S_config_databases = 658, // config_databases + S_659_133 = 659, // $@133 + S_config_fetch_wait_time = 660, // config_fetch_wait_time + S_loggers = 661, // loggers + S_662_134 = 662, // $@134 + S_loggers_entries = 663, // loggers_entries + S_logger_entry = 664, // logger_entry + S_665_135 = 665, // $@135 + S_logger_params = 666, // logger_params + S_logger_param = 667, // logger_param + S_debuglevel = 668, // debuglevel + S_severity = 669, // severity + S_670_136 = 670, // $@136 + S_output_options_list = 671, // output_options_list + S_672_137 = 672, // $@137 + S_output_options_list_content = 673, // output_options_list_content + S_output_entry = 674, // output_entry + S_675_138 = 675, // $@138 + S_output_params_list = 676, // output_params_list + S_output_params = 677, // output_params + S_output = 678, // output + S_679_139 = 679, // $@139 + S_flush = 680, // flush + S_maxsize = 681, // maxsize + S_maxver = 682, // maxver + S_pattern = 683, // pattern + S_684_140 = 684, // $@140 + S_compatibility = 685, // compatibility + S_686_141 = 686, // $@141 + S_compatibility_params = 687, // compatibility_params + S_compatibility_param = 688, // compatibility_param + S_lenient_option_parsing = 689 // lenient_option_parsing }; }; @@ -2512,6 +2515,21 @@ switch (yykind) return symbol_type (token::TOKEN_SERVE_RETRY_CONTINUE, l); } #endif +#if 201103L <= YY_CPLUSPLUS + static + symbol_type + make_RETRY_ON_STARTUP (location_type l) + { + return symbol_type (token::TOKEN_RETRY_ON_STARTUP, std::move (l)); + } +#else + static + symbol_type + make_RETRY_ON_STARTUP (const location_type& l) + { + return symbol_type (token::TOKEN_RETRY_ON_STARTUP, l); + } +#endif #if 201103L <= YY_CPLUSPLUS static symbol_type @@ -5602,8 +5620,8 @@ switch (yykind) /// Constants. enum { - yylast_ = 1395, ///< Last index in yytable_. - yynnts_ = 459, ///< Number of nonterminal symbols. + yylast_ = 1399, ///< Last index in yytable_. + yynnts_ = 460, ///< Number of nonterminal symbols. yyfinal_ = 30 ///< Termination state number. }; @@ -5671,10 +5689,10 @@ switch (yykind) 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 228 + 225, 226, 227, 228, 229 }; // Last valid token kind. - const int code_max = 483; + const int code_max = 484; if (t <= 0) return symbol_kind::S_YYEOF; @@ -5847,7 +5865,7 @@ switch (yykind) #line 14 "dhcp6_parser.yy" } } // isc::dhcp -#line 5851 "dhcp6_parser.h" +#line 5869 "dhcp6_parser.h" diff --git a/src/bin/dhcp6/dhcp6_parser.yy b/src/bin/dhcp6/dhcp6_parser.yy index d1b0bb5b6b..8b5743e9c4 100644 --- a/src/bin/dhcp6/dhcp6_parser.yy +++ b/src/bin/dhcp6/dhcp6_parser.yy @@ -92,6 +92,7 @@ using namespace std; STOP_RETRY_EXIT "stop-retry-exit" SERVE_RETRY_EXIT "serve-retry-exit" SERVE_RETRY_CONTINUE "serve-retry-continue" + RETRY_ON_STARTUP "retry-on-startup" MAX_ROW_ERRORS "max-row-errors" TRUST_ANCHOR "trust-anchor" CERT_FILE "cert-file" @@ -1024,6 +1025,7 @@ database_map_param: database_type | max_reconnect_tries | reconnect_wait_time | on_fail + | retry_on_startup | max_row_errors | trust_anchor | cert_file @@ -1149,6 +1151,12 @@ on_fail_mode: STOP_RETRY_EXIT { $$ = ElementPtr(new StringElement("stop-retry-ex | SERVE_RETRY_CONTINUE { $$ = ElementPtr(new StringElement("serve-retry-continue", ctx.loc2pos(@1))); } ; +retry_on_startup: RETRY_ON_STARTUP COLON BOOLEAN { + ctx.unique("retry-on-startup", ctx.loc2pos(@1)); + ElementPtr n(new BoolElement($3, ctx.loc2pos(@3))); + ctx.stack_.back()->set("retry-on-startup", n); +}; + max_row_errors: MAX_ROW_ERRORS COLON INTEGER { ctx.unique("max-row-errors", ctx.loc2pos(@1)); ElementPtr n(new IntElement($3, ctx.loc2pos(@3))); diff --git a/src/bin/dhcp6/tests/dhcp6_srv_unittest.cc b/src/bin/dhcp6/tests/dhcp6_srv_unittest.cc index d3d587a868..fd3168d8ab 100644 --- a/src/bin/dhcp6/tests/dhcp6_srv_unittest.cc +++ b/src/bin/dhcp6/tests/dhcp6_srv_unittest.cc @@ -60,6 +60,7 @@ using namespace isc::asiolink; using namespace isc::cb; using namespace isc::config; using namespace isc::data; +using namespace isc::db; using namespace isc::dhcp; using namespace isc::dhcp::test; using namespace isc::util; @@ -248,11 +249,8 @@ Dhcpv6SrvTest::loadConfigFile(const string& path) { // CommandMgr uses IO service to run asynchronous socket operations. CommandMgr::instance().setIOService(srv.getIOService()); - // LeaseMgr uses IO service to run asynchronous timers. - LeaseMgr::setIOService(srv.getIOService()); - - // HostMgr uses IO service to run asynchronous timers. - HostMgr::setIOService(srv.getIOService()); + // DatabaseConnection uses IO service to run asynchronous timers. + DatabaseConnection::setIOService(srv.getIOService()); Parser6Context parser; ConstElementPtr json; @@ -286,11 +284,8 @@ Dhcpv6SrvTest::loadConfigFile(const string& path) { // Reset CommandMgr IO service. CommandMgr::instance().setIOService(IOServicePtr()); - // Reset LeaseMgr IO service. - LeaseMgr::setIOService(IOServicePtr()); - - // Reset HostMgr IO service. - HostMgr::setIOService(IOServicePtr()); + // Reset DatabaseConnection IO service. + DatabaseConnection::setIOService(IOServicePtr()); } /// @brief Class which handles initialization of database diff --git a/src/bin/dhcp6/tests/dhcp6_test_utils.h b/src/bin/dhcp6/tests/dhcp6_test_utils.h index 202bd8e2f4..4d156bf583 100644 --- a/src/bin/dhcp6/tests/dhcp6_test_utils.h +++ b/src/bin/dhcp6/tests/dhcp6_test_utils.h @@ -135,7 +135,7 @@ public: // Open the "memfile" database for leases std::string memfile = "type=memfile universe=6 persist=false"; isc::dhcp::LeaseMgrFactory::create(memfile); - LeaseMgr::setIOService(getIOService()); + db::DatabaseConnection::setIOService(getIOService()); } /// @brief fakes packet reception diff --git a/src/hooks/dhcp/mysql_cb/mysql_cb_dhcp4.cc b/src/hooks/dhcp/mysql_cb/mysql_cb_dhcp4.cc index 76a7fe48ea..eaaa42ca53 100644 --- a/src/hooks/dhcp/mysql_cb/mysql_cb_dhcp4.cc +++ b/src/hooks/dhcp/mysql_cb/mysql_cb_dhcp4.cc @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -3687,7 +3688,8 @@ TaggedStatementArray tagged_statements = { { } // end anonymous namespace MySqlConfigBackendDHCPv4Impl::MySqlConfigBackendDHCPv4Impl(const DatabaseConnection::ParameterMap& parameters) - : MySqlConfigBackendImpl(parameters, &MySqlConfigBackendDHCPv4Impl::dbReconnect) { + : MySqlConfigBackendImpl(std::string(cStringDhcpSpace()), parameters, + &MySqlConfigBackendDHCPv4Impl::dbReconnect) { // Prepare query statements. Those are will be only used to retrieve // information from the database, so they can be used even if the // database is read only for the current user. @@ -3696,14 +3698,6 @@ MySqlConfigBackendDHCPv4Impl::MySqlConfigBackendDHCPv4Impl(const DatabaseConnect // @todo As part of enabling read-only CB access, statements need to // be limited: // tagged_statements.begin() + WRITE_STMTS_BEGIN); - - // Create unique timer name per instance. - timer_name_ = "MySqlConfigBackend4["; - timer_name_ += boost::lexical_cast(reinterpret_cast(this)); - timer_name_ += "]DbReconnectTimer"; - - // Create ReconnectCtl for this connection. - conn_.makeReconnectCtl(timer_name_); } MySqlConfigBackendDHCPv4Impl::~MySqlConfigBackendDHCPv4Impl() { diff --git a/src/hooks/dhcp/mysql_cb/mysql_cb_dhcp6.cc b/src/hooks/dhcp/mysql_cb/mysql_cb_dhcp6.cc index dfe19e10d2..dd278f674f 100644 --- a/src/hooks/dhcp/mysql_cb/mysql_cb_dhcp6.cc +++ b/src/hooks/dhcp/mysql_cb/mysql_cb_dhcp6.cc @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -4143,7 +4144,8 @@ TaggedStatementArray tagged_statements = { { } // end anonymous namespace MySqlConfigBackendDHCPv6Impl::MySqlConfigBackendDHCPv6Impl(const DatabaseConnection::ParameterMap& parameters) - : MySqlConfigBackendImpl(parameters, &MySqlConfigBackendDHCPv6Impl::dbReconnect) { + : MySqlConfigBackendImpl(std::string(cStringDhcpSpace()), parameters, + &MySqlConfigBackendDHCPv6Impl::dbReconnect) { // Prepare query statements. Those are will be only used to retrieve // information from the database, so they can be used even if the // database is read only for the current user. @@ -4152,14 +4154,6 @@ MySqlConfigBackendDHCPv6Impl::MySqlConfigBackendDHCPv6Impl(const DatabaseConnect // @todo As part of enabling read-only CB access, statements need to // be limited: // tagged_statements.begin() + WRITE_STMTS_BEGIN); - - // Create unique timer name per instance. - timer_name_ = "MySqlConfigBackend6["; - timer_name_ += boost::lexical_cast(reinterpret_cast(this)); - timer_name_ += "]DbReconnectTimer"; - - // Create ReconnectCtl for this connection. - conn_.makeReconnectCtl(timer_name_); } MySqlConfigBackendDHCPv6Impl::~MySqlConfigBackendDHCPv6Impl() { diff --git a/src/hooks/dhcp/mysql_cb/mysql_cb_impl.cc b/src/hooks/dhcp/mysql_cb/mysql_cb_impl.cc index 4b12dab6b6..4321d284d9 100644 --- a/src/hooks/dhcp/mysql_cb/mysql_cb_impl.cc +++ b/src/hooks/dhcp/mysql_cb/mysql_cb_impl.cc @@ -5,11 +5,13 @@ // file, You can obtain one at http://mozilla.org/MPL/2.0/. #include + #include #include #include #include #include +#include #include #include @@ -48,17 +50,43 @@ ScopedAuditRevision::~ScopedAuditRevision() { } MySqlConfigBackendImpl:: -MySqlConfigBackendImpl(const DatabaseConnection::ParameterMap& parameters, +MySqlConfigBackendImpl(const std::string& space, + const DatabaseConnection::ParameterMap& parameters, const DbCallback db_reconnect_callback) : conn_(parameters, - IOServiceAccessorPtr(new IOServiceAccessor(MySqlConfigBackendImpl::getIOService)), + IOServiceAccessorPtr(new IOServiceAccessor(&MySqlConfigBackendImpl::getIOService)), db_reconnect_callback), timer_name_(""), audit_revision_ref_count_(0), parameters_(parameters) { + + // Create unique timer name per instance. + timer_name_ = "MySqlConfigBackend"; + timer_name_ += space; + timer_name_ += "["; + timer_name_ += boost::lexical_cast(reinterpret_cast(this)); + timer_name_ += "]DbReconnectTimer"; + + // Create ReconnectCtl for this connection. + conn_.makeReconnectCtl(timer_name_); + // Test schema version first. std::pair code_version(MYSQL_SCHEMA_VERSION_MAJOR, MYSQL_SCHEMA_VERSION_MINOR); + + std::string timer_name = ""; + bool retry = false; + if (parameters.count("retry-on-startup")) { + if (parameters.at("retry-on-startup") == "true") { + retry = true; + } + } + if (retry) { + timer_name = timer_name_; + } + + IOServiceAccessorPtr ac(new IOServiceAccessor(&DatabaseConnection::getIOService)); + std::pair db_version = - MySqlConnection::getVersion(parameters); + MySqlConnection::getVersion(parameters, ac, db_reconnect_callback, timer_name); if (code_version != db_version) { isc_throw(DbOpenError, "MySQL schema version mismatch: need version: " << code_version.first << "." << code_version.second @@ -829,7 +857,6 @@ MySqlConfigBackendImpl::processOptionRow(const Option::Universe& universe, code = (*(first_binding + 1))->getInteger(); } - // Get formatted value if available. std::string formatted_value = (*(first_binding + 3))->getStringOrDefault(""); diff --git a/src/hooks/dhcp/mysql_cb/mysql_cb_impl.h b/src/hooks/dhcp/mysql_cb/mysql_cb_impl.h index 92447a8ee2..78eb87bd64 100644 --- a/src/hooks/dhcp/mysql_cb/mysql_cb_impl.h +++ b/src/hooks/dhcp/mysql_cb/mysql_cb_impl.h @@ -106,10 +106,12 @@ public: /// @brief Constructor. /// + /// @param space The DHCP space (v4 or v6). /// @param parameters A data structure relating keywords and values /// concerned with the database. /// @param db_reconnect_callback The connection recovery callback. - explicit MySqlConfigBackendImpl(const db::DatabaseConnection::ParameterMap& parameters, + explicit MySqlConfigBackendImpl(const std::string& space, + const db::DatabaseConnection::ParameterMap& parameters, const db::DbCallback db_reconnect_callback); /// @brief Destructor. diff --git a/src/hooks/dhcp/mysql_cb/tests/mysql_cb_dhcp4_unittest.cc b/src/hooks/dhcp/mysql_cb/tests/mysql_cb_dhcp4_unittest.cc index 63d1f10599..eadb257ff5 100644 --- a/src/hooks/dhcp/mysql_cb/tests/mysql_cb_dhcp4_unittest.cc +++ b/src/hooks/dhcp/mysql_cb/tests/mysql_cb_dhcp4_unittest.cc @@ -446,7 +446,7 @@ public: isc::dhcp::MySqlConfigBackendImpl::setIOService(io_service); } - /// @brief Attempts to add a backend instance to the CB manager. + /// @brief Attempts to add a backend instance to the CB manager. /// /// @param access Connection access string containing the database /// connection parameters. @@ -455,13 +455,53 @@ public: } /// @brief Fetches a collection of all the servers currently in - /// the CB database. This function is used to check the operability + /// the CB database. This function is used to check the operability /// of the CB backend. ServerCollection getAllServers() { return (ConfigBackendDHCPv4Mgr::instance().getPool()->getAllServers4(BackendSelector())); } }; +TEST_F(MySqlConfigBackendDHCPv4DbLostCallbackTest, testRetryOpenDbLostAndRecoveredCallback) { + MultiThreadingTest mt(false); + testRetryOpenDbLostAndRecoveredCallback(); +} + +TEST_F(MySqlConfigBackendDHCPv4DbLostCallbackTest, testRetryOpenDbLostAndRecoveredCallbackMultiThreading) { + MultiThreadingTest mt(true); + testRetryOpenDbLostAndRecoveredCallback(); +} + +TEST_F(MySqlConfigBackendDHCPv4DbLostCallbackTest, testRetryOpenDbLostAndFailedCallback) { + MultiThreadingTest mt(false); + testRetryOpenDbLostAndFailedCallback(); +} + +TEST_F(MySqlConfigBackendDHCPv4DbLostCallbackTest, testRetryOpenDbLostAndFailedCallbackMultiThreading) { + MultiThreadingTest mt(true); + testRetryOpenDbLostAndFailedCallback(); +} + +TEST_F(MySqlConfigBackendDHCPv4DbLostCallbackTest, testRetryOpenDbLostAndRecoveredAfterTimeoutCallback) { + MultiThreadingTest mt(false); + testRetryOpenDbLostAndRecoveredAfterTimeoutCallback(); +} + +TEST_F(MySqlConfigBackendDHCPv4DbLostCallbackTest, testRetryOpenDbLostAndRecoveredAfterTimeoutCallbackMultiThreading) { + MultiThreadingTest mt(true); + testRetryOpenDbLostAndRecoveredAfterTimeoutCallback(); +} + +TEST_F(MySqlConfigBackendDHCPv4DbLostCallbackTest, testRetryOpenDbLostAndFailedAfterTimeoutCallback) { + MultiThreadingTest mt(false); + testRetryOpenDbLostAndFailedAfterTimeoutCallback(); +} + +TEST_F(MySqlConfigBackendDHCPv4DbLostCallbackTest, testRetryOpenDbLostAndFailedAfterTimeoutCallbackMultiThreading) { + MultiThreadingTest mt(true); + testRetryOpenDbLostAndFailedAfterTimeoutCallback(); +} + TEST_F(MySqlConfigBackendDHCPv4DbLostCallbackTest, testNoCallbackOnOpenFailure) { MultiThreadingTest mt(false); testNoCallbackOnOpenFailure(); diff --git a/src/hooks/dhcp/mysql_cb/tests/mysql_cb_dhcp6_unittest.cc b/src/hooks/dhcp/mysql_cb/tests/mysql_cb_dhcp6_unittest.cc index 73d889194c..adbe576114 100644 --- a/src/hooks/dhcp/mysql_cb/tests/mysql_cb_dhcp6_unittest.cc +++ b/src/hooks/dhcp/mysql_cb/tests/mysql_cb_dhcp6_unittest.cc @@ -450,7 +450,7 @@ public: isc::dhcp::MySqlConfigBackendImpl::setIOService(io_service); } - /// @brief Attempts to add a backend instance to the CB manager. + /// @brief Attempts to add a backend instance to the CB manager. /// /// @param access Connection access string containing the database /// connection parameters. @@ -459,13 +459,53 @@ public: } /// @brief Fetches a collection of all the servers currently in - /// the CB database. This function is used to check the operability + /// the CB database. This function is used to check the operability /// of the CB backend. ServerCollection getAllServers() { return (ConfigBackendDHCPv6Mgr::instance().getPool()->getAllServers6(BackendSelector())); } }; +TEST_F(MySqlConfigBackendDHCPv6DbLostCallbackTest, testRetryOpenDbLostAndRecoveredCallback) { + MultiThreadingTest mt(false); + testRetryOpenDbLostAndRecoveredCallback(); +} + +TEST_F(MySqlConfigBackendDHCPv6DbLostCallbackTest, testRetryOpenDbLostAndRecoveredCallbackMultiThreading) { + MultiThreadingTest mt(true); + testRetryOpenDbLostAndRecoveredCallback(); +} + +TEST_F(MySqlConfigBackendDHCPv6DbLostCallbackTest, testRetryOpenDbLostAndFailedCallback) { + MultiThreadingTest mt(false); + testRetryOpenDbLostAndFailedCallback(); +} + +TEST_F(MySqlConfigBackendDHCPv6DbLostCallbackTest, testRetryOpenDbLostAndFailedCallbackMultiThreading) { + MultiThreadingTest mt(true); + testRetryOpenDbLostAndFailedCallback(); +} + +TEST_F(MySqlConfigBackendDHCPv6DbLostCallbackTest, testRetryOpenDbLostAndRecoveredAfterTimeoutCallback) { + MultiThreadingTest mt(false); + testRetryOpenDbLostAndRecoveredAfterTimeoutCallback(); +} + +TEST_F(MySqlConfigBackendDHCPv6DbLostCallbackTest, testRetryOpenDbLostAndRecoveredAfterTimeoutCallbackMultiThreading) { + MultiThreadingTest mt(true); + testRetryOpenDbLostAndRecoveredAfterTimeoutCallback(); +} + +TEST_F(MySqlConfigBackendDHCPv6DbLostCallbackTest, testRetryOpenDbLostAndFailedAfterTimeoutCallback) { + MultiThreadingTest mt(false); + testRetryOpenDbLostAndFailedAfterTimeoutCallback(); +} + +TEST_F(MySqlConfigBackendDHCPv6DbLostCallbackTest, testRetryOpenDbLostAndFailedAfterTimeoutCallbackMultiThreading) { + MultiThreadingTest mt(true); + testRetryOpenDbLostAndFailedAfterTimeoutCallback(); +} + TEST_F(MySqlConfigBackendDHCPv6DbLostCallbackTest, testNoCallbackOnOpenFailure) { MultiThreadingTest mt(false); testNoCallbackOnOpenFailure(); diff --git a/src/hooks/dhcp/pgsql_cb/pgsql_cb_dhcp4.cc b/src/hooks/dhcp/pgsql_cb/pgsql_cb_dhcp4.cc index 9dcac75bda..63972e0670 100644 --- a/src/hooks/dhcp/pgsql_cb/pgsql_cb_dhcp4.cc +++ b/src/hooks/dhcp/pgsql_cb/pgsql_cb_dhcp4.cc @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -4555,7 +4556,8 @@ TaggedStatementArray tagged_statements = { { } // end anonymous namespace PgSqlConfigBackendDHCPv4Impl::PgSqlConfigBackendDHCPv4Impl(const DatabaseConnection::ParameterMap& parameters) - : PgSqlConfigBackendImpl(parameters, &PgSqlConfigBackendDHCPv4Impl::dbReconnect, + : PgSqlConfigBackendImpl(std::string(cStringDhcpSpace()), parameters, + &PgSqlConfigBackendDHCPv4Impl::dbReconnect, PgSqlConfigBackendDHCPv4Impl::GET_LAST_INSERT_ID4) { // Prepare query statements. Those are will be only used to retrieve // information from the database, so they can be used even if the @@ -4565,14 +4567,6 @@ PgSqlConfigBackendDHCPv4Impl::PgSqlConfigBackendDHCPv4Impl(const DatabaseConnect // @todo As part of enabling read-only CB access, statements need to // be limited: // tagged_statements.begin() + WRITE_STMTS_BEGIN); - - // Create unique timer name per instance. - timer_name_ = "PgSqlConfigBackend4["; - timer_name_ += boost::lexical_cast(reinterpret_cast(this)); - timer_name_ += "]DbReconnectTimer"; - - // Create ReconnectCtl for this connection. - conn_.makeReconnectCtl(timer_name_); } PgSqlConfigBackendDHCPv4Impl::~PgSqlConfigBackendDHCPv4Impl() { diff --git a/src/hooks/dhcp/pgsql_cb/pgsql_cb_dhcp6.cc b/src/hooks/dhcp/pgsql_cb/pgsql_cb_dhcp6.cc index 20d5617b05..e8d84da59b 100644 --- a/src/hooks/dhcp/pgsql_cb/pgsql_cb_dhcp6.cc +++ b/src/hooks/dhcp/pgsql_cb/pgsql_cb_dhcp6.cc @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -5016,7 +5017,8 @@ TaggedStatementArray tagged_statements = { { } // end anonymous namespace PgSqlConfigBackendDHCPv6Impl::PgSqlConfigBackendDHCPv6Impl(const DatabaseConnection::ParameterMap& parameters) - : PgSqlConfigBackendImpl(parameters, &PgSqlConfigBackendDHCPv6Impl::dbReconnect, + : PgSqlConfigBackendImpl(std::string(cStringDhcpSpace()), parameters, + &PgSqlConfigBackendDHCPv6Impl::dbReconnect, PgSqlConfigBackendDHCPv6Impl::GET_LAST_INSERT_ID6) { // Prepare query statements. Those are will be only used to retrieve // information from the database, so they can be used even if the @@ -5026,14 +5028,6 @@ PgSqlConfigBackendDHCPv6Impl::PgSqlConfigBackendDHCPv6Impl(const DatabaseConnect // @todo As part of enabling read-only CB access, statements need to // be limited: // tagged_statements.begin() + WRITE_STMTS_BEGIN); - - // Create unique timer name per instance. - timer_name_ = "PgSqlConfigBackend6["; - timer_name_ += boost::lexical_cast(reinterpret_cast(this)); - timer_name_ += "]DbReconnectTimer"; - - // Create ReconnectCtl for this connection. - conn_.makeReconnectCtl(timer_name_); } PgSqlConfigBackendDHCPv6Impl::~PgSqlConfigBackendDHCPv6Impl() { diff --git a/src/hooks/dhcp/pgsql_cb/pgsql_cb_impl.cc b/src/hooks/dhcp/pgsql_cb/pgsql_cb_impl.cc index c8addbf907..a8f029210e 100644 --- a/src/hooks/dhcp/pgsql_cb/pgsql_cb_impl.cc +++ b/src/hooks/dhcp/pgsql_cb/pgsql_cb_impl.cc @@ -8,8 +8,9 @@ #include #include -#include #include +#include +#include #include #include @@ -70,15 +71,26 @@ PgSqlConfigBackendImpl::ScopedAuditRevision::~ScopedAuditRevision() { impl_->clearAuditRevision(); } -PgSqlConfigBackendImpl::PgSqlConfigBackendImpl(const DatabaseConnection::ParameterMap& parameters, +PgSqlConfigBackendImpl::PgSqlConfigBackendImpl(const std::string& space, + const DatabaseConnection::ParameterMap& parameters, const DbCallback db_reconnect_callback, size_t last_insert_id_index) : conn_(parameters, - IOServiceAccessorPtr(new IOServiceAccessor(PgSqlConfigBackendImpl::getIOService)), + IOServiceAccessorPtr(new IOServiceAccessor(&PgSqlConfigBackendImpl::getIOService)), db_reconnect_callback), timer_name_(""), audit_revision_ref_count_(0), parameters_(parameters), last_insert_id_index_(last_insert_id_index) { + // Create unique timer name per instance. + timer_name_ = "PgSqlConfigBackend"; + timer_name_ += space; + timer_name_ += "["; + timer_name_ += boost::lexical_cast(reinterpret_cast(this)); + timer_name_ += "]DbReconnectTimer"; + + // Create ReconnectCtl for this connection. + conn_.makeReconnectCtl(timer_name_); + // Check TLS support. size_t tls(0); tls += parameters.count("trust-anchor"); @@ -102,8 +114,24 @@ PgSqlConfigBackendImpl::PgSqlConfigBackendImpl(const DatabaseConnection::Paramet #endif // Test schema version first. - std::pair code_version(PGSQL_SCHEMA_VERSION_MAJOR, PGSQL_SCHEMA_VERSION_MINOR); - std::pair db_version = PgSqlConnection::getVersion(parameters); + std::pair code_version(PGSQL_SCHEMA_VERSION_MAJOR, + PGSQL_SCHEMA_VERSION_MINOR); + + std::string timer_name = ""; + bool retry = false; + if (parameters.count("retry-on-startup")) { + if (parameters.at("retry-on-startup") == "true") { + retry = true; + } + } + if (retry) { + timer_name = timer_name_; + } + + IOServiceAccessorPtr ac(new IOServiceAccessor(&DatabaseConnection::getIOService)); + + std::pair db_version = + PgSqlConnection::getVersion(parameters, ac, db_reconnect_callback, timer_name); if (code_version != db_version) { isc_throw(DbOpenError, "PostgreSQL schema version mismatch: need version: " << code_version.first << "." << code_version.second diff --git a/src/hooks/dhcp/pgsql_cb/pgsql_cb_impl.h b/src/hooks/dhcp/pgsql_cb/pgsql_cb_impl.h index 68df199791..aaa76b6056 100644 --- a/src/hooks/dhcp/pgsql_cb/pgsql_cb_impl.h +++ b/src/hooks/dhcp/pgsql_cb/pgsql_cb_impl.h @@ -106,12 +106,14 @@ public: /// @brief Constructor. /// + /// @param space The DHCP space (v4 or v6). /// @param parameters A data structure relating keywords and values /// concerned with the database. /// @param db_reconnect_callback The connection recovery callback. /// @param last_insert_id_index statement index of the SQL statement to /// use when fetching the last insert id for a given table. - explicit PgSqlConfigBackendImpl(const db::DatabaseConnection::ParameterMap& parameters, + explicit PgSqlConfigBackendImpl(const std::string& space, + const db::DatabaseConnection::ParameterMap& parameters, const db::DbCallback db_reconnect_callback, const size_t last_insert_id_index); diff --git a/src/hooks/dhcp/pgsql_cb/tests/pgsql_cb_dhcp4_unittest.cc b/src/hooks/dhcp/pgsql_cb/tests/pgsql_cb_dhcp4_unittest.cc index fdd11e853a..f6faa1bbd1 100644 --- a/src/hooks/dhcp/pgsql_cb/tests/pgsql_cb_dhcp4_unittest.cc +++ b/src/hooks/dhcp/pgsql_cb/tests/pgsql_cb_dhcp4_unittest.cc @@ -444,7 +444,7 @@ public: isc::dhcp::PgSqlConfigBackendImpl::setIOService(io_service); } - /// @brief Attempts to add a backend instance to the CB manager. + /// @brief Attempts to add a backend instance to the CB manager. /// /// @param access Connection access string containing the database /// connection parameters. @@ -453,13 +453,53 @@ public: } /// @brief Fetches a collection of all the servers currently in - /// the CB database. This function is used to check the operability + /// the CB database. This function is used to check the operability /// of the CB backend. ServerCollection getAllServers() { return (ConfigBackendDHCPv4Mgr::instance().getPool()->getAllServers4(BackendSelector())); } }; +TEST_F(PgSqlConfigBackendDHCPv4DbLostCallbackTest, testRetryOpenDbLostAndRecoveredCallback) { + MultiThreadingTest mt(false); + testRetryOpenDbLostAndRecoveredCallback(); +} + +TEST_F(PgSqlConfigBackendDHCPv4DbLostCallbackTest, testRetryOpenDbLostAndRecoveredCallbackMultiThreading) { + MultiThreadingTest mt(true); + testRetryOpenDbLostAndRecoveredCallback(); +} + +TEST_F(PgSqlConfigBackendDHCPv4DbLostCallbackTest, testRetryOpenDbLostAndFailedCallback) { + MultiThreadingTest mt(false); + testRetryOpenDbLostAndFailedCallback(); +} + +TEST_F(PgSqlConfigBackendDHCPv4DbLostCallbackTest, testRetryOpenDbLostAndFailedCallbackMultiThreading) { + MultiThreadingTest mt(true); + testRetryOpenDbLostAndFailedCallback(); +} + +TEST_F(PgSqlConfigBackendDHCPv4DbLostCallbackTest, testRetryOpenDbLostAndRecoveredAfterTimeoutCallback) { + MultiThreadingTest mt(false); + testRetryOpenDbLostAndRecoveredAfterTimeoutCallback(); +} + +TEST_F(PgSqlConfigBackendDHCPv4DbLostCallbackTest, testRetryOpenDbLostAndRecoveredAfterTimeoutCallbackMultiThreading) { + MultiThreadingTest mt(true); + testRetryOpenDbLostAndRecoveredAfterTimeoutCallback(); +} + +TEST_F(PgSqlConfigBackendDHCPv4DbLostCallbackTest, testRetryOpenDbLostAndFailedAfterTimeoutCallback) { + MultiThreadingTest mt(false); + testRetryOpenDbLostAndFailedAfterTimeoutCallback(); +} + +TEST_F(PgSqlConfigBackendDHCPv4DbLostCallbackTest, testRetryOpenDbLostAndFailedAfterTimeoutCallbackMultiThreading) { + MultiThreadingTest mt(true); + testRetryOpenDbLostAndFailedAfterTimeoutCallback(); +} + TEST_F(PgSqlConfigBackendDHCPv4DbLostCallbackTest, testNoCallbackOnOpenFailure) { MultiThreadingTest mt(false); testNoCallbackOnOpenFailure(); diff --git a/src/hooks/dhcp/pgsql_cb/tests/pgsql_cb_dhcp6_unittest.cc b/src/hooks/dhcp/pgsql_cb/tests/pgsql_cb_dhcp6_unittest.cc index b6bdaccd4b..44e2e6671b 100644 --- a/src/hooks/dhcp/pgsql_cb/tests/pgsql_cb_dhcp6_unittest.cc +++ b/src/hooks/dhcp/pgsql_cb/tests/pgsql_cb_dhcp6_unittest.cc @@ -448,7 +448,7 @@ public: isc::dhcp::PgSqlConfigBackendImpl::setIOService(io_service); } - /// @brief Attempts to add a backend instance to the CB manager. + /// @brief Attempts to add a backend instance to the CB manager. /// /// @param access Connection access string containing the database /// connection parameters. @@ -457,13 +457,53 @@ public: } /// @brief Fetches a collection of all the servers currently in - /// the CB database. This function is used to check the operability + /// the CB database. This function is used to check the operability /// of the CB backend. ServerCollection getAllServers() { return (ConfigBackendDHCPv6Mgr::instance().getPool()->getAllServers6(BackendSelector())); } }; +TEST_F(PgSqlConfigBackendDHCPv6DbLostCallbackTest, testRetryOpenDbLostAndRecoveredCallback) { + MultiThreadingTest mt(false); + testRetryOpenDbLostAndRecoveredCallback(); +} + +TEST_F(PgSqlConfigBackendDHCPv6DbLostCallbackTest, testRetryOpenDbLostAndRecoveredCallbackMultiThreading) { + MultiThreadingTest mt(true); + testRetryOpenDbLostAndRecoveredCallback(); +} + +TEST_F(PgSqlConfigBackendDHCPv6DbLostCallbackTest, testRetryOpenDbLostAndFailedCallback) { + MultiThreadingTest mt(false); + testRetryOpenDbLostAndFailedCallback(); +} + +TEST_F(PgSqlConfigBackendDHCPv6DbLostCallbackTest, testRetryOpenDbLostAndFailedCallbackMultiThreading) { + MultiThreadingTest mt(true); + testRetryOpenDbLostAndFailedCallback(); +} + +TEST_F(PgSqlConfigBackendDHCPv6DbLostCallbackTest, testRetryOpenDbLostAndRecoveredAfterTimeoutCallback) { + MultiThreadingTest mt(false); + testRetryOpenDbLostAndRecoveredAfterTimeoutCallback(); +} + +TEST_F(PgSqlConfigBackendDHCPv6DbLostCallbackTest, testRetryOpenDbLostAndRecoveredAfterTimeoutCallbackMultiThreading) { + MultiThreadingTest mt(true); + testRetryOpenDbLostAndRecoveredAfterTimeoutCallback(); +} + +TEST_F(PgSqlConfigBackendDHCPv6DbLostCallbackTest, testRetryOpenDbLostAndFailedAfterTimeoutCallback) { + MultiThreadingTest mt(false); + testRetryOpenDbLostAndFailedAfterTimeoutCallback(); +} + +TEST_F(PgSqlConfigBackendDHCPv6DbLostCallbackTest, testRetryOpenDbLostAndFailedAfterTimeoutCallbackMultiThreading) { + MultiThreadingTest mt(true); + testRetryOpenDbLostAndFailedAfterTimeoutCallback(); +} + TEST_F(PgSqlConfigBackendDHCPv6DbLostCallbackTest, testNoCallbackOnOpenFailure) { MultiThreadingTest mt(false); testNoCallbackOnOpenFailure(); diff --git a/src/hooks/dhcp/pgsql_cb/tests/pgsql_cb_impl_unittest.cc b/src/hooks/dhcp/pgsql_cb/tests/pgsql_cb_impl_unittest.cc index 025eb33f80..6e1d12e204 100644 --- a/src/hooks/dhcp/pgsql_cb/tests/pgsql_cb_impl_unittest.cc +++ b/src/hooks/dhcp/pgsql_cb/tests/pgsql_cb_impl_unittest.cc @@ -35,7 +35,7 @@ public: params["name"] = "keatest"; params["password"] = "keatest"; params["user"] = "keatest"; - ASSERT_NO_THROW_LOG(cbptr_.reset(new PgSqlConfigBackendImpl(params, 0, 0))); + ASSERT_NO_THROW_LOG(cbptr_.reset(new PgSqlConfigBackendImpl("", params, 0, 0))); } /// @brief Cleans up after each test. diff --git a/src/lib/database/database_connection.cc b/src/lib/database/database_connection.cc index 50175c6aa8..d0bf207277 100644 --- a/src/lib/database/database_connection.cc +++ b/src/lib/database/database_connection.cc @@ -18,6 +18,7 @@ #include #include +using namespace isc::asiolink; using namespace isc::util; using namespace std; @@ -257,6 +258,7 @@ DatabaseConnection::toElement(const ParameterMap& params) { (keyword == "host") || (keyword == "name") || (keyword == "on-fail") || + (keyword == "retry-on-startup") || (keyword == "trust-anchor") || (keyword == "cert-file") || (keyword == "key-file") || @@ -280,6 +282,8 @@ DatabaseConnection::toElementDbAccessString(const std::string& dbaccess) { DbCallback DatabaseConnection::db_lost_callback_ = 0; DbCallback DatabaseConnection::db_recovered_callback_ = 0; DbCallback DatabaseConnection::db_failed_callback_ = 0; +bool DatabaseConnection::retry_ = false; +IOServicePtr DatabaseConnection::io_service_ = IOServicePtr(); } // namespace db } // namespace isc diff --git a/src/lib/database/database_connection.h b/src/lib/database/database_connection.h index eafc0625f4..b894dc4de7 100644 --- a/src/lib/database/database_connection.h +++ b/src/lib/database/database_connection.h @@ -34,6 +34,13 @@ public: isc::Exception(file, line, what) {} }; +/// @brief Exception thrown on failure to open database but permit retries +class DbOpenErrorWithRetry : public Exception { +public: + DbOpenErrorWithRetry(const char* file, size_t line, const char* what) : + isc::Exception(file, line, what) {} +}; + /// @brief Exception thrown on failure to execute a database function class DbOperationError : public Exception { public: @@ -215,6 +222,18 @@ public: /// @return a pointer to configuration static isc::data::ElementPtr toElementDbAccessString(const std::string& dbaccess); + /// @brief Sets IO service to be used by the Lease Manager. + /// + /// @param io_service IOService object, used for all ASIO operations. + static void setIOService(const isc::asiolink::IOServicePtr& io_service) { + io_service_ = io_service; + } + + /// @brief Returns pointer to the IO service. + static isc::asiolink::IOServicePtr& getIOService() { + return (io_service_); + } + /// @brief Optional callback function to invoke if an opened connection is /// lost static DbCallback db_lost_callback_; @@ -227,6 +246,14 @@ public: /// recovery failed static DbCallback db_failed_callback_; + /// @brief Flag which indicated if retry database connection on fail should + /// be attempted. + /// + /// Allow only the first database connection attempt to fail and start + /// recovery. Sequential tries invoked by the dbReconnect callback should + /// not start yet another database connection attempt. + static bool retry_; + /// @brief Throws an exception if the connection is not usable. /// @throw DbConnectionUnusable void checkUnusable() { @@ -243,6 +270,7 @@ public: } protected: + /// @brief Sets the unusable flag to true. void markUnusable() { unusable_ = true; } @@ -272,6 +300,27 @@ private: /// @brief Reconnect settings. util::ReconnectCtlPtr reconnect_ctl_; + + /// The IOService object, used for all ASIO operations. + static isc::asiolink::IOServicePtr io_service_; +}; + +/// @brief RAII class to enable DB reconnect retries on server startup. +class DbConnectionInitWithRetry { +public: + /// @brief Constructor. + /// + /// Enable DB reconnect retries on server startup. + DbConnectionInitWithRetry() { + DatabaseConnection::retry_ = true; + } + + /// @brief Destructor. + /// + /// Disable DB reconnect retries. + ~DbConnectionInitWithRetry() { + DatabaseConnection::retry_ = false; + } }; } // namespace db diff --git a/src/lib/database/dbaccess_parser.cc b/src/lib/database/dbaccess_parser.cc index 2048b3b8ed..e31ae7a1a1 100644 --- a/src/lib/database/dbaccess_parser.cc +++ b/src/lib/database/dbaccess_parser.cc @@ -61,7 +61,8 @@ DbAccessParser::parse(std::string& access_string, for (std::pair param : database_config->mapValue()) { try { if ((param.first == "persist") || - (param.first == "readonly")) { + (param.first == "readonly") || + (param.first == "retry-on-startup")) { values_copy[param.first] = (param.second->boolValue() ? "true" : "false"); diff --git a/src/lib/dhcpsrv/cfg_db_access.cc b/src/lib/dhcpsrv/cfg_db_access.cc index e38f234ac2..60ab3dc88d 100644 --- a/src/lib/dhcpsrv/cfg_db_access.cc +++ b/src/lib/dhcpsrv/cfg_db_access.cc @@ -5,8 +5,10 @@ // file, You can obtain one at http://mozilla.org/MPL/2.0/. #include +#include #include #include +#include #include #include #include @@ -17,6 +19,7 @@ #include using namespace isc::data; +using namespace isc::db; namespace isc { namespace dhcp { @@ -55,8 +58,19 @@ CfgDbAccess::getHostDbAccessStringList() const { void CfgDbAccess::createManagers() const { - // Recreate lease manager without preserving the registered callbacks. - LeaseMgrFactory::recreate(getLeaseDbAccessString(), false); + try { + // Recreate lease manager without preserving the registered callbacks. + LeaseMgrFactory::recreate(getLeaseDbAccessString(), false); + } catch (const isc::db::DbOpenErrorWithRetry& err) { + std::string redacted; + try { + DatabaseConnection::ParameterMap parameters = DatabaseConnection::parse(getLeaseDbAccessString()); + redacted = DatabaseConnection::redactedAccessString(parameters); + } catch (...) { + } + LOG_INFO(dhcpsrv_logger, DHCPSRV_LEASE_MGR_DB_OPEN_CONNECTION_WITH_RETRY_FAILED) + .arg(redacted).arg(err.what()); + } // Recreate host data source. HostMgr::create(); @@ -69,7 +83,18 @@ CfgDbAccess::createManagers() const { // Add database backends. std::list host_db_access_list = getHostDbAccessStringList(); for (std::string& hds : host_db_access_list) { - HostMgr::addBackend(hds); + try { + HostMgr::addBackend(hds); + } catch (const isc::db::DbOpenErrorWithRetry& err) { + std::string redacted; + try { + DatabaseConnection::ParameterMap parameters = DatabaseConnection::parse(hds); + redacted = DatabaseConnection::redactedAccessString(parameters); + } catch (...) { + } + LOG_INFO(dhcpsrv_logger, DHCPSRV_HOST_MGR_DB_OPEN_CONNECTION_WITH_RETRY_FAILED) + .arg(redacted).arg(err.what()); + } } // Check for a host cache. diff --git a/src/lib/dhcpsrv/dhcpsrv_messages.cc b/src/lib/dhcpsrv/dhcpsrv_messages.cc index dbd2ba661f..42fa843e0c 100644 --- a/src/lib/dhcpsrv/dhcpsrv_messages.cc +++ b/src/lib/dhcpsrv/dhcpsrv_messages.cc @@ -71,6 +71,7 @@ extern const isc::log::MessageID DHCPSRV_HOOK_LEASE4_SELECT_SKIP = "DHCPSRV_HOOK extern const isc::log::MessageID DHCPSRV_HOOK_LEASE6_EXTEND_SKIP = "DHCPSRV_HOOK_LEASE6_EXTEND_SKIP"; extern const isc::log::MessageID DHCPSRV_HOOK_LEASE6_RECOVER_SKIP = "DHCPSRV_HOOK_LEASE6_RECOVER_SKIP"; extern const isc::log::MessageID DHCPSRV_HOOK_LEASE6_SELECT_SKIP = "DHCPSRV_HOOK_LEASE6_SELECT_SKIP"; +extern const isc::log::MessageID DHCPSRV_HOST_MGR_DB_OPEN_CONNECTION_WITH_RETRY_FAILED = "DHCPSRV_HOST_MGR_DB_OPEN_CONNECTION_WITH_RETRY_FAILED"; extern const isc::log::MessageID DHCPSRV_INVALID_ACCESS = "DHCPSRV_INVALID_ACCESS"; extern const isc::log::MessageID DHCPSRV_LEASE4_EXTENDED_INFO_SANITY_FAIL = "DHCPSRV_LEASE4_EXTENDED_INFO_SANITY_FAIL"; extern const isc::log::MessageID DHCPSRV_LEASE4_EXTENDED_INFO_UPGRADED = "DHCPSRV_LEASE4_EXTENDED_INFO_UPGRADED"; @@ -78,6 +79,7 @@ extern const isc::log::MessageID DHCPSRV_LEASE6_EXTENDED_INFO_SANITY_FAIL = "DHC extern const isc::log::MessageID DHCPSRV_LEASE6_EXTENDED_INFO_UPGRADED = "DHCPSRV_LEASE6_EXTENDED_INFO_UPGRADED"; extern const isc::log::MessageID DHCPSRV_LEASE_MGR_CALLBACK_EXCEPTION = "DHCPSRV_LEASE_MGR_CALLBACK_EXCEPTION"; extern const isc::log::MessageID DHCPSRV_LEASE_MGR_CALLBACK_UNKNOWN_EXCEPTION = "DHCPSRV_LEASE_MGR_CALLBACK_UNKNOWN_EXCEPTION"; +extern const isc::log::MessageID DHCPSRV_LEASE_MGR_DB_OPEN_CONNECTION_WITH_RETRY_FAILED = "DHCPSRV_LEASE_MGR_DB_OPEN_CONNECTION_WITH_RETRY_FAILED"; extern const isc::log::MessageID DHCPSRV_LEASE_SANITY_FAIL = "DHCPSRV_LEASE_SANITY_FAIL"; extern const isc::log::MessageID DHCPSRV_LEASE_SANITY_FAIL_DISCARD = "DHCPSRV_LEASE_SANITY_FAIL_DISCARD"; extern const isc::log::MessageID DHCPSRV_LEASE_SANITY_FIXED = "DHCPSRV_LEASE_SANITY_FIXED"; @@ -355,6 +357,7 @@ const char* values[] = { "DHCPSRV_HOOK_LEASE6_EXTEND_SKIP", "DHCPv6 lease lifetime was not extended because a callout set the skip flag for message %1", "DHCPSRV_HOOK_LEASE6_RECOVER_SKIP", "DHCPv6 lease %1 was not recovered from declined state because a callout set the skip status.", "DHCPSRV_HOOK_LEASE6_SELECT_SKIP", "Lease6 (non-temporary) creation was skipped, because of callout skip flag.", + "DHCPSRV_HOST_MGR_DB_OPEN_CONNECTION_WITH_RETRY_FAILED", "Failed to connect to database: %1 with error: %2", "DHCPSRV_INVALID_ACCESS", "invalid database access string: %1", "DHCPSRV_LEASE4_EXTENDED_INFO_SANITY_FAIL", "extended info for lease %1 failed checks (%2)", "DHCPSRV_LEASE4_EXTENDED_INFO_UPGRADED", "extended info for lease %1 was upgraded", @@ -362,6 +365,7 @@ const char* values[] = { "DHCPSRV_LEASE6_EXTENDED_INFO_UPGRADED", "extended info for lease %1 was upgraded", "DHCPSRV_LEASE_MGR_CALLBACK_EXCEPTION", "exception occurred in a lease manager callback for callback type %1, subnet id %2, and lease %3: %4", "DHCPSRV_LEASE_MGR_CALLBACK_UNKNOWN_EXCEPTION", "unknown exception occurred in a lease manager callback for callback type %1, subnet id %2, and lease %3", + "DHCPSRV_LEASE_MGR_DB_OPEN_CONNECTION_WITH_RETRY_FAILED", "Failed to connect to database: %1 with error: %2", "DHCPSRV_LEASE_SANITY_FAIL", "The lease %1 with subnet-id %2 failed subnet-id checks (%3).", "DHCPSRV_LEASE_SANITY_FAIL_DISCARD", "The lease %1 with subnet-id %2 failed subnet-id checks (%3) and was dropped.", "DHCPSRV_LEASE_SANITY_FIXED", "The lease %1 with subnet-id %2 failed subnet-id checks, but was corrected to subnet-id %3.", diff --git a/src/lib/dhcpsrv/dhcpsrv_messages.h b/src/lib/dhcpsrv/dhcpsrv_messages.h index e16ee898f8..a243c10209 100644 --- a/src/lib/dhcpsrv/dhcpsrv_messages.h +++ b/src/lib/dhcpsrv/dhcpsrv_messages.h @@ -72,6 +72,7 @@ extern const isc::log::MessageID DHCPSRV_HOOK_LEASE4_SELECT_SKIP; extern const isc::log::MessageID DHCPSRV_HOOK_LEASE6_EXTEND_SKIP; extern const isc::log::MessageID DHCPSRV_HOOK_LEASE6_RECOVER_SKIP; extern const isc::log::MessageID DHCPSRV_HOOK_LEASE6_SELECT_SKIP; +extern const isc::log::MessageID DHCPSRV_HOST_MGR_DB_OPEN_CONNECTION_WITH_RETRY_FAILED; extern const isc::log::MessageID DHCPSRV_INVALID_ACCESS; extern const isc::log::MessageID DHCPSRV_LEASE4_EXTENDED_INFO_SANITY_FAIL; extern const isc::log::MessageID DHCPSRV_LEASE4_EXTENDED_INFO_UPGRADED; @@ -79,6 +80,7 @@ extern const isc::log::MessageID DHCPSRV_LEASE6_EXTENDED_INFO_SANITY_FAIL; extern const isc::log::MessageID DHCPSRV_LEASE6_EXTENDED_INFO_UPGRADED; extern const isc::log::MessageID DHCPSRV_LEASE_MGR_CALLBACK_EXCEPTION; extern const isc::log::MessageID DHCPSRV_LEASE_MGR_CALLBACK_UNKNOWN_EXCEPTION; +extern const isc::log::MessageID DHCPSRV_LEASE_MGR_DB_OPEN_CONNECTION_WITH_RETRY_FAILED; extern const isc::log::MessageID DHCPSRV_LEASE_SANITY_FAIL; extern const isc::log::MessageID DHCPSRV_LEASE_SANITY_FAIL_DISCARD; extern const isc::log::MessageID DHCPSRV_LEASE_SANITY_FIXED; diff --git a/src/lib/dhcpsrv/dhcpsrv_messages.mes b/src/lib/dhcpsrv/dhcpsrv_messages.mes index b79d2110f8..9d689cd399 100644 --- a/src/lib/dhcpsrv/dhcpsrv_messages.mes +++ b/src/lib/dhcpsrv/dhcpsrv_messages.mes @@ -341,6 +341,12 @@ have been experienced. Any such errors should have preceding entries in the log with details. No further attempts to communicate with kea-dhcp-ddns will be made without intervention. +% DHCPSRV_HOST_MGR_DB_OPEN_CONNECTION_WITH_RETRY_FAILED Failed to connect to database: %1 with error: %2 +This is an informational message issued when the the server failed to connect to +the host database. The operation started a retry to connect procedure. +The database access string with password redacted is logged, along with the +error and details for the reconnect procedure. + % DHCPSRV_HOOK_LEASE4_RECOVER_SKIP DHCPv4 lease %1 was not recovered from the declined state because a callout set the skip status. This debug message is printed when a callout installed on lease4_recover hook point set the next step status to SKIP. For this particular hook point, this @@ -424,6 +430,12 @@ The third argument prints the lease for which the error has occurred. This log message variant contains no error text because it is triggered by an unknown exception. +% DHCPSRV_LEASE_MGR_DB_OPEN_CONNECTION_WITH_RETRY_FAILED Failed to connect to database: %1 with error: %2 +This is an informational message issued when the the server failed to connect to +the lease database. The operation started a retry to connect procedure. +The database access string with password redacted is logged, along with the +error and details for the reconnect procedure. + % DHCPSRV_LEASE_SANITY_FAIL The lease %1 with subnet-id %2 failed subnet-id checks (%3). This warning message is printed when the lease being loaded does not match the configuration. Due to lease-checks value, the lease will be loaded, but diff --git a/src/lib/dhcpsrv/host_mgr.cc b/src/lib/dhcpsrv/host_mgr.cc index 3771fd392e..b81181af6b 100644 --- a/src/lib/dhcpsrv/host_mgr.cc +++ b/src/lib/dhcpsrv/host_mgr.cc @@ -42,8 +42,6 @@ namespace dhcp { using namespace isc::asiolink; using namespace isc::db; -IOServicePtr HostMgr::io_service_ = IOServicePtr(); - boost::scoped_ptr& HostMgr::getHostMgrPtr() { static boost::scoped_ptr host_mgr_ptr; diff --git a/src/lib/dhcpsrv/host_mgr.h b/src/lib/dhcpsrv/host_mgr.h index f6e6501d1d..ee63ca7aff 100644 --- a/src/lib/dhcpsrv/host_mgr.h +++ b/src/lib/dhcpsrv/host_mgr.h @@ -832,18 +832,6 @@ public: return (ip_reservations_unique_); } - /// @brief Sets IO service to be used by the Host Manager. - /// - /// @param io_service IOService object, used for all ASIO operations. - static void setIOService(const isc::asiolink::IOServicePtr& io_service) { - io_service_ = io_service; - } - - /// @brief Returns pointer to the IO service. - static isc::asiolink::IOServicePtr& getIOService() { - return (io_service_); - } - protected: /// @brief The negative caching flag. @@ -901,9 +889,6 @@ private: /// @brief Returns a pointer to the currently used instance of the /// @c HostMgr. static boost::scoped_ptr& getHostMgrPtr(); - - /// The IOService object, used for all ASIO operations. - static isc::asiolink::IOServicePtr io_service_; }; } // namespace dhcp diff --git a/src/lib/dhcpsrv/lease_mgr.cc b/src/lib/dhcpsrv/lease_mgr.cc index 89013502c1..9287f1d28f 100644 --- a/src/lib/dhcpsrv/lease_mgr.cc +++ b/src/lib/dhcpsrv/lease_mgr.cc @@ -38,8 +38,6 @@ using namespace std; namespace isc { namespace dhcp { -IOServicePtr LeaseMgr::io_service_ = IOServicePtr(); - LeasePageSize::LeasePageSize(const size_t page_size) : page_size_(page_size) { diff --git a/src/lib/dhcpsrv/lease_mgr.h b/src/lib/dhcpsrv/lease_mgr.h index 537c6daf6c..eb604f7d0d 100644 --- a/src/lib/dhcpsrv/lease_mgr.h +++ b/src/lib/dhcpsrv/lease_mgr.h @@ -805,6 +805,7 @@ public: /// @brief Returns backend version. /// + /// @param timer_name The DB reconnect timer name. /// @return Version number as a pair of unsigned integers. "first" is the /// major version number, "second" the minor number. /// @@ -817,7 +818,7 @@ public: /// B>=A and B=C (it is ok to have newer backend, as it should be backward /// compatible) /// Also if B>C, some database upgrade procedure may be triggered - virtual VersionPair getVersion() const = 0; + virtual VersionPair getVersion(const std::string& timer_name = "") const = 0; /// @brief Commit Transactions /// @@ -831,18 +832,6 @@ public: /// support transactions, this is a no-op. virtual void rollback() = 0; - /// @brief Sets IO service to be used by the Lease Manager. - /// - /// @param io_service IOService object, used for all ASIO operations. - static void setIOService(const isc::asiolink::IOServicePtr& io_service) { - io_service_ = io_service; - } - - /// @brief Returns pointer to the IO service. - static isc::asiolink::IOServicePtr& getIOService() { - return (io_service_); - } - // -- The following are memfile only, but defined in the base LeaseMgr for convenience. -- /// @brief Returns the class lease count for a given class and lease type. @@ -1101,8 +1090,6 @@ protected: const std::vector& remote_id) = 0; private: - /// The IOService object, used for all ASIO operations. - static isc::asiolink::IOServicePtr io_service_; /// @brief Holds the setting whether the lease extended info tables /// are enabled or disabled. The default is disabled. diff --git a/src/lib/dhcpsrv/memfile_lease_mgr.cc b/src/lib/dhcpsrv/memfile_lease_mgr.cc index 1f90d8dd1c..3c63422619 100644 --- a/src/lib/dhcpsrv/memfile_lease_mgr.cc +++ b/src/lib/dhcpsrv/memfile_lease_mgr.cc @@ -209,7 +209,7 @@ LFCSetup::setup(const uint32_t lfc_interval, args.push_back("ignored-path"); // Create the process (do not start it yet). - process_.reset(new ProcessSpawn(LeaseMgr::getIOService(), executable, args)); + process_.reset(new ProcessSpawn(DatabaseConnection::getIOService(), executable, args)); // If we've been told to run it once now, invoke the callback directly. if (run_once_now) { @@ -2113,7 +2113,7 @@ Memfile_LeaseMgr::getDescription() const { } std::pair -Memfile_LeaseMgr::getVersion() const { +Memfile_LeaseMgr::getVersion(const std::string& /* timer_name */) const { std::string const& universe(conn_.getParameter("universe")); if (universe == "4") { return std::make_pair(MAJOR_VERSION_V4, MINOR_VERSION_V4); diff --git a/src/lib/dhcpsrv/memfile_lease_mgr.h b/src/lib/dhcpsrv/memfile_lease_mgr.h index 147e60a506..1909ec2290 100644 --- a/src/lib/dhcpsrv/memfile_lease_mgr.h +++ b/src/lib/dhcpsrv/memfile_lease_mgr.h @@ -898,9 +898,10 @@ public: /// @brief Returns backend version. /// + /// @param timer_name The DB reconnect timer name. /// @return Version number as a pair of unsigned integers. "first" is the /// major version number, "second" the minor number. - virtual std::pair getVersion() const override; + virtual std::pair getVersion(const std::string& /* timer_name */ = "") const override; /// @brief Commit Transactions /// diff --git a/src/lib/dhcpsrv/mysql_host_data_source.cc b/src/lib/dhcpsrv/mysql_host_data_source.cc index acf15b3695..bdc6f640bc 100644 --- a/src/lib/dhcpsrv/mysql_host_data_source.cc +++ b/src/lib/dhcpsrv/mysql_host_data_source.cc @@ -2171,13 +2171,14 @@ public: /// The method is called by the constructor before opening the database /// to verify that the schema version is correct. /// + /// @param timer_name The DB reconnect timer name. /// @return Version number stored in the database, as a pair of unsigned /// integers. "first" is the major version number, "second" the /// minor number. /// /// @throw isc::dhcp::DbOperationError An operation on the open database /// has failed. - std::pair getVersion() const; + std::pair getVersion(const std::string& timer_name = "") const; /// @brief Executes statements which inserts a row into one of the tables. /// @@ -2882,7 +2883,19 @@ MySqlHostDataSourceImpl::MySqlHostDataSourceImpl(const DatabaseConnection::Param // Validate the schema version first. std::pair code_version(MYSQL_SCHEMA_VERSION_MAJOR, MYSQL_SCHEMA_VERSION_MINOR); - std::pair db_version = getVersion(); + + std::string timer_name = ""; + bool retry = false; + if (parameters.count("retry-on-startup")) { + if (parameters.at("retry-on-startup") == "true") { + retry = true; + } + } + if (retry) { + timer_name = timer_name_; + } + + std::pair db_version = getVersion(timer_name); if (code_version != db_version) { isc_throw(DbOpenError, "MySQL schema version mismatch: need version: " @@ -2901,7 +2914,7 @@ MySqlHostDataSourceImpl::MySqlHostDataSourceImpl(const DatabaseConnection::Param MySqlHostContextPtr MySqlHostDataSourceImpl::createContext() const { MySqlHostContextPtr ctx(new MySqlHostContext(parameters_, - IOServiceAccessorPtr(new IOServiceAccessor(&HostMgr::getIOService)), + IOServiceAccessorPtr(new IOServiceAccessor(&DatabaseConnection::getIOService)), &MySqlHostDataSourceImpl::dbReconnect)); // Open the database. @@ -3030,11 +3043,14 @@ MySqlHostDataSourceImpl::dbReconnect(ReconnectCtlPtr db_reconnect_ctl) { } std::pair -MySqlHostDataSourceImpl::getVersion() const { +MySqlHostDataSourceImpl::getVersion(const std::string& timer_name) const { LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_MYSQL_HOST_DB_GET_VERSION); - return (MySqlConnection::getVersion(parameters_)); + IOServiceAccessorPtr ac(new IOServiceAccessor(&DatabaseConnection::getIOService)); + DbCallback cb(&MySqlHostDataSourceImpl::dbReconnect); + + return (MySqlConnection::getVersion(parameters_, ac, cb, timer_name)); } void @@ -4096,8 +4112,8 @@ MySqlHostDataSource::getDescription() const { } std::pair -MySqlHostDataSource::getVersion() const { - return(impl_->getVersion()); +MySqlHostDataSource::getVersion(const std::string& timer_name) const { + return(impl_->getVersion(timer_name)); } void diff --git a/src/lib/dhcpsrv/mysql_host_data_source.h b/src/lib/dhcpsrv/mysql_host_data_source.h index bf99472a99..502c9f3896 100644 --- a/src/lib/dhcpsrv/mysql_host_data_source.h +++ b/src/lib/dhcpsrv/mysql_host_data_source.h @@ -458,13 +458,14 @@ public: /// @brief Returns backend version. /// + /// @param timer_name The DB reconnect timer name. /// @return Version number stored in the database, as a pair of unsigned /// integers. "first" is the major version number, "second" the /// minor number. /// /// @throw isc::db::DbOperationError An operation on the open database /// has failed. - virtual std::pair getVersion() const; + virtual std::pair getVersion(const std::string& timer_name = "") const; /// @brief Commit Transactions /// diff --git a/src/lib/dhcpsrv/mysql_lease_mgr.cc b/src/lib/dhcpsrv/mysql_lease_mgr.cc index e436e1940e..90af405cd2 100644 --- a/src/lib/dhcpsrv/mysql_lease_mgr.cc +++ b/src/lib/dhcpsrv/mysql_lease_mgr.cc @@ -2198,7 +2198,19 @@ MySqlLeaseMgr::MySqlLeaseMgr(const DatabaseConnection::ParameterMap& parameters) // Validate schema version first. std::pair code_version(MYSQL_SCHEMA_VERSION_MAJOR, MYSQL_SCHEMA_VERSION_MINOR); - std::pair db_version = getVersion(); + + std::string timer_name = ""; + bool retry = false; + if (parameters.count("retry-on-startup")) { + if (parameters.at("retry-on-startup") == "true") { + retry = true; + } + } + if (retry) { + timer_name = timer_name_; + } + + std::pair db_version = getVersion(timer_name); if (code_version != db_version) { isc_throw(DbOpenError, "MySQL schema version mismatch: need version: " @@ -2287,9 +2299,12 @@ MySqlLeaseMgr::dbReconnect(ReconnectCtlPtr db_reconnect_ctl) { MySqlLeaseContextPtr MySqlLeaseMgr::createContext() const { MySqlLeaseContextPtr ctx(new MySqlLeaseContext(parameters_, - IOServiceAccessorPtr(new IOServiceAccessor(&LeaseMgr::getIOService)), + IOServiceAccessorPtr(new IOServiceAccessor(&DatabaseConnection::getIOService)), &MySqlLeaseMgr::dbReconnect)); + // Create ReconnectCtl for this connection. + ctx->conn_.makeReconnectCtl(timer_name_); + // Open the database. ctx->conn_.openDatabase(); @@ -2314,9 +2329,6 @@ MySqlLeaseMgr::createContext() const { ctx->exchange4_.reset(new MySqlLease4Exchange()); ctx->exchange6_.reset(new MySqlLease6Exchange()); - // Create ReconnectCtl for this connection. - ctx->conn_.makeReconnectCtl(timer_name_); - return (ctx); } @@ -3824,10 +3836,13 @@ MySqlLeaseMgr::getDescription() const { } std::pair -MySqlLeaseMgr::getVersion() const { +MySqlLeaseMgr::getVersion(const string& timer_name) const { LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_MYSQL_GET_VERSION); - return (MySqlConnection::getVersion(parameters_)); + IOServiceAccessorPtr ac(new IOServiceAccessor(&DatabaseConnection::getIOService)); + DbCallback cb(&MySqlLeaseMgr::dbReconnect); + + return (MySqlConnection::getVersion(parameters_, ac, cb, timer_name)); } void diff --git a/src/lib/dhcpsrv/mysql_lease_mgr.h b/src/lib/dhcpsrv/mysql_lease_mgr.h index 1a3dfd952d..bc673bb5ba 100644 --- a/src/lib/dhcpsrv/mysql_lease_mgr.h +++ b/src/lib/dhcpsrv/mysql_lease_mgr.h @@ -689,12 +689,13 @@ public: /// @brief Returns backend version. /// + /// @param timer_name The DB reconnect timer name. /// @return Version number as a pair of unsigned integers. "first" is the /// major version number, "second" the minor number. /// /// @throw isc::db::DbOperationError An operation on the open database has /// failed. - virtual std::pair getVersion() const override; + virtual std::pair getVersion(const std::string& timer_name = "") const override; /// @brief Commit Transactions /// diff --git a/src/lib/dhcpsrv/pgsql_host_data_source.cc b/src/lib/dhcpsrv/pgsql_host_data_source.cc index b9cea846c9..4abad5afd3 100644 --- a/src/lib/dhcpsrv/pgsql_host_data_source.cc +++ b/src/lib/dhcpsrv/pgsql_host_data_source.cc @@ -1613,13 +1613,14 @@ public: /// @brief Returns PostgreSQL schema version of the open database /// + /// @param timer_name The DB reconnect timer name. /// @return Version number stored in the database, as a pair of unsigned /// integers. "first" is the major version number, "second" the /// minor number. /// /// @throw isc::db::DbOperationError An operation on the open database /// has failed. - std::pair getVersion() const; + std::pair getVersion(const std::string& timer_name = "") const; /// @brief The parameters DatabaseConnection::ParameterMap parameters_; @@ -2299,7 +2300,19 @@ PgSqlHostDataSourceImpl::PgSqlHostDataSourceImpl(const DatabaseConnection::Param // Validate the schema version first. std::pair code_version(PGSQL_SCHEMA_VERSION_MAJOR, PGSQL_SCHEMA_VERSION_MINOR); - std::pair db_version = getVersion(); + + std::string timer_name = ""; + bool retry = false; + if (parameters.count("retry-on-startup")) { + if (parameters.at("retry-on-startup") == "true") { + retry = true; + } + } + if (retry) { + timer_name = timer_name_; + } + + std::pair db_version = getVersion(timer_name); if (code_version != db_version) { isc_throw(DbOpenError, "PostgreSQL schema version mismatch: need version: " @@ -2318,7 +2331,7 @@ PgSqlHostDataSourceImpl::PgSqlHostDataSourceImpl(const DatabaseConnection::Param PgSqlHostContextPtr PgSqlHostDataSourceImpl::createContext() const { PgSqlHostContextPtr ctx(new PgSqlHostContext(parameters_, - IOServiceAccessorPtr(new IOServiceAccessor(&HostMgr::getIOService)), + IOServiceAccessorPtr(new IOServiceAccessor(&DatabaseConnection::getIOService)), &PgSqlHostDataSourceImpl::dbReconnect)); // Open the database. @@ -2616,10 +2629,14 @@ PgSqlHostDataSourceImpl::getHost(PgSqlHostContextPtr& ctx, } std::pair -PgSqlHostDataSourceImpl::getVersion() const { +PgSqlHostDataSourceImpl::getVersion(const std::string& timer_name) const { LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_PGSQL_HOST_DB_GET_VERSION); - return (PgSqlConnection::getVersion(parameters_)); + + IOServiceAccessorPtr ac(new IOServiceAccessor(&DatabaseConnection::getIOService)); + DbCallback cb(&PgSqlHostDataSourceImpl::dbReconnect); + + return (PgSqlConnection::getVersion(parameters_, ac, cb, timer_name)); } void @@ -3298,8 +3315,8 @@ PgSqlHostDataSource::getDescription() const { } std::pair -PgSqlHostDataSource::getVersion() const { - return(impl_->getVersion()); +PgSqlHostDataSource::getVersion(const std::string& timer_name) const { + return(impl_->getVersion(timer_name)); } void diff --git a/src/lib/dhcpsrv/pgsql_host_data_source.h b/src/lib/dhcpsrv/pgsql_host_data_source.h index 51b4856fdd..3870e8295c 100644 --- a/src/lib/dhcpsrv/pgsql_host_data_source.h +++ b/src/lib/dhcpsrv/pgsql_host_data_source.h @@ -510,13 +510,14 @@ public: /// is correct. Thus it must not rely on a pre-prepared statement or /// formal statement execution error checking. /// + /// @param timer_name The DB reconnect timer name. /// @return Version number stored in the database, as a pair of unsigned /// integers. "first" is the major version number, "second" the /// minor number. /// /// @throw isc::db::DbOperationError An operation on the open database /// has failed. - virtual std::pair getVersion() const; + virtual std::pair getVersion(const std::string& timer_name = "") const; /// @brief Commit Transactions /// diff --git a/src/lib/dhcpsrv/pgsql_lease_mgr.cc b/src/lib/dhcpsrv/pgsql_lease_mgr.cc index 85f0dbd6e0..8e0d79c38f 100644 --- a/src/lib/dhcpsrv/pgsql_lease_mgr.cc +++ b/src/lib/dhcpsrv/pgsql_lease_mgr.cc @@ -1647,7 +1647,19 @@ PgSqlLeaseMgr::PgSqlLeaseMgr(const DatabaseConnection::ParameterMap& parameters) // Validate schema version first. std::pair code_version(PGSQL_SCHEMA_VERSION_MAJOR, PGSQL_SCHEMA_VERSION_MINOR); - std::pair db_version = getVersion(); + + std::string timer_name = ""; + bool retry = false; + if (parameters.count("retry-on-startup")) { + if (parameters.at("retry-on-startup") == "true") { + retry = true; + } + } + if (retry) { + timer_name = timer_name_; + } + + std::pair db_version = getVersion(timer_name); if (code_version != db_version) { isc_throw(DbOpenError, "PostgreSQL schema version mismatch: need version: " @@ -1736,9 +1748,12 @@ PgSqlLeaseMgr::dbReconnect(ReconnectCtlPtr db_reconnect_ctl) { PgSqlLeaseContextPtr PgSqlLeaseMgr::createContext() const { PgSqlLeaseContextPtr ctx(new PgSqlLeaseContext(parameters_, - IOServiceAccessorPtr(new IOServiceAccessor(&LeaseMgr::getIOService)), + IOServiceAccessorPtr(new IOServiceAccessor(&DatabaseConnection::getIOService)), &PgSqlLeaseMgr::dbReconnect)); + // Create ReconnectCtl for this connection. + ctx->conn_.makeReconnectCtl(timer_name_); + // Open the database. ctx->conn_.openDatabase(); @@ -1759,9 +1774,6 @@ PgSqlLeaseMgr::createContext() const { ctx->exchange4_.reset(new PgSqlLease4Exchange()); ctx->exchange6_.reset(new PgSqlLease6Exchange()); - // Create ReconnectCtl for this connection. - ctx->conn_.makeReconnectCtl(timer_name_); - return (ctx); } @@ -2989,10 +3001,13 @@ PgSqlLeaseMgr::getDescription() const { } std::pair -PgSqlLeaseMgr::getVersion() const { +PgSqlLeaseMgr::getVersion(const string& timer_name) const { LOG_DEBUG(dhcpsrv_logger, DHCPSRV_DBG_TRACE_DETAIL, DHCPSRV_PGSQL_GET_VERSION); - return (PgSqlConnection::getVersion(parameters_)); + IOServiceAccessorPtr ac(new IOServiceAccessor(&DatabaseConnection::getIOService)); + DbCallback cb(&PgSqlLeaseMgr::dbReconnect); + + return (PgSqlConnection::getVersion(parameters_, ac, cb, timer_name)); } void diff --git a/src/lib/dhcpsrv/pgsql_lease_mgr.h b/src/lib/dhcpsrv/pgsql_lease_mgr.h index feac211fff..c7525a27d7 100644 --- a/src/lib/dhcpsrv/pgsql_lease_mgr.h +++ b/src/lib/dhcpsrv/pgsql_lease_mgr.h @@ -665,12 +665,13 @@ public: /// @brief Returns backend version. /// + /// @param timer_name The DB reconnect timer name. /// @return Version number as a pair of unsigned integers. "first" is the /// major version number, "second" the minor number. /// /// @throw isc::db::DbOperationError An operation on the open database has /// failed. - virtual std::pair getVersion() const override; + virtual std::pair getVersion(const std::string& timer_name = "") const override; /// @brief Commit Transactions /// diff --git a/src/lib/dhcpsrv/tests/Makefile.am b/src/lib/dhcpsrv/tests/Makefile.am index c59b10374b..20c670159f 100644 --- a/src/lib/dhcpsrv/tests/Makefile.am +++ b/src/lib/dhcpsrv/tests/Makefile.am @@ -107,7 +107,6 @@ libdhcpsrv_unittests_SOURCES += lease_file_loader_unittest.cc libdhcpsrv_unittests_SOURCES += lease_unittest.cc libdhcpsrv_unittests_SOURCES += lease_mgr_factory_unittest.cc libdhcpsrv_unittests_SOURCES += lease_mgr_unittest.cc -libdhcpsrv_unittests_SOURCES += generic_lease_mgr_unittest.cc generic_lease_mgr_unittest.h libdhcpsrv_unittests_SOURCES += memfile_lease_extended_info_unittest.cc libdhcpsrv_unittests_SOURCES += memfile_lease_limits_unittest.cc libdhcpsrv_unittests_SOURCES += memfile_lease_mgr_unittest.cc diff --git a/src/lib/dhcpsrv/tests/lease_mgr_unittest.cc b/src/lib/dhcpsrv/tests/lease_mgr_unittest.cc index 54c9332b95..1bc8428fb5 100644 --- a/src/lib/dhcpsrv/tests/lease_mgr_unittest.cc +++ b/src/lib/dhcpsrv/tests/lease_mgr_unittest.cc @@ -11,7 +11,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/lib/dhcpsrv/tests/memfile_lease_mgr_unittest.cc b/src/lib/dhcpsrv/tests/memfile_lease_mgr_unittest.cc index 85614f5bad..5d75949996 100644 --- a/src/lib/dhcpsrv/tests/memfile_lease_mgr_unittest.cc +++ b/src/lib/dhcpsrv/tests/memfile_lease_mgr_unittest.cc @@ -20,7 +20,7 @@ #include #include #include -#include +#include #include #include #include @@ -117,7 +117,7 @@ public: extra_files_() { timer_mgr_->setIOService(io_service_); - LeaseMgr::setIOService(io_service_); + DatabaseConnection::setIOService(io_service_); std::ostringstream s; s << KEA_LFC_BUILD_DIR << "/kea-lfc"; diff --git a/src/lib/dhcpsrv/tests/mysql_host_data_source_unittest.cc b/src/lib/dhcpsrv/tests/mysql_host_data_source_unittest.cc index 8ad593c936..673e086cda 100644 --- a/src/lib/dhcpsrv/tests/mysql_host_data_source_unittest.cc +++ b/src/lib/dhcpsrv/tests/mysql_host_data_source_unittest.cc @@ -1690,6 +1690,54 @@ TEST_F(MySQLHostMgrTest, setIPReservationsUnique) { EXPECT_TRUE(HostMgr::instance().setIPReservationsUnique(false)); } +/// @brief Verifies that loss of connectivity to MySQL is handled correctly. +TEST_F(MySQLHostMgrDbLostCallbackTest, testRetryOpenDbLostAndRecoveredCallback) { + MultiThreadingTest mt(false); + testRetryOpenDbLostAndRecoveredCallback(); +} + +/// @brief Verifies that loss of connectivity to MySQL is handled correctly. +TEST_F(MySQLHostMgrDbLostCallbackTest, testRetryOpenDbLostAndRecoveredCallbackMultiThreading) { + MultiThreadingTest mt(true); + testRetryOpenDbLostAndRecoveredCallback(); +} + +/// @brief Verifies that loss of connectivity to MySQL is handled correctly. +TEST_F(MySQLHostMgrDbLostCallbackTest, testRetryOpenDbLostAndFailedCallback) { + MultiThreadingTest mt(false); + testRetryOpenDbLostAndFailedCallback(); +} + +/// @brief Verifies that loss of connectivity to MySQL is handled correctly. +TEST_F(MySQLHostMgrDbLostCallbackTest, testRetryOpenDbLostAndFailedCallbackMultiThreading) { + MultiThreadingTest mt(true); + testRetryOpenDbLostAndFailedCallback(); +} + +/// @brief Verifies that loss of connectivity to MySQL is handled correctly. +TEST_F(MySQLHostMgrDbLostCallbackTest, testRetryOpenDbLostAndRecoveredAfterTimeoutCallback) { + MultiThreadingTest mt(false); + testRetryOpenDbLostAndRecoveredAfterTimeoutCallback(); +} + +/// @brief Verifies that loss of connectivity to MySQL is handled correctly. +TEST_F(MySQLHostMgrDbLostCallbackTest, testRetryOpenDbLostAndRecoveredAfterTimeoutCallbackMultiThreading) { + MultiThreadingTest mt(true); + testRetryOpenDbLostAndRecoveredAfterTimeoutCallback(); +} + +/// @brief Verifies that loss of connectivity to MySQL is handled correctly. +TEST_F(MySQLHostMgrDbLostCallbackTest, testRetryOpenDbLostAndFailedAfterTimeoutCallback) { + MultiThreadingTest mt(false); + testRetryOpenDbLostAndFailedAfterTimeoutCallback(); +} + +/// @brief Verifies that loss of connectivity to MySQL is handled correctly. +TEST_F(MySQLHostMgrDbLostCallbackTest, testRetryOpenDbLostAndFailedAfterTimeoutCallbackMultiThreading) { + MultiThreadingTest mt(true); + testRetryOpenDbLostAndFailedAfterTimeoutCallback(); +} + /// @brief Verifies that db lost callback is not invoked on an open failure TEST_F(MySQLHostMgrDbLostCallbackTest, testNoCallbackOnOpenFailure) { MultiThreadingTest mt(false); diff --git a/src/lib/dhcpsrv/tests/mysql_lease_mgr_unittest.cc b/src/lib/dhcpsrv/tests/mysql_lease_mgr_unittest.cc index 8e7956bdd4..a5737ef253 100644 --- a/src/lib/dhcpsrv/tests/mysql_lease_mgr_unittest.cc +++ b/src/lib/dhcpsrv/tests/mysql_lease_mgr_unittest.cc @@ -10,8 +10,8 @@ #include #include #include +#include #include -#include #include #include #include @@ -976,6 +976,54 @@ public: } }; +/// @brief Verifies that loss of connectivity to MySQL is handled correctly. +TEST_F(MySqlLeaseMgrDbLostCallbackTest, testRetryOpenDbLostAndRecoveredCallback) { + MultiThreadingTest mt(false); + testRetryOpenDbLostAndRecoveredCallback(); +} + +/// @brief Verifies that loss of connectivity to MySQL is handled correctly. +TEST_F(MySqlLeaseMgrDbLostCallbackTest, testRetryOpenDbLostAndRecoveredCallbackMultiThreading) { + MultiThreadingTest mt(true); + testRetryOpenDbLostAndRecoveredCallback(); +} + +/// @brief Verifies that loss of connectivity to MySQL is handled correctly. +TEST_F(MySqlLeaseMgrDbLostCallbackTest, testRetryOpenDbLostAndFailedCallback) { + MultiThreadingTest mt(false); + testRetryOpenDbLostAndFailedCallback(); +} + +/// @brief Verifies that loss of connectivity to MySQL is handled correctly. +TEST_F(MySqlLeaseMgrDbLostCallbackTest, testRetryOpenDbLostAndFailedCallbackMultiThreading) { + MultiThreadingTest mt(true); + testRetryOpenDbLostAndFailedCallback(); +} + +/// @brief Verifies that loss of connectivity to MySQL is handled correctly. +TEST_F(MySqlLeaseMgrDbLostCallbackTest, testRetryOpenDbLostAndRecoveredAfterTimeoutCallback) { + MultiThreadingTest mt(false); + testRetryOpenDbLostAndRecoveredAfterTimeoutCallback(); +} + +/// @brief Verifies that loss of connectivity to MySQL is handled correctly. +TEST_F(MySqlLeaseMgrDbLostCallbackTest, testRetryOpenDbLostAndRecoveredAfterTimeoutCallbackMultiThreading) { + MultiThreadingTest mt(true); + testRetryOpenDbLostAndRecoveredAfterTimeoutCallback(); +} + +/// @brief Verifies that loss of connectivity to MySQL is handled correctly. +TEST_F(MySqlLeaseMgrDbLostCallbackTest, testRetryOpenDbLostAndFailedAfterTimeoutCallback) { + MultiThreadingTest mt(false); + testRetryOpenDbLostAndFailedAfterTimeoutCallback(); +} + +/// @brief Verifies that loss of connectivity to MySQL is handled correctly. +TEST_F(MySqlLeaseMgrDbLostCallbackTest, testRetryOpenDbLostAndFailedAfterTimeoutCallbackMultiThreading) { + MultiThreadingTest mt(true); + testRetryOpenDbLostAndFailedAfterTimeoutCallback(); +} + /// @brief Verifies that db lost callback is not invoked on an open failure TEST_F(MySqlLeaseMgrDbLostCallbackTest, testNoCallbackOnOpenFailure) { MultiThreadingTest mt(false); diff --git a/src/lib/dhcpsrv/tests/pgsql_host_data_source_unittest.cc b/src/lib/dhcpsrv/tests/pgsql_host_data_source_unittest.cc index 561e059089..f841f368e5 100644 --- a/src/lib/dhcpsrv/tests/pgsql_host_data_source_unittest.cc +++ b/src/lib/dhcpsrv/tests/pgsql_host_data_source_unittest.cc @@ -1658,6 +1658,54 @@ TEST_F(PgSQLHostMgrTest, setIPReservationsUnique) { EXPECT_TRUE(HostMgr::instance().setIPReservationsUnique(false)); } +/// @brief Verifies that loss of connectivity to PostgreSQL is handled correctly. +TEST_F(PgSQLHostMgrDbLostCallbackTest, testRetryOpenDbLostAndRecoveredCallback) { + MultiThreadingTest mt(false); + testRetryOpenDbLostAndRecoveredCallback(); +} + +/// @brief Verifies that loss of connectivity to PostgreSQL is handled correctly. +TEST_F(PgSQLHostMgrDbLostCallbackTest, testRetryOpenDbLostAndRecoveredCallbackMultiThreading) { + MultiThreadingTest mt(true); + testRetryOpenDbLostAndRecoveredCallback(); +} + +/// @brief Verifies that loss of connectivity to PostgreSQL is handled correctly. +TEST_F(PgSQLHostMgrDbLostCallbackTest, testRetryOpenDbLostAndFailedCallback) { + MultiThreadingTest mt(false); + testRetryOpenDbLostAndFailedCallback(); +} + +/// @brief Verifies that loss of connectivity to PostgreSQL is handled correctly. +TEST_F(PgSQLHostMgrDbLostCallbackTest, testRetryOpenDbLostAndFailedCallbackMultiThreading) { + MultiThreadingTest mt(true); + testRetryOpenDbLostAndFailedCallback(); +} + +/// @brief Verifies that loss of connectivity to PostgreSQL is handled correctly. +TEST_F(PgSQLHostMgrDbLostCallbackTest, testRetryOpenDbLostAndRecoveredAfterTimeoutCallback) { + MultiThreadingTest mt(false); + testRetryOpenDbLostAndRecoveredAfterTimeoutCallback(); +} + +/// @brief Verifies that loss of connectivity to PostgreSQL is handled correctly. +TEST_F(PgSQLHostMgrDbLostCallbackTest, testRetryOpenDbLostAndRecoveredAfterTimeoutCallbackMultiThreading) { + MultiThreadingTest mt(true); + testRetryOpenDbLostAndRecoveredAfterTimeoutCallback(); +} + +/// @brief Verifies that loss of connectivity to PostgreSQL is handled correctly. +TEST_F(PgSQLHostMgrDbLostCallbackTest, testRetryOpenDbLostAndFailedAfterTimeoutCallback) { + MultiThreadingTest mt(false); + testRetryOpenDbLostAndFailedAfterTimeoutCallback(); +} + +/// @brief Verifies that loss of connectivity to PostgreSQL is handled correctly. +TEST_F(PgSQLHostMgrDbLostCallbackTest, testRetryOpenDbLostAndFailedAfterTimeoutCallbackMultiThreading) { + MultiThreadingTest mt(true); + testRetryOpenDbLostAndFailedAfterTimeoutCallback(); +} + /// @brief Verifies that db lost callback is not invoked on an open failure TEST_F(PgSQLHostMgrDbLostCallbackTest, testNoCallbackOnOpenFailure) { MultiThreadingTest mt(false); diff --git a/src/lib/dhcpsrv/tests/pgsql_lease_mgr_unittest.cc b/src/lib/dhcpsrv/tests/pgsql_lease_mgr_unittest.cc index 5a41c05916..15eb78c4dd 100644 --- a/src/lib/dhcpsrv/tests/pgsql_lease_mgr_unittest.cc +++ b/src/lib/dhcpsrv/tests/pgsql_lease_mgr_unittest.cc @@ -10,8 +10,8 @@ #include #include #include +#include #include -#include #include #include #include @@ -943,6 +943,54 @@ public: } }; +/// @brief Verifies that loss of connectivity to PostgreSQL is handled correctly. +TEST_F(PgSqlLeaseMgrDbLostCallbackTest, testRetryOpenDbLostAndRecoveredCallback) { + MultiThreadingTest mt(false); + testRetryOpenDbLostAndRecoveredCallback(); +} + +/// @brief Verifies that loss of connectivity to PostgreSQL is handled correctly. +TEST_F(PgSqlLeaseMgrDbLostCallbackTest, testRetryOpenDbLostAndRecoveredCallbackMultiThreading) { + MultiThreadingTest mt(true); + testRetryOpenDbLostAndRecoveredCallback(); +} + +/// @brief Verifies that loss of connectivity to PostgreSQL is handled correctly. +TEST_F(PgSqlLeaseMgrDbLostCallbackTest, testRetryOpenDbLostAndFailedCallback) { + MultiThreadingTest mt(false); + testRetryOpenDbLostAndFailedCallback(); +} + +/// @brief Verifies that loss of connectivity to PostgreSQL is handled correctly. +TEST_F(PgSqlLeaseMgrDbLostCallbackTest, testRetryOpenDbLostAndFailedCallbackMultiThreading) { + MultiThreadingTest mt(true); + testRetryOpenDbLostAndFailedCallback(); +} + +/// @brief Verifies that loss of connectivity to PostgreSQL is handled correctly. +TEST_F(PgSqlLeaseMgrDbLostCallbackTest, testRetryOpenDbLostAndRecoveredAfterTimeoutCallback) { + MultiThreadingTest mt(false); + testRetryOpenDbLostAndRecoveredAfterTimeoutCallback(); +} + +/// @brief Verifies that loss of connectivity to PostgreSQL is handled correctly. +TEST_F(PgSqlLeaseMgrDbLostCallbackTest, testRetryOpenDbLostAndRecoveredAfterTimeoutCallbackMultiThreading) { + MultiThreadingTest mt(true); + testRetryOpenDbLostAndRecoveredAfterTimeoutCallback(); +} + +/// @brief Verifies that loss of connectivity to PostgreSQL is handled correctly. +TEST_F(PgSqlLeaseMgrDbLostCallbackTest, testRetryOpenDbLostAndFailedAfterTimeoutCallback) { + MultiThreadingTest mt(false); + testRetryOpenDbLostAndFailedAfterTimeoutCallback(); +} + +/// @brief Verifies that loss of connectivity to PostgreSQL is handled correctly. +TEST_F(PgSqlLeaseMgrDbLostCallbackTest, testRetryOpenDbLostAndFailedAfterTimeoutCallbackMultiThreading) { + MultiThreadingTest mt(true); + testRetryOpenDbLostAndFailedAfterTimeoutCallback(); +} + /// @brief Verifies that db lost callback is not invoked on an open failure TEST_F(PgSqlLeaseMgrDbLostCallbackTest, testNoCallbackOnOpenFailure) { MultiThreadingTest mt(false); diff --git a/src/lib/dhcpsrv/tests/tracking_lease_mgr_unittest.cc b/src/lib/dhcpsrv/tests/tracking_lease_mgr_unittest.cc index 1361c1c6dc..63d5dcc490 100644 --- a/src/lib/dhcpsrv/tests/tracking_lease_mgr_unittest.cc +++ b/src/lib/dhcpsrv/tests/tracking_lease_mgr_unittest.cc @@ -8,7 +8,7 @@ #include #include -#include +#include #include #include #include diff --git a/src/lib/dhcpsrv/testutils/Makefile.am b/src/lib/dhcpsrv/testutils/Makefile.am index 301ce3099f..aa4f83f839 100644 --- a/src/lib/dhcpsrv/testutils/Makefile.am +++ b/src/lib/dhcpsrv/testutils/Makefile.am @@ -19,6 +19,7 @@ libdhcpsrvtest_la_SOURCES += host_data_source_utils.cc host_data_source_utils.h libdhcpsrvtest_la_SOURCES += memory_host_data_source.cc memory_host_data_source.h libdhcpsrvtest_la_SOURCES += test_utils.cc test_utils.h libdhcpsrvtest_la_SOURCES += generic_backend_unittest.cc generic_backend_unittest.h +libdhcpsrvtest_la_SOURCES += generic_lease_mgr_unittest.cc generic_lease_mgr_unittest.h libdhcpsrvtest_la_SOURCES += generic_host_data_source_unittest.cc generic_host_data_source_unittest.h libdhcpsrvtest_la_SOURCES += generic_cb_dhcp4_unittest.h generic_cb_dhcp4_unittest.cc libdhcpsrvtest_la_SOURCES += generic_cb_dhcp6_unittest.h generic_cb_dhcp6_unittest.cc diff --git a/src/lib/dhcpsrv/testutils/concrete_lease_mgr.cc b/src/lib/dhcpsrv/testutils/concrete_lease_mgr.cc index 84ef3e1ac5..6a99637c0a 100644 --- a/src/lib/dhcpsrv/testutils/concrete_lease_mgr.cc +++ b/src/lib/dhcpsrv/testutils/concrete_lease_mgr.cc @@ -328,7 +328,7 @@ ConcreteLeaseMgr::getDescription() const { } std::pair -ConcreteLeaseMgr::getVersion() const { +ConcreteLeaseMgr::getVersion(const std::string& /* timer_name */) const { return (make_pair(uint32_t(0), uint32_t(0))); } diff --git a/src/lib/dhcpsrv/testutils/concrete_lease_mgr.h b/src/lib/dhcpsrv/testutils/concrete_lease_mgr.h index eee8943935..d1ec4bb286 100644 --- a/src/lib/dhcpsrv/testutils/concrete_lease_mgr.h +++ b/src/lib/dhcpsrv/testutils/concrete_lease_mgr.h @@ -414,7 +414,9 @@ public: virtual std::string getDescription() const override; /// @brief Returns backend version. - virtual std::pair getVersion() const override; + /// + /// @param timer_name The DB reconnect timer name. + virtual std::pair getVersion(const std::string& /* timer_name */ = "") const override; /// @brief Commit transactions virtual void commit() override; diff --git a/src/lib/dhcpsrv/testutils/generic_cb_recovery_unittest.cc b/src/lib/dhcpsrv/testutils/generic_cb_recovery_unittest.cc index 87e3ce2901..d081e03b3a 100644 --- a/src/lib/dhcpsrv/testutils/generic_cb_recovery_unittest.cc +++ b/src/lib/dhcpsrv/testutils/generic_cb_recovery_unittest.cc @@ -41,6 +41,7 @@ GenericConfigBackendDbLostCallbackTest::SetUp() { DatabaseConnection::db_lost_callback_ = 0; DatabaseConnection::db_recovered_callback_ = 0; DatabaseConnection::db_failed_callback_ = 0; + isc::db::DatabaseConnection::setIOService(io_service_); setConfigBackendImplIOService(io_service_); isc::dhcp::TimerMgr::instance()->setIOService(io_service_); isc::dhcp::CfgMgr::instance().clear(); @@ -61,11 +62,256 @@ GenericConfigBackendDbLostCallbackTest::TearDown() { DatabaseConnection::db_lost_callback_ = 0; DatabaseConnection::db_recovered_callback_ = 0; DatabaseConnection::db_failed_callback_ = 0; + isc::db::DatabaseConnection::setIOService(IOServicePtr()); setConfigBackendImplIOService(IOServicePtr()); isc::dhcp::TimerMgr::instance()->unregisterTimers(); isc::dhcp::CfgMgr::instance().clear(); } +void +GenericConfigBackendDbLostCallbackTest::testRetryOpenDbLostAndRecoveredCallback() { + // Set the connectivity lost callback. + DatabaseConnection::db_lost_callback_ = + std::bind(&GenericConfigBackendDbLostCallbackTest::db_lost_callback, this, ph::_1); + + // Set the connectivity recovered callback. + DatabaseConnection::db_recovered_callback_ = + std::bind(&GenericConfigBackendDbLostCallbackTest::db_recovered_callback, this, ph::_1); + + // Set the connectivity failed callback. + DatabaseConnection::db_failed_callback_ = + std::bind(&GenericConfigBackendDbLostCallbackTest::db_failed_callback, this, ph::_1); + + std::string access = invalidConnectionString(); + access += " retry-on-startup=true"; + + ConfigControlInfoPtr config_ctl_info(new ConfigControlInfo()); + config_ctl_info->addConfigDatabase(access); + CfgMgr::instance().getCurrentCfg()->setConfigControlInfo(config_ctl_info); + + std::shared_ptr dbr(new DbConnectionInitWithRetry); + + // Connect to the CB backend. + ASSERT_THROW(addBackend(access), DbOpenErrorWithRetry); + + dbr.reset(); + + // Verify we can execute a query. We don't care about the answer. + ServerCollection servers; + + // A query should fail with NoSuchDatabase,. + ASSERT_THROW(servers = getAllServers(), NoSuchDatabase); + + access = validConnectionString(); + CfgMgr::instance().clear(); + // by adding an invalid access will cause the manager factory to throw + // resulting in failure to recreate the manager + config_ctl_info.reset(new ConfigControlInfo()); + config_ctl_info->addConfigDatabase(access); + CfgMgr::instance().getCurrentCfg()->setConfigControlInfo(config_ctl_info); + const ConfigDbInfoList& cfg = CfgMgr::instance().getCurrentCfg()->getConfigControlInfo()->getConfigDatabases(); + (const_cast(cfg))[0].setAccessString(access, true); + + io_service_->poll(); + + // Our lost and recovered connectivity callback should have been invoked. + EXPECT_EQ(1, db_lost_callback_called_); + EXPECT_EQ(1, db_recovered_callback_called_); + EXPECT_EQ(0, db_failed_callback_called_); + + // Verify we can execute a query. We don't care about the answer. + ASSERT_NO_THROW_LOG(servers = getAllServers()); +} + +void +GenericConfigBackendDbLostCallbackTest::testRetryOpenDbLostAndFailedCallback() { + // Set the connectivity lost callback. + DatabaseConnection::db_lost_callback_ = + std::bind(&GenericConfigBackendDbLostCallbackTest::db_lost_callback, this, ph::_1); + + // Set the connectivity recovered callback. + DatabaseConnection::db_recovered_callback_ = + std::bind(&GenericConfigBackendDbLostCallbackTest::db_recovered_callback, this, ph::_1); + + // Set the connectivity failed callback. + DatabaseConnection::db_failed_callback_ = + std::bind(&GenericConfigBackendDbLostCallbackTest::db_failed_callback, this, ph::_1); + + std::string access = invalidConnectionString(); + access += " retry-on-startup=true"; + + ConfigControlInfoPtr config_ctl_info(new ConfigControlInfo()); + config_ctl_info->addConfigDatabase(access); + CfgMgr::instance().getCurrentCfg()->setConfigControlInfo(config_ctl_info); + + std::shared_ptr dbr(new DbConnectionInitWithRetry); + + // Connect to the CB backend. + ASSERT_THROW(addBackend(access), DbOpenErrorWithRetry); + + dbr.reset(); + + // Verify we can execute a query. We don't care about the answer. + ServerCollection servers; + + // A query should fail with NoSuchDatabase,. + ASSERT_THROW(servers = getAllServers(), NoSuchDatabase); + + io_service_->poll(); + + // Our lost and failed connectivity callback should have been invoked. + EXPECT_EQ(1, db_lost_callback_called_); + EXPECT_EQ(0, db_recovered_callback_called_); + EXPECT_EQ(1, db_failed_callback_called_); + + // A query should fail with NoSuchDatabase,. + ASSERT_THROW(servers = getAllServers(), NoSuchDatabase); +} + +void +GenericConfigBackendDbLostCallbackTest::testRetryOpenDbLostAndRecoveredAfterTimeoutCallback() { + // Set the connectivity lost callback. + DatabaseConnection::db_lost_callback_ = + std::bind(&GenericConfigBackendDbLostCallbackTest::db_lost_callback, this, ph::_1); + + // Set the connectivity recovered callback. + DatabaseConnection::db_recovered_callback_ = + std::bind(&GenericConfigBackendDbLostCallbackTest::db_recovered_callback, this, ph::_1); + + // Set the connectivity failed callback. + DatabaseConnection::db_failed_callback_ = + std::bind(&GenericConfigBackendDbLostCallbackTest::db_failed_callback, this, ph::_1); + + std::string access = invalidConnectionString(); + std::string extra = " max-reconnect-tries=3 reconnect-wait-time=1 retry-on-startup=true"; + access += extra; + + ConfigControlInfoPtr config_ctl_info(new ConfigControlInfo()); + config_ctl_info->addConfigDatabase(access); + CfgMgr::instance().getCurrentCfg()->setConfigControlInfo(config_ctl_info); + + std::shared_ptr dbr(new DbConnectionInitWithRetry); + + // Connect to the CB backend. + ASSERT_THROW(addBackend(access), DbOpenErrorWithRetry); + + dbr.reset(); + + // Verify we can execute a query. We don't care about the answer. + ServerCollection servers; + + // A query should fail with NoSuchDatabase,. + ASSERT_THROW(servers = getAllServers(), NoSuchDatabase); + + io_service_->poll(); + + // Our lost connectivity callback should have been invoked. + EXPECT_EQ(1, db_lost_callback_called_); + EXPECT_EQ(0, db_recovered_callback_called_); + EXPECT_EQ(0, db_failed_callback_called_); + + access = validConnectionString(); + access += extra; + CfgMgr::instance().clear(); + config_ctl_info.reset(new ConfigControlInfo()); + config_ctl_info->addConfigDatabase(access); + CfgMgr::instance().getCurrentCfg()->setConfigControlInfo(config_ctl_info); + + sleep(1); + + io_service_->poll(); + + // Our lost and recovered connectivity callback should have been invoked. + EXPECT_EQ(2, db_lost_callback_called_); + EXPECT_EQ(1, db_recovered_callback_called_); + EXPECT_EQ(0, db_failed_callback_called_); + + // Verify we can execute a query. We don't care about the answer. + ASSERT_NO_THROW_LOG(servers = getAllServers()); + + sleep(1); + + io_service_->poll(); + + // No callback should have been invoked. + EXPECT_EQ(2, db_lost_callback_called_); + EXPECT_EQ(1, db_recovered_callback_called_); + EXPECT_EQ(0, db_failed_callback_called_); + + // Verify we can execute a query. We don't care about the answer. + ASSERT_NO_THROW_LOG(servers = getAllServers()); +} + +void +GenericConfigBackendDbLostCallbackTest::testRetryOpenDbLostAndFailedAfterTimeoutCallback() { + // Set the connectivity lost callback. + DatabaseConnection::db_lost_callback_ = + std::bind(&GenericConfigBackendDbLostCallbackTest::db_lost_callback, this, ph::_1); + + // Set the connectivity recovered callback. + DatabaseConnection::db_recovered_callback_ = + std::bind(&GenericConfigBackendDbLostCallbackTest::db_recovered_callback, this, ph::_1); + + // Set the connectivity failed callback. + DatabaseConnection::db_failed_callback_ = + std::bind(&GenericConfigBackendDbLostCallbackTest::db_failed_callback, this, ph::_1); + + std::string access = invalidConnectionString(); + std::string extra = " max-reconnect-tries=3 reconnect-wait-time=1 retry-on-startup=true"; + access += extra; + + ConfigControlInfoPtr config_ctl_info(new ConfigControlInfo()); + config_ctl_info->addConfigDatabase(access); + CfgMgr::instance().getCurrentCfg()->setConfigControlInfo(config_ctl_info); + + std::shared_ptr dbr(new DbConnectionInitWithRetry); + + // Connect to the CB backend. + ASSERT_THROW(addBackend(access), DbOpenErrorWithRetry); + + dbr.reset(); + + // Verify we can execute a query. We don't care about the answer. + ServerCollection servers; + + // A query should fail with NoSuchDatabase,. + ASSERT_THROW(servers = getAllServers(), NoSuchDatabase); + + io_service_->poll(); + + // Our lost connectivity callback should have been invoked. + EXPECT_EQ(1, db_lost_callback_called_); + EXPECT_EQ(0, db_recovered_callback_called_); + EXPECT_EQ(0, db_failed_callback_called_); + + // A query should fail with NoSuchDatabase,. + ASSERT_THROW(servers = getAllServers(), NoSuchDatabase); + + sleep(1); + + io_service_->poll(); + + // Our lost connectivity callback should have been invoked. + EXPECT_EQ(2, db_lost_callback_called_); + EXPECT_EQ(0, db_recovered_callback_called_); + EXPECT_EQ(0, db_failed_callback_called_); + + // A query should fail with NoSuchDatabase,. + ASSERT_THROW(servers = getAllServers(), NoSuchDatabase); + + sleep(1); + + io_service_->poll(); + + // Our lost and failed connectivity callback should have been invoked. + EXPECT_EQ(3, db_lost_callback_called_); + EXPECT_EQ(0, db_recovered_callback_called_); + EXPECT_EQ(1, db_failed_callback_called_); + + // A query should fail with NoSuchDatabase,. + ASSERT_THROW(servers = getAllServers(), NoSuchDatabase); +} + void GenericConfigBackendDbLostCallbackTest::testNoCallbackOnOpenFailure() { DatabaseConnection::db_lost_callback_ = @@ -158,6 +404,7 @@ GenericConfigBackendDbLostCallbackTest::testDbLostAndFailedCallback() { std::bind(&GenericConfigBackendDbLostCallbackTest::db_failed_callback, this, ph::_1); std::string access = validConnectionString(); + ConfigControlInfoPtr config_ctl_info(new ConfigControlInfo()); config_ctl_info->addConfigDatabase(access); CfgMgr::instance().getCurrentCfg()->setConfigControlInfo(config_ctl_info); @@ -221,6 +468,7 @@ GenericConfigBackendDbLostCallbackTest::testDbLostAndRecoveredAfterTimeoutCallba std::string access = validConnectionString(); std::string extra = " max-reconnect-tries=3 reconnect-wait-time=1"; access += extra; + ConfigControlInfoPtr config_ctl_info(new ConfigControlInfo()); config_ctl_info->addConfigDatabase(access); CfgMgr::instance().getCurrentCfg()->setConfigControlInfo(config_ctl_info); @@ -310,6 +558,7 @@ GenericConfigBackendDbLostCallbackTest::testDbLostAndFailedAfterTimeoutCallback( std::string access = validConnectionString(); std::string extra = " max-reconnect-tries=3 reconnect-wait-time=1"; access += extra; + ConfigControlInfoPtr config_ctl_info(new ConfigControlInfo()); config_ctl_info->addConfigDatabase(access); CfgMgr::instance().getCurrentCfg()->setConfigControlInfo(config_ctl_info); diff --git a/src/lib/dhcpsrv/testutils/generic_cb_recovery_unittest.h b/src/lib/dhcpsrv/testutils/generic_cb_recovery_unittest.h index af1ce4b684..0fd7293260 100644 --- a/src/lib/dhcpsrv/testutils/generic_cb_recovery_unittest.h +++ b/src/lib/dhcpsrv/testutils/generic_cb_recovery_unittest.h @@ -72,6 +72,48 @@ public: /// we created. virtual void TearDown(); + /// @brief Verifies the CB manager's behavior if DB connection can not be + /// established but succeeds on retry + /// + /// This function creates a CB manager with a back end that supports + /// connectivity lost callback. It verifies that connectivity is unavailable + /// and then recovered on retry: + /// -# The registered DbLostCallback was invoked + /// -# The registered DbRecoveredCallback was invoked + void testRetryOpenDbLostAndRecoveredCallback(); + + /// @brief Verifies the CB manager's behavior if DB connection can not be + /// established but fails on retry + /// + /// This function creates a CB manager with a back end that supports + /// connectivity lost callback. It verifies that connectivity is unavailable + /// and then fails again on retry: + /// -# The registered DbLostCallback was invoked + /// -# The registered DbFailedCallback was invoked + void testRetryOpenDbLostAndFailedCallback(); + + /// @brief Verifies the CB manager's behavior if DB connection can not be + /// established but succeeds on retry + /// + /// This function creates a CB manager with a back end that supports + /// connectivity lost callback. It verifies that connectivity is unavailable + /// and then recovered on retry: + /// -# The registered DbLostCallback was invoked + /// -# The registered DbRecoveredCallback was invoked after two reconnect + /// attempts (once failing and second triggered by timer) + void testRetryOpenDbLostAndRecoveredAfterTimeoutCallback(); + + /// @brief Verifies the CB manager's behavior if DB connection can not be + /// established but fails on retry + /// + /// This function creates a CB manager with a back end that supports + /// connectivity lost callback. It verifies that connectivity is unavailable + /// and then fails again on retry: + /// -# The registered DbLostCallback was invoked + /// -# The registered DbFailedCallback was invoked after two reconnect + /// attempts (once failing and second triggered by timer) + void testRetryOpenDbLostAndFailedAfterTimeoutCallback(); + /// @brief Verifies open failures do NOT invoke db lost callback /// /// The db lost callback should only be invoked after successfully @@ -86,7 +128,7 @@ public: /// valid query. Next it simulates connectivity lost by identifying and /// closing the socket connection to the CB backend. It then reissues the /// query and verifies that: - /// -# The Query throws DbOperationError (rather than exiting) + /// -# The Query throws DbOperationError (rather than exiting) /// -# The registered DbLostCallback was invoked /// -# The registered DbRecoveredCallback was invoked void testDbLostAndRecoveredCallback(); @@ -98,7 +140,7 @@ public: /// valid query. Next it simulates connectivity lost by identifying and /// closing the socket connection to the CB backend. It then reissues the /// query and verifies that: - /// -# The Query throws DbOperationError (rather than exiting) + /// -# The Query throws DbOperationError (rather than exiting) /// -# The registered DbLostCallback was invoked /// -# The registered DbFailedCallback was invoked void testDbLostAndFailedCallback(); @@ -110,7 +152,7 @@ public: /// valid query. Next it simulates connectivity lost by identifying and /// closing the socket connection to the CB backend. It then reissues the /// query and verifies that: - /// -# The Query throws DbOperationError (rather than exiting) + /// -# The Query throws DbOperationError (rather than exiting) /// -# The registered DbLostCallback was invoked /// -# The registered DbRecoveredCallback was invoked after two reconnect /// attempts (once failing and second triggered by timer) @@ -123,7 +165,7 @@ public: /// valid query. Next it simulates connectivity lost by identifying and /// closing the socket connection to the CB backend. It then reissues the /// query and verifies that: - /// -# The Query throws DbOperationError (rather than exiting) + /// -# The Query throws DbOperationError (rather than exiting) /// -# The registered DbLostCallback was invoked /// -# The registered DbFailedCallback was invoked after two reconnect /// attempts (once failing and second triggered by timer) diff --git a/src/lib/dhcpsrv/testutils/generic_host_data_source_unittest.cc b/src/lib/dhcpsrv/testutils/generic_host_data_source_unittest.cc index a7462ac602..1dbc92026d 100644 --- a/src/lib/dhcpsrv/testutils/generic_host_data_source_unittest.cc +++ b/src/lib/dhcpsrv/testutils/generic_host_data_source_unittest.cc @@ -2674,6 +2674,216 @@ GenericHostDataSourceTest::testMultipleHosts6() { ASSERT_NO_THROW(hdsptr_->add(host2)); } +void +HostMgrDbLostCallbackTest::testRetryOpenDbLostAndRecoveredCallback() { + // Set the connectivity lost callback. + isc::db::DatabaseConnection::db_lost_callback_ = + std::bind(&HostMgrDbLostCallbackTest::db_lost_callback, this, ph::_1); + + // Set the connectivity recovered callback. + isc::db::DatabaseConnection::db_recovered_callback_ = + std::bind(&HostMgrDbLostCallbackTest::db_recovered_callback, this, ph::_1); + + // Set the connectivity failed callback. + isc::db::DatabaseConnection::db_failed_callback_ = + std::bind(&HostMgrDbLostCallbackTest::db_failed_callback, this, ph::_1); + + std::string access = invalidConnectString(); + access += " retry-on-startup=true"; + CfgMgr::instance().getCurrentCfg()->getCfgDbAccess()->setHostDbAccessString(access); + + std::shared_ptr dbr(new DbConnectionInitWithRetry); + + // Create the HostMgr. + HostMgr::create(); + + ASSERT_THROW(HostMgr::addBackend(access), DbOpenErrorWithRetry); + + dbr.reset(); + + ASSERT_FALSE(HostMgr::instance().getHostDataSource()); + + access = validConnectString(); + access += " retry-on-startup=true"; + CfgMgr::instance().clear(); + CfgMgr::instance().getCurrentCfg()->getCfgDbAccess()->setHostDbAccessString(access); + + io_service_->poll(); + + // Our lost and recovered connectivity callback should have been invoked. + EXPECT_EQ(1, db_lost_callback_called_); + EXPECT_EQ(1, db_recovered_callback_called_); + EXPECT_EQ(0, db_failed_callback_called_); + + ASSERT_TRUE(HostMgr::instance().getHostDataSource()); +} + +void +HostMgrDbLostCallbackTest::testRetryOpenDbLostAndFailedCallback() { + // Set the connectivity lost callback. + isc::db::DatabaseConnection::db_lost_callback_ = + std::bind(&HostMgrDbLostCallbackTest::db_lost_callback, this, ph::_1); + + // Set the connectivity recovered callback. + isc::db::DatabaseConnection::db_recovered_callback_ = + std::bind(&HostMgrDbLostCallbackTest::db_recovered_callback, this, ph::_1); + + // Set the connectivity failed callback. + isc::db::DatabaseConnection::db_failed_callback_ = + std::bind(&HostMgrDbLostCallbackTest::db_failed_callback, this, ph::_1); + + std::string access = invalidConnectString(); + access += " retry-on-startup=true"; + CfgMgr::instance().getCurrentCfg()->getCfgDbAccess()->setHostDbAccessString(access); + + std::shared_ptr dbr(new DbConnectionInitWithRetry); + + // Create the HostMgr. + HostMgr::create(); + + ASSERT_THROW(HostMgr::addBackend(access), DbOpenErrorWithRetry); + + dbr.reset(); + + ASSERT_FALSE(HostMgr::instance().getHostDataSource()); + + io_service_->poll(); + + // Our lost and failed connectivity callback should have been invoked. + EXPECT_EQ(1, db_lost_callback_called_); + EXPECT_EQ(0, db_recovered_callback_called_); + EXPECT_EQ(1, db_failed_callback_called_); + + ASSERT_FALSE(HostMgr::instance().getHostDataSource()); +} + +void +HostMgrDbLostCallbackTest::testRetryOpenDbLostAndRecoveredAfterTimeoutCallback() { + // Set the connectivity lost callback. + isc::db::DatabaseConnection::db_lost_callback_ = + std::bind(&HostMgrDbLostCallbackTest::db_lost_callback, this, ph::_1); + + // Set the connectivity recovered callback. + isc::db::DatabaseConnection::db_recovered_callback_ = + std::bind(&HostMgrDbLostCallbackTest::db_recovered_callback, this, ph::_1); + + // Set the connectivity failed callback. + isc::db::DatabaseConnection::db_failed_callback_ = + std::bind(&HostMgrDbLostCallbackTest::db_failed_callback, this, ph::_1); + + std::string access = invalidConnectString(); + std::string extra = " max-reconnect-tries=3 reconnect-wait-time=1 retry-on-startup=true"; + access += extra; + CfgMgr::instance().getCurrentCfg()->getCfgDbAccess()->setHostDbAccessString(access); + + std::shared_ptr dbr(new DbConnectionInitWithRetry); + + // Create the HostMgr. + HostMgr::create(); + + ASSERT_THROW(HostMgr::addBackend(access), DbOpenErrorWithRetry); + + dbr.reset(); + + ASSERT_FALSE(HostMgr::instance().getHostDataSource()); + + io_service_->poll(); + + // Our lost connectivity callback should have been invoked. + EXPECT_EQ(1, db_lost_callback_called_); + EXPECT_EQ(0, db_recovered_callback_called_); + EXPECT_EQ(0, db_failed_callback_called_); + + access = validConnectString(); + access += extra; + CfgMgr::instance().clear(); + CfgMgr::instance().getCurrentCfg()->getCfgDbAccess()->setHostDbAccessString(access); + + sleep(1); + + io_service_->poll(); + + // Our lost and recovered connectivity callback should have been invoked. + EXPECT_EQ(2, db_lost_callback_called_); + EXPECT_EQ(1, db_recovered_callback_called_); + EXPECT_EQ(0, db_failed_callback_called_); + + ASSERT_TRUE(HostMgr::instance().getHostDataSource()); + + sleep(1); + + io_service_->poll(); + + // No callback should have been invoked. + EXPECT_EQ(2, db_lost_callback_called_); + EXPECT_EQ(1, db_recovered_callback_called_); + EXPECT_EQ(0, db_failed_callback_called_); + + ASSERT_TRUE(HostMgr::instance().getHostDataSource()); +} + +void +HostMgrDbLostCallbackTest::testRetryOpenDbLostAndFailedAfterTimeoutCallback() { + // Set the connectivity lost callback. + isc::db::DatabaseConnection::db_lost_callback_ = + std::bind(&HostMgrDbLostCallbackTest::db_lost_callback, this, ph::_1); + + // Set the connectivity recovered callback. + isc::db::DatabaseConnection::db_recovered_callback_ = + std::bind(&HostMgrDbLostCallbackTest::db_recovered_callback, this, ph::_1); + + // Set the connectivity failed callback. + isc::db::DatabaseConnection::db_failed_callback_ = + std::bind(&HostMgrDbLostCallbackTest::db_failed_callback, this, ph::_1); + + std::string access = invalidConnectString(); + std::string extra = " max-reconnect-tries=3 reconnect-wait-time=1 retry-on-startup=true"; + access += extra; + CfgMgr::instance().getCurrentCfg()->getCfgDbAccess()->setHostDbAccessString(access); + + std::shared_ptr dbr(new DbConnectionInitWithRetry); + + // Create the HostMgr. + HostMgr::create(); + + ASSERT_THROW(HostMgr::addBackend(access), DbOpenErrorWithRetry); + + dbr.reset(); + + ASSERT_FALSE(HostMgr::instance().getHostDataSource()); + + io_service_->poll(); + + // Our lost connectivity callback should have been invoked. + EXPECT_EQ(1, db_lost_callback_called_); + EXPECT_EQ(0, db_recovered_callback_called_); + EXPECT_EQ(0, db_failed_callback_called_); + + ASSERT_FALSE(HostMgr::instance().getHostDataSource()); + + sleep(1); + + io_service_->poll(); + + // Our lost connectivity callback should have been invoked. + EXPECT_EQ(2, db_lost_callback_called_); + EXPECT_EQ(0, db_recovered_callback_called_); + EXPECT_EQ(0, db_failed_callback_called_); + + ASSERT_FALSE(HostMgr::instance().getHostDataSource()); + + sleep(1); + + io_service_->poll(); + + // Our lost and failed connectivity callback should have been invoked. + EXPECT_EQ(3, db_lost_callback_called_); + EXPECT_EQ(0, db_recovered_callback_called_); + EXPECT_EQ(1, db_failed_callback_called_); + + ASSERT_FALSE(HostMgr::instance().getHostDataSource()); +} + void HostMgrDbLostCallbackTest::testNoCallbackOnOpenFailure() { isc::db::DatabaseConnection::db_lost_callback_ = diff --git a/src/lib/dhcpsrv/testutils/generic_host_data_source_unittest.h b/src/lib/dhcpsrv/testutils/generic_host_data_source_unittest.h index 6717bbbf7c..1219d2117b 100644 --- a/src/lib/dhcpsrv/testutils/generic_host_data_source_unittest.h +++ b/src/lib/dhcpsrv/testutils/generic_host_data_source_unittest.h @@ -555,7 +555,7 @@ public: isc::db::DatabaseConnection::db_lost_callback_ = 0; isc::db::DatabaseConnection::db_recovered_callback_ = 0; isc::db::DatabaseConnection::db_failed_callback_ = 0; - isc::dhcp::HostMgr::setIOService(io_service_); + isc::db::DatabaseConnection::setIOService(io_service_); isc::dhcp::TimerMgr::instance()->setIOService(io_service_); isc::dhcp::CfgMgr::instance().clear(); } @@ -564,7 +564,7 @@ public: isc::db::DatabaseConnection::db_lost_callback_ = 0; isc::db::DatabaseConnection::db_recovered_callback_ = 0; isc::db::DatabaseConnection::db_failed_callback_ = 0; - isc::dhcp::HostMgr::setIOService(isc::asiolink::IOServicePtr()); + isc::db::DatabaseConnection::setIOService(isc::asiolink::IOServicePtr()); isc::dhcp::TimerMgr::instance()->unregisterTimers(); isc::dhcp::CfgMgr::instance().clear(); } @@ -606,6 +606,50 @@ public: /// string virtual std::string invalidConnectString() = 0; + /// @brief Verifies the host manager's behavior if DB connection can not be + /// established but succeeds on retry + /// + /// This function creates a host manager with a back end that supports + /// connectivity lost callback (currently only MySQL and PostgreSQL). It + /// verifies that connectivity is unavailable and then recovered on retry: + /// -# The registered DbLostCallback was invoked + /// -# The registered DbRecoveredCallback was invoked + void testRetryOpenDbLostAndRecoveredCallback(); + + /// @brief Verifies the host manager's behavior if DB connection can not be + /// established but fails on retry + /// + /// This function creates a host manager with a back end that supports + /// connectivity lost callback (currently only MySQL and PostgreSQL). It + /// It verifies that connectivity is unavailable and then fails again on + /// retry: + /// -# The registered DbLostCallback was invoked + /// -# The registered DbFailedCallback was invoked + void testRetryOpenDbLostAndFailedCallback(); + + /// @brief Verifies the host manager's behavior if DB connection can not be + /// established but succeeds on retry + /// + /// This function creates a host manager with a back end that supports + /// connectivity lost callback (currently only MySQL and PostgreSQL). It + /// verifies that connectivity is unavailable and then recovered on retry: + /// -# The registered DbLostCallback was invoked + /// -# The registered DbRecoveredCallback was invoked after two reconnect + /// attempts (once failing and second triggered by timer) + void testRetryOpenDbLostAndRecoveredAfterTimeoutCallback(); + + /// @brief Verifies the host manager's behavior if DB connection can not be + /// established but fails on retry + /// + /// This function creates a host manager with a back end that supports + /// connectivity lost callback (currently only MySQL and PostgreSQL). It + /// It verifies that connectivity is unavailable and then fails again on + /// retry: + /// -# The registered DbLostCallback was invoked + /// -# The registered DbFailedCallback was invoked after two reconnect + /// attempts (once failing and second triggered by timer) + void testRetryOpenDbLostAndFailedAfterTimeoutCallback(); + /// @brief Verifies open failures do NOT invoke db lost callback /// /// The db lost callback should only be invoked after successfully @@ -620,7 +664,7 @@ public: /// verifies connectivity by issuing a known valid query. Next it simulates /// connectivity lost by identifying and closing the socket connection to /// the CB backend. It then reissues the query and verifies that: - /// -# The Query throws DbOperationError (rather than exiting) + /// -# The Query throws DbOperationError (rather than exiting) /// -# The registered DbLostCallback was invoked /// -# The registered DbRecoveredCallback was invoked void testDbLostAndRecoveredCallback(); @@ -632,7 +676,7 @@ public: /// verifies connectivity by issuing a known valid query. Next it simulates /// connectivity lost by identifying and closing the socket connection to /// the CB backend. It then reissues the query and verifies that: - /// -# The Query throws DbOperationError (rather than exiting) + /// -# The Query throws DbOperationError (rather than exiting) /// -# The registered DbLostCallback was invoked /// -# The registered DbFailedCallback was invoked void testDbLostAndFailedCallback(); @@ -644,7 +688,7 @@ public: /// verifies connectivity by issuing a known valid query. Next it simulates /// connectivity lost by identifying and closing the socket connection to /// the CB backend. It then reissues the query and verifies that: - /// -# The Query throws DbOperationError (rather than exiting) + /// -# The Query throws DbOperationError (rather than exiting) /// -# The registered DbLostCallback was invoked /// -# The registered DbRecoveredCallback was invoked after two reconnect /// attempts (once failing and second triggered by timer) @@ -657,7 +701,7 @@ public: /// verifies connectivity by issuing a known valid query. Next it simulates /// connectivity lost by identifying and closing the socket connection to /// the CB backend. It then reissues the query and verifies that: - /// -# The Query throws DbOperationError (rather than exiting) + /// -# The Query throws DbOperationError (rather than exiting) /// -# The registered DbLostCallback was invoked /// -# The registered DbFailedCallback was invoked after two reconnect /// attempts (once failing and second triggered by timer) @@ -1034,7 +1078,7 @@ protected: /// @brief Utility function that returns true if a given data source /// is primary (it isn't an alternate source). - /// @param data_source Host data source to check. + /// @param data_source Host data source to check. /// @return True if the data source is primary. Otherwise, false. bool isPrimaryDataSource(const BaseHostDataSource& data_source) const; diff --git a/src/lib/dhcpsrv/tests/generic_lease_mgr_unittest.cc b/src/lib/dhcpsrv/testutils/generic_lease_mgr_unittest.cc similarity index 96% rename from src/lib/dhcpsrv/tests/generic_lease_mgr_unittest.cc rename to src/lib/dhcpsrv/testutils/generic_lease_mgr_unittest.cc index ad2f23f370..8dde2684b8 100644 --- a/src/lib/dhcpsrv/tests/generic_lease_mgr_unittest.cc +++ b/src/lib/dhcpsrv/testutils/generic_lease_mgr_unittest.cc @@ -12,7 +12,7 @@ #include #include #include -#include +#include #include #include #include @@ -3350,6 +3350,204 @@ LeaseMgrDbLostCallbackTest::TearDown() { isc::dhcp::LeaseMgrFactory::destroy(); } +void +LeaseMgrDbLostCallbackTest::testRetryOpenDbLostAndRecoveredCallback() { + // Set the connectivity lost callback. + DatabaseConnection::db_lost_callback_ = + std::bind(&LeaseMgrDbLostCallbackTest::db_lost_callback, this, ph::_1); + + // Set the connectivity recovered callback. + DatabaseConnection::db_recovered_callback_ = + std::bind(&LeaseMgrDbLostCallbackTest::db_recovered_callback, this, ph::_1); + + // Set the connectivity failed callback. + DatabaseConnection::db_failed_callback_ = + std::bind(&LeaseMgrDbLostCallbackTest::db_failed_callback, this, ph::_1); + + std::string access = invalidConnectString(); + access += " retry-on-startup=true"; + CfgMgr::instance().getCurrentCfg()->getCfgDbAccess()->setLeaseDbAccessString(access); + + std::shared_ptr dbr(new DbConnectionInitWithRetry); + + // Connect to the lease backend. + ASSERT_THROW(LeaseMgrFactory::create(access), DbOpenErrorWithRetry); + + dbr.reset(); + + ASSERT_FALSE(LeaseMgrFactory::haveInstance()); + + access = validConnectString(); + access += " retry-on-startup=true"; + CfgMgr::instance().getCurrentCfg()->getCfgDbAccess()->setLeaseDbAccessString(access); + + io_service_->poll(); + + // Our lost and recovered connectivity callback should have been invoked. + EXPECT_EQ(1, db_lost_callback_called_); + EXPECT_EQ(1, db_recovered_callback_called_); + EXPECT_EQ(0, db_failed_callback_called_); + + ASSERT_TRUE(LeaseMgrFactory::haveInstance()); +} + +void +LeaseMgrDbLostCallbackTest::testRetryOpenDbLostAndFailedCallback() { + // Set the connectivity lost callback. + DatabaseConnection::db_lost_callback_ = + std::bind(&LeaseMgrDbLostCallbackTest::db_lost_callback, this, ph::_1); + + // Set the connectivity recovered callback. + DatabaseConnection::db_recovered_callback_ = + std::bind(&LeaseMgrDbLostCallbackTest::db_recovered_callback, this, ph::_1); + + // Set the connectivity failed callback. + DatabaseConnection::db_failed_callback_ = + std::bind(&LeaseMgrDbLostCallbackTest::db_failed_callback, this, ph::_1); + + std::string access = invalidConnectString(); + access += " retry-on-startup=true"; + CfgMgr::instance().getCurrentCfg()->getCfgDbAccess()->setLeaseDbAccessString(access); + + std::shared_ptr dbr(new DbConnectionInitWithRetry); + + // Connect to the lease backend. + ASSERT_THROW(LeaseMgrFactory::create(access), DbOpenErrorWithRetry); + + dbr.reset(); + + ASSERT_FALSE(LeaseMgrFactory::haveInstance()); + + io_service_->poll(); + + // Our lost and failed connectivity callback should have been invoked. + EXPECT_EQ(1, db_lost_callback_called_); + EXPECT_EQ(0, db_recovered_callback_called_); + EXPECT_EQ(1, db_failed_callback_called_); + + ASSERT_FALSE(LeaseMgrFactory::haveInstance()); +} + +void +LeaseMgrDbLostCallbackTest::testRetryOpenDbLostAndRecoveredAfterTimeoutCallback() { + // Set the connectivity lost callback. + DatabaseConnection::db_lost_callback_ = + std::bind(&LeaseMgrDbLostCallbackTest::db_lost_callback, this, ph::_1); + + // Set the connectivity recovered callback. + DatabaseConnection::db_recovered_callback_ = + std::bind(&LeaseMgrDbLostCallbackTest::db_recovered_callback, this, ph::_1); + + // Set the connectivity failed callback. + DatabaseConnection::db_failed_callback_ = + std::bind(&LeaseMgrDbLostCallbackTest::db_failed_callback, this, ph::_1); + + std::string access = invalidConnectString(); + std::string extra = " max-reconnect-tries=3 reconnect-wait-time=1 retry-on-startup=true"; + access += extra; + CfgMgr::instance().getCurrentCfg()->getCfgDbAccess()->setLeaseDbAccessString(access); + + std::shared_ptr dbr(new DbConnectionInitWithRetry); + + // Connect to the lease backend. + ASSERT_THROW(LeaseMgrFactory::create(access), DbOpenErrorWithRetry); + + dbr.reset(); + + ASSERT_FALSE(LeaseMgrFactory::haveInstance()); + + io_service_->poll(); + + // Our lost connectivity callback should have been invoked. + EXPECT_EQ(1, db_lost_callback_called_); + EXPECT_EQ(0, db_recovered_callback_called_); + EXPECT_EQ(0, db_failed_callback_called_); + + access = validConnectString(); + access += extra; + CfgMgr::instance().getCurrentCfg()->getCfgDbAccess()->setLeaseDbAccessString(access); + + sleep(1); + + io_service_->poll(); + + // Our lost and recovered connectivity callback should have been invoked. + EXPECT_EQ(2, db_lost_callback_called_); + EXPECT_EQ(1, db_recovered_callback_called_); + EXPECT_EQ(0, db_failed_callback_called_); + + ASSERT_TRUE(LeaseMgrFactory::haveInstance()); + + sleep(1); + + io_service_->poll(); + + // No callback should have been invoked. + EXPECT_EQ(2, db_lost_callback_called_); + EXPECT_EQ(1, db_recovered_callback_called_); + EXPECT_EQ(0, db_failed_callback_called_); + + ASSERT_TRUE(LeaseMgrFactory::haveInstance()); +} + +void +LeaseMgrDbLostCallbackTest::testRetryOpenDbLostAndFailedAfterTimeoutCallback() { + // Set the connectivity lost callback. + DatabaseConnection::db_lost_callback_ = + std::bind(&LeaseMgrDbLostCallbackTest::db_lost_callback, this, ph::_1); + + // Set the connectivity recovered callback. + DatabaseConnection::db_recovered_callback_ = + std::bind(&LeaseMgrDbLostCallbackTest::db_recovered_callback, this, ph::_1); + + // Set the connectivity failed callback. + DatabaseConnection::db_failed_callback_ = + std::bind(&LeaseMgrDbLostCallbackTest::db_failed_callback, this, ph::_1); + + std::string access = invalidConnectString(); + std::string extra = " max-reconnect-tries=3 reconnect-wait-time=1 retry-on-startup=true"; + access += extra; + CfgMgr::instance().getCurrentCfg()->getCfgDbAccess()->setLeaseDbAccessString(access); + + std::shared_ptr dbr(new DbConnectionInitWithRetry); + + // Connect to the lease backend. + ASSERT_THROW(LeaseMgrFactory::create(access), DbOpenErrorWithRetry); + + dbr.reset(); + + ASSERT_FALSE(LeaseMgrFactory::haveInstance()); + + io_service_->poll(); + + // Our lost connectivity callback should have been invoked. + EXPECT_EQ(1, db_lost_callback_called_); + EXPECT_EQ(0, db_recovered_callback_called_); + EXPECT_EQ(0, db_failed_callback_called_); + + sleep(1); + + io_service_->poll(); + + // Our lost connectivity callback should have been invoked. + EXPECT_EQ(2, db_lost_callback_called_); + EXPECT_EQ(0, db_recovered_callback_called_); + EXPECT_EQ(0, db_failed_callback_called_); + + ASSERT_FALSE(LeaseMgrFactory::haveInstance()); + + sleep(1); + + io_service_->poll(); + + // Our lost and failed connectivity callback should have been invoked. + EXPECT_EQ(3, db_lost_callback_called_); + EXPECT_EQ(0, db_recovered_callback_called_); + EXPECT_EQ(1, db_failed_callback_called_); + + ASSERT_FALSE(LeaseMgrFactory::haveInstance()); +} + void LeaseMgrDbLostCallbackTest::testNoCallbackOnOpenFailure() { DatabaseConnection::db_lost_callback_ = diff --git a/src/lib/dhcpsrv/tests/generic_lease_mgr_unittest.h b/src/lib/dhcpsrv/testutils/generic_lease_mgr_unittest.h similarity index 91% rename from src/lib/dhcpsrv/tests/generic_lease_mgr_unittest.h rename to src/lib/dhcpsrv/testutils/generic_lease_mgr_unittest.h index 47ec9e1bcb..2c5bfd2228 100644 --- a/src/lib/dhcpsrv/tests/generic_lease_mgr_unittest.h +++ b/src/lib/dhcpsrv/testutils/generic_lease_mgr_unittest.h @@ -8,6 +8,7 @@ #define GENERIC_LEASE_MGR_UNITTEST_H #include +#include #include #include @@ -551,7 +552,7 @@ public: /// } /// } /// - /// @param classes list of classes to include in the context + /// @param classes list of classes to include in the context /// @return ElementPtr containing the user-context data::ElementPtr makeContextWithClasses(const std::list& classes); @@ -682,7 +683,7 @@ public: db::DatabaseConnection::db_lost_callback_ = 0; db::DatabaseConnection::db_recovered_callback_ = 0; db::DatabaseConnection::db_failed_callback_ = 0; - LeaseMgr::setIOService(io_service_); + db::DatabaseConnection::setIOService(io_service_); TimerMgr::instance()->setIOService(io_service_); } @@ -690,7 +691,7 @@ public: db::DatabaseConnection::db_lost_callback_ = 0; db::DatabaseConnection::db_recovered_callback_ = 0; db::DatabaseConnection::db_failed_callback_ = 0; - LeaseMgr::setIOService(isc::asiolink::IOServicePtr()); + db::DatabaseConnection::setIOService(isc::asiolink::IOServicePtr()); TimerMgr::instance()->unregisterTimers(); } @@ -720,6 +721,50 @@ public: /// string virtual std::string invalidConnectString() = 0; + /// @brief Verifies the lease manager's behavior if DB connection can not be + /// established but succeeds on retry + /// + /// This function creates a lease manager with a back end that supports + /// connectivity lost callback (currently only MySQL and PostgreSQL). It + /// verifies that connectivity is unavailable and then recovered on retry: + /// -# The registered DbLostCallback was invoked + /// -# The registered DbRecoveredCallback was invoked + void testRetryOpenDbLostAndRecoveredCallback(); + + /// @brief Verifies the lease manager's behavior if DB connection can not be + /// established but fails on retry + /// + /// This function creates a lease manager with a back end that supports + /// connectivity lost callback (currently only MySQL and PostgreSQL). It + /// It verifies that connectivity is unavailable and then fails again on + /// retry: + /// -# The registered DbLostCallback was invoked + /// -# The registered DbFailedCallback was invoked + void testRetryOpenDbLostAndFailedCallback(); + + /// @brief Verifies the lease manager's behavior if DB connection can not be + /// established but succeeds on retry + /// + /// This function creates a lease manager with a back end that supports + /// connectivity lost callback (currently only MySQL and PostgreSQL). It + /// verifies that connectivity is unavailable and then recovered on retry: + /// -# The registered DbLostCallback was invoked + /// -# The registered DbRecoveredCallback was invoked after two reconnect + /// attempts (once failing and second triggered by timer) + void testRetryOpenDbLostAndRecoveredAfterTimeoutCallback(); + + /// @brief Verifies the lease manager's behavior if DB connection can not be + /// established but fails on retry + /// + /// This function creates a lease manager with a back end that supports + /// connectivity lost callback (currently only MySQL and PostgreSQL). It + /// It verifies that connectivity is unavailable and then fails again on + /// retry: + /// -# The registered DbLostCallback was invoked + /// -# The registered DbFailedCallback was invoked after two reconnect + /// attempts (once failing and second triggered by timer) + void testRetryOpenDbLostAndFailedAfterTimeoutCallback(); + /// @brief Verifies open failures do NOT invoke db lost callback /// /// The db lost callback should only be invoked after successfully @@ -734,7 +779,7 @@ public: /// verifies connectivity by issuing a known valid query. Next it simulates /// connectivity lost by identifying and closing the socket connection to /// the CB backend. It then reissues the query and verifies that: - /// -# The Query throws DbOperationError (rather than exiting) + /// -# The Query throws DbOperationError (rather than exiting) /// -# The registered DbLostCallback was invoked /// -# The registered DbRecoveredCallback was invoked void testDbLostAndRecoveredCallback(); @@ -746,7 +791,7 @@ public: /// verifies connectivity by issuing a known valid query. Next it simulates /// connectivity lost by identifying and closing the socket connection to /// the CB backend. It then reissues the query and verifies that: - /// -# The Query throws DbOperationError (rather than exiting) + /// -# The Query throws DbOperationError (rather than exiting) /// -# The registered DbLostCallback was invoked /// -# The registered DbFailedCallback was invoked void testDbLostAndFailedCallback(); @@ -758,7 +803,7 @@ public: /// verifies connectivity by issuing a known valid query. Next it simulates /// connectivity lost by identifying and closing the socket connection to /// the CB backend. It then reissues the query and verifies that: - /// -# The Query throws DbOperationError (rather than exiting) + /// -# The Query throws DbOperationError (rather than exiting) /// -# The registered DbLostCallback was invoked /// -# The registered DbRecoveredCallback was invoked after two reconnect /// attempts (once failing and second triggered by timer) @@ -771,7 +816,7 @@ public: /// verifies connectivity by issuing a known valid query. Next it simulates /// connectivity lost by identifying and closing the socket connection to /// the CB backend. It then reissues the query and verifies that: - /// -# The Query throws DbOperationError (rather than exiting) + /// -# The Query throws DbOperationError (rather than exiting) /// -# The registered DbLostCallback was invoked /// -# The registered DbFailedCallback was invoked after two reconnect /// attempts (once failing and second triggered by timer) diff --git a/src/lib/dhcpsrv/timer_mgr.cc b/src/lib/dhcpsrv/timer_mgr.cc index 0f3b68f1a9..cc4005b177 100644 --- a/src/lib/dhcpsrv/timer_mgr.cc +++ b/src/lib/dhcpsrv/timer_mgr.cc @@ -88,7 +88,7 @@ public: /// @brief Sets IO service to be used by the Timer Manager. /// - /// @param io_service Pointer to the new IO service. + /// @param io_service Pointer to the IO service. void setIOService(const IOServicePtr& io_service); /// @brief Registers new timer in the @c TimerMgr. @@ -107,7 +107,6 @@ public: const long interval, const asiolink::IntervalTimer::Mode& scheduling_mode); - /// @brief Unregisters specified timer. /// /// This method cancels the timer if it is setup and removes the timer @@ -176,7 +175,6 @@ private: const long interval, const asiolink::IntervalTimer::Mode& scheduling_mode); - /// @brief Unregisters specified timer. /// /// This method cancels the timer if it is setup and removes the timer diff --git a/src/lib/dhcpsrv/timer_mgr.h b/src/lib/dhcpsrv/timer_mgr.h index f0e014b428..9eb632d2ef 100644 --- a/src/lib/dhcpsrv/timer_mgr.h +++ b/src/lib/dhcpsrv/timer_mgr.h @@ -73,7 +73,7 @@ public: /// @brief Sets IO service to be used by the Timer Manager. /// - /// @param io_service Pointer to the new IO service. + /// @param io_service Pointer to the IO service. void setIOService(const asiolink::IOServicePtr& io_service); /// @name Registering, unregistering and scheduling the timers. diff --git a/src/lib/mysql/mysql_connection.cc b/src/lib/mysql/mysql_connection.cc index 6cee30bc36..0314e4ba4c 100644 --- a/src/lib/mysql/mysql_connection.cc +++ b/src/lib/mysql/mysql_connection.cc @@ -6,6 +6,7 @@ #include +#include #include #include #include @@ -243,7 +244,23 @@ MySqlConnection::openDatabase() { MYSQL* status = mysql_real_connect(mysql_, host, user, password, name, port, NULL, CLIENT_FOUND_ROWS); if (status != mysql_) { - isc_throw(DbOpenError, mysql_error(mysql_)); + std::string error_message = mysql_error(mysql_); + + auto const& rec = reconnectCtl(); + if (rec && DatabaseConnection::retry_) { + // Start the connection recovery. + startRecoverDbConnection(); + + std::ostringstream s; + + s << " (scheduling retry " << rec->retriesLeft() << " in " << rec->retryInterval() << " milliseconds)"; + + error_message += s.str(); + + isc_throw(DbOpenErrorWithRetry, error_message); + } + + isc_throw(DbOpenError, error_message); } // Enable autocommit. In case transaction is explicitly used, this @@ -268,9 +285,16 @@ MySqlConnection::openDatabase() { // Get schema version. std::pair -MySqlConnection::getVersion(const ParameterMap& parameters) { +MySqlConnection::getVersion(const ParameterMap& parameters, + const IOServiceAccessorPtr& ac, + const DbCallback& cb, + const string& timer_name) { // Get a connection. - MySqlConnection conn(parameters); + MySqlConnection conn(parameters, ac, cb); + + if (!timer_name.empty()) { + conn.makeReconnectCtl(timer_name); + } // Open the database. conn.openDatabase(); diff --git a/src/lib/mysql/mysql_connection.h b/src/lib/mysql/mysql_connection.h index 5776fed57e..d813a0506f 100644 --- a/src/lib/mysql/mysql_connection.h +++ b/src/lib/mysql/mysql_connection.h @@ -260,6 +260,9 @@ public: /// /// @param parameters A data structure relating keywords and values /// concerned with the database. + /// @param ac An IOServiceAccessor object. + /// @param cb The dbReconnect callback. + /// @param timer_name The DB reconnect timer name. /// /// @return Version number as a pair of unsigned integers. "first" is the /// major version number, "second" the minor number. @@ -267,7 +270,10 @@ public: /// @throw isc::db::DbOperationError An operation on the open database has /// failed. static std::pair - getVersion(const ParameterMap& parameters); + getVersion(const ParameterMap& parameters, + const IOServiceAccessorPtr& ac = IOServiceAccessorPtr(), + const DbCallback& cb = DbCallback(), + const std::string& timer_name = ""); /// @brief Prepare Single Statement /// diff --git a/src/lib/pgsql/pgsql_connection.cc b/src/lib/pgsql/pgsql_connection.cc index 6ec896d4ca..ee86f33076 100644 --- a/src/lib/pgsql/pgsql_connection.cc +++ b/src/lib/pgsql/pgsql_connection.cc @@ -6,6 +6,7 @@ #include +#include #include #include #include @@ -134,9 +135,16 @@ PgSqlConnection::~PgSqlConnection() { } std::pair -PgSqlConnection::getVersion(const ParameterMap& parameters) { +PgSqlConnection::getVersion(const ParameterMap& parameters, + const IOServiceAccessorPtr& ac, + const DbCallback& cb, + const string& timer_name) { // Get a connection. - PgSqlConnection conn(parameters); + PgSqlConnection conn(parameters, ac, cb); + + if (!timer_name.empty()) { + conn.makeReconnectCtl(timer_name); + } // Open the database. conn.openDatabaseInternal(false); @@ -294,6 +302,21 @@ PgSqlConnection::openDatabaseInternal(bool logging) { // to release it, but grab the error message first. std::string error_message = PQerrorMessage(new_conn); PQfinish(new_conn); + + auto const& rec = reconnectCtl(); + if (rec && DatabaseConnection::retry_) { + // Start the connection recovery. + startRecoverDbConnection(); + + std::ostringstream s; + + s << " (scheduling retry " << rec->retriesLeft() << " in " << rec->retryInterval() << " milliseconds)"; + + error_message += s.str(); + + isc_throw(DbOpenErrorWithRetry, error_message); + } + isc_throw(DbOpenError, error_message); } diff --git a/src/lib/pgsql/pgsql_connection.h b/src/lib/pgsql/pgsql_connection.h index f5d1f134ab..26eeb9bc9d 100644 --- a/src/lib/pgsql/pgsql_connection.h +++ b/src/lib/pgsql/pgsql_connection.h @@ -230,6 +230,9 @@ public: /// /// @param parameters A data structure relating keywords and values /// concerned with the database. + /// @param ac An IOServiceAccessor object. + /// @param cb The dbReconnect callback. + /// @param timer_name The DB reconnect timer name. /// /// @return Version number as a pair of unsigned integers. "first" is the /// major version number, "second" the minor number. @@ -237,7 +240,10 @@ public: /// @throw isc::db::DbOperationError An operation on the open database has /// failed. static std::pair - getVersion(const ParameterMap& parameters); + getVersion(const ParameterMap& parameters, + const IOServiceAccessorPtr& ac = IOServiceAccessorPtr(), + const DbCallback& cb = DbCallback(), + const std::string& timer_name = ""); /// @brief Prepare Single Statement /// diff --git a/src/lib/process/cb_ctl_base.h b/src/lib/process/cb_ctl_base.h index 7baf8dd725..ecbb73610c 100644 --- a/src/lib/process/cb_ctl_base.h +++ b/src/lib/process/cb_ctl_base.h @@ -9,6 +9,7 @@ #include #include +#include #include #include #include @@ -142,9 +143,15 @@ public: // Iterate over the configured DBs and instantiate them. for (auto db : config_ctl->getConfigDatabases()) { + const std::string& redacted = db.redactedAccessString(); LOG_INFO(dctl_logger, DCTL_OPEN_CONFIG_DB) - .arg(db.redactedAccessString()); - getMgr().addBackend(db.getAccessString()); + .arg(redacted); + try { + getMgr().addBackend(db.getAccessString()); + } catch (const isc::db::DbOpenErrorWithRetry& err) { + LOG_INFO(dctl_logger, DCTL_DB_OPEN_CONNECTION_WITH_RETRY_FAILED) + .arg(redacted).arg(err.what()); + } } // Let the caller know we have opened DBs. diff --git a/src/lib/process/process_messages.cc b/src/lib/process/process_messages.cc index a4ee304d3d..bd19813f1c 100644 --- a/src/lib/process/process_messages.cc +++ b/src/lib/process/process_messages.cc @@ -21,6 +21,7 @@ extern const isc::log::MessageID DCTL_CONFIG_LOAD_FAIL = "DCTL_CONFIG_LOAD_FAIL" extern const isc::log::MessageID DCTL_CONFIG_START = "DCTL_CONFIG_START"; extern const isc::log::MessageID DCTL_CONFIG_STUB = "DCTL_CONFIG_STUB"; extern const isc::log::MessageID DCTL_CONFIG_UPDATE = "DCTL_CONFIG_UPDATE"; +extern const isc::log::MessageID DCTL_DB_OPEN_CONNECTION_WITH_RETRY_FAILED = "DCTL_DB_OPEN_CONNECTION_WITH_RETRY_FAILED"; extern const isc::log::MessageID DCTL_DEVELOPMENT_VERSION = "DCTL_DEVELOPMENT_VERSION"; extern const isc::log::MessageID DCTL_INIT_PROCESS = "DCTL_INIT_PROCESS"; extern const isc::log::MessageID DCTL_INIT_PROCESS_FAIL = "DCTL_INIT_PROCESS_FAIL"; @@ -58,12 +59,13 @@ const char* values[] = { "DCTL_CONFIG_START", "parsing new configuration: %1", "DCTL_CONFIG_STUB", "%1 configuration stub handler called", "DCTL_CONFIG_UPDATE", "%1 updated configuration received: %2", + "DCTL_DB_OPEN_CONNECTION_WITH_RETRY_FAILED", "Failed to connect to database: %1 with error: %2", "DCTL_DEVELOPMENT_VERSION", "This software is a development branch of Kea. It is not recommended for production use.", "DCTL_INIT_PROCESS", "%1 initializing the application", "DCTL_INIT_PROCESS_FAIL", "%1 application initialization failed: %2", "DCTL_NOT_RUNNING", "%1 application instance is not running", "DCTL_OPEN_CONFIG_DB", "Opening configuration database: %1", - "DCTL_PARSER_FAIL", ": %1", + "DCTL_PARSER_FAIL", "Parser error: %1", "DCTL_PID_FILE_ERROR", "%1 could not create a PID file: %2", "DCTL_PROCESS_FAILED", "%1 application execution failed: %2", "DCTL_RUN_PROCESS", "%1 starting application event loop", diff --git a/src/lib/process/process_messages.h b/src/lib/process/process_messages.h index 0ae950a520..8811e5172b 100644 --- a/src/lib/process/process_messages.h +++ b/src/lib/process/process_messages.h @@ -22,6 +22,7 @@ extern const isc::log::MessageID DCTL_CONFIG_LOAD_FAIL; extern const isc::log::MessageID DCTL_CONFIG_START; extern const isc::log::MessageID DCTL_CONFIG_STUB; extern const isc::log::MessageID DCTL_CONFIG_UPDATE; +extern const isc::log::MessageID DCTL_DB_OPEN_CONNECTION_WITH_RETRY_FAILED; extern const isc::log::MessageID DCTL_DEVELOPMENT_VERSION; extern const isc::log::MessageID DCTL_INIT_PROCESS; extern const isc::log::MessageID DCTL_INIT_PROCESS_FAIL; diff --git a/src/lib/process/process_messages.mes b/src/lib/process/process_messages.mes index 1d601ab8e3..05d64749ab 100644 --- a/src/lib/process/process_messages.mes +++ b/src/lib/process/process_messages.mes @@ -96,7 +96,13 @@ This message is printed when the Kea server is attempting to open a configuration database. The database access string with password redacted is logged. -% DCTL_PARSER_FAIL : %1 +% DCTL_DB_OPEN_CONNECTION_WITH_RETRY_FAILED Failed to connect to database: %1 with error: %2 +This is an informational message issued when the the server failed to connect to +the configuration database. The operation started a retry to connect procedure. +The database access string with password redacted is logged, along with the +error and details for the reconnect procedure. + +% DCTL_PARSER_FAIL Parser error: %1 On receipt of a new configuration, the server failed to create a parser to decode the contents of the named configuration element, or the creation succeeded but the parsing actions and committal of changes failed.