From: Thomas Markwalder Date: Tue, 26 Mar 2019 19:12:06 +0000 (-0400) Subject: [#104,!290] kea-dhcpv6 now supports fetching config from backends X-Git-Tag: Kea-1.6.0-beta~309^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f5fe96c6ee044017583bdb2b64e98ebd49a785cc;p=thirdparty%2Fkea.git [#104,!290] kea-dhcpv6 now supports fetching config from backends Infrastructure has been added to kea-dhcp6 such that it can now be configured to fetch full and then periodic updates from config backends. Merging the actual fetched content will be done under subsequent issues. src/bin/dhcp6 ctrl_dhcp6_srv.* - ControlledDhcpv6Srv::processConfig() - added logic to schedule CB update timer - ControlledDhcpv6Srv::cbFetchUpdates() - new callback function for CB updates dhcp6_lexer.ll dhcp6_parser.yy - Added config-fetch-wait-time dhcp6_messages.mes - New log messages dhcp6_srv.* - Dhcpv6Srv::cb_control_ - new member for config backend access - Dhcpv6Srv::inTestMode() - new function to test for unit test mode json_config_parser.cc - configureDhcp6Server() - invokes full fetch from config backend src/bin/dhcp6/tests config_backend_unittest.cc - new file/tests for config backend testing config_parser_unittest.cc - updated get_config_unittest.cc - rebuild tests kea_controller_unittest.cc - added CB control/timer tests src/lib/dhcpsrv/ dhcpsrv_messages.mes - added log message cb_ctl_dhcp6.* - new files that provide v6 impl of config backend controller doc/examples/kea6/all-keys-current.json - added config-fetch-wait-time --- diff --git a/doc/examples/kea6/all-keys-current.json b/doc/examples/kea6/all-keys-current.json index 489807a5a7..07dea2e142 100644 --- a/doc/examples/kea6/all-keys-current.json +++ b/doc/examples/kea6/all-keys-current.json @@ -699,7 +699,10 @@ // Type of the database, e.g. "mysql", "postgresql", "cql". "type": "mysql" } - ] + ], + // Intervals between attempts to fetch configuration updates + // via the configuration backends used. + "config-fetch-wait-time": 30 }, // Server tag. diff --git a/src/bin/dhcp6/ctrl_dhcp6_srv.cc b/src/bin/dhcp6/ctrl_dhcp6_srv.cc index 93c89a58f4..3e009bb67f 100644 --- a/src/bin/dhcp6/ctrl_dhcp6_srv.cc +++ b/src/bin/dhcp6/ctrl_dhcp6_srv.cc @@ -695,6 +695,34 @@ ControlledDhcpv6Srv::processConfig(isc::data::ConstElementPtr config) { return (isc::config::createAnswer(1, err.str())); } + // Setup config backend polling, if configured for it. + auto ctl_info = CfgMgr::instance().getStagingCfg()->getConfigControlInfo(); + if (ctl_info) { + long fetch_time = static_cast(ctl_info->getConfigFetchWaitTime()); + // Only schedule the CB fetch timer if the fetch wait time is greater + // than 0. + if (fetch_time > 0) { + // When we run unit tests, we want to use milliseconds unit for the + // specified interval. Otherwise, we use seconds. Note that using + // milliseconds as a unit in unit tests prevents us from waiting 1 + // second on more before the timer goes off. Instead, we wait one + // millisecond which significantly reduces the test time. + if (!server_->inTestMode()) { + fetch_time = 1000 * fetch_time; + } + + boost::shared_ptr failure_count(new unsigned(0)); + TimerMgr::instance()-> + registerTimer("Dhcp6CBFetchTimer", + boost::bind(&ControlledDhcpv6Srv::cbFetchUpdates, + server_, CfgMgr::instance().getStagingCfg(), + failure_count), + fetch_time, + asiolink::IntervalTimer::ONE_SHOT); + TimerMgr::instance()->setup("Dhcp6CBFetchTimer"); + } + } + // Finally, we can commit runtime option definitions in libdhcp++. This is // exception free. LibDHCP::commitRuntimeOptionDefs(); @@ -962,5 +990,36 @@ ControlledDhcpv6Srv::dbLostCallback(ReconnectCtlPtr db_reconnect_ctl) { return(true); } +void +ControlledDhcpv6Srv::cbFetchUpdates(const SrvConfigPtr& srv_cfg, + boost::shared_ptr failure_count) { + try { + // The true value indicates that the server should not reconnect + // to the configuration backends and should take into account + // audit entries stored in the database since last fetch. + server_->getCBControl()->databaseConfigFetch(srv_cfg, + CBControlDHCPv6::FetchMode::FETCH_UPDATE); + (*failure_count) = 0; + + } catch (const std::exception& ex) { + LOG_ERROR(dhcp6_logger, DHCP6_CB_FETCH_UPDATES_FAIL) + .arg(ex.what()); + + // We allow at most 10 consecutive failures after which we stop + // making further attempts to fetch the configuration updates. + // Let's return without re-scheduling the timer. + if (++(*failure_count) > 10) { + LOG_ERROR(dhcp6_logger, DHCP6_CB_FETCH_UPDATES_RETRIES_EXHAUSTED); + return; + } + } + + // Reschedule the timer to fetch new updates or re-try if + // the previous attempt resulted in an error. + if (TimerMgr::instance()->isTimerRegistered("Dhcp6CBFetchTimer")) { + TimerMgr::instance()->setup("Dhcp6CBFetchTimer"); + } +} + }; // end of isc::dhcp namespace }; // end of isc namespace diff --git a/src/bin/dhcp6/ctrl_dhcp6_srv.h b/src/bin/dhcp6/ctrl_dhcp6_srv.h index ee81c36a53..ef776c83a8 100644 --- a/src/bin/dhcp6/ctrl_dhcp6_srv.h +++ b/src/bin/dhcp6/ctrl_dhcp6_srv.h @@ -1,4 +1,4 @@ -// Copyright (C) 2012-2018 Internet Systems Consortium, Inc. ("ISC") +// Copyright (C) 2012-2019 Internet Systems Consortium, Inc. ("ISC") // // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this @@ -357,6 +357,20 @@ private: /// configured reconnect parameters bool dbLostCallback(db::ReconnectCtlPtr db_reconnect_ctl); + /// @brief Callback invoked periodically to fetch configuration updates + /// from the Config Backends. + /// + /// This method calls @c CBControlDHCPv6::databaseConfigFetch and then + /// reschedules the timer. + /// + /// @param srv_cfg Server configuration holding the database credentials + /// and server tag. + /// @param failure_count pointer to failure counter which causes this + /// callback to stop scheduling the timer after 10 consecutive failures + /// to fetch the updates. + void cbFetchUpdates(const SrvConfigPtr& srv_cfg, + boost::shared_ptr failure_count); + /// @brief Static pointer to the sole instance of the DHCP server. /// /// This is required for config and command handlers to gain access to diff --git a/src/bin/dhcp6/dhcp6_lexer.cc b/src/bin/dhcp6/dhcp6_lexer.cc index c18c9b4ff1..f247a88cdb 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 182 -#define YY_END_OF_BUFFER 183 +#define YY_NUM_RULES 183 +#define YY_END_OF_BUFFER 184 /* 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[1489] = +static const flex_int16_t yy_accept[1505] = { 0, - 175, 175, 0, 0, 0, 0, 0, 0, 0, 0, - 183, 181, 10, 11, 181, 1, 175, 172, 175, 175, - 181, 174, 173, 181, 181, 181, 181, 181, 168, 169, - 181, 181, 181, 170, 171, 5, 5, 5, 181, 181, - 181, 10, 11, 0, 0, 164, 0, 0, 0, 0, + 176, 176, 0, 0, 0, 0, 0, 0, 0, 0, + 184, 182, 10, 11, 182, 1, 176, 173, 176, 176, + 182, 175, 174, 182, 182, 182, 182, 182, 169, 170, + 182, 182, 182, 171, 172, 5, 5, 5, 182, 182, + 182, 10, 11, 0, 0, 165, 0, 0, 0, 0, 0, 0, 0, 0, 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, 175, - 175, 0, 174, 175, 3, 2, 6, 0, 175, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 176, + 176, 0, 175, 176, 3, 2, 6, 0, 176, 0, 0, 0, 0, 0, 0, 4, 0, 0, 9, 0, - 165, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 167, 0, 0, 0, + 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -722,149 +722,152 @@ static const flex_int16_t yy_accept[1489] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, - 142, 0, 0, 143, 0, 0, 0, 0, 0, 0, + 143, 0, 0, 144, 0, 0, 0, 0, 0, 0, - 0, 0, 166, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 180, 178, 0, 177, 176, 0, 0, 0, 0, 0, + 181, 179, 0, 178, 177, 0, 0, 0, 0, 0, - 0, 0, 141, 0, 0, 28, 0, 27, 0, 0, - 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 142, 0, 0, 28, 0, 27, 0, 0, + 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 176, 0, 0, 0, 0, 0, 0, + 0, 0, 180, 177, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 31, 0, 0, 0, 0, - 0, 105, 0, 0, 0, 0, 0, 0, 0, 82, - 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, + 0, 106, 0, 0, 0, 0, 0, 0, 0, 83, + 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 91, 0, 58, 0, 0, 0, 0, + 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 92, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 121, 146, 50, 0, 55, 0, - 0, 0, 0, 0, 0, 161, 37, 0, 34, 0, - 33, 0, 0, 0, 134, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 122, 147, 51, 0, 56, 0, + 0, 0, 0, 0, 0, 162, 37, 0, 34, 0, + 33, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, - 0, 0, 0, 0, 0, 0, 145, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 114, 0, 0, + 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 52, 0, 0, 32, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 84, 0, 0, 0, 0, + 0, 0, 53, 0, 0, 32, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 130, 0, 0, 0, 0, 0, 0, 7, 35, + 0, 131, 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, 0, 0, 0, 0, 0, - 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 115, 0, 0, 0, 0, 0, 0, 112, 0, 0, - 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, + 116, 0, 0, 0, 0, 0, 0, 113, 0, 0, + 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 94, 0, 0, 0, 0, 0, 0, 0, 0, 109, - 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, + 95, 0, 0, 0, 0, 0, 0, 0, 0, 110, + 0, 0, 0, 0, 94, 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, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 139, 110, 0, 0, 0, 0, 114, 51, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, + 0, 0, 140, 111, 0, 0, 0, 0, 115, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 0, 77, - 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, 100, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, - 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, + 78, 0, 0, 0, 0, 0, 0, 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 56, 85, 0, 0, 0, 125, 0, 0, 0, 49, + 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 129, 0, + 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 57, 86, 0, 0, 0, 126, 0, 0, + 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 117, 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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 160, 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, - 95, 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, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, - 0, 140, 14, 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, 0, 0, 131, 0, 116, 0, 0, 0, + 0, 16, 0, 0, 141, 14, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 127, 144, 0, 40, 0, 136, 0, - 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, - 0, 79, 0, 0, 0, 0, 138, 53, 0, 87, + 0, 0, 0, 0, 0, 0, 0, 0, 132, 0, + 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 128, 145, 0, + 40, 0, 137, 0, 0, 0, 0, 0, 0, 0, + 0, 20, 0, 0, 0, 80, 0, 0, 0, 0, + 139, 54, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, - 0, 0, 0, 63, 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, 106, - 0, 0, 0, 0, 0, 80, 102, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 73, 0, - 0, 0, 0, 0, 0, 17, 0, 15, 0, 158, - 157, 0, 68, 0, 0, 0, 0, 0, 30, 120, + 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 84, 0, 0, 0, 0, 0, 64, 0, + + 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 96, 0, 124, 43, 0, 60, 0, 0, - 0, 0, 19, 0, 0, 0, 0, 0, 0, 98, - - 74, 0, 0, 132, 0, 0, 0, 0, 0, 123, - 0, 0, 0, 0, 0, 92, 0, 163, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, - 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 107, 0, 0, 0, 0, 0, + 81, 103, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, + 17, 0, 15, 0, 159, 158, 0, 69, 0, 0, + 0, 0, 0, 30, 121, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, + 125, 43, 0, 61, 0, 0, 0, 0, 19, 0, + + 0, 0, 0, 0, 0, 99, 75, 0, 0, 133, + 0, 0, 0, 0, 0, 124, 0, 0, 0, 0, + 0, 93, 0, 164, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 91, 0, 0, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, - 0, 0, 67, 0, 0, 0, 118, 47, 0, 0, - 69, 156, 38, 0, 0, 12, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 45, 0, 0, 44, 18, - 0, 0, 0, 0, 111, 0, 0, 0, 0, 0, - - 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, - 0, 0, 61, 0, 0, 88, 0, 0, 0, 0, - 0, 137, 0, 0, 0, 46, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, - 0, 0, 0, 78, 0, 36, 48, 0, 0, 0, - 0, 0, 24, 0, 0, 0, 0, 0, 0, 153, - 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 25, 39, 0, 0, 0, 0, 0, 13, - 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, - - 0, 0, 0, 0, 0, 152, 0, 0, 21, 71, - 0, 0, 0, 0, 0, 64, 0, 0, 89, 0, - 0, 151, 0, 0, 70, 0, 0, 65, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 42, 0, 0, 68, + 0, 0, 0, 119, 47, 0, 0, 0, 70, 157, + 38, 0, 0, 12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 45, 0, 0, 44, 18, 0, 0, + + 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 73, 0, 0, + 0, 62, 0, 0, 89, 0, 0, 0, 0, 0, + 138, 0, 0, 0, 46, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, + 0, 0, 79, 0, 36, 48, 0, 0, 0, 0, + 0, 0, 24, 0, 0, 0, 0, 0, 0, 154, + 0, 123, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 25, 39, 0, 0, 0, 0, 0, + + 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 160, 0, 0, 0, 0, 0, 0, 153, 0, 0, + 21, 72, 0, 0, 0, 0, 0, 65, 0, 0, + 0, 90, 0, 0, 152, 0, 0, 71, 0, 0, + 66, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 22, 0, 107, - 119, 0, 0, 0, 0, 0, 0, 149, 154, 75, - 0, 0, 0, 0, 148, 0, 0, 26, 0, 0, - 0, 0, 0, 108, 0, 0, 150, 0 + 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, + 0, 0, 0, 22, 0, 108, 120, 0, 0, 0, + 0, 0, 0, 150, 155, 76, 0, 0, 0, 0, + 149, 0, 0, 26, 0, 0, 0, 0, 0, 109, + + 0, 0, 151, 0 } ; static const YY_CHAR yy_ec[256] = @@ -911,352 +914,356 @@ static const YY_CHAR yy_meta[72] = 3 } ; -static const flex_int16_t yy_base[1501] = +static const flex_int16_t yy_base[1517] = { 0, 0, 70, 19, 29, 41, 49, 52, 58, 87, 95, - 1852, 1853, 32, 1848, 141, 0, 201, 1853, 206, 88, - 11, 213, 1853, 1830, 114, 25, 2, 6, 1853, 1853, - 73, 11, 17, 1853, 1853, 1853, 104, 1836, 1791, 0, - 1828, 107, 1843, 217, 241, 1853, 185, 1787, 1793, 1813, + 1868, 1869, 32, 1864, 141, 0, 201, 1869, 206, 88, + 11, 213, 1869, 1846, 114, 25, 2, 6, 1869, 1869, + 73, 11, 17, 1869, 1869, 1869, 104, 1852, 1807, 0, + 1844, 107, 1859, 217, 241, 1869, 185, 1803, 1809, 1829, 93, 58, 190, 91, 211, 200, 14, 267, 213, 175, - 269, 64, 231, 184, 187, 75, 1794, 274, 215, 290, - 278, 297, 1777, 207, 302, 316, 316, 1796, 0, 355, - 360, 372, 377, 380, 1853, 0, 1853, 295, 383, 227, - 296, 283, 327, 361, 293, 1853, 1793, 1832, 1853, 237, - - 1853, 394, 363, 1780, 1790, 1829, 375, 321, 403, 1784, - 369, 378, 376, 382, 388, 1827, 0, 445, 407, 1771, - 1779, 364, 1775, 1764, 1765, 372, 1781, 1764, 1773, 387, - 308, 378, 1767, 1765, 391, 1754, 1810, 416, 1757, 1808, - 1750, 1773, 1770, 1770, 1764, 214, 1757, 1750, 1755, 1749, - 382, 1760, 1753, 1744, 1743, 1757, 362, 1793, 1742, 414, - 1754, 1757, 1741, 441, 1742, 417, 1754, 1751, 1752, 1750, - 422, 1732, 1737, 1733, 1725, 1742, 1734, 0, 422, 450, - 440, 446, 454, 470, 1733, 1853, 0, 476, 1724, 1727, - 1853, 465, 447, 1853, 1779, 1734, 477, 1777, 481, 1776, - - 477, 1775, 1853, 521, 1774, 489, 1735, 1730, 1729, 1720, - 491, 1769, 1763, 1729, 1708, 1716, 1722, 1710, 1724, 1720, - 1721, 1721, 1716, 1708, 1710, 1694, 1698, 1711, 1713, 1710, - 1702, 1692, 1695, 1709, 1853, 1695, 1703, 1706, 1687, 1686, - 1736, 1685, 1695, 1733, 452, 1694, 1682, 1693, 1729, 490, - 1733, 1670, 1685, 9, 1675, 1691, 1672, 1674, 1670, 1676, - 1667, 1666, 1679, 1672, 1674, 1678, 1677, 1671, 80, 1678, - 1673, 1665, 1655, 1670, 1665, 1669, 459, 1667, 1653, 1659, - 1666, 1654, 230, 1647, 1661, 1660, 1663, 1645, 1653, 491, - 1853, 1853, 501, 1853, 1853, 1640, 0, 376, 1642, 497, - - 503, 1696, 1853, 1649, 489, 1853, 1694, 1853, 1688, 557, - 1853, 484, 1630, 1640, 1690, 1647, 1642, 1645, 1640, 304, - 1853, 1642, 549, 1640, 1637, 1638, 303, 1642, 1680, 1630, - 1625, 1622, 1618, 1620, 1669, 1628, 1617, 1633, 1665, 1613, - 550, 1626, 1626, 1609, 1610, 1623, 1610, 1620, 1615, 1622, - 1617, 1602, 470, 1611, 1614, 1609, 1605, 1653, 515, 524, - 1853, 1647, 1599, 1598, 1591, 1593, 1597, 1586, 1593, 1598, - 513, 1643, 1598, 510, 1595, 1599, 1597, 1586, 1586, 1598, - 502, 1573, 1574, 1595, 536, 1577, 1574, 1588, 1591, 1586, - 1572, 1584, 1583, 1582, 1581, 532, 1622, 1621, 1620, 1564, - - 581, 1577, 1853, 1853, 1576, 0, 556, 1564, 1615, 1614, - 1572, 1612, 1853, 1560, 1610, 1853, 563, 609, 557, 1609, - 1551, 1853, 1556, 1562, 1565, 1548, 1563, 1550, 1549, 1853, - 1559, 1550, 1547, 1559, 549, 1544, 1546, 1853, 1552, 1537, - 1539, 1550, 1548, 1543, 588, 1550, 1538, 1531, 1580, 1853, - 1529, 1545, 1577, 1581, 1539, 1533, 1535, 1536, 1538, 1570, - 1523, 1518, 1517, 1519, 1512, 1527, 1505, 1512, 1517, 1565, - 1853, 1512, 1508, 1562, 1515, 1509, 1516, 1501, 1511, 1514, - 1503, 1502, 1497, 1853, 1552, 1853, 1496, 1495, 1488, 1505, - 1542, 1489, 1494, 1503, 1497, 1491, 1500, 602, 1535, 1499, - - 1482, 1482, 1477, 1473, 1479, 1484, 1477, 1485, 1489, 1472, - 1528, 1470, 1484, 1473, 1853, 1853, 1853, 1473, 1853, 1483, - 1517, 1479, 0, 1520, 1470, 1853, 1853, 1467, 1853, 1473, - 1853, 569, 565, 604, 1853, 1511, 1458, 1509, 1456, 1455, - 1454, 1461, 1454, 1462, 1465, 1464, 1448, 1463, 1445, 1492, - 1459, 1495, 1441, 1443, 1455, 1455, 1454, 1853, 1439, 1436, - 1492, 1449, 1441, 1447, 1438, 1446, 1853, 1431, 1442, 1446, - 1428, 1442, 530, 1424, 1418, 1423, 1420, 1435, 1436, 1433, - 1474, 1431, 1853, 1417, 1419, 1853, 1427, 1464, 1463, 605, - 1426, 1409, 1410, 1415, 1406, 1853, 1420, 1406, 630, 1398, - - 1419, 1416, 1408, 1451, 1405, 1412, 1448, 1853, 1396, 1394, - 1408, 1392, 1406, 1409, 1441, 1440, 1439, 1438, 1385, 1436, - 1435, 1853, 622, 1397, 1397, 1395, 1384, 1386, 1853, 1853, - 1429, 1377, 1432, 579, 591, 1375, 1390, 1429, 597, 1423, - 1385, 1421, 1420, 1374, 1368, 1363, 1416, 1378, 1368, 1376, - 1412, 1375, 1357, 1365, 1367, 1371, 1406, 1410, 1367, 1366, - 1853, 1367, 1360, 1349, 1362, 1365, 1360, 1355, 1360, 1357, - 1356, 1352, 1358, 1353, 1394, 1393, 1337, 1333, 582, 1390, - 1853, 1389, 1338, 1330, 1381, 1344, 1331, 1853, 1331, 1340, - 1339, 1339, 1323, 1378, 1321, 1334, 1853, 1326, 1318, 1327, - - 1320, 1331, 1308, 1312, 1363, 1327, 1309, 1307, 1318, 1358, - 1357, 1356, 1303, 1319, 593, 1318, 607, 1295, 1305, 604, - 1853, 1355, 1301, 1311, 1311, 1300, 1304, 1311, 1348, 1853, - 17, 587, 11, 69, 1853, 68, 202, 221, 302, 373, - 386, 488, 493, 549, 558, 582, 584, 583, 591, 645, - 601, 618, 601, 653, 610, 1853, 622, 622, 616, 627, - 625, 668, 612, 614, 629, 632, 619, 676, 635, 621, - 624, 1853, 1853, 640, 639, 644, 632, 1853, 1853, 646, - 633, 631, 649, 636, 636, 685, 637, 693, 694, 1853, - 641, 655, 655, 698, 648, 650, 644, 702, 657, 647, - - 648, 644, 654, 658, 669, 653, 671, 666, 668, 661, - 663, 664, 676, 666, 681, 720, 679, 684, 661, 1853, - 686, 676, 721, 670, 685, 686, 1853, 705, 713, 682, - 696, 684, 679, 691, 698, 687, 688, 684, 702, 694, - 689, 740, 746, 705, 696, 1853, 708, 693, 709, 699, - 711, 705, 751, 719, 704, 705, 1853, 721, 724, 707, - 709, 765, 710, 1853, 727, 730, 710, 729, 767, 727, - 723, 718, 736, 735, 721, 736, 728, 724, 742, 727, - 1853, 1853, 735, 780, 735, 1853, 743, 738, 789, 1853, - 740, 745, 787, 741, 742, 754, 748, 752, 750, 748, - - 759, 802, 748, 753, 805, 806, 752, 764, 1853, 752, - 760, 758, 763, 775, 759, 773, 774, 775, 791, 796, - 778, 766, 766, 786, 775, 764, 781, 788, 829, 773, - 831, 780, 784, 1853, 829, 780, 798, 795, 833, 784, - 802, 803, 789, 797, 806, 786, 803, 810, 850, 851, - 1853, 806, 853, 854, 807, 817, 819, 803, 804, 811, - 820, 863, 812, 811, 828, 867, 819, 823, 821, 819, - 872, 873, 825, 875, 871, 831, 1853, 836, 829, 820, - 839, 833, 828, 838, 835, 840, 836, 848, 1853, 832, - 834, 1853, 1853, 834, 892, 833, 852, 853, 851, 836, - - 857, 839, 844, 851, 884, 875, 905, 850, 852, 869, - 867, 910, 860, 864, 1853, 861, 1853, 875, 873, 876, - 860, 861, 919, 874, 879, 866, 877, 869, 875, 872, - 890, 891, 892, 1853, 1853, 890, 1853, 893, 1853, 878, - 879, 898, 888, 938, 893, 935, 901, 1853, 893, 885, - 944, 1853, 945, 894, 901, 943, 1853, 1853, 903, 1853, - 894, 894, 897, 911, 916, 899, 910, 957, 916, 917, - 918, 956, 914, 963, 918, 965, 1853, 914, 967, 968, - 910, 970, 931, 915, 927, 917, 947, 976, 1853, 977, - 926, 941, 928, 1853, 924, 940, 928, 946, 934, 934, - - 987, 946, 1853, 948, 947, 949, 942, 951, 952, 949, - 939, 942, 942, 999, 948, 1001, 1002, 948, 1005, 1853, - 943, 958, 951, 1009, 964, 1853, 1853, 960, 971, 956, - 973, 959, 1018, 1020, 966, 976, 1023, 982, 1853, 974, - 974, 976, 978, 1029, 974, 1853, 975, 1853, 977, 1853, - 1853, 991, 1853, 985, 1035, 986, 1037, 1019, 1853, 1853, - 983, 991, 985, 984, 987, 987, 983, 989, 1047, 997, - 1853, 993, 1050, 1005, 996, 1011, 1011, 1014, 1014, 1011, - 1053, 1017, 1853, 1009, 1853, 1853, 1020, 1853, 1021, 1022, - 1019, 1061, 1853, 1012, 1012, 1018, 1017, 1029, 1029, 1853, - - 1853, 1068, 1017, 1853, 1034, 1019, 1019, 1021, 1027, 1853, - 1080, 1024, 1034, 1083, 1046, 1853, 1043, 1853, 1062, 1087, - 1088, 1047, 1033, 1091, 1092, 1093, 1048, 1853, 1038, 1096, - 1853, 1036, 1093, 1058, 1054, 1096, 1046, 1051, 1049, 1106, - 1064, 1108, 1109, 1072, 1061, 1055, 1072, 1115, 1059, 1076, - 1061, 1076, 1060, 1116, 1117, 1118, 1067, 1120, 1085, 1853, - 1085, 1072, 1853, 1083, 1130, 1102, 1853, 1853, 1076, 1133, - 1853, 1853, 1853, 1082, 1080, 1853, 1136, 1084, 1133, 1078, - 1083, 1142, 1092, 1102, 1103, 1853, 1146, 1101, 1853, 1853, - 1092, 1107, 1095, 1110, 1853, 1147, 1115, 1108, 1109, 1118, - - 1100, 1106, 1109, 1161, 1123, 1122, 1114, 1166, 1117, 1853, - 1168, 1169, 1853, 1119, 1119, 1853, 1123, 1118, 1117, 1175, - 1130, 1853, 1172, 1125, 1122, 1853, 1136, 1139, 1182, 1137, - 1184, 1127, 1129, 1137, 1127, 1143, 1144, 1138, 1154, 1853, - 1144, 1194, 1155, 1853, 1191, 1853, 1853, 1192, 1149, 1157, - 1148, 1155, 1853, 1152, 1157, 1155, 1205, 1206, 1151, 1853, - 1166, 1853, 1156, 1168, 1169, 1212, 1156, 1164, 1158, 1166, - 1179, 1853, 1156, 1179, 1167, 1221, 1171, 1183, 1174, 1183, - 1185, 1189, 1853, 1853, 1228, 1173, 1189, 1231, 1232, 1853, - 1228, 1192, 1189, 1194, 1181, 1238, 1177, 1198, 1853, 1241, - - 1200, 1201, 1244, 1203, 1206, 1853, 1247, 1210, 1853, 1853, - 1192, 1250, 1199, 1252, 1197, 1853, 1214, 1200, 1853, 1200, - 1202, 1853, 1207, 1217, 1853, 1203, 1215, 1853, 1211, 1853, - 1221, 1215, 1219, 1210, 1262, 1211, 1219, 1228, 1221, 1216, - 1217, 1232, 1223, 1230, 1217, 1232, 1237, 1280, 1239, 1282, - 1283, 1228, 1244, 1235, 1249, 1245, 1238, 1853, 1290, 1853, - 1853, 1291, 1292, 1249, 1248, 1249, 1239, 1853, 1853, 1853, - 1297, 1241, 1257, 1300, 1853, 1296, 1247, 1853, 1246, 1248, - 1259, 1306, 1257, 1853, 1266, 1309, 1853, 1853, 1315, 1320, - 1325, 1330, 1335, 1340, 1345, 1348, 1322, 1327, 1329, 1342 - + 269, 64, 231, 184, 187, 75, 1810, 274, 215, 290, + 278, 297, 1793, 207, 302, 316, 316, 1812, 0, 355, + 360, 372, 377, 380, 1869, 0, 1869, 295, 383, 227, + 296, 283, 327, 361, 293, 1869, 1809, 1848, 1869, 237, + + 1869, 394, 363, 1796, 1806, 1845, 375, 321, 403, 1800, + 369, 378, 376, 382, 388, 1843, 0, 445, 407, 1787, + 1795, 364, 1791, 1780, 1781, 372, 1797, 1780, 1789, 387, + 308, 378, 1783, 1781, 391, 1770, 1826, 416, 1773, 1824, + 1766, 1789, 1786, 1786, 1780, 214, 1773, 1766, 1771, 1765, + 382, 1776, 1769, 1760, 1759, 1773, 362, 1809, 1758, 414, + 1770, 1773, 1757, 441, 1758, 417, 1770, 1767, 1768, 1766, + 422, 1748, 1753, 1749, 1741, 1758, 1750, 0, 422, 450, + 440, 446, 454, 470, 1749, 1869, 0, 476, 1740, 1743, + 1869, 465, 447, 1869, 1795, 1750, 477, 1793, 481, 1792, + + 477, 1791, 1869, 521, 1790, 489, 1751, 1746, 1745, 1736, + 491, 1785, 1779, 1745, 1724, 1732, 1738, 1726, 1740, 1736, + 1737, 1737, 1732, 1724, 1726, 1710, 1714, 1727, 1729, 1726, + 1718, 1708, 1711, 1725, 1869, 1711, 1719, 1722, 1703, 1702, + 1752, 1701, 1711, 1749, 452, 1710, 1698, 1709, 1745, 490, + 1749, 1686, 1701, 9, 1691, 1707, 1688, 1690, 1686, 1692, + 1683, 1682, 1695, 1688, 1690, 1694, 1693, 1687, 80, 1694, + 1689, 1681, 1671, 1686, 1681, 1685, 459, 1683, 1669, 1675, + 1682, 1670, 230, 1663, 1677, 1676, 1679, 1661, 1669, 491, + 1869, 1869, 501, 1869, 1869, 1656, 0, 376, 1658, 497, + + 503, 1712, 1869, 1665, 489, 1869, 1710, 1869, 1704, 557, + 1869, 484, 1646, 1656, 1706, 1663, 1658, 1661, 1656, 304, + 1869, 1658, 549, 1656, 1653, 1654, 303, 1658, 1696, 1646, + 1641, 1638, 1634, 1636, 1685, 1644, 1633, 1649, 1681, 1629, + 550, 1642, 1642, 1625, 1626, 1639, 1626, 1636, 1631, 1638, + 1633, 1618, 470, 1627, 1630, 1625, 1621, 1669, 515, 524, + 1869, 1663, 1615, 1614, 1607, 1609, 1613, 1602, 1609, 1614, + 513, 1659, 1614, 510, 1611, 1615, 1613, 1602, 1602, 1614, + 502, 1589, 1590, 1611, 536, 1593, 1590, 1604, 1607, 1602, + 1588, 1600, 1599, 1598, 1597, 532, 1638, 1637, 1636, 1580, + + 581, 1593, 1869, 1869, 1592, 0, 556, 1580, 1631, 1630, + 1588, 1628, 1869, 1576, 1626, 1869, 563, 609, 557, 1625, + 1567, 1869, 1572, 1578, 1581, 1564, 1579, 1566, 1565, 1869, + 1575, 1566, 1563, 1575, 549, 1560, 1562, 1869, 1568, 1553, + 1555, 1566, 1564, 1559, 588, 1566, 1554, 1547, 1596, 1869, + 1545, 1561, 1593, 1597, 1555, 1549, 1551, 1552, 1554, 1586, + 1539, 1534, 1533, 1535, 1528, 1543, 1521, 1528, 1533, 1581, + 1869, 1528, 1524, 1578, 1531, 1525, 1532, 1517, 1527, 1530, + 1519, 1518, 1513, 1869, 1568, 1869, 1512, 1511, 1504, 1521, + 1558, 1505, 1510, 1519, 1513, 1507, 1516, 602, 1551, 1515, + + 1498, 1498, 1493, 1489, 1495, 1500, 1493, 1501, 1505, 1488, + 1544, 1486, 1500, 1489, 1869, 1869, 1869, 1489, 1869, 1499, + 1533, 1495, 0, 1536, 1486, 1869, 1869, 1483, 1869, 1489, + 1869, 569, 565, 604, 1869, 1527, 1474, 1525, 1472, 1471, + 1470, 1477, 1470, 1478, 1481, 1480, 1464, 1479, 1461, 1508, + 1475, 1511, 1457, 1459, 1471, 1471, 1470, 1869, 1455, 1452, + 1508, 1465, 1457, 1463, 1454, 1462, 1869, 1447, 1458, 1462, + 1444, 1458, 530, 1440, 1434, 1439, 1436, 1451, 1452, 1449, + 1490, 1447, 1869, 1433, 1435, 1869, 1443, 1480, 1479, 605, + 1442, 1425, 1426, 1431, 1422, 1869, 1436, 1422, 630, 1414, + + 1435, 1432, 1424, 1467, 1421, 1428, 1464, 1869, 1412, 1410, + 1424, 1408, 1422, 1425, 1457, 1456, 1455, 1454, 1401, 1452, + 1451, 1869, 622, 1413, 1413, 1411, 1400, 1402, 1869, 1869, + 1445, 1393, 1448, 579, 591, 1391, 1406, 1445, 597, 1439, + 1401, 1437, 1436, 1390, 1384, 1379, 1432, 1394, 1384, 1392, + 1428, 1391, 1373, 1381, 1383, 1387, 1422, 1426, 1383, 1382, + 1869, 1383, 1376, 1365, 1378, 1381, 1376, 1371, 1376, 1373, + 1372, 1368, 1374, 1369, 1410, 1409, 1353, 1349, 582, 1406, + 1869, 1405, 1354, 1346, 1397, 1360, 1347, 1869, 1347, 1356, + 1355, 1355, 1339, 1394, 1337, 1350, 1869, 1342, 1334, 1343, + + 1336, 1347, 1324, 1328, 1379, 1343, 1325, 1323, 1334, 1374, + 1373, 1372, 1319, 1335, 593, 1334, 607, 1311, 1321, 604, + 1869, 1371, 1317, 1327, 1327, 1316, 1320, 1327, 1364, 1869, + 17, 587, 11, 69, 1869, 68, 202, 236, 296, 375, + 389, 470, 497, 549, 569, 570, 600, 588, 587, 601, + 656, 604, 620, 603, 657, 614, 1869, 625, 625, 618, + 629, 627, 670, 614, 617, 632, 634, 621, 678, 637, + 623, 626, 1869, 1869, 642, 641, 646, 634, 1869, 1869, + 648, 635, 633, 651, 638, 638, 687, 639, 695, 696, + 1869, 643, 657, 657, 700, 650, 652, 646, 704, 659, + + 649, 650, 646, 656, 660, 671, 655, 673, 668, 670, + 663, 665, 666, 678, 668, 683, 722, 681, 686, 663, + 1869, 688, 678, 723, 672, 687, 688, 1869, 707, 715, + 684, 698, 686, 681, 682, 694, 701, 690, 691, 687, + 705, 697, 692, 743, 749, 708, 699, 1869, 711, 696, + 712, 702, 714, 709, 754, 723, 707, 708, 1869, 724, + 727, 710, 712, 768, 713, 1869, 730, 733, 713, 732, + 770, 730, 726, 721, 739, 738, 724, 739, 731, 727, + 745, 730, 1869, 1869, 738, 783, 738, 1869, 746, 741, + 792, 1869, 743, 748, 790, 744, 745, 757, 751, 755, + + 753, 751, 762, 805, 751, 756, 808, 809, 755, 767, + 1869, 755, 763, 761, 766, 778, 762, 776, 777, 778, + 794, 799, 781, 769, 769, 789, 788, 779, 768, 785, + 792, 833, 777, 835, 784, 788, 1869, 833, 784, 802, + 799, 837, 788, 806, 807, 793, 801, 810, 792, 807, + 814, 854, 855, 1869, 810, 857, 858, 811, 821, 823, + 807, 808, 815, 824, 867, 816, 815, 832, 871, 823, + 827, 825, 823, 876, 877, 829, 879, 875, 835, 1869, + 840, 833, 824, 843, 837, 832, 842, 839, 844, 840, + 852, 1869, 836, 838, 1869, 1869, 838, 896, 837, 856, + + 857, 855, 840, 861, 843, 848, 855, 888, 879, 909, + 854, 856, 873, 868, 872, 915, 865, 869, 1869, 866, + 1869, 880, 878, 881, 865, 866, 924, 879, 884, 871, + 882, 874, 881, 877, 895, 896, 897, 1869, 1869, 896, + 1869, 898, 1869, 883, 884, 903, 893, 943, 898, 940, + 906, 1869, 898, 890, 949, 1869, 950, 899, 906, 948, + 1869, 1869, 908, 1869, 899, 899, 902, 916, 921, 904, + 915, 962, 921, 922, 923, 961, 919, 968, 923, 970, + 1869, 919, 972, 973, 915, 975, 936, 920, 932, 922, + 952, 981, 1869, 982, 931, 946, 980, 934, 1869, 930, + + 946, 934, 952, 940, 940, 993, 952, 1869, 954, 953, + 955, 948, 957, 958, 955, 945, 948, 948, 1005, 954, + 1007, 1009, 954, 1011, 1869, 949, 964, 957, 1015, 970, + 1869, 1869, 967, 977, 962, 979, 965, 1025, 1026, 972, + 982, 1029, 988, 1869, 980, 980, 982, 984, 1035, 980, + 1869, 981, 1869, 983, 1869, 1869, 997, 1869, 991, 1041, + 992, 1043, 1025, 1869, 1869, 989, 997, 991, 988, 991, + 994, 994, 990, 996, 1054, 1004, 1869, 1000, 1057, 1012, + 1003, 1018, 1018, 1021, 1021, 1018, 1060, 1024, 1869, 1017, + 1869, 1869, 1027, 1869, 1028, 1029, 1026, 1068, 1869, 1019, + + 1019, 1025, 1024, 1036, 1036, 1869, 1869, 1075, 1024, 1869, + 1041, 1026, 1026, 1028, 1034, 1869, 1087, 1031, 1041, 1090, + 1053, 1869, 1050, 1869, 1069, 1094, 1095, 1054, 1059, 1041, + 1099, 1100, 1101, 1056, 1869, 1046, 1104, 1869, 1044, 1101, + 1066, 1062, 1104, 1054, 1059, 1057, 1114, 1072, 1116, 1117, + 1080, 1069, 1064, 1080, 1123, 1067, 1084, 1069, 1084, 1068, + 1124, 1125, 1126, 1075, 1128, 1093, 1869, 1093, 1080, 1869, + 1091, 1138, 1110, 1869, 1869, 1084, 1095, 1142, 1869, 1869, + 1869, 1091, 1089, 1869, 1145, 1093, 1142, 1087, 1092, 1151, + 1101, 1111, 1112, 1869, 1155, 1110, 1869, 1869, 1101, 1116, + + 1104, 1119, 1869, 1156, 1124, 1117, 1118, 1127, 1109, 1116, + 1118, 1171, 1132, 1131, 1123, 1175, 1126, 1869, 1177, 1178, + 1122, 1869, 1129, 1129, 1869, 1133, 1128, 1127, 1185, 1140, + 1869, 1182, 1135, 1132, 1869, 1146, 1149, 1192, 1147, 1194, + 1137, 1139, 1147, 1137, 1153, 1154, 1148, 1164, 1869, 1154, + 1204, 1165, 1869, 1201, 1869, 1869, 1202, 1203, 1160, 1168, + 1159, 1166, 1869, 1163, 1168, 1166, 1216, 1217, 1162, 1869, + 1177, 1869, 1167, 1179, 1180, 1223, 1167, 1175, 1169, 1177, + 1190, 1869, 1167, 1190, 1174, 1179, 1233, 1183, 1195, 1186, + 1195, 1197, 1201, 1869, 1869, 1240, 1185, 1201, 1243, 1244, + + 1869, 1240, 1204, 1201, 1206, 1193, 1250, 1189, 1206, 1211, + 1869, 1254, 1213, 1214, 1257, 1216, 1219, 1869, 1260, 1223, + 1869, 1869, 1205, 1263, 1212, 1265, 1210, 1869, 1227, 1218, + 1214, 1869, 1214, 1216, 1869, 1221, 1231, 1869, 1217, 1229, + 1869, 1225, 1869, 1235, 1229, 1237, 1234, 1225, 1277, 1226, + 1234, 1243, 1236, 1231, 1232, 1247, 1290, 1239, 1246, 1233, + 1248, 1253, 1296, 1255, 1298, 1299, 1244, 1869, 1260, 1251, + 1265, 1261, 1254, 1869, 1306, 1869, 1869, 1307, 1308, 1265, + 1264, 1265, 1255, 1869, 1869, 1869, 1313, 1257, 1273, 1316, + 1869, 1312, 1263, 1869, 1262, 1264, 1275, 1322, 1273, 1869, + + 1282, 1325, 1869, 1869, 1331, 1336, 1341, 1346, 1351, 1356, + 1361, 1364, 1338, 1343, 1345, 1358 } ; -static const flex_int16_t yy_def[1501] = +static const flex_int16_t yy_def[1517] = { 0, - 1489, 1489, 1490, 1490, 1489, 1489, 1489, 1489, 1489, 1489, - 1488, 1488, 1488, 1488, 1488, 1491, 1488, 1488, 1488, 1488, - 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, - 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1492, - 1488, 1488, 1488, 1493, 15, 1488, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 1494, 45, 45, + 1505, 1505, 1506, 1506, 1505, 1505, 1505, 1505, 1505, 1505, + 1504, 1504, 1504, 1504, 1504, 1507, 1504, 1504, 1504, 1504, + 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, + 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1508, + 1504, 1504, 1504, 1509, 15, 1504, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 1510, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 1491, 1488, - 1488, 1488, 1488, 1488, 1488, 1495, 1488, 1488, 1488, 1488, - 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1492, 1488, 1493, + 45, 45, 45, 45, 45, 45, 45, 45, 1507, 1504, + 1504, 1504, 1504, 1504, 1504, 1511, 1504, 1504, 1504, 1504, + 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1508, 1504, 1509, - 1488, 1488, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 1496, 45, 1494, 45, 45, + 1504, 1504, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 1512, 45, 1510, 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, 1495, 1488, 1488, - 1488, 1488, 1488, 1488, 1488, 1488, 1497, 45, 45, 45, - 1488, 45, 45, 1488, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 1511, 1504, 1504, + 1504, 1504, 1504, 1504, 1504, 1504, 1513, 45, 45, 45, + 1504, 45, 45, 1504, 45, 45, 45, 45, 45, 45, - 45, 1496, 1488, 1494, 45, 45, 45, 45, 45, 45, + 45, 1512, 1504, 1510, 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, 1488, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 1504, 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, 1488, - 1488, 1488, 1488, 1488, 1488, 1488, 1498, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 1504, + 1504, 1504, 1504, 1504, 1504, 1504, 1514, 45, 45, 45, - 45, 45, 1488, 45, 45, 1488, 45, 1488, 45, 1494, - 1488, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 1488, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 1504, 45, 45, 1504, 45, 1504, 45, 1510, + 1504, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 1504, 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, - 1488, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 1504, 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, 1488, 1488, 1488, 1499, 45, 45, 45, 45, - 45, 45, 1488, 45, 45, 1488, 45, 1494, 45, 45, - 45, 1488, 45, 45, 45, 45, 45, 45, 45, 1488, - 45, 45, 45, 45, 45, 45, 45, 1488, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 1488, + 45, 45, 1504, 1504, 1504, 1515, 45, 45, 45, 45, + 45, 45, 1504, 45, 45, 1504, 45, 1510, 45, 45, + 45, 1504, 45, 45, 45, 45, 45, 45, 45, 1504, + 45, 45, 45, 45, 45, 45, 45, 1504, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 1504, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 1488, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 1488, 45, 1488, 45, 45, 45, 45, + 1504, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 1504, 45, 1504, 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, 1488, 1488, 1488, 45, 1488, 45, - 45, 1488, 1500, 45, 45, 1488, 1488, 45, 1488, 45, - 1488, 45, 45, 45, 1488, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 1504, 1504, 1504, 45, 1504, 45, + 45, 1504, 1516, 45, 45, 1504, 1504, 45, 1504, 45, + 1504, 45, 45, 45, 1504, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 1488, 45, 45, - 45, 45, 45, 45, 45, 45, 1488, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 1504, 45, 45, + 45, 45, 45, 45, 45, 45, 1504, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 1488, 45, 45, 1488, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 1488, 45, 45, 45, 45, + 45, 45, 1504, 45, 45, 1504, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 1504, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 1488, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 1504, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 1488, 45, 45, 45, 45, 45, 45, 1488, 1488, + 45, 1504, 45, 45, 45, 45, 45, 45, 1504, 1504, 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, - 1488, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 1504, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 1488, 45, 45, 45, 45, 45, 45, 1488, 45, 45, - 45, 45, 45, 45, 45, 45, 1488, 45, 45, 45, + 1504, 45, 45, 45, 45, 45, 45, 1504, 45, 45, + 45, 45, 45, 45, 45, 45, 1504, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 1488, 45, 45, 45, 45, 45, 45, 45, 45, 1488, - 45, 45, 45, 45, 1488, 45, 45, 45, 45, 45, + 1504, 45, 45, 45, 45, 45, 45, 45, 45, 1504, + 45, 45, 45, 45, 1504, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 1488, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 1504, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 1488, 1488, 45, 45, 45, 45, 1488, 1488, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 1488, + 45, 45, 1504, 1504, 45, 45, 45, 45, 1504, 1504, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 1504, 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, 1488, - 45, 45, 45, 45, 45, 45, 1488, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 1488, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 1488, 45, 45, 45, - 45, 45, 45, 1488, 45, 45, 45, 45, 45, 45, + 1504, 45, 45, 45, 45, 45, 45, 1504, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 1488, 1488, 45, 45, 45, 1488, 45, 45, 45, 1488, + 45, 45, 45, 45, 45, 45, 45, 1504, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 1504, 45, + 45, 45, 45, 45, 45, 1504, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 1504, 1504, 45, 45, 45, 1504, 45, 45, + 45, 1504, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 1488, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 1504, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 1488, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 1504, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 1488, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 1504, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 1488, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 1488, 45, - 45, 1488, 1488, 45, 45, 45, 45, 45, 45, 45, - + 45, 45, 45, 45, 45, 45, 45, 45, 45, 1504, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 1488, 45, 1488, 45, 45, 45, + 45, 1504, 45, 45, 1504, 1504, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 1488, 1488, 45, 1488, 45, 1488, 45, - 45, 45, 45, 45, 45, 45, 45, 1488, 45, 45, - 45, 1488, 45, 45, 45, 45, 1488, 1488, 45, 1488, + 45, 45, 45, 45, 45, 45, 45, 45, 1504, 45, + 1504, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 1504, 1504, 45, + 1504, 45, 1504, 45, 45, 45, 45, 45, 45, 45, + 45, 1504, 45, 45, 45, 1504, 45, 45, 45, 45, + 1504, 1504, 45, 1504, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 1488, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 1488, 45, - 45, 45, 45, 1488, 45, 45, 45, 45, 45, 45, - - 45, 45, 1488, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 1488, - 45, 45, 45, 45, 45, 1488, 1488, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 1488, 45, - 45, 45, 45, 45, 45, 1488, 45, 1488, 45, 1488, - 1488, 45, 1488, 45, 45, 45, 45, 45, 1488, 1488, + 1504, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 1504, 45, 45, 45, 45, 45, 1504, 45, + + 45, 45, 45, 45, 45, 45, 45, 1504, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 1488, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 1488, 45, 1488, 1488, 45, 1488, 45, 45, - 45, 45, 1488, 45, 45, 45, 45, 45, 45, 1488, - - 1488, 45, 45, 1488, 45, 45, 45, 45, 45, 1488, - 45, 45, 45, 45, 45, 1488, 45, 1488, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 1488, 45, 45, - 1488, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 1504, 45, 45, 45, 45, 45, + 1504, 1504, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 1504, 45, 45, 45, 45, 45, 45, + 1504, 45, 1504, 45, 1504, 1504, 45, 1504, 45, 45, + 45, 45, 45, 1504, 1504, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 1504, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 1504, 45, + 1504, 1504, 45, 1504, 45, 45, 45, 45, 1504, 45, + + 45, 45, 45, 45, 45, 1504, 1504, 45, 45, 1504, + 45, 45, 45, 45, 45, 1504, 45, 45, 45, 45, + 45, 1504, 45, 1504, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 1504, 45, 45, 1504, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 1488, - 45, 45, 1488, 45, 45, 45, 1488, 1488, 45, 45, - 1488, 1488, 1488, 45, 45, 1488, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 1488, 45, 45, 1488, 1488, - 45, 45, 45, 45, 1488, 45, 45, 45, 45, 45, - - 45, 45, 45, 45, 45, 45, 45, 45, 45, 1488, - 45, 45, 1488, 45, 45, 1488, 45, 45, 45, 45, - 45, 1488, 45, 45, 45, 1488, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 1488, - 45, 45, 45, 1488, 45, 1488, 1488, 45, 45, 45, - 45, 45, 1488, 45, 45, 45, 45, 45, 45, 1488, - 45, 1488, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 1488, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 1488, 1488, 45, 45, 45, 45, 45, 1488, - 45, 45, 45, 45, 45, 45, 45, 45, 1488, 45, - - 45, 45, 45, 45, 45, 1488, 45, 45, 1488, 1488, - 45, 45, 45, 45, 45, 1488, 45, 45, 1488, 45, - 45, 1488, 45, 45, 1488, 45, 45, 1488, 45, 1488, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 1504, 45, 45, 1504, + 45, 45, 45, 1504, 1504, 45, 45, 45, 1504, 1504, + 1504, 45, 45, 1504, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 1504, 45, 45, 1504, 1504, 45, 45, + + 45, 45, 1504, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 1504, 45, 45, + 45, 1504, 45, 45, 1504, 45, 45, 45, 45, 45, + 1504, 45, 45, 45, 1504, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 1504, 45, + 45, 45, 1504, 45, 1504, 1504, 45, 45, 45, 45, + 45, 45, 1504, 45, 45, 45, 45, 45, 45, 1504, + 45, 1504, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 1504, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 1504, 1504, 45, 45, 45, 45, 45, + + 1504, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 1504, 45, 45, 45, 45, 45, 45, 1504, 45, 45, + 1504, 1504, 45, 45, 45, 45, 45, 1504, 45, 45, + 45, 1504, 45, 45, 1504, 45, 45, 1504, 45, 45, + 1504, 45, 1504, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 1488, 45, 1488, - 1488, 45, 45, 45, 45, 45, 45, 1488, 1488, 1488, - 45, 45, 45, 45, 1488, 45, 45, 1488, 45, 45, - 45, 45, 45, 1488, 45, 45, 1488, 0, 1488, 1488, - 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488 + 45, 45, 45, 45, 45, 45, 45, 1504, 45, 45, + 45, 45, 45, 1504, 45, 1504, 1504, 45, 45, 45, + 45, 45, 45, 1504, 1504, 1504, 45, 45, 45, 45, + 1504, 45, 45, 1504, 45, 45, 45, 45, 45, 1504, + 45, 45, 1504, 0, 1504, 1504, 1504, 1504, 1504, 1504, + 1504, 1504, 1504, 1504, 1504, 1504 } ; -static const flex_int16_t yy_nxt[1925] = +static const flex_int16_t yy_nxt[1941] = { 0, - 1488, 13, 14, 13, 1488, 15, 16, 1488, 17, 18, + 1504, 13, 14, 13, 1504, 15, 16, 1504, 17, 18, 19, 20, 21, 22, 22, 22, 23, 24, 85, 364, - 37, 14, 37, 86, 25, 26, 38, 828, 1488, 27, + 37, 14, 37, 86, 25, 26, 38, 829, 1504, 27, 37, 14, 37, 42, 28, 42, 38, 91, 92, 29, 115, 30, 13, 14, 13, 90, 91, 25, 31, 92, - 13, 14, 13, 13, 14, 13, 32, 40, 830, 13, + 13, 14, 13, 13, 14, 13, 32, 40, 831, 13, 14, 13, 33, 40, 115, 91, 92, 365, 90, 34, 35, 13, 14, 13, 94, 15, 16, 95, 17, 18, 19, 20, 21, 22, 22, 22, 23, 24, 13, 14, @@ -1264,7 +1271,7 @@ static const flex_int16_t yy_nxt[1925] = 39, 84, 84, 84, 28, 42, 41, 42, 42, 29, 42, 30, 82, 107, 41, 111, 93, 25, 31, 108, - 130, 138, 88, 831, 88, 832, 32, 89, 89, 89, + 130, 138, 88, 832, 88, 833, 32, 89, 89, 89, 131, 139, 33, 140, 380, 82, 107, 381, 111, 34, 35, 44, 44, 44, 45, 45, 46, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, @@ -1277,11 +1284,11 @@ static const flex_int16_t yy_nxt[1925] = 45, 45, 80, 103, 81, 81, 81, 80, 109, 83, 83, 83, 101, 114, 80, 82, 83, 83, 83, 121, 82, 133, 122, 112, 123, 306, 124, 82, 134, 103, - 396, 103, 101, 113, 135, 833, 114, 110, 82, 136, + 396, 103, 101, 113, 135, 834, 114, 110, 82, 136, 163, 107, 137, 82, 164, 179, 112, 102, 146, 244, 82, 45, 147, 45, 45, 45, 45, 119, 45, 45, 45, 113, 117, 120, 107, 45, 45, 102, 45, 45, - 245, 179, 148, 834, 45, 132, 45, 45, 45, 45, + 245, 179, 148, 835, 45, 132, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 89, 89, @@ -1289,7 +1296,7 @@ static const flex_int16_t yy_nxt[1925] = 128, 142, 143, 45, 180, 144, 152, 45, 181, 45, 118, 145, 129, 149, 153, 150, 154, 151, 112, 114, 157, 155, 156, 158, 159, 165, 181, 427, 113, 166, - 180, 193, 167, 224, 160, 179, 184, 161, 835, 168, + 180, 193, 167, 224, 160, 179, 184, 161, 836, 168, 169, 171, 114, 172, 428, 170, 225, 173, 84, 84, 84, 80, 175, 81, 81, 81, 113, 176, 193, 82, 88, 182, 88, 174, 82, 89, 89, 89, 80, 180, @@ -1298,8 +1305,8 @@ static const flex_int16_t yy_nxt[1925] = 188, 82, 82, 192, 82, 197, 100, 82, 194, 198, 209, 199, 201, 200, 407, 183, 215, 216, 197, 210, 211, 235, 256, 257, 82, 226, 217, 82, 188, 192, - 221, 836, 222, 197, 100, 201, 198, 195, 100, 199, - 200, 227, 100, 407, 188, 230, 250, 837, 231, 223, + 221, 837, 222, 197, 100, 201, 198, 195, 100, 199, + 200, 227, 100, 407, 188, 230, 250, 838, 231, 223, 100, 266, 232, 198, 100, 290, 100, 187, 204, 204, 204, 205, 353, 236, 292, 204, 204, 204, 204, 204, 204, 260, 206, 276, 261, 262, 302, 277, 291, 290, @@ -1309,77 +1316,77 @@ static const flex_int16_t yy_nxt[1925] = 273, 305, 274, 302, 291, 307, 309, 293, 294, 298, 389, 409, 410, 354, 305, 403, 355, 295, 484, 298, 411, 415, 407, 390, 305, 403, 301, 412, 307, 465, - 466, 838, 312, 309, 310, 310, 310, 360, 403, 317, - 839, 310, 310, 310, 310, 310, 310, 318, 404, 415, + 466, 839, 312, 309, 310, 310, 310, 360, 403, 317, + 840, 310, 310, 310, 310, 310, 310, 318, 404, 415, 412, 419, 319, 320, 430, 450, 415, 488, 496, 431, 451, 489, 497, 472, 310, 310, 310, 310, 310, 310, 418, 418, 418, 473, 485, 672, 673, 418, 418, 418, 418, 418, 418, 501, 474, 513, 519, 502, 514, 524, - 524, 520, 532, 558, 533, 548, 840, 635, 559, 634, + 524, 520, 532, 558, 533, 548, 841, 635, 559, 634, 418, 418, 418, 418, 418, 418, 452, 608, 549, 630, - 688, 453, 609, 731, 636, 732, 841, 524, 534, 532, - 829, 533, 45, 45, 45, 635, 634, 721, 842, 45, - 45, 45, 45, 45, 45, 697, 776, 722, 732, 777, - 698, 731, 736, 737, 810, 843, 844, 689, 829, 845, - 846, 811, 45, 45, 45, 45, 45, 45, 813, 847, - 818, 848, 849, 850, 851, 814, 819, 852, 853, 815, - 854, 855, 856, 857, 859, 860, 861, 699, 858, 862, - 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, - 873, 874, 875, 877, 878, 879, 876, 880, 881, 882, + 688, 453, 609, 731, 636, 732, 842, 524, 534, 532, + 830, 533, 45, 45, 45, 635, 634, 721, 843, 45, + 45, 45, 45, 45, 45, 697, 777, 722, 732, 778, + 698, 731, 736, 737, 811, 738, 844, 689, 830, 845, + 846, 812, 45, 45, 45, 45, 45, 45, 814, 847, + 819, 848, 849, 850, 851, 815, 820, 852, 853, 816, + 854, 855, 856, 857, 858, 859, 861, 699, 862, 863, + 860, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 879, 880, 881, 878, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, - 903, 904, 905, 907, 908, 909, 910, 911, 912, 913, - 914, 915, 916, 917, 906, 918, 919, 920, 921, 922, + 903, 904, 905, 906, 907, 909, 910, 911, 912, 913, + 914, 915, 916, 917, 918, 919, 908, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, - 920, 943, 944, 919, 945, 946, 947, 948, 949, 950, - 951, 954, 955, 956, 957, 952, 958, 959, 960, 961, - 962, 963, 964, 965, 966, 967, 968, 969, 971, 972, - 973, 974, 975, 976, 977, 978, 979, 980, 970, 981, + 943, 944, 922, 945, 946, 921, 947, 948, 949, 950, + 951, 952, 953, 954, 957, 958, 959, 960, 955, 961, + 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, + 972, 974, 975, 976, 977, 978, 979, 980, 981, 982, - 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, + 983, 973, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, - 1002, 1003, 1004, 1005, 1007, 1006, 953, 1008, 1009, 1010, + 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1010, 1009, 956, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, - 1031, 1005, 1006, 1032, 1033, 1034, 1035, 1036, 1037, 1039, - 1041, 1042, 1043, 1038, 1044, 1045, 1046, 1047, 1048, 1049, + 1031, 1032, 1033, 1034, 1008, 1009, 1035, 1036, 1037, 1038, + 1039, 1040, 1041, 1043, 1045, 1046, 1047, 1042, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, - 1080, 1040, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, + 1080, 1081, 1082, 1083, 1084, 1044, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, - 1109, 1087, 1110, 1111, 1112, 1113, 1114, 1088, 1115, 1116, - 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, + 1109, 1110, 1111, 1112, 1113, 1091, 1114, 1115, 1116, 1117, + 1118, 1092, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, - 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1145, 1146, 1147, - 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, - 1158, 1159, 1160, 1162, 1163, 1164, 1165, 1166, 1167, 1168, + 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, + 1147, 1148, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, + 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, - 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1158, 1187, - 1188, 1189, 1190, 1192, 1193, 1194, 1195, 1144, 1196, 1197, - 1191, 1198, 1199, 1200, 1161, 1201, 1202, 1203, 1204, 1205, + 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, + 1189, 1190, 1191, 1163, 1192, 1193, 1194, 1195, 1196, 1198, + 1199, 1200, 1149, 1201, 1202, 1203, 1197, 1204, 1205, 1166, 1206, 1207, 1208, 1209, 1210, 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, 1237, 1238, 1239, 1240, 1241, 1219, 1242, 1243, 1244, - 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, + 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, + 1246, 1247, 1225, 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, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, - 1285, 1286, 1288, 1289, 1290, 1291, 1292, 1293, 1266, 1294, - 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, + 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, + 1296, 1297, 1298, 1299, 1300, 1273, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, - 1315, 1316, 1318, 1319, 1320, 1321, 1317, 1322, 1323, 1324, - 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, - 1335, 1336, 1337, 1338, 1311, 1339, 1340, 1287, 1341, 1342, - 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, + 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, + 1325, 1327, 1328, 1329, 1330, 1326, 1331, 1332, 1333, 1334, + 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, + 1345, 1346, 1319, 1347, 1348, 1295, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, @@ -1395,77 +1402,78 @@ static const flex_int16_t yy_nxt[1925] = 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, 12, 12, 12, 12, 12, - 36, 36, 36, 36, 36, 79, 297, 79, 79, 79, - 98, 406, 98, 523, 98, 100, 100, 100, 100, 100, - 116, 116, 116, 116, 116, 178, 100, 178, 178, 178, - 202, 202, 202, 827, 826, 825, 824, 823, 822, 821, - 820, 817, 816, 812, 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, 784, - 783, 782, 781, 780, 779, 778, 775, 774, 773, 772, - - 771, 770, 769, 768, 767, 766, 765, 764, 763, 762, - 761, 760, 759, 758, 757, 756, 755, 754, 753, 752, - 751, 750, 749, 748, 747, 746, 745, 744, 743, 742, - 741, 740, 739, 738, 735, 734, 733, 730, 729, 728, - 727, 726, 725, 724, 723, 720, 719, 718, 717, 716, - 715, 714, 713, 712, 711, 710, 709, 708, 707, 706, - 705, 704, 703, 702, 701, 700, 696, 695, 694, 693, - 692, 691, 690, 687, 686, 685, 684, 683, 682, 681, - 680, 679, 678, 677, 676, 675, 674, 671, 670, 669, - 668, 667, 666, 665, 664, 663, 662, 661, 660, 659, - - 658, 657, 656, 655, 654, 653, 652, 651, 650, 649, - 648, 647, 646, 645, 644, 643, 642, 641, 640, 639, - 638, 637, 633, 632, 631, 630, 629, 628, 627, 626, - 625, 624, 623, 622, 621, 620, 619, 618, 617, 616, - 615, 614, 613, 612, 611, 610, 607, 606, 605, 604, - 603, 602, 601, 600, 599, 598, 597, 596, 595, 594, - 593, 592, 591, 590, 589, 588, 587, 586, 585, 584, - 583, 582, 581, 580, 579, 578, 577, 576, 575, 574, - 573, 572, 571, 570, 569, 568, 567, 566, 565, 564, - 563, 562, 561, 560, 557, 556, 555, 554, 553, 552, - - 551, 550, 547, 546, 545, 544, 543, 542, 541, 540, - 539, 538, 537, 536, 535, 531, 530, 529, 528, 527, - 526, 525, 522, 521, 518, 517, 516, 515, 512, 511, - 510, 509, 508, 507, 506, 505, 504, 503, 500, 499, - 498, 495, 494, 493, 492, 491, 490, 487, 486, 483, - 482, 481, 480, 479, 478, 477, 476, 475, 471, 470, - 469, 468, 467, 464, 463, 462, 461, 460, 459, 458, - 457, 456, 455, 454, 449, 448, 447, 446, 445, 444, - 443, 442, 441, 440, 439, 438, 437, 434, 433, 432, - 429, 426, 425, 424, 423, 422, 421, 420, 417, 416, - - 414, 413, 408, 405, 402, 401, 400, 399, 398, 397, - 395, 394, 393, 392, 391, 388, 387, 386, 385, 384, - 383, 382, 379, 378, 377, 376, 375, 374, 373, 372, - 371, 370, 369, 368, 367, 366, 363, 362, 361, 359, - 358, 357, 356, 352, 351, 350, 349, 348, 347, 346, - 345, 344, 343, 342, 341, 340, 339, 338, 337, 336, - 335, 334, 333, 332, 331, 330, 329, 328, 327, 326, - 325, 324, 323, 322, 321, 316, 315, 314, 313, 311, - 203, 308, 306, 304, 303, 300, 299, 296, 289, 288, - 287, 286, 285, 284, 282, 281, 280, 279, 275, 265, - - 264, 263, 259, 258, 255, 254, 253, 252, 251, 249, - 248, 247, 246, 243, 242, 241, 240, 239, 238, 237, - 234, 233, 229, 228, 220, 219, 218, 214, 213, 212, - 208, 207, 203, 196, 191, 190, 189, 186, 185, 177, - 162, 141, 106, 105, 104, 43, 99, 97, 96, 87, - 43, 1488, 11, 1488, 1488, 1488, 1488, 1488, 1488, 1488, - 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, - 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, - 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, - 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, - - 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, - 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, - 1488, 1488, 1488, 1488 + 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, + 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, + 1503, 12, 12, 12, 12, 12, 36, 36, 36, 36, + 36, 79, 297, 79, 79, 79, 98, 406, 98, 523, + 98, 100, 100, 100, 100, 100, 116, 116, 116, 116, + 116, 178, 100, 178, 178, 178, 202, 202, 202, 828, + 827, 826, 825, 824, 823, 822, 821, 818, 817, 813, + 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, 784, 783, 782, 781, + 780, 779, 776, 775, 774, 773, 772, 771, 770, 769, + 768, 767, 766, 765, 764, 763, 762, 761, 760, 759, + 758, 757, 756, 755, 754, 753, 752, 751, 750, 749, + 748, 747, 746, 745, 744, 743, 742, 741, 740, 739, + 735, 734, 733, 730, 729, 728, 727, 726, 725, 724, + 723, 720, 719, 718, 717, 716, 715, 714, 713, 712, + 711, 710, 709, 708, 707, 706, 705, 704, 703, 702, + 701, 700, 696, 695, 694, 693, 692, 691, 690, 687, + 686, 685, 684, 683, 682, 681, 680, 679, 678, 677, + + 676, 675, 674, 671, 670, 669, 668, 667, 666, 665, + 664, 663, 662, 661, 660, 659, 658, 657, 656, 655, + 654, 653, 652, 651, 650, 649, 648, 647, 646, 645, + 644, 643, 642, 641, 640, 639, 638, 637, 633, 632, + 631, 630, 629, 628, 627, 626, 625, 624, 623, 622, + 621, 620, 619, 618, 617, 616, 615, 614, 613, 612, + 611, 610, 607, 606, 605, 604, 603, 602, 601, 600, + 599, 598, 597, 596, 595, 594, 593, 592, 591, 590, + 589, 588, 587, 586, 585, 584, 583, 582, 581, 580, + 579, 578, 577, 576, 575, 574, 573, 572, 571, 570, + + 569, 568, 567, 566, 565, 564, 563, 562, 561, 560, + 557, 556, 555, 554, 553, 552, 551, 550, 547, 546, + 545, 544, 543, 542, 541, 540, 539, 538, 537, 536, + 535, 531, 530, 529, 528, 527, 526, 525, 522, 521, + 518, 517, 516, 515, 512, 511, 510, 509, 508, 507, + 506, 505, 504, 503, 500, 499, 498, 495, 494, 493, + 492, 491, 490, 487, 486, 483, 482, 481, 480, 479, + 478, 477, 476, 475, 471, 470, 469, 468, 467, 464, + 463, 462, 461, 460, 459, 458, 457, 456, 455, 454, + 449, 448, 447, 446, 445, 444, 443, 442, 441, 440, + + 439, 438, 437, 434, 433, 432, 429, 426, 425, 424, + 423, 422, 421, 420, 417, 416, 414, 413, 408, 405, + 402, 401, 400, 399, 398, 397, 395, 394, 393, 392, + 391, 388, 387, 386, 385, 384, 383, 382, 379, 378, + 377, 376, 375, 374, 373, 372, 371, 370, 369, 368, + 367, 366, 363, 362, 361, 359, 358, 357, 356, 352, + 351, 350, 349, 348, 347, 346, 345, 344, 343, 342, + 341, 340, 339, 338, 337, 336, 335, 334, 333, 332, + 331, 330, 329, 328, 327, 326, 325, 324, 323, 322, + 321, 316, 315, 314, 313, 311, 203, 308, 306, 304, + + 303, 300, 299, 296, 289, 288, 287, 286, 285, 284, + 282, 281, 280, 279, 275, 265, 264, 263, 259, 258, + 255, 254, 253, 252, 251, 249, 248, 247, 246, 243, + 242, 241, 240, 239, 238, 237, 234, 233, 229, 228, + 220, 219, 218, 214, 213, 212, 208, 207, 203, 196, + 191, 190, 189, 186, 185, 177, 162, 141, 106, 105, + 104, 43, 99, 97, 96, 87, 43, 1504, 11, 1504, + 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, + 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, + 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, + + 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, + 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, + 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, + 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504 } ; -static const flex_int16_t yy_chk[1925] = +static const flex_int16_t yy_chk[1941] = { 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 21, 254, @@ -1537,148 +1545,149 @@ static const flex_int16_t yy_chk[1925] = 590, 341, 498, 634, 534, 635, 745, 407, 419, 417, 732, 417, 418, 418, 418, 533, 532, 623, 746, 418, 418, 418, 418, 418, 418, 599, 679, 623, 635, 679, - 599, 634, 639, 639, 715, 747, 748, 590, 732, 749, - 750, 715, 418, 418, 418, 418, 418, 418, 717, 751, - 720, 752, 753, 754, 755, 717, 720, 757, 758, 717, - 759, 760, 761, 762, 763, 764, 765, 599, 762, 766, - 767, 768, 769, 770, 771, 774, 775, 776, 777, 780, - 781, 782, 783, 784, 785, 786, 783, 787, 788, 789, - - 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, - 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, - 811, 812, 813, 814, 815, 816, 817, 818, 819, 821, - 822, 823, 824, 825, 813, 826, 828, 829, 830, 831, - 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, - 842, 843, 844, 845, 847, 848, 849, 850, 851, 852, - 829, 853, 854, 828, 855, 856, 858, 859, 860, 861, - 862, 863, 865, 866, 867, 862, 868, 869, 870, 871, - 872, 873, 874, 875, 876, 877, 878, 879, 880, 883, - 884, 885, 887, 888, 889, 891, 892, 893, 879, 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, 921, 920, 862, 922, 923, 924, - 925, 926, 927, 928, 929, 930, 931, 932, 933, 935, - 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, - 946, 919, 920, 947, 948, 949, 950, 952, 953, 954, - 955, 956, 957, 953, 958, 959, 960, 961, 962, 963, - 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, - 974, 975, 976, 978, 979, 980, 981, 982, 983, 984, - 985, 986, 987, 988, 990, 991, 994, 995, 996, 997, - - 998, 954, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, - 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1016, 1018, - 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, - 1029, 1005, 1030, 1031, 1032, 1033, 1036, 1006, 1038, 1040, - 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1049, 1050, 1051, - 1053, 1054, 1055, 1056, 1059, 1061, 1062, 1063, 1064, 1065, - 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, - 1076, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, - 1087, 1088, 1090, 1091, 1092, 1093, 1095, 1096, 1097, 1098, - 1099, 1100, 1101, 1102, 1104, 1105, 1106, 1107, 1108, 1109, - - 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1087, 1118, - 1119, 1121, 1122, 1123, 1124, 1125, 1128, 1072, 1129, 1130, - 1122, 1131, 1132, 1133, 1090, 1134, 1135, 1136, 1137, 1138, - 1140, 1141, 1142, 1143, 1144, 1145, 1147, 1149, 1152, 1154, - 1155, 1156, 1157, 1158, 1161, 1162, 1163, 1164, 1165, 1166, - 1167, 1168, 1169, 1170, 1172, 1173, 1174, 1175, 1176, 1177, - 1178, 1179, 1180, 1181, 1182, 1184, 1158, 1187, 1189, 1190, - 1191, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1202, 1203, - 1205, 1206, 1207, 1208, 1209, 1211, 1212, 1213, 1214, 1215, - 1217, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, - - 1229, 1230, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, - 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1219, 1247, - 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, - 1258, 1259, 1261, 1262, 1264, 1265, 1266, 1269, 1270, 1274, - 1275, 1277, 1278, 1279, 1280, 1281, 1277, 1282, 1283, 1284, - 1285, 1287, 1288, 1291, 1292, 1293, 1294, 1296, 1297, 1298, - 1299, 1300, 1301, 1302, 1266, 1303, 1304, 1240, 1305, 1306, - 1307, 1308, 1309, 1311, 1312, 1314, 1315, 1317, 1318, 1319, - 1320, 1321, 1323, 1324, 1325, 1327, 1328, 1329, 1330, 1331, - 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1341, 1342, - - 1343, 1345, 1348, 1349, 1350, 1351, 1352, 1354, 1355, 1356, - 1357, 1358, 1359, 1361, 1363, 1364, 1365, 1366, 1367, 1368, - 1369, 1370, 1371, 1373, 1374, 1375, 1376, 1377, 1378, 1379, - 1380, 1381, 1382, 1385, 1386, 1387, 1388, 1389, 1391, 1392, - 1393, 1394, 1395, 1396, 1397, 1398, 1400, 1401, 1402, 1403, - 1404, 1405, 1407, 1408, 1411, 1412, 1413, 1414, 1415, 1417, - 1418, 1420, 1421, 1423, 1424, 1426, 1427, 1429, 1431, 1432, - 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, - 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, - 1453, 1454, 1455, 1456, 1457, 1459, 1462, 1463, 1464, 1465, - - 1466, 1467, 1471, 1472, 1473, 1474, 1476, 1477, 1479, 1480, - 1481, 1482, 1483, 1485, 1486, 1489, 1489, 1489, 1489, 1489, - 1490, 1490, 1490, 1490, 1490, 1491, 1497, 1491, 1491, 1491, - 1492, 1498, 1492, 1499, 1492, 1493, 1493, 1493, 1493, 1493, - 1494, 1494, 1494, 1494, 1494, 1495, 1500, 1495, 1495, 1495, - 1496, 1496, 1496, 729, 728, 727, 726, 725, 724, 723, - 722, 719, 718, 716, 714, 713, 712, 711, 710, 709, - 708, 707, 706, 705, 704, 703, 702, 701, 700, 699, - 698, 696, 695, 694, 693, 692, 691, 690, 689, 687, - 686, 685, 684, 683, 682, 680, 678, 677, 676, 675, - - 674, 673, 672, 671, 670, 669, 668, 667, 666, 665, - 664, 663, 662, 660, 659, 658, 657, 656, 655, 654, - 653, 652, 651, 650, 649, 648, 647, 646, 645, 644, - 643, 642, 641, 640, 638, 637, 636, 633, 632, 631, - 628, 627, 626, 625, 624, 621, 620, 619, 618, 617, - 616, 615, 614, 613, 612, 611, 610, 609, 607, 606, - 605, 604, 603, 602, 601, 600, 598, 597, 595, 594, - 593, 592, 591, 589, 588, 587, 585, 584, 582, 581, - 580, 579, 578, 577, 576, 575, 574, 572, 571, 570, - 569, 568, 566, 565, 564, 563, 562, 561, 560, 559, - - 557, 556, 555, 554, 553, 552, 551, 550, 549, 548, - 547, 546, 545, 544, 543, 542, 541, 540, 539, 538, - 537, 536, 530, 528, 525, 524, 522, 521, 520, 518, - 514, 513, 512, 511, 510, 509, 508, 507, 506, 505, - 504, 503, 502, 501, 500, 499, 497, 496, 495, 494, - 493, 492, 491, 490, 489, 488, 487, 485, 483, 482, - 481, 480, 479, 478, 477, 476, 475, 474, 473, 472, - 470, 469, 468, 467, 466, 465, 464, 463, 462, 461, - 460, 459, 458, 457, 456, 455, 454, 453, 452, 451, - 449, 448, 447, 446, 444, 443, 442, 441, 440, 439, - - 437, 436, 434, 433, 432, 431, 429, 428, 427, 426, - 425, 424, 423, 421, 420, 415, 414, 412, 411, 410, - 409, 408, 405, 402, 400, 399, 398, 397, 395, 394, - 393, 392, 391, 390, 389, 388, 387, 386, 384, 383, - 382, 380, 379, 378, 377, 376, 375, 373, 372, 370, - 369, 368, 367, 366, 365, 364, 363, 362, 358, 357, - 356, 355, 354, 352, 351, 350, 349, 348, 347, 346, - 345, 344, 343, 342, 340, 339, 338, 337, 336, 335, - 334, 333, 332, 331, 330, 329, 328, 326, 325, 324, - 322, 319, 318, 317, 316, 315, 314, 313, 309, 307, - - 304, 302, 299, 296, 289, 288, 287, 286, 285, 284, - 282, 281, 280, 279, 278, 276, 275, 274, 273, 272, - 271, 270, 268, 267, 266, 265, 264, 263, 262, 261, - 260, 259, 258, 257, 256, 255, 253, 252, 251, 249, - 248, 247, 246, 244, 243, 242, 241, 240, 239, 238, - 237, 236, 234, 233, 232, 231, 230, 229, 228, 227, - 226, 225, 224, 223, 222, 221, 220, 219, 218, 217, - 216, 215, 214, 213, 212, 210, 209, 208, 207, 205, - 202, 200, 198, 196, 195, 190, 189, 185, 177, 176, - 175, 174, 173, 172, 170, 169, 168, 167, 165, 163, - - 162, 161, 159, 158, 156, 155, 154, 153, 152, 150, - 149, 148, 147, 145, 144, 143, 142, 141, 140, 139, - 137, 136, 134, 133, 129, 128, 127, 125, 124, 123, - 121, 120, 116, 110, 106, 105, 104, 98, 97, 78, - 73, 67, 50, 49, 48, 43, 41, 39, 38, 24, - 14, 11, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, - 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, - 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, - 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, - 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, - - 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, - 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, - 1488, 1488, 1488, 1488 + 599, 634, 639, 639, 715, 639, 747, 590, 732, 748, + 749, 715, 418, 418, 418, 418, 418, 418, 717, 750, + 720, 751, 752, 753, 754, 717, 720, 755, 756, 717, + 758, 759, 760, 761, 762, 763, 764, 599, 765, 766, + 763, 767, 768, 769, 770, 771, 772, 775, 776, 777, + 778, 781, 782, 783, 784, 785, 786, 787, 784, 788, + + 789, 790, 792, 793, 794, 795, 796, 797, 798, 799, + 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, + 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, + 820, 822, 823, 824, 825, 826, 814, 827, 829, 830, + 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, + 841, 842, 843, 844, 845, 846, 847, 849, 850, 851, + 852, 853, 830, 854, 855, 829, 856, 857, 858, 860, + 861, 862, 863, 864, 865, 867, 868, 869, 864, 870, + 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 885, 886, 887, 889, 890, 891, 893, 894, + + 895, 881, 896, 897, 898, 899, 900, 901, 902, 903, + 904, 905, 906, 907, 908, 909, 910, 912, 913, 914, + 915, 916, 917, 918, 919, 920, 921, 923, 922, 864, + 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, + 934, 935, 936, 938, 939, 940, 941, 942, 943, 944, + 945, 946, 947, 948, 921, 922, 949, 950, 951, 952, + 953, 955, 956, 957, 958, 959, 960, 956, 961, 962, + 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, + 973, 974, 975, 976, 977, 978, 979, 981, 982, 983, + 984, 985, 986, 987, 988, 989, 990, 991, 993, 994, + + 997, 998, 999, 1000, 1001, 957, 1002, 1003, 1004, 1005, + 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, + 1016, 1017, 1018, 1020, 1022, 1023, 1024, 1025, 1026, 1027, + 1028, 1029, 1030, 1031, 1032, 1008, 1033, 1034, 1035, 1036, + 1037, 1009, 1040, 1042, 1044, 1045, 1046, 1047, 1048, 1049, + 1050, 1051, 1053, 1054, 1055, 1057, 1058, 1059, 1060, 1063, + 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, + 1075, 1076, 1077, 1078, 1079, 1080, 1082, 1083, 1084, 1085, + 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1094, 1095, 1096, + 1097, 1098, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, + + 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, + 1119, 1120, 1121, 1091, 1122, 1123, 1124, 1126, 1127, 1128, + 1129, 1130, 1076, 1133, 1134, 1135, 1127, 1136, 1137, 1094, + 1138, 1139, 1140, 1141, 1142, 1143, 1145, 1146, 1147, 1148, + 1149, 1150, 1152, 1154, 1157, 1159, 1160, 1161, 1162, 1163, + 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, + 1176, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, + 1187, 1188, 1163, 1190, 1193, 1195, 1196, 1197, 1198, 1200, + 1201, 1202, 1203, 1204, 1205, 1208, 1209, 1211, 1212, 1213, + 1214, 1215, 1217, 1218, 1219, 1220, 1221, 1223, 1225, 1226, + + 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1236, 1237, + 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1246, 1247, + 1248, 1249, 1250, 1251, 1252, 1225, 1253, 1254, 1255, 1256, + 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, + 1268, 1269, 1271, 1272, 1273, 1276, 1277, 1278, 1282, 1283, + 1285, 1286, 1287, 1288, 1289, 1285, 1290, 1291, 1292, 1293, + 1295, 1296, 1299, 1300, 1301, 1302, 1304, 1305, 1306, 1307, + 1308, 1309, 1273, 1310, 1311, 1247, 1312, 1313, 1314, 1315, + 1316, 1317, 1319, 1320, 1321, 1323, 1324, 1326, 1327, 1328, + 1329, 1330, 1332, 1333, 1334, 1336, 1337, 1338, 1339, 1340, + + 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1350, 1351, + 1352, 1354, 1357, 1358, 1359, 1360, 1361, 1362, 1364, 1365, + 1366, 1367, 1368, 1369, 1371, 1373, 1374, 1375, 1376, 1377, + 1378, 1379, 1380, 1381, 1383, 1384, 1385, 1386, 1387, 1388, + 1389, 1390, 1391, 1392, 1393, 1396, 1397, 1398, 1399, 1400, + 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1412, + 1413, 1414, 1415, 1416, 1417, 1419, 1420, 1423, 1424, 1425, + 1426, 1427, 1429, 1430, 1431, 1433, 1434, 1436, 1437, 1439, + 1440, 1442, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, + 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, + + 1462, 1463, 1464, 1465, 1466, 1467, 1469, 1470, 1471, 1472, + 1473, 1475, 1478, 1479, 1480, 1481, 1482, 1483, 1487, 1488, + 1489, 1490, 1492, 1493, 1495, 1496, 1497, 1498, 1499, 1501, + 1502, 1505, 1505, 1505, 1505, 1505, 1506, 1506, 1506, 1506, + 1506, 1507, 1513, 1507, 1507, 1507, 1508, 1514, 1508, 1515, + 1508, 1509, 1509, 1509, 1509, 1509, 1510, 1510, 1510, 1510, + 1510, 1511, 1516, 1511, 1511, 1511, 1512, 1512, 1512, 729, + 728, 727, 726, 725, 724, 723, 722, 719, 718, 716, + 714, 713, 712, 711, 710, 709, 708, 707, 706, 705, + 704, 703, 702, 701, 700, 699, 698, 696, 695, 694, + + 693, 692, 691, 690, 689, 687, 686, 685, 684, 683, + 682, 680, 678, 677, 676, 675, 674, 673, 672, 671, + 670, 669, 668, 667, 666, 665, 664, 663, 662, 660, + 659, 658, 657, 656, 655, 654, 653, 652, 651, 650, + 649, 648, 647, 646, 645, 644, 643, 642, 641, 640, + 638, 637, 636, 633, 632, 631, 628, 627, 626, 625, + 624, 621, 620, 619, 618, 617, 616, 615, 614, 613, + 612, 611, 610, 609, 607, 606, 605, 604, 603, 602, + 601, 600, 598, 597, 595, 594, 593, 592, 591, 589, + 588, 587, 585, 584, 582, 581, 580, 579, 578, 577, + + 576, 575, 574, 572, 571, 570, 569, 568, 566, 565, + 564, 563, 562, 561, 560, 559, 557, 556, 555, 554, + 553, 552, 551, 550, 549, 548, 547, 546, 545, 544, + 543, 542, 541, 540, 539, 538, 537, 536, 530, 528, + 525, 524, 522, 521, 520, 518, 514, 513, 512, 511, + 510, 509, 508, 507, 506, 505, 504, 503, 502, 501, + 500, 499, 497, 496, 495, 494, 493, 492, 491, 490, + 489, 488, 487, 485, 483, 482, 481, 480, 479, 478, + 477, 476, 475, 474, 473, 472, 470, 469, 468, 467, + 466, 465, 464, 463, 462, 461, 460, 459, 458, 457, + + 456, 455, 454, 453, 452, 451, 449, 448, 447, 446, + 444, 443, 442, 441, 440, 439, 437, 436, 434, 433, + 432, 431, 429, 428, 427, 426, 425, 424, 423, 421, + 420, 415, 414, 412, 411, 410, 409, 408, 405, 402, + 400, 399, 398, 397, 395, 394, 393, 392, 391, 390, + 389, 388, 387, 386, 384, 383, 382, 380, 379, 378, + 377, 376, 375, 373, 372, 370, 369, 368, 367, 366, + 365, 364, 363, 362, 358, 357, 356, 355, 354, 352, + 351, 350, 349, 348, 347, 346, 345, 344, 343, 342, + 340, 339, 338, 337, 336, 335, 334, 333, 332, 331, + + 330, 329, 328, 326, 325, 324, 322, 319, 318, 317, + 316, 315, 314, 313, 309, 307, 304, 302, 299, 296, + 289, 288, 287, 286, 285, 284, 282, 281, 280, 279, + 278, 276, 275, 274, 273, 272, 271, 270, 268, 267, + 266, 265, 264, 263, 262, 261, 260, 259, 258, 257, + 256, 255, 253, 252, 251, 249, 248, 247, 246, 244, + 243, 242, 241, 240, 239, 238, 237, 236, 234, 233, + 232, 231, 230, 229, 228, 227, 226, 225, 224, 223, + 222, 221, 220, 219, 218, 217, 216, 215, 214, 213, + 212, 210, 209, 208, 207, 205, 202, 200, 198, 196, + + 195, 190, 189, 185, 177, 176, 175, 174, 173, 172, + 170, 169, 168, 167, 165, 163, 162, 161, 159, 158, + 156, 155, 154, 153, 152, 150, 149, 148, 147, 145, + 144, 143, 142, 141, 140, 139, 137, 136, 134, 133, + 129, 128, 127, 125, 124, 123, 121, 120, 116, 110, + 106, 105, 104, 98, 97, 78, 73, 67, 50, 49, + 48, 43, 41, 39, 38, 24, 14, 11, 1504, 1504, + 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, + 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, + 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, + + 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, + 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, + 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, + 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504 } ; static yy_state_type yy_last_accepting_state; @@ -1687,28 +1696,28 @@ static char *yy_last_accepting_cpos; extern int yy_flex_debug; int yy_flex_debug = 1; -static const flex_int16_t yy_rule_linenum[182] = +static const flex_int16_t yy_rule_linenum[183] = { 0, 149, 151, 153, 158, 159, 164, 165, 166, 178, 181, 186, 193, 202, 211, 220, 229, 238, 247, 256, 265, 274, 283, 292, 301, 310, 319, 328, 338, 348, 358, 368, 378, 387, 397, 407, 417, 427, 436, 445, 454, - 463, 472, 481, 490, 499, 508, 517, 526, 536, 545, - 558, 567, 576, 585, 594, 605, 616, 627, 638, 650, - 661, 672, 683, 694, 705, 716, 727, 738, 749, 760, - 771, 782, 793, 804, 815, 824, 833, 843, 852, 861, - 876, 892, 901, 910, 919, 928, 937, 946, 955, 964, - 973, 982, 1004, 1026, 1035, 1045, 1055, 1064, 1074, 1085, - - 1094, 1103, 1112, 1121, 1130, 1140, 1149, 1158, 1167, 1176, - 1185, 1194, 1203, 1212, 1221, 1231, 1240, 1249, 1259, 1271, - 1284, 1293, 1302, 1312, 1322, 1331, 1342, 1352, 1361, 1371, - 1381, 1390, 1399, 1408, 1417, 1427, 1436, 1446, 1455, 1464, - 1473, 1482, 1491, 1500, 1509, 1518, 1527, 1536, 1545, 1554, - 1563, 1572, 1581, 1590, 1599, 1608, 1617, 1626, 1635, 1644, - 1653, 1662, 1671, 1681, 1780, 1785, 1790, 1795, 1796, 1797, - 1798, 1799, 1800, 1802, 1820, 1833, 1838, 1842, 1844, 1846, - 1848 + 463, 472, 481, 490, 499, 508, 517, 526, 535, 544, + 553, 566, 575, 584, 593, 602, 613, 624, 635, 646, + 658, 669, 680, 691, 702, 713, 724, 735, 746, 757, + 768, 779, 790, 801, 812, 823, 832, 841, 851, 860, + 869, 884, 900, 909, 918, 927, 936, 945, 954, 963, + 972, 981, 990, 1012, 1034, 1043, 1053, 1063, 1072, 1082, + + 1093, 1102, 1111, 1120, 1129, 1138, 1148, 1157, 1166, 1175, + 1184, 1193, 1202, 1211, 1220, 1229, 1239, 1248, 1257, 1267, + 1279, 1292, 1301, 1310, 1320, 1330, 1339, 1350, 1360, 1369, + 1379, 1389, 1398, 1407, 1416, 1425, 1435, 1444, 1454, 1463, + 1472, 1481, 1490, 1499, 1508, 1517, 1526, 1535, 1544, 1553, + 1562, 1571, 1580, 1589, 1598, 1607, 1616, 1625, 1634, 1643, + 1652, 1661, 1670, 1679, 1689, 1788, 1793, 1798, 1803, 1804, + 1805, 1806, 1807, 1808, 1810, 1828, 1841, 1846, 1850, 1852, + 1854, 1856 } ; /* The intent behind this definition is that it'll catch @@ -1761,7 +1770,7 @@ using namespace isc::dhcp; /* To avoid the call to exit... oops! */ #define YY_FATAL_ERROR(msg) isc::dhcp::Parser6Context::fatal(msg) -#line 1764 "dhcp6_lexer.cc" +#line 1774 "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 @@ -1787,8 +1796,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 1790 "dhcp6_lexer.cc" -#line 1791 "dhcp6_lexer.cc" +#line 1800 "dhcp6_lexer.cc" +#line 1801 "dhcp6_lexer.cc" #define INITIAL 0 #define COMMENT 1 @@ -2120,7 +2129,7 @@ YY_DECL } -#line 2123 "dhcp6_lexer.cc" +#line 2133 "dhcp6_lexer.cc" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -2149,13 +2158,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 >= 1489 ) + if ( yy_current_state >= 1505 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } - while ( yy_current_state != 1488 ); + while ( yy_current_state != 1504 ); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); @@ -2174,13 +2183,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 < 182 ) + else if ( yy_act < 183 ) fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n", (long)yy_rule_linenum[yy_act], yytext ); - else if ( yy_act == 182 ) + else if ( yy_act == 183 ) fprintf( stderr, "--accepting default rule (\"%s\")\n", yytext ); - else if ( yy_act == 183 ) + else if ( yy_act == 184 ) fprintf( stderr, "--(end of buffer or a NUL)\n" ); else fprintf( stderr, "--EOF (start condition %d)\n", YY_START ); @@ -2739,7 +2748,19 @@ YY_RULE_SETUP YY_BREAK case 49: YY_RULE_SETUP -#line 536 "dhcp6_lexer.ll" +#line 535 "dhcp6_lexer.ll" +{ + switch(driver.ctx_) { + case isc::dhcp::Parser6Context::CONFIG_CONTROL: + return isc::dhcp::Dhcp6Parser::make_CONFIG_FETCH_WAIT_TIME(driver.loc_); + default: + return isc::dhcp::Dhcp6Parser::make_STRING("config-fetch-wait-time", driver.loc_); + } +} + YY_BREAK +case 50: +YY_RULE_SETUP +#line 544 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::HOSTS_DATABASE: @@ -2749,9 +2770,9 @@ YY_RULE_SETUP } } YY_BREAK -case 50: +case 51: YY_RULE_SETUP -#line 545 "dhcp6_lexer.ll" +#line 553 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -2765,9 +2786,9 @@ YY_RULE_SETUP } } YY_BREAK -case 51: +case 52: YY_RULE_SETUP -#line 558 "dhcp6_lexer.ll" +#line 566 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DATABASE_TYPE: @@ -2777,9 +2798,9 @@ YY_RULE_SETUP } } YY_BREAK -case 52: +case 53: YY_RULE_SETUP -#line 567 "dhcp6_lexer.ll" +#line 575 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DATABASE_TYPE: @@ -2789,9 +2810,9 @@ YY_RULE_SETUP } } YY_BREAK -case 53: +case 54: YY_RULE_SETUP -#line 576 "dhcp6_lexer.ll" +#line 584 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DATABASE_TYPE: @@ -2801,9 +2822,9 @@ YY_RULE_SETUP } } YY_BREAK -case 54: +case 55: YY_RULE_SETUP -#line 585 "dhcp6_lexer.ll" +#line 593 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DATABASE_TYPE: @@ -2813,9 +2834,9 @@ YY_RULE_SETUP } } YY_BREAK -case 55: +case 56: YY_RULE_SETUP -#line 594 "dhcp6_lexer.ll" +#line 602 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -2827,9 +2848,9 @@ YY_RULE_SETUP } } YY_BREAK -case 56: +case 57: YY_RULE_SETUP -#line 605 "dhcp6_lexer.ll" +#line 613 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -2841,9 +2862,9 @@ YY_RULE_SETUP } } YY_BREAK -case 57: +case 58: YY_RULE_SETUP -#line 616 "dhcp6_lexer.ll" +#line 624 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -2855,9 +2876,9 @@ YY_RULE_SETUP } } YY_BREAK -case 58: +case 59: YY_RULE_SETUP -#line 627 "dhcp6_lexer.ll" +#line 635 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -2869,9 +2890,9 @@ YY_RULE_SETUP } } YY_BREAK -case 59: +case 60: YY_RULE_SETUP -#line 638 "dhcp6_lexer.ll" +#line 646 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -2884,9 +2905,9 @@ YY_RULE_SETUP } } YY_BREAK -case 60: +case 61: YY_RULE_SETUP -#line 650 "dhcp6_lexer.ll" +#line 658 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -2898,9 +2919,9 @@ YY_RULE_SETUP } } YY_BREAK -case 61: +case 62: YY_RULE_SETUP -#line 661 "dhcp6_lexer.ll" +#line 669 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -2912,9 +2933,9 @@ YY_RULE_SETUP } } YY_BREAK -case 62: +case 63: YY_RULE_SETUP -#line 672 "dhcp6_lexer.ll" +#line 680 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -2926,9 +2947,9 @@ YY_RULE_SETUP } } YY_BREAK -case 63: +case 64: YY_RULE_SETUP -#line 683 "dhcp6_lexer.ll" +#line 691 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -2940,9 +2961,9 @@ YY_RULE_SETUP } } YY_BREAK -case 64: +case 65: YY_RULE_SETUP -#line 694 "dhcp6_lexer.ll" +#line 702 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -2954,9 +2975,9 @@ YY_RULE_SETUP } } YY_BREAK -case 65: +case 66: YY_RULE_SETUP -#line 705 "dhcp6_lexer.ll" +#line 713 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -2968,9 +2989,9 @@ YY_RULE_SETUP } } YY_BREAK -case 66: +case 67: YY_RULE_SETUP -#line 716 "dhcp6_lexer.ll" +#line 724 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -2982,9 +3003,9 @@ YY_RULE_SETUP } } YY_BREAK -case 67: +case 68: YY_RULE_SETUP -#line 727 "dhcp6_lexer.ll" +#line 735 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -2996,9 +3017,9 @@ YY_RULE_SETUP } } YY_BREAK -case 68: +case 69: YY_RULE_SETUP -#line 738 "dhcp6_lexer.ll" +#line 746 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -3010,9 +3031,9 @@ YY_RULE_SETUP } } YY_BREAK -case 69: +case 70: YY_RULE_SETUP -#line 749 "dhcp6_lexer.ll" +#line 757 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -3024,9 +3045,9 @@ YY_RULE_SETUP } } YY_BREAK -case 70: +case 71: YY_RULE_SETUP -#line 760 "dhcp6_lexer.ll" +#line 768 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -3038,9 +3059,9 @@ YY_RULE_SETUP } } YY_BREAK -case 71: +case 72: YY_RULE_SETUP -#line 771 "dhcp6_lexer.ll" +#line 779 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3052,9 +3073,9 @@ YY_RULE_SETUP } } YY_BREAK -case 72: +case 73: YY_RULE_SETUP -#line 782 "dhcp6_lexer.ll" +#line 790 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3066,9 +3087,9 @@ YY_RULE_SETUP } } YY_BREAK -case 73: +case 74: YY_RULE_SETUP -#line 793 "dhcp6_lexer.ll" +#line 801 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3080,9 +3101,9 @@ YY_RULE_SETUP } } YY_BREAK -case 74: +case 75: YY_RULE_SETUP -#line 804 "dhcp6_lexer.ll" +#line 812 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3094,9 +3115,9 @@ YY_RULE_SETUP } } YY_BREAK -case 75: +case 76: YY_RULE_SETUP -#line 815 "dhcp6_lexer.ll" +#line 823 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3106,9 +3127,9 @@ YY_RULE_SETUP } } YY_BREAK -case 76: +case 77: YY_RULE_SETUP -#line 824 "dhcp6_lexer.ll" +#line 832 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3118,9 +3139,9 @@ YY_RULE_SETUP } } YY_BREAK -case 77: +case 78: YY_RULE_SETUP -#line 833 "dhcp6_lexer.ll" +#line 841 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3131,9 +3152,9 @@ YY_RULE_SETUP } } YY_BREAK -case 78: +case 79: YY_RULE_SETUP -#line 843 "dhcp6_lexer.ll" +#line 851 "dhcp6_lexer.ll" { switch (driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3143,9 +3164,9 @@ YY_RULE_SETUP } } YY_BREAK -case 79: +case 80: YY_RULE_SETUP -#line 852 "dhcp6_lexer.ll" +#line 860 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3155,9 +3176,9 @@ YY_RULE_SETUP } } YY_BREAK -case 80: +case 81: YY_RULE_SETUP -#line 861 "dhcp6_lexer.ll" +#line 869 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3173,9 +3194,9 @@ YY_RULE_SETUP } } YY_BREAK -case 81: +case 82: YY_RULE_SETUP -#line 876 "dhcp6_lexer.ll" +#line 884 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LEASE_DATABASE: @@ -3192,9 +3213,9 @@ YY_RULE_SETUP } } YY_BREAK -case 82: +case 83: YY_RULE_SETUP -#line 892 "dhcp6_lexer.ll" +#line 900 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DATA: @@ -3204,9 +3225,9 @@ YY_RULE_SETUP } } YY_BREAK -case 83: +case 84: YY_RULE_SETUP -#line 901 "dhcp6_lexer.ll" +#line 909 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DATA: @@ -3216,9 +3237,9 @@ YY_RULE_SETUP } } YY_BREAK -case 84: +case 85: YY_RULE_SETUP -#line 910 "dhcp6_lexer.ll" +#line 918 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -3228,9 +3249,9 @@ YY_RULE_SETUP } } YY_BREAK -case 85: +case 86: YY_RULE_SETUP -#line 919 "dhcp6_lexer.ll" +#line 927 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -3240,9 +3261,9 @@ YY_RULE_SETUP } } YY_BREAK -case 86: +case 87: YY_RULE_SETUP -#line 928 "dhcp6_lexer.ll" +#line 936 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::PD_POOLS: @@ -3252,9 +3273,9 @@ YY_RULE_SETUP } } YY_BREAK -case 87: +case 88: YY_RULE_SETUP -#line 937 "dhcp6_lexer.ll" +#line 945 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::PD_POOLS: @@ -3264,9 +3285,9 @@ YY_RULE_SETUP } } YY_BREAK -case 88: +case 89: YY_RULE_SETUP -#line 946 "dhcp6_lexer.ll" +#line 954 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::PD_POOLS: @@ -3276,9 +3297,9 @@ YY_RULE_SETUP } } YY_BREAK -case 89: +case 90: YY_RULE_SETUP -#line 955 "dhcp6_lexer.ll" +#line 963 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::PD_POOLS: @@ -3288,9 +3309,9 @@ YY_RULE_SETUP } } YY_BREAK -case 90: +case 91: YY_RULE_SETUP -#line 964 "dhcp6_lexer.ll" +#line 972 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::PD_POOLS: @@ -3300,9 +3321,9 @@ YY_RULE_SETUP } } YY_BREAK -case 91: +case 92: YY_RULE_SETUP -#line 973 "dhcp6_lexer.ll" +#line 981 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::POOLS: @@ -3312,9 +3333,9 @@ YY_RULE_SETUP } } YY_BREAK -case 92: +case 93: YY_RULE_SETUP -#line 982 "dhcp6_lexer.ll" +#line 990 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3337,9 +3358,9 @@ YY_RULE_SETUP } } YY_BREAK -case 93: +case 94: YY_RULE_SETUP -#line 1004 "dhcp6_lexer.ll" +#line 1012 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3362,9 +3383,9 @@ YY_RULE_SETUP } } YY_BREAK -case 94: +case 95: YY_RULE_SETUP -#line 1026 "dhcp6_lexer.ll" +#line 1034 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -3374,9 +3395,9 @@ YY_RULE_SETUP } } YY_BREAK -case 95: +case 96: YY_RULE_SETUP -#line 1035 "dhcp6_lexer.ll" +#line 1043 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -3387,9 +3408,9 @@ YY_RULE_SETUP } } YY_BREAK -case 96: +case 97: YY_RULE_SETUP -#line 1045 "dhcp6_lexer.ll" +#line 1053 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -3400,9 +3421,9 @@ YY_RULE_SETUP } } YY_BREAK -case 97: +case 98: YY_RULE_SETUP -#line 1055 "dhcp6_lexer.ll" +#line 1063 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -3412,9 +3433,9 @@ YY_RULE_SETUP } } YY_BREAK -case 98: +case 99: YY_RULE_SETUP -#line 1064 "dhcp6_lexer.ll" +#line 1072 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -3425,9 +3446,9 @@ YY_RULE_SETUP } } YY_BREAK -case 99: +case 100: YY_RULE_SETUP -#line 1074 "dhcp6_lexer.ll" +#line 1082 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3439,9 +3460,9 @@ YY_RULE_SETUP } } YY_BREAK -case 100: +case 101: YY_RULE_SETUP -#line 1085 "dhcp6_lexer.ll" +#line 1093 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RESERVATION_MODE: @@ -3451,9 +3472,9 @@ YY_RULE_SETUP } } YY_BREAK -case 101: +case 102: YY_RULE_SETUP -#line 1094 "dhcp6_lexer.ll" +#line 1102 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RESERVATION_MODE: @@ -3463,9 +3484,9 @@ YY_RULE_SETUP } } YY_BREAK -case 102: +case 103: YY_RULE_SETUP -#line 1103 "dhcp6_lexer.ll" +#line 1111 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RESERVATION_MODE: @@ -3475,9 +3496,9 @@ YY_RULE_SETUP } } YY_BREAK -case 103: +case 104: YY_RULE_SETUP -#line 1112 "dhcp6_lexer.ll" +#line 1120 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RESERVATION_MODE: @@ -3487,9 +3508,9 @@ YY_RULE_SETUP } } YY_BREAK -case 104: +case 105: YY_RULE_SETUP -#line 1121 "dhcp6_lexer.ll" +#line 1129 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RESERVATION_MODE: @@ -3499,9 +3520,9 @@ YY_RULE_SETUP } } YY_BREAK -case 105: +case 106: YY_RULE_SETUP -#line 1130 "dhcp6_lexer.ll" +#line 1138 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DEF: @@ -3512,9 +3533,9 @@ YY_RULE_SETUP } } YY_BREAK -case 106: +case 107: YY_RULE_SETUP -#line 1140 "dhcp6_lexer.ll" +#line 1148 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3524,9 +3545,9 @@ YY_RULE_SETUP } } YY_BREAK -case 107: +case 108: YY_RULE_SETUP -#line 1149 "dhcp6_lexer.ll" +#line 1157 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3536,9 +3557,9 @@ YY_RULE_SETUP } } YY_BREAK -case 108: +case 109: YY_RULE_SETUP -#line 1158 "dhcp6_lexer.ll" +#line 1166 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3548,9 +3569,9 @@ YY_RULE_SETUP } } YY_BREAK -case 109: +case 110: YY_RULE_SETUP -#line 1167 "dhcp6_lexer.ll" +#line 1175 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::CONFIG: @@ -3560,9 +3581,9 @@ YY_RULE_SETUP } } YY_BREAK -case 110: +case 111: YY_RULE_SETUP -#line 1176 "dhcp6_lexer.ll" +#line 1184 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LOGGING: @@ -3572,9 +3593,9 @@ YY_RULE_SETUP } } YY_BREAK -case 111: +case 112: YY_RULE_SETUP -#line 1185 "dhcp6_lexer.ll" +#line 1193 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LOGGERS: @@ -3584,9 +3605,9 @@ YY_RULE_SETUP } } YY_BREAK -case 112: +case 113: YY_RULE_SETUP -#line 1194 "dhcp6_lexer.ll" +#line 1202 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OUTPUT_OPTIONS: @@ -3596,9 +3617,9 @@ YY_RULE_SETUP } } YY_BREAK -case 113: +case 114: YY_RULE_SETUP -#line 1203 "dhcp6_lexer.ll" +#line 1211 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OUTPUT_OPTIONS: @@ -3608,9 +3629,9 @@ YY_RULE_SETUP } } YY_BREAK -case 114: +case 115: YY_RULE_SETUP -#line 1212 "dhcp6_lexer.ll" +#line 1220 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OUTPUT_OPTIONS: @@ -3620,9 +3641,9 @@ YY_RULE_SETUP } } YY_BREAK -case 115: +case 116: YY_RULE_SETUP -#line 1221 "dhcp6_lexer.ll" +#line 1229 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OUTPUT_OPTIONS: @@ -3632,9 +3653,9 @@ YY_RULE_SETUP } } YY_BREAK -case 116: +case 117: YY_RULE_SETUP -#line 1231 "dhcp6_lexer.ll" +#line 1239 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LOGGERS: @@ -3644,9 +3665,9 @@ YY_RULE_SETUP } } YY_BREAK -case 117: +case 118: YY_RULE_SETUP -#line 1240 "dhcp6_lexer.ll" +#line 1248 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LOGGERS: @@ -3656,9 +3677,9 @@ YY_RULE_SETUP } } YY_BREAK -case 118: +case 119: YY_RULE_SETUP -#line 1249 "dhcp6_lexer.ll" +#line 1257 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3669,9 +3690,9 @@ YY_RULE_SETUP } } YY_BREAK -case 119: +case 120: YY_RULE_SETUP -#line 1259 "dhcp6_lexer.ll" +#line 1267 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -3684,9 +3705,9 @@ YY_RULE_SETUP } } YY_BREAK -case 120: +case 121: YY_RULE_SETUP -#line 1271 "dhcp6_lexer.ll" +#line 1279 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -3700,9 +3721,9 @@ YY_RULE_SETUP } } YY_BREAK -case 121: +case 122: YY_RULE_SETUP -#line 1284 "dhcp6_lexer.ll" +#line 1292 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::CLIENT_CLASSES: @@ -3712,9 +3733,9 @@ YY_RULE_SETUP } } YY_BREAK -case 122: +case 123: YY_RULE_SETUP -#line 1293 "dhcp6_lexer.ll" +#line 1301 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::CLIENT_CLASSES: @@ -3724,9 +3745,9 @@ YY_RULE_SETUP } } YY_BREAK -case 123: +case 124: YY_RULE_SETUP -#line 1302 "dhcp6_lexer.ll" +#line 1310 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3737,9 +3758,9 @@ YY_RULE_SETUP } } YY_BREAK -case 124: +case 125: YY_RULE_SETUP -#line 1312 "dhcp6_lexer.ll" +#line 1320 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RESERVATIONS: @@ -3750,9 +3771,9 @@ YY_RULE_SETUP } } YY_BREAK -case 125: +case 126: YY_RULE_SETUP -#line 1322 "dhcp6_lexer.ll" +#line 1330 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RESERVATIONS: @@ -3762,9 +3783,9 @@ YY_RULE_SETUP } } YY_BREAK -case 126: +case 127: YY_RULE_SETUP -#line 1331 "dhcp6_lexer.ll" +#line 1339 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::MAC_SOURCES: @@ -3776,9 +3797,9 @@ YY_RULE_SETUP } } YY_BREAK -case 127: +case 128: YY_RULE_SETUP -#line 1342 "dhcp6_lexer.ll" +#line 1350 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::HOST_RESERVATION_IDENTIFIERS: @@ -3789,9 +3810,9 @@ YY_RULE_SETUP } } YY_BREAK -case 128: +case 129: YY_RULE_SETUP -#line 1352 "dhcp6_lexer.ll" +#line 1360 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RESERVATIONS: @@ -3801,9 +3822,9 @@ YY_RULE_SETUP } } YY_BREAK -case 129: +case 130: YY_RULE_SETUP -#line 1361 "dhcp6_lexer.ll" +#line 1369 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::HOST_RESERVATION_IDENTIFIERS: @@ -3814,9 +3835,9 @@ YY_RULE_SETUP } } YY_BREAK -case 130: +case 131: YY_RULE_SETUP -#line 1371 "dhcp6_lexer.ll" +#line 1379 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DEF: @@ -3827,9 +3848,9 @@ YY_RULE_SETUP } } YY_BREAK -case 131: +case 132: YY_RULE_SETUP -#line 1381 "dhcp6_lexer.ll" +#line 1389 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DATA: @@ -3839,9 +3860,9 @@ YY_RULE_SETUP } } YY_BREAK -case 132: +case 133: YY_RULE_SETUP -#line 1390 "dhcp6_lexer.ll" +#line 1398 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DEF: @@ -3851,9 +3872,9 @@ YY_RULE_SETUP } } YY_BREAK -case 133: +case 134: YY_RULE_SETUP -#line 1399 "dhcp6_lexer.ll" +#line 1407 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DEF: @@ -3863,9 +3884,9 @@ YY_RULE_SETUP } } YY_BREAK -case 134: +case 135: YY_RULE_SETUP -#line 1408 "dhcp6_lexer.ll" +#line 1416 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DEF: @@ -3875,9 +3896,9 @@ YY_RULE_SETUP } } YY_BREAK -case 135: +case 136: YY_RULE_SETUP -#line 1417 "dhcp6_lexer.ll" +#line 1425 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -3888,9 +3909,9 @@ YY_RULE_SETUP } } YY_BREAK -case 136: +case 137: YY_RULE_SETUP -#line 1427 "dhcp6_lexer.ll" +#line 1435 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RELAY: @@ -3900,9 +3921,9 @@ YY_RULE_SETUP } } YY_BREAK -case 137: +case 138: YY_RULE_SETUP -#line 1436 "dhcp6_lexer.ll" +#line 1444 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3912,9 +3933,9 @@ YY_RULE_SETUP } } YY_BREAK -case 138: +case 139: YY_RULE_SETUP -#line 1446 "dhcp6_lexer.ll" +#line 1454 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::HOOKS_LIBRARIES: @@ -3924,9 +3945,9 @@ YY_RULE_SETUP } } YY_BREAK -case 139: +case 140: YY_RULE_SETUP -#line 1455 "dhcp6_lexer.ll" +#line 1463 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::HOOKS_LIBRARIES: @@ -3936,9 +3957,9 @@ YY_RULE_SETUP } } YY_BREAK -case 140: +case 141: YY_RULE_SETUP -#line 1464 "dhcp6_lexer.ll" +#line 1472 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -3948,9 +3969,9 @@ YY_RULE_SETUP } } YY_BREAK -case 141: +case 142: YY_RULE_SETUP -#line 1473 "dhcp6_lexer.ll" +#line 1481 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DUID_TYPE: @@ -3960,9 +3981,9 @@ YY_RULE_SETUP } } YY_BREAK -case 142: +case 143: YY_RULE_SETUP -#line 1482 "dhcp6_lexer.ll" +#line 1490 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DUID_TYPE: @@ -3972,9 +3993,9 @@ YY_RULE_SETUP } } YY_BREAK -case 143: +case 144: YY_RULE_SETUP -#line 1491 "dhcp6_lexer.ll" +#line 1499 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DUID_TYPE: @@ -3984,9 +4005,9 @@ YY_RULE_SETUP } } YY_BREAK -case 144: +case 145: YY_RULE_SETUP -#line 1500 "dhcp6_lexer.ll" +#line 1508 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SERVER_ID: @@ -3996,9 +4017,9 @@ YY_RULE_SETUP } } YY_BREAK -case 145: +case 146: YY_RULE_SETUP -#line 1509 "dhcp6_lexer.ll" +#line 1517 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SERVER_ID: @@ -4008,9 +4029,9 @@ YY_RULE_SETUP } } YY_BREAK -case 146: +case 147: YY_RULE_SETUP -#line 1518 "dhcp6_lexer.ll" +#line 1526 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SERVER_ID: @@ -4020,9 +4041,9 @@ YY_RULE_SETUP } } YY_BREAK -case 147: +case 148: YY_RULE_SETUP -#line 1527 "dhcp6_lexer.ll" +#line 1535 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SERVER_ID: @@ -4032,9 +4053,9 @@ YY_RULE_SETUP } } YY_BREAK -case 148: +case 149: YY_RULE_SETUP -#line 1536 "dhcp6_lexer.ll" +#line 1544 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4044,9 +4065,9 @@ YY_RULE_SETUP } } YY_BREAK -case 149: +case 150: YY_RULE_SETUP -#line 1545 "dhcp6_lexer.ll" +#line 1553 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING: @@ -4056,9 +4077,9 @@ YY_RULE_SETUP } } YY_BREAK -case 150: +case 151: YY_RULE_SETUP -#line 1554 "dhcp6_lexer.ll" +#line 1562 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING: @@ -4068,9 +4089,9 @@ YY_RULE_SETUP } } YY_BREAK -case 151: +case 152: YY_RULE_SETUP -#line 1563 "dhcp6_lexer.ll" +#line 1571 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING: @@ -4080,9 +4101,9 @@ YY_RULE_SETUP } } YY_BREAK -case 152: +case 153: YY_RULE_SETUP -#line 1572 "dhcp6_lexer.ll" +#line 1580 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING: @@ -4092,9 +4113,9 @@ YY_RULE_SETUP } } YY_BREAK -case 153: +case 154: YY_RULE_SETUP -#line 1581 "dhcp6_lexer.ll" +#line 1589 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING: @@ -4104,9 +4125,9 @@ YY_RULE_SETUP } } YY_BREAK -case 154: +case 155: YY_RULE_SETUP -#line 1590 "dhcp6_lexer.ll" +#line 1598 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING: @@ -4116,9 +4137,9 @@ YY_RULE_SETUP } } YY_BREAK -case 155: +case 156: YY_RULE_SETUP -#line 1599 "dhcp6_lexer.ll" +#line 1607 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4128,9 +4149,9 @@ YY_RULE_SETUP } } YY_BREAK -case 156: +case 157: YY_RULE_SETUP -#line 1608 "dhcp6_lexer.ll" +#line 1616 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4140,9 +4161,9 @@ YY_RULE_SETUP } } YY_BREAK -case 157: +case 158: YY_RULE_SETUP -#line 1617 "dhcp6_lexer.ll" +#line 1625 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::CONTROL_SOCKET: @@ -4152,9 +4173,9 @@ YY_RULE_SETUP } } YY_BREAK -case 158: +case 159: YY_RULE_SETUP -#line 1626 "dhcp6_lexer.ll" +#line 1634 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::CONTROL_SOCKET: @@ -4164,9 +4185,9 @@ YY_RULE_SETUP } } YY_BREAK -case 159: +case 160: YY_RULE_SETUP -#line 1635 "dhcp6_lexer.ll" +#line 1643 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4176,9 +4197,9 @@ YY_RULE_SETUP } } YY_BREAK -case 160: +case 161: YY_RULE_SETUP -#line 1644 "dhcp6_lexer.ll" +#line 1652 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -4188,9 +4209,9 @@ YY_RULE_SETUP } } YY_BREAK -case 161: +case 162: YY_RULE_SETUP -#line 1653 "dhcp6_lexer.ll" +#line 1661 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::CONFIG: @@ -4200,9 +4221,9 @@ YY_RULE_SETUP } } YY_BREAK -case 162: +case 163: YY_RULE_SETUP -#line 1662 "dhcp6_lexer.ll" +#line 1670 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::CONFIG: @@ -4212,9 +4233,9 @@ YY_RULE_SETUP } } YY_BREAK -case 163: +case 164: YY_RULE_SETUP -#line 1671 "dhcp6_lexer.ll" +#line 1679 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::CONFIG: @@ -4224,9 +4245,9 @@ YY_RULE_SETUP } } YY_BREAK -case 164: +case 165: YY_RULE_SETUP -#line 1681 "dhcp6_lexer.ll" +#line 1689 "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. @@ -4326,65 +4347,65 @@ YY_RULE_SETUP return isc::dhcp::Dhcp6Parser::make_STRING(decoded, driver.loc_); } YY_BREAK -case 165: -/* rule 165 can match eol */ +case 166: +/* rule 166 can match eol */ YY_RULE_SETUP -#line 1780 "dhcp6_lexer.ll" +#line 1788 "dhcp6_lexer.ll" { /* Bad string with a forbidden control character inside */ driver.error(driver.loc_, "Invalid control in " + std::string(yytext)); } YY_BREAK -case 166: -/* rule 166 can match eol */ +case 167: +/* rule 167 can match eol */ YY_RULE_SETUP -#line 1785 "dhcp6_lexer.ll" +#line 1793 "dhcp6_lexer.ll" { /* Bad string with a bad escape inside */ driver.error(driver.loc_, "Bad escape in " + std::string(yytext)); } YY_BREAK -case 167: +case 168: YY_RULE_SETUP -#line 1790 "dhcp6_lexer.ll" +#line 1798 "dhcp6_lexer.ll" { /* Bad string with an open escape at the end */ driver.error(driver.loc_, "Overflow escape in " + std::string(yytext)); } YY_BREAK -case 168: +case 169: YY_RULE_SETUP -#line 1795 "dhcp6_lexer.ll" +#line 1803 "dhcp6_lexer.ll" { return isc::dhcp::Dhcp6Parser::make_LSQUARE_BRACKET(driver.loc_); } YY_BREAK -case 169: +case 170: YY_RULE_SETUP -#line 1796 "dhcp6_lexer.ll" +#line 1804 "dhcp6_lexer.ll" { return isc::dhcp::Dhcp6Parser::make_RSQUARE_BRACKET(driver.loc_); } YY_BREAK -case 170: +case 171: YY_RULE_SETUP -#line 1797 "dhcp6_lexer.ll" +#line 1805 "dhcp6_lexer.ll" { return isc::dhcp::Dhcp6Parser::make_LCURLY_BRACKET(driver.loc_); } YY_BREAK -case 171: +case 172: YY_RULE_SETUP -#line 1798 "dhcp6_lexer.ll" +#line 1806 "dhcp6_lexer.ll" { return isc::dhcp::Dhcp6Parser::make_RCURLY_BRACKET(driver.loc_); } YY_BREAK -case 172: +case 173: YY_RULE_SETUP -#line 1799 "dhcp6_lexer.ll" +#line 1807 "dhcp6_lexer.ll" { return isc::dhcp::Dhcp6Parser::make_COMMA(driver.loc_); } YY_BREAK -case 173: +case 174: YY_RULE_SETUP -#line 1800 "dhcp6_lexer.ll" +#line 1808 "dhcp6_lexer.ll" { return isc::dhcp::Dhcp6Parser::make_COLON(driver.loc_); } YY_BREAK -case 174: +case 175: YY_RULE_SETUP -#line 1802 "dhcp6_lexer.ll" +#line 1810 "dhcp6_lexer.ll" { /* An integer was found. */ std::string tmp(yytext); @@ -4403,9 +4424,9 @@ YY_RULE_SETUP return isc::dhcp::Dhcp6Parser::make_INTEGER(integer, driver.loc_); } YY_BREAK -case 175: +case 176: YY_RULE_SETUP -#line 1820 "dhcp6_lexer.ll" +#line 1828 "dhcp6_lexer.ll" { /* A floating point was found. */ std::string tmp(yytext); @@ -4419,43 +4440,43 @@ YY_RULE_SETUP return isc::dhcp::Dhcp6Parser::make_FLOAT(fp, driver.loc_); } YY_BREAK -case 176: +case 177: YY_RULE_SETUP -#line 1833 "dhcp6_lexer.ll" +#line 1841 "dhcp6_lexer.ll" { string tmp(yytext); return isc::dhcp::Dhcp6Parser::make_BOOLEAN(tmp == "true", driver.loc_); } YY_BREAK -case 177: +case 178: YY_RULE_SETUP -#line 1838 "dhcp6_lexer.ll" +#line 1846 "dhcp6_lexer.ll" { return isc::dhcp::Dhcp6Parser::make_NULL_TYPE(driver.loc_); } YY_BREAK -case 178: +case 179: YY_RULE_SETUP -#line 1842 "dhcp6_lexer.ll" +#line 1850 "dhcp6_lexer.ll" driver.error (driver.loc_, "JSON true reserved keyword is lower case only"); YY_BREAK -case 179: +case 180: YY_RULE_SETUP -#line 1844 "dhcp6_lexer.ll" +#line 1852 "dhcp6_lexer.ll" driver.error (driver.loc_, "JSON false reserved keyword is lower case only"); YY_BREAK -case 180: +case 181: YY_RULE_SETUP -#line 1846 "dhcp6_lexer.ll" +#line 1854 "dhcp6_lexer.ll" driver.error (driver.loc_, "JSON null reserved keyword is lower case only"); YY_BREAK -case 181: +case 182: YY_RULE_SETUP -#line 1848 "dhcp6_lexer.ll" +#line 1856 "dhcp6_lexer.ll" driver.error (driver.loc_, "Invalid character: " + std::string(yytext)); YY_BREAK case YY_STATE_EOF(INITIAL): -#line 1850 "dhcp6_lexer.ll" +#line 1858 "dhcp6_lexer.ll" { if (driver.states_.empty()) { return isc::dhcp::Dhcp6Parser::make_END(driver.loc_); @@ -4479,12 +4500,12 @@ case YY_STATE_EOF(INITIAL): BEGIN(DIR_EXIT); } YY_BREAK -case 182: +case 183: YY_RULE_SETUP -#line 1873 "dhcp6_lexer.ll" +#line 1881 "dhcp6_lexer.ll" ECHO; YY_BREAK -#line 4487 "dhcp6_lexer.cc" +#line 4509 "dhcp6_lexer.cc" case YY_END_OF_BUFFER: { @@ -4803,7 +4824,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 >= 1489 ) + if ( yy_current_state >= 1505 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -4836,11 +4857,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 >= 1489 ) + if ( yy_current_state >= 1505 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 1488); + yy_is_jam = (yy_current_state == 1504); return yy_is_jam ? 0 : yy_current_state; } @@ -5589,7 +5610,7 @@ void yyfree (void * ptr ) /* %ok-for-header */ -#line 1873 "dhcp6_lexer.ll" +#line 1881 "dhcp6_lexer.ll" using namespace isc::dhcp; diff --git a/src/bin/dhcp6/dhcp6_lexer.ll b/src/bin/dhcp6/dhcp6_lexer.ll index f463ef3d50..3a2f461158 100644 --- a/src/bin/dhcp6/dhcp6_lexer.ll +++ b/src/bin/dhcp6/dhcp6_lexer.ll @@ -531,6 +531,14 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence} } } +\"config-fetch-wait-time\" { + switch(driver.ctx_) { + case isc::dhcp::Parser6Context::CONFIG_CONTROL: + return isc::dhcp::Dhcp6Parser::make_CONFIG_FETCH_WAIT_TIME(driver.loc_); + default: + return isc::dhcp::Dhcp6Parser::make_STRING("config-fetch-wait-time", driver.loc_); + } +} \"readonly\" { switch(driver.ctx_) { diff --git a/src/bin/dhcp6/dhcp6_messages.cc b/src/bin/dhcp6/dhcp6_messages.cc index 84f65315f8..1bd1c73272 100644 --- a/src/bin/dhcp6/dhcp6_messages.cc +++ b/src/bin/dhcp6/dhcp6_messages.cc @@ -1,4 +1,4 @@ -// File created from ../../../src/bin/dhcp6/dhcp6_messages.mes on Fri Feb 08 2019 20:33 +// File created from ../../../src/bin/dhcp6/dhcp6_messages.mes on Tue Mar 26 2019 13:41 #include #include @@ -14,6 +14,8 @@ extern const isc::log::MessageID DHCP6_ALREADY_RUNNING = "DHCP6_ALREADY_RUNNING" extern const isc::log::MessageID DHCP6_BUFFER_RECEIVED = "DHCP6_BUFFER_RECEIVED"; extern const isc::log::MessageID DHCP6_BUFFER_UNPACK = "DHCP6_BUFFER_UNPACK"; extern const isc::log::MessageID DHCP6_BUFFER_WAIT_SIGNAL = "DHCP6_BUFFER_WAIT_SIGNAL"; +extern const isc::log::MessageID DHCP6_CB_FETCH_UPDATES_FAIL = "DHCP6_CB_FETCH_UPDATES_FAIL"; +extern const isc::log::MessageID DHCP6_CB_FETCH_UPDATES_RETRIES_EXHAUSTED = "DHCP6_CB_FETCH_UPDATES_RETRIES_EXHAUSTED"; extern const isc::log::MessageID DHCP6_CLASS_ASSIGNED = "DHCP6_CLASS_ASSIGNED"; extern const isc::log::MessageID DHCP6_CLASS_UNCONFIGURED = "DHCP6_CLASS_UNCONFIGURED"; extern const isc::log::MessageID DHCP6_CLASS_UNDEFINED = "DHCP6_CLASS_UNDEFINED"; @@ -152,6 +154,8 @@ const char* values[] = { "DHCP6_BUFFER_RECEIVED", "received buffer from %1:%2 to %3:%4 over interface %5", "DHCP6_BUFFER_UNPACK", "parsing buffer received from %1 to %2 over interface %3", "DHCP6_BUFFER_WAIT_SIGNAL", "signal received while waiting for next packet, next waiting signal is %1", + "DHCP6_CB_FETCH_UPDATES_FAIL", "error on attempt to fetch configuration updates from the configuration backend(s): %1", + "DHCP6_CB_FETCH_UPDATES_RETRIES_EXHAUSTED", "maximum number of configuration fetch attempts: 10, has been exhausted without success", "DHCP6_CLASS_ASSIGNED", "%1: client packet has been assigned to the following class(es): %2", "DHCP6_CLASS_UNCONFIGURED", "%1: client packet belongs to an unconfigured class: %2", "DHCP6_CLASS_UNDEFINED", "required class %1 has no definition", diff --git a/src/bin/dhcp6/dhcp6_messages.h b/src/bin/dhcp6/dhcp6_messages.h index e814d610f5..19f22199fc 100644 --- a/src/bin/dhcp6/dhcp6_messages.h +++ b/src/bin/dhcp6/dhcp6_messages.h @@ -1,4 +1,4 @@ -// File created from ../../../src/bin/dhcp6/dhcp6_messages.mes on Fri Feb 08 2019 20:33 +// File created from ../../../src/bin/dhcp6/dhcp6_messages.mes on Tue Mar 26 2019 13:41 #ifndef DHCP6_MESSAGES_H #define DHCP6_MESSAGES_H @@ -15,6 +15,8 @@ extern const isc::log::MessageID DHCP6_ALREADY_RUNNING; extern const isc::log::MessageID DHCP6_BUFFER_RECEIVED; extern const isc::log::MessageID DHCP6_BUFFER_UNPACK; extern const isc::log::MessageID DHCP6_BUFFER_WAIT_SIGNAL; +extern const isc::log::MessageID DHCP6_CB_FETCH_UPDATES_FAIL; +extern const isc::log::MessageID DHCP6_CB_FETCH_UPDATES_RETRIES_EXHAUSTED; extern const isc::log::MessageID DHCP6_CLASS_ASSIGNED; extern const isc::log::MessageID DHCP6_CLASS_UNCONFIGURED; extern const isc::log::MessageID DHCP6_CLASS_UNDEFINED; diff --git a/src/bin/dhcp6/dhcp6_messages.mes b/src/bin/dhcp6/dhcp6_messages.mes index 9079efb09e..964f4bfff4 100644 --- a/src/bin/dhcp6/dhcp6_messages.mes +++ b/src/bin/dhcp6/dhcp6_messages.mes @@ -74,6 +74,20 @@ has no definition. This debug message informs that a class was listed for required evaluation but its definition does not include a test expression to evaluate. +% DHCP6_CB_FETCH_UPDATES_FAIL error on attempt to fetch configuration updates from the configuration backend(s): %1 +This error message is issued when the server attempted to fetch +configuration updates from the database and this attempt failed. +The server will re-try according to the configured value of the +config-fetch-wait-time parameter. The sole argument contains the +reason for failure. + +% DHCP6_CB_FETCH_UPDATES_RETRIES_EXHAUSTED maximum number of configuration fetch attempts: 10, has been exhausted without success +This error indicates that the server has made a number of unsuccessful +attempts to fetch configuration updates from a configuration backend. +The server will continue to operate but won't make any further attempts +to fetch configuration updates. The administrator must fix the configuration +in the database and reload (or restart) the server. + % DHCP6_COMMAND_RECEIVED received command %1, arguments: %2 A debug message listing the command (and possible arguments) received from the Kea control system by the IPv6 DHCP server. diff --git a/src/bin/dhcp6/dhcp6_parser.cc b/src/bin/dhcp6/dhcp6_parser.cc index 5a0f7ace10..4b9143ad97 100644 --- a/src/bin/dhcp6/dhcp6_parser.cc +++ b/src/bin/dhcp6/dhcp6_parser.cc @@ -1,8 +1,8 @@ -// A Bison parser, made by GNU Bison 3.3.2. +// A Bison parser, made by GNU Bison 3.2.1. // Skeleton implementation for Bison LALR(1) parsers in C++ -// Copyright (C) 2002-2015, 2018-2019 Free Software Foundation, Inc. +// Copyright (C) 2002-2015, 2018 Free Software Foundation, Inc. // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -43,11 +43,11 @@ // Unqualified %code blocks. -#line 34 "dhcp6_parser.yy" // lalr1.cc:435 +#line 34 "dhcp6_parser.yy" // lalr1.cc:438 #include -#line 51 "dhcp6_parser.cc" // lalr1.cc:435 +#line 51 "dhcp6_parser.cc" // lalr1.cc:438 #ifndef YY_ @@ -88,7 +88,7 @@ { \ (Current).begin = (Current).end = YYRHSLOC (Rhs, 0).end; \ } \ - while (false) + while (/*CONSTCOND*/ false) # endif @@ -140,9 +140,9 @@ #define YYERROR goto yyerrorlab #define YYRECOVERING() (!!yyerrstatus_) -#line 14 "dhcp6_parser.yy" // lalr1.cc:510 +#line 14 "dhcp6_parser.yy" // lalr1.cc:513 namespace isc { namespace dhcp { -#line 146 "dhcp6_parser.cc" // lalr1.cc:510 +#line 146 "dhcp6_parser.cc" // lalr1.cc:513 /* Return YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is @@ -154,7 +154,7 @@ namespace isc { namespace dhcp { { if (*yystr == '"') { - std::string yyr; + std::string yyr = ""; char const *yyp = yystr; for (;;) @@ -167,10 +167,7 @@ namespace isc { namespace dhcp { case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; - else - goto append; - - append: + // Fall through. default: yyr += *yyp; break; @@ -198,8 +195,6 @@ namespace isc { namespace dhcp { Dhcp6Parser::~Dhcp6Parser () {} - Dhcp6Parser::syntax_error::~syntax_error () YY_NOEXCEPT YY_NOTHROW - {} /*---------------. | Symbol types. | @@ -208,16 +203,16 @@ namespace isc { namespace dhcp { // by_state. - Dhcp6Parser::by_state::by_state () YY_NOEXCEPT + Dhcp6Parser::by_state::by_state () : state (empty_state) {} - Dhcp6Parser::by_state::by_state (const by_state& that) YY_NOEXCEPT - : state (that.state) + Dhcp6Parser::by_state::by_state (const by_state& other) + : state (other.state) {} void - Dhcp6Parser::by_state::clear () YY_NOEXCEPT + Dhcp6Parser::by_state::clear () { state = empty_state; } @@ -229,12 +224,12 @@ namespace isc { namespace dhcp { that.clear (); } - Dhcp6Parser::by_state::by_state (state_type s) YY_NOEXCEPT + Dhcp6Parser::by_state::by_state (state_type s) : state (s) {} Dhcp6Parser::symbol_number_type - Dhcp6Parser::by_state::type_get () const YY_NOEXCEPT + Dhcp6Parser::by_state::type_get () const { if (state == empty_state) return empty_symbol; @@ -250,29 +245,29 @@ namespace isc { namespace dhcp { { switch (that.type_get ()) { - case 194: // value - case 198: // map_value - case 252: // db_type - case 345: // hr_mode - case 481: // duid_type - case 516: // ncr_protocol_value - case 523: // replace_client_name_value + case 195: // value + case 199: // map_value + case 253: // db_type + case 346: // hr_mode + case 482: // duid_type + case 517: // ncr_protocol_value + case 524: // replace_client_name_value value.YY_MOVE_OR_COPY< ElementPtr > (YY_MOVE (that.value)); break; - case 176: // "boolean" + case 177: // "boolean" value.YY_MOVE_OR_COPY< bool > (YY_MOVE (that.value)); break; - case 175: // "floating point" + case 176: // "floating point" value.YY_MOVE_OR_COPY< double > (YY_MOVE (that.value)); break; - case 174: // "integer" + case 175: // "integer" value.YY_MOVE_OR_COPY< int64_t > (YY_MOVE (that.value)); break; - case 173: // "constant string" + case 174: // "constant string" value.YY_MOVE_OR_COPY< std::string > (YY_MOVE (that.value)); break; @@ -280,7 +275,7 @@ namespace isc { namespace dhcp { break; } -#if 201103L <= YY_CPLUSPLUS +#if defined __cplusplus && 201103L <= __cplusplus // that is emptied. that.state = empty_state; #endif @@ -291,29 +286,29 @@ namespace isc { namespace dhcp { { switch (that.type_get ()) { - case 194: // value - case 198: // map_value - case 252: // db_type - case 345: // hr_mode - case 481: // duid_type - case 516: // ncr_protocol_value - case 523: // replace_client_name_value + case 195: // value + case 199: // map_value + case 253: // db_type + case 346: // hr_mode + case 482: // duid_type + case 517: // ncr_protocol_value + case 524: // replace_client_name_value value.move< ElementPtr > (YY_MOVE (that.value)); break; - case 176: // "boolean" + case 177: // "boolean" value.move< bool > (YY_MOVE (that.value)); break; - case 175: // "floating point" + case 176: // "floating point" value.move< double > (YY_MOVE (that.value)); break; - case 174: // "integer" + case 175: // "integer" value.move< int64_t > (YY_MOVE (that.value)); break; - case 173: // "constant string" + case 174: // "constant string" value.move< std::string > (YY_MOVE (that.value)); break; @@ -325,36 +320,36 @@ namespace isc { namespace dhcp { that.type = empty_symbol; } -#if YY_CPLUSPLUS < 201103L +#if !defined __cplusplus || __cplusplus < 201103L Dhcp6Parser::stack_symbol_type& Dhcp6Parser::stack_symbol_type::operator= (stack_symbol_type& that) { state = that.state; switch (that.type_get ()) { - case 194: // value - case 198: // map_value - case 252: // db_type - case 345: // hr_mode - case 481: // duid_type - case 516: // ncr_protocol_value - case 523: // replace_client_name_value + case 195: // value + case 199: // map_value + case 253: // db_type + case 346: // hr_mode + case 482: // duid_type + case 517: // ncr_protocol_value + case 524: // replace_client_name_value value.move< ElementPtr > (that.value); break; - case 176: // "boolean" + case 177: // "boolean" value.move< bool > (that.value); break; - case 175: // "floating point" + case 176: // "floating point" value.move< double > (that.value); break; - case 174: // "integer" + case 175: // "integer" value.move< int64_t > (that.value); break; - case 173: // "constant string" + case 174: // "constant string" value.move< std::string > (that.value); break; @@ -386,83 +381,93 @@ namespace isc { namespace dhcp { std::ostream& yyoutput = yyo; YYUSE (yyoutput); symbol_number_type yytype = yysym.type_get (); -#if defined __GNUC__ && ! defined __clang__ && ! defined __ICC && __GNUC__ * 100 + __GNUC_MINOR__ <= 408 // Avoid a (spurious) G++ 4.8 warning about "array subscript is // below array bounds". if (yysym.empty ()) std::abort (); -#endif yyo << (yytype < yyntokens_ ? "token" : "nterm") << ' ' << yytname_[yytype] << " (" << yysym.location << ": "; switch (yytype) { - case 173: // "constant string" -#line 251 "dhcp6_parser.yy" // lalr1.cc:676 - { yyoutput << yysym.value.template as < std::string > (); } -#line 404 "dhcp6_parser.cc" // lalr1.cc:676 + case 174: // "constant string" + +#line 253 "dhcp6_parser.yy" // lalr1.cc:672 + { yyoutput << yysym.value.template as< std::string > (); } +#line 398 "dhcp6_parser.cc" // lalr1.cc:672 break; - case 174: // "integer" -#line 251 "dhcp6_parser.yy" // lalr1.cc:676 - { yyoutput << yysym.value.template as < int64_t > (); } -#line 410 "dhcp6_parser.cc" // lalr1.cc:676 + case 175: // "integer" + +#line 253 "dhcp6_parser.yy" // lalr1.cc:672 + { yyoutput << yysym.value.template as< int64_t > (); } +#line 405 "dhcp6_parser.cc" // lalr1.cc:672 break; - case 175: // "floating point" -#line 251 "dhcp6_parser.yy" // lalr1.cc:676 - { yyoutput << yysym.value.template as < double > (); } -#line 416 "dhcp6_parser.cc" // lalr1.cc:676 + case 176: // "floating point" + +#line 253 "dhcp6_parser.yy" // lalr1.cc:672 + { yyoutput << yysym.value.template as< double > (); } +#line 412 "dhcp6_parser.cc" // lalr1.cc:672 break; - case 176: // "boolean" -#line 251 "dhcp6_parser.yy" // lalr1.cc:676 - { yyoutput << yysym.value.template as < bool > (); } -#line 422 "dhcp6_parser.cc" // lalr1.cc:676 + case 177: // "boolean" + +#line 253 "dhcp6_parser.yy" // lalr1.cc:672 + { yyoutput << yysym.value.template as< bool > (); } +#line 419 "dhcp6_parser.cc" // lalr1.cc:672 break; - case 194: // value -#line 251 "dhcp6_parser.yy" // lalr1.cc:676 - { yyoutput << yysym.value.template as < ElementPtr > (); } -#line 428 "dhcp6_parser.cc" // lalr1.cc:676 + case 195: // value + +#line 253 "dhcp6_parser.yy" // lalr1.cc:672 + { yyoutput << yysym.value.template as< ElementPtr > (); } +#line 426 "dhcp6_parser.cc" // lalr1.cc:672 break; - case 198: // map_value -#line 251 "dhcp6_parser.yy" // lalr1.cc:676 - { yyoutput << yysym.value.template as < ElementPtr > (); } -#line 434 "dhcp6_parser.cc" // lalr1.cc:676 + case 199: // map_value + +#line 253 "dhcp6_parser.yy" // lalr1.cc:672 + { yyoutput << yysym.value.template as< ElementPtr > (); } +#line 433 "dhcp6_parser.cc" // lalr1.cc:672 break; - case 252: // db_type -#line 251 "dhcp6_parser.yy" // lalr1.cc:676 - { yyoutput << yysym.value.template as < ElementPtr > (); } -#line 440 "dhcp6_parser.cc" // lalr1.cc:676 + case 253: // db_type + +#line 253 "dhcp6_parser.yy" // lalr1.cc:672 + { yyoutput << yysym.value.template as< ElementPtr > (); } +#line 440 "dhcp6_parser.cc" // lalr1.cc:672 break; - case 345: // hr_mode -#line 251 "dhcp6_parser.yy" // lalr1.cc:676 - { yyoutput << yysym.value.template as < ElementPtr > (); } -#line 446 "dhcp6_parser.cc" // lalr1.cc:676 + case 346: // hr_mode + +#line 253 "dhcp6_parser.yy" // lalr1.cc:672 + { yyoutput << yysym.value.template as< ElementPtr > (); } +#line 447 "dhcp6_parser.cc" // lalr1.cc:672 break; - case 481: // duid_type -#line 251 "dhcp6_parser.yy" // lalr1.cc:676 - { yyoutput << yysym.value.template as < ElementPtr > (); } -#line 452 "dhcp6_parser.cc" // lalr1.cc:676 + case 482: // duid_type + +#line 253 "dhcp6_parser.yy" // lalr1.cc:672 + { yyoutput << yysym.value.template as< ElementPtr > (); } +#line 454 "dhcp6_parser.cc" // lalr1.cc:672 break; - case 516: // ncr_protocol_value -#line 251 "dhcp6_parser.yy" // lalr1.cc:676 - { yyoutput << yysym.value.template as < ElementPtr > (); } -#line 458 "dhcp6_parser.cc" // lalr1.cc:676 + case 517: // ncr_protocol_value + +#line 253 "dhcp6_parser.yy" // lalr1.cc:672 + { yyoutput << yysym.value.template as< ElementPtr > (); } +#line 461 "dhcp6_parser.cc" // lalr1.cc:672 break; - case 523: // replace_client_name_value -#line 251 "dhcp6_parser.yy" // lalr1.cc:676 - { yyoutput << yysym.value.template as < ElementPtr > (); } -#line 464 "dhcp6_parser.cc" // lalr1.cc:676 + case 524: // replace_client_name_value + +#line 253 "dhcp6_parser.yy" // lalr1.cc:672 + { yyoutput << yysym.value.template as< ElementPtr > (); } +#line 468 "dhcp6_parser.cc" // lalr1.cc:672 break; + default: break; } @@ -481,7 +486,7 @@ namespace isc { namespace dhcp { void Dhcp6Parser::yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym) { -#if 201103L <= YY_CPLUSPLUS +#if defined __cplusplus && 201103L <= __cplusplus yypush_ (m, stack_symbol_type (s, std::move (sym))); #else stack_symbol_type ss (s, sym); @@ -585,22 +590,17 @@ namespace isc { namespace dhcp { yystack_.clear (); yypush_ (YY_NULLPTR, 0, YY_MOVE (yyla)); - /*-----------------------------------------------. - | yynewstate -- push a new symbol on the stack. | - `-----------------------------------------------*/ + // A new symbol was pushed on the stack. yynewstate: YYCDEBUG << "Entering state " << yystack_[0].state << '\n'; // Accept? if (yystack_[0].state == yyfinal_) - YYACCEPT; + goto yyacceptlab; goto yybackup; - - /*-----------. - | yybackup. | - `-----------*/ + // Backup. yybackup: // Try to take a decision without lookahead. yyn = yypact_[yystack_[0].state]; @@ -621,7 +621,6 @@ namespace isc { namespace dhcp { #if YY_EXCEPTIONS catch (const syntax_error& yyexc) { - YYCDEBUG << "Caught exception: " << yyexc.what() << '\n'; error (yyexc); goto yyerrlab1; } @@ -653,7 +652,6 @@ namespace isc { namespace dhcp { yypush_ ("Shifting", yyn, YY_MOVE (yyla)); goto yynewstate; - /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ @@ -663,9 +661,8 @@ namespace isc { namespace dhcp { goto yyerrlab; goto yyreduce; - /*-----------------------------. - | yyreduce -- do a reduction. | + | yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: yylen = yyr2_[yyn]; @@ -677,29 +674,29 @@ namespace isc { namespace dhcp { when using variants. */ switch (yyr1_[yyn]) { - case 194: // value - case 198: // map_value - case 252: // db_type - case 345: // hr_mode - case 481: // duid_type - case 516: // ncr_protocol_value - case 523: // replace_client_name_value + case 195: // value + case 199: // map_value + case 253: // db_type + case 346: // hr_mode + case 482: // duid_type + case 517: // ncr_protocol_value + case 524: // replace_client_name_value yylhs.value.emplace< ElementPtr > (); break; - case 176: // "boolean" + case 177: // "boolean" yylhs.value.emplace< bool > (); break; - case 175: // "floating point" + case 176: // "floating point" yylhs.value.emplace< double > (); break; - case 174: // "integer" + case 175: // "integer" yylhs.value.emplace< int64_t > (); break; - case 173: // "constant string" + case 174: // "constant string" yylhs.value.emplace< std::string > (); break; @@ -710,8 +707,8 @@ namespace isc { namespace dhcp { // Default location. { - stack_type::slice range (yystack_, yylen); - YYLLOC_DEFAULT (yylhs.location, range, yylen); + slice slice (yystack_, yylen); + YYLLOC_DEFAULT (yylhs.location, slice, yylen); yyerror_range[1].location = yylhs.location; } @@ -724,286 +721,286 @@ namespace isc { namespace dhcp { switch (yyn) { case 2: -#line 260 "dhcp6_parser.yy" // lalr1.cc:919 +#line 262 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.ctx_ = ctx.NO_KEYWORD; } -#line 730 "dhcp6_parser.cc" // lalr1.cc:919 +#line 727 "dhcp6_parser.cc" // lalr1.cc:907 break; case 4: -#line 261 "dhcp6_parser.yy" // lalr1.cc:919 +#line 263 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.ctx_ = ctx.CONFIG; } -#line 736 "dhcp6_parser.cc" // lalr1.cc:919 +#line 733 "dhcp6_parser.cc" // lalr1.cc:907 break; case 6: -#line 262 "dhcp6_parser.yy" // lalr1.cc:919 +#line 264 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.ctx_ = ctx.DHCP6; } -#line 742 "dhcp6_parser.cc" // lalr1.cc:919 +#line 739 "dhcp6_parser.cc" // lalr1.cc:907 break; case 8: -#line 263 "dhcp6_parser.yy" // lalr1.cc:919 +#line 265 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.ctx_ = ctx.INTERFACES_CONFIG; } -#line 748 "dhcp6_parser.cc" // lalr1.cc:919 +#line 745 "dhcp6_parser.cc" // lalr1.cc:907 break; case 10: -#line 264 "dhcp6_parser.yy" // lalr1.cc:919 +#line 266 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.ctx_ = ctx.SUBNET6; } -#line 754 "dhcp6_parser.cc" // lalr1.cc:919 +#line 751 "dhcp6_parser.cc" // lalr1.cc:907 break; case 12: -#line 265 "dhcp6_parser.yy" // lalr1.cc:919 +#line 267 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.ctx_ = ctx.POOLS; } -#line 760 "dhcp6_parser.cc" // lalr1.cc:919 +#line 757 "dhcp6_parser.cc" // lalr1.cc:907 break; case 14: -#line 266 "dhcp6_parser.yy" // lalr1.cc:919 +#line 268 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.ctx_ = ctx.PD_POOLS; } -#line 766 "dhcp6_parser.cc" // lalr1.cc:919 +#line 763 "dhcp6_parser.cc" // lalr1.cc:907 break; case 16: -#line 267 "dhcp6_parser.yy" // lalr1.cc:919 +#line 269 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.ctx_ = ctx.RESERVATIONS; } -#line 772 "dhcp6_parser.cc" // lalr1.cc:919 +#line 769 "dhcp6_parser.cc" // lalr1.cc:907 break; case 18: -#line 268 "dhcp6_parser.yy" // lalr1.cc:919 +#line 270 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.ctx_ = ctx.DHCP6; } -#line 778 "dhcp6_parser.cc" // lalr1.cc:919 +#line 775 "dhcp6_parser.cc" // lalr1.cc:907 break; case 20: -#line 269 "dhcp6_parser.yy" // lalr1.cc:919 +#line 271 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.ctx_ = ctx.OPTION_DEF; } -#line 784 "dhcp6_parser.cc" // lalr1.cc:919 +#line 781 "dhcp6_parser.cc" // lalr1.cc:907 break; case 22: -#line 270 "dhcp6_parser.yy" // lalr1.cc:919 +#line 272 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.ctx_ = ctx.OPTION_DATA; } -#line 790 "dhcp6_parser.cc" // lalr1.cc:919 +#line 787 "dhcp6_parser.cc" // lalr1.cc:907 break; case 24: -#line 271 "dhcp6_parser.yy" // lalr1.cc:919 +#line 273 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.ctx_ = ctx.HOOKS_LIBRARIES; } -#line 796 "dhcp6_parser.cc" // lalr1.cc:919 +#line 793 "dhcp6_parser.cc" // lalr1.cc:907 break; case 26: -#line 272 "dhcp6_parser.yy" // lalr1.cc:919 +#line 274 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.ctx_ = ctx.DHCP_DDNS; } -#line 802 "dhcp6_parser.cc" // lalr1.cc:919 +#line 799 "dhcp6_parser.cc" // lalr1.cc:907 break; case 28: -#line 273 "dhcp6_parser.yy" // lalr1.cc:919 +#line 275 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.ctx_ = ctx.LOGGING; } -#line 808 "dhcp6_parser.cc" // lalr1.cc:919 +#line 805 "dhcp6_parser.cc" // lalr1.cc:907 break; case 30: -#line 274 "dhcp6_parser.yy" // lalr1.cc:919 +#line 276 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.ctx_ = ctx.CONFIG_CONTROL; } -#line 814 "dhcp6_parser.cc" // lalr1.cc:919 +#line 811 "dhcp6_parser.cc" // lalr1.cc:907 break; case 32: -#line 282 "dhcp6_parser.yy" // lalr1.cc:919 - { yylhs.value.as < ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); } -#line 820 "dhcp6_parser.cc" // lalr1.cc:919 +#line 284 "dhcp6_parser.yy" // lalr1.cc:907 + { yylhs.value.as< ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); } +#line 817 "dhcp6_parser.cc" // lalr1.cc:907 break; case 33: -#line 283 "dhcp6_parser.yy" // lalr1.cc:919 - { yylhs.value.as < ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as < double > (), ctx.loc2pos(yystack_[0].location))); } -#line 826 "dhcp6_parser.cc" // lalr1.cc:919 +#line 285 "dhcp6_parser.yy" // lalr1.cc:907 + { yylhs.value.as< ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as< double > (), ctx.loc2pos(yystack_[0].location))); } +#line 823 "dhcp6_parser.cc" // lalr1.cc:907 break; case 34: -#line 284 "dhcp6_parser.yy" // lalr1.cc:919 - { yylhs.value.as < ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); } -#line 832 "dhcp6_parser.cc" // lalr1.cc:919 +#line 286 "dhcp6_parser.yy" // lalr1.cc:907 + { yylhs.value.as< ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); } +#line 829 "dhcp6_parser.cc" // lalr1.cc:907 break; case 35: -#line 285 "dhcp6_parser.yy" // lalr1.cc:919 - { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); } -#line 838 "dhcp6_parser.cc" // lalr1.cc:919 +#line 287 "dhcp6_parser.yy" // lalr1.cc:907 + { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); } +#line 835 "dhcp6_parser.cc" // lalr1.cc:907 break; case 36: -#line 286 "dhcp6_parser.yy" // lalr1.cc:919 - { yylhs.value.as < ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); } -#line 844 "dhcp6_parser.cc" // lalr1.cc:919 +#line 288 "dhcp6_parser.yy" // lalr1.cc:907 + { yylhs.value.as< ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); } +#line 841 "dhcp6_parser.cc" // lalr1.cc:907 break; case 37: -#line 287 "dhcp6_parser.yy" // lalr1.cc:919 - { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } -#line 850 "dhcp6_parser.cc" // lalr1.cc:919 +#line 289 "dhcp6_parser.yy" // lalr1.cc:907 + { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } +#line 847 "dhcp6_parser.cc" // lalr1.cc:907 break; case 38: -#line 288 "dhcp6_parser.yy" // lalr1.cc:919 - { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } -#line 856 "dhcp6_parser.cc" // lalr1.cc:919 +#line 290 "dhcp6_parser.yy" // lalr1.cc:907 + { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } +#line 853 "dhcp6_parser.cc" // lalr1.cc:907 break; case 39: -#line 291 "dhcp6_parser.yy" // lalr1.cc:919 +#line 293 "dhcp6_parser.yy" // lalr1.cc:907 { // Push back the JSON value on the stack - ctx.stack_.push_back(yystack_[0].value.as < ElementPtr > ()); + ctx.stack_.push_back(yystack_[0].value.as< ElementPtr > ()); } -#line 865 "dhcp6_parser.cc" // lalr1.cc:919 +#line 862 "dhcp6_parser.cc" // lalr1.cc:907 break; case 40: -#line 296 "dhcp6_parser.yy" // lalr1.cc:919 +#line 298 "dhcp6_parser.yy" // lalr1.cc:907 { // This code is executed when we're about to start parsing // the content of the map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 876 "dhcp6_parser.cc" // lalr1.cc:919 +#line 873 "dhcp6_parser.cc" // lalr1.cc:907 break; case 41: -#line 301 "dhcp6_parser.yy" // lalr1.cc:919 +#line 303 "dhcp6_parser.yy" // lalr1.cc:907 { // map parsing completed. If we ever want to do any wrap up // (maybe some sanity checking), this would be the best place // for it. } -#line 886 "dhcp6_parser.cc" // lalr1.cc:919 +#line 883 "dhcp6_parser.cc" // lalr1.cc:907 break; case 42: -#line 307 "dhcp6_parser.yy" // lalr1.cc:919 - { yylhs.value.as < ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } -#line 892 "dhcp6_parser.cc" // lalr1.cc:919 +#line 309 "dhcp6_parser.yy" // lalr1.cc:907 + { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } +#line 889 "dhcp6_parser.cc" // lalr1.cc:907 break; case 45: -#line 314 "dhcp6_parser.yy" // lalr1.cc:919 +#line 316 "dhcp6_parser.yy" // lalr1.cc:907 { // map containing a single entry - ctx.stack_.back()->set(yystack_[2].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ()); + ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ()); } -#line 901 "dhcp6_parser.cc" // lalr1.cc:919 +#line 898 "dhcp6_parser.cc" // lalr1.cc:907 break; case 46: -#line 318 "dhcp6_parser.yy" // lalr1.cc:919 +#line 320 "dhcp6_parser.yy" // lalr1.cc:907 { // map consisting of a shorter map followed by // comma and string:value - ctx.stack_.back()->set(yystack_[2].value.as < std::string > (), yystack_[0].value.as < ElementPtr > ()); + ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ()); } -#line 911 "dhcp6_parser.cc" // lalr1.cc:919 +#line 908 "dhcp6_parser.cc" // lalr1.cc:907 break; case 47: -#line 325 "dhcp6_parser.yy" // lalr1.cc:919 +#line 327 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(l); } -#line 920 "dhcp6_parser.cc" // lalr1.cc:919 +#line 917 "dhcp6_parser.cc" // lalr1.cc:907 break; case 48: -#line 328 "dhcp6_parser.yy" // lalr1.cc:919 +#line 330 "dhcp6_parser.yy" // lalr1.cc:907 { // list parsing complete. Put any sanity checking here } -#line 928 "dhcp6_parser.cc" // lalr1.cc:919 +#line 925 "dhcp6_parser.cc" // lalr1.cc:907 break; case 51: -#line 336 "dhcp6_parser.yy" // lalr1.cc:919 +#line 338 "dhcp6_parser.yy" // lalr1.cc:907 { // List consisting of a single element. - ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ()); + ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ()); } -#line 937 "dhcp6_parser.cc" // lalr1.cc:919 +#line 934 "dhcp6_parser.cc" // lalr1.cc:907 break; case 52: -#line 340 "dhcp6_parser.yy" // lalr1.cc:919 +#line 342 "dhcp6_parser.yy" // lalr1.cc:907 { // List ending with , and a value. - ctx.stack_.back()->add(yystack_[0].value.as < ElementPtr > ()); + ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ()); } -#line 946 "dhcp6_parser.cc" // lalr1.cc:919 +#line 943 "dhcp6_parser.cc" // lalr1.cc:907 break; case 53: -#line 347 "dhcp6_parser.yy" // lalr1.cc:919 +#line 349 "dhcp6_parser.yy" // lalr1.cc:907 { // List parsing about to start } -#line 954 "dhcp6_parser.cc" // lalr1.cc:919 +#line 951 "dhcp6_parser.cc" // lalr1.cc:907 break; case 54: -#line 349 "dhcp6_parser.yy" // lalr1.cc:919 +#line 351 "dhcp6_parser.yy" // lalr1.cc:907 { // list parsing complete. Put any sanity checking here //ctx.stack_.pop_back(); } -#line 963 "dhcp6_parser.cc" // lalr1.cc:919 +#line 960 "dhcp6_parser.cc" // lalr1.cc:907 break; case 57: -#line 358 "dhcp6_parser.yy" // lalr1.cc:919 +#line 360 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(s); } -#line 972 "dhcp6_parser.cc" // lalr1.cc:919 +#line 969 "dhcp6_parser.cc" // lalr1.cc:907 break; case 58: -#line 362 "dhcp6_parser.yy" // lalr1.cc:919 +#line 364 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr s(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(s); } -#line 981 "dhcp6_parser.cc" // lalr1.cc:919 +#line 978 "dhcp6_parser.cc" // lalr1.cc:907 break; case 59: -#line 373 "dhcp6_parser.yy" // lalr1.cc:919 +#line 375 "dhcp6_parser.yy" // lalr1.cc:907 { const std::string& where = ctx.contextName(); - const std::string& keyword = yystack_[1].value.as < std::string > (); + const std::string& keyword = yystack_[1].value.as< std::string > (); error(yystack_[1].location, "got unexpected keyword \"" + keyword + "\" in " + where + " map."); } -#line 992 "dhcp6_parser.cc" // lalr1.cc:919 +#line 989 "dhcp6_parser.cc" // lalr1.cc:907 break; case 60: -#line 383 "dhcp6_parser.yy" // lalr1.cc:919 +#line 385 "dhcp6_parser.yy" // lalr1.cc:907 { // This code is executed when we're about to start parsing // the content of the map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 1003 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1000 "dhcp6_parser.cc" // lalr1.cc:907 break; case 61: -#line 388 "dhcp6_parser.yy" // lalr1.cc:919 +#line 390 "dhcp6_parser.yy" // lalr1.cc:907 { // map parsing completed. If we ever want to do any wrap up // (maybe some sanity checking), this would be the best place @@ -1012,11 +1009,11 @@ namespace isc { namespace dhcp { // Dhcp6 is required ctx.require("Dhcp6", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); } -#line 1016 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1013 "dhcp6_parser.cc" // lalr1.cc:907 break; case 70: -#line 411 "dhcp6_parser.yy" // lalr1.cc:919 +#line 413 "dhcp6_parser.yy" // lalr1.cc:907 { // This code is executed when we're about to start parsing // the content of the map @@ -1025,893 +1022,893 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(m); ctx.enter(ctx.DHCP6); } -#line 1029 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1026 "dhcp6_parser.cc" // lalr1.cc:907 break; case 71: -#line 418 "dhcp6_parser.yy" // lalr1.cc:919 +#line 420 "dhcp6_parser.yy" // lalr1.cc:907 { // No global parameter is required ctx.stack_.pop_back(); ctx.leave(); } -#line 1039 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1036 "dhcp6_parser.cc" // lalr1.cc:907 break; case 72: -#line 426 "dhcp6_parser.yy" // lalr1.cc:919 +#line 428 "dhcp6_parser.yy" // lalr1.cc:907 { // Parse the Dhcp6 map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 1049 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1046 "dhcp6_parser.cc" // lalr1.cc:907 break; case 73: -#line 430 "dhcp6_parser.yy" // lalr1.cc:919 +#line 432 "dhcp6_parser.yy" // lalr1.cc:907 { // No global parameter is required // parsing completed } -#line 1058 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1055 "dhcp6_parser.cc" // lalr1.cc:907 break; case 109: -#line 476 "dhcp6_parser.yy" // lalr1.cc:919 +#line 478 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 1066 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1063 "dhcp6_parser.cc" // lalr1.cc:907 break; case 110: -#line 478 "dhcp6_parser.yy" // lalr1.cc:919 +#line 480 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr datadir(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr datadir(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("data-directory", datadir); ctx.leave(); } -#line 1076 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1073 "dhcp6_parser.cc" // lalr1.cc:907 break; case 111: -#line 484 "dhcp6_parser.yy" // lalr1.cc:919 +#line 486 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("preferred-lifetime", prf); } -#line 1085 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1082 "dhcp6_parser.cc" // lalr1.cc:907 break; case 112: -#line 489 "dhcp6_parser.yy" // lalr1.cc:919 +#line 491 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("valid-lifetime", prf); } -#line 1094 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1091 "dhcp6_parser.cc" // lalr1.cc:907 break; case 113: -#line 494 "dhcp6_parser.yy" // lalr1.cc:919 +#line 496 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("renew-timer", prf); } -#line 1103 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1100 "dhcp6_parser.cc" // lalr1.cc:907 break; case 114: -#line 499 "dhcp6_parser.yy" // lalr1.cc:919 +#line 501 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("rebind-timer", prf); } -#line 1112 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1109 "dhcp6_parser.cc" // lalr1.cc:907 break; case 115: -#line 504 "dhcp6_parser.yy" // lalr1.cc:919 +#line 506 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr dpp(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr dpp(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("decline-probation-period", dpp); } -#line 1121 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1118 "dhcp6_parser.cc" // lalr1.cc:907 break; case 116: -#line 509 "dhcp6_parser.yy" // lalr1.cc:919 +#line 511 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 1129 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1126 "dhcp6_parser.cc" // lalr1.cc:907 break; case 117: -#line 511 "dhcp6_parser.yy" // lalr1.cc:919 +#line 513 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr stag(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr stag(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("server-tag", stag); ctx.leave(); } -#line 1139 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1136 "dhcp6_parser.cc" // lalr1.cc:907 break; case 118: -#line 517 "dhcp6_parser.yy" // lalr1.cc:919 +#line 519 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("interfaces-config", i); ctx.stack_.push_back(i); ctx.enter(ctx.INTERFACES_CONFIG); } -#line 1150 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1147 "dhcp6_parser.cc" // lalr1.cc:907 break; case 119: -#line 522 "dhcp6_parser.yy" // lalr1.cc:919 +#line 524 "dhcp6_parser.yy" // lalr1.cc:907 { // No interfaces config param is required ctx.stack_.pop_back(); ctx.leave(); } -#line 1160 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1157 "dhcp6_parser.cc" // lalr1.cc:907 break; case 120: -#line 528 "dhcp6_parser.yy" // lalr1.cc:919 +#line 530 "dhcp6_parser.yy" // lalr1.cc:907 { // Parse the interfaces-config map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 1170 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1167 "dhcp6_parser.cc" // lalr1.cc:907 break; case 121: -#line 532 "dhcp6_parser.yy" // lalr1.cc:919 +#line 534 "dhcp6_parser.yy" // lalr1.cc:907 { // No interfaces config param is required // parsing completed } -#line 1179 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1176 "dhcp6_parser.cc" // lalr1.cc:907 break; case 129: -#line 548 "dhcp6_parser.yy" // lalr1.cc:919 +#line 550 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("interfaces", l); ctx.stack_.push_back(l); ctx.enter(ctx.NO_KEYWORD); } -#line 1190 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1187 "dhcp6_parser.cc" // lalr1.cc:907 break; case 130: -#line 553 "dhcp6_parser.yy" // lalr1.cc:919 +#line 555 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.stack_.pop_back(); ctx.leave(); } -#line 1199 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1196 "dhcp6_parser.cc" // lalr1.cc:907 break; case 131: -#line 558 "dhcp6_parser.yy" // lalr1.cc:919 +#line 560 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("re-detect", b); } -#line 1208 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1205 "dhcp6_parser.cc" // lalr1.cc:907 break; case 132: -#line 564 "dhcp6_parser.yy" // lalr1.cc:919 +#line 566 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("lease-database", i); ctx.stack_.push_back(i); ctx.enter(ctx.LEASE_DATABASE); } -#line 1219 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1216 "dhcp6_parser.cc" // lalr1.cc:907 break; case 133: -#line 569 "dhcp6_parser.yy" // lalr1.cc:919 +#line 571 "dhcp6_parser.yy" // lalr1.cc:907 { // 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 1230 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1227 "dhcp6_parser.cc" // lalr1.cc:907 break; case 134: -#line 576 "dhcp6_parser.yy" // lalr1.cc:919 +#line 578 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hosts-database", i); ctx.stack_.push_back(i); ctx.enter(ctx.HOSTS_DATABASE); } -#line 1241 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1238 "dhcp6_parser.cc" // lalr1.cc:907 break; case 135: -#line 581 "dhcp6_parser.yy" // lalr1.cc:919 +#line 583 "dhcp6_parser.yy" // lalr1.cc:907 { // 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 1252 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1249 "dhcp6_parser.cc" // lalr1.cc:907 break; case 136: -#line 588 "dhcp6_parser.yy" // lalr1.cc:919 +#line 590 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hosts-databases", l); ctx.stack_.push_back(l); ctx.enter(ctx.HOSTS_DATABASE); } -#line 1263 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1260 "dhcp6_parser.cc" // lalr1.cc:907 break; case 137: -#line 593 "dhcp6_parser.yy" // lalr1.cc:919 +#line 595 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.stack_.pop_back(); ctx.leave(); } -#line 1272 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1269 "dhcp6_parser.cc" // lalr1.cc:907 break; case 142: -#line 606 "dhcp6_parser.yy" // lalr1.cc:919 +#line 608 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 1282 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1279 "dhcp6_parser.cc" // lalr1.cc:907 break; case 143: -#line 610 "dhcp6_parser.yy" // lalr1.cc:919 +#line 612 "dhcp6_parser.yy" // lalr1.cc:907 { // The type parameter is required ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 1292 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1289 "dhcp6_parser.cc" // lalr1.cc:907 break; case 166: -#line 642 "dhcp6_parser.yy" // lalr1.cc:919 +#line 644 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.DATABASE_TYPE); } -#line 1300 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1297 "dhcp6_parser.cc" // lalr1.cc:907 break; case 167: -#line 644 "dhcp6_parser.yy" // lalr1.cc:919 +#line 646 "dhcp6_parser.yy" // lalr1.cc:907 { - ctx.stack_.back()->set("type", yystack_[0].value.as < ElementPtr > ()); + ctx.stack_.back()->set("type", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); } -#line 1309 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1306 "dhcp6_parser.cc" // lalr1.cc:907 break; case 168: -#line 649 "dhcp6_parser.yy" // lalr1.cc:919 - { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("memfile", ctx.loc2pos(yystack_[0].location))); } -#line 1315 "dhcp6_parser.cc" // lalr1.cc:919 +#line 651 "dhcp6_parser.yy" // lalr1.cc:907 + { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("memfile", ctx.loc2pos(yystack_[0].location))); } +#line 1312 "dhcp6_parser.cc" // lalr1.cc:907 break; case 169: -#line 650 "dhcp6_parser.yy" // lalr1.cc:919 - { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("mysql", ctx.loc2pos(yystack_[0].location))); } -#line 1321 "dhcp6_parser.cc" // lalr1.cc:919 +#line 652 "dhcp6_parser.yy" // lalr1.cc:907 + { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("mysql", ctx.loc2pos(yystack_[0].location))); } +#line 1318 "dhcp6_parser.cc" // lalr1.cc:907 break; case 170: -#line 651 "dhcp6_parser.yy" // lalr1.cc:919 - { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("postgresql", ctx.loc2pos(yystack_[0].location))); } -#line 1327 "dhcp6_parser.cc" // lalr1.cc:919 +#line 653 "dhcp6_parser.yy" // lalr1.cc:907 + { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("postgresql", ctx.loc2pos(yystack_[0].location))); } +#line 1324 "dhcp6_parser.cc" // lalr1.cc:907 break; case 171: -#line 652 "dhcp6_parser.yy" // lalr1.cc:919 - { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("cql", ctx.loc2pos(yystack_[0].location))); } -#line 1333 "dhcp6_parser.cc" // lalr1.cc:919 +#line 654 "dhcp6_parser.yy" // lalr1.cc:907 + { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("cql", ctx.loc2pos(yystack_[0].location))); } +#line 1330 "dhcp6_parser.cc" // lalr1.cc:907 break; case 172: -#line 655 "dhcp6_parser.yy" // lalr1.cc:919 +#line 657 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 1341 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1338 "dhcp6_parser.cc" // lalr1.cc:907 break; case 173: -#line 657 "dhcp6_parser.yy" // lalr1.cc:919 +#line 659 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr user(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr user(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("user", user); ctx.leave(); } -#line 1351 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1348 "dhcp6_parser.cc" // lalr1.cc:907 break; case 174: -#line 663 "dhcp6_parser.yy" // lalr1.cc:919 +#line 665 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 1359 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1356 "dhcp6_parser.cc" // lalr1.cc:907 break; case 175: -#line 665 "dhcp6_parser.yy" // lalr1.cc:919 +#line 667 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr pwd(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr pwd(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("password", pwd); ctx.leave(); } -#line 1369 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1366 "dhcp6_parser.cc" // lalr1.cc:907 break; case 176: -#line 671 "dhcp6_parser.yy" // lalr1.cc:919 +#line 673 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 1377 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1374 "dhcp6_parser.cc" // lalr1.cc:907 break; case 177: -#line 673 "dhcp6_parser.yy" // lalr1.cc:919 +#line 675 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr h(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr h(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("host", h); ctx.leave(); } -#line 1387 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1384 "dhcp6_parser.cc" // lalr1.cc:907 break; case 178: -#line 679 "dhcp6_parser.yy" // lalr1.cc:919 +#line 681 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr p(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr p(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("port", p); } -#line 1396 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1393 "dhcp6_parser.cc" // lalr1.cc:907 break; case 179: -#line 684 "dhcp6_parser.yy" // lalr1.cc:919 +#line 686 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 1404 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1401 "dhcp6_parser.cc" // lalr1.cc:907 break; case 180: -#line 686 "dhcp6_parser.yy" // lalr1.cc:919 +#line 688 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr name(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("name", name); ctx.leave(); } -#line 1414 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1411 "dhcp6_parser.cc" // lalr1.cc:907 break; case 181: -#line 692 "dhcp6_parser.yy" // lalr1.cc:919 +#line 694 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("persist", n); } -#line 1423 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1420 "dhcp6_parser.cc" // lalr1.cc:907 break; case 182: -#line 697 "dhcp6_parser.yy" // lalr1.cc:919 +#line 699 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("lfc-interval", n); } -#line 1432 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1429 "dhcp6_parser.cc" // lalr1.cc:907 break; case 183: -#line 702 "dhcp6_parser.yy" // lalr1.cc:919 +#line 704 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("readonly", n); } -#line 1441 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1438 "dhcp6_parser.cc" // lalr1.cc:907 break; case 184: -#line 707 "dhcp6_parser.yy" // lalr1.cc:919 +#line 709 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("connect-timeout", n); } -#line 1450 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1447 "dhcp6_parser.cc" // lalr1.cc:907 break; case 185: -#line 712 "dhcp6_parser.yy" // lalr1.cc:919 +#line 714 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("reconnect-wait-time", n); } -#line 1459 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1456 "dhcp6_parser.cc" // lalr1.cc:907 break; case 186: -#line 717 "dhcp6_parser.yy" // lalr1.cc:919 +#line 719 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("request-timeout", n); } -#line 1468 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1465 "dhcp6_parser.cc" // lalr1.cc:907 break; case 187: -#line 722 "dhcp6_parser.yy" // lalr1.cc:919 +#line 724 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("tcp-keepalive", n); } -#line 1477 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1474 "dhcp6_parser.cc" // lalr1.cc:907 break; case 188: -#line 727 "dhcp6_parser.yy" // lalr1.cc:919 +#line 729 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr n(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("tcp-nodelay", n); } -#line 1486 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1483 "dhcp6_parser.cc" // lalr1.cc:907 break; case 189: -#line 732 "dhcp6_parser.yy" // lalr1.cc:919 +#line 734 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 1494 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1491 "dhcp6_parser.cc" // lalr1.cc:907 break; case 190: -#line 734 "dhcp6_parser.yy" // lalr1.cc:919 +#line 736 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr cp(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr cp(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("contact-points", cp); ctx.leave(); } -#line 1504 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1501 "dhcp6_parser.cc" // lalr1.cc:907 break; case 191: -#line 740 "dhcp6_parser.yy" // lalr1.cc:919 +#line 742 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr n(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].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 1513 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1510 "dhcp6_parser.cc" // lalr1.cc:907 break; case 192: -#line 745 "dhcp6_parser.yy" // lalr1.cc:919 +#line 747 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 1521 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1518 "dhcp6_parser.cc" // lalr1.cc:907 break; case 193: -#line 747 "dhcp6_parser.yy" // lalr1.cc:919 +#line 749 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr ks(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr ks(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("keyspace", ks); ctx.leave(); } -#line 1531 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1528 "dhcp6_parser.cc" // lalr1.cc:907 break; case 194: -#line 753 "dhcp6_parser.yy" // lalr1.cc:919 +#line 755 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 1539 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1536 "dhcp6_parser.cc" // lalr1.cc:907 break; case 195: -#line 755 "dhcp6_parser.yy" // lalr1.cc:919 +#line 757 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr c(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr c(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("consistency", c); ctx.leave(); } -#line 1549 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1546 "dhcp6_parser.cc" // lalr1.cc:907 break; case 196: -#line 761 "dhcp6_parser.yy" // lalr1.cc:919 +#line 763 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 1557 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1554 "dhcp6_parser.cc" // lalr1.cc:907 break; case 197: -#line 763 "dhcp6_parser.yy" // lalr1.cc:919 +#line 765 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr c(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr c(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("serial-consistency", c); ctx.leave(); } -#line 1567 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1564 "dhcp6_parser.cc" // lalr1.cc:907 break; case 198: -#line 769 "dhcp6_parser.yy" // lalr1.cc:919 +#line 771 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("sanity-checks", m); ctx.stack_.push_back(m); ctx.enter(ctx.SANITY_CHECKS); } -#line 1578 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1575 "dhcp6_parser.cc" // lalr1.cc:907 break; case 199: -#line 774 "dhcp6_parser.yy" // lalr1.cc:919 +#line 776 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.stack_.pop_back(); ctx.leave(); } -#line 1587 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1584 "dhcp6_parser.cc" // lalr1.cc:907 break; case 203: -#line 784 "dhcp6_parser.yy" // lalr1.cc:919 +#line 786 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 1595 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1592 "dhcp6_parser.cc" // lalr1.cc:907 break; case 204: -#line 786 "dhcp6_parser.yy" // lalr1.cc:919 +#line 788 "dhcp6_parser.yy" // lalr1.cc:907 { - if ( (string(yystack_[0].value.as < std::string > ()) == "none") || - (string(yystack_[0].value.as < std::string > ()) == "warn") || - (string(yystack_[0].value.as < std::string > ()) == "fix") || - (string(yystack_[0].value.as < std::string > ()) == "fix-del") || - (string(yystack_[0].value.as < std::string > ()) == "del")) { - ElementPtr user(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + if ( (string(yystack_[0].value.as< std::string > ()) == "none") || + (string(yystack_[0].value.as< std::string > ()) == "warn") || + (string(yystack_[0].value.as< std::string > ()) == "fix") || + (string(yystack_[0].value.as< std::string > ()) == "fix-del") || + (string(yystack_[0].value.as< std::string > ()) == "del")) { + ElementPtr user(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("lease-checks", user); ctx.leave(); } else { - error(yystack_[0].location, "Unsupported 'lease-checks value: " + string(yystack_[0].value.as < std::string > ()) + + error(yystack_[0].location, "Unsupported 'lease-checks value: " + string(yystack_[0].value.as< std::string > ()) + ", supported values are: none, warn, fix, fix-del, del"); } } -#line 1615 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1612 "dhcp6_parser.cc" // lalr1.cc:907 break; case 205: -#line 802 "dhcp6_parser.yy" // lalr1.cc:919 +#line 804 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("mac-sources", l); ctx.stack_.push_back(l); ctx.enter(ctx.MAC_SOURCES); } -#line 1626 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1623 "dhcp6_parser.cc" // lalr1.cc:907 break; case 206: -#line 807 "dhcp6_parser.yy" // lalr1.cc:919 +#line 809 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.stack_.pop_back(); ctx.leave(); } -#line 1635 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1632 "dhcp6_parser.cc" // lalr1.cc:907 break; case 211: -#line 820 "dhcp6_parser.yy" // lalr1.cc:919 +#line 822 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(duid); } -#line 1644 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1641 "dhcp6_parser.cc" // lalr1.cc:907 break; case 212: -#line 825 "dhcp6_parser.yy" // lalr1.cc:919 +#line 827 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr duid(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr duid(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(duid); } -#line 1653 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1650 "dhcp6_parser.cc" // lalr1.cc:907 break; case 213: -#line 830 "dhcp6_parser.yy" // lalr1.cc:919 +#line 832 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("host-reservation-identifiers", l); ctx.stack_.push_back(l); ctx.enter(ctx.HOST_RESERVATION_IDENTIFIERS); } -#line 1664 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1661 "dhcp6_parser.cc" // lalr1.cc:907 break; case 214: -#line 835 "dhcp6_parser.yy" // lalr1.cc:919 +#line 837 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.stack_.pop_back(); ctx.leave(); } -#line 1673 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1670 "dhcp6_parser.cc" // lalr1.cc:907 break; case 220: -#line 849 "dhcp6_parser.yy" // lalr1.cc:919 +#line 851 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(hwaddr); } -#line 1682 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1679 "dhcp6_parser.cc" // lalr1.cc:907 break; case 221: -#line 854 "dhcp6_parser.yy" // lalr1.cc:919 +#line 856 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr flex_id(new StringElement("flex-id", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(flex_id); } -#line 1691 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1688 "dhcp6_parser.cc" // lalr1.cc:907 break; case 222: -#line 861 "dhcp6_parser.yy" // lalr1.cc:919 +#line 863 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("relay-supplied-options", l); ctx.stack_.push_back(l); ctx.enter(ctx.NO_KEYWORD); } -#line 1702 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1699 "dhcp6_parser.cc" // lalr1.cc:907 break; case 223: -#line 866 "dhcp6_parser.yy" // lalr1.cc:919 +#line 868 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.stack_.pop_back(); ctx.leave(); } -#line 1711 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1708 "dhcp6_parser.cc" // lalr1.cc:907 break; case 224: -#line 871 "dhcp6_parser.yy" // lalr1.cc:919 +#line 873 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hooks-libraries", l); ctx.stack_.push_back(l); ctx.enter(ctx.HOOKS_LIBRARIES); } -#line 1722 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1719 "dhcp6_parser.cc" // lalr1.cc:907 break; case 225: -#line 876 "dhcp6_parser.yy" // lalr1.cc:919 +#line 878 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.stack_.pop_back(); ctx.leave(); } -#line 1731 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1728 "dhcp6_parser.cc" // lalr1.cc:907 break; case 230: -#line 889 "dhcp6_parser.yy" // lalr1.cc:919 +#line 891 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 1741 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1738 "dhcp6_parser.cc" // lalr1.cc:907 break; case 231: -#line 893 "dhcp6_parser.yy" // lalr1.cc:919 +#line 895 "dhcp6_parser.yy" // lalr1.cc:907 { // The library hooks parameter is required ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 1751 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1748 "dhcp6_parser.cc" // lalr1.cc:907 break; case 232: -#line 899 "dhcp6_parser.yy" // lalr1.cc:919 +#line 901 "dhcp6_parser.yy" // lalr1.cc:907 { // Parse the hooks-libraries list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 1761 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1758 "dhcp6_parser.cc" // lalr1.cc:907 break; case 233: -#line 903 "dhcp6_parser.yy" // lalr1.cc:919 +#line 905 "dhcp6_parser.yy" // lalr1.cc:907 { // The library hooks parameter is required ctx.require("library", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 1771 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1768 "dhcp6_parser.cc" // lalr1.cc:907 break; case 239: -#line 918 "dhcp6_parser.yy" // lalr1.cc:919 +#line 920 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 1779 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1776 "dhcp6_parser.cc" // lalr1.cc:907 break; case 240: -#line 920 "dhcp6_parser.yy" // lalr1.cc:919 +#line 922 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr lib(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr lib(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("library", lib); ctx.leave(); } -#line 1789 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1786 "dhcp6_parser.cc" // lalr1.cc:907 break; case 241: -#line 926 "dhcp6_parser.yy" // lalr1.cc:919 +#line 928 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 1797 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1794 "dhcp6_parser.cc" // lalr1.cc:907 break; case 242: -#line 928 "dhcp6_parser.yy" // lalr1.cc:919 +#line 930 "dhcp6_parser.yy" // lalr1.cc:907 { - ctx.stack_.back()->set("parameters", yystack_[0].value.as < ElementPtr > ()); + ctx.stack_.back()->set("parameters", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); } -#line 1806 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1803 "dhcp6_parser.cc" // lalr1.cc:907 break; case 243: -#line 934 "dhcp6_parser.yy" // lalr1.cc:919 +#line 936 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("expired-leases-processing", m); ctx.stack_.push_back(m); ctx.enter(ctx.EXPIRED_LEASES_PROCESSING); } -#line 1817 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1814 "dhcp6_parser.cc" // lalr1.cc:907 break; case 244: -#line 939 "dhcp6_parser.yy" // lalr1.cc:919 +#line 941 "dhcp6_parser.yy" // lalr1.cc:907 { // No expired lease parameter is required ctx.stack_.pop_back(); ctx.leave(); } -#line 1827 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1824 "dhcp6_parser.cc" // lalr1.cc:907 break; case 253: -#line 957 "dhcp6_parser.yy" // lalr1.cc:919 +#line 959 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].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 1836 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1833 "dhcp6_parser.cc" // lalr1.cc:907 break; case 254: -#line 962 "dhcp6_parser.yy" // lalr1.cc:919 +#line 964 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].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 1845 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1842 "dhcp6_parser.cc" // lalr1.cc:907 break; case 255: -#line 967 "dhcp6_parser.yy" // lalr1.cc:919 +#line 969 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].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 1854 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1851 "dhcp6_parser.cc" // lalr1.cc:907 break; case 256: -#line 972 "dhcp6_parser.yy" // lalr1.cc:919 +#line 974 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].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 1863 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1860 "dhcp6_parser.cc" // lalr1.cc:907 break; case 257: -#line 977 "dhcp6_parser.yy" // lalr1.cc:919 +#line 979 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].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 1872 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1869 "dhcp6_parser.cc" // lalr1.cc:907 break; case 258: -#line 982 "dhcp6_parser.yy" // lalr1.cc:919 +#line 984 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr value(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].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 1881 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1878 "dhcp6_parser.cc" // lalr1.cc:907 break; case 259: -#line 990 "dhcp6_parser.yy" // lalr1.cc:919 +#line 992 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("subnet6", l); ctx.stack_.push_back(l); ctx.enter(ctx.SUBNET6); } -#line 1892 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1889 "dhcp6_parser.cc" // lalr1.cc:907 break; case 260: -#line 995 "dhcp6_parser.yy" // lalr1.cc:919 +#line 997 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.stack_.pop_back(); ctx.leave(); } -#line 1901 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1898 "dhcp6_parser.cc" // lalr1.cc:907 break; case 265: -#line 1015 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1017 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 1911 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1908 "dhcp6_parser.cc" // lalr1.cc:907 break; case 266: -#line 1019 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1021 "dhcp6_parser.yy" // lalr1.cc:907 { // Once we reached this place, the subnet parsing is now complete. // If we want to, we can implement default values here. @@ -1933,267 +1930,267 @@ namespace isc { namespace dhcp { ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 1937 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1934 "dhcp6_parser.cc" // lalr1.cc:907 break; case 267: -#line 1041 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1043 "dhcp6_parser.yy" // lalr1.cc:907 { // Parse the subnet6 list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 1947 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1944 "dhcp6_parser.cc" // lalr1.cc:907 break; case 268: -#line 1045 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1047 "dhcp6_parser.yy" // lalr1.cc:907 { // The subnet subnet6 parameter is required ctx.require("subnet", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 1957 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1954 "dhcp6_parser.cc" // lalr1.cc:907 break; case 291: -#line 1079 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1081 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 1965 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1962 "dhcp6_parser.cc" // lalr1.cc:907 break; case 292: -#line 1081 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1083 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr subnet(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr subnet(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("subnet", subnet); ctx.leave(); } -#line 1975 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1972 "dhcp6_parser.cc" // lalr1.cc:907 break; case 293: -#line 1087 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1089 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 1983 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1980 "dhcp6_parser.cc" // lalr1.cc:907 break; case 294: -#line 1089 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1091 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("interface", iface); ctx.leave(); } -#line 1993 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1990 "dhcp6_parser.cc" // lalr1.cc:907 break; case 295: -#line 1095 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1097 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 2001 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1998 "dhcp6_parser.cc" // lalr1.cc:907 break; case 296: -#line 1097 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1099 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr iface(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + 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 2011 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2008 "dhcp6_parser.cc" // lalr1.cc:907 break; case 297: -#line 1103 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1105 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 2019 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2016 "dhcp6_parser.cc" // lalr1.cc:907 break; case 298: -#line 1105 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1107 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr cls(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + 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 2029 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2026 "dhcp6_parser.cc" // lalr1.cc:907 break; case 299: -#line 1111 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1113 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("require-client-classes", c); ctx.stack_.push_back(c); ctx.enter(ctx.NO_KEYWORD); } -#line 2040 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2037 "dhcp6_parser.cc" // lalr1.cc:907 break; case 300: -#line 1116 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1118 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2049 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2046 "dhcp6_parser.cc" // lalr1.cc:907 break; case 301: -#line 1121 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1123 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.RESERVATION_MODE); } -#line 2057 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2054 "dhcp6_parser.cc" // lalr1.cc:907 break; case 302: -#line 1123 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1125 "dhcp6_parser.yy" // lalr1.cc:907 { - ctx.stack_.back()->set("reservation-mode", yystack_[0].value.as < ElementPtr > ()); + ctx.stack_.back()->set("reservation-mode", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); } -#line 2066 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2063 "dhcp6_parser.cc" // lalr1.cc:907 break; case 303: -#line 1128 "dhcp6_parser.yy" // lalr1.cc:919 - { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("disabled", ctx.loc2pos(yystack_[0].location))); } -#line 2072 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1130 "dhcp6_parser.yy" // lalr1.cc:907 + { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("disabled", ctx.loc2pos(yystack_[0].location))); } +#line 2069 "dhcp6_parser.cc" // lalr1.cc:907 break; case 304: -#line 1129 "dhcp6_parser.yy" // lalr1.cc:919 - { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(yystack_[0].location))); } -#line 2078 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1131 "dhcp6_parser.yy" // lalr1.cc:907 + { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("out-of-pool", ctx.loc2pos(yystack_[0].location))); } +#line 2075 "dhcp6_parser.cc" // lalr1.cc:907 break; case 305: -#line 1130 "dhcp6_parser.yy" // lalr1.cc:919 - { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("global", ctx.loc2pos(yystack_[0].location))); } -#line 2084 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1132 "dhcp6_parser.yy" // lalr1.cc:907 + { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("global", ctx.loc2pos(yystack_[0].location))); } +#line 2081 "dhcp6_parser.cc" // lalr1.cc:907 break; case 306: -#line 1131 "dhcp6_parser.yy" // lalr1.cc:919 - { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("all", ctx.loc2pos(yystack_[0].location))); } -#line 2090 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1133 "dhcp6_parser.yy" // lalr1.cc:907 + { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("all", ctx.loc2pos(yystack_[0].location))); } +#line 2087 "dhcp6_parser.cc" // lalr1.cc:907 break; case 307: -#line 1134 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1136 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr id(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr id(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("id", id); } -#line 2099 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2096 "dhcp6_parser.cc" // lalr1.cc:907 break; case 308: -#line 1139 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1141 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr rc(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr rc(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("rapid-commit", rc); } -#line 2108 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2105 "dhcp6_parser.cc" // lalr1.cc:907 break; case 309: -#line 1147 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1149 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("shared-networks", l); ctx.stack_.push_back(l); ctx.enter(ctx.SHARED_NETWORK); } -#line 2119 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2116 "dhcp6_parser.cc" // lalr1.cc:907 break; case 310: -#line 1152 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1154 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2128 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2125 "dhcp6_parser.cc" // lalr1.cc:907 break; case 315: -#line 1167 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1169 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 2138 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2135 "dhcp6_parser.cc" // lalr1.cc:907 break; case 316: -#line 1171 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1173 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.stack_.pop_back(); } -#line 2146 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2143 "dhcp6_parser.cc" // lalr1.cc:907 break; case 336: -#line 1202 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1204 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("option-def", l); ctx.stack_.push_back(l); ctx.enter(ctx.OPTION_DEF); } -#line 2157 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2154 "dhcp6_parser.cc" // lalr1.cc:907 break; case 337: -#line 1207 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1209 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2166 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2163 "dhcp6_parser.cc" // lalr1.cc:907 break; case 338: -#line 1215 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1217 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 2175 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2172 "dhcp6_parser.cc" // lalr1.cc:907 break; case 339: -#line 1218 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1220 "dhcp6_parser.yy" // lalr1.cc:907 { // parsing completed } -#line 2183 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2180 "dhcp6_parser.cc" // lalr1.cc:907 break; case 344: -#line 1234 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1236 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 2193 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2190 "dhcp6_parser.cc" // lalr1.cc:907 break; case 345: -#line 1238 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1240 "dhcp6_parser.yy" // lalr1.cc:907 { // The name, code and type option def parameters are required. ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); @@ -2201,21 +2198,21 @@ namespace isc { namespace dhcp { ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 2205 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2202 "dhcp6_parser.cc" // lalr1.cc:907 break; case 346: -#line 1249 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1251 "dhcp6_parser.yy" // lalr1.cc:907 { // Parse the option-def list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 2215 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2212 "dhcp6_parser.cc" // lalr1.cc:907 break; case 347: -#line 1253 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1255 "dhcp6_parser.yy" // lalr1.cc:907 { // The name, code and type option def parameters are required. ctx.require("name", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); @@ -2223,283 +2220,283 @@ namespace isc { namespace dhcp { ctx.require("type", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 2227 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2224 "dhcp6_parser.cc" // lalr1.cc:907 break; case 363: -#line 1285 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1287 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr code(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr code(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("code", code); } -#line 2236 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2233 "dhcp6_parser.cc" // lalr1.cc:907 break; case 365: -#line 1292 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1294 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 2244 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2241 "dhcp6_parser.cc" // lalr1.cc:907 break; case 366: -#line 1294 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1296 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr prf(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("type", prf); ctx.leave(); } -#line 2254 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2251 "dhcp6_parser.cc" // lalr1.cc:907 break; case 367: -#line 1300 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1302 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 2262 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2259 "dhcp6_parser.cc" // lalr1.cc:907 break; case 368: -#line 1302 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1304 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr rtypes(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + 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 2272 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2269 "dhcp6_parser.cc" // lalr1.cc:907 break; case 369: -#line 1308 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1310 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 2280 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2277 "dhcp6_parser.cc" // lalr1.cc:907 break; case 370: -#line 1310 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1312 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr space(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr space(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("space", space); ctx.leave(); } -#line 2290 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2287 "dhcp6_parser.cc" // lalr1.cc:907 break; case 372: -#line 1318 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1320 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 2298 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2295 "dhcp6_parser.cc" // lalr1.cc:907 break; case 373: -#line 1320 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1322 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr encap(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr encap(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("encapsulate", encap); ctx.leave(); } -#line 2308 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2305 "dhcp6_parser.cc" // lalr1.cc:907 break; case 374: -#line 1326 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1328 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr array(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr array(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("array", array); } -#line 2317 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2314 "dhcp6_parser.cc" // lalr1.cc:907 break; case 375: -#line 1335 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1337 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("option-data", l); ctx.stack_.push_back(l); ctx.enter(ctx.OPTION_DATA); } -#line 2328 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2325 "dhcp6_parser.cc" // lalr1.cc:907 break; case 376: -#line 1340 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1342 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2337 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2334 "dhcp6_parser.cc" // lalr1.cc:907 break; case 381: -#line 1359 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1361 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 2347 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2344 "dhcp6_parser.cc" // lalr1.cc:907 break; case 382: -#line 1363 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1365 "dhcp6_parser.yy" // lalr1.cc:907 { /// @todo: the code or name parameters are required. ctx.stack_.pop_back(); } -#line 2356 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2353 "dhcp6_parser.cc" // lalr1.cc:907 break; case 383: -#line 1371 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1373 "dhcp6_parser.yy" // lalr1.cc:907 { // Parse the option-data list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 2366 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2363 "dhcp6_parser.cc" // lalr1.cc:907 break; case 384: -#line 1375 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1377 "dhcp6_parser.yy" // lalr1.cc:907 { /// @todo: the code or name parameters are required. // parsing completed } -#line 2375 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2372 "dhcp6_parser.cc" // lalr1.cc:907 break; case 399: -#line 1408 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1410 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 2383 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2380 "dhcp6_parser.cc" // lalr1.cc:907 break; case 400: -#line 1410 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1412 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr data(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr data(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("data", data); ctx.leave(); } -#line 2393 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2390 "dhcp6_parser.cc" // lalr1.cc:907 break; case 403: -#line 1420 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1422 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr space(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr space(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("csv-format", space); } -#line 2402 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2399 "dhcp6_parser.cc" // lalr1.cc:907 break; case 404: -#line 1425 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1427 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr persist(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr persist(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("always-send", persist); } -#line 2411 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2408 "dhcp6_parser.cc" // lalr1.cc:907 break; case 405: -#line 1433 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1435 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("pools", l); ctx.stack_.push_back(l); ctx.enter(ctx.POOLS); } -#line 2422 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2419 "dhcp6_parser.cc" // lalr1.cc:907 break; case 406: -#line 1438 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1440 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2431 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2428 "dhcp6_parser.cc" // lalr1.cc:907 break; case 411: -#line 1453 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1455 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 2441 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2438 "dhcp6_parser.cc" // lalr1.cc:907 break; case 412: -#line 1457 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1459 "dhcp6_parser.yy" // lalr1.cc:907 { // The pool parameter is required. ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 2451 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2448 "dhcp6_parser.cc" // lalr1.cc:907 break; case 413: -#line 1463 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1465 "dhcp6_parser.yy" // lalr1.cc:907 { // Parse the pool list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 2461 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2458 "dhcp6_parser.cc" // lalr1.cc:907 break; case 414: -#line 1467 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1469 "dhcp6_parser.yy" // lalr1.cc:907 { // The pool parameter is required. ctx.require("pool", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); } -#line 2470 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2467 "dhcp6_parser.cc" // lalr1.cc:907 break; case 424: -#line 1485 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1487 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 2478 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2475 "dhcp6_parser.cc" // lalr1.cc:907 break; case 425: -#line 1487 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1489 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr pool(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr pool(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("pool", pool); ctx.leave(); } -#line 2488 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2485 "dhcp6_parser.cc" // lalr1.cc:907 break; case 426: -#line 1493 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1495 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 2496 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2493 "dhcp6_parser.cc" // lalr1.cc:907 break; case 427: -#line 1495 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1497 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr parent = ctx.stack_.back(); - ElementPtr user_context = yystack_[0].value.as < ElementPtr > (); + ElementPtr user_context = yystack_[0].value.as< ElementPtr > (); ConstElementPtr old = parent->get("user-context"); // Handle already existing user context @@ -2519,23 +2516,23 @@ namespace isc { namespace dhcp { parent->set("user-context", user_context); ctx.leave(); } -#line 2523 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2520 "dhcp6_parser.cc" // lalr1.cc:907 break; case 428: -#line 1518 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1520 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 2531 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2528 "dhcp6_parser.cc" // lalr1.cc:907 break; case 429: -#line 1520 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1522 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr parent = ctx.stack_.back(); ElementPtr user_context(new MapElement(ctx.loc2pos(yystack_[3].location))); - ElementPtr comment(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr comment(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); user_context->set("comment", comment); // Handle already existing user context @@ -2556,41 +2553,41 @@ namespace isc { namespace dhcp { parent->set("user-context", user_context); ctx.leave(); } -#line 2560 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2557 "dhcp6_parser.cc" // lalr1.cc:907 break; case 430: -#line 1548 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1550 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("pd-pools", l); ctx.stack_.push_back(l); ctx.enter(ctx.PD_POOLS); } -#line 2571 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2568 "dhcp6_parser.cc" // lalr1.cc:907 break; case 431: -#line 1553 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1555 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2580 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2577 "dhcp6_parser.cc" // lalr1.cc:907 break; case 436: -#line 1568 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1570 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 2590 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2587 "dhcp6_parser.cc" // lalr1.cc:907 break; case 437: -#line 1572 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1574 "dhcp6_parser.yy" // lalr1.cc:907 { // The prefix, prefix len and delegated len parameters are required. ctx.require("prefix", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); @@ -2598,21 +2595,21 @@ namespace isc { namespace dhcp { ctx.require("delegated-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); ctx.stack_.pop_back(); } -#line 2602 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2599 "dhcp6_parser.cc" // lalr1.cc:907 break; case 438: -#line 1580 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1582 "dhcp6_parser.yy" // lalr1.cc:907 { // Parse the pd-pool list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 2612 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2609 "dhcp6_parser.cc" // lalr1.cc:907 break; case 439: -#line 1584 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1586 "dhcp6_parser.yy" // lalr1.cc:907 { // The prefix, prefix len and delegated len parameters are required. ctx.require("prefix", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); @@ -2620,546 +2617,546 @@ namespace isc { namespace dhcp { ctx.require("delegated-len", ctx.loc2pos(yystack_[3].location), ctx.loc2pos(yystack_[0].location)); // parsing completed } -#line 2624 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2621 "dhcp6_parser.cc" // lalr1.cc:907 break; case 453: -#line 1609 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1611 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 2632 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2629 "dhcp6_parser.cc" // lalr1.cc:907 break; case 454: -#line 1611 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1613 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr prf(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("prefix", prf); ctx.leave(); } -#line 2642 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2639 "dhcp6_parser.cc" // lalr1.cc:907 break; case 455: -#line 1617 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1619 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("prefix-len", prf); } -#line 2651 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2648 "dhcp6_parser.cc" // lalr1.cc:907 break; case 456: -#line 1622 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1624 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 2659 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2656 "dhcp6_parser.cc" // lalr1.cc:907 break; case 457: -#line 1624 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1626 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr prf(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + 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 2669 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2666 "dhcp6_parser.cc" // lalr1.cc:907 break; case 458: -#line 1630 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1632 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr prf(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].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 2678 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2675 "dhcp6_parser.cc" // lalr1.cc:907 break; case 459: -#line 1635 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1637 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr deleg(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr deleg(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("delegated-len", deleg); } -#line 2687 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2684 "dhcp6_parser.cc" // lalr1.cc:907 break; case 460: -#line 1643 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1645 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("reservations", l); ctx.stack_.push_back(l); ctx.enter(ctx.RESERVATIONS); } -#line 2698 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2695 "dhcp6_parser.cc" // lalr1.cc:907 break; case 461: -#line 1648 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1650 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2707 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2704 "dhcp6_parser.cc" // lalr1.cc:907 break; case 466: -#line 1661 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1663 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 2717 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2714 "dhcp6_parser.cc" // lalr1.cc:907 break; case 467: -#line 1665 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1667 "dhcp6_parser.yy" // lalr1.cc:907 { /// @todo: an identifier parameter is required. ctx.stack_.pop_back(); } -#line 2726 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2723 "dhcp6_parser.cc" // lalr1.cc:907 break; case 468: -#line 1670 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1672 "dhcp6_parser.yy" // lalr1.cc:907 { // Parse the reservations list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 2736 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2733 "dhcp6_parser.cc" // lalr1.cc:907 break; case 469: -#line 1674 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1676 "dhcp6_parser.yy" // lalr1.cc:907 { /// @todo: an identifier parameter is required. // parsing completed } -#line 2745 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2742 "dhcp6_parser.cc" // lalr1.cc:907 break; case 485: -#line 1701 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1703 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ip-addresses", l); ctx.stack_.push_back(l); ctx.enter(ctx.NO_KEYWORD); } -#line 2756 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2753 "dhcp6_parser.cc" // lalr1.cc:907 break; case 486: -#line 1706 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1708 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2765 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2762 "dhcp6_parser.cc" // lalr1.cc:907 break; case 487: -#line 1711 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1713 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("prefixes", l); ctx.stack_.push_back(l); ctx.enter(ctx.NO_KEYWORD); } -#line 2776 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2773 "dhcp6_parser.cc" // lalr1.cc:907 break; case 488: -#line 1716 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1718 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2785 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2782 "dhcp6_parser.cc" // lalr1.cc:907 break; case 489: -#line 1721 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1723 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 2793 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2790 "dhcp6_parser.cc" // lalr1.cc:907 break; case 490: -#line 1723 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1725 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr d(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr d(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("duid", d); ctx.leave(); } -#line 2803 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2800 "dhcp6_parser.cc" // lalr1.cc:907 break; case 491: -#line 1729 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1731 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 2811 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2808 "dhcp6_parser.cc" // lalr1.cc:907 break; case 492: -#line 1731 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1733 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr hw(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + 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 2821 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2818 "dhcp6_parser.cc" // lalr1.cc:907 break; case 493: -#line 1737 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1739 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 2829 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2826 "dhcp6_parser.cc" // lalr1.cc:907 break; case 494: -#line 1739 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1741 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr host(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr host(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hostname", host); ctx.leave(); } -#line 2839 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2836 "dhcp6_parser.cc" // lalr1.cc:907 break; case 495: -#line 1745 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1747 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 2847 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2844 "dhcp6_parser.cc" // lalr1.cc:907 break; case 496: -#line 1747 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1749 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr hw(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + 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 2857 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2854 "dhcp6_parser.cc" // lalr1.cc:907 break; case 497: -#line 1753 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1755 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("client-classes", c); ctx.stack_.push_back(c); ctx.enter(ctx.NO_KEYWORD); } -#line 2868 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2865 "dhcp6_parser.cc" // lalr1.cc:907 break; case 498: -#line 1758 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1760 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2877 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2874 "dhcp6_parser.cc" // lalr1.cc:907 break; case 499: -#line 1766 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1768 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("relay", m); ctx.stack_.push_back(m); ctx.enter(ctx.RELAY); } -#line 2888 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2885 "dhcp6_parser.cc" // lalr1.cc:907 break; case 500: -#line 1771 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1773 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2897 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2894 "dhcp6_parser.cc" // lalr1.cc:907 break; case 503: -#line 1780 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1782 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 2905 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2902 "dhcp6_parser.cc" // lalr1.cc:907 break; case 504: -#line 1782 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1784 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr addr(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + 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 2915 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2912 "dhcp6_parser.cc" // lalr1.cc:907 break; case 505: -#line 1791 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1793 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("client-classes", l); ctx.stack_.push_back(l); ctx.enter(ctx.CLIENT_CLASSES); } -#line 2926 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2923 "dhcp6_parser.cc" // lalr1.cc:907 break; case 506: -#line 1796 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1798 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2935 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2932 "dhcp6_parser.cc" // lalr1.cc:907 break; case 509: -#line 1805 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1807 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 2945 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2942 "dhcp6_parser.cc" // lalr1.cc:907 break; case 510: -#line 1809 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1811 "dhcp6_parser.yy" // lalr1.cc:907 { // 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 2955 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2952 "dhcp6_parser.cc" // lalr1.cc:907 break; case 523: -#line 1834 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1836 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 2963 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2960 "dhcp6_parser.cc" // lalr1.cc:907 break; case 524: -#line 1836 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1838 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr test(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr test(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("test", test); ctx.leave(); } -#line 2973 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2970 "dhcp6_parser.cc" // lalr1.cc:907 break; case 525: -#line 1842 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1844 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("only-if-required", b); } -#line 2982 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2979 "dhcp6_parser.cc" // lalr1.cc:907 break; case 526: -#line 1850 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1852 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("server-id", m); ctx.stack_.push_back(m); ctx.enter(ctx.SERVER_ID); } -#line 2993 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2990 "dhcp6_parser.cc" // lalr1.cc:907 break; case 527: -#line 1855 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1857 "dhcp6_parser.yy" // lalr1.cc:907 { // 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 3004 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3001 "dhcp6_parser.cc" // lalr1.cc:907 break; case 539: -#line 1877 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1879 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.DUID_TYPE); } -#line 3012 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3009 "dhcp6_parser.cc" // lalr1.cc:907 break; case 540: -#line 1879 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1881 "dhcp6_parser.yy" // lalr1.cc:907 { - ctx.stack_.back()->set("type", yystack_[0].value.as < ElementPtr > ()); + ctx.stack_.back()->set("type", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); } -#line 3021 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3018 "dhcp6_parser.cc" // lalr1.cc:907 break; case 541: -#line 1884 "dhcp6_parser.yy" // lalr1.cc:919 - { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("LLT", ctx.loc2pos(yystack_[0].location))); } -#line 3027 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1886 "dhcp6_parser.yy" // lalr1.cc:907 + { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("LLT", ctx.loc2pos(yystack_[0].location))); } +#line 3024 "dhcp6_parser.cc" // lalr1.cc:907 break; case 542: -#line 1885 "dhcp6_parser.yy" // lalr1.cc:919 - { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("EN", ctx.loc2pos(yystack_[0].location))); } -#line 3033 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1887 "dhcp6_parser.yy" // lalr1.cc:907 + { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("EN", ctx.loc2pos(yystack_[0].location))); } +#line 3030 "dhcp6_parser.cc" // lalr1.cc:907 break; case 543: -#line 1886 "dhcp6_parser.yy" // lalr1.cc:919 - { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("LL", ctx.loc2pos(yystack_[0].location))); } -#line 3039 "dhcp6_parser.cc" // lalr1.cc:919 +#line 1888 "dhcp6_parser.yy" // lalr1.cc:907 + { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("LL", ctx.loc2pos(yystack_[0].location))); } +#line 3036 "dhcp6_parser.cc" // lalr1.cc:907 break; case 544: -#line 1889 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1891 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr htype(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr htype(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("htype", htype); } -#line 3048 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3045 "dhcp6_parser.cc" // lalr1.cc:907 break; case 545: -#line 1894 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1896 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 3056 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3053 "dhcp6_parser.cc" // lalr1.cc:907 break; case 546: -#line 1896 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1898 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr id(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr id(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("identifier", id); ctx.leave(); } -#line 3066 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3063 "dhcp6_parser.cc" // lalr1.cc:907 break; case 547: -#line 1902 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1904 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr time(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("time", time); } -#line 3075 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3072 "dhcp6_parser.cc" // lalr1.cc:907 break; case 548: -#line 1907 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1909 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr time(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("enterprise-id", time); } -#line 3084 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3081 "dhcp6_parser.cc" // lalr1.cc:907 break; case 549: -#line 1914 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1916 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr time(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("dhcp4o6-port", time); } -#line 3093 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3090 "dhcp6_parser.cc" // lalr1.cc:907 break; case 550: -#line 1921 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1923 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("control-socket", m); ctx.stack_.push_back(m); ctx.enter(ctx.CONTROL_SOCKET); } -#line 3104 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3101 "dhcp6_parser.cc" // lalr1.cc:907 break; case 551: -#line 1926 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1928 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.stack_.pop_back(); ctx.leave(); } -#line 3113 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3110 "dhcp6_parser.cc" // lalr1.cc:907 break; case 559: -#line 1942 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1944 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 3121 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3118 "dhcp6_parser.cc" // lalr1.cc:907 break; case 560: -#line 1944 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1946 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr stype(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + 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 3131 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3128 "dhcp6_parser.cc" // lalr1.cc:907 break; case 561: -#line 1950 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1952 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 3139 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3136 "dhcp6_parser.cc" // lalr1.cc:907 break; case 562: -#line 1952 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1954 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr name(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + 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 3149 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3146 "dhcp6_parser.cc" // lalr1.cc:907 break; case 563: -#line 1960 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1962 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 3157 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3154 "dhcp6_parser.cc" // lalr1.cc:907 break; case 564: -#line 1962 "dhcp6_parser.yy" // lalr1.cc:919 +#line 1964 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr qc = yystack_[0].value.as < ElementPtr > (); + ElementPtr qc = yystack_[0].value.as< ElementPtr > (); ctx.stack_.back()->set("dhcp-queue-control", qc); // Doing this manually, because dhcp-queue-control @@ -3193,617 +3190,626 @@ namespace isc { namespace dhcp { ctx.leave(); } -#line 3197 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3194 "dhcp6_parser.cc" // lalr1.cc:907 break; case 565: -#line 2000 "dhcp6_parser.yy" // lalr1.cc:919 +#line 2002 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("dhcp-ddns", m); ctx.stack_.push_back(m); ctx.enter(ctx.DHCP_DDNS); } -#line 3208 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3205 "dhcp6_parser.cc" // lalr1.cc:907 break; case 566: -#line 2005 "dhcp6_parser.yy" // lalr1.cc:919 +#line 2007 "dhcp6_parser.yy" // lalr1.cc:907 { // 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 3219 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3216 "dhcp6_parser.cc" // lalr1.cc:907 break; case 567: -#line 2012 "dhcp6_parser.yy" // lalr1.cc:919 +#line 2014 "dhcp6_parser.yy" // lalr1.cc:907 { // Parse the dhcp-ddns map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 3229 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3226 "dhcp6_parser.cc" // lalr1.cc:907 break; case 568: -#line 2016 "dhcp6_parser.yy" // lalr1.cc:919 +#line 2018 "dhcp6_parser.yy" // lalr1.cc:907 { // 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 3239 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3236 "dhcp6_parser.cc" // lalr1.cc:907 break; case 589: -#line 2046 "dhcp6_parser.yy" // lalr1.cc:919 +#line 2048 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("enable-updates", b); } -#line 3248 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3245 "dhcp6_parser.cc" // lalr1.cc:907 break; case 590: -#line 2051 "dhcp6_parser.yy" // lalr1.cc:919 +#line 2053 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 3256 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3253 "dhcp6_parser.cc" // lalr1.cc:907 break; case 591: -#line 2053 "dhcp6_parser.yy" // lalr1.cc:919 +#line 2055 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + 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 3266 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3263 "dhcp6_parser.cc" // lalr1.cc:907 break; case 592: -#line 2059 "dhcp6_parser.yy" // lalr1.cc:919 +#line 2061 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 3274 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3271 "dhcp6_parser.cc" // lalr1.cc:907 break; case 593: -#line 2061 "dhcp6_parser.yy" // lalr1.cc:919 +#line 2063 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + 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 3284 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3281 "dhcp6_parser.cc" // lalr1.cc:907 break; case 594: -#line 2067 "dhcp6_parser.yy" // lalr1.cc:919 +#line 2069 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("server-port", i); } -#line 3293 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3290 "dhcp6_parser.cc" // lalr1.cc:907 break; case 595: -#line 2072 "dhcp6_parser.yy" // lalr1.cc:919 +#line 2074 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 3301 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3298 "dhcp6_parser.cc" // lalr1.cc:907 break; case 596: -#line 2074 "dhcp6_parser.yy" // lalr1.cc:919 +#line 2076 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + 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 3311 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3308 "dhcp6_parser.cc" // lalr1.cc:907 break; case 597: -#line 2080 "dhcp6_parser.yy" // lalr1.cc:919 +#line 2082 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr i(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("sender-port", i); } -#line 3320 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3317 "dhcp6_parser.cc" // lalr1.cc:907 break; case 598: -#line 2085 "dhcp6_parser.yy" // lalr1.cc:919 +#line 2087 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr i(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].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 3329 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3326 "dhcp6_parser.cc" // lalr1.cc:907 break; case 599: -#line 2090 "dhcp6_parser.yy" // lalr1.cc:919 +#line 2092 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NCR_PROTOCOL); } -#line 3337 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3334 "dhcp6_parser.cc" // lalr1.cc:907 break; case 600: -#line 2092 "dhcp6_parser.yy" // lalr1.cc:919 +#line 2094 "dhcp6_parser.yy" // lalr1.cc:907 { - ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as < ElementPtr > ()); + ctx.stack_.back()->set("ncr-protocol", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); } -#line 3346 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3343 "dhcp6_parser.cc" // lalr1.cc:907 break; case 601: -#line 2098 "dhcp6_parser.yy" // lalr1.cc:919 - { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); } -#line 3352 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2100 "dhcp6_parser.yy" // lalr1.cc:907 + { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("UDP", ctx.loc2pos(yystack_[0].location))); } +#line 3349 "dhcp6_parser.cc" // lalr1.cc:907 break; case 602: -#line 2099 "dhcp6_parser.yy" // lalr1.cc:919 - { yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); } -#line 3358 "dhcp6_parser.cc" // lalr1.cc:919 +#line 2101 "dhcp6_parser.yy" // lalr1.cc:907 + { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("TCP", ctx.loc2pos(yystack_[0].location))); } +#line 3355 "dhcp6_parser.cc" // lalr1.cc:907 break; case 603: -#line 2102 "dhcp6_parser.yy" // lalr1.cc:919 +#line 2104 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NCR_FORMAT); } -#line 3366 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3363 "dhcp6_parser.cc" // lalr1.cc:907 break; case 604: -#line 2104 "dhcp6_parser.yy" // lalr1.cc:919 +#line 2106 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr json(new StringElement("JSON", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ncr-format", json); ctx.leave(); } -#line 3376 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3373 "dhcp6_parser.cc" // lalr1.cc:907 break; case 605: -#line 2110 "dhcp6_parser.yy" // lalr1.cc:919 +#line 2112 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("override-no-update", b); } -#line 3385 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3382 "dhcp6_parser.cc" // lalr1.cc:907 break; case 606: -#line 2115 "dhcp6_parser.yy" // lalr1.cc:919 +#line 2117 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr b(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr b(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("override-client-update", b); } -#line 3394 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3391 "dhcp6_parser.cc" // lalr1.cc:907 break; case 607: -#line 2120 "dhcp6_parser.yy" // lalr1.cc:919 +#line 2122 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.REPLACE_CLIENT_NAME); } -#line 3402 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3399 "dhcp6_parser.cc" // lalr1.cc:907 break; case 608: -#line 2122 "dhcp6_parser.yy" // lalr1.cc:919 +#line 2124 "dhcp6_parser.yy" // lalr1.cc:907 { - ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as < ElementPtr > ()); + ctx.stack_.back()->set("replace-client-name", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); } -#line 3411 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3408 "dhcp6_parser.cc" // lalr1.cc:907 break; case 609: -#line 2128 "dhcp6_parser.yy" // lalr1.cc:919 +#line 2130 "dhcp6_parser.yy" // lalr1.cc:907 { - yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location))); + yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-present", ctx.loc2pos(yystack_[0].location))); } -#line 3419 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3416 "dhcp6_parser.cc" // lalr1.cc:907 break; case 610: -#line 2131 "dhcp6_parser.yy" // lalr1.cc:919 +#line 2133 "dhcp6_parser.yy" // lalr1.cc:907 { - yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location))); + yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("never", ctx.loc2pos(yystack_[0].location))); } -#line 3427 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3424 "dhcp6_parser.cc" // lalr1.cc:907 break; case 611: -#line 2134 "dhcp6_parser.yy" // lalr1.cc:919 +#line 2136 "dhcp6_parser.yy" // lalr1.cc:907 { - yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location))); + yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("always", ctx.loc2pos(yystack_[0].location))); } -#line 3435 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3432 "dhcp6_parser.cc" // lalr1.cc:907 break; case 612: -#line 2137 "dhcp6_parser.yy" // lalr1.cc:919 +#line 2139 "dhcp6_parser.yy" // lalr1.cc:907 { - yylhs.value.as < ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location))); + yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("when-not-present", ctx.loc2pos(yystack_[0].location))); } -#line 3443 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3440 "dhcp6_parser.cc" // lalr1.cc:907 break; case 613: -#line 2140 "dhcp6_parser.yy" // lalr1.cc:919 +#line 2142 "dhcp6_parser.yy" // lalr1.cc:907 { error(yystack_[0].location, "boolean values for the replace-client-name are " "no longer supported"); } -#line 3452 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3449 "dhcp6_parser.cc" // lalr1.cc:907 break; case 614: -#line 2146 "dhcp6_parser.yy" // lalr1.cc:919 +#line 2148 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 3460 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3457 "dhcp6_parser.cc" // lalr1.cc:907 break; case 615: -#line 2148 "dhcp6_parser.yy" // lalr1.cc:919 +#line 2150 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + 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 3470 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3467 "dhcp6_parser.cc" // lalr1.cc:907 break; case 616: -#line 2154 "dhcp6_parser.yy" // lalr1.cc:919 +#line 2156 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 3478 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3475 "dhcp6_parser.cc" // lalr1.cc:907 break; case 617: -#line 2156 "dhcp6_parser.yy" // lalr1.cc:919 +#line 2158 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + 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 3488 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3485 "dhcp6_parser.cc" // lalr1.cc:907 break; case 618: -#line 2162 "dhcp6_parser.yy" // lalr1.cc:919 +#line 2164 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 3496 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3493 "dhcp6_parser.cc" // lalr1.cc:907 break; case 619: -#line 2164 "dhcp6_parser.yy" // lalr1.cc:919 +#line 2166 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr s(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + 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 3506 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3503 "dhcp6_parser.cc" // lalr1.cc:907 break; case 620: -#line 2172 "dhcp6_parser.yy" // lalr1.cc:919 +#line 2174 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 3514 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3511 "dhcp6_parser.cc" // lalr1.cc:907 break; case 621: -#line 2174 "dhcp6_parser.yy" // lalr1.cc:919 +#line 2176 "dhcp6_parser.yy" // lalr1.cc:907 { - ctx.stack_.back()->set("Dhcp4", yystack_[0].value.as < ElementPtr > ()); + ctx.stack_.back()->set("Dhcp4", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); } -#line 3523 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3520 "dhcp6_parser.cc" // lalr1.cc:907 break; case 622: -#line 2179 "dhcp6_parser.yy" // lalr1.cc:919 +#line 2181 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 3531 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3528 "dhcp6_parser.cc" // lalr1.cc:907 break; case 623: -#line 2181 "dhcp6_parser.yy" // lalr1.cc:919 +#line 2183 "dhcp6_parser.yy" // lalr1.cc:907 { - ctx.stack_.back()->set("DhcpDdns", yystack_[0].value.as < ElementPtr > ()); + ctx.stack_.back()->set("DhcpDdns", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); } -#line 3540 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3537 "dhcp6_parser.cc" // lalr1.cc:907 break; case 624: -#line 2186 "dhcp6_parser.yy" // lalr1.cc:919 +#line 2188 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 3548 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3545 "dhcp6_parser.cc" // lalr1.cc:907 break; case 625: -#line 2188 "dhcp6_parser.yy" // lalr1.cc:919 +#line 2190 "dhcp6_parser.yy" // lalr1.cc:907 { - ctx.stack_.back()->set("Control-agent", yystack_[0].value.as < ElementPtr > ()); + ctx.stack_.back()->set("Control-agent", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); } -#line 3557 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3554 "dhcp6_parser.cc" // lalr1.cc:907 break; case 626: -#line 2195 "dhcp6_parser.yy" // lalr1.cc:919 +#line 2197 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("config-control", i); ctx.stack_.push_back(i); ctx.enter(ctx.CONFIG_CONTROL); } -#line 3568 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3565 "dhcp6_parser.cc" // lalr1.cc:907 break; case 627: -#line 2200 "dhcp6_parser.yy" // lalr1.cc:919 +#line 2202 "dhcp6_parser.yy" // lalr1.cc:907 { // No config control params are required ctx.stack_.pop_back(); ctx.leave(); } -#line 3578 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3575 "dhcp6_parser.cc" // lalr1.cc:907 break; case 628: -#line 2206 "dhcp6_parser.yy" // lalr1.cc:919 +#line 2208 "dhcp6_parser.yy" // lalr1.cc:907 { // Parse the config-control map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 3588 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3585 "dhcp6_parser.cc" // lalr1.cc:907 break; case 629: -#line 2210 "dhcp6_parser.yy" // lalr1.cc:919 +#line 2212 "dhcp6_parser.yy" // lalr1.cc:907 { // No config_control params are required // parsing completed } -#line 3597 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3594 "dhcp6_parser.cc" // lalr1.cc:907 break; - case 633: -#line 2224 "dhcp6_parser.yy" // lalr1.cc:919 + case 634: +#line 2227 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("config-databases", l); ctx.stack_.push_back(l); ctx.enter(ctx.CONFIG_DATABASE); } -#line 3608 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3605 "dhcp6_parser.cc" // lalr1.cc:907 break; - case 634: -#line 2229 "dhcp6_parser.yy" // lalr1.cc:919 + case 635: +#line 2232 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.stack_.pop_back(); ctx.leave(); } -#line 3617 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3614 "dhcp6_parser.cc" // lalr1.cc:907 break; - case 635: -#line 2239 "dhcp6_parser.yy" // lalr1.cc:919 + case 636: +#line 2237 "dhcp6_parser.yy" // lalr1.cc:907 + { + 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 3623 "dhcp6_parser.cc" // lalr1.cc:907 + break; + + case 637: +#line 2247 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("Logging", m); ctx.stack_.push_back(m); ctx.enter(ctx.LOGGING); } -#line 3628 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3634 "dhcp6_parser.cc" // lalr1.cc:907 break; - case 636: -#line 2244 "dhcp6_parser.yy" // lalr1.cc:919 + case 638: +#line 2252 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.stack_.pop_back(); ctx.leave(); } -#line 3637 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3643 "dhcp6_parser.cc" // lalr1.cc:907 break; - case 637: -#line 2249 "dhcp6_parser.yy" // lalr1.cc:919 + case 639: +#line 2257 "dhcp6_parser.yy" // lalr1.cc:907 { // Parse the Logging map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 3647 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3653 "dhcp6_parser.cc" // lalr1.cc:907 break; - case 638: -#line 2253 "dhcp6_parser.yy" // lalr1.cc:919 + case 640: +#line 2261 "dhcp6_parser.yy" // lalr1.cc:907 { // parsing completed } -#line 3655 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3661 "dhcp6_parser.cc" // lalr1.cc:907 break; - case 642: -#line 2269 "dhcp6_parser.yy" // lalr1.cc:919 + case 644: +#line 2277 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("loggers", l); ctx.stack_.push_back(l); ctx.enter(ctx.LOGGERS); } -#line 3666 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3672 "dhcp6_parser.cc" // lalr1.cc:907 break; - case 643: -#line 2274 "dhcp6_parser.yy" // lalr1.cc:919 + case 645: +#line 2282 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.stack_.pop_back(); ctx.leave(); } -#line 3675 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3681 "dhcp6_parser.cc" // lalr1.cc:907 break; - case 646: -#line 2286 "dhcp6_parser.yy" // lalr1.cc:919 + case 648: +#line 2294 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(l); ctx.stack_.push_back(l); } -#line 3685 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3691 "dhcp6_parser.cc" // lalr1.cc:907 break; - case 647: -#line 2290 "dhcp6_parser.yy" // lalr1.cc:919 + case 649: +#line 2298 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.stack_.pop_back(); } -#line 3693 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3699 "dhcp6_parser.cc" // lalr1.cc:907 break; - case 657: -#line 2307 "dhcp6_parser.yy" // lalr1.cc:919 + case 659: +#line 2315 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr dl(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr dl(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("debuglevel", dl); } -#line 3702 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3708 "dhcp6_parser.cc" // lalr1.cc:907 break; - case 658: -#line 2312 "dhcp6_parser.yy" // lalr1.cc:919 + case 660: +#line 2320 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 3710 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3716 "dhcp6_parser.cc" // lalr1.cc:907 break; - case 659: -#line 2314 "dhcp6_parser.yy" // lalr1.cc:919 + case 661: +#line 2322 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("severity", sev); ctx.leave(); } -#line 3720 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3726 "dhcp6_parser.cc" // lalr1.cc:907 break; - case 660: -#line 2320 "dhcp6_parser.yy" // lalr1.cc:919 + case 662: +#line 2328 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("output_options", l); ctx.stack_.push_back(l); ctx.enter(ctx.OUTPUT_OPTIONS); } -#line 3731 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3737 "dhcp6_parser.cc" // lalr1.cc:907 break; - case 661: -#line 2325 "dhcp6_parser.yy" // lalr1.cc:919 + case 663: +#line 2333 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.stack_.pop_back(); ctx.leave(); } -#line 3740 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3746 "dhcp6_parser.cc" // lalr1.cc:907 break; - case 664: -#line 2334 "dhcp6_parser.yy" // lalr1.cc:919 + case 666: +#line 2342 "dhcp6_parser.yy" // lalr1.cc:907 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 3750 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3756 "dhcp6_parser.cc" // lalr1.cc:907 break; - case 665: -#line 2338 "dhcp6_parser.yy" // lalr1.cc:919 + case 667: +#line 2346 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.stack_.pop_back(); } -#line 3758 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3764 "dhcp6_parser.cc" // lalr1.cc:907 break; - case 672: -#line 2352 "dhcp6_parser.yy" // lalr1.cc:919 + case 674: +#line 2360 "dhcp6_parser.yy" // lalr1.cc:907 { ctx.enter(ctx.NO_KEYWORD); } -#line 3766 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3772 "dhcp6_parser.cc" // lalr1.cc:907 break; - case 673: -#line 2354 "dhcp6_parser.yy" // lalr1.cc:919 + case 675: +#line 2362 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr sev(new StringElement(yystack_[0].value.as < std::string > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("output", sev); ctx.leave(); } -#line 3776 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3782 "dhcp6_parser.cc" // lalr1.cc:907 break; - case 674: -#line 2360 "dhcp6_parser.yy" // lalr1.cc:919 + case 676: +#line 2368 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr flush(new BoolElement(yystack_[0].value.as < bool > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr flush(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("flush", flush); } -#line 3785 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3791 "dhcp6_parser.cc" // lalr1.cc:907 break; - case 675: -#line 2365 "dhcp6_parser.yy" // lalr1.cc:919 + case 677: +#line 2373 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr maxsize(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr maxsize(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("maxsize", maxsize); } -#line 3794 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3800 "dhcp6_parser.cc" // lalr1.cc:907 break; - case 676: -#line 2370 "dhcp6_parser.yy" // lalr1.cc:919 + case 678: +#line 2378 "dhcp6_parser.yy" // lalr1.cc:907 { - ElementPtr maxver(new IntElement(yystack_[0].value.as < int64_t > (), ctx.loc2pos(yystack_[0].location))); + ElementPtr maxver(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("maxver", maxver); } -#line 3803 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3809 "dhcp6_parser.cc" // lalr1.cc:907 break; -#line 3807 "dhcp6_parser.cc" // lalr1.cc:919 +#line 3813 "dhcp6_parser.cc" // lalr1.cc:907 default: break; } @@ -3811,7 +3817,6 @@ namespace isc { namespace dhcp { #if YY_EXCEPTIONS catch (const syntax_error& yyexc) { - YYCDEBUG << "Caught exception: " << yyexc.what() << '\n'; error (yyexc); YYERROR; } @@ -3826,7 +3831,6 @@ namespace isc { namespace dhcp { } goto yynewstate; - /*--------------------------------------. | yyerrlab -- here on detecting error. | `--------------------------------------*/ @@ -3863,18 +3867,18 @@ namespace isc { namespace dhcp { | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: - /* Pacify compilers when the user code never invokes YYERROR and - the label yyerrorlab therefore never appears in user code. */ - if (false) - YYERROR; + /* Pacify compilers like GCC when the user code never invokes + YYERROR and the label yyerrorlab therefore never appears in user + code. */ + if (false) + goto yyerrorlab; /* Do not reclaim the symbols of the rule whose action triggered this YYERROR. */ yypop_ (yylen); yylen = 0; goto yyerrlab1; - /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ @@ -3915,26 +3919,16 @@ namespace isc { namespace dhcp { } goto yynewstate; - - /*-------------------------------------. - | yyacceptlab -- YYACCEPT comes here. | - `-------------------------------------*/ + // Accept. yyacceptlab: yyresult = 0; goto yyreturn; - - /*-----------------------------------. - | yyabortlab -- YYABORT comes here. | - `-----------------------------------*/ + // Abort. yyabortlab: yyresult = 1; goto yyreturn; - - /*-----------------------------------------------------. - | yyreturn -- parsing is finished, return the result. | - `-----------------------------------------------------*/ yyreturn: if (!yyla.empty ()) yy_destroy_ ("Cleanup: discarding lookahead", yyla); @@ -4073,124 +4067,124 @@ namespace isc { namespace dhcp { } - const short Dhcp6Parser::yypact_ninf_ = -833; + const short Dhcp6Parser::yypact_ninf_ = -837; const signed char Dhcp6Parser::yytable_ninf_ = -1; const short Dhcp6Parser::yypact_[] = { - 415, -833, -833, -833, -833, -833, -833, -833, -833, -833, - -833, -833, -833, -833, -833, -833, 71, 65, 68, 82, - 83, 90, 98, 99, 116, 151, 163, 200, 230, 236, - 238, 251, -833, -833, -833, -833, -833, -833, -833, -833, - -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, - -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, - -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, - -833, -833, 65, 94, 27, 69, 23, 227, 107, 35, - 167, 233, 73, 268, -52, 366, 138, 266, -833, 285, - 302, 312, 298, 324, -833, -833, -833, -833, -833, 335, - -833, 37, -833, -833, -833, -833, -833, -833, -833, -833, - -833, -833, -833, -833, 339, 345, 347, 351, 355, -833, - -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, - -833, -833, -833, -833, -833, -833, 357, -833, -833, -833, - -833, 54, -833, -833, -833, -833, -833, -833, -833, -833, - -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, - -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, - -833, -833, -833, -833, -833, -833, 361, -833, 70, -833, - -833, -833, -833, -833, -833, -833, -833, -833, -833, 364, - 365, -833, -833, -833, -833, -833, -833, -833, -833, 76, - -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, - -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, - -833, 131, -833, -833, -833, -833, -833, 367, -833, 383, - 387, -833, -833, -833, -833, -833, -833, 132, -833, -833, - -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, - -833, -833, -833, -833, -833, 334, 350, -833, -833, -833, - -833, -833, -833, -833, -833, 397, -833, -833, 405, -833, - -833, -833, 408, -833, -833, 411, 419, -833, -833, -833, - -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, - 422, 436, -833, -833, -833, -833, 435, 441, -833, -833, - -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, - 159, -833, -833, -833, 442, -833, -833, 443, -833, 444, - 446, -833, -833, 447, 448, -833, -833, -833, -833, -833, - -833, -833, 177, -833, -833, -833, -833, -833, -833, -833, - -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, - 187, -833, -833, -833, 244, -833, -833, -833, 65, 65, - -833, 280, 450, 451, 454, 457, 460, -833, 27, -833, - 461, 462, 463, 464, 465, 466, 271, 297, 299, 300, - 303, 468, 472, 475, 476, 477, 478, 479, 480, 481, - 483, 484, 485, 499, 500, 501, 502, 503, 340, 504, - 505, 508, 69, -833, 509, 341, 23, -833, 512, 514, - 515, 516, 517, 352, 348, 519, 521, 523, 227, -833, - 524, 107, -833, 528, 360, 529, 362, 363, 35, -833, - 531, 536, 537, 538, 539, 540, 541, -833, 167, -833, - 542, 545, 377, 548, 549, 550, 379, -833, 73, 552, - 381, 382, -833, 268, 555, 556, -37, -833, 386, 561, - 563, 394, 565, 396, 414, 567, 585, 416, 418, 586, - 587, 589, 591, 366, -833, 592, 138, -833, 595, 266, - -833, -833, -833, 597, 596, 598, 65, 65, 65, -833, - 429, 599, 600, 601, 603, 606, -833, -833, -833, -833, - -833, 431, 607, 608, 609, 610, 445, 178, 611, 614, - 615, 616, 617, 618, 620, 621, 622, 623, -833, 625, - 610, 626, -833, 629, -833, -833, 630, 631, 449, 455, - 467, -833, -833, 629, 469, 632, -833, 470, -833, 471, - -833, 473, -833, -833, -833, 629, 629, 629, 474, 482, - 486, 487, -833, 488, 489, -833, 490, 491, 492, -833, - -833, 493, -833, -833, -833, 494, 65, -833, -833, 495, - 496, -833, 497, -833, -833, 40, 498, -833, -833, -33, - 506, 507, 510, -833, 633, -833, 636, -833, 65, 69, - 138, -833, -833, -833, -833, 266, 23, 193, 193, 638, - -833, 641, 642, 643, -833, -833, -833, -833, -833, -833, - -833, -833, 644, -53, 65, 104, 530, 645, 646, 647, - 204, 134, 8, -833, 366, -833, -833, 649, 650, -833, - -833, -833, -833, -833, -48, -833, -833, -833, -833, -833, - -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, - -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, - -833, -833, -833, -833, -833, -833, -833, -833, -833, 651, - 638, -833, 265, 278, 323, 326, -833, -833, -833, -833, - 667, 668, 669, 670, 671, -833, 672, 673, -833, -833, - -833, 674, 677, 678, -833, 327, -833, -833, -833, -833, - -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, - -833, -833, -833, -833, -833, -833, 330, -833, 679, 624, - -833, -833, 680, 681, -833, -833, 682, 684, -833, -833, - 683, 687, -833, -833, 685, 689, -833, -833, -833, 130, - -833, -833, -833, 688, -833, -833, -833, 153, -833, -833, - -833, -833, 338, -833, -833, -833, 168, -833, -833, 690, - 692, -833, -833, 691, 695, -833, 696, 697, 698, 699, - 700, 701, 342, -833, -833, -833, -833, -833, -833, -833, - -833, -833, 702, 703, 704, -833, -833, -833, -833, 349, - -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, - -833, 359, -833, -833, -833, 378, 520, -833, 693, 706, - -833, -833, 705, 707, -833, -833, -833, 708, -833, -833, - 183, -833, 709, -833, -833, -833, -833, 710, 713, 714, - 715, 546, 547, 551, 553, 554, 717, 557, 558, 718, - 720, 722, 559, 560, 562, 193, -833, -833, 193, -833, - 638, 227, -833, 641, 73, -833, 642, 268, -833, 643, - 388, -833, 644, -53, -833, -833, 104, -833, 723, 530, - -833, 215, 645, -833, 167, -833, 646, -52, -833, 647, - 566, 568, 569, 570, 571, 572, 204, -833, 726, 731, - 573, 574, 575, 134, -833, 732, 733, 8, -833, -833, - -833, 735, 736, 107, -833, 649, 35, -833, 650, 746, - -833, 142, 651, -833, -833, 124, 578, 579, 580, -833, - -833, -833, -833, -833, 581, -833, -833, 582, 583, 584, - -833, -833, -833, -833, 390, -833, 400, -833, 750, -833, - 751, -833, -833, -833, -833, -833, -833, -833, -833, -833, - -833, -833, -833, -833, -833, 403, -833, -833, -833, -833, - -833, -833, -833, -833, 588, -833, -833, 756, -833, -833, - -833, -833, -833, 754, 760, -833, -833, -833, -833, -833, - 757, -833, 410, -833, -833, -833, -833, -833, -833, -833, - -833, 103, 593, -833, -833, -833, -833, 594, 602, -833, - -833, 605, 413, -833, 417, -833, 612, -833, 764, -833, - -833, -833, -833, -833, 420, -833, -833, -833, -833, -833, - -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, - -833, -833, -833, -833, -833, -833, 388, -833, -833, 765, - 619, -833, 215, -833, -833, -833, -833, -833, -833, -833, - -833, -833, -833, -833, -833, -833, 766, 590, 767, 142, - -833, -833, 634, -833, -833, 768, -833, 637, -833, -833, - 769, -833, -833, 272, -833, 12, 769, -833, -833, 770, - 775, 778, 434, -833, -833, -833, -833, -833, -833, 788, - 628, 648, 652, 12, -833, 639, -833, -833, -833, -833, - -833 + 418, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, 57, 65, 64, 66, + 68, 87, 91, 126, 133, 148, 164, 184, 195, 203, + 229, 230, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, 65, -95, 27, 69, 22, 234, 72, 39, + 196, 188, 41, 262, -53, 375, 96, 144, -837, 242, + 249, 269, 263, 281, -837, -837, -837, -837, -837, 307, + -837, 94, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, 309, 316, 317, 323, 341, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, 347, -837, -837, -837, + -837, 123, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, 353, -837, 140, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, 357, + 367, -837, -837, -837, -837, -837, -837, -837, -837, 141, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, 178, -837, -837, -837, -837, -837, 369, -837, 385, + 410, -837, -837, -837, -837, -837, -837, 187, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, 416, 352, -837, -837, -837, + -837, -837, -837, -837, -837, 417, -837, -837, 423, -837, + -837, -837, 424, -837, -837, 422, 390, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + 433, 435, -837, -837, -837, -837, 434, 440, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + 191, -837, -837, -837, 442, -837, -837, 443, -837, 444, + 445, -837, -837, 446, 448, -837, -837, -837, -837, -837, + -837, -837, 260, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + 261, -837, -837, -837, 449, 264, -837, -837, -837, -837, + 65, 65, -837, 280, 451, 452, 453, 456, 459, -837, + 27, -837, 462, 463, 464, 465, 466, 467, 297, 298, + 299, 300, 301, 474, 475, 477, 478, 479, 480, 481, + 482, 483, 485, 486, 487, 488, 489, 490, 491, 492, + 322, 494, 495, 509, 69, -837, 510, 338, 22, -837, + 512, 513, 514, 518, 519, 349, 348, 523, 524, 525, + 234, -837, 526, 72, -837, 527, 362, 531, 363, 364, + 39, -837, 532, 536, 537, 539, 540, 541, 542, -837, + 196, -837, 543, 544, 378, 546, 551, 552, 381, -837, + 41, 553, 382, 383, -837, 262, 557, 558, -17, -837, + 388, 560, 562, 394, 567, 400, 419, 568, 569, 415, + 420, 570, 589, 591, 592, 375, -837, 594, 96, -837, + 595, 425, 144, -837, -837, -837, 599, 598, 600, 65, + 65, 65, -837, 432, 601, 602, 603, 604, 608, -837, + -837, -837, -837, -837, 441, 609, 611, 612, 613, 447, + 221, 614, 617, 618, 619, 620, 621, 623, 624, 625, + 626, -837, 627, 613, 629, -837, 632, -837, -837, 633, + 634, 457, 468, 469, -837, -837, 632, 470, 638, -837, + 472, -837, 473, -837, 476, -837, -837, -837, 632, 632, + 632, 484, 493, 496, 497, -837, 498, 499, -837, 500, + 501, 502, -837, -837, 503, -837, -837, -837, 504, 65, + -837, -837, 505, 506, -837, 507, -837, -837, -98, 508, + -837, -837, 34, 511, 515, 516, -837, 635, -837, 636, + -837, -837, 65, 69, 96, -837, -837, -837, -837, 144, + 22, 193, 193, 642, -837, 644, 645, 646, -837, -837, + -837, -837, -837, -837, -837, -837, 647, -50, 65, 315, + 571, 648, 649, 652, 152, 138, 128, -837, 375, -837, + -837, 653, 654, -837, -837, -837, -837, -837, -49, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, 655, 642, -837, 267, 278, 279, 320, + -837, -837, -837, -837, 659, 660, 661, 662, 664, -837, + 665, 678, -837, -837, -837, 679, 680, 682, -837, 321, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + 332, -837, 681, 615, -837, -837, 685, 622, -837, -837, + 686, 690, -837, -837, 688, 692, -837, -837, 691, 693, + -837, -837, -837, 119, -837, -837, -837, 694, -837, -837, + -837, 166, -837, -837, -837, -837, 333, -837, -837, -837, + 176, -837, -837, 695, 696, -837, -837, 697, 699, -837, + 684, 700, 701, 702, 703, 704, 334, -837, -837, -837, + -837, -837, -837, -837, -837, -837, 705, 706, 707, -837, + -837, -837, -837, 335, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, 336, -837, -837, -837, 344, + 538, -837, 708, 710, -837, -837, 709, 713, -837, -837, + -837, 711, -837, -837, 197, -837, 712, -837, -837, -837, + -837, 716, 717, 718, 719, 455, 521, 549, 548, 554, + 722, 555, 556, 723, 724, 728, 559, 561, 563, 193, + -837, -837, 193, -837, 642, 234, -837, 644, 41, -837, + 645, 262, -837, 646, 389, -837, 647, -50, -837, -837, + 315, -837, 729, 571, -837, 77, 648, -837, 196, -837, + 649, -53, -837, 652, 564, 566, 572, 573, 574, 575, + 152, -837, 731, 733, 576, 577, 578, 138, -837, 734, + 738, 128, -837, -837, -837, 737, 714, 72, -837, 653, + 39, -837, 654, 740, -837, 13, 655, -837, -837, 398, + 580, 581, 582, -837, -837, -837, -837, -837, 583, -837, + -837, 584, 585, 586, -837, -837, -837, -837, 345, -837, + 351, -837, 753, -837, 754, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, 360, + -837, -837, -837, -837, -837, -837, -837, -837, 590, -837, + -837, 741, -837, -837, -837, -837, -837, 755, 743, -837, + -837, -837, -837, -837, 757, -837, 361, -837, -837, -837, + -837, -837, -837, -837, -837, 104, 593, -837, -837, -837, + -837, 596, 597, -837, -837, 605, 380, -837, 387, -837, + 606, -837, 762, -837, -837, -837, -837, -837, 397, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + 389, -837, -837, 764, 631, -837, 77, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + 765, 607, 768, 13, -837, -837, 637, -837, -837, 769, + -837, 640, -837, -837, 766, -837, -837, 412, -837, -18, + 766, -837, -837, 771, 772, 773, 399, -837, -837, -837, + -837, -837, -837, 774, 639, 650, 651, -18, -837, 641, + -837, -837, -837, -837, -837 }; const unsigned short @@ -4202,10 +4196,10 @@ namespace isc { namespace dhcp { 0, 0, 1, 47, 40, 36, 35, 32, 33, 34, 39, 3, 37, 38, 60, 5, 72, 7, 120, 9, 267, 11, 413, 13, 438, 15, 468, 17, 338, 19, - 346, 21, 383, 23, 232, 25, 567, 27, 637, 29, + 346, 21, 383, 23, 232, 25, 567, 27, 639, 29, 628, 31, 49, 43, 0, 0, 0, 0, 0, 0, 470, 0, 348, 385, 0, 0, 0, 0, 51, 0, - 50, 0, 0, 44, 70, 635, 620, 622, 624, 0, + 50, 0, 0, 44, 70, 637, 620, 622, 624, 0, 69, 0, 62, 64, 66, 67, 68, 65, 109, 626, 118, 132, 134, 136, 0, 0, 0, 0, 0, 116, 259, 336, 375, 426, 428, 301, 309, 205, 222, 213, @@ -4230,128 +4224,128 @@ namespace isc { namespace dhcp { 0, 234, 237, 238, 0, 590, 592, 0, 595, 0, 0, 599, 603, 0, 0, 607, 614, 616, 618, 588, 586, 587, 0, 569, 571, 572, 573, 574, 575, 576, - 577, 578, 579, 580, 581, 582, 583, 584, 585, 642, - 0, 639, 641, 633, 0, 630, 632, 48, 0, 0, - 41, 0, 0, 0, 0, 0, 0, 59, 0, 61, + 577, 578, 579, 580, 581, 582, 583, 584, 585, 644, + 0, 641, 643, 634, 0, 0, 630, 632, 633, 48, + 0, 0, 41, 0, 0, 0, 0, 0, 0, 59, + 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, 0, 0, 0, + 0, 0, 0, 0, 0, 73, 0, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 268, 0, 0, 414, 0, 0, 0, 0, 0, + 0, 439, 0, 0, 0, 0, 0, 0, 0, 469, + 0, 339, 0, 0, 0, 0, 0, 0, 0, 347, + 0, 0, 0, 0, 384, 0, 0, 0, 0, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 73, 0, 0, 0, 121, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 268, - 0, 0, 414, 0, 0, 0, 0, 0, 0, 439, - 0, 0, 0, 0, 0, 0, 0, 469, 0, 339, - 0, 0, 0, 0, 0, 0, 0, 347, 0, 0, - 0, 0, 384, 0, 0, 0, 0, 233, 0, 0, + 0, 0, 0, 0, 0, 0, 568, 0, 0, 640, + 0, 0, 0, 629, 52, 45, 0, 0, 0, 0, + 0, 0, 63, 0, 0, 0, 0, 0, 0, 111, + 112, 113, 114, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 568, 0, 0, 638, 0, 0, - 629, 52, 45, 0, 0, 0, 0, 0, 0, 63, - 0, 0, 0, 0, 0, 0, 111, 112, 113, 114, - 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 549, 0, - 0, 0, 75, 0, 131, 123, 0, 0, 0, 0, - 0, 307, 308, 0, 0, 0, 270, 0, 416, 0, - 455, 0, 458, 459, 441, 0, 0, 0, 0, 0, - 0, 0, 473, 0, 0, 363, 0, 0, 0, 374, - 351, 0, 403, 404, 388, 0, 0, 235, 589, 0, - 0, 594, 0, 597, 598, 0, 0, 605, 606, 0, - 0, 0, 0, 570, 0, 640, 0, 631, 0, 0, - 0, 621, 623, 625, 110, 0, 0, 0, 0, 138, - 117, 261, 340, 377, 42, 427, 429, 303, 304, 305, - 306, 302, 311, 0, 49, 0, 0, 0, 462, 226, - 0, 0, 0, 564, 0, 53, 130, 407, 432, 292, - 294, 296, 300, 298, 0, 425, 454, 457, 498, 486, - 488, 490, 492, 494, 496, 366, 180, 370, 368, 373, - 400, 240, 242, 591, 593, 596, 601, 602, 600, 604, - 609, 610, 611, 612, 613, 608, 615, 617, 619, 0, - 138, 46, 0, 0, 0, 0, 166, 172, 174, 176, - 0, 0, 0, 0, 0, 189, 0, 0, 192, 194, - 196, 0, 0, 0, 165, 0, 144, 146, 147, 148, - 149, 150, 151, 152, 153, 154, 155, 158, 159, 160, - 161, 156, 157, 162, 163, 164, 0, 142, 0, 139, - 140, 265, 0, 262, 263, 344, 0, 341, 342, 381, - 0, 378, 379, 315, 0, 312, 313, 211, 212, 0, - 207, 209, 210, 0, 220, 221, 217, 0, 215, 218, - 219, 203, 0, 200, 202, 509, 0, 507, 466, 0, - 463, 464, 230, 0, 227, 228, 0, 0, 0, 0, - 0, 0, 0, 245, 247, 248, 249, 250, 251, 252, - 539, 545, 0, 0, 0, 538, 535, 536, 537, 0, - 528, 530, 533, 531, 532, 534, 559, 561, 558, 556, - 557, 0, 552, 554, 555, 0, 55, 411, 0, 408, - 409, 436, 0, 433, 434, 503, 502, 0, 501, 646, - 0, 644, 0, 71, 636, 627, 119, 0, 0, 0, + 0, 549, 0, 0, 0, 75, 0, 131, 123, 0, + 0, 0, 0, 0, 307, 308, 0, 0, 0, 270, + 0, 416, 0, 455, 0, 458, 459, 441, 0, 0, + 0, 0, 0, 0, 0, 473, 0, 0, 363, 0, + 0, 0, 374, 351, 0, 403, 404, 388, 0, 0, + 235, 589, 0, 0, 594, 0, 597, 598, 0, 0, + 605, 606, 0, 0, 0, 0, 570, 0, 642, 0, + 636, 631, 0, 0, 0, 621, 623, 625, 110, 0, + 0, 0, 0, 138, 117, 261, 340, 377, 42, 427, + 429, 303, 304, 305, 306, 302, 311, 0, 49, 0, + 0, 0, 462, 226, 0, 0, 0, 564, 0, 53, + 130, 407, 432, 292, 294, 296, 300, 298, 0, 425, + 454, 457, 498, 486, 488, 490, 492, 494, 496, 366, + 180, 370, 368, 373, 400, 240, 242, 591, 593, 596, + 601, 602, 600, 604, 609, 610, 611, 612, 613, 608, + 615, 617, 619, 0, 138, 46, 0, 0, 0, 0, + 166, 172, 174, 176, 0, 0, 0, 0, 0, 189, + 0, 0, 192, 194, 196, 0, 0, 0, 165, 0, + 144, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 158, 159, 160, 161, 156, 157, 162, 163, 164, + 0, 142, 0, 139, 140, 265, 0, 262, 263, 344, + 0, 341, 342, 381, 0, 378, 379, 315, 0, 312, + 313, 211, 212, 0, 207, 209, 210, 0, 220, 221, + 217, 0, 215, 218, 219, 203, 0, 200, 202, 509, + 0, 507, 466, 0, 463, 464, 230, 0, 227, 228, + 0, 0, 0, 0, 0, 0, 0, 245, 247, 248, + 249, 250, 251, 252, 539, 545, 0, 0, 0, 538, + 535, 536, 537, 0, 528, 530, 533, 531, 532, 534, + 559, 561, 558, 556, 557, 0, 552, 554, 555, 0, + 55, 411, 0, 408, 409, 436, 0, 433, 434, 503, + 502, 0, 501, 648, 0, 646, 0, 71, 638, 627, + 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 133, 135, 0, 137, - 0, 0, 260, 0, 348, 337, 0, 385, 376, 0, - 0, 310, 0, 0, 206, 223, 0, 214, 0, 0, - 199, 511, 0, 506, 470, 461, 0, 0, 225, 0, - 0, 0, 0, 0, 0, 0, 0, 244, 0, 0, - 0, 0, 0, 0, 527, 0, 0, 0, 551, 566, - 57, 0, 56, 0, 406, 0, 0, 431, 0, 0, - 500, 0, 0, 643, 634, 0, 0, 0, 0, 178, - 181, 182, 183, 184, 0, 191, 185, 0, 0, 0, - 186, 187, 188, 145, 0, 141, 0, 264, 0, 343, - 0, 380, 335, 330, 332, 323, 324, 319, 320, 321, - 322, 328, 329, 327, 331, 0, 317, 325, 333, 334, - 326, 314, 208, 216, 0, 201, 523, 0, 521, 522, - 518, 519, 520, 0, 512, 513, 515, 516, 517, 508, - 0, 465, 0, 229, 253, 254, 255, 256, 257, 258, - 246, 0, 0, 544, 547, 548, 529, 0, 0, 553, - 54, 0, 0, 410, 0, 435, 0, 660, 0, 658, - 656, 650, 654, 655, 0, 648, 652, 653, 651, 645, - 168, 169, 170, 171, 167, 173, 175, 177, 190, 193, - 195, 197, 143, 266, 345, 382, 0, 316, 204, 0, - 0, 510, 0, 467, 231, 541, 542, 543, 540, 546, - 560, 562, 58, 412, 437, 504, 0, 0, 0, 0, - 647, 318, 0, 525, 514, 0, 657, 0, 649, 524, - 0, 659, 664, 0, 662, 0, 0, 661, 672, 0, - 0, 0, 0, 666, 668, 669, 670, 671, 663, 0, - 0, 0, 0, 0, 665, 0, 674, 675, 676, 667, - 673 + 133, 135, 0, 137, 0, 0, 260, 0, 348, 337, + 0, 385, 376, 0, 0, 310, 0, 0, 206, 223, + 0, 214, 0, 0, 199, 511, 0, 506, 470, 461, + 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, + 0, 244, 0, 0, 0, 0, 0, 0, 527, 0, + 0, 0, 551, 566, 57, 0, 56, 0, 406, 0, + 0, 431, 0, 0, 500, 0, 0, 645, 635, 0, + 0, 0, 0, 178, 181, 182, 183, 184, 0, 191, + 185, 0, 0, 0, 186, 187, 188, 145, 0, 141, + 0, 264, 0, 343, 0, 380, 335, 330, 332, 323, + 324, 319, 320, 321, 322, 328, 329, 327, 331, 0, + 317, 325, 333, 334, 326, 314, 208, 216, 0, 201, + 523, 0, 521, 522, 518, 519, 520, 0, 512, 513, + 515, 516, 517, 508, 0, 465, 0, 229, 253, 254, + 255, 256, 257, 258, 246, 0, 0, 544, 547, 548, + 529, 0, 0, 553, 54, 0, 0, 410, 0, 435, + 0, 662, 0, 660, 658, 652, 656, 657, 0, 650, + 654, 655, 653, 647, 168, 169, 170, 171, 167, 173, + 175, 177, 190, 193, 195, 197, 143, 266, 345, 382, + 0, 316, 204, 0, 0, 510, 0, 467, 231, 541, + 542, 543, 540, 546, 560, 562, 58, 412, 437, 504, + 0, 0, 0, 0, 649, 318, 0, 525, 514, 0, + 659, 0, 651, 524, 0, 661, 666, 0, 664, 0, + 0, 663, 674, 0, 0, 0, 0, 668, 670, 671, + 672, 673, 665, 0, 0, 0, 0, 0, 667, 0, + 676, 677, 678, 669, 675 }; const short Dhcp6Parser::yypgoto_[] = { - -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, - -833, -833, -833, -833, -833, -833, -833, 43, -833, -457, - -833, 192, -833, -833, -833, -833, 158, -833, -451, -833, - -833, -833, -74, -833, -833, -833, 426, -833, -833, -833, - -833, 222, 311, -833, -833, -62, -46, -45, -43, -833, - -833, -833, -833, -833, -833, -833, 224, 425, -833, -833, - -833, -833, -833, -833, -833, -833, -833, 155, -833, -29, - -833, -572, -7, -833, -833, -833, -833, -833, -833, -833, - -833, -833, -833, -70, -833, -605, -833, -833, -833, -833, - -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, - -833, -833, -833, -833, -833, -35, -833, -833, -833, -833, - -833, -21, -592, -833, -833, -833, -833, -23, -833, -833, - -833, -833, -833, -833, -833, -833, -28, -833, -833, -833, - -31, 398, -833, -833, -833, -833, -833, -833, -833, -34, - -833, -833, -833, -833, -833, -833, -832, -833, -833, -833, - -9, -833, -833, -833, 4, 438, -833, -833, -831, -833, - -830, -833, -36, -833, -32, -833, -42, -833, -833, -833, - -827, -833, -833, -833, -833, -5, -833, -833, -178, 780, - -833, -833, -833, -833, -833, 3, -833, -833, -833, 10, - -833, 424, -833, -76, -833, -833, -833, -833, -833, -69, - -833, -833, -833, -833, -833, -11, -833, -833, -833, 6, - -833, -833, -833, 5, -833, 423, -833, -833, -833, -833, - -833, -833, -833, -833, -833, -833, -833, -39, -833, -833, - -833, -26, 459, -833, -833, -58, -833, -24, -833, -833, - -833, -833, -833, -40, -833, -833, -833, -25, 456, -833, - -833, -833, -833, -833, -833, -833, -60, -833, -833, -833, - -1, -833, -833, -833, 9, -833, 440, 252, -833, -833, - -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, - -833, -824, -833, -833, -833, -833, -833, -833, -833, 13, - -833, -833, -833, -154, -833, -833, -833, -833, -833, -833, - -833, -4, -833, -833, -833, -833, -833, -833, -833, -833, - -833, -833, -833, -833, -6, -833, -833, -833, -833, -833, - -833, -833, -833, -833, -833, 269, 421, -833, -833, -833, - -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, - -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, - -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, - -833, -833, -833, 295, 427, -833, -833, -833, -833, -833, - -833, 306, 428, -833, -833, -833, -15, -833, -833, -161, - -833, -833, -833, -833, -833, -833, -177, -833, -833, -193, - -833, -833, -833, -833, -833 + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, 43, -837, -460, + -837, 266, -837, -837, -837, -837, 165, -837, -472, -837, + -837, -837, -74, -837, -837, -837, 426, -837, -837, -837, + -837, 205, 395, -837, -837, -62, -46, -45, -43, -837, + -837, -837, -837, -837, -837, -837, 186, 421, -837, -837, + -837, -837, -837, -837, -837, -837, -837, 150, -837, -19, + -837, -576, -7, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -70, -837, -609, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -35, -837, -837, -837, -837, + -837, -37, -596, -837, -837, -837, -837, -23, -837, -837, + -837, -837, -837, -837, -837, -837, -33, -837, -837, -837, + -26, 401, -837, -837, -837, -837, -837, -837, -837, -44, + -837, -837, -837, -837, -837, -837, -836, -837, -837, -837, + -9, -837, -837, -837, 1, 438, -837, -837, -835, -837, + -834, -837, -36, -837, -32, -837, -42, -837, -837, -837, + -831, -837, -837, -837, -837, -6, -837, -837, -179, 781, + -837, -837, -837, -837, -837, 3, -837, -837, -837, 7, + -837, 429, -837, -76, -837, -837, -837, -837, -837, -69, + -837, -837, -837, -837, -837, -11, -837, -837, -837, 5, + -837, -837, -837, 8, -837, 411, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -39, -837, -837, + -837, -31, 458, -837, -837, -58, -837, -24, -837, -837, + -837, -837, -837, -40, -837, -837, -837, -30, 454, -837, + -837, -837, -837, -837, -837, -837, -60, -837, -837, -837, + 2, -837, -837, -837, 9, -837, 450, 247, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -828, -837, -837, -837, -837, -837, -837, -837, 12, + -837, -837, -837, -157, -837, -837, -837, -837, -837, -837, + -837, -5, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -8, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, 270, 427, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, 295, 413, -837, -837, -837, -837, -837, + -837, -837, 303, 428, -837, -837, -837, -16, -837, -837, + -162, -837, -837, -837, -837, -837, -837, -177, -837, -837, + -193, -837, -837, -837, -837, -837 }; const short @@ -4359,451 +4353,451 @@ namespace isc { namespace dhcp { { -1, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 88, 41, 42, - 73, 605, 92, 93, 43, 72, 89, 90, 626, 806, - 901, 902, 694, 45, 74, 101, 102, 103, 362, 47, - 75, 141, 142, 143, 370, 144, 145, 146, 147, 148, - 149, 381, 150, 372, 49, 76, 178, 179, 180, 404, - 181, 151, 373, 152, 374, 153, 375, 718, 719, 720, - 848, 695, 696, 697, 827, 1024, 698, 828, 699, 829, - 700, 830, 701, 702, 441, 703, 704, 705, 706, 707, - 708, 709, 710, 711, 836, 712, 713, 839, 714, 840, - 715, 841, 154, 392, 752, 753, 754, 868, 155, 389, - 739, 740, 741, 742, 156, 391, 747, 748, 749, 750, - 157, 390, 158, 395, 763, 764, 765, 877, 65, 84, - 310, 311, 312, 454, 313, 455, 159, 396, 772, 773, - 774, 775, 776, 777, 778, 779, 160, 382, 722, 723, - 724, 851, 51, 77, 199, 200, 201, 410, 202, 411, - 203, 412, 204, 416, 205, 415, 161, 387, 611, 207, - 208, 162, 388, 734, 735, 736, 860, 955, 956, 163, - 383, 59, 81, 726, 727, 728, 854, 61, 82, 275, - 276, 277, 278, 279, 280, 281, 440, 282, 444, 283, - 443, 284, 285, 445, 286, 164, 384, 730, 731, 732, - 857, 63, 83, 296, 297, 298, 299, 300, 449, 301, - 302, 303, 304, 210, 408, 808, 809, 810, 903, 53, - 78, 221, 222, 223, 420, 165, 385, 166, 386, 213, - 409, 812, 813, 814, 906, 55, 79, 237, 238, 239, - 423, 240, 241, 425, 242, 243, 167, 394, 759, 760, - 761, 874, 57, 80, 255, 256, 257, 258, 431, 259, - 432, 260, 433, 261, 434, 262, 435, 263, 436, 264, - 430, 215, 417, 817, 818, 909, 168, 393, 756, 757, - 871, 973, 974, 975, 976, 977, 1039, 978, 169, 397, - 789, 790, 791, 888, 1048, 792, 793, 889, 794, 795, - 170, 171, 399, 801, 802, 803, 895, 804, 896, 172, - 400, 173, 401, 67, 85, 332, 333, 334, 335, 459, - 336, 460, 337, 338, 462, 339, 340, 341, 465, 658, - 342, 466, 343, 344, 345, 469, 665, 346, 470, 347, - 471, 348, 472, 104, 364, 105, 365, 106, 366, 174, - 371, 71, 87, 354, 355, 356, 478, 107, 363, 69, - 86, 350, 351, 352, 475, 820, 821, 911, 1014, 1015, - 1016, 1017, 1058, 1018, 1056, 1073, 1074, 1075, 1082, 1083, - 1084, 1089, 1085, 1086, 1087 + 73, 609, 92, 93, 43, 72, 89, 90, 630, 810, + 905, 906, 698, 45, 74, 101, 102, 103, 364, 47, + 75, 141, 142, 143, 372, 144, 145, 146, 147, 148, + 149, 383, 150, 374, 49, 76, 178, 179, 180, 406, + 181, 151, 375, 152, 376, 153, 377, 722, 723, 724, + 852, 699, 700, 701, 831, 1028, 702, 832, 703, 833, + 704, 834, 705, 706, 443, 707, 708, 709, 710, 711, + 712, 713, 714, 715, 840, 716, 717, 843, 718, 844, + 719, 845, 154, 394, 756, 757, 758, 872, 155, 391, + 743, 744, 745, 746, 156, 393, 751, 752, 753, 754, + 157, 392, 158, 397, 767, 768, 769, 881, 65, 84, + 310, 311, 312, 456, 313, 457, 159, 398, 776, 777, + 778, 779, 780, 781, 782, 783, 160, 384, 726, 727, + 728, 855, 51, 77, 199, 200, 201, 412, 202, 413, + 203, 414, 204, 418, 205, 417, 161, 389, 615, 207, + 208, 162, 390, 738, 739, 740, 864, 959, 960, 163, + 385, 59, 81, 730, 731, 732, 858, 61, 82, 275, + 276, 277, 278, 279, 280, 281, 442, 282, 446, 283, + 445, 284, 285, 447, 286, 164, 386, 734, 735, 736, + 861, 63, 83, 296, 297, 298, 299, 300, 451, 301, + 302, 303, 304, 210, 410, 812, 813, 814, 907, 53, + 78, 221, 222, 223, 422, 165, 387, 166, 388, 213, + 411, 816, 817, 818, 910, 55, 79, 237, 238, 239, + 425, 240, 241, 427, 242, 243, 167, 396, 763, 764, + 765, 878, 57, 80, 255, 256, 257, 258, 433, 259, + 434, 260, 435, 261, 436, 262, 437, 263, 438, 264, + 432, 215, 419, 821, 822, 913, 168, 395, 760, 761, + 875, 977, 978, 979, 980, 981, 1043, 982, 169, 399, + 793, 794, 795, 892, 1052, 796, 797, 893, 798, 799, + 170, 171, 401, 805, 806, 807, 899, 808, 900, 172, + 402, 173, 403, 67, 85, 332, 333, 334, 335, 461, + 336, 462, 337, 338, 464, 339, 340, 341, 467, 662, + 342, 468, 343, 344, 345, 471, 669, 346, 472, 347, + 473, 348, 474, 104, 366, 105, 367, 106, 368, 174, + 373, 71, 87, 355, 356, 357, 480, 358, 107, 365, + 69, 86, 350, 351, 352, 477, 824, 825, 915, 1018, + 1019, 1020, 1021, 1062, 1022, 1060, 1077, 1078, 1079, 1086, + 1087, 1088, 1093, 1089, 1090, 1091 }; const unsigned short Dhcp6Parser::yytable_[] = { 100, 140, 177, 194, 217, 231, 251, 294, 273, 292, - 309, 329, 274, 293, 295, 195, 786, 214, 182, 211, - 224, 235, 253, 746, 287, 305, 716, 330, 948, 949, - 950, 196, 197, 954, 198, 206, 960, 94, 175, 176, - 368, 737, 218, 232, 245, 369, 219, 233, 604, 307, - 308, 815, 183, 212, 225, 236, 254, 402, 288, 306, - 40, 331, 403, 604, 307, 308, 209, 220, 234, 252, - 33, 32, 34, 406, 35, 44, 123, 124, 407, 418, - 108, 109, 632, 110, 419, 122, 111, 112, 113, 46, - 48, 123, 124, 266, 638, 639, 640, 50, 226, 227, - 228, 229, 230, 123, 124, 52, 54, 660, 661, 662, - 663, 114, 115, 116, 117, 118, 119, 120, 121, 122, - 738, 99, 191, 56, 267, 192, 268, 269, 796, 797, - 270, 271, 272, 863, 421, 428, 864, 123, 124, 422, - 429, 123, 124, 664, 125, 1020, 1021, 1022, 1023, 126, - 127, 128, 129, 130, 780, 131, 866, 122, 58, 867, - 132, 1078, 456, 681, 1079, 1080, 1081, 457, 216, 133, - 60, 872, 134, 95, 873, 123, 124, 656, 657, 135, - 473, 99, 96, 97, 98, 474, 912, 136, 137, 913, - 476, 138, 139, 267, 191, 477, 99, 192, 737, 744, - 99, 745, 123, 124, 948, 949, 950, 62, 99, 954, - 123, 124, 960, 676, 1045, 1046, 1047, 122, 677, 678, - 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, - 689, 690, 691, 692, 693, 123, 124, 64, 36, 37, - 38, 39, 99, 66, 267, 68, 99, 479, 781, 782, - 783, 784, 480, 244, 607, 608, 609, 610, 70, 245, - 246, 247, 248, 249, 250, 122, 267, 91, 402, 114, - 115, 116, 117, 823, 746, 1076, 934, 122, 1077, 353, - 99, 476, 121, 123, 124, 349, 824, 184, 786, 185, - 1007, 357, 1008, 1009, 100, 123, 124, 186, 187, 188, - 189, 190, 125, 966, 967, 358, 360, 99, 766, 767, - 768, 769, 770, 771, 191, 99, 359, 192, 132, 267, - 289, 268, 269, 290, 291, 193, 479, 361, 140, 406, - 845, 825, 177, 845, 826, 846, 123, 124, 847, 367, - 99, 869, 437, 376, 194, 886, 870, 217, 182, 377, - 887, 378, 893, 438, 231, 379, 195, 894, 214, 380, - 211, 398, 897, 224, 251, 405, 99, 898, 413, 414, - 235, 424, 196, 197, 273, 198, 206, 294, 274, 292, - 253, 473, 183, 293, 295, 218, 899, 426, 99, 219, - 287, 427, 232, 845, 212, 305, 233, 225, 1032, 329, - 99, 481, 482, 418, 236, 439, 1036, 209, 1033, 442, - 220, 1037, 446, 456, 254, 330, 421, 234, 1044, 447, - 428, 1053, 448, 1059, 288, 1054, 450, 252, 1060, 306, - 114, 115, 116, 117, 123, 124, 120, 1093, 122, 267, - 451, 99, 1094, 452, 453, 496, 458, 461, 463, 331, - 464, 467, 468, 483, 484, 485, 123, 124, 486, 187, - 188, 487, 190, 125, 488, 490, 491, 492, 493, 494, - 495, 497, 501, 498, 499, 191, 502, 500, 192, 503, - 504, 505, 506, 507, 508, 509, 193, 510, 511, 512, + 309, 329, 274, 293, 295, 195, 790, 214, 182, 211, + 224, 235, 253, 750, 287, 305, 720, 330, 952, 953, + 954, 196, 197, 958, 198, 206, 964, 94, 175, 176, + 660, 661, 218, 232, 245, 741, 219, 233, 608, 307, + 308, 819, 183, 212, 225, 236, 254, 32, 288, 306, + 40, 331, 266, 608, 636, 267, 209, 220, 234, 252, + 33, 44, 34, 46, 35, 48, 642, 643, 644, 91, + 108, 109, 123, 124, 110, 307, 308, 111, 112, 113, + 122, 123, 124, 267, 50, 268, 269, 370, 52, 270, + 271, 272, 371, 226, 227, 228, 229, 230, 123, 124, + 123, 124, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 99, 867, 122, 742, 868, 404, 191, 122, 267, + 192, 405, 1082, 54, 216, 1083, 1084, 1085, 123, 124, + 56, 123, 124, 408, 420, 125, 123, 124, 409, 421, + 126, 127, 128, 129, 130, 58, 131, 353, 354, 784, + 191, 132, 1011, 192, 1012, 1013, 970, 971, 685, 870, + 133, 60, 871, 134, 95, 664, 665, 666, 667, 876, + 135, 423, 877, 96, 97, 98, 424, 99, 136, 137, + 430, 62, 138, 139, 458, 431, 99, 123, 124, 459, + 916, 99, 64, 917, 952, 953, 954, 123, 124, 958, + 66, 668, 964, 99, 680, 99, 1049, 1050, 1051, 681, + 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, + 692, 693, 694, 695, 696, 697, 68, 70, 121, 36, + 37, 38, 39, 99, 349, 267, 99, 122, 359, 800, + 801, 99, 360, 785, 786, 787, 788, 770, 771, 772, + 773, 774, 775, 475, 478, 123, 124, 482, 476, 479, + 404, 362, 483, 361, 750, 827, 938, 114, 115, 116, + 117, 478, 482, 244, 363, 122, 828, 829, 790, 245, + 246, 247, 248, 249, 250, 184, 100, 185, 611, 612, + 613, 614, 99, 123, 124, 186, 187, 188, 189, 190, + 125, 369, 99, 378, 267, 289, 268, 269, 290, 291, + 379, 380, 191, 408, 849, 192, 132, 381, 830, 850, + 140, 123, 124, 193, 177, 849, 873, 890, 897, 901, + 851, 874, 891, 898, 902, 382, 194, 475, 849, 217, + 182, 400, 903, 1036, 420, 440, 231, 407, 195, 1037, + 214, 415, 211, 1040, 458, 224, 251, 99, 1041, 1048, + 99, 416, 235, 426, 196, 197, 273, 198, 206, 294, + 274, 292, 253, 423, 183, 293, 295, 218, 1057, 428, + 430, 219, 287, 450, 232, 1058, 212, 305, 233, 225, + 1063, 329, 1097, 484, 485, 1064, 236, 1098, 99, 209, + 741, 748, 220, 749, 429, 1080, 254, 330, 1081, 234, + 1024, 1025, 1026, 1027, 439, 441, 288, 444, 448, 252, + 449, 306, 114, 115, 116, 117, 99, 452, 120, 453, + 122, 267, 454, 455, 123, 124, 460, 463, 465, 466, + 469, 331, 470, 481, 486, 487, 488, 489, 123, 124, + 490, 187, 188, 491, 190, 125, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 191, 504, 505, + 192, 506, 507, 508, 509, 510, 511, 512, 193, 513, + 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, - 324, 325, 326, 513, 514, 515, 516, 517, 519, 520, - 327, 328, 521, 523, 518, 140, 526, 524, 527, 528, - 529, 530, 177, 533, 532, 534, 531, 535, 537, 591, - 592, 593, 539, 541, 540, 545, 542, 543, 182, 99, - 546, 547, 548, 549, 550, 551, 553, 785, 798, 554, - 329, 555, 556, 557, 558, 559, 561, 562, 563, 565, - 566, 99, 568, 787, 799, 569, 330, 570, 571, 572, - 573, 575, 183, 1, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, 574, 576, - 579, 580, 577, 581, 578, 582, 584, 788, 800, 586, - 331, 588, 594, 589, 600, 590, 595, 596, 597, 652, - 598, 599, 601, 602, 603, 751, 612, 34, 606, 613, - 614, 615, 629, 617, 616, 618, 619, 850, 630, 620, - 621, 671, 622, 624, 625, 627, 628, 659, 669, 634, - 631, 670, 633, 635, 636, 717, 637, 641, 721, 725, - 729, 733, 755, 758, 762, 642, 807, 811, 819, 643, - 644, 645, 646, 647, 648, 649, 650, 651, 653, 654, - 655, 831, 832, 833, 834, 835, 837, 838, 842, 666, - 667, 843, 844, 668, 853, 849, 852, 856, 855, 858, - 859, 861, 862, 900, 865, 876, 875, 878, 879, 904, - 880, 881, 882, 883, 884, 885, 890, 891, 892, 905, - 908, 907, 623, 522, 915, 914, 910, 916, 917, 918, - 919, 924, 927, 920, 928, 921, 929, 964, 923, 922, - 991, 925, 926, 930, 931, 992, 997, 998, 932, 1001, - 984, 1000, 985, 986, 987, 988, 989, 993, 994, 995, - 1006, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1034, 1035, - 1040, 1038, 1041, 1042, 1066, 1043, 1049, 1050, 1057, 1062, - 1065, 1067, 743, 1070, 1090, 1051, 1072, 194, 1052, 1091, - 273, 294, 1092, 292, 274, 1055, 942, 293, 295, 195, - 947, 214, 1095, 211, 489, 1063, 287, 968, 943, 305, - 251, 969, 958, 309, 1096, 196, 197, 1069, 198, 206, - 1071, 672, 1100, 971, 944, 945, 253, 946, 953, 785, - 675, 935, 1097, 798, 951, 822, 1098, 212, 952, 217, - 288, 525, 231, 306, 965, 787, 959, 1010, 933, 799, - 209, 1011, 962, 963, 937, 224, 982, 972, 235, 957, - 254, 983, 990, 1012, 567, 936, 536, 961, 1061, 939, - 970, 265, 940, 252, 938, 941, 1003, 218, 1005, 788, - 232, 219, 560, 800, 233, 981, 564, 1002, 552, 225, - 538, 1004, 236, 980, 544, 979, 816, 1013, 1064, 996, - 674, 999, 220, 805, 583, 234, 673, 1019, 1068, 1088, - 1099, 0, 0, 0, 585, 0, 587, 0, 0, 0, + 324, 325, 326, 524, 526, 527, 529, 530, 531, 140, + 327, 328, 532, 533, 534, 535, 177, 536, 537, 538, + 540, 542, 595, 596, 597, 544, 548, 543, 545, 546, + 549, 550, 182, 551, 552, 553, 554, 556, 557, 99, + 559, 789, 802, 558, 329, 560, 561, 564, 562, 565, + 566, 568, 569, 99, 572, 571, 573, 791, 803, 574, + 330, 575, 578, 579, 582, 576, 183, 1, 2, 3, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 580, 583, 577, 584, 585, 581, 587, 589, + 590, 792, 804, 592, 331, 593, 598, 594, 599, 600, + 601, 602, 656, 603, 605, 604, 606, 607, 854, 616, + 34, 610, 617, 618, 619, 857, 621, 620, 622, 623, + 923, 633, 624, 625, 626, 675, 628, 629, 631, 632, + 673, 674, 634, 635, 637, 638, 639, 640, 663, 721, + 641, 725, 729, 733, 737, 759, 762, 755, 645, 766, + 811, 815, 823, 835, 836, 837, 838, 646, 839, 841, + 647, 648, 649, 650, 651, 652, 653, 654, 655, 657, + 658, 659, 842, 846, 847, 670, 848, 853, 884, 671, + 672, 856, 859, 860, 862, 863, 866, 865, 924, 880, + 869, 879, 883, 882, 885, 886, 887, 888, 889, 894, + 895, 896, 904, 909, 908, 911, 912, 1005, 918, 914, + 919, 920, 921, 922, 925, 926, 928, 931, 932, 927, + 929, 930, 933, 968, 934, 995, 935, 996, 1001, 988, + 936, 989, 1002, 1004, 1010, 1044, 1046, 990, 991, 992, + 993, 997, 998, 999, 1029, 1030, 1031, 1032, 1033, 1034, + 1035, 1038, 1039, 1045, 1042, 1047, 1061, 1053, 1066, 1069, + 1054, 1055, 1071, 1076, 1074, 1094, 1095, 1096, 1099, 1056, + 1059, 194, 1070, 747, 273, 294, 679, 292, 274, 627, + 946, 293, 295, 195, 951, 214, 492, 211, 676, 525, + 287, 972, 947, 305, 251, 973, 962, 309, 1067, 196, + 197, 1073, 198, 206, 1075, 1104, 1100, 975, 948, 949, + 253, 950, 957, 789, 826, 1101, 1102, 802, 955, 528, + 966, 212, 956, 217, 288, 939, 231, 306, 969, 791, + 963, 1014, 937, 803, 209, 1015, 994, 967, 941, 224, + 987, 976, 235, 961, 254, 986, 940, 1016, 539, 570, + 965, 1065, 265, 943, 974, 942, 567, 252, 945, 944, + 1007, 218, 1009, 792, 232, 219, 1006, 804, 233, 563, + 1008, 541, 985, 225, 547, 820, 236, 984, 983, 1068, + 555, 1017, 1000, 1003, 678, 591, 220, 677, 809, 234, + 1023, 1072, 586, 1092, 1103, 0, 588, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 942, 0, 0, 0, 947, 0, 968, 0, - 0, 0, 969, 0, 943, 0, 0, 0, 958, 0, - 0, 0, 0, 0, 971, 1010, 0, 0, 0, 1011, - 944, 945, 0, 946, 953, 0, 0, 0, 0, 0, - 951, 1012, 0, 0, 952, 0, 0, 0, 0, 0, - 0, 0, 959, 0, 0, 0, 0, 0, 972, 0, - 0, 0, 0, 0, 0, 957, 0, 0, 0, 0, - 0, 970, 0, 0, 0, 1013 + 0, 0, 0, 0, 0, 0, 946, 0, 0, 0, + 951, 0, 972, 0, 0, 0, 973, 0, 947, 0, + 0, 0, 962, 0, 0, 0, 0, 0, 975, 1014, + 0, 0, 0, 1015, 948, 949, 0, 950, 957, 0, + 0, 0, 0, 0, 955, 1016, 0, 0, 956, 0, + 0, 0, 0, 0, 0, 0, 963, 0, 0, 0, + 0, 0, 976, 0, 0, 0, 0, 0, 0, 961, + 0, 0, 0, 0, 0, 974, 0, 0, 0, 1017 }; const short Dhcp6Parser::yycheck_[] = { 74, 75, 76, 77, 78, 79, 80, 83, 82, 83, - 84, 85, 82, 83, 83, 77, 621, 77, 76, 77, - 78, 79, 80, 615, 82, 83, 598, 85, 860, 860, - 860, 77, 77, 860, 77, 77, 860, 10, 15, 16, - 3, 94, 78, 79, 92, 8, 78, 79, 505, 101, - 102, 99, 76, 77, 78, 79, 80, 3, 82, 83, - 17, 85, 8, 520, 101, 102, 77, 78, 79, 80, - 5, 0, 7, 3, 9, 7, 68, 69, 8, 3, - 11, 12, 533, 14, 8, 50, 17, 18, 19, 7, - 7, 68, 69, 20, 545, 546, 547, 7, 63, 64, - 65, 66, 67, 68, 69, 7, 7, 140, 141, 142, - 143, 42, 43, 44, 45, 46, 47, 48, 49, 50, - 173, 173, 87, 7, 51, 90, 53, 54, 120, 121, - 57, 58, 59, 3, 3, 3, 6, 68, 69, 8, - 8, 68, 69, 176, 75, 21, 22, 23, 24, 80, - 81, 82, 83, 84, 20, 86, 3, 50, 7, 6, - 91, 149, 3, 29, 152, 153, 154, 8, 61, 100, - 7, 3, 103, 146, 6, 68, 69, 137, 138, 110, - 3, 173, 155, 156, 157, 8, 3, 118, 119, 6, - 3, 122, 123, 51, 87, 8, 173, 90, 94, 95, - 173, 97, 68, 69, 1036, 1036, 1036, 7, 173, 1036, - 68, 69, 1036, 20, 111, 112, 113, 50, 25, 26, + 84, 85, 82, 83, 83, 77, 625, 77, 76, 77, + 78, 79, 80, 619, 82, 83, 602, 85, 864, 864, + 864, 77, 77, 864, 77, 77, 864, 10, 16, 17, + 138, 139, 78, 79, 93, 95, 78, 79, 508, 102, + 103, 100, 76, 77, 78, 79, 80, 0, 82, 83, + 17, 85, 21, 523, 536, 52, 77, 78, 79, 80, + 5, 7, 7, 7, 9, 7, 548, 549, 550, 174, + 11, 12, 69, 70, 15, 102, 103, 18, 19, 20, + 51, 69, 70, 52, 7, 54, 55, 3, 7, 58, + 59, 60, 8, 64, 65, 66, 67, 68, 69, 70, + 69, 70, 43, 44, 45, 46, 47, 48, 49, 50, + 51, 174, 3, 51, 174, 6, 3, 88, 51, 52, + 91, 8, 150, 7, 62, 153, 154, 155, 69, 70, + 7, 69, 70, 3, 3, 76, 69, 70, 8, 8, + 81, 82, 83, 84, 85, 7, 87, 13, 14, 21, + 88, 92, 149, 91, 151, 152, 89, 90, 30, 3, + 101, 7, 6, 104, 147, 141, 142, 143, 144, 3, + 111, 3, 6, 156, 157, 158, 8, 174, 119, 120, + 3, 7, 123, 124, 3, 8, 174, 69, 70, 8, + 3, 174, 7, 6, 1040, 1040, 1040, 69, 70, 1040, + 7, 177, 1040, 174, 21, 174, 112, 113, 114, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, - 37, 38, 39, 40, 41, 68, 69, 7, 173, 174, - 175, 176, 173, 7, 51, 7, 173, 3, 114, 115, - 116, 117, 8, 86, 76, 77, 78, 79, 7, 92, - 93, 94, 95, 96, 97, 50, 51, 173, 3, 42, - 43, 44, 45, 8, 866, 3, 848, 50, 6, 13, - 173, 3, 49, 68, 69, 147, 8, 60, 893, 62, - 148, 6, 150, 151, 368, 68, 69, 70, 71, 72, - 73, 74, 75, 88, 89, 3, 8, 173, 104, 105, - 106, 107, 108, 109, 87, 173, 4, 90, 91, 51, - 52, 53, 54, 55, 56, 98, 3, 3, 402, 3, - 3, 8, 406, 3, 8, 8, 68, 69, 8, 4, - 173, 3, 8, 4, 418, 3, 8, 421, 406, 4, - 8, 4, 3, 3, 428, 4, 418, 8, 418, 4, - 418, 4, 3, 421, 438, 4, 173, 8, 4, 4, - 428, 4, 418, 418, 448, 418, 418, 453, 448, 453, - 438, 3, 406, 453, 453, 421, 8, 4, 173, 421, - 448, 4, 428, 3, 418, 453, 428, 421, 8, 473, - 173, 358, 359, 3, 428, 8, 3, 418, 8, 4, - 421, 8, 4, 3, 438, 473, 3, 428, 8, 8, - 3, 8, 3, 3, 448, 8, 4, 438, 8, 453, - 42, 43, 44, 45, 68, 69, 48, 3, 50, 51, - 4, 173, 8, 8, 3, 174, 4, 4, 4, 473, - 4, 4, 4, 173, 4, 4, 68, 69, 4, 71, - 72, 4, 74, 75, 4, 4, 4, 4, 4, 4, - 4, 174, 4, 174, 174, 87, 4, 174, 90, 4, - 4, 4, 4, 4, 4, 4, 98, 4, 4, 4, - 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, - 134, 135, 136, 4, 4, 4, 4, 4, 4, 4, - 144, 145, 4, 4, 174, 589, 4, 176, 4, 4, - 4, 4, 596, 4, 176, 4, 174, 4, 4, 486, - 487, 488, 4, 4, 174, 4, 174, 174, 596, 173, - 4, 4, 4, 4, 4, 4, 4, 621, 622, 4, - 624, 174, 4, 4, 4, 176, 4, 176, 176, 4, - 4, 173, 176, 621, 622, 4, 624, 4, 174, 4, - 174, 4, 596, 158, 159, 160, 161, 162, 163, 164, - 165, 166, 167, 168, 169, 170, 171, 172, 174, 4, - 4, 4, 176, 4, 176, 4, 4, 621, 622, 4, - 624, 4, 173, 7, 173, 7, 7, 7, 7, 566, - 7, 5, 5, 5, 5, 85, 5, 7, 173, 5, - 5, 5, 173, 5, 7, 5, 5, 3, 173, 7, - 7, 588, 7, 7, 5, 5, 5, 139, 5, 7, - 173, 5, 173, 173, 173, 7, 173, 173, 7, 7, - 7, 7, 7, 7, 7, 173, 7, 7, 7, 173, - 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, - 173, 4, 4, 4, 4, 4, 4, 4, 4, 173, - 173, 4, 4, 173, 3, 6, 6, 3, 6, 6, - 3, 6, 3, 173, 6, 3, 6, 6, 3, 6, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, - 3, 6, 520, 402, 4, 6, 8, 4, 4, 4, - 174, 4, 4, 176, 4, 174, 4, 4, 174, 176, - 4, 174, 174, 174, 174, 4, 4, 4, 176, 3, - 174, 6, 174, 174, 174, 174, 174, 174, 174, 174, - 4, 173, 173, 173, 173, 173, 173, 173, 8, 8, - 4, 173, 8, 3, 174, 8, 173, 173, 4, 4, - 4, 4, 614, 5, 4, 173, 7, 851, 173, 4, - 854, 857, 4, 857, 854, 173, 860, 857, 857, 851, - 860, 851, 4, 851, 368, 176, 854, 871, 860, 857, - 874, 871, 860, 877, 176, 851, 851, 173, 851, 851, - 173, 589, 173, 871, 860, 860, 874, 860, 860, 893, - 596, 850, 174, 897, 860, 670, 174, 851, 860, 903, - 854, 406, 906, 857, 869, 893, 860, 911, 845, 897, - 851, 911, 863, 866, 853, 903, 877, 871, 906, 860, - 874, 879, 886, 911, 456, 851, 418, 862, 1036, 856, - 871, 81, 857, 874, 854, 859, 905, 903, 908, 893, - 906, 903, 448, 897, 906, 876, 453, 903, 438, 903, - 421, 906, 906, 874, 428, 872, 634, 911, 1042, 893, - 595, 897, 903, 624, 473, 906, 590, 912, 1059, 1076, - 1093, -1, -1, -1, 476, -1, 479, -1, -1, -1, + 37, 38, 39, 40, 41, 42, 7, 7, 50, 174, + 175, 176, 177, 174, 148, 52, 174, 51, 6, 121, + 122, 174, 3, 115, 116, 117, 118, 105, 106, 107, + 108, 109, 110, 3, 3, 69, 70, 3, 8, 8, + 3, 8, 8, 4, 870, 8, 852, 43, 44, 45, + 46, 3, 3, 87, 3, 51, 8, 8, 897, 93, + 94, 95, 96, 97, 98, 61, 370, 63, 77, 78, + 79, 80, 174, 69, 70, 71, 72, 73, 74, 75, + 76, 4, 174, 4, 52, 53, 54, 55, 56, 57, + 4, 4, 88, 3, 3, 91, 92, 4, 8, 8, + 404, 69, 70, 99, 408, 3, 3, 3, 3, 3, + 8, 8, 8, 8, 8, 4, 420, 3, 3, 423, + 408, 4, 8, 8, 3, 3, 430, 4, 420, 8, + 420, 4, 420, 3, 3, 423, 440, 174, 8, 8, + 174, 4, 430, 4, 420, 420, 450, 420, 420, 455, + 450, 455, 440, 3, 408, 455, 455, 423, 8, 4, + 3, 423, 450, 3, 430, 8, 420, 455, 430, 423, + 3, 475, 3, 360, 361, 8, 430, 8, 174, 420, + 95, 96, 423, 98, 4, 3, 440, 475, 6, 430, + 22, 23, 24, 25, 8, 8, 450, 4, 4, 440, + 8, 455, 43, 44, 45, 46, 174, 4, 49, 4, + 51, 52, 8, 3, 69, 70, 4, 4, 4, 4, + 4, 475, 4, 4, 174, 4, 4, 4, 69, 70, + 4, 72, 73, 4, 75, 76, 4, 4, 4, 4, + 4, 4, 175, 175, 175, 175, 175, 88, 4, 4, + 91, 4, 4, 4, 4, 4, 4, 4, 99, 4, + 4, 4, 4, 4, 4, 4, 4, 175, 4, 4, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 4, 4, 177, 4, 4, 4, 593, + 145, 146, 4, 4, 175, 177, 600, 4, 4, 4, + 4, 4, 489, 490, 491, 4, 4, 175, 175, 175, + 4, 4, 600, 4, 4, 4, 4, 4, 4, 174, + 4, 625, 626, 175, 628, 4, 4, 4, 177, 177, + 177, 4, 4, 174, 4, 177, 4, 625, 626, 175, + 628, 4, 4, 4, 4, 175, 600, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, + 172, 173, 177, 4, 175, 4, 4, 177, 4, 4, + 175, 625, 626, 4, 628, 7, 174, 7, 7, 7, + 7, 7, 569, 5, 5, 174, 5, 5, 3, 5, + 7, 174, 5, 5, 5, 3, 5, 7, 5, 5, + 175, 174, 7, 7, 7, 592, 7, 5, 5, 5, + 5, 5, 174, 174, 174, 7, 174, 174, 140, 7, + 174, 7, 7, 7, 7, 7, 7, 86, 174, 7, + 7, 7, 7, 4, 4, 4, 4, 174, 4, 4, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 4, 4, 4, 174, 4, 6, 4, 174, + 174, 6, 6, 3, 6, 3, 3, 6, 177, 3, + 6, 6, 3, 6, 4, 4, 4, 4, 4, 4, + 4, 4, 174, 3, 6, 6, 3, 3, 6, 8, + 4, 4, 4, 4, 175, 177, 4, 4, 4, 175, + 175, 175, 4, 4, 175, 4, 175, 4, 4, 175, + 177, 175, 4, 6, 4, 4, 3, 175, 175, 175, + 175, 175, 175, 175, 174, 174, 174, 174, 174, 174, + 174, 8, 8, 8, 174, 8, 4, 174, 4, 4, + 174, 174, 4, 7, 5, 4, 4, 4, 4, 174, + 174, 855, 175, 618, 858, 861, 600, 861, 858, 523, + 864, 861, 861, 855, 864, 855, 370, 855, 593, 404, + 858, 875, 864, 861, 878, 875, 864, 881, 177, 855, + 855, 174, 855, 855, 174, 174, 177, 875, 864, 864, + 878, 864, 864, 897, 674, 175, 175, 901, 864, 408, + 867, 855, 864, 907, 858, 854, 910, 861, 873, 897, + 864, 915, 849, 901, 855, 915, 890, 870, 857, 907, + 883, 875, 910, 864, 878, 881, 855, 915, 420, 458, + 866, 1040, 81, 860, 875, 858, 455, 878, 863, 861, + 909, 907, 912, 897, 910, 907, 907, 901, 910, 450, + 910, 423, 880, 907, 430, 638, 910, 878, 876, 1046, + 440, 915, 897, 901, 599, 482, 907, 594, 628, 910, + 916, 1063, 475, 1080, 1097, -1, 478, -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, -1, -1, -1, -1, - -1, -1, 1036, -1, -1, -1, 1036, -1, 1042, -1, - -1, -1, 1042, -1, 1036, -1, -1, -1, 1036, -1, - -1, -1, -1, -1, 1042, 1059, -1, -1, -1, 1059, - 1036, 1036, -1, 1036, 1036, -1, -1, -1, -1, -1, - 1036, 1059, -1, -1, 1036, -1, -1, -1, -1, -1, - -1, -1, 1036, -1, -1, -1, -1, -1, 1042, -1, - -1, -1, -1, -1, -1, 1036, -1, -1, -1, -1, - -1, 1042, -1, -1, -1, 1059 + -1, -1, -1, -1, -1, -1, 1040, -1, -1, -1, + 1040, -1, 1046, -1, -1, -1, 1046, -1, 1040, -1, + -1, -1, 1040, -1, -1, -1, -1, -1, 1046, 1063, + -1, -1, -1, 1063, 1040, 1040, -1, 1040, 1040, -1, + -1, -1, -1, -1, 1040, 1063, -1, -1, 1040, -1, + -1, -1, -1, -1, -1, -1, 1040, -1, -1, -1, + -1, -1, 1046, -1, -1, -1, -1, -1, -1, 1040, + -1, -1, -1, -1, -1, 1046, -1, -1, -1, 1063 }; const unsigned short Dhcp6Parser::yystos_[] = { - 0, 158, 159, 160, 161, 162, 163, 164, 165, 166, - 167, 168, 169, 170, 171, 172, 178, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, - 192, 193, 0, 5, 7, 9, 173, 174, 175, 176, - 194, 195, 196, 201, 7, 210, 7, 216, 7, 231, - 7, 329, 7, 406, 7, 422, 7, 439, 7, 358, - 7, 364, 7, 388, 7, 305, 7, 500, 7, 546, - 7, 538, 202, 197, 211, 217, 232, 330, 407, 423, - 440, 359, 365, 389, 306, 501, 547, 539, 194, 203, - 204, 173, 199, 200, 10, 146, 155, 156, 157, 173, - 209, 212, 213, 214, 530, 532, 534, 544, 11, 12, - 14, 17, 18, 19, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 68, 69, 75, 80, 81, 82, 83, - 84, 86, 91, 100, 103, 110, 118, 119, 122, 123, - 209, 218, 219, 220, 222, 223, 224, 225, 226, 227, - 229, 238, 240, 242, 279, 285, 291, 297, 299, 313, - 323, 343, 348, 356, 382, 412, 414, 433, 463, 475, - 487, 488, 496, 498, 536, 15, 16, 209, 233, 234, - 235, 237, 412, 414, 60, 62, 70, 71, 72, 73, - 74, 87, 90, 98, 209, 222, 223, 224, 225, 331, - 332, 333, 335, 337, 339, 341, 343, 346, 347, 382, - 400, 412, 414, 416, 433, 458, 61, 209, 339, 341, - 382, 408, 409, 410, 412, 414, 63, 64, 65, 66, - 67, 209, 339, 341, 382, 412, 414, 424, 425, 426, - 428, 429, 431, 432, 86, 92, 93, 94, 95, 96, - 97, 209, 382, 412, 414, 441, 442, 443, 444, 446, - 448, 450, 452, 454, 456, 356, 20, 51, 53, 54, - 57, 58, 59, 209, 260, 366, 367, 368, 369, 370, - 371, 372, 374, 376, 378, 379, 381, 412, 414, 52, - 55, 56, 209, 260, 370, 376, 390, 391, 392, 393, - 394, 396, 397, 398, 399, 412, 414, 101, 102, 209, - 307, 308, 309, 311, 124, 125, 126, 127, 128, 129, - 130, 131, 132, 133, 134, 135, 136, 144, 145, 209, - 412, 414, 502, 503, 504, 505, 507, 509, 510, 512, - 513, 514, 517, 519, 520, 521, 524, 526, 528, 147, - 548, 549, 550, 13, 540, 541, 542, 6, 3, 4, - 8, 3, 215, 545, 531, 533, 535, 4, 3, 8, - 221, 537, 230, 239, 241, 243, 4, 4, 4, 4, - 4, 228, 324, 357, 383, 413, 415, 344, 349, 286, - 298, 292, 280, 464, 434, 300, 314, 476, 4, 489, - 497, 499, 3, 8, 236, 4, 3, 8, 401, 417, - 334, 336, 338, 4, 4, 342, 340, 459, 3, 8, - 411, 3, 8, 427, 4, 430, 4, 4, 3, 8, - 457, 445, 447, 449, 451, 453, 455, 8, 3, 8, - 373, 261, 4, 377, 375, 380, 4, 8, 3, 395, - 4, 4, 8, 3, 310, 312, 3, 8, 4, 506, - 508, 4, 511, 4, 4, 515, 518, 4, 4, 522, - 525, 527, 529, 3, 8, 551, 3, 8, 543, 3, - 8, 194, 194, 173, 4, 4, 4, 4, 4, 213, - 4, 4, 4, 4, 4, 4, 174, 174, 174, 174, - 174, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 174, 4, - 4, 4, 219, 4, 176, 234, 4, 4, 4, 4, - 4, 174, 176, 4, 4, 4, 332, 4, 409, 4, - 174, 4, 174, 174, 425, 4, 4, 4, 4, 4, - 4, 4, 443, 4, 4, 174, 4, 4, 4, 176, - 368, 4, 176, 176, 392, 4, 4, 308, 176, 4, - 4, 174, 4, 174, 174, 4, 4, 176, 176, 4, - 4, 4, 4, 503, 4, 549, 4, 541, 4, 7, - 7, 194, 194, 194, 173, 7, 7, 7, 7, 5, - 173, 5, 5, 5, 196, 198, 173, 76, 77, 78, - 79, 345, 5, 5, 5, 5, 7, 5, 5, 5, - 7, 7, 7, 198, 7, 5, 205, 5, 5, 173, - 173, 173, 205, 173, 7, 173, 173, 173, 205, 205, - 205, 173, 173, 173, 173, 173, 173, 173, 173, 173, - 173, 173, 194, 173, 173, 173, 137, 138, 516, 139, - 140, 141, 142, 143, 176, 523, 173, 173, 173, 5, - 5, 194, 218, 548, 540, 233, 20, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 209, 248, 249, 250, 253, 255, - 257, 259, 260, 262, 263, 264, 265, 266, 267, 268, - 269, 270, 272, 273, 275, 277, 248, 7, 244, 245, - 246, 7, 325, 326, 327, 7, 360, 361, 362, 7, - 384, 385, 386, 7, 350, 351, 352, 94, 173, 287, - 288, 289, 290, 203, 95, 97, 289, 293, 294, 295, - 296, 85, 281, 282, 283, 7, 465, 466, 7, 435, - 436, 437, 7, 301, 302, 303, 104, 105, 106, 107, - 108, 109, 315, 316, 317, 318, 319, 320, 321, 322, - 20, 114, 115, 116, 117, 209, 262, 412, 414, 477, - 478, 479, 482, 483, 485, 486, 120, 121, 209, 412, - 414, 490, 491, 492, 494, 502, 206, 7, 402, 403, - 404, 7, 418, 419, 420, 99, 444, 460, 461, 7, - 552, 553, 244, 8, 8, 8, 8, 251, 254, 256, - 258, 4, 4, 4, 4, 4, 271, 4, 4, 274, - 276, 278, 4, 4, 4, 3, 8, 8, 247, 6, - 3, 328, 6, 3, 363, 6, 3, 387, 6, 3, - 353, 6, 3, 3, 6, 6, 3, 6, 284, 3, - 8, 467, 3, 6, 438, 6, 3, 304, 6, 3, - 4, 4, 4, 4, 4, 4, 3, 8, 480, 484, - 4, 4, 4, 3, 8, 493, 495, 3, 8, 8, - 173, 207, 208, 405, 6, 3, 421, 6, 3, 462, - 8, 554, 3, 6, 6, 4, 4, 4, 4, 174, - 176, 174, 176, 174, 4, 174, 174, 4, 4, 4, - 174, 174, 176, 249, 248, 246, 331, 327, 366, 362, - 390, 386, 209, 222, 223, 224, 225, 260, 323, 335, - 337, 339, 341, 343, 347, 354, 355, 382, 412, 414, - 458, 352, 288, 294, 4, 282, 88, 89, 209, 260, - 382, 412, 414, 468, 469, 470, 471, 472, 474, 466, - 441, 437, 307, 303, 174, 174, 174, 174, 174, 174, - 316, 4, 4, 174, 174, 174, 478, 4, 4, 491, - 6, 3, 408, 404, 424, 420, 4, 148, 150, 151, - 209, 260, 412, 414, 555, 556, 557, 558, 560, 553, - 21, 22, 23, 24, 252, 173, 173, 173, 173, 173, - 173, 173, 8, 8, 8, 8, 3, 8, 173, 473, - 4, 8, 3, 8, 8, 111, 112, 113, 481, 173, - 173, 173, 173, 8, 8, 173, 561, 4, 559, 3, - 8, 355, 4, 176, 470, 4, 174, 4, 556, 173, - 5, 173, 7, 562, 563, 564, 3, 6, 149, 152, - 153, 154, 565, 566, 567, 569, 570, 571, 563, 568, - 4, 4, 4, 3, 8, 4, 176, 174, 174, 566, - 173 + 0, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 0, 5, 7, 9, 174, 175, 176, 177, + 195, 196, 197, 202, 7, 211, 7, 217, 7, 232, + 7, 330, 7, 407, 7, 423, 7, 440, 7, 359, + 7, 365, 7, 389, 7, 306, 7, 501, 7, 548, + 7, 539, 203, 198, 212, 218, 233, 331, 408, 424, + 441, 360, 366, 390, 307, 502, 549, 540, 195, 204, + 205, 174, 200, 201, 10, 147, 156, 157, 158, 174, + 210, 213, 214, 215, 531, 533, 535, 546, 11, 12, + 15, 18, 19, 20, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 69, 70, 76, 81, 82, 83, 84, + 85, 87, 92, 101, 104, 111, 119, 120, 123, 124, + 210, 219, 220, 221, 223, 224, 225, 226, 227, 228, + 230, 239, 241, 243, 280, 286, 292, 298, 300, 314, + 324, 344, 349, 357, 383, 413, 415, 434, 464, 476, + 488, 489, 497, 499, 537, 16, 17, 210, 234, 235, + 236, 238, 413, 415, 61, 63, 71, 72, 73, 74, + 75, 88, 91, 99, 210, 223, 224, 225, 226, 332, + 333, 334, 336, 338, 340, 342, 344, 347, 348, 383, + 401, 413, 415, 417, 434, 459, 62, 210, 340, 342, + 383, 409, 410, 411, 413, 415, 64, 65, 66, 67, + 68, 210, 340, 342, 383, 413, 415, 425, 426, 427, + 429, 430, 432, 433, 87, 93, 94, 95, 96, 97, + 98, 210, 383, 413, 415, 442, 443, 444, 445, 447, + 449, 451, 453, 455, 457, 357, 21, 52, 54, 55, + 58, 59, 60, 210, 261, 367, 368, 369, 370, 371, + 372, 373, 375, 377, 379, 380, 382, 413, 415, 53, + 56, 57, 210, 261, 371, 377, 391, 392, 393, 394, + 395, 397, 398, 399, 400, 413, 415, 102, 103, 210, + 308, 309, 310, 312, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 145, 146, 210, + 413, 415, 503, 504, 505, 506, 508, 510, 511, 513, + 514, 515, 518, 520, 521, 522, 525, 527, 529, 148, + 550, 551, 552, 13, 14, 541, 542, 543, 545, 6, + 3, 4, 8, 3, 216, 547, 532, 534, 536, 4, + 3, 8, 222, 538, 231, 240, 242, 244, 4, 4, + 4, 4, 4, 229, 325, 358, 384, 414, 416, 345, + 350, 287, 299, 293, 281, 465, 435, 301, 315, 477, + 4, 490, 498, 500, 3, 8, 237, 4, 3, 8, + 402, 418, 335, 337, 339, 4, 4, 343, 341, 460, + 3, 8, 412, 3, 8, 428, 4, 431, 4, 4, + 3, 8, 458, 446, 448, 450, 452, 454, 456, 8, + 3, 8, 374, 262, 4, 378, 376, 381, 4, 8, + 3, 396, 4, 4, 8, 3, 311, 313, 3, 8, + 4, 507, 509, 4, 512, 4, 4, 516, 519, 4, + 4, 523, 526, 528, 530, 3, 8, 553, 3, 8, + 544, 4, 3, 8, 195, 195, 174, 4, 4, 4, + 4, 4, 214, 4, 4, 4, 4, 4, 4, 175, + 175, 175, 175, 175, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 175, 4, 4, 4, 220, 4, 177, 235, 4, + 4, 4, 4, 4, 175, 177, 4, 4, 4, 333, + 4, 410, 4, 175, 4, 175, 175, 426, 4, 4, + 4, 4, 4, 4, 4, 444, 4, 4, 175, 4, + 4, 4, 177, 369, 4, 177, 177, 393, 4, 4, + 309, 177, 4, 4, 175, 4, 175, 175, 4, 4, + 177, 177, 4, 4, 4, 4, 504, 4, 551, 4, + 175, 542, 4, 7, 7, 195, 195, 195, 174, 7, + 7, 7, 7, 5, 174, 5, 5, 5, 197, 199, + 174, 77, 78, 79, 80, 346, 5, 5, 5, 5, + 7, 5, 5, 5, 7, 7, 7, 199, 7, 5, + 206, 5, 5, 174, 174, 174, 206, 174, 7, 174, + 174, 174, 206, 206, 206, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 195, 174, 174, 174, + 138, 139, 517, 140, 141, 142, 143, 144, 177, 524, + 174, 174, 174, 5, 5, 195, 219, 550, 541, 234, + 21, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 210, 249, + 250, 251, 254, 256, 258, 260, 261, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 273, 274, 276, 278, + 249, 7, 245, 246, 247, 7, 326, 327, 328, 7, + 361, 362, 363, 7, 385, 386, 387, 7, 351, 352, + 353, 95, 174, 288, 289, 290, 291, 204, 96, 98, + 290, 294, 295, 296, 297, 86, 282, 283, 284, 7, + 466, 467, 7, 436, 437, 438, 7, 302, 303, 304, + 105, 106, 107, 108, 109, 110, 316, 317, 318, 319, + 320, 321, 322, 323, 21, 115, 116, 117, 118, 210, + 263, 413, 415, 478, 479, 480, 483, 484, 486, 487, + 121, 122, 210, 413, 415, 491, 492, 493, 495, 503, + 207, 7, 403, 404, 405, 7, 419, 420, 421, 100, + 445, 461, 462, 7, 554, 555, 245, 8, 8, 8, + 8, 252, 255, 257, 259, 4, 4, 4, 4, 4, + 272, 4, 4, 275, 277, 279, 4, 4, 4, 3, + 8, 8, 248, 6, 3, 329, 6, 3, 364, 6, + 3, 388, 6, 3, 354, 6, 3, 3, 6, 6, + 3, 6, 285, 3, 8, 468, 3, 6, 439, 6, + 3, 305, 6, 3, 4, 4, 4, 4, 4, 4, + 3, 8, 481, 485, 4, 4, 4, 3, 8, 494, + 496, 3, 8, 8, 174, 208, 209, 406, 6, 3, + 422, 6, 3, 463, 8, 556, 3, 6, 6, 4, + 4, 4, 4, 175, 177, 175, 177, 175, 4, 175, + 175, 4, 4, 4, 175, 175, 177, 250, 249, 247, + 332, 328, 367, 363, 391, 387, 210, 223, 224, 225, + 226, 261, 324, 336, 338, 340, 342, 344, 348, 355, + 356, 383, 413, 415, 459, 353, 289, 295, 4, 283, + 89, 90, 210, 261, 383, 413, 415, 469, 470, 471, + 472, 473, 475, 467, 442, 438, 308, 304, 175, 175, + 175, 175, 175, 175, 317, 4, 4, 175, 175, 175, + 479, 4, 4, 492, 6, 3, 409, 405, 425, 421, + 4, 149, 151, 152, 210, 261, 413, 415, 557, 558, + 559, 560, 562, 555, 22, 23, 24, 25, 253, 174, + 174, 174, 174, 174, 174, 174, 8, 8, 8, 8, + 3, 8, 174, 474, 4, 8, 3, 8, 8, 112, + 113, 114, 482, 174, 174, 174, 174, 8, 8, 174, + 563, 4, 561, 3, 8, 356, 4, 177, 471, 4, + 175, 4, 558, 174, 5, 174, 7, 564, 565, 566, + 3, 6, 150, 153, 154, 155, 567, 568, 569, 571, + 572, 573, 565, 570, 4, 4, 4, 3, 8, 4, + 177, 175, 175, 568, 174 }; const unsigned short Dhcp6Parser::yyr1_[] = { - 0, 177, 179, 178, 180, 178, 181, 178, 182, 178, - 183, 178, 184, 178, 185, 178, 186, 178, 187, 178, - 188, 178, 189, 178, 190, 178, 191, 178, 192, 178, - 193, 178, 194, 194, 194, 194, 194, 194, 194, 195, - 197, 196, 198, 199, 199, 200, 200, 202, 201, 203, - 203, 204, 204, 206, 205, 207, 207, 208, 208, 209, - 211, 210, 212, 212, 213, 213, 213, 213, 213, 213, - 215, 214, 217, 216, 218, 218, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 221, - 220, 222, 223, 224, 225, 226, 228, 227, 230, 229, - 232, 231, 233, 233, 234, 234, 234, 234, 234, 236, - 235, 237, 239, 238, 241, 240, 243, 242, 244, 244, - 245, 245, 247, 246, 248, 248, 249, 249, 249, 249, - 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, - 249, 249, 249, 249, 249, 249, 251, 250, 252, 252, - 252, 252, 254, 253, 256, 255, 258, 257, 259, 261, - 260, 262, 263, 264, 265, 266, 267, 268, 269, 271, - 270, 272, 274, 273, 276, 275, 278, 277, 280, 279, - 281, 281, 282, 284, 283, 286, 285, 287, 287, 288, - 288, 289, 290, 292, 291, 293, 293, 294, 294, 294, - 295, 296, 298, 297, 300, 299, 301, 301, 302, 302, - 304, 303, 306, 305, 307, 307, 307, 308, 308, 310, - 309, 312, 311, 314, 313, 315, 315, 316, 316, 316, - 316, 316, 316, 317, 318, 319, 320, 321, 322, 324, - 323, 325, 325, 326, 326, 328, 327, 330, 329, 331, - 331, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, - 332, 334, 333, 336, 335, 338, 337, 340, 339, 342, - 341, 344, 343, 345, 345, 345, 345, 346, 347, 349, - 348, 350, 350, 351, 351, 353, 352, 354, 354, 355, - 355, 355, 355, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 355, 355, 355, 355, 357, 356, 359, 358, - 360, 360, 361, 361, 363, 362, 365, 364, 366, 366, - 367, 367, 368, 368, 368, 368, 368, 368, 368, 368, - 368, 368, 369, 370, 371, 373, 372, 375, 374, 377, - 376, 378, 380, 379, 381, 383, 382, 384, 384, 385, - 385, 387, 386, 389, 388, 390, 390, 391, 391, 392, - 392, 392, 392, 392, 392, 392, 392, 392, 393, 395, - 394, 396, 397, 398, 399, 401, 400, 402, 402, 403, - 403, 405, 404, 407, 406, 408, 408, 409, 409, 409, - 409, 409, 409, 409, 411, 410, 413, 412, 415, 414, - 417, 416, 418, 418, 419, 419, 421, 420, 423, 422, - 424, 424, 425, 425, 425, 425, 425, 425, 425, 425, - 425, 425, 425, 427, 426, 428, 430, 429, 431, 432, - 434, 433, 435, 435, 436, 436, 438, 437, 440, 439, - 441, 441, 442, 442, 443, 443, 443, 443, 443, 443, - 443, 443, 443, 443, 443, 445, 444, 447, 446, 449, - 448, 451, 450, 453, 452, 455, 454, 457, 456, 459, - 458, 460, 460, 462, 461, 464, 463, 465, 465, 467, - 466, 468, 468, 469, 469, 470, 470, 470, 470, 470, - 470, 470, 471, 473, 472, 474, 476, 475, 477, 477, - 478, 478, 478, 478, 478, 478, 478, 478, 478, 480, - 479, 481, 481, 481, 482, 484, 483, 485, 486, 487, - 489, 488, 490, 490, 491, 491, 491, 491, 491, 493, - 492, 495, 494, 497, 496, 499, 498, 501, 500, 502, - 502, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 504, - 506, 505, 508, 507, 509, 511, 510, 512, 513, 515, - 514, 516, 516, 518, 517, 519, 520, 522, 521, 523, - 523, 523, 523, 523, 525, 524, 527, 526, 529, 528, - 531, 530, 533, 532, 535, 534, 537, 536, 539, 538, - 540, 540, 541, 543, 542, 545, 544, 547, 546, 548, - 548, 549, 551, 550, 552, 552, 554, 553, 555, 555, - 556, 556, 556, 556, 556, 556, 556, 557, 559, 558, - 561, 560, 562, 562, 564, 563, 565, 565, 566, 566, - 566, 566, 568, 567, 569, 570, 571 + 0, 178, 180, 179, 181, 179, 182, 179, 183, 179, + 184, 179, 185, 179, 186, 179, 187, 179, 188, 179, + 189, 179, 190, 179, 191, 179, 192, 179, 193, 179, + 194, 179, 195, 195, 195, 195, 195, 195, 195, 196, + 198, 197, 199, 200, 200, 201, 201, 203, 202, 204, + 204, 205, 205, 207, 206, 208, 208, 209, 209, 210, + 212, 211, 213, 213, 214, 214, 214, 214, 214, 214, + 216, 215, 218, 217, 219, 219, 220, 220, 220, 220, + 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, + 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, + 220, 220, 220, 220, 220, 220, 220, 220, 220, 222, + 221, 223, 224, 225, 226, 227, 229, 228, 231, 230, + 233, 232, 234, 234, 235, 235, 235, 235, 235, 237, + 236, 238, 240, 239, 242, 241, 244, 243, 245, 245, + 246, 246, 248, 247, 249, 249, 250, 250, 250, 250, + 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, + 250, 250, 250, 250, 250, 250, 252, 251, 253, 253, + 253, 253, 255, 254, 257, 256, 259, 258, 260, 262, + 261, 263, 264, 265, 266, 267, 268, 269, 270, 272, + 271, 273, 275, 274, 277, 276, 279, 278, 281, 280, + 282, 282, 283, 285, 284, 287, 286, 288, 288, 289, + 289, 290, 291, 293, 292, 294, 294, 295, 295, 295, + 296, 297, 299, 298, 301, 300, 302, 302, 303, 303, + 305, 304, 307, 306, 308, 308, 308, 309, 309, 311, + 310, 313, 312, 315, 314, 316, 316, 317, 317, 317, + 317, 317, 317, 318, 319, 320, 321, 322, 323, 325, + 324, 326, 326, 327, 327, 329, 328, 331, 330, 332, + 332, 333, 333, 333, 333, 333, 333, 333, 333, 333, + 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, + 333, 335, 334, 337, 336, 339, 338, 341, 340, 343, + 342, 345, 344, 346, 346, 346, 346, 347, 348, 350, + 349, 351, 351, 352, 352, 354, 353, 355, 355, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 358, 357, 360, 359, + 361, 361, 362, 362, 364, 363, 366, 365, 367, 367, + 368, 368, 369, 369, 369, 369, 369, 369, 369, 369, + 369, 369, 370, 371, 372, 374, 373, 376, 375, 378, + 377, 379, 381, 380, 382, 384, 383, 385, 385, 386, + 386, 388, 387, 390, 389, 391, 391, 392, 392, 393, + 393, 393, 393, 393, 393, 393, 393, 393, 394, 396, + 395, 397, 398, 399, 400, 402, 401, 403, 403, 404, + 404, 406, 405, 408, 407, 409, 409, 410, 410, 410, + 410, 410, 410, 410, 412, 411, 414, 413, 416, 415, + 418, 417, 419, 419, 420, 420, 422, 421, 424, 423, + 425, 425, 426, 426, 426, 426, 426, 426, 426, 426, + 426, 426, 426, 428, 427, 429, 431, 430, 432, 433, + 435, 434, 436, 436, 437, 437, 439, 438, 441, 440, + 442, 442, 443, 443, 444, 444, 444, 444, 444, 444, + 444, 444, 444, 444, 444, 446, 445, 448, 447, 450, + 449, 452, 451, 454, 453, 456, 455, 458, 457, 460, + 459, 461, 461, 463, 462, 465, 464, 466, 466, 468, + 467, 469, 469, 470, 470, 471, 471, 471, 471, 471, + 471, 471, 472, 474, 473, 475, 477, 476, 478, 478, + 479, 479, 479, 479, 479, 479, 479, 479, 479, 481, + 480, 482, 482, 482, 483, 485, 484, 486, 487, 488, + 490, 489, 491, 491, 492, 492, 492, 492, 492, 494, + 493, 496, 495, 498, 497, 500, 499, 502, 501, 503, + 503, 504, 504, 504, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, 504, 505, + 507, 506, 509, 508, 510, 512, 511, 513, 514, 516, + 515, 517, 517, 519, 518, 520, 521, 523, 522, 524, + 524, 524, 524, 524, 526, 525, 528, 527, 530, 529, + 532, 531, 534, 533, 536, 535, 538, 537, 540, 539, + 541, 541, 542, 542, 544, 543, 545, 547, 546, 549, + 548, 550, 550, 551, 553, 552, 554, 554, 556, 555, + 557, 557, 558, 558, 558, 558, 558, 558, 558, 559, + 561, 560, 563, 562, 564, 564, 566, 565, 567, 567, + 568, 568, 568, 568, 570, 569, 571, 572, 573 }; const unsigned char @@ -4872,11 +4866,11 @@ namespace isc { namespace dhcp { 4, 1, 1, 0, 4, 3, 3, 0, 4, 1, 1, 1, 1, 1, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 6, 0, 4, - 1, 3, 1, 0, 6, 0, 6, 0, 4, 1, - 3, 1, 0, 6, 1, 3, 0, 4, 1, 3, - 1, 1, 1, 1, 1, 1, 1, 3, 0, 4, - 0, 6, 1, 3, 0, 4, 1, 3, 1, 1, - 1, 1, 0, 4, 3, 3, 3 + 1, 3, 1, 1, 0, 6, 3, 0, 6, 0, + 4, 1, 3, 1, 0, 6, 1, 3, 0, 4, + 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, + 0, 4, 0, 6, 1, 3, 0, 4, 1, 3, + 1, 1, 1, 1, 0, 4, 3, 3, 3 }; @@ -4888,26 +4882,26 @@ namespace isc { namespace dhcp { { "\"end of file\"", "error", "$undefined", "\",\"", "\":\"", "\"[\"", "\"]\"", "\"{\"", "\"}\"", "\"null\"", "\"Dhcp6\"", "\"data-directory\"", - "\"config-control\"", "\"config-databases\"", "\"interfaces-config\"", - "\"interfaces\"", "\"re-detect\"", "\"lease-database\"", - "\"hosts-database\"", "\"hosts-databases\"", "\"type\"", "\"memfile\"", - "\"mysql\"", "\"postgresql\"", "\"cql\"", "\"user\"", "\"password\"", - "\"host\"", "\"port\"", "\"persist\"", "\"lfc-interval\"", - "\"readonly\"", "\"connect-timeout\"", "\"contact-points\"", - "\"max-reconnect-tries\"", "\"reconnect-wait-time\"", "\"keyspace\"", - "\"consistency\"", "\"serial-consistency\"", "\"request-timeout\"", - "\"tcp-keepalive\"", "\"tcp-nodelay\"", "\"preferred-lifetime\"", - "\"valid-lifetime\"", "\"renew-timer\"", "\"rebind-timer\"", - "\"decline-probation-period\"", "\"server-tag\"", "\"subnet6\"", - "\"option-def\"", "\"option-data\"", "\"name\"", "\"data\"", "\"code\"", - "\"space\"", "\"csv-format\"", "\"always-send\"", "\"record-types\"", - "\"encapsulate\"", "\"array\"", "\"pools\"", "\"pool\"", "\"pd-pools\"", - "\"prefix\"", "\"prefix-len\"", "\"excluded-prefix\"", - "\"excluded-prefix-len\"", "\"delegated-len\"", "\"user-context\"", - "\"comment\"", "\"subnet\"", "\"interface\"", "\"interface-id\"", - "\"id\"", "\"rapid-commit\"", "\"reservation-mode\"", "\"disabled\"", - "\"out-of-pool\"", "\"global\"", "\"all\"", "\"shared-networks\"", - "\"mac-sources\"", "\"relay-supplied-options\"", + "\"config-control\"", "\"config-databases\"", + "\"config-fetch-wait-time\"", "\"interfaces-config\"", "\"interfaces\"", + "\"re-detect\"", "\"lease-database\"", "\"hosts-database\"", + "\"hosts-databases\"", "\"type\"", "\"memfile\"", "\"mysql\"", + "\"postgresql\"", "\"cql\"", "\"user\"", "\"password\"", "\"host\"", + "\"port\"", "\"persist\"", "\"lfc-interval\"", "\"readonly\"", + "\"connect-timeout\"", "\"contact-points\"", "\"max-reconnect-tries\"", + "\"reconnect-wait-time\"", "\"keyspace\"", "\"consistency\"", + "\"serial-consistency\"", "\"request-timeout\"", "\"tcp-keepalive\"", + "\"tcp-nodelay\"", "\"preferred-lifetime\"", "\"valid-lifetime\"", + "\"renew-timer\"", "\"rebind-timer\"", "\"decline-probation-period\"", + "\"server-tag\"", "\"subnet6\"", "\"option-def\"", "\"option-data\"", + "\"name\"", "\"data\"", "\"code\"", "\"space\"", "\"csv-format\"", + "\"always-send\"", "\"record-types\"", "\"encapsulate\"", "\"array\"", + "\"pools\"", "\"pool\"", "\"pd-pools\"", "\"prefix\"", "\"prefix-len\"", + "\"excluded-prefix\"", "\"excluded-prefix-len\"", "\"delegated-len\"", + "\"user-context\"", "\"comment\"", "\"subnet\"", "\"interface\"", + "\"interface-id\"", "\"id\"", "\"rapid-commit\"", "\"reservation-mode\"", + "\"disabled\"", "\"out-of-pool\"", "\"global\"", "\"all\"", + "\"shared-networks\"", "\"mac-sources\"", "\"relay-supplied-options\"", "\"host-reservation-identifiers\"", "\"sanity-checks\"", "\"lease-checks\"", "\"client-classes\"", "\"require-client-classes\"", "\"test\"", "\"only-if-required\"", "\"client-class\"", @@ -5021,87 +5015,88 @@ namespace isc { namespace dhcp { "dhcp4_json_object", "$@118", "dhcpddns_json_object", "$@119", "control_agent_json_object", "$@120", "config_control", "$@121", "sub_config_control", "$@122", "config_control_params", - "config_control_param", "config_databases", "$@123", "logging_object", - "$@124", "sub_logging", "$@125", "logging_params", "logging_param", - "loggers", "$@126", "loggers_entries", "logger_entry", "$@127", - "logger_params", "logger_param", "debuglevel", "severity", "$@128", - "output_options_list", "$@129", "output_options_list_content", - "output_entry", "$@130", "output_params_list", "output_params", "output", - "$@131", "flush", "maxsize", "maxver", YY_NULLPTR + "config_control_param", "config_databases", "$@123", + "config_fetch_wait_time", "logging_object", "$@124", "sub_logging", + "$@125", "logging_params", "logging_param", "loggers", "$@126", + "loggers_entries", "logger_entry", "$@127", "logger_params", + "logger_param", "debuglevel", "severity", "$@128", "output_options_list", + "$@129", "output_options_list_content", "output_entry", "$@130", + "output_params_list", "output_params", "output", "$@131", "flush", + "maxsize", "maxver", YY_NULLPTR }; #if PARSER6_DEBUG const unsigned short Dhcp6Parser::yyrline_[] = { - 0, 260, 260, 260, 261, 261, 262, 262, 263, 263, - 264, 264, 265, 265, 266, 266, 267, 267, 268, 268, - 269, 269, 270, 270, 271, 271, 272, 272, 273, 273, - 274, 274, 282, 283, 284, 285, 286, 287, 288, 291, - 296, 296, 307, 310, 311, 314, 318, 325, 325, 332, - 333, 336, 340, 347, 347, 354, 355, 358, 362, 373, - 383, 383, 398, 399, 403, 404, 405, 406, 407, 408, - 411, 411, 426, 426, 435, 436, 441, 442, 443, 444, - 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, - 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 470, 471, 472, 473, 476, - 476, 484, 489, 494, 499, 504, 509, 509, 517, 517, - 528, 528, 537, 538, 541, 542, 543, 544, 545, 548, - 548, 558, 564, 564, 576, 576, 588, 588, 598, 599, - 602, 603, 606, 606, 616, 617, 620, 621, 622, 623, - 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, - 634, 635, 636, 637, 638, 639, 642, 642, 649, 650, - 651, 652, 655, 655, 663, 663, 671, 671, 679, 684, - 684, 692, 697, 702, 707, 712, 717, 722, 727, 732, - 732, 740, 745, 745, 753, 753, 761, 761, 769, 769, - 779, 780, 782, 784, 784, 802, 802, 812, 813, 816, - 817, 820, 825, 830, 830, 840, 841, 844, 845, 846, - 849, 854, 861, 861, 871, 871, 881, 882, 885, 886, - 889, 889, 899, 899, 909, 910, 911, 914, 915, 918, - 918, 926, 926, 934, 934, 945, 946, 949, 950, 951, - 952, 953, 954, 957, 962, 967, 972, 977, 982, 990, - 990, 1003, 1004, 1007, 1008, 1015, 1015, 1041, 1041, 1052, - 1053, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, - 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, - 1076, 1079, 1079, 1087, 1087, 1095, 1095, 1103, 1103, 1111, - 1111, 1121, 1121, 1128, 1129, 1130, 1131, 1134, 1139, 1147, - 1147, 1158, 1159, 1163, 1164, 1167, 1167, 1175, 1176, 1179, - 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, - 1190, 1191, 1192, 1193, 1194, 1195, 1202, 1202, 1215, 1215, - 1224, 1225, 1228, 1229, 1234, 1234, 1249, 1249, 1263, 1264, - 1267, 1268, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, - 1279, 1280, 1283, 1285, 1290, 1292, 1292, 1300, 1300, 1308, - 1308, 1316, 1318, 1318, 1326, 1335, 1335, 1347, 1348, 1353, - 1354, 1359, 1359, 1371, 1371, 1383, 1384, 1389, 1390, 1395, - 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1406, 1408, - 1408, 1416, 1418, 1420, 1425, 1433, 1433, 1445, 1446, 1449, - 1450, 1453, 1453, 1463, 1463, 1472, 1473, 1476, 1477, 1478, - 1479, 1480, 1481, 1482, 1485, 1485, 1493, 1493, 1518, 1518, - 1548, 1548, 1560, 1561, 1564, 1565, 1568, 1568, 1580, 1580, - 1592, 1593, 1596, 1597, 1598, 1599, 1600, 1601, 1602, 1603, - 1604, 1605, 1606, 1609, 1609, 1617, 1622, 1622, 1630, 1635, - 1643, 1643, 1653, 1654, 1657, 1658, 1661, 1661, 1670, 1670, - 1679, 1680, 1683, 1684, 1688, 1689, 1690, 1691, 1692, 1693, - 1694, 1695, 1696, 1697, 1698, 1701, 1701, 1711, 1711, 1721, - 1721, 1729, 1729, 1737, 1737, 1745, 1745, 1753, 1753, 1766, - 1766, 1776, 1777, 1780, 1780, 1791, 1791, 1801, 1802, 1805, - 1805, 1815, 1816, 1819, 1820, 1823, 1824, 1825, 1826, 1827, - 1828, 1829, 1832, 1834, 1834, 1842, 1850, 1850, 1862, 1863, - 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1877, - 1877, 1884, 1885, 1886, 1889, 1894, 1894, 1902, 1907, 1914, - 1921, 1921, 1931, 1932, 1935, 1936, 1937, 1938, 1939, 1942, - 1942, 1950, 1950, 1960, 1960, 2000, 2000, 2012, 2012, 2022, - 2023, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, - 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2046, - 2051, 2051, 2059, 2059, 2067, 2072, 2072, 2080, 2085, 2090, - 2090, 2098, 2099, 2102, 2102, 2110, 2115, 2120, 2120, 2128, - 2131, 2134, 2137, 2140, 2146, 2146, 2154, 2154, 2162, 2162, - 2172, 2172, 2179, 2179, 2186, 2186, 2195, 2195, 2206, 2206, - 2216, 2217, 2221, 2224, 2224, 2239, 2239, 2249, 2249, 2260, - 2261, 2265, 2269, 2269, 2281, 2282, 2286, 2286, 2294, 2295, - 2298, 2299, 2300, 2301, 2302, 2303, 2304, 2307, 2312, 2312, - 2320, 2320, 2330, 2331, 2334, 2334, 2342, 2343, 2346, 2347, - 2348, 2349, 2352, 2352, 2360, 2365, 2370 + 0, 262, 262, 262, 263, 263, 264, 264, 265, 265, + 266, 266, 267, 267, 268, 268, 269, 269, 270, 270, + 271, 271, 272, 272, 273, 273, 274, 274, 275, 275, + 276, 276, 284, 285, 286, 287, 288, 289, 290, 293, + 298, 298, 309, 312, 313, 316, 320, 327, 327, 334, + 335, 338, 342, 349, 349, 356, 357, 360, 364, 375, + 385, 385, 400, 401, 405, 406, 407, 408, 409, 410, + 413, 413, 428, 428, 437, 438, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 478, + 478, 486, 491, 496, 501, 506, 511, 511, 519, 519, + 530, 530, 539, 540, 543, 544, 545, 546, 547, 550, + 550, 560, 566, 566, 578, 578, 590, 590, 600, 601, + 604, 605, 608, 608, 618, 619, 622, 623, 624, 625, + 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 644, 644, 651, 652, + 653, 654, 657, 657, 665, 665, 673, 673, 681, 686, + 686, 694, 699, 704, 709, 714, 719, 724, 729, 734, + 734, 742, 747, 747, 755, 755, 763, 763, 771, 771, + 781, 782, 784, 786, 786, 804, 804, 814, 815, 818, + 819, 822, 827, 832, 832, 842, 843, 846, 847, 848, + 851, 856, 863, 863, 873, 873, 883, 884, 887, 888, + 891, 891, 901, 901, 911, 912, 913, 916, 917, 920, + 920, 928, 928, 936, 936, 947, 948, 951, 952, 953, + 954, 955, 956, 959, 964, 969, 974, 979, 984, 992, + 992, 1005, 1006, 1009, 1010, 1017, 1017, 1043, 1043, 1054, + 1055, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, + 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, + 1078, 1081, 1081, 1089, 1089, 1097, 1097, 1105, 1105, 1113, + 1113, 1123, 1123, 1130, 1131, 1132, 1133, 1136, 1141, 1149, + 1149, 1160, 1161, 1165, 1166, 1169, 1169, 1177, 1178, 1181, + 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, + 1192, 1193, 1194, 1195, 1196, 1197, 1204, 1204, 1217, 1217, + 1226, 1227, 1230, 1231, 1236, 1236, 1251, 1251, 1265, 1266, + 1269, 1270, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, + 1281, 1282, 1285, 1287, 1292, 1294, 1294, 1302, 1302, 1310, + 1310, 1318, 1320, 1320, 1328, 1337, 1337, 1349, 1350, 1355, + 1356, 1361, 1361, 1373, 1373, 1385, 1386, 1391, 1392, 1397, + 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1408, 1410, + 1410, 1418, 1420, 1422, 1427, 1435, 1435, 1447, 1448, 1451, + 1452, 1455, 1455, 1465, 1465, 1474, 1475, 1478, 1479, 1480, + 1481, 1482, 1483, 1484, 1487, 1487, 1495, 1495, 1520, 1520, + 1550, 1550, 1562, 1563, 1566, 1567, 1570, 1570, 1582, 1582, + 1594, 1595, 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, + 1606, 1607, 1608, 1611, 1611, 1619, 1624, 1624, 1632, 1637, + 1645, 1645, 1655, 1656, 1659, 1660, 1663, 1663, 1672, 1672, + 1681, 1682, 1685, 1686, 1690, 1691, 1692, 1693, 1694, 1695, + 1696, 1697, 1698, 1699, 1700, 1703, 1703, 1713, 1713, 1723, + 1723, 1731, 1731, 1739, 1739, 1747, 1747, 1755, 1755, 1768, + 1768, 1778, 1779, 1782, 1782, 1793, 1793, 1803, 1804, 1807, + 1807, 1817, 1818, 1821, 1822, 1825, 1826, 1827, 1828, 1829, + 1830, 1831, 1834, 1836, 1836, 1844, 1852, 1852, 1864, 1865, + 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1879, + 1879, 1886, 1887, 1888, 1891, 1896, 1896, 1904, 1909, 1916, + 1923, 1923, 1933, 1934, 1937, 1938, 1939, 1940, 1941, 1944, + 1944, 1952, 1952, 1962, 1962, 2002, 2002, 2014, 2014, 2024, + 2025, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, + 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2048, + 2053, 2053, 2061, 2061, 2069, 2074, 2074, 2082, 2087, 2092, + 2092, 2100, 2101, 2104, 2104, 2112, 2117, 2122, 2122, 2130, + 2133, 2136, 2139, 2142, 2148, 2148, 2156, 2156, 2164, 2164, + 2174, 2174, 2181, 2181, 2188, 2188, 2197, 2197, 2208, 2208, + 2218, 2219, 2223, 2224, 2227, 2227, 2237, 2247, 2247, 2257, + 2257, 2268, 2269, 2273, 2277, 2277, 2289, 2290, 2294, 2294, + 2302, 2303, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2315, + 2320, 2320, 2328, 2328, 2338, 2339, 2342, 2342, 2350, 2351, + 2354, 2355, 2356, 2357, 2360, 2360, 2368, 2373, 2378 }; // Print the state stack on the debug stream. @@ -5134,10 +5129,10 @@ namespace isc { namespace dhcp { #endif // PARSER6_DEBUG -#line 14 "dhcp6_parser.yy" // lalr1.cc:1242 +#line 14 "dhcp6_parser.yy" // lalr1.cc:1218 } } // isc::dhcp -#line 5140 "dhcp6_parser.cc" // lalr1.cc:1242 -#line 2375 "dhcp6_parser.yy" // lalr1.cc:1243 +#line 5135 "dhcp6_parser.cc" // lalr1.cc:1218 +#line 2383 "dhcp6_parser.yy" // lalr1.cc:1219 void diff --git a/src/bin/dhcp6/dhcp6_parser.h b/src/bin/dhcp6/dhcp6_parser.h index b6bf2fc1db..eff48a6015 100644 --- a/src/bin/dhcp6/dhcp6_parser.h +++ b/src/bin/dhcp6/dhcp6_parser.h @@ -1,8 +1,8 @@ -// A Bison parser, made by GNU Bison 3.3.2. +// A Bison parser, made by GNU Bison 3.2.1. // Skeleton interface for Bison LALR(1) parsers in C++ -// Copyright (C) 2002-2015, 2018-2019 Free Software Foundation, Inc. +// Copyright (C) 2002-2015, 2018 Free Software Foundation, Inc. // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -44,7 +44,7 @@ #ifndef YY_PARSER6_DHCP6_PARSER_H_INCLUDED # define YY_PARSER6_DHCP6_PARSER_H_INCLUDED // // "%code requires" blocks. -#line 17 "dhcp6_parser.yy" // lalr1.cc:401 +#line 17 "dhcp6_parser.yy" // lalr1.cc:404 #include #include @@ -56,7 +56,7 @@ using namespace isc::dhcp; using namespace isc::data; using namespace std; -#line 60 "dhcp6_parser.h" // lalr1.cc:401 +#line 60 "dhcp6_parser.h" // lalr1.cc:404 # include # include // std::abort @@ -65,14 +65,8 @@ using namespace std; # include # include -#if defined __cplusplus -# define YY_CPLUSPLUS __cplusplus -#else -# define YY_CPLUSPLUS 199711L -#endif - // Support move semantics when possible. -#if 201103L <= YY_CPLUSPLUS +#if defined __cplusplus && 201103L <= __cplusplus # define YY_MOVE std::move # define YY_MOVE_OR_COPY move # define YY_MOVE_REF(Type) Type&& @@ -85,22 +79,6 @@ using namespace std; # define YY_RVREF(Type) const Type& # define YY_COPY(Type) const Type& #endif - -// Support noexcept when possible. -#if 201103L <= YY_CPLUSPLUS -# define YY_NOEXCEPT noexcept -# define YY_NOTHROW -#else -# define YY_NOEXCEPT -# define YY_NOTHROW throw () -#endif - -// Support constexpr when possible. -#if 201703 <= YY_CPLUSPLUS -# define YY_CONSTEXPR constexpr -#else -# define YY_CONSTEXPR -#endif # include "location.hh" #include #ifndef YYASSERT @@ -178,79 +156,193 @@ using namespace std; # endif /* ! defined YYDEBUG */ #endif /* ! defined PARSER6_DEBUG */ -#line 14 "dhcp6_parser.yy" // lalr1.cc:401 +#line 14 "dhcp6_parser.yy" // lalr1.cc:404 namespace isc { namespace dhcp { -#line 184 "dhcp6_parser.h" // lalr1.cc:401 +#line 162 "dhcp6_parser.h" // lalr1.cc:404 + /// A stack with random access from its top. + template > + class stack + { + public: + // Hide our reversed order. + typedef typename S::reverse_iterator iterator; + typedef typename S::const_reverse_iterator const_iterator; + typedef typename S::size_type size_type; + stack (size_type n = 200) + : seq_ (n) + {} - /// A Bison parser. - class Dhcp6Parser + /// Random access. + /// + /// Index 0 returns the topmost element. + T& + operator[] (size_type i) + { + return seq_[size () - 1 - i]; + } + + /// Random access. + /// + /// Index 0 returns the topmost element. + T& + operator[] (int i) + { + return operator[] (size_type (i)); + } + + /// Random access. + /// + /// Index 0 returns the topmost element. + const T& + operator[] (size_type i) const + { + return seq_[size () - 1 - i]; + } + + /// Random access. + /// + /// Index 0 returns the topmost element. + const T& + operator[] (int i) const + { + return operator[] (size_type (i)); + } + + /// Steal the contents of \a t. + /// + /// Close to move-semantics. + void + push (YY_MOVE_REF (T) t) + { + seq_.push_back (T ()); + operator[](0).move (t); + } + + void + pop (int n = 1) + { + for (; 0 < n; --n) + seq_.pop_back (); + } + + void + clear () + { + seq_.clear (); + } + + size_type + size () const + { + return seq_.size (); + } + + const_iterator + begin () const + { + return seq_.rbegin (); + } + + const_iterator + end () const + { + return seq_.rend (); + } + + private: + stack (const stack&); + stack& operator= (const stack&); + /// The wrapped container. + S seq_; + }; + + /// Present a slice of the top of a stack. + template > + class slice { public: -#ifndef PARSER6_STYPE - /// A buffer to store and retrieve objects. + slice (const S& stack, int range) + : stack_ (stack) + , range_ (range) + {} + + const T& + operator[] (int i) const + { + return stack_[range_ - i]; + } + + private: + const S& stack_; + int range_; + }; + + + + /// A char[S] buffer to store and retrieve objects. /// /// Sort of a variant, but does not keep track of the nature /// of the stored data, since that knowledge is available - /// via the current parser state. - class semantic_type + /// via the current state. + template + struct variant { - public: /// Type of *this. - typedef semantic_type self_type; + typedef variant self_type; /// Empty construction. - semantic_type () YY_NOEXCEPT + variant () : yybuffer_ () , yytypeid_ (YY_NULLPTR) {} /// Construct and fill. template - semantic_type (YY_RVREF (T) t) + variant (YY_RVREF (T) t) : yytypeid_ (&typeid (T)) { - YYASSERT (sizeof (T) <= size); + YYASSERT (sizeof (T) <= S); new (yyas_ ()) T (YY_MOVE (t)); } /// Destruction, allowed only if empty. - ~semantic_type () YY_NOEXCEPT + ~variant () { YYASSERT (!yytypeid_); } -# if 201103L <= YY_CPLUSPLUS - /// Instantiate a \a T in here from \a t. - template - T& - emplace (U&&... u) - { - YYASSERT (!yytypeid_); - YYASSERT (sizeof (T) <= size); - yytypeid_ = & typeid (T); - return *new (yyas_ ()) T (std::forward (u)...); - } -# else /// Instantiate an empty \a T in here. template T& emplace () { YYASSERT (!yytypeid_); - YYASSERT (sizeof (T) <= size); + YYASSERT (sizeof (T) <= S); yytypeid_ = & typeid (T); return *new (yyas_ ()) T (); } +# if defined __cplusplus && 201103L <= __cplusplus + /// Instantiate a \a T in here from \a t. + template + T& + emplace (U&& u) + { + YYASSERT (!yytypeid_); + YYASSERT (sizeof (T) <= S); + yytypeid_ = & typeid (T); + return *new (yyas_ ()) T (std::forward (u)); + } +# else /// Instantiate a \a T in here from \a t. template T& emplace (const T& t) { YYASSERT (!yytypeid_); - YYASSERT (sizeof (T) <= size); + YYASSERT (sizeof (T) <= S); yytypeid_ = & typeid (T); return *new (yyas_ ()) T (t); } @@ -277,75 +369,75 @@ namespace isc { namespace dhcp { /// Accessor to a built \a T. template T& - as () YY_NOEXCEPT + as () { YYASSERT (yytypeid_); YYASSERT (*yytypeid_ == typeid (T)); - YYASSERT (sizeof (T) <= size); + YYASSERT (sizeof (T) <= S); return *yyas_ (); } /// Const accessor to a built \a T (for %printer). template const T& - as () const YY_NOEXCEPT + as () const { YYASSERT (yytypeid_); YYASSERT (*yytypeid_ == typeid (T)); - YYASSERT (sizeof (T) <= size); + YYASSERT (sizeof (T) <= S); return *yyas_ (); } - /// Swap the content with \a that, of same type. + /// Swap the content with \a other, of same type. /// /// Both variants must be built beforehand, because swapping the actual /// data requires reading it (with as()), and this is not possible on /// unconstructed variants: it would require some dynamic testing, which /// should not be the variant's responsibility. /// Swapping between built and (possibly) non-built is done with - /// self_type::move (). + /// variant::move (). template void - swap (self_type& that) YY_NOEXCEPT + swap (self_type& other) { YYASSERT (yytypeid_); - YYASSERT (*yytypeid_ == *that.yytypeid_); - std::swap (as (), that.as ()); + YYASSERT (*yytypeid_ == *other.yytypeid_); + std::swap (as (), other.as ()); } - /// Move the content of \a that to this. + /// Move the content of \a other to this. /// - /// Destroys \a that. + /// Destroys \a other. template void - move (self_type& that) + move (self_type& other) { -# if 201103L <= YY_CPLUSPLUS - emplace (std::move (that.as ())); +# if defined __cplusplus && 201103L <= __cplusplus + emplace (std::move (other.as ())); # else emplace (); - swap (that); + swap (other); # endif - that.destroy (); + other.destroy (); } -# if 201103L <= YY_CPLUSPLUS - /// Move the content of \a that to this. +# if defined __cplusplus && 201103L <= __cplusplus + /// Move the content of \a other to this. template void - move (self_type&& that) + move (self_type&& other) { - emplace (std::move (that.as ())); - that.destroy (); + emplace (std::move (other.as ())); + other.destroy (); } #endif - /// Copy the content of \a that to this. + /// Copy the content of \a other to this. template void - copy (const self_type& that) + copy (const self_type& other) { - emplace (that.as ()); + emplace (other.as ()); } /// Destroy the stored \a T. @@ -360,12 +452,12 @@ namespace isc { namespace dhcp { private: /// Prohibit blind copies. self_type& operator= (const self_type&); - semantic_type (const self_type&); + variant (const self_type&); /// Accessor to raw memory as \a T. template T* - yyas_ () YY_NOEXCEPT + yyas_ () { void *yyp = yybuffer_.yyraw; return static_cast (yyp); @@ -374,12 +466,30 @@ namespace isc { namespace dhcp { /// Const accessor to raw memory as \a T. template const T* - yyas_ () const YY_NOEXCEPT + yyas_ () const { const void *yyp = yybuffer_.yyraw; return static_cast (yyp); } + union + { + /// Strongest alignment constraints. + long double yyalign_me; + /// A buffer large enough to store any of the semantic values. + char yyraw[S]; + } yybuffer_; + + /// Whether the content is built: if defined, the name of the stored type. + const std::type_info *yytypeid_; + }; + + + /// A Bison parser. + class Dhcp6Parser + { + public: +#ifndef PARSER6_STYPE /// An auxiliary type to compute the largest semantic type. union union_type { @@ -403,24 +513,10 @@ namespace isc { namespace dhcp { // "constant string" char dummy5[sizeof (std::string)]; - }; - - /// The size of the largest semantic type. - enum { size = sizeof (union_type) }; - - /// A buffer to store semantic values. - union - { - /// Strongest alignment constraints. - long double yyalign_me; - /// A buffer large enough to store any of the semantic values. - char yyraw[size]; - } yybuffer_; - - /// Whether the content is built: if defined, the name of the stored type. - const std::type_info *yytypeid_; - }; +}; + /// Symbol semantic values. + typedef variant semantic_type; #else typedef PARSER6_STYPE semantic_type; #endif @@ -430,18 +526,7 @@ namespace isc { namespace dhcp { /// Syntax errors thrown from user actions. struct syntax_error : std::runtime_error { - syntax_error (const location_type& l, const std::string& m) - : std::runtime_error (m) - , location (l) - {} - - syntax_error (const syntax_error& s) - : std::runtime_error (s.what ()) - , location (s.location) - {} - - ~syntax_error () YY_NOEXCEPT YY_NOTHROW; - + syntax_error (const location_type& l, const std::string& m); location_type location; }; @@ -462,169 +547,170 @@ namespace isc { namespace dhcp { TOKEN_DATA_DIRECTORY = 266, TOKEN_CONFIG_CONTROL = 267, TOKEN_CONFIG_DATABASES = 268, - TOKEN_INTERFACES_CONFIG = 269, - TOKEN_INTERFACES = 270, - TOKEN_RE_DETECT = 271, - TOKEN_LEASE_DATABASE = 272, - TOKEN_HOSTS_DATABASE = 273, - TOKEN_HOSTS_DATABASES = 274, - TOKEN_TYPE = 275, - TOKEN_MEMFILE = 276, - TOKEN_MYSQL = 277, - TOKEN_POSTGRESQL = 278, - TOKEN_CQL = 279, - TOKEN_USER = 280, - TOKEN_PASSWORD = 281, - TOKEN_HOST = 282, - TOKEN_PORT = 283, - TOKEN_PERSIST = 284, - TOKEN_LFC_INTERVAL = 285, - TOKEN_READONLY = 286, - TOKEN_CONNECT_TIMEOUT = 287, - TOKEN_CONTACT_POINTS = 288, - TOKEN_MAX_RECONNECT_TRIES = 289, - TOKEN_RECONNECT_WAIT_TIME = 290, - TOKEN_KEYSPACE = 291, - TOKEN_CONSISTENCY = 292, - TOKEN_SERIAL_CONSISTENCY = 293, - TOKEN_REQUEST_TIMEOUT = 294, - TOKEN_TCP_KEEPALIVE = 295, - TOKEN_TCP_NODELAY = 296, - TOKEN_PREFERRED_LIFETIME = 297, - TOKEN_VALID_LIFETIME = 298, - TOKEN_RENEW_TIMER = 299, - TOKEN_REBIND_TIMER = 300, - TOKEN_DECLINE_PROBATION_PERIOD = 301, - TOKEN_SERVER_TAG = 302, - TOKEN_SUBNET6 = 303, - TOKEN_OPTION_DEF = 304, - TOKEN_OPTION_DATA = 305, - TOKEN_NAME = 306, - TOKEN_DATA = 307, - TOKEN_CODE = 308, - TOKEN_SPACE = 309, - TOKEN_CSV_FORMAT = 310, - TOKEN_ALWAYS_SEND = 311, - TOKEN_RECORD_TYPES = 312, - TOKEN_ENCAPSULATE = 313, - TOKEN_ARRAY = 314, - TOKEN_POOLS = 315, - TOKEN_POOL = 316, - TOKEN_PD_POOLS = 317, - TOKEN_PREFIX = 318, - TOKEN_PREFIX_LEN = 319, - TOKEN_EXCLUDED_PREFIX = 320, - TOKEN_EXCLUDED_PREFIX_LEN = 321, - TOKEN_DELEGATED_LEN = 322, - TOKEN_USER_CONTEXT = 323, - TOKEN_COMMENT = 324, - TOKEN_SUBNET = 325, - TOKEN_INTERFACE = 326, - TOKEN_INTERFACE_ID = 327, - TOKEN_ID = 328, - TOKEN_RAPID_COMMIT = 329, - TOKEN_RESERVATION_MODE = 330, - TOKEN_DISABLED = 331, - TOKEN_OUT_OF_POOL = 332, - TOKEN_GLOBAL = 333, - TOKEN_ALL = 334, - TOKEN_SHARED_NETWORKS = 335, - TOKEN_MAC_SOURCES = 336, - TOKEN_RELAY_SUPPLIED_OPTIONS = 337, - TOKEN_HOST_RESERVATION_IDENTIFIERS = 338, - TOKEN_SANITY_CHECKS = 339, - TOKEN_LEASE_CHECKS = 340, - TOKEN_CLIENT_CLASSES = 341, - TOKEN_REQUIRE_CLIENT_CLASSES = 342, - TOKEN_TEST = 343, - TOKEN_ONLY_IF_REQUIRED = 344, - TOKEN_CLIENT_CLASS = 345, - TOKEN_RESERVATIONS = 346, - TOKEN_IP_ADDRESSES = 347, - TOKEN_PREFIXES = 348, - TOKEN_DUID = 349, - TOKEN_HW_ADDRESS = 350, - TOKEN_HOSTNAME = 351, - TOKEN_FLEX_ID = 352, - TOKEN_RELAY = 353, - TOKEN_IP_ADDRESS = 354, - TOKEN_HOOKS_LIBRARIES = 355, - TOKEN_LIBRARY = 356, - TOKEN_PARAMETERS = 357, - TOKEN_EXPIRED_LEASES_PROCESSING = 358, - TOKEN_RECLAIM_TIMER_WAIT_TIME = 359, - TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 360, - TOKEN_HOLD_RECLAIMED_TIME = 361, - TOKEN_MAX_RECLAIM_LEASES = 362, - TOKEN_MAX_RECLAIM_TIME = 363, - TOKEN_UNWARNED_RECLAIM_CYCLES = 364, - TOKEN_SERVER_ID = 365, - TOKEN_LLT = 366, - TOKEN_EN = 367, - TOKEN_LL = 368, - TOKEN_IDENTIFIER = 369, - TOKEN_HTYPE = 370, - TOKEN_TIME = 371, - TOKEN_ENTERPRISE_ID = 372, - TOKEN_DHCP4O6_PORT = 373, - TOKEN_CONTROL_SOCKET = 374, - TOKEN_SOCKET_TYPE = 375, - TOKEN_SOCKET_NAME = 376, - TOKEN_DHCP_QUEUE_CONTROL = 377, - TOKEN_DHCP_DDNS = 378, - TOKEN_ENABLE_UPDATES = 379, - TOKEN_QUALIFYING_SUFFIX = 380, - TOKEN_SERVER_IP = 381, - TOKEN_SERVER_PORT = 382, - TOKEN_SENDER_IP = 383, - TOKEN_SENDER_PORT = 384, - TOKEN_MAX_QUEUE_SIZE = 385, - TOKEN_NCR_PROTOCOL = 386, - TOKEN_NCR_FORMAT = 387, - TOKEN_OVERRIDE_NO_UPDATE = 388, - TOKEN_OVERRIDE_CLIENT_UPDATE = 389, - TOKEN_REPLACE_CLIENT_NAME = 390, - TOKEN_GENERATED_PREFIX = 391, - TOKEN_UDP = 392, - TOKEN_TCP = 393, - TOKEN_JSON = 394, - TOKEN_WHEN_PRESENT = 395, - TOKEN_NEVER = 396, - TOKEN_ALWAYS = 397, - TOKEN_WHEN_NOT_PRESENT = 398, - TOKEN_HOSTNAME_CHAR_SET = 399, - TOKEN_HOSTNAME_CHAR_REPLACEMENT = 400, - TOKEN_LOGGING = 401, - TOKEN_LOGGERS = 402, - TOKEN_OUTPUT_OPTIONS = 403, - TOKEN_OUTPUT = 404, - TOKEN_DEBUGLEVEL = 405, - TOKEN_SEVERITY = 406, - TOKEN_FLUSH = 407, - TOKEN_MAXSIZE = 408, - TOKEN_MAXVER = 409, - TOKEN_DHCP4 = 410, - TOKEN_DHCPDDNS = 411, - TOKEN_CONTROL_AGENT = 412, - TOKEN_TOPLEVEL_JSON = 413, - TOKEN_TOPLEVEL_DHCP6 = 414, - TOKEN_SUB_DHCP6 = 415, - TOKEN_SUB_INTERFACES6 = 416, - TOKEN_SUB_SUBNET6 = 417, - TOKEN_SUB_POOL6 = 418, - TOKEN_SUB_PD_POOL = 419, - TOKEN_SUB_RESERVATION = 420, - TOKEN_SUB_OPTION_DEFS = 421, - TOKEN_SUB_OPTION_DEF = 422, - TOKEN_SUB_OPTION_DATA = 423, - TOKEN_SUB_HOOKS_LIBRARY = 424, - TOKEN_SUB_DHCP_DDNS = 425, - TOKEN_SUB_LOGGING = 426, - TOKEN_SUB_CONFIG_CONTROL = 427, - TOKEN_STRING = 428, - TOKEN_INTEGER = 429, - TOKEN_FLOAT = 430, - TOKEN_BOOLEAN = 431 + TOKEN_CONFIG_FETCH_WAIT_TIME = 269, + TOKEN_INTERFACES_CONFIG = 270, + TOKEN_INTERFACES = 271, + TOKEN_RE_DETECT = 272, + TOKEN_LEASE_DATABASE = 273, + TOKEN_HOSTS_DATABASE = 274, + TOKEN_HOSTS_DATABASES = 275, + TOKEN_TYPE = 276, + TOKEN_MEMFILE = 277, + TOKEN_MYSQL = 278, + TOKEN_POSTGRESQL = 279, + TOKEN_CQL = 280, + TOKEN_USER = 281, + TOKEN_PASSWORD = 282, + TOKEN_HOST = 283, + TOKEN_PORT = 284, + TOKEN_PERSIST = 285, + TOKEN_LFC_INTERVAL = 286, + TOKEN_READONLY = 287, + TOKEN_CONNECT_TIMEOUT = 288, + TOKEN_CONTACT_POINTS = 289, + TOKEN_MAX_RECONNECT_TRIES = 290, + TOKEN_RECONNECT_WAIT_TIME = 291, + TOKEN_KEYSPACE = 292, + TOKEN_CONSISTENCY = 293, + TOKEN_SERIAL_CONSISTENCY = 294, + TOKEN_REQUEST_TIMEOUT = 295, + TOKEN_TCP_KEEPALIVE = 296, + TOKEN_TCP_NODELAY = 297, + TOKEN_PREFERRED_LIFETIME = 298, + TOKEN_VALID_LIFETIME = 299, + TOKEN_RENEW_TIMER = 300, + TOKEN_REBIND_TIMER = 301, + TOKEN_DECLINE_PROBATION_PERIOD = 302, + TOKEN_SERVER_TAG = 303, + TOKEN_SUBNET6 = 304, + TOKEN_OPTION_DEF = 305, + TOKEN_OPTION_DATA = 306, + TOKEN_NAME = 307, + TOKEN_DATA = 308, + TOKEN_CODE = 309, + TOKEN_SPACE = 310, + TOKEN_CSV_FORMAT = 311, + TOKEN_ALWAYS_SEND = 312, + TOKEN_RECORD_TYPES = 313, + TOKEN_ENCAPSULATE = 314, + TOKEN_ARRAY = 315, + TOKEN_POOLS = 316, + TOKEN_POOL = 317, + TOKEN_PD_POOLS = 318, + TOKEN_PREFIX = 319, + TOKEN_PREFIX_LEN = 320, + TOKEN_EXCLUDED_PREFIX = 321, + TOKEN_EXCLUDED_PREFIX_LEN = 322, + TOKEN_DELEGATED_LEN = 323, + TOKEN_USER_CONTEXT = 324, + TOKEN_COMMENT = 325, + TOKEN_SUBNET = 326, + TOKEN_INTERFACE = 327, + TOKEN_INTERFACE_ID = 328, + TOKEN_ID = 329, + TOKEN_RAPID_COMMIT = 330, + TOKEN_RESERVATION_MODE = 331, + TOKEN_DISABLED = 332, + TOKEN_OUT_OF_POOL = 333, + TOKEN_GLOBAL = 334, + TOKEN_ALL = 335, + TOKEN_SHARED_NETWORKS = 336, + TOKEN_MAC_SOURCES = 337, + TOKEN_RELAY_SUPPLIED_OPTIONS = 338, + TOKEN_HOST_RESERVATION_IDENTIFIERS = 339, + TOKEN_SANITY_CHECKS = 340, + TOKEN_LEASE_CHECKS = 341, + TOKEN_CLIENT_CLASSES = 342, + TOKEN_REQUIRE_CLIENT_CLASSES = 343, + TOKEN_TEST = 344, + TOKEN_ONLY_IF_REQUIRED = 345, + TOKEN_CLIENT_CLASS = 346, + TOKEN_RESERVATIONS = 347, + TOKEN_IP_ADDRESSES = 348, + TOKEN_PREFIXES = 349, + TOKEN_DUID = 350, + TOKEN_HW_ADDRESS = 351, + TOKEN_HOSTNAME = 352, + TOKEN_FLEX_ID = 353, + TOKEN_RELAY = 354, + TOKEN_IP_ADDRESS = 355, + TOKEN_HOOKS_LIBRARIES = 356, + TOKEN_LIBRARY = 357, + TOKEN_PARAMETERS = 358, + TOKEN_EXPIRED_LEASES_PROCESSING = 359, + TOKEN_RECLAIM_TIMER_WAIT_TIME = 360, + TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 361, + TOKEN_HOLD_RECLAIMED_TIME = 362, + TOKEN_MAX_RECLAIM_LEASES = 363, + TOKEN_MAX_RECLAIM_TIME = 364, + TOKEN_UNWARNED_RECLAIM_CYCLES = 365, + TOKEN_SERVER_ID = 366, + TOKEN_LLT = 367, + TOKEN_EN = 368, + TOKEN_LL = 369, + TOKEN_IDENTIFIER = 370, + TOKEN_HTYPE = 371, + TOKEN_TIME = 372, + TOKEN_ENTERPRISE_ID = 373, + TOKEN_DHCP4O6_PORT = 374, + TOKEN_CONTROL_SOCKET = 375, + TOKEN_SOCKET_TYPE = 376, + TOKEN_SOCKET_NAME = 377, + TOKEN_DHCP_QUEUE_CONTROL = 378, + TOKEN_DHCP_DDNS = 379, + TOKEN_ENABLE_UPDATES = 380, + TOKEN_QUALIFYING_SUFFIX = 381, + TOKEN_SERVER_IP = 382, + TOKEN_SERVER_PORT = 383, + TOKEN_SENDER_IP = 384, + TOKEN_SENDER_PORT = 385, + TOKEN_MAX_QUEUE_SIZE = 386, + TOKEN_NCR_PROTOCOL = 387, + TOKEN_NCR_FORMAT = 388, + TOKEN_OVERRIDE_NO_UPDATE = 389, + TOKEN_OVERRIDE_CLIENT_UPDATE = 390, + TOKEN_REPLACE_CLIENT_NAME = 391, + TOKEN_GENERATED_PREFIX = 392, + TOKEN_UDP = 393, + TOKEN_TCP = 394, + TOKEN_JSON = 395, + TOKEN_WHEN_PRESENT = 396, + TOKEN_NEVER = 397, + TOKEN_ALWAYS = 398, + TOKEN_WHEN_NOT_PRESENT = 399, + TOKEN_HOSTNAME_CHAR_SET = 400, + TOKEN_HOSTNAME_CHAR_REPLACEMENT = 401, + TOKEN_LOGGING = 402, + TOKEN_LOGGERS = 403, + TOKEN_OUTPUT_OPTIONS = 404, + TOKEN_OUTPUT = 405, + TOKEN_DEBUGLEVEL = 406, + TOKEN_SEVERITY = 407, + TOKEN_FLUSH = 408, + TOKEN_MAXSIZE = 409, + TOKEN_MAXVER = 410, + TOKEN_DHCP4 = 411, + TOKEN_DHCPDDNS = 412, + TOKEN_CONTROL_AGENT = 413, + TOKEN_TOPLEVEL_JSON = 414, + TOKEN_TOPLEVEL_DHCP6 = 415, + TOKEN_SUB_DHCP6 = 416, + TOKEN_SUB_INTERFACES6 = 417, + TOKEN_SUB_SUBNET6 = 418, + TOKEN_SUB_POOL6 = 419, + TOKEN_SUB_PD_POOL = 420, + TOKEN_SUB_RESERVATION = 421, + TOKEN_SUB_OPTION_DEFS = 422, + TOKEN_SUB_OPTION_DEF = 423, + TOKEN_SUB_OPTION_DATA = 424, + TOKEN_SUB_HOOKS_LIBRARY = 425, + TOKEN_SUB_DHCP_DDNS = 426, + TOKEN_SUB_LOGGING = 427, + TOKEN_SUB_CONFIG_CONTROL = 428, + TOKEN_STRING = 429, + TOKEN_INTEGER = 430, + TOKEN_FLOAT = 431, + TOKEN_BOOLEAN = 432 }; }; @@ -653,154 +739,29 @@ namespace isc { namespace dhcp { typedef Base super_type; /// Default constructor. - basic_symbol () - : value () - , location () - {} - -#if 201103L <= YY_CPLUSPLUS - /// Move constructor. - basic_symbol (basic_symbol&& that); -#endif + basic_symbol (); + + /// Move or copy constructor. + basic_symbol (YY_RVREF (basic_symbol) other); - /// Copy constructor. - basic_symbol (const basic_symbol& that); /// Constructor for valueless symbols, and symbols from each type. -#if 201103L <= YY_CPLUSPLUS - basic_symbol (typename Base::kind_type t, location_type&& l) - : Base (t) - , location (std::move (l)) - {} -#else - basic_symbol (typename Base::kind_type t, const location_type& l) - : Base (t) - , location (l) - {} -#endif -#if 201103L <= YY_CPLUSPLUS - basic_symbol (typename Base::kind_type t, ElementPtr&& v, location_type&& l) - : Base (t) - , value (std::move (v)) - , location (std::move (l)) - {} -#else - basic_symbol (typename Base::kind_type t, const ElementPtr& v, const location_type& l) - : Base (t) - , value (v) - , location (l) - {} -#endif -#if 201103L <= YY_CPLUSPLUS - basic_symbol (typename Base::kind_type t, bool&& v, location_type&& l) - : Base (t) - , value (std::move (v)) - , location (std::move (l)) - {} -#else - basic_symbol (typename Base::kind_type t, const bool& v, const location_type& l) - : Base (t) - , value (v) - , location (l) - {} -#endif -#if 201103L <= YY_CPLUSPLUS - basic_symbol (typename Base::kind_type t, double&& v, location_type&& l) - : Base (t) - , value (std::move (v)) - , location (std::move (l)) - {} -#else - basic_symbol (typename Base::kind_type t, const double& v, const location_type& l) - : Base (t) - , value (v) - , location (l) - {} -#endif -#if 201103L <= YY_CPLUSPLUS - basic_symbol (typename Base::kind_type t, int64_t&& v, location_type&& l) - : Base (t) - , value (std::move (v)) - , location (std::move (l)) - {} -#else - basic_symbol (typename Base::kind_type t, const int64_t& v, const location_type& l) - : Base (t) - , value (v) - , location (l) - {} -#endif -#if 201103L <= YY_CPLUSPLUS - basic_symbol (typename Base::kind_type t, std::string&& v, location_type&& l) - : Base (t) - , value (std::move (v)) - , location (std::move (l)) - {} -#else - basic_symbol (typename Base::kind_type t, const std::string& v, const location_type& l) - : Base (t) - , value (v) - , location (l) - {} -#endif + basic_symbol (typename Base::kind_type t, YY_RVREF (location_type) l); + basic_symbol (typename Base::kind_type t, YY_RVREF (ElementPtr) v, YY_RVREF (location_type) l); + basic_symbol (typename Base::kind_type t, YY_RVREF (bool) v, YY_RVREF (location_type) l); + basic_symbol (typename Base::kind_type t, YY_RVREF (double) v, YY_RVREF (location_type) l); + basic_symbol (typename Base::kind_type t, YY_RVREF (int64_t) v, YY_RVREF (location_type) l); + basic_symbol (typename Base::kind_type t, YY_RVREF (std::string) v, YY_RVREF (location_type) l); + /// Destroy the symbol. - ~basic_symbol () - { - clear (); - } + ~basic_symbol (); /// Destroy contents, and record that is empty. - void clear () - { - // User destructor. - symbol_number_type yytype = this->type_get (); - basic_symbol& yysym = *this; - (void) yysym; - switch (yytype) - { - default: - break; - } - - // Type destructor. -switch (yytype) - { - case 194: // value - case 198: // map_value - case 252: // db_type - case 345: // hr_mode - case 481: // duid_type - case 516: // ncr_protocol_value - case 523: // replace_client_name_value - value.template destroy< ElementPtr > (); - break; - - case 176: // "boolean" - value.template destroy< bool > (); - break; - - case 175: // "floating point" - value.template destroy< double > (); - break; - - case 174: // "integer" - value.template destroy< int64_t > (); - break; - - case 173: // "constant string" - value.template destroy< std::string > (); - break; - - default: - break; - } - - Base::clear (); - } + void clear (); /// Whether empty. - bool empty () const YY_NOEXCEPT; + bool empty () const; /// Destructive move, \a s is emptied into this. void move (basic_symbol& s); @@ -812,9 +773,9 @@ switch (yytype) location_type location; private: -#if YY_CPLUSPLUS < 201103L +#if !defined __cplusplus || __cplusplus < 201103L /// Assignment operator. - basic_symbol& operator= (const basic_symbol& that); + basic_symbol& operator= (const basic_symbol& other); #endif }; @@ -824,13 +785,8 @@ switch (yytype) /// Default constructor. by_type (); -#if 201103L <= YY_CPLUSPLUS - /// Move constructor. - by_type (by_type&& that); -#endif - /// Copy constructor. - by_type (const by_type& that); + by_type (const by_type& other); /// The symbol type as needed by the constructor. typedef token_type kind_type; @@ -846,10 +802,10 @@ switch (yytype) /// The (internal) type number (corresponding to \a type). /// \a empty when empty. - symbol_number_type type_get () const YY_NOEXCEPT; + symbol_number_type type_get () const; /// The token. - token_type token () const YY_NOEXCEPT; + token_type token () const; /// The symbol type. /// \a empty_symbol when empty. @@ -858,81 +814,7 @@ switch (yytype) }; /// "External" symbols: returned by the scanner. - struct symbol_type : basic_symbol - { - /// Superclass. - typedef basic_symbol super_type; - - /// Empty symbol. - symbol_type () {} - - /// Constructor for valueless symbols, and symbols from each type. -#if 201103L <= YY_CPLUSPLUS - symbol_type (int tok, location_type l) - : super_type(token_type (tok), std::move (l)) - { - YYASSERT (tok == token::TOKEN_END || tok == token::TOKEN_COMMA || tok == token::TOKEN_COLON || tok == token::TOKEN_LSQUARE_BRACKET || tok == token::TOKEN_RSQUARE_BRACKET || tok == token::TOKEN_LCURLY_BRACKET || tok == token::TOKEN_RCURLY_BRACKET || tok == token::TOKEN_NULL_TYPE || tok == token::TOKEN_DHCP6 || tok == token::TOKEN_DATA_DIRECTORY || tok == token::TOKEN_CONFIG_CONTROL || tok == token::TOKEN_CONFIG_DATABASES || tok == token::TOKEN_INTERFACES_CONFIG || tok == token::TOKEN_INTERFACES || tok == token::TOKEN_RE_DETECT || tok == token::TOKEN_LEASE_DATABASE || tok == token::TOKEN_HOSTS_DATABASE || tok == token::TOKEN_HOSTS_DATABASES || tok == token::TOKEN_TYPE || tok == token::TOKEN_MEMFILE || tok == token::TOKEN_MYSQL || tok == token::TOKEN_POSTGRESQL || tok == token::TOKEN_CQL || tok == token::TOKEN_USER || tok == token::TOKEN_PASSWORD || tok == token::TOKEN_HOST || tok == token::TOKEN_PORT || tok == token::TOKEN_PERSIST || tok == token::TOKEN_LFC_INTERVAL || tok == token::TOKEN_READONLY || tok == token::TOKEN_CONNECT_TIMEOUT || tok == token::TOKEN_CONTACT_POINTS || tok == token::TOKEN_MAX_RECONNECT_TRIES || tok == token::TOKEN_RECONNECT_WAIT_TIME || tok == token::TOKEN_KEYSPACE || tok == token::TOKEN_CONSISTENCY || tok == token::TOKEN_SERIAL_CONSISTENCY || tok == token::TOKEN_REQUEST_TIMEOUT || tok == token::TOKEN_TCP_KEEPALIVE || tok == token::TOKEN_TCP_NODELAY || tok == token::TOKEN_PREFERRED_LIFETIME || tok == token::TOKEN_VALID_LIFETIME || tok == token::TOKEN_RENEW_TIMER || tok == token::TOKEN_REBIND_TIMER || tok == token::TOKEN_DECLINE_PROBATION_PERIOD || tok == token::TOKEN_SERVER_TAG || tok == token::TOKEN_SUBNET6 || tok == token::TOKEN_OPTION_DEF || tok == token::TOKEN_OPTION_DATA || tok == token::TOKEN_NAME || tok == token::TOKEN_DATA || tok == token::TOKEN_CODE || tok == token::TOKEN_SPACE || tok == token::TOKEN_CSV_FORMAT || tok == token::TOKEN_ALWAYS_SEND || tok == token::TOKEN_RECORD_TYPES || tok == token::TOKEN_ENCAPSULATE || tok == token::TOKEN_ARRAY || tok == token::TOKEN_POOLS || tok == token::TOKEN_POOL || tok == token::TOKEN_PD_POOLS || tok == token::TOKEN_PREFIX || tok == token::TOKEN_PREFIX_LEN || tok == token::TOKEN_EXCLUDED_PREFIX || tok == token::TOKEN_EXCLUDED_PREFIX_LEN || tok == token::TOKEN_DELEGATED_LEN || tok == token::TOKEN_USER_CONTEXT || tok == token::TOKEN_COMMENT || tok == token::TOKEN_SUBNET || tok == token::TOKEN_INTERFACE || tok == token::TOKEN_INTERFACE_ID || tok == token::TOKEN_ID || tok == token::TOKEN_RAPID_COMMIT || tok == token::TOKEN_RESERVATION_MODE || tok == token::TOKEN_DISABLED || tok == token::TOKEN_OUT_OF_POOL || tok == token::TOKEN_GLOBAL || tok == token::TOKEN_ALL || tok == token::TOKEN_SHARED_NETWORKS || tok == token::TOKEN_MAC_SOURCES || tok == token::TOKEN_RELAY_SUPPLIED_OPTIONS || tok == token::TOKEN_HOST_RESERVATION_IDENTIFIERS || tok == token::TOKEN_SANITY_CHECKS || tok == token::TOKEN_LEASE_CHECKS || tok == token::TOKEN_CLIENT_CLASSES || tok == token::TOKEN_REQUIRE_CLIENT_CLASSES || tok == token::TOKEN_TEST || tok == token::TOKEN_ONLY_IF_REQUIRED || tok == token::TOKEN_CLIENT_CLASS || tok == token::TOKEN_RESERVATIONS || tok == token::TOKEN_IP_ADDRESSES || tok == token::TOKEN_PREFIXES || tok == token::TOKEN_DUID || tok == token::TOKEN_HW_ADDRESS || tok == token::TOKEN_HOSTNAME || tok == token::TOKEN_FLEX_ID || tok == token::TOKEN_RELAY || tok == token::TOKEN_IP_ADDRESS || tok == token::TOKEN_HOOKS_LIBRARIES || tok == token::TOKEN_LIBRARY || tok == token::TOKEN_PARAMETERS || tok == token::TOKEN_EXPIRED_LEASES_PROCESSING || tok == token::TOKEN_RECLAIM_TIMER_WAIT_TIME || tok == token::TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME || tok == token::TOKEN_HOLD_RECLAIMED_TIME || tok == token::TOKEN_MAX_RECLAIM_LEASES || tok == token::TOKEN_MAX_RECLAIM_TIME || tok == token::TOKEN_UNWARNED_RECLAIM_CYCLES || tok == token::TOKEN_SERVER_ID || tok == token::TOKEN_LLT || tok == token::TOKEN_EN || tok == token::TOKEN_LL || tok == token::TOKEN_IDENTIFIER || tok == token::TOKEN_HTYPE || tok == token::TOKEN_TIME || tok == token::TOKEN_ENTERPRISE_ID || tok == token::TOKEN_DHCP4O6_PORT || tok == token::TOKEN_CONTROL_SOCKET || tok == token::TOKEN_SOCKET_TYPE || tok == token::TOKEN_SOCKET_NAME || tok == token::TOKEN_DHCP_QUEUE_CONTROL || tok == token::TOKEN_DHCP_DDNS || tok == token::TOKEN_ENABLE_UPDATES || tok == token::TOKEN_QUALIFYING_SUFFIX || tok == token::TOKEN_SERVER_IP || tok == token::TOKEN_SERVER_PORT || tok == token::TOKEN_SENDER_IP || tok == token::TOKEN_SENDER_PORT || tok == token::TOKEN_MAX_QUEUE_SIZE || tok == token::TOKEN_NCR_PROTOCOL || tok == token::TOKEN_NCR_FORMAT || tok == token::TOKEN_OVERRIDE_NO_UPDATE || tok == token::TOKEN_OVERRIDE_CLIENT_UPDATE || tok == token::TOKEN_REPLACE_CLIENT_NAME || tok == token::TOKEN_GENERATED_PREFIX || tok == token::TOKEN_UDP || tok == token::TOKEN_TCP || tok == token::TOKEN_JSON || tok == token::TOKEN_WHEN_PRESENT || tok == token::TOKEN_NEVER || tok == token::TOKEN_ALWAYS || tok == token::TOKEN_WHEN_NOT_PRESENT || tok == token::TOKEN_HOSTNAME_CHAR_SET || tok == token::TOKEN_HOSTNAME_CHAR_REPLACEMENT || tok == token::TOKEN_LOGGING || tok == token::TOKEN_LOGGERS || tok == token::TOKEN_OUTPUT_OPTIONS || tok == token::TOKEN_OUTPUT || tok == token::TOKEN_DEBUGLEVEL || tok == token::TOKEN_SEVERITY || tok == token::TOKEN_FLUSH || tok == token::TOKEN_MAXSIZE || tok == token::TOKEN_MAXVER || tok == token::TOKEN_DHCP4 || tok == token::TOKEN_DHCPDDNS || tok == token::TOKEN_CONTROL_AGENT || tok == token::TOKEN_TOPLEVEL_JSON || tok == token::TOKEN_TOPLEVEL_DHCP6 || tok == token::TOKEN_SUB_DHCP6 || tok == token::TOKEN_SUB_INTERFACES6 || tok == token::TOKEN_SUB_SUBNET6 || tok == token::TOKEN_SUB_POOL6 || tok == token::TOKEN_SUB_PD_POOL || tok == token::TOKEN_SUB_RESERVATION || tok == token::TOKEN_SUB_OPTION_DEFS || tok == token::TOKEN_SUB_OPTION_DEF || tok == token::TOKEN_SUB_OPTION_DATA || tok == token::TOKEN_SUB_HOOKS_LIBRARY || tok == token::TOKEN_SUB_DHCP_DDNS || tok == token::TOKEN_SUB_LOGGING || tok == token::TOKEN_SUB_CONFIG_CONTROL); - } -#else - symbol_type (int tok, const location_type& l) - : super_type(token_type (tok), l) - { - YYASSERT (tok == token::TOKEN_END || tok == token::TOKEN_COMMA || tok == token::TOKEN_COLON || tok == token::TOKEN_LSQUARE_BRACKET || tok == token::TOKEN_RSQUARE_BRACKET || tok == token::TOKEN_LCURLY_BRACKET || tok == token::TOKEN_RCURLY_BRACKET || tok == token::TOKEN_NULL_TYPE || tok == token::TOKEN_DHCP6 || tok == token::TOKEN_DATA_DIRECTORY || tok == token::TOKEN_CONFIG_CONTROL || tok == token::TOKEN_CONFIG_DATABASES || tok == token::TOKEN_INTERFACES_CONFIG || tok == token::TOKEN_INTERFACES || tok == token::TOKEN_RE_DETECT || tok == token::TOKEN_LEASE_DATABASE || tok == token::TOKEN_HOSTS_DATABASE || tok == token::TOKEN_HOSTS_DATABASES || tok == token::TOKEN_TYPE || tok == token::TOKEN_MEMFILE || tok == token::TOKEN_MYSQL || tok == token::TOKEN_POSTGRESQL || tok == token::TOKEN_CQL || tok == token::TOKEN_USER || tok == token::TOKEN_PASSWORD || tok == token::TOKEN_HOST || tok == token::TOKEN_PORT || tok == token::TOKEN_PERSIST || tok == token::TOKEN_LFC_INTERVAL || tok == token::TOKEN_READONLY || tok == token::TOKEN_CONNECT_TIMEOUT || tok == token::TOKEN_CONTACT_POINTS || tok == token::TOKEN_MAX_RECONNECT_TRIES || tok == token::TOKEN_RECONNECT_WAIT_TIME || tok == token::TOKEN_KEYSPACE || tok == token::TOKEN_CONSISTENCY || tok == token::TOKEN_SERIAL_CONSISTENCY || tok == token::TOKEN_REQUEST_TIMEOUT || tok == token::TOKEN_TCP_KEEPALIVE || tok == token::TOKEN_TCP_NODELAY || tok == token::TOKEN_PREFERRED_LIFETIME || tok == token::TOKEN_VALID_LIFETIME || tok == token::TOKEN_RENEW_TIMER || tok == token::TOKEN_REBIND_TIMER || tok == token::TOKEN_DECLINE_PROBATION_PERIOD || tok == token::TOKEN_SERVER_TAG || tok == token::TOKEN_SUBNET6 || tok == token::TOKEN_OPTION_DEF || tok == token::TOKEN_OPTION_DATA || tok == token::TOKEN_NAME || tok == token::TOKEN_DATA || tok == token::TOKEN_CODE || tok == token::TOKEN_SPACE || tok == token::TOKEN_CSV_FORMAT || tok == token::TOKEN_ALWAYS_SEND || tok == token::TOKEN_RECORD_TYPES || tok == token::TOKEN_ENCAPSULATE || tok == token::TOKEN_ARRAY || tok == token::TOKEN_POOLS || tok == token::TOKEN_POOL || tok == token::TOKEN_PD_POOLS || tok == token::TOKEN_PREFIX || tok == token::TOKEN_PREFIX_LEN || tok == token::TOKEN_EXCLUDED_PREFIX || tok == token::TOKEN_EXCLUDED_PREFIX_LEN || tok == token::TOKEN_DELEGATED_LEN || tok == token::TOKEN_USER_CONTEXT || tok == token::TOKEN_COMMENT || tok == token::TOKEN_SUBNET || tok == token::TOKEN_INTERFACE || tok == token::TOKEN_INTERFACE_ID || tok == token::TOKEN_ID || tok == token::TOKEN_RAPID_COMMIT || tok == token::TOKEN_RESERVATION_MODE || tok == token::TOKEN_DISABLED || tok == token::TOKEN_OUT_OF_POOL || tok == token::TOKEN_GLOBAL || tok == token::TOKEN_ALL || tok == token::TOKEN_SHARED_NETWORKS || tok == token::TOKEN_MAC_SOURCES || tok == token::TOKEN_RELAY_SUPPLIED_OPTIONS || tok == token::TOKEN_HOST_RESERVATION_IDENTIFIERS || tok == token::TOKEN_SANITY_CHECKS || tok == token::TOKEN_LEASE_CHECKS || tok == token::TOKEN_CLIENT_CLASSES || tok == token::TOKEN_REQUIRE_CLIENT_CLASSES || tok == token::TOKEN_TEST || tok == token::TOKEN_ONLY_IF_REQUIRED || tok == token::TOKEN_CLIENT_CLASS || tok == token::TOKEN_RESERVATIONS || tok == token::TOKEN_IP_ADDRESSES || tok == token::TOKEN_PREFIXES || tok == token::TOKEN_DUID || tok == token::TOKEN_HW_ADDRESS || tok == token::TOKEN_HOSTNAME || tok == token::TOKEN_FLEX_ID || tok == token::TOKEN_RELAY || tok == token::TOKEN_IP_ADDRESS || tok == token::TOKEN_HOOKS_LIBRARIES || tok == token::TOKEN_LIBRARY || tok == token::TOKEN_PARAMETERS || tok == token::TOKEN_EXPIRED_LEASES_PROCESSING || tok == token::TOKEN_RECLAIM_TIMER_WAIT_TIME || tok == token::TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME || tok == token::TOKEN_HOLD_RECLAIMED_TIME || tok == token::TOKEN_MAX_RECLAIM_LEASES || tok == token::TOKEN_MAX_RECLAIM_TIME || tok == token::TOKEN_UNWARNED_RECLAIM_CYCLES || tok == token::TOKEN_SERVER_ID || tok == token::TOKEN_LLT || tok == token::TOKEN_EN || tok == token::TOKEN_LL || tok == token::TOKEN_IDENTIFIER || tok == token::TOKEN_HTYPE || tok == token::TOKEN_TIME || tok == token::TOKEN_ENTERPRISE_ID || tok == token::TOKEN_DHCP4O6_PORT || tok == token::TOKEN_CONTROL_SOCKET || tok == token::TOKEN_SOCKET_TYPE || tok == token::TOKEN_SOCKET_NAME || tok == token::TOKEN_DHCP_QUEUE_CONTROL || tok == token::TOKEN_DHCP_DDNS || tok == token::TOKEN_ENABLE_UPDATES || tok == token::TOKEN_QUALIFYING_SUFFIX || tok == token::TOKEN_SERVER_IP || tok == token::TOKEN_SERVER_PORT || tok == token::TOKEN_SENDER_IP || tok == token::TOKEN_SENDER_PORT || tok == token::TOKEN_MAX_QUEUE_SIZE || tok == token::TOKEN_NCR_PROTOCOL || tok == token::TOKEN_NCR_FORMAT || tok == token::TOKEN_OVERRIDE_NO_UPDATE || tok == token::TOKEN_OVERRIDE_CLIENT_UPDATE || tok == token::TOKEN_REPLACE_CLIENT_NAME || tok == token::TOKEN_GENERATED_PREFIX || tok == token::TOKEN_UDP || tok == token::TOKEN_TCP || tok == token::TOKEN_JSON || tok == token::TOKEN_WHEN_PRESENT || tok == token::TOKEN_NEVER || tok == token::TOKEN_ALWAYS || tok == token::TOKEN_WHEN_NOT_PRESENT || tok == token::TOKEN_HOSTNAME_CHAR_SET || tok == token::TOKEN_HOSTNAME_CHAR_REPLACEMENT || tok == token::TOKEN_LOGGING || tok == token::TOKEN_LOGGERS || tok == token::TOKEN_OUTPUT_OPTIONS || tok == token::TOKEN_OUTPUT || tok == token::TOKEN_DEBUGLEVEL || tok == token::TOKEN_SEVERITY || tok == token::TOKEN_FLUSH || tok == token::TOKEN_MAXSIZE || tok == token::TOKEN_MAXVER || tok == token::TOKEN_DHCP4 || tok == token::TOKEN_DHCPDDNS || tok == token::TOKEN_CONTROL_AGENT || tok == token::TOKEN_TOPLEVEL_JSON || tok == token::TOKEN_TOPLEVEL_DHCP6 || tok == token::TOKEN_SUB_DHCP6 || tok == token::TOKEN_SUB_INTERFACES6 || tok == token::TOKEN_SUB_SUBNET6 || tok == token::TOKEN_SUB_POOL6 || tok == token::TOKEN_SUB_PD_POOL || tok == token::TOKEN_SUB_RESERVATION || tok == token::TOKEN_SUB_OPTION_DEFS || tok == token::TOKEN_SUB_OPTION_DEF || tok == token::TOKEN_SUB_OPTION_DATA || tok == token::TOKEN_SUB_HOOKS_LIBRARY || tok == token::TOKEN_SUB_DHCP_DDNS || tok == token::TOKEN_SUB_LOGGING || tok == token::TOKEN_SUB_CONFIG_CONTROL); - } -#endif -#if 201103L <= YY_CPLUSPLUS - symbol_type (int tok, bool v, location_type l) - : super_type(token_type (tok), std::move (v), std::move (l)) - { - YYASSERT (tok == token::TOKEN_BOOLEAN); - } -#else - symbol_type (int tok, const bool& v, const location_type& l) - : super_type(token_type (tok), v, l) - { - YYASSERT (tok == token::TOKEN_BOOLEAN); - } -#endif -#if 201103L <= YY_CPLUSPLUS - symbol_type (int tok, double v, location_type l) - : super_type(token_type (tok), std::move (v), std::move (l)) - { - YYASSERT (tok == token::TOKEN_FLOAT); - } -#else - symbol_type (int tok, const double& v, const location_type& l) - : super_type(token_type (tok), v, l) - { - YYASSERT (tok == token::TOKEN_FLOAT); - } -#endif -#if 201103L <= YY_CPLUSPLUS - symbol_type (int tok, int64_t v, location_type l) - : super_type(token_type (tok), std::move (v), std::move (l)) - { - YYASSERT (tok == token::TOKEN_INTEGER); - } -#else - symbol_type (int tok, const int64_t& v, const location_type& l) - : super_type(token_type (tok), v, l) - { - YYASSERT (tok == token::TOKEN_INTEGER); - } -#endif -#if 201103L <= YY_CPLUSPLUS - symbol_type (int tok, std::string v, location_type l) - : super_type(token_type (tok), std::move (v), std::move (l)) - { - YYASSERT (tok == token::TOKEN_STRING); - } -#else - symbol_type (int tok, const std::string& v, const location_type& l) - : super_type(token_type (tok), v, l) - { - YYASSERT (tok == token::TOKEN_STRING); - } -#endif - }; + typedef basic_symbol symbol_type; /// Build a parser object. Dhcp6Parser (isc::dhcp::Parser6Context& ctx_yyarg); @@ -968,3231 +850,2479 @@ switch (yytype) /// Report a syntax error. void error (const syntax_error& err); - // Implementation of make_symbol for each symbol type. -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_END (location_type l) - { - return symbol_type (token::TOKEN_END, std::move (l)); - } -#else - static - symbol_type - make_END (const location_type& l) - { - return symbol_type (token::TOKEN_END, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_COMMA (location_type l) - { - return symbol_type (token::TOKEN_COMMA, std::move (l)); - } -#else - static - symbol_type - make_COMMA (const location_type& l) - { - return symbol_type (token::TOKEN_COMMA, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_COLON (location_type l) - { - return symbol_type (token::TOKEN_COLON, std::move (l)); - } -#else - static - symbol_type - make_COLON (const location_type& l) - { - return symbol_type (token::TOKEN_COLON, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_LSQUARE_BRACKET (location_type l) - { - return symbol_type (token::TOKEN_LSQUARE_BRACKET, std::move (l)); - } -#else - static - symbol_type - make_LSQUARE_BRACKET (const location_type& l) - { - return symbol_type (token::TOKEN_LSQUARE_BRACKET, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_RSQUARE_BRACKET (location_type l) - { - return symbol_type (token::TOKEN_RSQUARE_BRACKET, std::move (l)); - } -#else - static - symbol_type - make_RSQUARE_BRACKET (const location_type& l) - { - return symbol_type (token::TOKEN_RSQUARE_BRACKET, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_LCURLY_BRACKET (location_type l) - { - return symbol_type (token::TOKEN_LCURLY_BRACKET, std::move (l)); - } -#else - static - symbol_type - make_LCURLY_BRACKET (const location_type& l) - { - return symbol_type (token::TOKEN_LCURLY_BRACKET, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_RCURLY_BRACKET (location_type l) - { - return symbol_type (token::TOKEN_RCURLY_BRACKET, std::move (l)); - } -#else - static - symbol_type - make_RCURLY_BRACKET (const location_type& l) - { - return symbol_type (token::TOKEN_RCURLY_BRACKET, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_NULL_TYPE (location_type l) - { - return symbol_type (token::TOKEN_NULL_TYPE, std::move (l)); - } -#else - static - symbol_type - make_NULL_TYPE (const location_type& l) - { - return symbol_type (token::TOKEN_NULL_TYPE, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_DHCP6 (location_type l) - { - return symbol_type (token::TOKEN_DHCP6, std::move (l)); - } -#else - static - symbol_type - make_DHCP6 (const location_type& l) - { - return symbol_type (token::TOKEN_DHCP6, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_DATA_DIRECTORY (location_type l) - { - return symbol_type (token::TOKEN_DATA_DIRECTORY, std::move (l)); - } -#else - static - symbol_type - make_DATA_DIRECTORY (const location_type& l) - { - return symbol_type (token::TOKEN_DATA_DIRECTORY, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_CONFIG_CONTROL (location_type l) - { - return symbol_type (token::TOKEN_CONFIG_CONTROL, std::move (l)); - } -#else - static - symbol_type - make_CONFIG_CONTROL (const location_type& l) - { - return symbol_type (token::TOKEN_CONFIG_CONTROL, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_CONFIG_DATABASES (location_type l) - { - return symbol_type (token::TOKEN_CONFIG_DATABASES, std::move (l)); - } -#else - static - symbol_type - make_CONFIG_DATABASES (const location_type& l) - { - return symbol_type (token::TOKEN_CONFIG_DATABASES, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_INTERFACES_CONFIG (location_type l) - { - return symbol_type (token::TOKEN_INTERFACES_CONFIG, std::move (l)); - } -#else - static - symbol_type - make_INTERFACES_CONFIG (const location_type& l) - { - return symbol_type (token::TOKEN_INTERFACES_CONFIG, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_INTERFACES (location_type l) - { - return symbol_type (token::TOKEN_INTERFACES, std::move (l)); - } -#else - static - symbol_type - make_INTERFACES (const location_type& l) - { - return symbol_type (token::TOKEN_INTERFACES, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_RE_DETECT (location_type l) - { - return symbol_type (token::TOKEN_RE_DETECT, std::move (l)); - } -#else - static - symbol_type - make_RE_DETECT (const location_type& l) - { - return symbol_type (token::TOKEN_RE_DETECT, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_LEASE_DATABASE (location_type l) - { - return symbol_type (token::TOKEN_LEASE_DATABASE, std::move (l)); - } -#else - static - symbol_type - make_LEASE_DATABASE (const location_type& l) - { - return symbol_type (token::TOKEN_LEASE_DATABASE, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_HOSTS_DATABASE (location_type l) - { - return symbol_type (token::TOKEN_HOSTS_DATABASE, std::move (l)); - } -#else - static - symbol_type - make_HOSTS_DATABASE (const location_type& l) - { - return symbol_type (token::TOKEN_HOSTS_DATABASE, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_HOSTS_DATABASES (location_type l) - { - return symbol_type (token::TOKEN_HOSTS_DATABASES, std::move (l)); - } -#else - static - symbol_type - make_HOSTS_DATABASES (const location_type& l) - { - return symbol_type (token::TOKEN_HOSTS_DATABASES, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_TYPE (location_type l) - { - return symbol_type (token::TOKEN_TYPE, std::move (l)); - } -#else - static - symbol_type - make_TYPE (const location_type& l) - { - return symbol_type (token::TOKEN_TYPE, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_MEMFILE (location_type l) - { - return symbol_type (token::TOKEN_MEMFILE, std::move (l)); - } -#else - static - symbol_type - make_MEMFILE (const location_type& l) - { - return symbol_type (token::TOKEN_MEMFILE, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_MYSQL (location_type l) - { - return symbol_type (token::TOKEN_MYSQL, std::move (l)); - } -#else - static - symbol_type - make_MYSQL (const location_type& l) - { - return symbol_type (token::TOKEN_MYSQL, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_POSTGRESQL (location_type l) - { - return symbol_type (token::TOKEN_POSTGRESQL, std::move (l)); - } -#else - static - symbol_type - make_POSTGRESQL (const location_type& l) - { - return symbol_type (token::TOKEN_POSTGRESQL, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_CQL (location_type l) - { - return symbol_type (token::TOKEN_CQL, std::move (l)); - } -#else - static - symbol_type - make_CQL (const location_type& l) - { - return symbol_type (token::TOKEN_CQL, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_USER (location_type l) - { - return symbol_type (token::TOKEN_USER, std::move (l)); - } -#else - static - symbol_type - make_USER (const location_type& l) - { - return symbol_type (token::TOKEN_USER, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_PASSWORD (location_type l) - { - return symbol_type (token::TOKEN_PASSWORD, std::move (l)); - } -#else - static - symbol_type - make_PASSWORD (const location_type& l) - { - return symbol_type (token::TOKEN_PASSWORD, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_HOST (location_type l) - { - return symbol_type (token::TOKEN_HOST, std::move (l)); - } -#else - static - symbol_type - make_HOST (const location_type& l) - { - return symbol_type (token::TOKEN_HOST, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_PORT (location_type l) - { - return symbol_type (token::TOKEN_PORT, std::move (l)); - } -#else - static - symbol_type - make_PORT (const location_type& l) - { - return symbol_type (token::TOKEN_PORT, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_PERSIST (location_type l) - { - return symbol_type (token::TOKEN_PERSIST, std::move (l)); - } -#else - static - symbol_type - make_PERSIST (const location_type& l) - { - return symbol_type (token::TOKEN_PERSIST, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_LFC_INTERVAL (location_type l) - { - return symbol_type (token::TOKEN_LFC_INTERVAL, std::move (l)); - } -#else - static - symbol_type - make_LFC_INTERVAL (const location_type& l) - { - return symbol_type (token::TOKEN_LFC_INTERVAL, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_READONLY (location_type l) - { - return symbol_type (token::TOKEN_READONLY, std::move (l)); - } -#else - static - symbol_type - make_READONLY (const location_type& l) - { - return symbol_type (token::TOKEN_READONLY, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_CONNECT_TIMEOUT (location_type l) - { - return symbol_type (token::TOKEN_CONNECT_TIMEOUT, std::move (l)); - } -#else - static - symbol_type - make_CONNECT_TIMEOUT (const location_type& l) - { - return symbol_type (token::TOKEN_CONNECT_TIMEOUT, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_CONTACT_POINTS (location_type l) - { - return symbol_type (token::TOKEN_CONTACT_POINTS, std::move (l)); - } -#else - static - symbol_type - make_CONTACT_POINTS (const location_type& l) - { - return symbol_type (token::TOKEN_CONTACT_POINTS, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_MAX_RECONNECT_TRIES (location_type l) - { - return symbol_type (token::TOKEN_MAX_RECONNECT_TRIES, std::move (l)); - } -#else - static - symbol_type - make_MAX_RECONNECT_TRIES (const location_type& l) - { - return symbol_type (token::TOKEN_MAX_RECONNECT_TRIES, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_RECONNECT_WAIT_TIME (location_type l) - { - return symbol_type (token::TOKEN_RECONNECT_WAIT_TIME, std::move (l)); - } -#else - static - symbol_type - make_RECONNECT_WAIT_TIME (const location_type& l) - { - return symbol_type (token::TOKEN_RECONNECT_WAIT_TIME, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_KEYSPACE (location_type l) - { - return symbol_type (token::TOKEN_KEYSPACE, std::move (l)); - } -#else - static - symbol_type - make_KEYSPACE (const location_type& l) - { - return symbol_type (token::TOKEN_KEYSPACE, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_CONSISTENCY (location_type l) - { - return symbol_type (token::TOKEN_CONSISTENCY, std::move (l)); - } -#else - static - symbol_type - make_CONSISTENCY (const location_type& l) - { - return symbol_type (token::TOKEN_CONSISTENCY, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_SERIAL_CONSISTENCY (location_type l) - { - return symbol_type (token::TOKEN_SERIAL_CONSISTENCY, std::move (l)); - } -#else - static - symbol_type - make_SERIAL_CONSISTENCY (const location_type& l) - { - return symbol_type (token::TOKEN_SERIAL_CONSISTENCY, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_REQUEST_TIMEOUT (location_type l) - { - return symbol_type (token::TOKEN_REQUEST_TIMEOUT, std::move (l)); - } -#else - static - symbol_type - make_REQUEST_TIMEOUT (const location_type& l) - { - return symbol_type (token::TOKEN_REQUEST_TIMEOUT, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_TCP_KEEPALIVE (location_type l) - { - return symbol_type (token::TOKEN_TCP_KEEPALIVE, std::move (l)); - } -#else - static - symbol_type - make_TCP_KEEPALIVE (const location_type& l) - { - return symbol_type (token::TOKEN_TCP_KEEPALIVE, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_TCP_NODELAY (location_type l) - { - return symbol_type (token::TOKEN_TCP_NODELAY, std::move (l)); - } -#else - static - symbol_type - make_TCP_NODELAY (const location_type& l) - { - return symbol_type (token::TOKEN_TCP_NODELAY, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_PREFERRED_LIFETIME (location_type l) - { - return symbol_type (token::TOKEN_PREFERRED_LIFETIME, std::move (l)); - } -#else - static - symbol_type - make_PREFERRED_LIFETIME (const location_type& l) - { - return symbol_type (token::TOKEN_PREFERRED_LIFETIME, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_VALID_LIFETIME (location_type l) - { - return symbol_type (token::TOKEN_VALID_LIFETIME, std::move (l)); - } -#else - static - symbol_type - make_VALID_LIFETIME (const location_type& l) - { - return symbol_type (token::TOKEN_VALID_LIFETIME, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_RENEW_TIMER (location_type l) - { - return symbol_type (token::TOKEN_RENEW_TIMER, std::move (l)); - } -#else - static - symbol_type - make_RENEW_TIMER (const location_type& l) - { - return symbol_type (token::TOKEN_RENEW_TIMER, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_REBIND_TIMER (location_type l) - { - return symbol_type (token::TOKEN_REBIND_TIMER, std::move (l)); - } -#else - static - symbol_type - make_REBIND_TIMER (const location_type& l) - { - return symbol_type (token::TOKEN_REBIND_TIMER, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_DECLINE_PROBATION_PERIOD (location_type l) - { - return symbol_type (token::TOKEN_DECLINE_PROBATION_PERIOD, std::move (l)); - } -#else - static - symbol_type - make_DECLINE_PROBATION_PERIOD (const location_type& l) - { - return symbol_type (token::TOKEN_DECLINE_PROBATION_PERIOD, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_SERVER_TAG (location_type l) - { - return symbol_type (token::TOKEN_SERVER_TAG, std::move (l)); - } -#else - static - symbol_type - make_SERVER_TAG (const location_type& l) - { - return symbol_type (token::TOKEN_SERVER_TAG, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_SUBNET6 (location_type l) - { - return symbol_type (token::TOKEN_SUBNET6, std::move (l)); - } -#else - static - symbol_type - make_SUBNET6 (const location_type& l) - { - return symbol_type (token::TOKEN_SUBNET6, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_OPTION_DEF (location_type l) - { - return symbol_type (token::TOKEN_OPTION_DEF, std::move (l)); - } -#else - static - symbol_type - make_OPTION_DEF (const location_type& l) - { - return symbol_type (token::TOKEN_OPTION_DEF, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_OPTION_DATA (location_type l) - { - return symbol_type (token::TOKEN_OPTION_DATA, std::move (l)); - } -#else - static - symbol_type - make_OPTION_DATA (const location_type& l) - { - return symbol_type (token::TOKEN_OPTION_DATA, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_NAME (location_type l) - { - return symbol_type (token::TOKEN_NAME, std::move (l)); - } -#else - static - symbol_type - make_NAME (const location_type& l) - { - return symbol_type (token::TOKEN_NAME, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_DATA (location_type l) - { - return symbol_type (token::TOKEN_DATA, std::move (l)); - } -#else - static - symbol_type - make_DATA (const location_type& l) - { - return symbol_type (token::TOKEN_DATA, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_CODE (location_type l) - { - return symbol_type (token::TOKEN_CODE, std::move (l)); - } -#else - static - symbol_type - make_CODE (const location_type& l) - { - return symbol_type (token::TOKEN_CODE, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_SPACE (location_type l) - { - return symbol_type (token::TOKEN_SPACE, std::move (l)); - } -#else - static - symbol_type - make_SPACE (const location_type& l) - { - return symbol_type (token::TOKEN_SPACE, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_CSV_FORMAT (location_type l) - { - return symbol_type (token::TOKEN_CSV_FORMAT, std::move (l)); - } -#else - static - symbol_type - make_CSV_FORMAT (const location_type& l) - { - return symbol_type (token::TOKEN_CSV_FORMAT, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_ALWAYS_SEND (location_type l) - { - return symbol_type (token::TOKEN_ALWAYS_SEND, std::move (l)); - } -#else - static - symbol_type - make_ALWAYS_SEND (const location_type& l) - { - return symbol_type (token::TOKEN_ALWAYS_SEND, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_RECORD_TYPES (location_type l) - { - return symbol_type (token::TOKEN_RECORD_TYPES, std::move (l)); - } -#else - static - symbol_type - make_RECORD_TYPES (const location_type& l) - { - return symbol_type (token::TOKEN_RECORD_TYPES, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_ENCAPSULATE (location_type l) - { - return symbol_type (token::TOKEN_ENCAPSULATE, std::move (l)); - } -#else - static - symbol_type - make_ENCAPSULATE (const location_type& l) - { - return symbol_type (token::TOKEN_ENCAPSULATE, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_ARRAY (location_type l) - { - return symbol_type (token::TOKEN_ARRAY, std::move (l)); - } -#else - static - symbol_type - make_ARRAY (const location_type& l) - { - return symbol_type (token::TOKEN_ARRAY, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_POOLS (location_type l) - { - return symbol_type (token::TOKEN_POOLS, std::move (l)); - } -#else - static - symbol_type - make_POOLS (const location_type& l) - { - return symbol_type (token::TOKEN_POOLS, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_POOL (location_type l) - { - return symbol_type (token::TOKEN_POOL, std::move (l)); - } -#else - static - symbol_type - make_POOL (const location_type& l) - { - return symbol_type (token::TOKEN_POOL, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_PD_POOLS (location_type l) - { - return symbol_type (token::TOKEN_PD_POOLS, std::move (l)); - } -#else - static - symbol_type - make_PD_POOLS (const location_type& l) - { - return symbol_type (token::TOKEN_PD_POOLS, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_PREFIX (location_type l) - { - return symbol_type (token::TOKEN_PREFIX, std::move (l)); - } -#else - static - symbol_type - make_PREFIX (const location_type& l) - { - return symbol_type (token::TOKEN_PREFIX, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_PREFIX_LEN (location_type l) - { - return symbol_type (token::TOKEN_PREFIX_LEN, std::move (l)); - } -#else - static - symbol_type - make_PREFIX_LEN (const location_type& l) - { - return symbol_type (token::TOKEN_PREFIX_LEN, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_EXCLUDED_PREFIX (location_type l) - { - return symbol_type (token::TOKEN_EXCLUDED_PREFIX, std::move (l)); - } -#else - static - symbol_type - make_EXCLUDED_PREFIX (const location_type& l) - { - return symbol_type (token::TOKEN_EXCLUDED_PREFIX, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_EXCLUDED_PREFIX_LEN (location_type l) - { - return symbol_type (token::TOKEN_EXCLUDED_PREFIX_LEN, std::move (l)); - } -#else - static - symbol_type - make_EXCLUDED_PREFIX_LEN (const location_type& l) - { - return symbol_type (token::TOKEN_EXCLUDED_PREFIX_LEN, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_DELEGATED_LEN (location_type l) - { - return symbol_type (token::TOKEN_DELEGATED_LEN, std::move (l)); - } -#else - static - symbol_type - make_DELEGATED_LEN (const location_type& l) - { - return symbol_type (token::TOKEN_DELEGATED_LEN, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_USER_CONTEXT (location_type l) - { - return symbol_type (token::TOKEN_USER_CONTEXT, std::move (l)); - } -#else - static - symbol_type - make_USER_CONTEXT (const location_type& l) - { - return symbol_type (token::TOKEN_USER_CONTEXT, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_COMMENT (location_type l) - { - return symbol_type (token::TOKEN_COMMENT, std::move (l)); - } -#else - static - symbol_type - make_COMMENT (const location_type& l) - { - return symbol_type (token::TOKEN_COMMENT, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_SUBNET (location_type l) - { - return symbol_type (token::TOKEN_SUBNET, std::move (l)); - } -#else - static - symbol_type - make_SUBNET (const location_type& l) - { - return symbol_type (token::TOKEN_SUBNET, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_INTERFACE (location_type l) - { - return symbol_type (token::TOKEN_INTERFACE, std::move (l)); - } -#else - static - symbol_type - make_INTERFACE (const location_type& l) - { - return symbol_type (token::TOKEN_INTERFACE, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_INTERFACE_ID (location_type l) - { - return symbol_type (token::TOKEN_INTERFACE_ID, std::move (l)); - } -#else - static - symbol_type - make_INTERFACE_ID (const location_type& l) - { - return symbol_type (token::TOKEN_INTERFACE_ID, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_ID (location_type l) - { - return symbol_type (token::TOKEN_ID, std::move (l)); - } -#else - static - symbol_type - make_ID (const location_type& l) - { - return symbol_type (token::TOKEN_ID, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_RAPID_COMMIT (location_type l) - { - return symbol_type (token::TOKEN_RAPID_COMMIT, std::move (l)); - } -#else - static - symbol_type - make_RAPID_COMMIT (const location_type& l) - { - return symbol_type (token::TOKEN_RAPID_COMMIT, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_RESERVATION_MODE (location_type l) - { - return symbol_type (token::TOKEN_RESERVATION_MODE, std::move (l)); - } -#else - static - symbol_type - make_RESERVATION_MODE (const location_type& l) - { - return symbol_type (token::TOKEN_RESERVATION_MODE, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_DISABLED (location_type l) - { - return symbol_type (token::TOKEN_DISABLED, std::move (l)); - } -#else - static - symbol_type - make_DISABLED (const location_type& l) - { - return symbol_type (token::TOKEN_DISABLED, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_OUT_OF_POOL (location_type l) - { - return symbol_type (token::TOKEN_OUT_OF_POOL, std::move (l)); - } -#else - static - symbol_type - make_OUT_OF_POOL (const location_type& l) - { - return symbol_type (token::TOKEN_OUT_OF_POOL, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_GLOBAL (location_type l) - { - return symbol_type (token::TOKEN_GLOBAL, std::move (l)); - } -#else - static - symbol_type - make_GLOBAL (const location_type& l) - { - return symbol_type (token::TOKEN_GLOBAL, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_ALL (location_type l) - { - return symbol_type (token::TOKEN_ALL, std::move (l)); - } -#else - static - symbol_type - make_ALL (const location_type& l) - { - return symbol_type (token::TOKEN_ALL, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_SHARED_NETWORKS (location_type l) - { - return symbol_type (token::TOKEN_SHARED_NETWORKS, std::move (l)); - } -#else - static - symbol_type - make_SHARED_NETWORKS (const location_type& l) - { - return symbol_type (token::TOKEN_SHARED_NETWORKS, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_MAC_SOURCES (location_type l) - { - return symbol_type (token::TOKEN_MAC_SOURCES, std::move (l)); - } -#else - static - symbol_type - make_MAC_SOURCES (const location_type& l) - { - return symbol_type (token::TOKEN_MAC_SOURCES, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_RELAY_SUPPLIED_OPTIONS (location_type l) - { - return symbol_type (token::TOKEN_RELAY_SUPPLIED_OPTIONS, std::move (l)); - } -#else - static - symbol_type - make_RELAY_SUPPLIED_OPTIONS (const location_type& l) - { - return symbol_type (token::TOKEN_RELAY_SUPPLIED_OPTIONS, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_HOST_RESERVATION_IDENTIFIERS (location_type l) - { - return symbol_type (token::TOKEN_HOST_RESERVATION_IDENTIFIERS, std::move (l)); - } -#else - static - symbol_type - make_HOST_RESERVATION_IDENTIFIERS (const location_type& l) - { - return symbol_type (token::TOKEN_HOST_RESERVATION_IDENTIFIERS, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_SANITY_CHECKS (location_type l) - { - return symbol_type (token::TOKEN_SANITY_CHECKS, std::move (l)); - } -#else - static - symbol_type - make_SANITY_CHECKS (const location_type& l) - { - return symbol_type (token::TOKEN_SANITY_CHECKS, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_LEASE_CHECKS (location_type l) - { - return symbol_type (token::TOKEN_LEASE_CHECKS, std::move (l)); - } -#else - static - symbol_type - make_LEASE_CHECKS (const location_type& l) - { - return symbol_type (token::TOKEN_LEASE_CHECKS, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_CLIENT_CLASSES (location_type l) - { - return symbol_type (token::TOKEN_CLIENT_CLASSES, std::move (l)); - } -#else - static - symbol_type - make_CLIENT_CLASSES (const location_type& l) - { - return symbol_type (token::TOKEN_CLIENT_CLASSES, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_REQUIRE_CLIENT_CLASSES (location_type l) - { - return symbol_type (token::TOKEN_REQUIRE_CLIENT_CLASSES, std::move (l)); - } -#else - static - symbol_type - make_REQUIRE_CLIENT_CLASSES (const location_type& l) - { - return symbol_type (token::TOKEN_REQUIRE_CLIENT_CLASSES, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_TEST (location_type l) - { - return symbol_type (token::TOKEN_TEST, std::move (l)); - } -#else - static - symbol_type - make_TEST (const location_type& l) - { - return symbol_type (token::TOKEN_TEST, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_ONLY_IF_REQUIRED (location_type l) - { - return symbol_type (token::TOKEN_ONLY_IF_REQUIRED, std::move (l)); - } -#else - static - symbol_type - make_ONLY_IF_REQUIRED (const location_type& l) - { - return symbol_type (token::TOKEN_ONLY_IF_REQUIRED, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_CLIENT_CLASS (location_type l) - { - return symbol_type (token::TOKEN_CLIENT_CLASS, std::move (l)); - } -#else - static - symbol_type - make_CLIENT_CLASS (const location_type& l) - { - return symbol_type (token::TOKEN_CLIENT_CLASS, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_RESERVATIONS (location_type l) - { - return symbol_type (token::TOKEN_RESERVATIONS, std::move (l)); - } -#else - static - symbol_type - make_RESERVATIONS (const location_type& l) - { - return symbol_type (token::TOKEN_RESERVATIONS, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_IP_ADDRESSES (location_type l) - { - return symbol_type (token::TOKEN_IP_ADDRESSES, std::move (l)); - } -#else - static - symbol_type - make_IP_ADDRESSES (const location_type& l) - { - return symbol_type (token::TOKEN_IP_ADDRESSES, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_PREFIXES (location_type l) - { - return symbol_type (token::TOKEN_PREFIXES, std::move (l)); - } -#else - static - symbol_type - make_PREFIXES (const location_type& l) - { - return symbol_type (token::TOKEN_PREFIXES, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_DUID (location_type l) - { - return symbol_type (token::TOKEN_DUID, std::move (l)); - } -#else - static - symbol_type - make_DUID (const location_type& l) - { - return symbol_type (token::TOKEN_DUID, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_HW_ADDRESS (location_type l) - { - return symbol_type (token::TOKEN_HW_ADDRESS, std::move (l)); - } -#else - static - symbol_type - make_HW_ADDRESS (const location_type& l) - { - return symbol_type (token::TOKEN_HW_ADDRESS, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_HOSTNAME (location_type l) - { - return symbol_type (token::TOKEN_HOSTNAME, std::move (l)); - } -#else - static - symbol_type - make_HOSTNAME (const location_type& l) - { - return symbol_type (token::TOKEN_HOSTNAME, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_FLEX_ID (location_type l) - { - return symbol_type (token::TOKEN_FLEX_ID, std::move (l)); - } -#else - static - symbol_type - make_FLEX_ID (const location_type& l) - { - return symbol_type (token::TOKEN_FLEX_ID, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_RELAY (location_type l) - { - return symbol_type (token::TOKEN_RELAY, std::move (l)); - } -#else - static - symbol_type - make_RELAY (const location_type& l) - { - return symbol_type (token::TOKEN_RELAY, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_IP_ADDRESS (location_type l) - { - return symbol_type (token::TOKEN_IP_ADDRESS, std::move (l)); - } -#else - static - symbol_type - make_IP_ADDRESS (const location_type& l) - { - return symbol_type (token::TOKEN_IP_ADDRESS, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_HOOKS_LIBRARIES (location_type l) - { - return symbol_type (token::TOKEN_HOOKS_LIBRARIES, std::move (l)); - } -#else - static - symbol_type - make_HOOKS_LIBRARIES (const location_type& l) - { - return symbol_type (token::TOKEN_HOOKS_LIBRARIES, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_LIBRARY (location_type l) - { - return symbol_type (token::TOKEN_LIBRARY, std::move (l)); - } -#else - static - symbol_type - make_LIBRARY (const location_type& l) - { - return symbol_type (token::TOKEN_LIBRARY, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_PARAMETERS (location_type l) - { - return symbol_type (token::TOKEN_PARAMETERS, std::move (l)); - } -#else - static - symbol_type - make_PARAMETERS (const location_type& l) - { - return symbol_type (token::TOKEN_PARAMETERS, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_EXPIRED_LEASES_PROCESSING (location_type l) - { - return symbol_type (token::TOKEN_EXPIRED_LEASES_PROCESSING, std::move (l)); - } -#else - static - symbol_type - make_EXPIRED_LEASES_PROCESSING (const location_type& l) - { - return symbol_type (token::TOKEN_EXPIRED_LEASES_PROCESSING, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_RECLAIM_TIMER_WAIT_TIME (location_type l) - { - return symbol_type (token::TOKEN_RECLAIM_TIMER_WAIT_TIME, std::move (l)); - } -#else - static - symbol_type - make_RECLAIM_TIMER_WAIT_TIME (const location_type& l) - { - return symbol_type (token::TOKEN_RECLAIM_TIMER_WAIT_TIME, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_FLUSH_RECLAIMED_TIMER_WAIT_TIME (location_type l) - { - return symbol_type (token::TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME, std::move (l)); - } -#else - static - symbol_type - make_FLUSH_RECLAIMED_TIMER_WAIT_TIME (const location_type& l) - { - return symbol_type (token::TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_HOLD_RECLAIMED_TIME (location_type l) - { - return symbol_type (token::TOKEN_HOLD_RECLAIMED_TIME, std::move (l)); - } -#else - static - symbol_type - make_HOLD_RECLAIMED_TIME (const location_type& l) - { - return symbol_type (token::TOKEN_HOLD_RECLAIMED_TIME, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_MAX_RECLAIM_LEASES (location_type l) - { - return symbol_type (token::TOKEN_MAX_RECLAIM_LEASES, std::move (l)); - } -#else - static - symbol_type - make_MAX_RECLAIM_LEASES (const location_type& l) - { - return symbol_type (token::TOKEN_MAX_RECLAIM_LEASES, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_MAX_RECLAIM_TIME (location_type l) - { - return symbol_type (token::TOKEN_MAX_RECLAIM_TIME, std::move (l)); - } -#else - static - symbol_type - make_MAX_RECLAIM_TIME (const location_type& l) - { - return symbol_type (token::TOKEN_MAX_RECLAIM_TIME, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_UNWARNED_RECLAIM_CYCLES (location_type l) - { - return symbol_type (token::TOKEN_UNWARNED_RECLAIM_CYCLES, std::move (l)); - } -#else - static - symbol_type - make_UNWARNED_RECLAIM_CYCLES (const location_type& l) - { - return symbol_type (token::TOKEN_UNWARNED_RECLAIM_CYCLES, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_SERVER_ID (location_type l) - { - return symbol_type (token::TOKEN_SERVER_ID, std::move (l)); - } -#else - static - symbol_type - make_SERVER_ID (const location_type& l) - { - return symbol_type (token::TOKEN_SERVER_ID, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_LLT (location_type l) - { - return symbol_type (token::TOKEN_LLT, std::move (l)); - } -#else - static - symbol_type - make_LLT (const location_type& l) - { - return symbol_type (token::TOKEN_LLT, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_EN (location_type l) - { - return symbol_type (token::TOKEN_EN, std::move (l)); - } -#else - static - symbol_type - make_EN (const location_type& l) - { - return symbol_type (token::TOKEN_EN, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_LL (location_type l) - { - return symbol_type (token::TOKEN_LL, std::move (l)); - } -#else - static - symbol_type - make_LL (const location_type& l) - { - return symbol_type (token::TOKEN_LL, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_IDENTIFIER (location_type l) - { - return symbol_type (token::TOKEN_IDENTIFIER, std::move (l)); - } -#else - static - symbol_type - make_IDENTIFIER (const location_type& l) - { - return symbol_type (token::TOKEN_IDENTIFIER, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_HTYPE (location_type l) - { - return symbol_type (token::TOKEN_HTYPE, std::move (l)); - } -#else - static - symbol_type - make_HTYPE (const location_type& l) - { - return symbol_type (token::TOKEN_HTYPE, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_TIME (location_type l) - { - return symbol_type (token::TOKEN_TIME, std::move (l)); - } -#else - static - symbol_type - make_TIME (const location_type& l) - { - return symbol_type (token::TOKEN_TIME, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_ENTERPRISE_ID (location_type l) - { - return symbol_type (token::TOKEN_ENTERPRISE_ID, std::move (l)); - } -#else - static - symbol_type - make_ENTERPRISE_ID (const location_type& l) - { - return symbol_type (token::TOKEN_ENTERPRISE_ID, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_DHCP4O6_PORT (location_type l) - { - return symbol_type (token::TOKEN_DHCP4O6_PORT, std::move (l)); - } -#else - static - symbol_type - make_DHCP4O6_PORT (const location_type& l) - { - return symbol_type (token::TOKEN_DHCP4O6_PORT, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_CONTROL_SOCKET (location_type l) - { - return symbol_type (token::TOKEN_CONTROL_SOCKET, std::move (l)); - } -#else - static - symbol_type - make_CONTROL_SOCKET (const location_type& l) - { - return symbol_type (token::TOKEN_CONTROL_SOCKET, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_SOCKET_TYPE (location_type l) - { - return symbol_type (token::TOKEN_SOCKET_TYPE, std::move (l)); - } -#else - static - symbol_type - make_SOCKET_TYPE (const location_type& l) - { - return symbol_type (token::TOKEN_SOCKET_TYPE, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_SOCKET_NAME (location_type l) - { - return symbol_type (token::TOKEN_SOCKET_NAME, std::move (l)); - } -#else - static - symbol_type - make_SOCKET_NAME (const location_type& l) - { - return symbol_type (token::TOKEN_SOCKET_NAME, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_DHCP_QUEUE_CONTROL (location_type l) - { - return symbol_type (token::TOKEN_DHCP_QUEUE_CONTROL, std::move (l)); - } -#else - static - symbol_type - make_DHCP_QUEUE_CONTROL (const location_type& l) - { - return symbol_type (token::TOKEN_DHCP_QUEUE_CONTROL, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_DHCP_DDNS (location_type l) - { - return symbol_type (token::TOKEN_DHCP_DDNS, std::move (l)); - } -#else - static - symbol_type - make_DHCP_DDNS (const location_type& l) - { - return symbol_type (token::TOKEN_DHCP_DDNS, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_ENABLE_UPDATES (location_type l) - { - return symbol_type (token::TOKEN_ENABLE_UPDATES, std::move (l)); - } -#else - static - symbol_type - make_ENABLE_UPDATES (const location_type& l) - { - return symbol_type (token::TOKEN_ENABLE_UPDATES, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_QUALIFYING_SUFFIX (location_type l) - { - return symbol_type (token::TOKEN_QUALIFYING_SUFFIX, std::move (l)); - } -#else - static - symbol_type - make_QUALIFYING_SUFFIX (const location_type& l) - { - return symbol_type (token::TOKEN_QUALIFYING_SUFFIX, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_SERVER_IP (location_type l) - { - return symbol_type (token::TOKEN_SERVER_IP, std::move (l)); - } -#else - static - symbol_type - make_SERVER_IP (const location_type& l) - { - return symbol_type (token::TOKEN_SERVER_IP, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_SERVER_PORT (location_type l) - { - return symbol_type (token::TOKEN_SERVER_PORT, std::move (l)); - } -#else - static - symbol_type - make_SERVER_PORT (const location_type& l) - { - return symbol_type (token::TOKEN_SERVER_PORT, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_SENDER_IP (location_type l) - { - return symbol_type (token::TOKEN_SENDER_IP, std::move (l)); - } -#else - static - symbol_type - make_SENDER_IP (const location_type& l) - { - return symbol_type (token::TOKEN_SENDER_IP, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_SENDER_PORT (location_type l) - { - return symbol_type (token::TOKEN_SENDER_PORT, std::move (l)); - } -#else - static - symbol_type - make_SENDER_PORT (const location_type& l) - { - return symbol_type (token::TOKEN_SENDER_PORT, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_MAX_QUEUE_SIZE (location_type l) - { - return symbol_type (token::TOKEN_MAX_QUEUE_SIZE, std::move (l)); - } -#else - static - symbol_type - make_MAX_QUEUE_SIZE (const location_type& l) - { - return symbol_type (token::TOKEN_MAX_QUEUE_SIZE, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_NCR_PROTOCOL (location_type l) - { - return symbol_type (token::TOKEN_NCR_PROTOCOL, std::move (l)); - } -#else - static - symbol_type - make_NCR_PROTOCOL (const location_type& l) - { - return symbol_type (token::TOKEN_NCR_PROTOCOL, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_NCR_FORMAT (location_type l) - { - return symbol_type (token::TOKEN_NCR_FORMAT, std::move (l)); - } -#else - static - symbol_type - make_NCR_FORMAT (const location_type& l) - { - return symbol_type (token::TOKEN_NCR_FORMAT, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_OVERRIDE_NO_UPDATE (location_type l) - { - return symbol_type (token::TOKEN_OVERRIDE_NO_UPDATE, std::move (l)); - } -#else - static - symbol_type - make_OVERRIDE_NO_UPDATE (const location_type& l) - { - return symbol_type (token::TOKEN_OVERRIDE_NO_UPDATE, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_OVERRIDE_CLIENT_UPDATE (location_type l) - { - return symbol_type (token::TOKEN_OVERRIDE_CLIENT_UPDATE, std::move (l)); - } -#else - static - symbol_type - make_OVERRIDE_CLIENT_UPDATE (const location_type& l) - { - return symbol_type (token::TOKEN_OVERRIDE_CLIENT_UPDATE, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_REPLACE_CLIENT_NAME (location_type l) - { - return symbol_type (token::TOKEN_REPLACE_CLIENT_NAME, std::move (l)); - } -#else - static - symbol_type - make_REPLACE_CLIENT_NAME (const location_type& l) - { - return symbol_type (token::TOKEN_REPLACE_CLIENT_NAME, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_GENERATED_PREFIX (location_type l) - { - return symbol_type (token::TOKEN_GENERATED_PREFIX, std::move (l)); - } -#else - static - symbol_type - make_GENERATED_PREFIX (const location_type& l) - { - return symbol_type (token::TOKEN_GENERATED_PREFIX, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_UDP (location_type l) - { - return symbol_type (token::TOKEN_UDP, std::move (l)); - } -#else - static - symbol_type - make_UDP (const location_type& l) - { - return symbol_type (token::TOKEN_UDP, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_TCP (location_type l) - { - return symbol_type (token::TOKEN_TCP, std::move (l)); - } -#else - static - symbol_type - make_TCP (const location_type& l) - { - return symbol_type (token::TOKEN_TCP, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_JSON (location_type l) - { - return symbol_type (token::TOKEN_JSON, std::move (l)); - } -#else - static - symbol_type - make_JSON (const location_type& l) - { - return symbol_type (token::TOKEN_JSON, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_WHEN_PRESENT (location_type l) - { - return symbol_type (token::TOKEN_WHEN_PRESENT, std::move (l)); - } -#else - static - symbol_type - make_WHEN_PRESENT (const location_type& l) - { - return symbol_type (token::TOKEN_WHEN_PRESENT, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_NEVER (location_type l) - { - return symbol_type (token::TOKEN_NEVER, std::move (l)); - } -#else - static - symbol_type - make_NEVER (const location_type& l) - { - return symbol_type (token::TOKEN_NEVER, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_ALWAYS (location_type l) - { - return symbol_type (token::TOKEN_ALWAYS, std::move (l)); - } -#else - static - symbol_type - make_ALWAYS (const location_type& l) - { - return symbol_type (token::TOKEN_ALWAYS, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_WHEN_NOT_PRESENT (location_type l) - { - return symbol_type (token::TOKEN_WHEN_NOT_PRESENT, std::move (l)); - } -#else - static - symbol_type - make_WHEN_NOT_PRESENT (const location_type& l) - { - return symbol_type (token::TOKEN_WHEN_NOT_PRESENT, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_HOSTNAME_CHAR_SET (location_type l) - { - return symbol_type (token::TOKEN_HOSTNAME_CHAR_SET, std::move (l)); - } -#else - static - symbol_type - make_HOSTNAME_CHAR_SET (const location_type& l) - { - return symbol_type (token::TOKEN_HOSTNAME_CHAR_SET, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_HOSTNAME_CHAR_REPLACEMENT (location_type l) - { - return symbol_type (token::TOKEN_HOSTNAME_CHAR_REPLACEMENT, std::move (l)); - } -#else - static - symbol_type - make_HOSTNAME_CHAR_REPLACEMENT (const location_type& l) - { - return symbol_type (token::TOKEN_HOSTNAME_CHAR_REPLACEMENT, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_LOGGING (location_type l) - { - return symbol_type (token::TOKEN_LOGGING, std::move (l)); - } -#else - static - symbol_type - make_LOGGING (const location_type& l) - { - return symbol_type (token::TOKEN_LOGGING, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_LOGGERS (location_type l) - { - return symbol_type (token::TOKEN_LOGGERS, std::move (l)); - } -#else - static - symbol_type - make_LOGGERS (const location_type& l) - { - return symbol_type (token::TOKEN_LOGGERS, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_OUTPUT_OPTIONS (location_type l) - { - return symbol_type (token::TOKEN_OUTPUT_OPTIONS, std::move (l)); - } -#else - static - symbol_type - make_OUTPUT_OPTIONS (const location_type& l) - { - return symbol_type (token::TOKEN_OUTPUT_OPTIONS, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_OUTPUT (location_type l) - { - return symbol_type (token::TOKEN_OUTPUT, std::move (l)); - } -#else - static - symbol_type - make_OUTPUT (const location_type& l) - { - return symbol_type (token::TOKEN_OUTPUT, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_DEBUGLEVEL (location_type l) - { - return symbol_type (token::TOKEN_DEBUGLEVEL, std::move (l)); - } -#else - static - symbol_type - make_DEBUGLEVEL (const location_type& l) - { - return symbol_type (token::TOKEN_DEBUGLEVEL, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_SEVERITY (location_type l) - { - return symbol_type (token::TOKEN_SEVERITY, std::move (l)); - } -#else - static - symbol_type - make_SEVERITY (const location_type& l) - { - return symbol_type (token::TOKEN_SEVERITY, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_FLUSH (location_type l) - { - return symbol_type (token::TOKEN_FLUSH, std::move (l)); - } -#else - static - symbol_type - make_FLUSH (const location_type& l) - { - return symbol_type (token::TOKEN_FLUSH, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_MAXSIZE (location_type l) - { - return symbol_type (token::TOKEN_MAXSIZE, std::move (l)); - } -#else - static - symbol_type - make_MAXSIZE (const location_type& l) - { - return symbol_type (token::TOKEN_MAXSIZE, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_MAXVER (location_type l) - { - return symbol_type (token::TOKEN_MAXVER, std::move (l)); - } -#else - static - symbol_type - make_MAXVER (const location_type& l) - { - return symbol_type (token::TOKEN_MAXVER, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_DHCP4 (location_type l) - { - return symbol_type (token::TOKEN_DHCP4, std::move (l)); - } -#else - static - symbol_type - make_DHCP4 (const location_type& l) - { - return symbol_type (token::TOKEN_DHCP4, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_DHCPDDNS (location_type l) - { - return symbol_type (token::TOKEN_DHCPDDNS, std::move (l)); - } -#else - static - symbol_type - make_DHCPDDNS (const location_type& l) - { - return symbol_type (token::TOKEN_DHCPDDNS, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_CONTROL_AGENT (location_type l) - { - return symbol_type (token::TOKEN_CONTROL_AGENT, std::move (l)); - } -#else - static - symbol_type - make_CONTROL_AGENT (const location_type& l) - { - return symbol_type (token::TOKEN_CONTROL_AGENT, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_TOPLEVEL_JSON (location_type l) - { - return symbol_type (token::TOKEN_TOPLEVEL_JSON, std::move (l)); - } -#else - static - symbol_type - make_TOPLEVEL_JSON (const location_type& l) - { - return symbol_type (token::TOKEN_TOPLEVEL_JSON, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_TOPLEVEL_DHCP6 (location_type l) - { - return symbol_type (token::TOKEN_TOPLEVEL_DHCP6, std::move (l)); - } -#else - static - symbol_type - make_TOPLEVEL_DHCP6 (const location_type& l) - { - return symbol_type (token::TOKEN_TOPLEVEL_DHCP6, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_SUB_DHCP6 (location_type l) - { - return symbol_type (token::TOKEN_SUB_DHCP6, std::move (l)); - } -#else - static - symbol_type - make_SUB_DHCP6 (const location_type& l) - { - return symbol_type (token::TOKEN_SUB_DHCP6, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_SUB_INTERFACES6 (location_type l) - { - return symbol_type (token::TOKEN_SUB_INTERFACES6, std::move (l)); - } -#else - static - symbol_type - make_SUB_INTERFACES6 (const location_type& l) - { - return symbol_type (token::TOKEN_SUB_INTERFACES6, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_SUB_SUBNET6 (location_type l) - { - return symbol_type (token::TOKEN_SUB_SUBNET6, std::move (l)); - } -#else - static - symbol_type - make_SUB_SUBNET6 (const location_type& l) - { - return symbol_type (token::TOKEN_SUB_SUBNET6, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_SUB_POOL6 (location_type l) - { - return symbol_type (token::TOKEN_SUB_POOL6, std::move (l)); - } -#else - static - symbol_type - make_SUB_POOL6 (const location_type& l) - { - return symbol_type (token::TOKEN_SUB_POOL6, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_SUB_PD_POOL (location_type l) - { - return symbol_type (token::TOKEN_SUB_PD_POOL, std::move (l)); - } -#else - static - symbol_type - make_SUB_PD_POOL (const location_type& l) - { - return symbol_type (token::TOKEN_SUB_PD_POOL, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_SUB_RESERVATION (location_type l) - { - return symbol_type (token::TOKEN_SUB_RESERVATION, std::move (l)); - } -#else - static - symbol_type - make_SUB_RESERVATION (const location_type& l) - { - return symbol_type (token::TOKEN_SUB_RESERVATION, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_SUB_OPTION_DEFS (location_type l) - { - return symbol_type (token::TOKEN_SUB_OPTION_DEFS, std::move (l)); - } -#else - static - symbol_type - make_SUB_OPTION_DEFS (const location_type& l) - { - return symbol_type (token::TOKEN_SUB_OPTION_DEFS, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_SUB_OPTION_DEF (location_type l) - { - return symbol_type (token::TOKEN_SUB_OPTION_DEF, std::move (l)); - } -#else - static - symbol_type - make_SUB_OPTION_DEF (const location_type& l) - { - return symbol_type (token::TOKEN_SUB_OPTION_DEF, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_SUB_OPTION_DATA (location_type l) - { - return symbol_type (token::TOKEN_SUB_OPTION_DATA, std::move (l)); - } -#else - static - symbol_type - make_SUB_OPTION_DATA (const location_type& l) - { - return symbol_type (token::TOKEN_SUB_OPTION_DATA, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_SUB_HOOKS_LIBRARY (location_type l) - { - return symbol_type (token::TOKEN_SUB_HOOKS_LIBRARY, std::move (l)); - } -#else - static - symbol_type - make_SUB_HOOKS_LIBRARY (const location_type& l) - { - return symbol_type (token::TOKEN_SUB_HOOKS_LIBRARY, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_SUB_DHCP_DDNS (location_type l) - { - return symbol_type (token::TOKEN_SUB_DHCP_DDNS, std::move (l)); - } -#else - static - symbol_type - make_SUB_DHCP_DDNS (const location_type& l) - { - return symbol_type (token::TOKEN_SUB_DHCP_DDNS, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_SUB_LOGGING (location_type l) - { - return symbol_type (token::TOKEN_SUB_LOGGING, std::move (l)); - } -#else - static - symbol_type - make_SUB_LOGGING (const location_type& l) - { - return symbol_type (token::TOKEN_SUB_LOGGING, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_SUB_CONFIG_CONTROL (location_type l) - { - return symbol_type (token::TOKEN_SUB_CONFIG_CONTROL, std::move (l)); - } -#else - static - symbol_type - make_SUB_CONFIG_CONTROL (const location_type& l) - { - return symbol_type (token::TOKEN_SUB_CONFIG_CONTROL, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_STRING (std::string v, location_type l) - { - return symbol_type (token::TOKEN_STRING, std::move (v), std::move (l)); - } -#else - static - symbol_type - make_STRING (const std::string& v, const location_type& l) - { - return symbol_type (token::TOKEN_STRING, v, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_INTEGER (int64_t v, location_type l) - { - return symbol_type (token::TOKEN_INTEGER, std::move (v), std::move (l)); - } -#else - static - symbol_type - make_INTEGER (const int64_t& v, const location_type& l) - { - return symbol_type (token::TOKEN_INTEGER, v, l); - } -#endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_FLOAT (double v, location_type l) - { - return symbol_type (token::TOKEN_FLOAT, std::move (v), std::move (l)); - } -#else - static - symbol_type - make_FLOAT (const double& v, const location_type& l) - { - return symbol_type (token::TOKEN_FLOAT, v, l); - } + // Symbol constructors declarations. + static + symbol_type + make_END (YY_COPY (location_type) l); + + static + symbol_type + make_COMMA (YY_COPY (location_type) l); + + static + symbol_type + make_COLON (YY_COPY (location_type) l); + + static + symbol_type + make_LSQUARE_BRACKET (YY_COPY (location_type) l); + + static + symbol_type + make_RSQUARE_BRACKET (YY_COPY (location_type) l); + + static + symbol_type + make_LCURLY_BRACKET (YY_COPY (location_type) l); + + static + symbol_type + make_RCURLY_BRACKET (YY_COPY (location_type) l); + + static + symbol_type + make_NULL_TYPE (YY_COPY (location_type) l); + + static + symbol_type + make_DHCP6 (YY_COPY (location_type) l); + + static + symbol_type + make_DATA_DIRECTORY (YY_COPY (location_type) l); + + static + symbol_type + make_CONFIG_CONTROL (YY_COPY (location_type) l); + + static + symbol_type + make_CONFIG_DATABASES (YY_COPY (location_type) l); + + static + symbol_type + make_CONFIG_FETCH_WAIT_TIME (YY_COPY (location_type) l); + + static + symbol_type + make_INTERFACES_CONFIG (YY_COPY (location_type) l); + + static + symbol_type + make_INTERFACES (YY_COPY (location_type) l); + + static + symbol_type + make_RE_DETECT (YY_COPY (location_type) l); + + static + symbol_type + make_LEASE_DATABASE (YY_COPY (location_type) l); + + static + symbol_type + make_HOSTS_DATABASE (YY_COPY (location_type) l); + + static + symbol_type + make_HOSTS_DATABASES (YY_COPY (location_type) l); + + static + symbol_type + make_TYPE (YY_COPY (location_type) l); + + static + symbol_type + make_MEMFILE (YY_COPY (location_type) l); + + static + symbol_type + make_MYSQL (YY_COPY (location_type) l); + + static + symbol_type + make_POSTGRESQL (YY_COPY (location_type) l); + + static + symbol_type + make_CQL (YY_COPY (location_type) l); + + static + symbol_type + make_USER (YY_COPY (location_type) l); + + static + symbol_type + make_PASSWORD (YY_COPY (location_type) l); + + static + symbol_type + make_HOST (YY_COPY (location_type) l); + + static + symbol_type + make_PORT (YY_COPY (location_type) l); + + static + symbol_type + make_PERSIST (YY_COPY (location_type) l); + + static + symbol_type + make_LFC_INTERVAL (YY_COPY (location_type) l); + + static + symbol_type + make_READONLY (YY_COPY (location_type) l); + + static + symbol_type + make_CONNECT_TIMEOUT (YY_COPY (location_type) l); + + static + symbol_type + make_CONTACT_POINTS (YY_COPY (location_type) l); + + static + symbol_type + make_MAX_RECONNECT_TRIES (YY_COPY (location_type) l); + + static + symbol_type + make_RECONNECT_WAIT_TIME (YY_COPY (location_type) l); + + static + symbol_type + make_KEYSPACE (YY_COPY (location_type) l); + + static + symbol_type + make_CONSISTENCY (YY_COPY (location_type) l); + + static + symbol_type + make_SERIAL_CONSISTENCY (YY_COPY (location_type) l); + + static + symbol_type + make_REQUEST_TIMEOUT (YY_COPY (location_type) l); + + static + symbol_type + make_TCP_KEEPALIVE (YY_COPY (location_type) l); + + static + symbol_type + make_TCP_NODELAY (YY_COPY (location_type) l); + + static + symbol_type + make_PREFERRED_LIFETIME (YY_COPY (location_type) l); + + static + symbol_type + make_VALID_LIFETIME (YY_COPY (location_type) l); + + static + symbol_type + make_RENEW_TIMER (YY_COPY (location_type) l); + + static + symbol_type + make_REBIND_TIMER (YY_COPY (location_type) l); + + static + symbol_type + make_DECLINE_PROBATION_PERIOD (YY_COPY (location_type) l); + + static + symbol_type + make_SERVER_TAG (YY_COPY (location_type) l); + + static + symbol_type + make_SUBNET6 (YY_COPY (location_type) l); + + static + symbol_type + make_OPTION_DEF (YY_COPY (location_type) l); + + static + symbol_type + make_OPTION_DATA (YY_COPY (location_type) l); + + static + symbol_type + make_NAME (YY_COPY (location_type) l); + + static + symbol_type + make_DATA (YY_COPY (location_type) l); + + static + symbol_type + make_CODE (YY_COPY (location_type) l); + + static + symbol_type + make_SPACE (YY_COPY (location_type) l); + + static + symbol_type + make_CSV_FORMAT (YY_COPY (location_type) l); + + static + symbol_type + make_ALWAYS_SEND (YY_COPY (location_type) l); + + static + symbol_type + make_RECORD_TYPES (YY_COPY (location_type) l); + + static + symbol_type + make_ENCAPSULATE (YY_COPY (location_type) l); + + static + symbol_type + make_ARRAY (YY_COPY (location_type) l); + + static + symbol_type + make_POOLS (YY_COPY (location_type) l); + + static + symbol_type + make_POOL (YY_COPY (location_type) l); + + static + symbol_type + make_PD_POOLS (YY_COPY (location_type) l); + + static + symbol_type + make_PREFIX (YY_COPY (location_type) l); + + static + symbol_type + make_PREFIX_LEN (YY_COPY (location_type) l); + + static + symbol_type + make_EXCLUDED_PREFIX (YY_COPY (location_type) l); + + static + symbol_type + make_EXCLUDED_PREFIX_LEN (YY_COPY (location_type) l); + + static + symbol_type + make_DELEGATED_LEN (YY_COPY (location_type) l); + + static + symbol_type + make_USER_CONTEXT (YY_COPY (location_type) l); + + static + symbol_type + make_COMMENT (YY_COPY (location_type) l); + + static + symbol_type + make_SUBNET (YY_COPY (location_type) l); + + static + symbol_type + make_INTERFACE (YY_COPY (location_type) l); + + static + symbol_type + make_INTERFACE_ID (YY_COPY (location_type) l); + + static + symbol_type + make_ID (YY_COPY (location_type) l); + + static + symbol_type + make_RAPID_COMMIT (YY_COPY (location_type) l); + + static + symbol_type + make_RESERVATION_MODE (YY_COPY (location_type) l); + + static + symbol_type + make_DISABLED (YY_COPY (location_type) l); + + static + symbol_type + make_OUT_OF_POOL (YY_COPY (location_type) l); + + static + symbol_type + make_GLOBAL (YY_COPY (location_type) l); + + static + symbol_type + make_ALL (YY_COPY (location_type) l); + + static + symbol_type + make_SHARED_NETWORKS (YY_COPY (location_type) l); + + static + symbol_type + make_MAC_SOURCES (YY_COPY (location_type) l); + + static + symbol_type + make_RELAY_SUPPLIED_OPTIONS (YY_COPY (location_type) l); + + static + symbol_type + make_HOST_RESERVATION_IDENTIFIERS (YY_COPY (location_type) l); + + static + symbol_type + make_SANITY_CHECKS (YY_COPY (location_type) l); + + static + symbol_type + make_LEASE_CHECKS (YY_COPY (location_type) l); + + static + symbol_type + make_CLIENT_CLASSES (YY_COPY (location_type) l); + + static + symbol_type + make_REQUIRE_CLIENT_CLASSES (YY_COPY (location_type) l); + + static + symbol_type + make_TEST (YY_COPY (location_type) l); + + static + symbol_type + make_ONLY_IF_REQUIRED (YY_COPY (location_type) l); + + static + symbol_type + make_CLIENT_CLASS (YY_COPY (location_type) l); + + static + symbol_type + make_RESERVATIONS (YY_COPY (location_type) l); + + static + symbol_type + make_IP_ADDRESSES (YY_COPY (location_type) l); + + static + symbol_type + make_PREFIXES (YY_COPY (location_type) l); + + static + symbol_type + make_DUID (YY_COPY (location_type) l); + + static + symbol_type + make_HW_ADDRESS (YY_COPY (location_type) l); + + static + symbol_type + make_HOSTNAME (YY_COPY (location_type) l); + + static + symbol_type + make_FLEX_ID (YY_COPY (location_type) l); + + static + symbol_type + make_RELAY (YY_COPY (location_type) l); + + static + symbol_type + make_IP_ADDRESS (YY_COPY (location_type) l); + + static + symbol_type + make_HOOKS_LIBRARIES (YY_COPY (location_type) l); + + static + symbol_type + make_LIBRARY (YY_COPY (location_type) l); + + static + symbol_type + make_PARAMETERS (YY_COPY (location_type) l); + + static + symbol_type + make_EXPIRED_LEASES_PROCESSING (YY_COPY (location_type) l); + + static + symbol_type + make_RECLAIM_TIMER_WAIT_TIME (YY_COPY (location_type) l); + + static + symbol_type + make_FLUSH_RECLAIMED_TIMER_WAIT_TIME (YY_COPY (location_type) l); + + static + symbol_type + make_HOLD_RECLAIMED_TIME (YY_COPY (location_type) l); + + static + symbol_type + make_MAX_RECLAIM_LEASES (YY_COPY (location_type) l); + + static + symbol_type + make_MAX_RECLAIM_TIME (YY_COPY (location_type) l); + + static + symbol_type + make_UNWARNED_RECLAIM_CYCLES (YY_COPY (location_type) l); + + static + symbol_type + make_SERVER_ID (YY_COPY (location_type) l); + + static + symbol_type + make_LLT (YY_COPY (location_type) l); + + static + symbol_type + make_EN (YY_COPY (location_type) l); + + static + symbol_type + make_LL (YY_COPY (location_type) l); + + static + symbol_type + make_IDENTIFIER (YY_COPY (location_type) l); + + static + symbol_type + make_HTYPE (YY_COPY (location_type) l); + + static + symbol_type + make_TIME (YY_COPY (location_type) l); + + static + symbol_type + make_ENTERPRISE_ID (YY_COPY (location_type) l); + + static + symbol_type + make_DHCP4O6_PORT (YY_COPY (location_type) l); + + static + symbol_type + make_CONTROL_SOCKET (YY_COPY (location_type) l); + + static + symbol_type + make_SOCKET_TYPE (YY_COPY (location_type) l); + + static + symbol_type + make_SOCKET_NAME (YY_COPY (location_type) l); + + static + symbol_type + make_DHCP_QUEUE_CONTROL (YY_COPY (location_type) l); + + static + symbol_type + make_DHCP_DDNS (YY_COPY (location_type) l); + + static + symbol_type + make_ENABLE_UPDATES (YY_COPY (location_type) l); + + static + symbol_type + make_QUALIFYING_SUFFIX (YY_COPY (location_type) l); + + static + symbol_type + make_SERVER_IP (YY_COPY (location_type) l); + + static + symbol_type + make_SERVER_PORT (YY_COPY (location_type) l); + + static + symbol_type + make_SENDER_IP (YY_COPY (location_type) l); + + static + symbol_type + make_SENDER_PORT (YY_COPY (location_type) l); + + static + symbol_type + make_MAX_QUEUE_SIZE (YY_COPY (location_type) l); + + static + symbol_type + make_NCR_PROTOCOL (YY_COPY (location_type) l); + + static + symbol_type + make_NCR_FORMAT (YY_COPY (location_type) l); + + static + symbol_type + make_OVERRIDE_NO_UPDATE (YY_COPY (location_type) l); + + static + symbol_type + make_OVERRIDE_CLIENT_UPDATE (YY_COPY (location_type) l); + + static + symbol_type + make_REPLACE_CLIENT_NAME (YY_COPY (location_type) l); + + static + symbol_type + make_GENERATED_PREFIX (YY_COPY (location_type) l); + + static + symbol_type + make_UDP (YY_COPY (location_type) l); + + static + symbol_type + make_TCP (YY_COPY (location_type) l); + + static + symbol_type + make_JSON (YY_COPY (location_type) l); + + static + symbol_type + make_WHEN_PRESENT (YY_COPY (location_type) l); + + static + symbol_type + make_NEVER (YY_COPY (location_type) l); + + static + symbol_type + make_ALWAYS (YY_COPY (location_type) l); + + static + symbol_type + make_WHEN_NOT_PRESENT (YY_COPY (location_type) l); + + static + symbol_type + make_HOSTNAME_CHAR_SET (YY_COPY (location_type) l); + + static + symbol_type + make_HOSTNAME_CHAR_REPLACEMENT (YY_COPY (location_type) l); + + static + symbol_type + make_LOGGING (YY_COPY (location_type) l); + + static + symbol_type + make_LOGGERS (YY_COPY (location_type) l); + + static + symbol_type + make_OUTPUT_OPTIONS (YY_COPY (location_type) l); + + static + symbol_type + make_OUTPUT (YY_COPY (location_type) l); + + static + symbol_type + make_DEBUGLEVEL (YY_COPY (location_type) l); + + static + symbol_type + make_SEVERITY (YY_COPY (location_type) l); + + static + symbol_type + make_FLUSH (YY_COPY (location_type) l); + + static + symbol_type + make_MAXSIZE (YY_COPY (location_type) l); + + static + symbol_type + make_MAXVER (YY_COPY (location_type) l); + + static + symbol_type + make_DHCP4 (YY_COPY (location_type) l); + + static + symbol_type + make_DHCPDDNS (YY_COPY (location_type) l); + + static + symbol_type + make_CONTROL_AGENT (YY_COPY (location_type) l); + + static + symbol_type + make_TOPLEVEL_JSON (YY_COPY (location_type) l); + + static + symbol_type + make_TOPLEVEL_DHCP6 (YY_COPY (location_type) l); + + static + symbol_type + make_SUB_DHCP6 (YY_COPY (location_type) l); + + static + symbol_type + make_SUB_INTERFACES6 (YY_COPY (location_type) l); + + static + symbol_type + make_SUB_SUBNET6 (YY_COPY (location_type) l); + + static + symbol_type + make_SUB_POOL6 (YY_COPY (location_type) l); + + static + symbol_type + make_SUB_PD_POOL (YY_COPY (location_type) l); + + static + symbol_type + make_SUB_RESERVATION (YY_COPY (location_type) l); + + static + symbol_type + make_SUB_OPTION_DEFS (YY_COPY (location_type) l); + + static + symbol_type + make_SUB_OPTION_DEF (YY_COPY (location_type) l); + + static + symbol_type + make_SUB_OPTION_DATA (YY_COPY (location_type) l); + + static + symbol_type + make_SUB_HOOKS_LIBRARY (YY_COPY (location_type) l); + + static + symbol_type + make_SUB_DHCP_DDNS (YY_COPY (location_type) l); + + static + symbol_type + make_SUB_LOGGING (YY_COPY (location_type) l); + + static + symbol_type + make_SUB_CONFIG_CONTROL (YY_COPY (location_type) l); + + static + symbol_type + make_STRING (YY_COPY (std::string) v, YY_COPY (location_type) l); + + static + symbol_type + make_INTEGER (YY_COPY (int64_t) v, YY_COPY (location_type) l); + + static + symbol_type + make_FLOAT (YY_COPY (double) v, YY_COPY (location_type) l); + + static + symbol_type + make_BOOLEAN (YY_COPY (bool) v, YY_COPY (location_type) l); + + + + private: + /// This class is not copyable. + Dhcp6Parser (const Dhcp6Parser&); + Dhcp6Parser& operator= (const Dhcp6Parser&); + + /// State numbers. + typedef int state_type; + + /// Generate an error message. + /// \param yystate the state where the error occurred. + /// \param yyla the lookahead token. + virtual std::string yysyntax_error_ (state_type yystate, + const symbol_type& yyla) const; + + /// Compute post-reduction state. + /// \param yystate the current state + /// \param yysym the nonterminal to push on the stack + state_type yy_lr_goto_state_ (state_type yystate, int yysym); + + /// Whether the given \c yypact_ value indicates a defaulted state. + /// \param yyvalue the value to check + static bool yy_pact_value_is_default_ (int yyvalue); + + /// Whether the given \c yytable_ value indicates a syntax error. + /// \param yyvalue the value to check + static bool yy_table_value_is_error_ (int yyvalue); + + static const short yypact_ninf_; + static const signed char yytable_ninf_; + + /// Convert a scanner token number \a t to a symbol number. + static token_number_type yytranslate_ (token_type t); + + // Tables. + // YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + // STATE-NUM. + static const short yypact_[]; + + // YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. + // Performed when YYTABLE does not specify something else to do. Zero + // means the default is an error. + static const unsigned short yydefact_[]; + + // YYPGOTO[NTERM-NUM]. + static const short yypgoto_[]; + + // YYDEFGOTO[NTERM-NUM]. + static const short yydefgoto_[]; + + // YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If + // positive, shift that token. If negative, reduce the rule whose + // number is the opposite. If YYTABLE_NINF, syntax error. + static const unsigned short yytable_[]; + + static const short yycheck_[]; + + // YYSTOS[STATE-NUM] -- The (internal number of the) accessing + // symbol of state STATE-NUM. + static const unsigned short yystos_[]; + + // YYR1[YYN] -- Symbol number of symbol that rule YYN derives. + static const unsigned short yyr1_[]; + + // YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. + static const unsigned char yyr2_[]; + + + /// Convert the symbol name \a n to a form suitable for a diagnostic. + static std::string yytnamerr_ (const char *n); + + + /// For a symbol, its name in clear. + static const char* const yytname_[]; +#if PARSER6_DEBUG + // YYRLINE[YYN] -- Source line where rule number YYN was defined. + static const unsigned short yyrline_[]; + /// Report on the debug stream that the rule \a r is going to be reduced. + virtual void yy_reduce_print_ (int r); + /// Print the state stack on the debug stream. + virtual void yystack_print_ (); + + /// Debugging level. + int yydebug_; + /// Debug stream. + std::ostream* yycdebug_; + + /// \brief Display a symbol type, value and location. + /// \param yyo The output stream. + /// \param yysym The symbol. + template + void yy_print_ (std::ostream& yyo, const basic_symbol& yysym) const; #endif -#if 201103L <= YY_CPLUSPLUS - static - symbol_type - make_BOOLEAN (bool v, location_type l) - { - return symbol_type (token::TOKEN_BOOLEAN, std::move (v), std::move (l)); - } -#else - static - symbol_type - make_BOOLEAN (const bool& v, const location_type& l) - { - return symbol_type (token::TOKEN_BOOLEAN, v, l); - } + + /// \brief Reclaim the memory associated to a symbol. + /// \param yymsg Why this token is reclaimed. + /// If null, print nothing. + /// \param yysym The symbol. + template + void yy_destroy_ (const char* yymsg, basic_symbol& yysym) const; + + private: + /// Type access provider for state based symbols. + struct by_state + { + /// Default constructor. + by_state (); + + /// The symbol type as needed by the constructor. + typedef state_type kind_type; + + /// Constructor. + by_state (kind_type s); + + /// Copy constructor. + by_state (const by_state& other); + + /// Record that this symbol is empty. + void clear (); + + /// Steal the symbol type from \a that. + void move (by_state& that); + + /// The (internal) type number (corresponding to \a state). + /// \a empty_symbol when empty. + symbol_number_type type_get () const; + + /// The state number used to denote an empty symbol. + enum { empty_state = -1 }; + + /// The state. + /// \a empty when empty. + state_type state; + }; + + /// "Internal" symbol: element of the stack. + struct stack_symbol_type : basic_symbol + { + /// Superclass. + typedef basic_symbol super_type; + /// Construct an empty symbol. + stack_symbol_type (); + /// Move or copy construction. + stack_symbol_type (YY_RVREF (stack_symbol_type) that); + /// Steal the contents from \a sym to build this. + stack_symbol_type (state_type s, YY_MOVE_REF (symbol_type) sym); +#if !defined __cplusplus || __cplusplus < 201103L + /// Assignment, needed by push_back by some old implementations. + /// Moves the contents of that. + stack_symbol_type& operator= (stack_symbol_type& that); #endif + }; + + /// Stack type. + typedef stack stack_type; + + /// The stack. + stack_type yystack_; + + /// Push a new state on the stack. + /// \param m a debug message to display + /// if null, no trace is output. + /// \param sym the symbol + /// \warning the contents of \a s.value is stolen. + void yypush_ (const char* m, YY_MOVE_REF (stack_symbol_type) sym); + + /// Push a new look ahead token on the state on the stack. + /// \param m a debug message to display + /// if null, no trace is output. + /// \param s the state + /// \param sym the symbol (for its value and location). + /// \warning the contents of \a sym.value is stolen. + void yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym); + + /// Pop \a n symbols from the stack. + void yypop_ (int n = 1); + + /// Constants. + enum + { + yyeof_ = 0, + yylast_ = 1039, ///< Last index in yytable_. + yynnts_ = 396, ///< Number of nonterminal symbols. + yyfinal_ = 32, ///< Termination state number. + yyterror_ = 1, + yyerrcode_ = 256, + yyntokens_ = 178 ///< Number of tokens. + }; + + + // User arguments. + isc::dhcp::Parser6Context& ctx; + }; + + // Symbol number corresponding to token number t. + inline + Dhcp6Parser::token_number_type + Dhcp6Parser::yytranslate_ (token_type t) + { + static + const token_number_type + translate_table[] = + { + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 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, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 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, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177 + }; + const unsigned user_token_number_max_ = 432; + const token_number_type undef_token_ = 2; + + if (static_cast (t) <= yyeof_) + return yyeof_; + else if (static_cast (t) <= user_token_number_max_) + return translate_table[t]; + else + return undef_token_; + } + + inline + Dhcp6Parser::syntax_error::syntax_error (const location_type& l, const std::string& m) + : std::runtime_error (m) + , location (l) + {} + + // basic_symbol. + template + Dhcp6Parser::basic_symbol::basic_symbol () + : value () + , location () + {} + + template + Dhcp6Parser::basic_symbol::basic_symbol (YY_RVREF (basic_symbol) other) + : Base (YY_MOVE (other)) + , value () + , location (YY_MOVE (other.location)) + { + switch (other.type_get ()) + { + case 195: // value + case 199: // map_value + case 253: // db_type + case 346: // hr_mode + case 482: // duid_type + case 517: // ncr_protocol_value + case 524: // replace_client_name_value + value.YY_MOVE_OR_COPY< ElementPtr > (YY_MOVE (other.value)); + break; + + case 177: // "boolean" + value.YY_MOVE_OR_COPY< bool > (YY_MOVE (other.value)); + break; + + case 176: // "floating point" + value.YY_MOVE_OR_COPY< double > (YY_MOVE (other.value)); + break; + + case 175: // "integer" + value.YY_MOVE_OR_COPY< int64_t > (YY_MOVE (other.value)); + break; + + case 174: // "constant string" + value.YY_MOVE_OR_COPY< std::string > (YY_MOVE (other.value)); + break; + + default: + break; + } + + } + + + // Implementation of basic_symbol constructor for each type. + template + Dhcp6Parser::basic_symbol::basic_symbol (typename Base::kind_type t, YY_RVREF (location_type) l) + : Base (t) + , location (YY_MOVE (l)) + {} + + template + Dhcp6Parser::basic_symbol::basic_symbol (typename Base::kind_type t, YY_RVREF (ElementPtr) v, YY_RVREF (location_type) l) + : Base (t) + , value (YY_MOVE (v)) + , location (YY_MOVE (l)) + {} + + template + Dhcp6Parser::basic_symbol::basic_symbol (typename Base::kind_type t, YY_RVREF (bool) v, YY_RVREF (location_type) l) + : Base (t) + , value (YY_MOVE (v)) + , location (YY_MOVE (l)) + {} + + template + Dhcp6Parser::basic_symbol::basic_symbol (typename Base::kind_type t, YY_RVREF (double) v, YY_RVREF (location_type) l) + : Base (t) + , value (YY_MOVE (v)) + , location (YY_MOVE (l)) + {} + + template + Dhcp6Parser::basic_symbol::basic_symbol (typename Base::kind_type t, YY_RVREF (int64_t) v, YY_RVREF (location_type) l) + : Base (t) + , value (YY_MOVE (v)) + , location (YY_MOVE (l)) + {} + + template + Dhcp6Parser::basic_symbol::basic_symbol (typename Base::kind_type t, YY_RVREF (std::string) v, YY_RVREF (location_type) l) + : Base (t) + , value (YY_MOVE (v)) + , location (YY_MOVE (l)) + {} + + + + template + Dhcp6Parser::basic_symbol::~basic_symbol () + { + clear (); + } + + template + void + Dhcp6Parser::basic_symbol::clear () + { + // User destructor. + symbol_number_type yytype = this->type_get (); + basic_symbol& yysym = *this; + (void) yysym; + switch (yytype) + { + default: + break; + } + + // Type destructor. + switch (yytype) + { + case 195: // value + case 199: // map_value + case 253: // db_type + case 346: // hr_mode + case 482: // duid_type + case 517: // ncr_protocol_value + case 524: // replace_client_name_value + value.template destroy< ElementPtr > (); + break; + + case 177: // "boolean" + value.template destroy< bool > (); + break; + + case 176: // "floating point" + value.template destroy< double > (); + break; + + case 175: // "integer" + value.template destroy< int64_t > (); + break; + + case 174: // "constant string" + value.template destroy< std::string > (); + break; + + default: + break; + } + + Base::clear (); + } + + template + bool + Dhcp6Parser::basic_symbol::empty () const + { + return Base::type_get () == empty_symbol; + } + + template + void + Dhcp6Parser::basic_symbol::move (basic_symbol& s) + { + super_type::move (s); + switch (this->type_get ()) + { + case 195: // value + case 199: // map_value + case 253: // db_type + case 346: // hr_mode + case 482: // duid_type + case 517: // ncr_protocol_value + case 524: // replace_client_name_value + value.move< ElementPtr > (YY_MOVE (s.value)); + break; + + case 177: // "boolean" + value.move< bool > (YY_MOVE (s.value)); + break; + + case 176: // "floating point" + value.move< double > (YY_MOVE (s.value)); + break; + + case 175: // "integer" + value.move< int64_t > (YY_MOVE (s.value)); + break; + + case 174: // "constant string" + value.move< std::string > (YY_MOVE (s.value)); + break; + + default: + break; + } + + location = YY_MOVE (s.location); + } + + // by_type. + inline + Dhcp6Parser::by_type::by_type () + : type (empty_symbol) + {} + + inline + Dhcp6Parser::by_type::by_type (const by_type& other) + : type (other.type) + {} + + inline + Dhcp6Parser::by_type::by_type (token_type t) + : type (yytranslate_ (t)) + {} + + inline + void + Dhcp6Parser::by_type::clear () + { + type = empty_symbol; + } + + inline + void + Dhcp6Parser::by_type::move (by_type& that) + { + type = that.type; + that.clear (); + } + + inline + int + Dhcp6Parser::by_type::type_get () const + { + return type; + } + + inline + Dhcp6Parser::token_type + Dhcp6Parser::by_type::token () const + { + // YYTOKNUM[NUM] -- (External) token number corresponding to the + // (internal) symbol number NUM (which must be that of a token). */ + static + const unsigned short + yytoken_number_[] = + { + 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432 + }; + return static_cast (yytoken_number_[type]); + } + + // Implementation of make_symbol for each symbol type. + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_END (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_END, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_COMMA (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_COMMA, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_COLON (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_COLON, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_LSQUARE_BRACKET (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_LSQUARE_BRACKET, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_RSQUARE_BRACKET (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_RSQUARE_BRACKET, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_LCURLY_BRACKET (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_LCURLY_BRACKET, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_RCURLY_BRACKET (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_RCURLY_BRACKET, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_NULL_TYPE (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_NULL_TYPE, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_DHCP6 (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_DHCP6, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_DATA_DIRECTORY (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_DATA_DIRECTORY, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_CONFIG_CONTROL (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_CONFIG_CONTROL, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_CONFIG_DATABASES (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_CONFIG_DATABASES, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_CONFIG_FETCH_WAIT_TIME (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_CONFIG_FETCH_WAIT_TIME, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_INTERFACES_CONFIG (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_INTERFACES_CONFIG, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_INTERFACES (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_INTERFACES, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_RE_DETECT (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_RE_DETECT, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_LEASE_DATABASE (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_LEASE_DATABASE, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_HOSTS_DATABASE (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_HOSTS_DATABASE, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_HOSTS_DATABASES (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_HOSTS_DATABASES, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_TYPE (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_TYPE, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_MEMFILE (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_MEMFILE, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_MYSQL (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_MYSQL, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_POSTGRESQL (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_POSTGRESQL, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_CQL (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_CQL, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_USER (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_USER, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_PASSWORD (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_PASSWORD, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_HOST (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_HOST, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_PORT (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_PORT, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_PERSIST (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_PERSIST, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_LFC_INTERVAL (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_LFC_INTERVAL, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_READONLY (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_READONLY, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_CONNECT_TIMEOUT (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_CONNECT_TIMEOUT, YY_MOVE (l)); + } + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_CONTACT_POINTS (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_CONTACT_POINTS, YY_MOVE (l)); + } - private: - /// This class is not copyable. - Dhcp6Parser (const Dhcp6Parser&); - Dhcp6Parser& operator= (const Dhcp6Parser&); + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_MAX_RECONNECT_TRIES (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_MAX_RECONNECT_TRIES, YY_MOVE (l)); + } - /// State numbers. - typedef int state_type; + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_RECONNECT_WAIT_TIME (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_RECONNECT_WAIT_TIME, YY_MOVE (l)); + } - /// Generate an error message. - /// \param yystate the state where the error occurred. - /// \param yyla the lookahead token. - virtual std::string yysyntax_error_ (state_type yystate, - const symbol_type& yyla) const; + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_KEYSPACE (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_KEYSPACE, YY_MOVE (l)); + } - /// Compute post-reduction state. - /// \param yystate the current state - /// \param yysym the nonterminal to push on the stack - state_type yy_lr_goto_state_ (state_type yystate, int yysym); + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_CONSISTENCY (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_CONSISTENCY, YY_MOVE (l)); + } - /// Whether the given \c yypact_ value indicates a defaulted state. - /// \param yyvalue the value to check - static bool yy_pact_value_is_default_ (int yyvalue); + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_SERIAL_CONSISTENCY (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_SERIAL_CONSISTENCY, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_REQUEST_TIMEOUT (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_REQUEST_TIMEOUT, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_TCP_KEEPALIVE (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_TCP_KEEPALIVE, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_TCP_NODELAY (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_TCP_NODELAY, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_PREFERRED_LIFETIME (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_PREFERRED_LIFETIME, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_VALID_LIFETIME (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_VALID_LIFETIME, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_RENEW_TIMER (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_RENEW_TIMER, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_REBIND_TIMER (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_REBIND_TIMER, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_DECLINE_PROBATION_PERIOD (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_DECLINE_PROBATION_PERIOD, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_SERVER_TAG (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_SERVER_TAG, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_SUBNET6 (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_SUBNET6, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_OPTION_DEF (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_OPTION_DEF, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_OPTION_DATA (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_OPTION_DATA, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_NAME (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_NAME, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_DATA (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_DATA, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_CODE (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_CODE, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_SPACE (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_SPACE, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_CSV_FORMAT (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_CSV_FORMAT, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_ALWAYS_SEND (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_ALWAYS_SEND, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_RECORD_TYPES (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_RECORD_TYPES, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_ENCAPSULATE (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_ENCAPSULATE, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_ARRAY (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_ARRAY, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_POOLS (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_POOLS, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_POOL (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_POOL, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_PD_POOLS (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_PD_POOLS, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_PREFIX (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_PREFIX, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_PREFIX_LEN (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_PREFIX_LEN, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_EXCLUDED_PREFIX (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_EXCLUDED_PREFIX, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_EXCLUDED_PREFIX_LEN (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_EXCLUDED_PREFIX_LEN, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_DELEGATED_LEN (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_DELEGATED_LEN, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_USER_CONTEXT (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_USER_CONTEXT, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_COMMENT (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_COMMENT, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_SUBNET (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_SUBNET, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_INTERFACE (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_INTERFACE, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_INTERFACE_ID (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_INTERFACE_ID, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_ID (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_ID, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_RAPID_COMMIT (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_RAPID_COMMIT, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_RESERVATION_MODE (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_RESERVATION_MODE, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_DISABLED (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_DISABLED, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_OUT_OF_POOL (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_OUT_OF_POOL, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_GLOBAL (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_GLOBAL, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_ALL (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_ALL, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_SHARED_NETWORKS (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_SHARED_NETWORKS, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_MAC_SOURCES (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_MAC_SOURCES, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_RELAY_SUPPLIED_OPTIONS (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_RELAY_SUPPLIED_OPTIONS, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_HOST_RESERVATION_IDENTIFIERS (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_HOST_RESERVATION_IDENTIFIERS, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_SANITY_CHECKS (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_SANITY_CHECKS, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_LEASE_CHECKS (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_LEASE_CHECKS, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_CLIENT_CLASSES (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_CLIENT_CLASSES, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_REQUIRE_CLIENT_CLASSES (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_REQUIRE_CLIENT_CLASSES, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_TEST (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_TEST, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_ONLY_IF_REQUIRED (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_ONLY_IF_REQUIRED, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_CLIENT_CLASS (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_CLIENT_CLASS, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_RESERVATIONS (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_RESERVATIONS, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_IP_ADDRESSES (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_IP_ADDRESSES, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_PREFIXES (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_PREFIXES, YY_MOVE (l)); + } - /// Whether the given \c yytable_ value indicates a syntax error. - /// \param yyvalue the value to check - static bool yy_table_value_is_error_ (int yyvalue); + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_DUID (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_DUID, YY_MOVE (l)); + } - static const short yypact_ninf_; - static const signed char yytable_ninf_; + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_HW_ADDRESS (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_HW_ADDRESS, YY_MOVE (l)); + } - /// Convert a scanner token number \a t to a symbol number. - static token_number_type yytranslate_ (token_type t); + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_HOSTNAME (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_HOSTNAME, YY_MOVE (l)); + } - // Tables. - // YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing - // STATE-NUM. - static const short yypact_[]; + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_FLEX_ID (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_FLEX_ID, YY_MOVE (l)); + } - // YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. - // Performed when YYTABLE does not specify something else to do. Zero - // means the default is an error. - static const unsigned short yydefact_[]; + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_RELAY (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_RELAY, YY_MOVE (l)); + } - // YYPGOTO[NTERM-NUM]. - static const short yypgoto_[]; + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_IP_ADDRESS (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_IP_ADDRESS, YY_MOVE (l)); + } - // YYDEFGOTO[NTERM-NUM]. - static const short yydefgoto_[]; + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_HOOKS_LIBRARIES (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_HOOKS_LIBRARIES, YY_MOVE (l)); + } - // YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If - // positive, shift that token. If negative, reduce the rule whose - // number is the opposite. If YYTABLE_NINF, syntax error. - static const unsigned short yytable_[]; + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_LIBRARY (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_LIBRARY, YY_MOVE (l)); + } - static const short yycheck_[]; + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_PARAMETERS (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_PARAMETERS, YY_MOVE (l)); + } - // YYSTOS[STATE-NUM] -- The (internal number of the) accessing - // symbol of state STATE-NUM. - static const unsigned short yystos_[]; + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_EXPIRED_LEASES_PROCESSING (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_EXPIRED_LEASES_PROCESSING, YY_MOVE (l)); + } - // YYR1[YYN] -- Symbol number of symbol that rule YYN derives. - static const unsigned short yyr1_[]; + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_RECLAIM_TIMER_WAIT_TIME (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_RECLAIM_TIMER_WAIT_TIME, YY_MOVE (l)); + } - // YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. - static const unsigned char yyr2_[]; + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_FLUSH_RECLAIMED_TIMER_WAIT_TIME (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME, YY_MOVE (l)); + } + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_HOLD_RECLAIMED_TIME (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_HOLD_RECLAIMED_TIME, YY_MOVE (l)); + } - /// Convert the symbol name \a n to a form suitable for a diagnostic. - static std::string yytnamerr_ (const char *n); + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_MAX_RECLAIM_LEASES (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_MAX_RECLAIM_LEASES, YY_MOVE (l)); + } + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_MAX_RECLAIM_TIME (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_MAX_RECLAIM_TIME, YY_MOVE (l)); + } - /// For a symbol, its name in clear. - static const char* const yytname_[]; -#if PARSER6_DEBUG - // YYRLINE[YYN] -- Source line where rule number YYN was defined. - static const unsigned short yyrline_[]; - /// Report on the debug stream that the rule \a r is going to be reduced. - virtual void yy_reduce_print_ (int r); - /// Print the state stack on the debug stream. - virtual void yystack_print_ (); + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_UNWARNED_RECLAIM_CYCLES (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_UNWARNED_RECLAIM_CYCLES, YY_MOVE (l)); + } - /// Debugging level. - int yydebug_; - /// Debug stream. - std::ostream* yycdebug_; + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_SERVER_ID (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_SERVER_ID, YY_MOVE (l)); + } - /// \brief Display a symbol type, value and location. - /// \param yyo The output stream. - /// \param yysym The symbol. - template - void yy_print_ (std::ostream& yyo, const basic_symbol& yysym) const; -#endif + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_LLT (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_LLT, YY_MOVE (l)); + } - /// \brief Reclaim the memory associated to a symbol. - /// \param yymsg Why this token is reclaimed. - /// If null, print nothing. - /// \param yysym The symbol. - template - void yy_destroy_ (const char* yymsg, basic_symbol& yysym) const; + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_EN (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_EN, YY_MOVE (l)); + } - private: - /// Type access provider for state based symbols. - struct by_state - { - /// Default constructor. - by_state () YY_NOEXCEPT; + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_LL (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_LL, YY_MOVE (l)); + } - /// The symbol type as needed by the constructor. - typedef state_type kind_type; + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_IDENTIFIER (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_IDENTIFIER, YY_MOVE (l)); + } - /// Constructor. - by_state (kind_type s) YY_NOEXCEPT; + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_HTYPE (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_HTYPE, YY_MOVE (l)); + } - /// Copy constructor. - by_state (const by_state& that) YY_NOEXCEPT; + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_TIME (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_TIME, YY_MOVE (l)); + } - /// Record that this symbol is empty. - void clear () YY_NOEXCEPT; + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_ENTERPRISE_ID (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_ENTERPRISE_ID, YY_MOVE (l)); + } - /// Steal the symbol type from \a that. - void move (by_state& that); + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_DHCP4O6_PORT (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_DHCP4O6_PORT, YY_MOVE (l)); + } - /// The (internal) type number (corresponding to \a state). - /// \a empty_symbol when empty. - symbol_number_type type_get () const YY_NOEXCEPT; + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_CONTROL_SOCKET (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_CONTROL_SOCKET, YY_MOVE (l)); + } - /// The state number used to denote an empty symbol. - enum { empty_state = -1 }; + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_SOCKET_TYPE (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_SOCKET_TYPE, YY_MOVE (l)); + } - /// The state. - /// \a empty when empty. - state_type state; - }; + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_SOCKET_NAME (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_SOCKET_NAME, YY_MOVE (l)); + } - /// "Internal" symbol: element of the stack. - struct stack_symbol_type : basic_symbol - { - /// Superclass. - typedef basic_symbol super_type; - /// Construct an empty symbol. - stack_symbol_type (); - /// Move or copy construction. - stack_symbol_type (YY_RVREF (stack_symbol_type) that); - /// Steal the contents from \a sym to build this. - stack_symbol_type (state_type s, YY_MOVE_REF (symbol_type) sym); -#if YY_CPLUSPLUS < 201103L - /// Assignment, needed by push_back by some old implementations. - /// Moves the contents of that. - stack_symbol_type& operator= (stack_symbol_type& that); -#endif - }; + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_DHCP_QUEUE_CONTROL (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_DHCP_QUEUE_CONTROL, YY_MOVE (l)); + } - /// A stack with random access from its top. - template > - class stack - { - public: - // Hide our reversed order. - typedef typename S::reverse_iterator iterator; - typedef typename S::const_reverse_iterator const_iterator; - typedef typename S::size_type size_type; - - stack (size_type n = 200) - : seq_ (n) - {} - - /// Random access. - /// - /// Index 0 returns the topmost element. - T& - operator[] (size_type i) - { - return seq_[size () - 1 - i]; - } - - /// Random access. - /// - /// Index 0 returns the topmost element. - T& - operator[] (int i) - { - return operator[] (size_type (i)); - } - - /// Random access. - /// - /// Index 0 returns the topmost element. - const T& - operator[] (size_type i) const - { - return seq_[size () - 1 - i]; - } - - /// Random access. - /// - /// Index 0 returns the topmost element. - const T& - operator[] (int i) const - { - return operator[] (size_type (i)); - } - - /// Steal the contents of \a t. - /// - /// Close to move-semantics. - void - push (YY_MOVE_REF (T) t) - { - seq_.push_back (T ()); - operator[] (0).move (t); - } + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_DHCP_DDNS (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_DHCP_DDNS, YY_MOVE (l)); + } - /// Pop elements from the stack. - void - pop (int n = 1) YY_NOEXCEPT - { - for (; 0 < n; --n) - seq_.pop_back (); - } + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_ENABLE_UPDATES (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_ENABLE_UPDATES, YY_MOVE (l)); + } - /// Pop all elements from the stack. - void - clear () YY_NOEXCEPT - { - seq_.clear (); - } + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_QUALIFYING_SUFFIX (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_QUALIFYING_SUFFIX, YY_MOVE (l)); + } - /// Number of elements on the stack. - size_type - size () const YY_NOEXCEPT - { - return seq_.size (); - } + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_SERVER_IP (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_SERVER_IP, YY_MOVE (l)); + } - /// Iterator on top of the stack (going downwards). - const_iterator - begin () const YY_NOEXCEPT - { - return seq_.rbegin (); - } + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_SERVER_PORT (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_SERVER_PORT, YY_MOVE (l)); + } - /// Bottom of the stack. - const_iterator - end () const YY_NOEXCEPT - { - return seq_.rend (); - } + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_SENDER_IP (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_SENDER_IP, YY_MOVE (l)); + } - /// Present a slice of the top of a stack. - class slice - { - public: - slice (const stack& stack, int range) - : stack_ (stack) - , range_ (range) - {} - - const T& - operator[] (int i) const - { - return stack_[range_ - i]; - } - - private: - const stack& stack_; - int range_; - }; + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_SENDER_PORT (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_SENDER_PORT, YY_MOVE (l)); + } - private: - stack (const stack&); - stack& operator= (const stack&); - /// The wrapped container. - S seq_; - }; + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_MAX_QUEUE_SIZE (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_MAX_QUEUE_SIZE, YY_MOVE (l)); + } + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_NCR_PROTOCOL (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_NCR_PROTOCOL, YY_MOVE (l)); + } - /// Stack type. - typedef stack stack_type; + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_NCR_FORMAT (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_NCR_FORMAT, YY_MOVE (l)); + } - /// The stack. - stack_type yystack_; + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_OVERRIDE_NO_UPDATE (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_OVERRIDE_NO_UPDATE, YY_MOVE (l)); + } - /// Push a new state on the stack. - /// \param m a debug message to display - /// if null, no trace is output. - /// \param sym the symbol - /// \warning the contents of \a s.value is stolen. - void yypush_ (const char* m, YY_MOVE_REF (stack_symbol_type) sym); + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_OVERRIDE_CLIENT_UPDATE (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_OVERRIDE_CLIENT_UPDATE, YY_MOVE (l)); + } - /// Push a new look ahead token on the state on the stack. - /// \param m a debug message to display - /// if null, no trace is output. - /// \param s the state - /// \param sym the symbol (for its value and location). - /// \warning the contents of \a sym.value is stolen. - void yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym); + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_REPLACE_CLIENT_NAME (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_REPLACE_CLIENT_NAME, YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_GENERATED_PREFIX (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_GENERATED_PREFIX, YY_MOVE (l)); + } - /// Pop \a n symbols from the stack. - void yypop_ (int n = 1); + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_UDP (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_UDP, YY_MOVE (l)); + } - /// Constants. - enum - { - yyeof_ = 0, - yylast_ = 1035, ///< Last index in yytable_. - yynnts_ = 395, ///< Number of nonterminal symbols. - yyfinal_ = 32, ///< Termination state number. - yyterror_ = 1, - yyerrcode_ = 256, - yyntokens_ = 177 ///< Number of tokens. - }; + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_TCP (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_TCP, YY_MOVE (l)); + } + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_JSON (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_JSON, YY_MOVE (l)); + } - // User arguments. - isc::dhcp::Parser6Context& ctx; - }; + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_WHEN_PRESENT (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_WHEN_PRESENT, YY_MOVE (l)); + } inline - Dhcp6Parser::token_number_type - Dhcp6Parser::yytranslate_ (token_type t) + Dhcp6Parser::symbol_type + Dhcp6Parser::make_NEVER (YY_COPY (location_type) l) { - // YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to - // TOKEN-NUM as returned by yylex. - static - const token_number_type - translate_table[] = - { - 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 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, 80, 81, 82, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, - 95, 96, 97, 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, 128, 129, 130, 131, 132, 133, 134, - 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, - 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, - 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, - 175, 176 - }; - const unsigned user_token_number_max_ = 431; - const token_number_type undef_token_ = 2; + return symbol_type (token::TOKEN_NEVER, YY_MOVE (l)); + } - if (static_cast (t) <= yyeof_) - return yyeof_; - else if (static_cast (t) <= user_token_number_max_) - return translate_table[t]; - else - return undef_token_; + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_ALWAYS (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_ALWAYS, YY_MOVE (l)); } - // basic_symbol. -#if 201103L <= YY_CPLUSPLUS - template - Dhcp6Parser::basic_symbol::basic_symbol (basic_symbol&& that) - : Base (std::move (that)) - , value () - , location (std::move (that.location)) + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_WHEN_NOT_PRESENT (YY_COPY (location_type) l) { - switch (this->type_get ()) - { - case 194: // value - case 198: // map_value - case 252: // db_type - case 345: // hr_mode - case 481: // duid_type - case 516: // ncr_protocol_value - case 523: // replace_client_name_value - value.move< ElementPtr > (std::move (that.value)); - break; + return symbol_type (token::TOKEN_WHEN_NOT_PRESENT, YY_MOVE (l)); + } - case 176: // "boolean" - value.move< bool > (std::move (that.value)); - break; + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_HOSTNAME_CHAR_SET (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_HOSTNAME_CHAR_SET, YY_MOVE (l)); + } - case 175: // "floating point" - value.move< double > (std::move (that.value)); - break; + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_HOSTNAME_CHAR_REPLACEMENT (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_HOSTNAME_CHAR_REPLACEMENT, YY_MOVE (l)); + } - case 174: // "integer" - value.move< int64_t > (std::move (that.value)); - break; + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_LOGGING (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_LOGGING, YY_MOVE (l)); + } - case 173: // "constant string" - value.move< std::string > (std::move (that.value)); - break; + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_LOGGERS (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_LOGGERS, YY_MOVE (l)); + } - default: - break; - } + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_OUTPUT_OPTIONS (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_OUTPUT_OPTIONS, YY_MOVE (l)); + } + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_OUTPUT (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_OUTPUT, YY_MOVE (l)); } -#endif - template - Dhcp6Parser::basic_symbol::basic_symbol (const basic_symbol& that) - : Base (that) - , value () - , location (that.location) + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_DEBUGLEVEL (YY_COPY (location_type) l) { - switch (this->type_get ()) - { - case 194: // value - case 198: // map_value - case 252: // db_type - case 345: // hr_mode - case 481: // duid_type - case 516: // ncr_protocol_value - case 523: // replace_client_name_value - value.copy< ElementPtr > (YY_MOVE (that.value)); - break; + return symbol_type (token::TOKEN_DEBUGLEVEL, YY_MOVE (l)); + } - case 176: // "boolean" - value.copy< bool > (YY_MOVE (that.value)); - break; + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_SEVERITY (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_SEVERITY, YY_MOVE (l)); + } - case 175: // "floating point" - value.copy< double > (YY_MOVE (that.value)); - break; + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_FLUSH (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_FLUSH, YY_MOVE (l)); + } - case 174: // "integer" - value.copy< int64_t > (YY_MOVE (that.value)); - break; + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_MAXSIZE (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_MAXSIZE, YY_MOVE (l)); + } - case 173: // "constant string" - value.copy< std::string > (YY_MOVE (that.value)); - break; + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_MAXVER (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_MAXVER, YY_MOVE (l)); + } - default: - break; - } + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_DHCP4 (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_DHCP4, YY_MOVE (l)); + } + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_DHCPDDNS (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_DHCPDDNS, YY_MOVE (l)); } + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_CONTROL_AGENT (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_CONTROL_AGENT, YY_MOVE (l)); + } + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_TOPLEVEL_JSON (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_TOPLEVEL_JSON, YY_MOVE (l)); + } - template - bool - Dhcp6Parser::basic_symbol::empty () const YY_NOEXCEPT + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_TOPLEVEL_DHCP6 (YY_COPY (location_type) l) { - return Base::type_get () == empty_symbol; + return symbol_type (token::TOKEN_TOPLEVEL_DHCP6, YY_MOVE (l)); } - template - void - Dhcp6Parser::basic_symbol::move (basic_symbol& s) + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_SUB_DHCP6 (YY_COPY (location_type) l) { - super_type::move (s); - switch (this->type_get ()) - { - case 194: // value - case 198: // map_value - case 252: // db_type - case 345: // hr_mode - case 481: // duid_type - case 516: // ncr_protocol_value - case 523: // replace_client_name_value - value.move< ElementPtr > (YY_MOVE (s.value)); - break; + return symbol_type (token::TOKEN_SUB_DHCP6, YY_MOVE (l)); + } - case 176: // "boolean" - value.move< bool > (YY_MOVE (s.value)); - break; + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_SUB_INTERFACES6 (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_SUB_INTERFACES6, YY_MOVE (l)); + } - case 175: // "floating point" - value.move< double > (YY_MOVE (s.value)); - break; + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_SUB_SUBNET6 (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_SUB_SUBNET6, YY_MOVE (l)); + } - case 174: // "integer" - value.move< int64_t > (YY_MOVE (s.value)); - break; + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_SUB_POOL6 (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_SUB_POOL6, YY_MOVE (l)); + } - case 173: // "constant string" - value.move< std::string > (YY_MOVE (s.value)); - break; + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_SUB_PD_POOL (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_SUB_PD_POOL, YY_MOVE (l)); + } - default: - break; - } + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_SUB_RESERVATION (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_SUB_RESERVATION, YY_MOVE (l)); + } - location = YY_MOVE (s.location); + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_SUB_OPTION_DEFS (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_SUB_OPTION_DEFS, YY_MOVE (l)); } - // by_type. inline - Dhcp6Parser::by_type::by_type () - : type (empty_symbol) - {} + Dhcp6Parser::symbol_type + Dhcp6Parser::make_SUB_OPTION_DEF (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_SUB_OPTION_DEF, YY_MOVE (l)); + } -#if 201103L <= YY_CPLUSPLUS inline - Dhcp6Parser::by_type::by_type (by_type&& that) - : type (that.type) + Dhcp6Parser::symbol_type + Dhcp6Parser::make_SUB_OPTION_DATA (YY_COPY (location_type) l) { - that.clear (); + return symbol_type (token::TOKEN_SUB_OPTION_DATA, YY_MOVE (l)); } -#endif inline - Dhcp6Parser::by_type::by_type (const by_type& that) - : type (that.type) - {} + Dhcp6Parser::symbol_type + Dhcp6Parser::make_SUB_HOOKS_LIBRARY (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_SUB_HOOKS_LIBRARY, YY_MOVE (l)); + } inline - Dhcp6Parser::by_type::by_type (token_type t) - : type (yytranslate_ (t)) - {} + Dhcp6Parser::symbol_type + Dhcp6Parser::make_SUB_DHCP_DDNS (YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_SUB_DHCP_DDNS, YY_MOVE (l)); + } inline - void - Dhcp6Parser::by_type::clear () + Dhcp6Parser::symbol_type + Dhcp6Parser::make_SUB_LOGGING (YY_COPY (location_type) l) { - type = empty_symbol; + return symbol_type (token::TOKEN_SUB_LOGGING, YY_MOVE (l)); } inline - void - Dhcp6Parser::by_type::move (by_type& that) + Dhcp6Parser::symbol_type + Dhcp6Parser::make_SUB_CONFIG_CONTROL (YY_COPY (location_type) l) { - type = that.type; - that.clear (); + return symbol_type (token::TOKEN_SUB_CONFIG_CONTROL, YY_MOVE (l)); } inline - int - Dhcp6Parser::by_type::type_get () const YY_NOEXCEPT + Dhcp6Parser::symbol_type + Dhcp6Parser::make_STRING (YY_COPY (std::string) v, YY_COPY (location_type) l) { - return type; + return symbol_type (token::TOKEN_STRING, YY_MOVE (v), YY_MOVE (l)); } inline - Dhcp6Parser::token_type - Dhcp6Parser::by_type::token () const YY_NOEXCEPT + Dhcp6Parser::symbol_type + Dhcp6Parser::make_INTEGER (YY_COPY (int64_t) v, YY_COPY (location_type) l) { - // YYTOKNUM[NUM] -- (External) token number corresponding to the - // (internal) symbol number NUM (which must be that of a token). */ - static - const unsigned short - yytoken_number_[] = - { - 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, - 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, - 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, - 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, - 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, - 425, 426, 427, 428, 429, 430, 431 - }; - return token_type (yytoken_number_[type]); + return symbol_type (token::TOKEN_INTEGER, YY_MOVE (v), YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_FLOAT (YY_COPY (double) v, YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_FLOAT, YY_MOVE (v), YY_MOVE (l)); + } + + inline + Dhcp6Parser::symbol_type + Dhcp6Parser::make_BOOLEAN (YY_COPY (bool) v, YY_COPY (location_type) l) + { + return symbol_type (token::TOKEN_BOOLEAN, YY_MOVE (v), YY_MOVE (l)); } -#line 14 "dhcp6_parser.yy" // lalr1.cc:401 + +#line 14 "dhcp6_parser.yy" // lalr1.cc:404 } } // isc::dhcp -#line 4196 "dhcp6_parser.h" // lalr1.cc:401 +#line 3326 "dhcp6_parser.h" // lalr1.cc:404 diff --git a/src/bin/dhcp6/dhcp6_parser.yy b/src/bin/dhcp6/dhcp6_parser.yy index e1aabb6d49..bd321f3d99 100644 --- a/src/bin/dhcp6/dhcp6_parser.yy +++ b/src/bin/dhcp6/dhcp6_parser.yy @@ -53,6 +53,8 @@ using namespace std; DATA_DIRECTORY "data-directory" CONFIG_CONTROL "config-control" CONFIG_DATABASES "config-databases" + CONFIG_FETCH_WAIT_TIME "config-fetch-wait-time" + INTERFACES_CONFIG "interfaces-config" INTERFACES "interfaces" RE_DETECT "re-detect" @@ -2219,6 +2221,7 @@ config_control_params: config_control_param // This defines a list of allowed parameters for each subnet. config_control_param: config_databases + | config_fetch_wait_time ; config_databases: CONFIG_DATABASES { @@ -2231,6 +2234,11 @@ config_databases: CONFIG_DATABASES { ctx.leave(); }; +config_fetch_wait_time: CONFIG_FETCH_WAIT_TIME COLON INTEGER { + ElementPtr value(new IntElement($3, ctx.loc2pos(@3))); + ctx.stack_.back()->set("config-fetch-wait-time", value); +}; + // --- logging entry ----------------------------------------- // This defines the top level "Logging" object. It parses diff --git a/src/bin/dhcp6/dhcp6_srv.cc b/src/bin/dhcp6/dhcp6_srv.cc index f2b6f72391..fba6cfbbe5 100644 --- a/src/bin/dhcp6/dhcp6_srv.cc +++ b/src/bin/dhcp6/dhcp6_srv.cc @@ -183,9 +183,8 @@ Dhcpv6Srv::Dhcpv6Srv(uint16_t server_port, uint16_t client_port) : io_service_(new IOService()), server_port_(server_port), client_port_(client_port), serverid_(), shutdown_(true), alloc_engine_(), name_change_reqs_(), - network_state_(new NetworkState(NetworkState::DHCPv6)) -{ - + network_state_(new NetworkState(NetworkState::DHCPv6)), + cb_control_(new CBControlDHCPv6()) { LOG_DEBUG(dhcp6_logger, DBG_DHCP6_START, DHCP6_OPEN_SOCKET) .arg(server_port); diff --git a/src/bin/dhcp6/dhcp6_srv.h b/src/bin/dhcp6/dhcp6_srv.h index 36b54ee8c4..1e0670cc6e 100644 --- a/src/bin/dhcp6/dhcp6_srv.h +++ b/src/bin/dhcp6/dhcp6_srv.h @@ -1,4 +1,4 @@ -// Copyright (C) 2011-2018 Internet Systems Consortium, Inc. ("ISC") +// Copyright (C) 2011-2019 Internet Systems Consortium, Inc. ("ISC") // // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -88,6 +89,14 @@ public: /// @brief Destructor. Used during DHCPv6 service shutdown. virtual ~Dhcpv6Srv(); + /// @brief Checks if the server is running in unit test mode. + /// + /// @return true if the server is running in unit test mode, + /// false otherwise. + bool inTestMode() const { + return (server_port_ == 0); + } + /// @brief Returns pointer to the IO service used by the server. asiolink::IOServicePtr& getIOService() { return (io_service_); @@ -98,6 +107,15 @@ public: return (network_state_); } + /// @brief Returns an object which controls access to the configuration + /// backends. + /// + /// @return Pointer to the instance of the object which controls + /// access to the configuration backends. + CBControlDHCPv6Ptr getCBControl() const { + return (cb_control_); + } + /// @brief returns Kea version on stdout and exit. /// redeclaration/redefinition. @ref isc::process::Daemon::getVersion() static std::string getVersion(bool extended); @@ -998,6 +1016,8 @@ protected: /// disabled subnet/network scopes. NetworkStatePtr network_state_; + /// @brief Controls access to the configuration backends. + CBControlDHCPv6Ptr cb_control_; }; }; // namespace isc::dhcp diff --git a/src/bin/dhcp6/json_config_parser.cc b/src/bin/dhcp6/json_config_parser.cc index d714a15212..eb35959201 100644 --- a/src/bin/dhcp6/json_config_parser.cc +++ b/src/bin/dhcp6/json_config_parser.cc @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -419,6 +420,7 @@ configureDhcp6Server(Dhcpv6Srv& server, isc::data::ConstElementPtr config_set, if (!check_only) { TimerMgr::instance()->unregisterTimers(); server.discardPackets(); + server.getCBControl()->reset(); } // Revert any runtime option definitions configured so far and not committed. @@ -444,9 +446,10 @@ configureDhcp6Server(Dhcpv6Srv& server, isc::data::ConstElementPtr config_set, // the parsers. It is declared outside the loop so in case of error, the // name of the failing parser can be retrieved within the "catch" clause. ConfigPair config_pair; + SrvConfigPtr srv_config; try { - - SrvConfigPtr srv_config = CfgMgr::instance().getStagingCfg(); + // Get the staging configuration. + srv_config = CfgMgr::instance().getStagingCfg(); // Preserve all scalar global parameters srv_config->extractConfiguredGlobals(config_set); @@ -739,6 +742,10 @@ configureDhcp6Server(Dhcpv6Srv& server, isc::data::ConstElementPtr config_set, const HooksConfig& libraries = CfgMgr::instance().getStagingCfg()->getHooksConfig(); libraries.loadLibraries(); + + // If there are config backends, fetch and merge into staging config + server.getCBControl()->databaseConfigFetch(srv_config, + CBControlDHCPv6::FetchMode::FETCH_ALL); } catch (const isc::Exception& ex) { LOG_ERROR(dhcp6_logger, DHCP6_PARSER_COMMIT_FAIL).arg(ex.what()); diff --git a/src/bin/dhcp6/location.hh b/src/bin/dhcp6/location.hh index b080712231..94d877060d 100644 --- a/src/bin/dhcp6/location.hh +++ b/src/bin/dhcp6/location.hh @@ -1,9 +1,8 @@ -// Generated 201903231444 -// A Bison parser, made by GNU Bison 3.3.2. +// A Bison parser, made by GNU Bison 3.2.1. // Locations for Bison parsers in C++ -// Copyright (C) 2002-2015, 2018-2019 Free Software Foundation, Inc. +// Copyright (C) 2002-2015, 2018 Free Software Foundation, Inc. // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/src/bin/dhcp6/position.hh b/src/bin/dhcp6/position.hh index bc115ead3e..22ef35f744 100644 --- a/src/bin/dhcp6/position.hh +++ b/src/bin/dhcp6/position.hh @@ -1,5 +1,4 @@ -// Generated 201903231444 -// A Bison parser, made by GNU Bison 3.3.2. +// A Bison parser, made by GNU Bison 3.2.1. // Starting with Bison 3.2, this file is useless: the structure it // used to define is now defined in "location.hh". diff --git a/src/bin/dhcp6/stack.hh b/src/bin/dhcp6/stack.hh index 6701827115..81e152d836 100644 --- a/src/bin/dhcp6/stack.hh +++ b/src/bin/dhcp6/stack.hh @@ -1,5 +1,4 @@ -// Generated 201903231444 -// A Bison parser, made by GNU Bison 3.3.2. +// A Bison parser, made by GNU Bison 3.2.1. // Starting with Bison 3.2, this file is useless: the structure it // used to define is now defined with the parser itself. diff --git a/src/bin/dhcp6/tests/config_backend_unittest.cc b/src/bin/dhcp6/tests/config_backend_unittest.cc new file mode 100644 index 0000000000..3875818184 --- /dev/null +++ b/src/bin/dhcp6/tests/config_backend_unittest.cc @@ -0,0 +1,510 @@ +// Copyright (C) 2019 Internet Systems Consortium, Inc. ("ISC") +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "dhcp6_test_utils.h" +#include "get_config_unittest.h" + +#include +#include + +#include +#include +#include +#include + +using namespace isc::asiolink; +using namespace isc::config; +using namespace isc::data; +using namespace isc::dhcp; +using namespace isc::dhcp::test; +using namespace isc::db; +using namespace std; + +namespace { + +/// @brief Test fixture for testing external configuration merging +class Dhcp6CBTest : public GenericBackendTest { +protected: + /// @brief Pre test set up + /// Called prior to each test. It creates two configuration backends + /// that differ by host name ("db1" and "db2"). It then registers + /// a backend factory that will return them rather than create + /// new instances. The backends need to pre-exist so they can be + /// populated prior to calling server configure. It uses + /// TestConfigBackend instances but with a type of "memfile" to pass + /// parsing. Doing it all here allows us to use ASSERTs if we feel like + /// it. + virtual void SetUp() { + DatabaseConnection::ParameterMap params; + params[std::string("type")] = std::string("memfile"); + params[std::string("host")] = std::string("db1"); + db1_.reset(new TestConfigBackendDHCPv6(params)); + + params[std::string("host")] = std::string("db2"); + db2_.reset(new TestConfigBackendDHCPv6(params)); + + ConfigBackendDHCPv6Mgr::instance().registerBackendFactory("memfile", + [this](const DatabaseConnection::ParameterMap& params) + -> ConfigBackendDHCPv6Ptr { + auto host = params.find("host"); + if (host != params.end()) { + if (host->second == "db1") { + return (db1_); + } else if (host->second == "db2") { + return (db2_); + } + } + + // Apparently we're looking for one that does not prexist. + return (TestConfigBackendDHCPv6Ptr(new TestConfigBackendDHCPv6(params))); + }); + } + + /// @brief Clean up after each test + virtual void TearDown() { + // Unregister the factory to be tidy. + ConfigBackendDHCPv6Mgr::instance().unregisterBackendFactory("memfile"); + } + +public: + + /// Constructor + Dhcp6CBTest() + : rcode_(-1), db1_selector("db1"), db2_selector("db1") { + // Open port 0 means to not do anything at all. We don't want to + // deal with sockets here, just check if configuration handling + // is sane. + srv_.reset(new ControlledDhcpv6Srv(0)); + + // Create fresh context. + resetConfiguration(); + } + + /// Destructor + virtual ~Dhcp6CBTest() { + resetConfiguration(); + }; + + /// @brief Reset configuration singletons. + void resetConfiguration() { + CfgMgr::instance().clear(); + ConfigBackendDHCPv6Mgr::destroy(); + } + + /// @brief Convenience method for running configuration + /// + /// This method does not throw, but signals errors using gtest macros. + /// + /// @param config text to be parsed as JSON + /// @param expected_code expected code (see cc/command_interpreter.h) + /// @param exp_error expected text error (check skipped if empty) + void configure(std::string config, int expected_code, + std::string exp_error = "") { + ConstElementPtr json; + try { + json = parseDHCP6(config, true); + } catch(const std::exception& ex) { + ADD_FAILURE() << "parseDHCP6 failed: " << ex.what(); + } + + ConstElementPtr status; + ASSERT_NO_THROW(status = configureDhcp6Server(*srv_, json)); + ASSERT_TRUE(status); + + int rcode; + ConstElementPtr comment = parseAnswer(rcode, status); + ASSERT_EQ(expected_code, rcode) << " comment: " + << comment->stringValue(); + + string text; + ASSERT_NO_THROW(text = comment->stringValue()); + + if (expected_code != rcode) { + std::cout << "Reported status: " << text << std::endl; + } + + if ((rcode != 0)) { + if (!exp_error.empty()) { + ASSERT_EQ(exp_error, text); + } + } + } + + boost::scoped_ptr srv_; ///< DHCP6 server under test + int rcode_; ///< Return code from element parsing + ConstElementPtr comment_; ///< Reason for parse fail + + BackendSelector db1_selector; ///< BackendSelector by host for first config backend + BackendSelector db2_selector; ///< BackendSelector by host for second config backend + + TestConfigBackendDHCPv6Ptr db1_; ///< First configuration backend instance + TestConfigBackendDHCPv6Ptr db2_; ///< Second configuration backend instance +}; + +// This test verifies that externally configured globals are +// merged correctly into staging configuration. +TEST_F(Dhcp6CBTest, mergeGlobals) { + string base_config = + "{ \n" + " \"interfaces-config\": { \n" + " \"interfaces\": [\"*\" ] \n" + " }, \n" + " \"echo-client-id\": false, \n" + " \"decline-probation-period\": 7000, \n" + " \"valid-lifetime\": 1000, \n" + " \"rebind-timer\": 800, \n" + " \"server-hostname\": \"overwrite.me.com\", \n" + " \"config-control\": { \n" + " \"config-databases\": [ { \n" + " \"type\": \"memfile\", \n" + " \"host\": \"db1\" \n" + " },{ \n" + " \"type\": \"memfile\", \n" + " \"host\": \"db2\" \n" + " } \n" + " ] \n" + " } \n" + "} \n"; + + extractConfig(base_config); + + // Make some globals: + StampedValuePtr server_hostname(new StampedValue("server-hostname", "isc.example.org")); + StampedValuePtr decline_period(new StampedValue("decline-probation-period", Element::create(86400))); + StampedValuePtr calc_tee_times(new StampedValue("calculate-tee-times", Element::create(bool(false)))); + StampedValuePtr t2_percent(new StampedValue("t2-percent", Element::create(0.75))); + StampedValuePtr renew_timer(new StampedValue("renew-timer", Element::create(500))); + + // Let's add all of the globals to the second backend. This will verify + // we find them there. + db2_->createUpdateGlobalParameter6(ServerSelector::ALL(), server_hostname); + db2_->createUpdateGlobalParameter6(ServerSelector::ALL(), decline_period); + db2_->createUpdateGlobalParameter6(ServerSelector::ALL(), calc_tee_times); + db2_->createUpdateGlobalParameter6(ServerSelector::ALL(), t2_percent); + db2_->createUpdateGlobalParameter6(ServerSelector::ALL(), renew_timer); + + // Should parse and merge without error. + ASSERT_NO_FATAL_FAILURE(configure(base_config, CONTROL_RESULT_SUCCESS, "")); + + // Verify the composite staging is correct. (Remember that + // CfgMgr::instance().commit() hasn't been called) + SrvConfigPtr staging_cfg = CfgMgr::instance().getStagingCfg(); + + // echo-client-id is set explicitly in the original config, meanwhile + // the backend config does not set it, so the explicit value wins. + EXPECT_FALSE(staging_cfg->getEchoClientId()); + + // decline-probation-period is an explicit member that should come + // from the backend. + EXPECT_EQ(86400, staging_cfg->getDeclinePeriod()); + + // Verify that the implicit globals from JSON are there. + ASSERT_NO_FATAL_FAILURE(checkConfiguredGlobal(staging_cfg, "valid-lifetime", + Element::create(1000))); + ASSERT_NO_FATAL_FAILURE(checkConfiguredGlobal(staging_cfg, "rebind-timer", + Element::create(800))); + + // Verify that the implicit globals from the backend are there. + ASSERT_NO_FATAL_FAILURE(checkConfiguredGlobal(staging_cfg, server_hostname)); + ASSERT_NO_FATAL_FAILURE(checkConfiguredGlobal(staging_cfg, calc_tee_times)); + ASSERT_NO_FATAL_FAILURE(checkConfiguredGlobal(staging_cfg, t2_percent)); + ASSERT_NO_FATAL_FAILURE(checkConfiguredGlobal(staging_cfg, renew_timer)); +} + +#if 0 +// This test verifies that externally configured option definitions +// merged correctly into staging configuration. +TEST_F(Dhcp6CBTest, mergeOptionDefs) { + string base_config = + "{ \n" + " \"option-def\": [ { \n" + " \"name\": \"one\", \n" + " \"code\": 1, \n" + " \"type\": \"ipv6-address\", \n" + " \"space\": \"isc\" \n" + " }, \n" + " { \n" + " \"name\": \"two\", \n" + " \"code\": 2, \n" + " \"type\": \"string\", \n" + " \"space\": \"isc\" \n" + " } \n" + " ], \n" + " \"config-control\": { \n" + " \"config-databases\": [ { \n" + " \"type\": \"memfile\", \n" + " \"host\": \"db1\" \n" + " },{ \n" + " \"type\": \"memfile\", \n" + " \"host\": \"db2\" \n" + " } \n" + " ] \n" + " } \n" + "} \n"; + + extractConfig(base_config); + + // Create option one replacement and add it to first backend. + OptionDefinitionPtr def; + def.reset(new OptionDefinition("one", 101, "uint16")); + def->setOptionSpaceName("isc"); + db1_->createUpdateOptionDef6(ServerSelector::ALL(), def); + + // Create option three and add it to first backend. + def.reset(new OptionDefinition("three", 3, "string")); + def->setOptionSpaceName("isc"); + db1_->createUpdateOptionDef6(ServerSelector::ALL(), def); + + // Create option four and add it to second backend. + def.reset(new OptionDefinition("four", 4, "string")); + def->setOptionSpaceName("isc"); + db2_->createUpdateOptionDef6(ServerSelector::ALL(), def); + + // Should parse and merge without error. + ASSERT_NO_FATAL_FAILURE(configure(base_config, CONTROL_RESULT_SUCCESS, "")); + + // Verify the composite staging is correct. + SrvConfigPtr staging_cfg = CfgMgr::instance().getStagingCfg(); + ConstCfgOptionDefPtr option_defs = staging_cfg->getCfgOptionDef(); + + // Definition "one" from first backend should be there. + OptionDefinitionPtr found_def = option_defs->get("isc", "one"); + ASSERT_TRUE(found_def); + EXPECT_EQ(101, found_def->getCode()); + EXPECT_EQ(OptionDataType::OPT_UINT16_TYPE, found_def->getType()); + + // Definition "two" from JSON config should be there. + found_def = option_defs->get("isc", "two"); + ASSERT_TRUE(found_def); + EXPECT_EQ(2, found_def->getCode()); + + // Definition "three" from first backend should be there. + found_def = option_defs->get("isc", "three"); + ASSERT_TRUE(found_def); + EXPECT_EQ(3, found_def->getCode()); + + // Definition "four" from first backend should not be there. + found_def = option_defs->get("isc", "four"); + ASSERT_FALSE(found_def); +} + +// This test verifies that externally configured options +// merged correctly into staging configuration. +TEST_F(Dhcp6CBTest, mergeOptions) { + string base_config = + "{ \n" + " \"option-data\": [ { \n" + " \"name\": \"dhcp-message\", \n" + " \"data\": \"0A0B0C0D\", \n" + " \"csv-format\": false \n" + " },{ \n" + " \"name\": \"host-name\", \n" + " \"data\": \"old.example.com\", \n" + " \"csv-format\": true \n" + " } \n" + " ], \n" + " \"config-control\": { \n" + " \"config-databases\": [ { \n" + " \"type\": \"memfile\", \n" + " \"host\": \"db1\" \n" + " },{ \n" + " \"type\": \"memfile\", \n" + " \"host\": \"db2\" \n" + " } \n" + " ] \n" + " } \n" + "} \n"; + + extractConfig(base_config); + + OptionDescriptorPtr opt; + + // Add host-name to the first backend. + opt.reset(new OptionDescriptor( + createOption(Option::V6, DHO_HOST_NAME, + true, false, "new.example.com"))); + opt->space_name_ = DHCP6_OPTION_SPACE; + db1_->createUpdateOption6(ServerSelector::ALL(), opt); + + // Add boot-file-name to the first backend. + opt.reset(new OptionDescriptor( + createOption(Option::V6, DHO_BOOT_FILE_NAME, + true, false, "my-boot-file"))); + opt->space_name_ = DHCP6_OPTION_SPACE; + db1_->createUpdateOption6(ServerSelector::ALL(), opt); + + // Add boot-file-name to the second backend. + opt.reset(new OptionDescriptor( + createOption(Option::V6, DHO_BOOT_FILE_NAME, + true, false, "your-boot-file"))); + opt->space_name_ = DHCP6_OPTION_SPACE; + db2_->createUpdateOption6(ServerSelector::ALL(), opt); + + // Should parse and merge without error. + ASSERT_NO_FATAL_FAILURE(configure(base_config, CONTROL_RESULT_SUCCESS, "")); + + // Verify the composite staging is correct. + SrvConfigPtr staging_cfg = CfgMgr::instance().getStagingCfg(); + + // Option definition from JSON should be there. + CfgOptionPtr options = staging_cfg->getCfgOption(); + + // dhcp-message should come from the original config. + OptionDescriptor found_opt = options->get("dhcp6", DHO_DHCP_MESSAGE); + ASSERT_TRUE(found_opt.option_); + EXPECT_EQ("0x0A0B0C0D", found_opt.option_->toHexString()); + + // host-name should come from the first back end, + // (overwriting the original). + found_opt = options->get("dhcp6", DHO_HOST_NAME); + ASSERT_TRUE(found_opt.option_); + EXPECT_EQ("new.example.com", found_opt.option_->toString()); + + // booth-file-name should come from the first back end. + found_opt = options->get("dhcp6", DHO_BOOT_FILE_NAME); + ASSERT_TRUE(found_opt.option_); + EXPECT_EQ("my-boot-file", found_opt.option_->toString()); +} + +// This test verifies that externally configured shared-networks are +// merged correctly into staging configuration. +TEST_F(Dhcp6CBTest, mergeSharedNetworks) { + string base_config = + "{ \n" + " \"interfaces-config\": { \n" + " \"interfaces\": [\"*\" ] \n" + " }, \n" + " \"valid-lifetime\": 4000, \n" + " \"config-control\": { \n" + " \"config-databases\": [ { \n" + " \"type\": \"memfile\", \n" + " \"host\": \"db1\" \n" + " },{ \n" + " \"type\": \"memfile\", \n" + " \"host\": \"db2\" \n" + " } \n" + " ] \n" + " }, \n" + " \"shared-networks\": [ { \n" + " \"name\": \"two\" \n" + " }] \n" + "} \n"; + + extractConfig(base_config); + + // Make a few networks + SharedNetwork6Ptr network1(new SharedNetwork6("one")); + SharedNetwork6Ptr network3(new SharedNetwork6("three")); + + // Add network1 to db1 and network3 to db2 + db1_->createUpdateSharedNetwork6(ServerSelector::ALL(), network1); + db2_->createUpdateSharedNetwork6(ServerSelector::ALL(), network3); + + // Should parse and merge without error. + ASSERT_NO_FATAL_FAILURE(configure(base_config, CONTROL_RESULT_SUCCESS, "")); + + // Verify the composite staging is correct. (Remember that + // CfgMgr::instance().commit() hasn't been called) + SrvConfigPtr staging_cfg = CfgMgr::instance().getStagingCfg(); + + CfgSharedNetworks4Ptr networks = staging_cfg->getCfgSharedNetworks4(); + SharedNetwork6Ptr staged_network; + + // SharedNetwork One should have been added from db1 config + staged_network = networks->getByName("one"); + ASSERT_TRUE(staged_network); + + // Subnet2 should have come from the json config + staged_network = networks->getByName("two"); + ASSERT_TRUE(staged_network); + + // Subnet3, which is in db2 should not have been merged. + // We queried db1 first and the query returned data. In + // other words, we iterate over the backends, asking for + // data. We use the first data, we find. + staged_network = networks->getByName("three"); + ASSERT_FALSE(staged_network); +} + +// This test verifies that externally configured subnets are +// merged correctly into staging configuration. +TEST_F(Dhcp6CBTest, mergeSubnets) { + string base_config = + "{ \n" + " \"interfaces-config\": { \n" + " \"interfaces\": [\"*\" ] \n" + " }, \n" + " \"valid-lifetime\": 4000, \n" + " \"config-control\": { \n" + " \"config-databases\": [ { \n" + " \"type\": \"memfile\", \n" + " \"host\": \"db1\" \n" + " },{ \n" + " \"type\": \"memfile\", \n" + " \"host\": \"db2\" \n" + " } \n" + " ] \n" + " }, \n" + " \"subnet6\": [ \n" + " { \n" + " \"id\": 2,\n" + " \"subnet\": \"192.0.3.0/24\" \n" + " } ]\n" + "} \n"; + + extractConfig(base_config); + + // Make a few subnets + Subnet6Ptr subnet1(new Subnet6(IOAddress("192.0.2.0"), 26, 1, 2, 3, SubnetID(1))); + Subnet6Ptr subnet3(new Subnet6(IOAddress("192.0.4.0"), 26, 1, 2, 3, SubnetID(3))); + + // Add subnet1 to db1 and subnet3 to db2 + db1_->createUpdateSubnet6(ServerSelector::ALL(), subnet1); + db2_->createUpdateSubnet6(ServerSelector::ALL(), subnet3); + + // Should parse and merge without error. + configure(base_config, CONTROL_RESULT_SUCCESS, ""); + + // Verify the composite staging is correct. (Remember that + // CfgMgr::instance().commit() hasn't been called) + + SrvConfigPtr staging_cfg = CfgMgr::instance().getStagingCfg(); + + CfgSubnets6Ptr subnets = staging_cfg->getCfgSubnets6(); + Subnet6Ptr staged_subnet; + + // Subnet1 should have been added from db1 config + staged_subnet = subnets->getSubnet(1); + ASSERT_TRUE(staged_subnet); + + // Subnet2 should have come from the json config + staged_subnet = subnets->getSubnet(2); + ASSERT_TRUE(staged_subnet); + + // Subnet3, which is in db2 should not have been merged, since it is + // first found, first used? + staged_subnet = subnets->getSubnet(3); + ASSERT_FALSE(staged_subnet); +} +#endif + +} diff --git a/src/bin/dhcp6/tests/config_parser_unittest.cc b/src/bin/dhcp6/tests/config_parser_unittest.cc index 733ad794be..e8a0d46319 100644 --- a/src/bin/dhcp6/tests/config_parser_unittest.cc +++ b/src/bin/dhcp6/tests/config_parser_unittest.cc @@ -25,6 +25,7 @@ #include #include #include +#include #include #include @@ -242,6 +243,7 @@ const char* PARSER_CONFIGS[] = { " \"rebind-timer\": 2000, \n" " \"renew-timer\": 1000, \n" " \"config-control\": { \n" + " \"config-fetch-wait-time\": 10, \n" " \"config-databases\": [ { \n" " \"type\": \"mysql\", \n" " \"name\": \"keatest1\", \n" @@ -6990,7 +6992,12 @@ TEST_F(Dhcp6ParserTest, globalReservations) { // This test verifies that configuration control info gets populated. TEST_F(Dhcp6ParserTest, configControlInfo) { string config = PARSER_CONFIGS[8]; - extractConfig(config); + + // Should be able to register a backend factory for "mysql". + ASSERT_TRUE(TestConfigBackendDHCPv6:: + registerBackendType(ConfigBackendDHCPv6Mgr::instance(), + "mysql")); + configure(config, CONTROL_RESULT_SUCCESS, ""); // Make sure the config control info is there. @@ -7009,6 +7016,10 @@ TEST_F(Dhcp6ParserTest, configControlInfo) { dblist.front().getAccessString()); EXPECT_EQ("name=keatest2 password=keatest type=mysql user=keatest", dblist.back().getAccessString()); + + // Verify that the config-fetch-wait-time is correct. + EXPECT_FALSE(info->getConfigFetchWaitTime().unspecified()); + EXPECT_EQ(10, info->getConfigFetchWaitTime().get()); } // Check whether it is possible to configure server-tag diff --git a/src/bin/dhcp6/tests/get_config_unittest.cc b/src/bin/dhcp6/tests/get_config_unittest.cc index abb8f461b4..8d45fd2d96 100644 --- a/src/bin/dhcp6/tests/get_config_unittest.cc +++ b/src/bin/dhcp6/tests/get_config_unittest.cc @@ -1829,32 +1829,6 @@ const char* EXTRACTED_CONFIGS[] = { " }\n" " ],\n" " \"valid-lifetime\": 4000\n" -" }\n", - // CONFIGURATION 58 -"{\n" -" \"config-control\": {\n" -" \"config-databases\": [\n" -" {\n" -" \"name\": \"keatest1\",\n" -" \"password\": \"keatest\",\n" -" \"type\": \"mysql\",\n" -" \"user\": \"keatest\"\n" -" },\n" -" {\n" -" \"name\": \"keatest2\",\n" -" \"password\": \"keatest\",\n" -" \"type\": \"mysql\",\n" -" \"user\": \"keatest\"\n" -" }\n" -" ]\n" -" },\n" -" \"interfaces-config\": {\n" -" \"interfaces\": [ \"*\" ],\n" -" \"re-detect\": false\n" -" },\n" -" \"rebind-timer\": 2000,\n" -" \"renew-timer\": 1000,\n" -" \"valid-lifetime\": 4000\n" " }\n" }; @@ -7717,86 +7691,6 @@ const char* UNPARSED_CONFIGS[] = { " }\n" " ],\n" " \"valid-lifetime\": 4000\n" -" }\n", - // CONFIGURATION 58 -"{\n" -" \"config-control\": {\n" -" \"config-databases\": [\n" -" {\n" -" \"name\": \"keatest1\",\n" -" \"password\": \"keatest\",\n" -" \"type\": \"mysql\",\n" -" \"user\": \"keatest\"\n" -" },\n" -" {\n" -" \"name\": \"keatest2\",\n" -" \"password\": \"keatest\",\n" -" \"type\": \"mysql\",\n" -" \"user\": \"keatest\"\n" -" }\n" -" ]\n" -" },\n" -" \"decline-probation-period\": 86400,\n" -" \"dhcp-ddns\": {\n" -" \"enable-updates\": false,\n" -" \"generated-prefix\": \"myhost\",\n" -" \"hostname-char-replacement\": \"\",\n" -" \"hostname-char-set\": \"\",\n" -" \"max-queue-size\": 1024,\n" -" \"ncr-format\": \"JSON\",\n" -" \"ncr-protocol\": \"UDP\",\n" -" \"override-client-update\": false,\n" -" \"override-no-update\": false,\n" -" \"qualifying-suffix\": \"\",\n" -" \"replace-client-name\": \"never\",\n" -" \"sender-ip\": \"0.0.0.0\",\n" -" \"sender-port\": 0,\n" -" \"server-ip\": \"127.0.0.1\",\n" -" \"server-port\": 53001\n" -" },\n" -" \"dhcp-queue-control\": {\n" -" \"capacity\": 500,\n" -" \"enable-queue\": false,\n" -" \"queue-type\": \"kea-ring6\"\n" -" },\n" -" \"dhcp4o6-port\": 0,\n" -" \"expired-leases-processing\": {\n" -" \"flush-reclaimed-timer-wait-time\": 25,\n" -" \"hold-reclaimed-time\": 3600,\n" -" \"max-reclaim-leases\": 100,\n" -" \"max-reclaim-time\": 250,\n" -" \"reclaim-timer-wait-time\": 10,\n" -" \"unwarned-reclaim-cycles\": 5\n" -" },\n" -" \"hooks-libraries\": [ ],\n" -" \"host-reservation-identifiers\": [ \"hw-address\", \"duid\" ],\n" -" \"interfaces-config\": {\n" -" \"interfaces\": [ \"*\" ],\n" -" \"re-detect\": false\n" -" },\n" -" \"lease-database\": {\n" -" \"type\": \"memfile\"\n" -" },\n" -" \"mac-sources\": [ \"any\" ],\n" -" \"option-data\": [ ],\n" -" \"option-def\": [ ],\n" -" \"rebind-timer\": 2000,\n" -" \"relay-supplied-options\": [ \"65\" ],\n" -" \"renew-timer\": 1000,\n" -" \"sanity-checks\": {\n" -" \"lease-checks\": \"warn\"\n" -" },\n" -" \"server-id\": {\n" -" \"enterprise-id\": 0,\n" -" \"htype\": 0,\n" -" \"identifier\": \"\",\n" -" \"persist\": true,\n" -" \"time\": 0,\n" -" \"type\": \"LLT\"\n" -" },\n" -" \"shared-networks\": [ ],\n" -" \"subnet6\": [ ],\n" -" \"valid-lifetime\": 4000\n" " }\n" }; diff --git a/src/bin/dhcp6/tests/kea_controller_unittest.cc b/src/bin/dhcp6/tests/kea_controller_unittest.cc index ff7bbba5ce..d13c1ea03a 100644 --- a/src/bin/dhcp6/tests/kea_controller_unittest.cc +++ b/src/bin/dhcp6/tests/kea_controller_unittest.cc @@ -14,9 +14,11 @@ #include #include #include +#include #include #include #include +#include #ifdef HAVE_MYSQL #include @@ -25,9 +27,11 @@ #include #include +#include #include #include +#include #include #include #include @@ -51,10 +55,100 @@ using namespace isc::hooks; namespace { +/// @brief Test implementation of the @c CBControlDHCPv6. +/// +/// This implementation is installed on the test server instance. It +/// overrides the implementation of the @c databaseConfigFetch function +/// to verify arguments passed to this function and throw an exception +/// when desired in the negative test scenarios. It doesn't do the +/// actual configuration fetch as this is tested elswhere and would +/// require setting up a database configuration backend. +class TestCBControlDHCPv6 : public CBControlDHCPv6 { +public: + + /// @brief Constructor. + TestCBControlDHCPv6() + : CBControlDHCPv6(), db_config_fetch_calls_(0), + enable_check_fetch_mode_(false), enable_throw_(false) { + } + + /// @brief Stub implementation of the "fetch" function. + /// + /// It checks if the @c fetch_updates_only is set to true when it + /// is a later than first invocation of the function. It also + /// throws an exception when desired by a test, to verify that the + /// server gracefully handles such exception. + /// + /// @param fetch_mode value indicating if the method is called upon the + /// server start up or it is called to fetch configuration updates. + /// + /// @throw Unexpected when configured to do so. + virtual void databaseConfigFetch(const process::ConfigPtr&, + const FetchMode& fetch_mode) { + ++db_config_fetch_calls_; + + if (enable_check_fetch_mode_) { + if ((db_config_fetch_calls_ <= 1) && (fetch_mode == FetchMode::FETCH_UPDATE)) { + ADD_FAILURE() << "databaseConfigFetch was called with the value " + "of fetch_mode=FetchMode::FETCH_UPDATE upon the server configuration"; + + } else if ((db_config_fetch_calls_ > 1) && (fetch_mode == FetchMode::FETCH_ALL)) { + ADD_FAILURE() << "databaseConfigFetch was called with the value " + "of fetch_mode=FetchMode::FETCH_ALL during fetching the updates"; + } + } + + if (enable_throw_) { + isc_throw(Unexpected, "testing if exceptions are corectly handled"); + } + } + + /// @brief Returns number of invocations of the @c databaseConfigFetch. + size_t getDatabaseConfigFetchCalls() const { + return (db_config_fetch_calls_); + } + + /// @brief Enables checking of the @c fetch_mode value. + void enableCheckFetchMode() { + enable_check_fetch_mode_ = true; + } + + /// @brief Enables the object to throw from @c databaseConfigFetch. + void enableThrow() { + enable_throw_ = true; + } + +private: + + /// @brief Counter holding number of invocations of the @c databaseConfigFetch. + size_t db_config_fetch_calls_; + + /// @brief Boolean flag indicated if the value of the @c fetch_mode + /// should be verified. + bool enable_check_fetch_mode_; + + /// @brief Boolean flag indicating if the @c databaseConfigFetch should + /// throw. + bool enable_throw_; +}; + +/// @brief Shared pointer to the @c TestCBControlDHCPv6. +typedef boost::shared_ptr TestCBControlDHCPv6Ptr; + +/// @brief "Naked" DHCPv6 server. +/// +/// Exposes internal fields and installs stub implementation of the +/// @c CBControlDHCPv6 object. class NakedControlledDhcpv6Srv: public ControlledDhcpv6Srv { - // "Naked" DHCPv6 server, exposes internal fields public: - NakedControlledDhcpv6Srv():ControlledDhcpv6Srv(0) { } + /// @brief Constructor. + NakedControlledDhcpv6Srv() + : ControlledDhcpv6Srv(0) { + // We're replacing the @c CBControlDHCPv6 instance with our + // stub implementation used in tests. + cb_control_.reset(new TestCBControlDHCPv6()); + } + using ControlledDhcpv6Srv::signal_handler_; }; @@ -85,15 +179,105 @@ public: /// /// @param io_service Pointer to the IO service to be ran. /// @param timeout_ms Amount of time after which the method returns. - void runTimersWithTimeout(const IOServicePtr& io_service, const long timeout_ms) { + /// @param cond Pointer to the function which if returns true it + /// stops the IO service and causes the function to return. + void runTimersWithTimeout(const IOServicePtr& io_service, const long timeout_ms, + std::function cond = std::function()) { IntervalTimer timer(*io_service); - timer.setup([&io_service]() { + bool stopped = false; + timer.setup([&io_service, &stopped]() { io_service->stop(); + stopped = true; }, timeout_ms, IntervalTimer::ONE_SHOT); - io_service->run(); + + // Run as long as the timeout hasn't occurred and the interrupting + // condition is not specified or not met. + while (!stopped && (!cond || !cond())) { + io_service->run_one(); + } io_service->get_io_service().reset(); } + /// @brief This test verifies that the timer used to fetch the configuration + /// updates from the database works as expected. + void testConfigBackendTimer(const int config_wait_fetch_time, + const bool throw_during_fetch = false) { + std::ostringstream config; + config << + "{ \"Dhcp6\": {" + "\"interfaces-config\": {" + " \"interfaces\": [ ]" + "}," + "\"lease-database\": {" + " \"type\": \"memfile\"," + " \"persist\": false" + "}," + "\"config-control\": {" + " \"config-fetch-wait-time\": " << config_wait_fetch_time << + "}," + "\"rebind-timer\": 2000, " + "\"renew-timer\": 1000, \n" + "\"subnet6\": [ ]," + "\"valid-lifetime\": 4000 }" + "}"; + writeFile(TEST_FILE, config.str()); + + // Create an instance of the server and initialize it. + boost::scoped_ptr srv; + ASSERT_NO_THROW(srv.reset(new NakedControlledDhcpv6Srv())); + ASSERT_NO_THROW(srv->init(TEST_FILE)); + + // Get the CBControlDHCPv6 object belonging to this server. + auto cb_control = boost::dynamic_pointer_cast(srv->getCBControl()); + + // Verify that the parameter passed to the databaseConfigFetch has an + // expected value. + cb_control->enableCheckFetchMode(); + + // Instruct our stub implementation of the CBControlDHCPv6 to throw as a + // result of fetch if desired. + if (throw_during_fetch) { + cb_control->enableThrow(); + } + + // So far there should be exactly one attempt to fetch the configuration + // from the backend. That's the attempt made upon startup. + EXPECT_EQ(1, cb_control->getDatabaseConfigFetchCalls()); + + + if ((config_wait_fetch_time > 0) && (!throw_during_fetch)) { + // If we're configured to run the timer, we expect that it was + // invoked at least 3 times. This is sufficient to verify that + // the timer was scheduled and that the timer continued to run + // even when an exception occurred during fetch (that's why it + // is 3 not 2). + ASSERT_NO_THROW(runTimersWithTimeout(srv->getIOService(), 500, + [cb_control]() { + // Interrupt the timers poll if we have recorded at + // least 3 attempts to fetch the updates. + return (cb_control->getDatabaseConfigFetchCalls() >= 3); + })); + EXPECT_GE(cb_control->getDatabaseConfigFetchCalls(), 3); + + } else { + ASSERT_NO_THROW(runTimersWithTimeout(srv->getIOService(), 500)); + + if (throw_during_fetch) { + // If we're simulating the failure condition the number + // of consecutive failures should not exceed 10. Therefore + // the number of recorded fetches should be 12. One at + // startup, 10 failures and one that causes the timer + // to stop. + EXPECT_EQ(12, cb_control->getDatabaseConfigFetchCalls()); + + } else { + // If the server is not configured to schedule the timer, + // we should still have one fetch attempt recorded. + EXPECT_EQ(1, cb_control->getDatabaseConfigFetchCalls()); + } + } + } + static const char* TEST_FILE; static const char* TEST_INCLUDE; }; @@ -635,6 +819,29 @@ TEST_F(JSONFileBackendTest, defaultLeaseDbBackend) { EXPECT_NO_THROW(static_cast(LeaseMgrFactory::instance())); } + +// This test verifies that the timer triggering configuration updates +// is invoked according to the configured value of the +// config-fetch-wait-time. +TEST_F(JSONFileBackendTest, configBackendTimer) { + testConfigBackendTimer(1); +} + +// This test verifies that the timer for triggering configuration updates +// is not invoked when the value of the config-fetch-wait-time is set +// to 0. +TEST_F(JSONFileBackendTest, configBackendTimerDisabled) { + testConfigBackendTimer(0); +} + +// This test verifies that the server will gracefully handle exceptions +// thrown from the CBControlDHCPv6::databaseConfigFetch, i.e. will +// reschedule the timer. +TEST_F(JSONFileBackendTest, configBackendTimerWithThrow) { + // The true value instructs the test to throw during the fetch. + testConfigBackendTimer(1, true); +} + // Starting tests which require MySQL backend availability. Those tests // will not be executed if Kea has been compiled without the // --with-mysql. diff --git a/src/lib/dhcpsrv/Makefile.am b/src/lib/dhcpsrv/Makefile.am index 4c862958ff..ab5b800333 100644 --- a/src/lib/dhcpsrv/Makefile.am +++ b/src/lib/dhcpsrv/Makefile.am @@ -68,6 +68,7 @@ libkea_dhcpsrv_la_SOURCES += cache_host_data_source.h libkea_dhcpsrv_la_SOURCES += callout_handle_store.h libkea_dhcpsrv_la_SOURCES += cb_ctl_dhcp.h libkea_dhcpsrv_la_SOURCES += cb_ctl_dhcp4.cc cb_ctl_dhcp4.h +libkea_dhcpsrv_la_SOURCES += cb_ctl_dhcp6.cc cb_ctl_dhcp6.h libkea_dhcpsrv_la_SOURCES += cfg_4o6.cc cfg_4o6.h libkea_dhcpsrv_la_SOURCES += cfg_consistency.cc cfg_consistency.h libkea_dhcpsrv_la_SOURCES += cfg_db_access.cc cfg_db_access.h diff --git a/src/lib/dhcpsrv/cb_ctl_dhcp6.cc b/src/lib/dhcpsrv/cb_ctl_dhcp6.cc new file mode 100644 index 0000000000..b379e80e18 --- /dev/null +++ b/src/lib/dhcpsrv/cb_ctl_dhcp6.cc @@ -0,0 +1,85 @@ +// Copyright (C) 2019 Internet Systems Consortium, Inc. ("ISC") +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#include +#include +#include +#include + +using namespace isc::data; +using namespace isc::process; + +namespace isc { +namespace dhcp { + +void +CBControlDHCPv6::databaseConfigApply(const db::BackendSelector& backend_selector, + const db::ServerSelector& server_selector, + const boost::posix_time::ptime& lb_modification_time, + const db::AuditEntryCollection& audit_entries) { + // Create the external config into which we'll fetch backend config data. + SrvConfigPtr external_cfg = CfgMgr::instance().createExternalCfg(); + + // First let's fetch the globals and add them to external config. + if (fetchConfigElement(audit_entries, "dhcp6_global_parameter")) { + data::StampedValueCollection globals; + globals = getMgr().getPool()->getModifiedGlobalParameters6(backend_selector, server_selector, + lb_modification_time); + addGlobalsToConfig(external_cfg, globals); + } + + // Now we fetch the option definitions and add them. + if (fetchConfigElement(audit_entries, "dhcp6_option_def")) { + OptionDefContainer option_defs = + getMgr().getPool()->getModifiedOptionDefs6(backend_selector, server_selector, + lb_modification_time); + for (auto option_def = option_defs.begin(); option_def != option_defs.end(); ++option_def) { + external_cfg->getCfgOptionDef()->add((*option_def), (*option_def)->getOptionSpaceName()); + } + } + + // Next fetch the options. They are returned as a container of OptionDescriptors. + if (fetchConfigElement(audit_entries, "dhcp6_options")) { + OptionContainer options = getMgr().getPool()->getModifiedOptions6(backend_selector, + server_selector, + lb_modification_time); + for (auto option = options.begin(); option != options.end(); ++option) { + external_cfg->getCfgOption()->add((*option), (*option).space_name_); + } + } + + // Now fetch the shared networks. + if (fetchConfigElement(audit_entries, "dhcp6_shared_network")) { + SharedNetwork6Collection networks = + getMgr().getPool()->getModifiedSharedNetworks6(backend_selector, server_selector, + lb_modification_time); + for (auto network = networks.begin(); network != networks.end(); ++network) { + external_cfg->getCfgSharedNetworks6()->add((*network)); + } + } + + // Next we fetch subnets. + if (fetchConfigElement(audit_entries, "dhcp6_subnet")) { + Subnet6Collection subnets = getMgr().getPool()->getModifiedSubnets6(backend_selector, + server_selector, + lb_modification_time); + for (auto subnet = subnets.begin(); subnet != subnets.end(); ++subnet) { + external_cfg->getCfgSubnets6()->add((*subnet)); + } + } + + if (audit_entries.empty()) { + CfgMgr::instance().mergeIntoStagingCfg(external_cfg->getSequence()); + + } else { + CfgMgr::instance().mergeIntoCurrentCfg(external_cfg->getSequence()); + } + LOG_INFO(dhcpsrv_logger, DHCPSRV_CFGMGR_CONFIG6_MERGED); +} + + +} // end of namespace isc::dhcp +} // end of namespace isc diff --git a/src/lib/dhcpsrv/cb_ctl_dhcp6.h b/src/lib/dhcpsrv/cb_ctl_dhcp6.h new file mode 100644 index 0000000000..4817556540 --- /dev/null +++ b/src/lib/dhcpsrv/cb_ctl_dhcp6.h @@ -0,0 +1,50 @@ +// Copyright (C) 2019 Internet Systems Consortium, Inc. ("ISC") +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#ifndef CB_CTL_DHCP6_H +#define CB_CTL_DHCP6_H + +#include +#include +#include + +namespace isc { +namespace dhcp { + +/// @brief Implementation of the mechanisms to control the use of +/// the Configuration Backends by the DHCPv6 server. +/// +/// It implements fetching and merging DHCPv6 server configuration from +/// the database into the staging or current configuration. +/// +/// @tparam ConfigBackendMgrType Type of the Config Backend Manager used +/// by the server implementing this class. For example, for the DHCPv6 +/// server it will be @c ConfigBackendDHCPv6Mgr. +class CBControlDHCPv6 : public CBControlDHCP { +protected: + + /// @brief DHCPv6 server specific method to fetch and apply back end + /// configuration into the local configuration. + /// + /// @param backend_selector Backend selector. + /// @param server_selector Server selector. + /// @param lb_modification_time Lower bound modification time for the + /// configuration elements to be fetched. + /// @param audit_entries Audit entries fetched from the database since + /// the last configuration update. This collection is empty if there + /// were no updates. + virtual void databaseConfigApply(const db::BackendSelector& backend_selector, + const db::ServerSelector& server_selector, + const boost::posix_time::ptime& lb_modification_time, + const db::AuditEntryCollection& audit_entries); +}; + +typedef boost::shared_ptr CBControlDHCPv6Ptr; + +} // end of namespace isc::dhcp +} // end of namespace isc + +#endif // CB_CTL_DHCP6_H diff --git a/src/lib/dhcpsrv/dhcpsrv_messages.cc b/src/lib/dhcpsrv/dhcpsrv_messages.cc index 0b33bf120e..a45a3b988e 100644 --- a/src/lib/dhcpsrv/dhcpsrv_messages.cc +++ b/src/lib/dhcpsrv/dhcpsrv_messages.cc @@ -1,4 +1,4 @@ -// File created from ../../../src/lib/dhcpsrv/dhcpsrv_messages.mes on Tue Mar 19 2019 10:19 +// File created from ../../../src/lib/dhcpsrv/dhcpsrv_messages.mes on Tue Mar 26 2019 13:08 #include #include @@ -14,6 +14,7 @@ extern const isc::log::MessageID DHCPSRV_CFGMGR_ALL_IFACES_ACTIVE = "DHCPSRV_CFG extern const isc::log::MessageID DHCPSRV_CFGMGR_CFG_DHCP_DDNS = "DHCPSRV_CFGMGR_CFG_DHCP_DDNS"; extern const isc::log::MessageID DHCPSRV_CFGMGR_CLEAR_ACTIVE_IFACES = "DHCPSRV_CFGMGR_CLEAR_ACTIVE_IFACES"; extern const isc::log::MessageID DHCPSRV_CFGMGR_CONFIG4_MERGED = "DHCPSRV_CFGMGR_CONFIG4_MERGED"; +extern const isc::log::MessageID DHCPSRV_CFGMGR_CONFIG6_MERGED = "DHCPSRV_CFGMGR_CONFIG6_MERGED"; extern const isc::log::MessageID DHCPSRV_CFGMGR_CONFIGURE_SERVERID = "DHCPSRV_CFGMGR_CONFIGURE_SERVERID"; extern const isc::log::MessageID DHCPSRV_CFGMGR_DEL_SUBNET4 = "DHCPSRV_CFGMGR_DEL_SUBNET4"; extern const isc::log::MessageID DHCPSRV_CFGMGR_DEL_SUBNET6 = "DHCPSRV_CFGMGR_DEL_SUBNET6"; @@ -245,6 +246,7 @@ const char* values[] = { "DHCPSRV_CFGMGR_CFG_DHCP_DDNS", "Setting DHCP-DDNS configuration to: %1", "DHCPSRV_CFGMGR_CLEAR_ACTIVE_IFACES", "stop listening on all interfaces", "DHCPSRV_CFGMGR_CONFIG4_MERGED", "Configuration backend data has been merged.", + "DHCPSRV_CFGMGR_CONFIG6_MERGED", "Configuration backend data has been merged.", "DHCPSRV_CFGMGR_CONFIGURE_SERVERID", "server configuration includes specification of a server identifier", "DHCPSRV_CFGMGR_DEL_SUBNET4", "IPv4 subnet %1 removed", "DHCPSRV_CFGMGR_DEL_SUBNET6", "IPv6 subnet %1 removed", diff --git a/src/lib/dhcpsrv/dhcpsrv_messages.h b/src/lib/dhcpsrv/dhcpsrv_messages.h index b9bc955029..3a421e3dd1 100644 --- a/src/lib/dhcpsrv/dhcpsrv_messages.h +++ b/src/lib/dhcpsrv/dhcpsrv_messages.h @@ -1,4 +1,4 @@ -// File created from ../../../src/lib/dhcpsrv/dhcpsrv_messages.mes on Tue Mar 19 2019 10:19 +// File created from ../../../src/lib/dhcpsrv/dhcpsrv_messages.mes on Tue Mar 26 2019 13:08 #ifndef DHCPSRV_MESSAGES_H #define DHCPSRV_MESSAGES_H @@ -15,6 +15,7 @@ extern const isc::log::MessageID DHCPSRV_CFGMGR_ALL_IFACES_ACTIVE; extern const isc::log::MessageID DHCPSRV_CFGMGR_CFG_DHCP_DDNS; extern const isc::log::MessageID DHCPSRV_CFGMGR_CLEAR_ACTIVE_IFACES; extern const isc::log::MessageID DHCPSRV_CFGMGR_CONFIG4_MERGED; +extern const isc::log::MessageID DHCPSRV_CFGMGR_CONFIG6_MERGED; extern const isc::log::MessageID DHCPSRV_CFGMGR_CONFIGURE_SERVERID; extern const isc::log::MessageID DHCPSRV_CFGMGR_DEL_SUBNET4; extern const isc::log::MessageID DHCPSRV_CFGMGR_DEL_SUBNET6; diff --git a/src/lib/dhcpsrv/dhcpsrv_messages.mes b/src/lib/dhcpsrv/dhcpsrv_messages.mes index 56a500a5a7..810d695f21 100644 --- a/src/lib/dhcpsrv/dhcpsrv_messages.mes +++ b/src/lib/dhcpsrv/dhcpsrv_messages.mes @@ -36,6 +36,11 @@ This is an informational message emitted when the DHCPv4 server has successfully merged configuration data retrieved from its configuration backends into the current configuration. +% DHCPSRV_CFGMGR_CONFIG6_MERGED Configuration backend data has been merged. +This is an informational message emitted when the DHCPv6 server has +successfully merged configuration data retrieved from its configuration +backends into the current configuration. + % DHCPSRV_CFGMGR_CONFIGURE_SERVERID server configuration includes specification of a server identifier This warning message is issued when the server specified configuration of a server identifier. If this new configuration overrides an existing