From 3e674fdaf2fd78f588a9155cb2e955723259b4fd Mon Sep 17 00:00:00 2001 From: Francis Dupont Date: Thu, 12 Jan 2017 01:14:50 +0100 Subject: [PATCH 01/10] [5097] Migrated (checkpoint as user-context are missing in flex/bison) --- src/bin/dhcp4/json_config_parser.cc | 43 +++-- src/bin/dhcp6/json_config_parser.cc | 219 ++++++++++-------------- src/lib/dhcpsrv/parsers/dhcp_parsers.cc | 83 +++------ src/lib/dhcpsrv/parsers/dhcp_parsers.h | 76 +++----- 4 files changed, 163 insertions(+), 258 deletions(-) diff --git a/src/bin/dhcp4/json_config_parser.cc b/src/bin/dhcp4/json_config_parser.cc index c710f0b674..9ed084bb91 100644 --- a/src/bin/dhcp4/json_config_parser.cc +++ b/src/bin/dhcp4/json_config_parser.cc @@ -58,12 +58,8 @@ public: /// @brief Constructor. /// - /// @param param_name name of the parameter. Note, it is passed through - /// but unused, parameter is currently always "Dhcp4/subnet4[X]/pool" - /// @param pools storage container in which to store the parsed pool - /// upon "commit" - Pool4Parser(const std::string& param_name, PoolStoragePtr pools) - :PoolParser(param_name, pools, AF_INET) { + /// @param pools storage container in which to store the parsed pool. + Pool4Parser(PoolStoragePtr pools) : PoolParser(pools) { } protected: @@ -90,15 +86,26 @@ protected: } }; -class Pools4ListParser : public PoolsListParser { +/// @brief Specialization of the pool list parser for DHCPv4 +class Pools4ListParser : PoolsListParser { public: - Pools4ListParser(const std::string& dummy, PoolStoragePtr pools) - :PoolsListParser(dummy, pools) { + /// @brief Constructor. + /// + /// @param pools storage container in which to store the parsed pool. + Pools4ListParser(PoolStoragePtr pools) : PoolsListParser(pools) { } -protected: - virtual ParserPtr poolParserMaker(PoolStoragePtr storage) { - return (ParserPtr(new Pool4Parser("pool", storage))); + /// @brief parses the actual structure + /// + /// This method parses the actual list of pools. + /// + /// @param pools_list a list of pool structures + /// @throw isc::dhcp::DhcpConfigError when pool parsing fails + void parse(isc::data::ConstElementPtr pools_list) { + BOOST_FOREACH(ConstElementPtr pool, pools_list->listValue()) { + Pool4Parser parser(pools_); + parser.parse(pool, AF_INET); + } } }; @@ -123,6 +130,13 @@ public: /// /// @param subnet A new subnet being configured. void build(ConstElementPtr subnet) { + /// Parse Pools first. + ConstElementPtr pools = subnet->get("pools"); + if (pools) { + Pools4ListParser parser(pools_); + parser.parse(pools); + } + SubnetConfigParser::build(subnet); if (subnet_) { @@ -186,9 +200,8 @@ protected: (config_id.compare("next-server") == 0) || (config_id.compare("reservation-mode") == 0)) { parser = new StringParser(config_id, string_values_); - } else if (config_id.compare("pools") == 0) { - parser = new Pools4ListParser(config_id, pools_); - // relay has been converted to SimpleParser already. + // pools has been converted to SimpleParser already. + // relay has been converted to SimpleParser already. // option-data has been converted to SimpleParser already. } else if (config_id.compare("match-client-id") == 0) { parser = new BooleanParser(config_id, boolean_values_); diff --git a/src/bin/dhcp6/json_config_parser.cc b/src/bin/dhcp6/json_config_parser.cc index 68af31fd37..bf913f5012 100644 --- a/src/bin/dhcp6/json_config_parser.cc +++ b/src/bin/dhcp6/json_config_parser.cc @@ -75,12 +75,8 @@ public: /// @brief Constructor. /// - /// @param param_name name of the parameter. Note, it is passed through - /// but unused, parameter is currently always "Dhcp6/subnet6[X]/pool" - /// @param pools storage container in which to store the parsed pool - /// upon "commit" - Pool6Parser(const std::string& param_name, PoolStoragePtr pools) - :PoolParser(param_name, pools, AF_INET6) { + /// @param pools storage container in which to store the parsed pool. + Pool6Parser(PoolStoragePtr pools) : PoolParser(pools) { } protected: @@ -113,15 +109,26 @@ protected: } }; -class Pools6ListParser : public PoolsListParser { +/// @brief Specialization of the pool list parser for DHCPv6 +class Pools6ListParser : PoolsListParser { public: - Pools6ListParser(const std::string& dummy, PoolStoragePtr pools) - :PoolsListParser(dummy, pools) { + /// @brief Constructor. + /// + /// @param pools storage container in which to store the parsed pool. + Pools6ListParser(PoolStoragePtr pools) : PoolsListParser(pools) { } -protected: - virtual ParserPtr poolParserMaker(PoolStoragePtr storage) { - return (ParserPtr(new Pool6Parser("pool", storage))); + /// @brief parses the actual structure + /// + /// This method parses the actual list of pools. + /// + /// @param pools_list a list of pool structures + /// @throw isc::dhcp::DhcpConfigError when pool parsing fails + void parse(isc::data::ConstElementPtr pools_list) { + BOOST_FOREACH(ConstElementPtr pool, pools_list->listValue()) { + Pool6Parser parser(pools_); + parser.parse(pool, AF_INET6); + } } }; @@ -142,23 +149,14 @@ protected: /// } /// @endcode /// -class PdPoolParser : public DhcpConfigParser { +class PdPoolParser : public isc::data::SimpleParser { public: /// @brief Constructor. /// - /// @param param_name name of the parameter. Note, it is passed through - /// but unused, parameter is currently always "Dhcp6/subnet6[X]/pool" - /// @param pools storage container in which to store the parsed pool - /// upon "commit" - PdPoolParser(const std::string&, PoolStoragePtr pools) - : uint32_values_(new Uint32Storage()), - string_values_(new StringStorage()), pools_(pools), - options_(new CfgOption()) { - if (!pools_) { - isc_throw(isc::dhcp::DhcpConfigError, - "PdPoolParser context storage may not be NULL"); - } + /// @param pools storage container in which to store the parsed pool. + PdPoolParser(PoolStoragePtr pools) + : pools_(pools), options_(new CfgOption()) { } /// @brief Builds a prefix delegation pool from the given configuration @@ -170,53 +168,67 @@ public: /// that define a prefix delegation pool. /// /// @throw DhcpConfigError if configuration parsing fails. - virtual void build(ConstElementPtr pd_pool_) { + void parse(ConstElementPtr pd_pool_) { + std::string addr_str; + std::string excluded_prefix_str = "::"; + int64_t prefix_len; + int64_t delegated_len; + int64_t excluded_prefix_len = 0; + bool got_prefix = false; + bool got_prefix_len = false; + bool got_delegated_len = false; + // Parse the elements that make up the option definition. BOOST_FOREACH(ConfigPair param, pd_pool_->mapValue()) { std::string entry(param.first); - ParserPtr parser; - if (entry == "prefix" || entry =="excluded-prefix") { - StringParserPtr str_parser(new StringParser(entry, - string_values_)); - parser = str_parser; - } else if (entry == "prefix-len" || entry == "delegated-len" || - entry == "excluded-prefix-len") { - Uint32ParserPtr code_parser(new Uint32Parser(entry, - uint32_values_)); - parser = code_parser; - } else if (entry == "option-data") { - OptionDataListParser opts_parser(AF_INET6); - opts_parser.parse(options_, param.second); - - // OptionDataListParser is converted to SimpleParser already, - // no need to go through build/commit phases. - continue; - } else if (entry == "user-context") { - user_context_ = param.second; - continue; // no parser to remember, simply store the value - } else { - isc_throw(DhcpConfigError, "unsupported parameter: " << entry - << " (" << param.second->getPosition() << ")"); + ConstElementPtr value(param.second); + try { + if (entry == "prefix") { + addr_str = value->stringValue(); + got_prefix = true; + } else if (entry == "excluded-prefix") { + excluded_prefix_str = value->stringValue(); + } else if (entry == "prefix-len") { + prefix_len = value->intValue(); + got_prefix_len = true; + } else if (entry == "delegated-len") { + delegated_len = value->intValue(); + got_delegated_len = true; + } else if (entry == "excluded-prefix-len") { + excluded_prefix_len = value->intValue(); + } else if (entry == "option-data") { + OptionDataListParser opts_parser(AF_INET6); + opts_parser.parse(options_, value); + } else if (entry == "user-context") { + user_context_ = value; + } else { + isc_throw(DhcpConfigError, + "unsupported parameter: " << entry + << " (" << value->getPosition() << ")"); + } + } catch (const isc::data::TypeError&) { + isc_throw(isc::dhcp::DhcpConfigError, + "invalid value type specified for parameter '" + << entry << "' (" + << value->getPosition() << ")"); } - - parser->build(param.second); - parser->commit(); } - // Try to obtain the pool parameters. It will throw an exception if any + // Check the pool parameters. It will throw an exception if any // of the required parameters are not present or invalid. + if (!got_prefix || !got_prefix_len || !got_delegated_len) { + isc_throw(isc::dhcp::DhcpConfigError, + "Missing parameter '" + << (!got_prefix ? "prefix" : + (!got_prefix_len ? "prefix-len" : "delegated-len")) + << "' (" << pd_pool_->getPosition() << ")"); + } try { - const std::string addr_str = string_values_->getParam("prefix"); - const uint32_t prefix_len = uint32_values_->getParam("prefix-len"); - const uint32_t delegated_len = uint32_values_->getParam("delegated-len"); - const std::string excluded_prefix_str = - string_values_->getOptionalParam("excluded-prefix", "::"); - const uint32_t excluded_prefix_len = - uint32_values_->getOptionalParam("excluded-prefix-len", 0); - // Attempt to construct the local pool. - pool_.reset(new Pool6(IOAddress(addr_str), prefix_len, - delegated_len, IOAddress(excluded_prefix_str), + pool_.reset(new Pool6(IOAddress(addr_str), + prefix_len, + delegated_len, + IOAddress(excluded_prefix_str), excluded_prefix_len)); // Merge options specified for a pool into pool configuration. options_->copyTo(*pool_->getCfgOption()); @@ -231,23 +243,12 @@ public: if (user_context_) { pool_->setUserContext(user_context_); } - } - // @brief Commits the constructed local pool to the pool storage. - virtual void commit() { // Add the local pool to the external storage ptr. pools_->push_back(pool_); } protected: - /// Storage for subnet-specific integer values. - Uint32StoragePtr uint32_values_; - - /// Storage for subnet-specific string values. - StringStoragePtr string_values_; - - /// Parsers are stored here. - ParserCollection parsers_; /// Pointer to the created pool object. isc::dhcp::Pool6Ptr pool_; @@ -266,21 +267,13 @@ protected: /// This parser iterates over a list of prefix delegation pool entries and /// creates pool instances for each one. If the parsing is successful, the /// collection of pools is committed to the provided storage. -class PdPoolListParser : public DhcpConfigParser { +class PdPoolListParser : public PoolsListParser { public: /// @brief Constructor. /// - /// @param dummy first argument is ignored, all Parser constructors - /// accept string as first argument. /// @param storage is the pool storage in which to store the parsed /// pools in this list - /// @throw isc::dhcp::DhcpConfigError if storage is null. - PdPoolListParser(const std::string&, PoolStoragePtr pools) - : local_pools_(new PoolStorage()), pools_(pools) { - if (!pools_) { - isc_throw(isc::dhcp::DhcpConfigError, - "PdPoolListParser pools storage may not be NULL"); - } + PdPoolListParser(PoolStoragePtr pools) : PoolsListParser(pools) { } /// @brief Parse configuration entries. @@ -292,47 +285,13 @@ public: /// that define a prefix delegation pool. /// /// @throw DhcpConfigError if configuration parsing fails. - void build(isc::data::ConstElementPtr pd_pool_list) { - // Make sure the local list is empty. - local_pools_.reset(new PoolStorage()); - - // Make sure we have a configuration elements to parse. - if (!pd_pool_list) { - isc_throw(DhcpConfigError, - "PdPoolListParser: list of pool definitions is NULL"); - } - + void parse(isc::data::ConstElementPtr pd_pool_list) { // Loop through the list of pd pools. BOOST_FOREACH(ConstElementPtr pd_pool, pd_pool_list->listValue()) { - boost::shared_ptr - // Create the PdPool parser. - parser(new PdPoolParser("pd-pool", local_pools_)); - // Build the pool instance - parser->build(pd_pool); - // Commit the pool to the local list of pools. - parser->commit(); + PdPoolParser parser(pools_); + parser.parse(pd_pool); } } - - /// @brief Commits the pools created to the external storage area. - /// - /// Note that this method adds the local list of pools to the storage area - /// rather than replacing its contents. This permits other parsers to - /// contribute to the set of pools. - void commit() { - // local_pools_ holds the values produced by the build function. - // At this point parsing should have completed successfully so - // we can append new data to the supplied storage. - pools_->insert(pools_->end(), local_pools_->begin(), - local_pools_->end()); - } - -private: - /// @brief storage for local pools - PoolStoragePtr local_pools_; - - /// @brief External storage where pools are stored upon list commit. - PoolStoragePtr pools_; }; /// @anchor Subnet6ConfigParser @@ -357,6 +316,18 @@ public: /// /// @param subnet A new subnet being configured. void build(ConstElementPtr subnet) { + /// Parse all pools first. + ConstElementPtr pools = subnet->get("pools"); + if (pools) { + Pools6ListParser parser(pools_); + parser.parse(pools); + } + ConstElementPtr pd_pools = subnet->get("pd-pools"); + if (pd_pools) { + PdPoolListParser parser(pools_); + parser.parse(pd_pools); + } + SubnetConfigParser::build(subnet); if (subnet_) { @@ -421,11 +392,9 @@ protected: (config_id.compare("interface-id") == 0) || (config_id.compare("reservation-mode") == 0)) { parser = new StringParser(config_id, string_values_); - } else if (config_id.compare("pools") == 0) { - parser = new Pools6ListParser(config_id, pools_); + // pools has been converted to SimpleParser. // relay has been converted to SimpleParser. - } else if (config_id.compare("pd-pools") == 0) { - parser = new PdPoolListParser(config_id, pools_); + // pd-pools has been converted to SimpleParser. // option-data was here, but it is now converted to SimpleParser } else if (config_id.compare("rapid-commit") == 0) { parser = new BooleanParser(config_id, boolean_values_); diff --git a/src/lib/dhcpsrv/parsers/dhcp_parsers.cc b/src/lib/dhcpsrv/parsers/dhcp_parsers.cc index cf3e116b76..265ad21989 100644 --- a/src/lib/dhcpsrv/parsers/dhcp_parsers.cc +++ b/src/lib/dhcpsrv/parsers/dhcp_parsers.cc @@ -852,60 +852,16 @@ RelayInfoParser::parse(const isc::dhcp::Subnet::RelayInfoPtr& cfg, *cfg = isc::dhcp::Subnet::RelayInfo(ip); } -//****************************** PoolsListParser ******************************** -PoolsListParser::PoolsListParser(const std::string&, PoolStoragePtr pools) - :pools_(pools), local_pools_(new PoolStorage()) { - if (!pools_) { - isc_throw(isc::dhcp::DhcpConfigError, "parser logic error: " - << "storage may not be NULL"); - } -} - -void -PoolsListParser::build(ConstElementPtr pools) { - BOOST_FOREACH(ConstElementPtr pool, pools->listValue()) { - - // Iterate over every structure on the pools list and invoke - // a separate parser for it. - ParserPtr parser = poolParserMaker(local_pools_); - - parser->build(pool); - - // Let's store the parser, but do not commit anything yet - parsers_.push_back(parser); - } -} - -void PoolsListParser::commit() { - - // Commit each parser first. It will store the pool structure - // in pools_. - BOOST_FOREACH(ParserPtr parser, parsers_) { - parser->commit(); - } - - if (pools_) { - // local_pools_ holds the values produced by the build function. - // At this point parsing should have completed successfuly so - // we can append new data to the supplied storage. - pools_->insert(pools_->end(), local_pools_->begin(), local_pools_->end()); - } -} - //****************************** PoolParser ******************************** -PoolParser::PoolParser(const std::string&, PoolStoragePtr pools, - const uint16_t address_family) - :pools_(pools), options_(new CfgOption()), - address_family_(address_family) { +PoolParser::PoolParser(PoolStoragePtr pools) : pools_(pools) { +} - if (!pools_) { - isc_throw(isc::dhcp::DhcpConfigError, "parser logic error: " - << "storage may not be NULL"); - } +PoolParser::~PoolParser() { } void -PoolParser::build(ConstElementPtr pool_structure) { +PoolParser::parse(ConstElementPtr pool_structure, + const uint16_t address_family) { ConstElementPtr text_pool = pool_structure->get("pool"); @@ -952,7 +908,7 @@ PoolParser::build(ConstElementPtr pool_structure) { } pool = poolMaker(addr, len); - local_pools_.push_back(pool); + pools_->push_back(pool); // If there's user-context specified, store it. ConstElementPtr user_context = pool_structure->get("user-context"); @@ -974,7 +930,7 @@ PoolParser::build(ConstElementPtr pool_structure) { isc::asiolink::IOAddress max(txt.substr(pos + 1)); pool = poolMaker(min, max); - local_pools_.push_back(pool); + pools_->push_back(pool); } } @@ -991,13 +947,13 @@ PoolParser::build(ConstElementPtr pool_structure) { if (option_data) { try { // Currently we don't support specifying options for the DHCPv4 server. - if (address_family_ == AF_INET) { + if (address_family == AF_INET) { isc_throw(DhcpConfigError, "option-data is not supported for DHCPv4" " address pools"); } CfgOptionPtr cfg = pool->getCfgOption(); - OptionDataListParser option_parser(address_family_); + OptionDataListParser option_parser(address_family); option_parser.parse(cfg, option_data); } catch (const std::exception& ex) { isc_throw(isc::dhcp::DhcpConfigError, ex.what() @@ -1006,16 +962,6 @@ PoolParser::build(ConstElementPtr pool_structure) { } } -void -PoolParser::commit() { - if (pools_) { - // local_pools_ holds the values produced by the build function. - // At this point parsing should have completed successfuly so - // we can append new data to the supplied storage. - pools_->insert(pools_->end(), local_pools_.begin(), local_pools_.end()); - } -} - //****************************** SubnetConfigParser ************************* SubnetConfigParser::SubnetConfigParser(const std::string&, @@ -1040,6 +986,17 @@ SubnetConfigParser::SubnetConfigParser(const std::string&, void SubnetConfigParser::build(ConstElementPtr subnet) { BOOST_FOREACH(ConfigPair param, subnet->mapValue()) { + // Pools has been converted to SimpleParser. + if (param.first == "pools") { + continue; + } + + // PdPools has been converted to SimpleParser. + if ((param.first == "pd-pools") && + (global_context_->universe_ == Option::V6)) { + continue; + } + // Host reservations must be parsed after subnet specific parameters. // Note that the reservation parsing will be invoked by the build() // in the derived classes, i.e. Subnet4ConfigParser and diff --git a/src/lib/dhcpsrv/parsers/dhcp_parsers.h b/src/lib/dhcpsrv/parsers/dhcp_parsers.h index dcd7528acd..2cfe6e625e 100644 --- a/src/lib/dhcpsrv/parsers/dhcp_parsers.h +++ b/src/lib/dhcpsrv/parsers/dhcp_parsers.h @@ -703,19 +703,16 @@ typedef boost::shared_ptr PoolStoragePtr; /// and stored in chosen PoolStorage container. /// /// It is useful for parsing Dhcp<4/6>/subnet<4/6>[X]/pools[X] structure. -class PoolParser : public DhcpConfigParser { +class PoolParser : public isc::data::SimpleParser { public: /// @brief constructor. /// - /// @param dummy first argument is ignored, all Parser constructors - /// accept string as first argument. /// @param pools is the storage in which to store the parsed pool - /// upon "commit". - /// @param address_family AF_INET (for DHCPv4) or AF_INET6 (for DHCPv6). - /// @throw isc::dhcp::DhcpConfigError if storage is null. - PoolParser(const std::string& dummy, PoolStoragePtr pools, - const uint16_t address_family); + PoolParser(PoolStoragePtr pools); + + /// @brief destructor. + virtual ~PoolParser(); /// @brief parses the actual structure /// @@ -723,12 +720,10 @@ public: /// No validation is done at this stage, everything is interpreted as /// interface name. /// @param pool_structure a single entry on a list of pools + /// @param address_family AF_INET (for DHCPv4) or AF_INET6 (for DHCPv6). /// @throw isc::dhcp::DhcpConfigError when pool parsing fails - virtual void build(isc::data::ConstElementPtr pool_structure); - - /// @brief Stores the parsed values in a storage provided - /// by an upper level parser. - virtual void commit(); + virtual void parse(isc::data::ConstElementPtr pool_structure, + const uint16_t address_family); protected: /// @brief Creates a Pool object given a IPv4 prefix and the prefix length. @@ -738,7 +733,7 @@ protected: /// @param ptype is the type of pool to create. /// @return returns a PoolPtr to the new Pool object. virtual PoolPtr poolMaker(isc::asiolink::IOAddress &addr, uint32_t len, - int32_t ptype=0) = 0; + int32_t ptype = 0) = 0; /// @brief Creates a Pool object given starting and ending IP addresses. /// @@ -747,23 +742,14 @@ protected: /// @param ptype is the type of pool to create (not used by all derivations) /// @return returns a PoolPtr to the new Pool object. virtual PoolPtr poolMaker(isc::asiolink::IOAddress &min, - isc::asiolink::IOAddress &max, int32_t ptype=0) = 0; + isc::asiolink::IOAddress &max, + int32_t ptype = 0) = 0; /// @brief pointer to the actual Pools storage /// /// That is typically a storage somewhere in Subnet parser /// (an upper level parser). PoolStoragePtr pools_; - - /// A temporary storage for pools configuration. It is a - /// storage where pools are stored by build function. - PoolStorage local_pools_; - - /// A storage for pool specific option values. - CfgOptionPtr options_; - - /// @brief Address family: AF_INET (for DHCPv4) or AF_INET6 for DHCPv6. - uint16_t address_family_; }; /// @brief Parser for a list of pools @@ -771,54 +757,34 @@ protected: /// This parser parses a list pools. Each element on that list gets its own /// parser, created with poolParserMaker() method. That method must be specified /// for each protocol family (v4 or v6) separately. -/// -/// This class is not intended to be used directly. Instead, derived classes -/// should implement poolParserMaker() method. -class PoolsListParser : public DhcpConfigParser { +class PoolsListParser : public isc::data::SimpleParser { public: /// @brief constructor. /// - /// @param dummy first argument is ignored, all Parser constructors - /// accept a string as the first argument. - /// @param pools is the storage in which to store the parsed pool - /// upon "commit". - /// @throw isc::dhcp::DhcpConfigError if storage is null. - PoolsListParser(const std::string& dummy, PoolStoragePtr pools); + /// @param pools is the storage in which to store the parsed pools. + PoolsListParser(PoolStoragePtr pools) : pools_(pools) { + } + + /// @brief destructor. + virtual ~PoolsListParser() { + } /// @brief parses the actual structure /// - /// This method parses the actual list of pools. It creates a parser - /// for each structure using poolParserMaker(). + /// This method parses the actual list of pools. /// /// @param pools_list a list of pool structures /// @throw isc::dhcp::DhcpConfigError when pool parsing fails - virtual void build(isc::data::ConstElementPtr pools_list); - - /// @brief Stores the parsed values in storage provided - /// by an upper level parser. - virtual void commit(); + virtual void parse(isc::data::ConstElementPtr pools_list) = 0; protected: - /// @brief Creates a PoolParser object - /// - /// Instantiates appropriate (v4 or v6) PoolParser object. - /// @param storage parameter that is passed to ParserMaker() constructor. - virtual ParserPtr poolParserMaker(PoolStoragePtr storage) = 0; - /// @brief pointer to the actual Pools storage /// /// That is typically a storage somewhere in Subnet parser /// (an upper level parser). PoolStoragePtr pools_; - - /// A temporary storage for pools configuration. It is the - /// storage where pools are stored by the build function. - PoolStoragePtr local_pools_; - - /// Collection of parsers; - ParserCollection parsers_; }; /// @brief parser for additional relay information From 46303ccf47cc3db22bb05aedf5bd3ac9909ac9b0 Mon Sep 17 00:00:00 2001 From: Francis Dupont Date: Thu, 12 Jan 2017 01:55:47 +0100 Subject: [PATCH 02/10] [5097] Added missing user-context map in flex/bison --- src/bin/dhcp4/dhcp4_lexer.ll | 9 +++++++++ src/bin/dhcp4/dhcp4_parser.yy | 12 ++++++++++++ src/bin/dhcp4/tests/config_parser_unittest.cc | 5 +++-- src/bin/dhcp6/dhcp6_lexer.ll | 10 ++++++++++ src/bin/dhcp6/dhcp6_parser.yy | 13 +++++++++++++ src/bin/dhcp6/tests/config_parser_unittest.cc | 3 ++- 6 files changed, 49 insertions(+), 3 deletions(-) diff --git a/src/bin/dhcp4/dhcp4_lexer.ll b/src/bin/dhcp4/dhcp4_lexer.ll index 29de204512..f88a66d6f1 100644 --- a/src/bin/dhcp4/dhcp4_lexer.ll +++ b/src/bin/dhcp4/dhcp4_lexer.ll @@ -426,6 +426,15 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence} } } +\"user-context\" { + switch(driver.ctx_) { + case isc::dhcp::Parser4Context::POOLS: + return isc::dhcp::Dhcp4Parser::make_USER_CONTEXT(driver.loc_); + default: + return isc::dhcp::Dhcp4Parser::make_STRING("user-context", driver.loc_); + } +} + \"subnet\" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: diff --git a/src/bin/dhcp4/dhcp4_parser.yy b/src/bin/dhcp4/dhcp4_parser.yy index 730e4de45c..27ed20c0ec 100644 --- a/src/bin/dhcp4/dhcp4_parser.yy +++ b/src/bin/dhcp4/dhcp4_parser.yy @@ -93,6 +93,7 @@ using namespace std; POOLS "pools" POOL "pool" + USER_CONTEXT "user-context" SUBNET "subnet" INTERFACE "interface" @@ -193,6 +194,7 @@ using namespace std; %token BOOLEAN "boolean" %type value +%type map_value %type socket_type %printer { yyoutput << $$; } <*>; @@ -246,6 +248,8 @@ map2: LCURLY_BRACKET { // for it. }; +map_value: map2 { $$ = ctx.stack_.back(); ctx.stack_.pop_back(); }; + // Assignments rule map_content: %empty // empty map | not_empty_map @@ -1106,6 +1110,7 @@ pool_params: pool_param pool_param: pool_entry | option_data_list + | user_context | unknown_map_entry ; @@ -1117,6 +1122,13 @@ pool_entry: POOL { ctx.leave(); }; +user_context: USER_CONTEXT { + ctx.enter(ctx.NO_KEYWORD); +} COLON map_value { + ctx.stack_.back()->set("user-context", $4); + ctx.leave(); +}; + // --- end of pools definition ------------------------------- // --- reservations ------------------------------------------ diff --git a/src/bin/dhcp4/tests/config_parser_unittest.cc b/src/bin/dhcp4/tests/config_parser_unittest.cc index a975b564dc..22f9508fc8 100644 --- a/src/bin/dhcp4/tests/config_parser_unittest.cc +++ b/src/bin/dhcp4/tests/config_parser_unittest.cc @@ -1,4 +1,4 @@ -// Copyright (C) 2012-2016 Internet Systems Consortium, Inc. ("ISC") +// Copyright (C) 2012-2017 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 @@ -572,8 +572,9 @@ public: void getPool(const std::string& config, size_t subnet_index, size_t pool_index, PoolPtr& pool) { ConstElementPtr status; - ElementPtr json = Element::fromJSON(config); + ConstElementPtr json; + EXPECT_NO_THROW(json = parseDHCP4(config, true)); EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json)); ASSERT_TRUE(status); checkResult(status, 0); diff --git a/src/bin/dhcp6/dhcp6_lexer.ll b/src/bin/dhcp6/dhcp6_lexer.ll index 26a4588e5f..124f8bd6e6 100644 --- a/src/bin/dhcp6/dhcp6_lexer.ll +++ b/src/bin/dhcp6/dhcp6_lexer.ll @@ -466,6 +466,16 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence} } } +\"user-context\" { + switch(driver.ctx_) { + case isc::dhcp::Parser6Context::POOLS: + case isc::dhcp::Parser6Context::PD_POOLS: + return isc::dhcp::Dhcp6Parser::make_USER_CONTEXT(driver.loc_); + default: + return isc::dhcp::Dhcp6Parser::make_STRING("user-context", driver.loc_); + } +} + \"subnet\" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: diff --git a/src/bin/dhcp6/dhcp6_parser.yy b/src/bin/dhcp6/dhcp6_parser.yy index 03d3b3893e..1530d88dda 100644 --- a/src/bin/dhcp6/dhcp6_parser.yy +++ b/src/bin/dhcp6/dhcp6_parser.yy @@ -88,6 +88,7 @@ using namespace std; EXCLUDED_PREFIX "excluded-prefix" EXCLUDED_PREFIX_LEN "excluded-prefix-len" DELEGATED_LEN "delegated-len" + USER_CONTEXT "user-context" SUBNET "subnet" INTERFACE "interface" @@ -194,6 +195,7 @@ using namespace std; %token BOOLEAN "boolean" %type value +%type map_value %type duid_type %printer { yyoutput << $$; } <*>; @@ -248,6 +250,8 @@ map2: LCURLY_BRACKET { // for it. }; +map_value: map2 { $$ = ctx.stack_.back(); ctx.stack_.pop_back(); }; + // Assignments rule map_content: %empty // empty map | not_empty_map @@ -1083,6 +1087,7 @@ pool_params: pool_param pool_param: pool_entry | option_data_list + | user_context | unknown_map_entry ; @@ -1094,6 +1099,13 @@ pool_entry: POOL { ctx.leave(); }; +user_context: USER_CONTEXT { + ctx.enter(ctx.NO_KEYWORD); +} COLON map_value { + ctx.stack_.back()->set("user-context", $4); + ctx.leave(); +}; + // --- end of pools definition ------------------------------- // --- pd-pools ---------------------------------------------- @@ -1143,6 +1155,7 @@ pd_pool_param: pd_prefix | option_data_list | excluded_prefix | excluded_prefix_len + | user_context | unknown_map_entry ; diff --git a/src/bin/dhcp6/tests/config_parser_unittest.cc b/src/bin/dhcp6/tests/config_parser_unittest.cc index fc479fc12e..d007490636 100644 --- a/src/bin/dhcp6/tests/config_parser_unittest.cc +++ b/src/bin/dhcp6/tests/config_parser_unittest.cc @@ -707,8 +707,9 @@ public: void getPool(const std::string& config, size_t subnet_index, size_t pool_index, Lease::Type type, PoolPtr& pool) { ConstElementPtr status; - ElementPtr json = Element::fromJSON(config); + ConstElementPtr json; + EXPECT_NO_THROW(json = parseDHCP6(config, true)); EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json)); ASSERT_TRUE(status); checkResult(status, 0); From 3e730be6be39152e961240f858e1d16b51378967 Mon Sep 17 00:00:00 2001 From: Francis Dupont Date: Thu, 12 Jan 2017 00:57:16 +0000 Subject: [PATCH 03/10] [trac5097] regen flex/bison files --- src/bin/dhcp4/dhcp4_lexer.cc | 1157 +++++++------- src/bin/dhcp4/dhcp4_parser.cc | 2816 +++++++++++++++++---------------- src/bin/dhcp4/dhcp4_parser.h | 199 +-- src/bin/dhcp4/location.hh | 2 +- src/bin/dhcp4/position.hh | 2 +- src/bin/dhcp4/stack.hh | 2 +- src/bin/dhcp6/dhcp6_lexer.cc | 1133 ++++++------- src/bin/dhcp6/dhcp6_parser.cc | 2807 ++++++++++++++++---------------- src/bin/dhcp6/dhcp6_parser.h | 210 +-- src/bin/dhcp6/location.hh | 2 +- src/bin/dhcp6/position.hh | 2 +- src/bin/dhcp6/stack.hh | 2 +- 12 files changed, 4240 insertions(+), 4094 deletions(-) diff --git a/src/bin/dhcp4/dhcp4_lexer.cc b/src/bin/dhcp4/dhcp4_lexer.cc index 23145b4bc4..957c71e1e0 100644 --- a/src/bin/dhcp4/dhcp4_lexer.cc +++ b/src/bin/dhcp4/dhcp4_lexer.cc @@ -467,8 +467,8 @@ static void yynoreturn yy_fatal_error (yyconst char* msg ); (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 116 -#define YY_END_OF_BUFFER 117 +#define YY_NUM_RULES 117 +#define YY_END_OF_BUFFER 118 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -476,107 +476,108 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_accept[901] = +static yyconst flex_int16_t yy_accept[910] = { 0, - 109, 109, 0, 0, 0, 0, 0, 0, 0, 0, - 117, 115, 10, 11, 115, 1, 109, 106, 109, 109, - 115, 108, 107, 115, 115, 115, 115, 115, 102, 103, - 115, 115, 115, 104, 105, 5, 5, 5, 115, 115, - 115, 10, 11, 0, 0, 98, 0, 0, 0, 0, + 110, 110, 0, 0, 0, 0, 0, 0, 0, 0, + 118, 116, 10, 11, 116, 1, 110, 107, 110, 110, + 116, 109, 108, 116, 116, 116, 116, 116, 103, 104, + 116, 116, 116, 105, 106, 5, 5, 5, 116, 116, + 116, 10, 11, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 109, - 109, 0, 108, 109, 3, 2, 6, 0, 109, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 110, + 110, 0, 109, 110, 3, 2, 6, 0, 110, 0, 0, 0, 0, 0, 0, 4, 0, 0, 9, 0, - 99, 0, 0, 0, 0, 0, 101, 0, 0, 0, + 100, 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, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, - 0, 8, 0, 0, 0, 0, 0, 100, 0, 0, + 0, 8, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 114, 112, 0, 111, 110, 0, 0, 0, 0, 0, + 115, 113, 0, 112, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, - 0, 113, 110, 0, 0, 0, 0, 0, 0, 0, + 0, 114, 111, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 44, 0, 0, 35, - 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 45, 0, 0, 35, + 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, - 74, 21, 0, 22, 0, 0, 0, 0, 0, 12, - 88, 0, 0, 65, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, + 75, 21, 0, 22, 0, 0, 0, 0, 0, 0, + 12, 89, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 73, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 36, 0, 0, 0, 0, 0, 66, 0, 0, - 0, 0, 0, 61, 0, 0, 0, 7, 0, 0, + 0, 0, 36, 0, 0, 0, 0, 0, 67, 0, + 0, 0, 0, 0, 62, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, - 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 39, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 70, 47, 0, 0, 0, 0, - 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, - 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 71, 48, 0, + 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, + 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 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, 23, 0, 20, 0, - 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, + 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 23, 0, 20, 0, 0, 0, 0, 0, 0, 0, + 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 39, 0, 0, 0, 0, + 0, 59, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, - 0, 92, 0, 59, 0, 0, 62, 50, 0, 0, + 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 57, 72, 0, 17, 0, 67, 0, 0, 0, 0, - 0, 0, 32, 0, 69, 0, 0, 0, 0, 0, + 72, 0, 0, 0, 0, 0, 0, 93, 0, 60, + 0, 0, 63, 51, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 58, 73, 0, 17, + 0, 68, 0, 0, 0, 0, 0, 0, 32, 0, + 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 95, 33, - 0, 0, 0, 0, 0, 28, 0, 0, 0, 86, - 85, 0, 0, 0, 0, 53, 0, 0, 0, 0, - 83, 0, 0, 0, 0, 0, 0, 0, 0, 40, - 0, 0, 26, 0, 0, 0, 0, 42, 29, 0, - 63, 0, 55, 0, 0, 0, 90, 0, 0, 0, - 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, + 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 96, 33, 0, 0, 0, + 0, 0, 28, 0, 0, 0, 87, 86, 0, 0, + 0, 0, 0, 54, 0, 0, 0, 0, 84, 0, + 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, + 26, 0, 0, 0, 0, 43, 29, 0, 64, 0, + 56, 0, 0, 38, 0, 91, 0, 0, 0, 0, + 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 97, 52, 84, 0, 0, 93, 0, - 0, 0, 0, 0, 19, 0, 18, 0, 0, 0, + 0, 0, 98, 53, 85, 0, 0, 94, 0, 0, - 48, 0, 0, 0, 0, 27, 0, 0, 0, 0, - 0, 0, 68, 0, 0, 94, 0, 0, 0, 0, - 96, 0, 91, 0, 14, 0, 0, 0, 0, 0, - 0, 81, 0, 43, 0, 0, 0, 0, 0, 0, - 13, 0, 0, 0, 0, 0, 0, 0, 0, 80, - 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, + 0, 0, 0, 19, 0, 18, 0, 0, 0, 49, + 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, + 0, 69, 0, 0, 95, 0, 0, 0, 0, 97, + 0, 92, 0, 14, 0, 0, 0, 0, 0, 0, + 82, 0, 44, 0, 0, 0, 0, 0, 0, 13, + 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, + 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 77, 82, 30, 0, 0, 0, 76, 0, 0, - 0, 0, 0, 0, 0, 45, 0, 0, 78, 0 + 78, 83, 30, 0, 0, 0, 77, 0, 0, 0, + 0, 0, 0, 0, 46, 0, 0, 79, 0 } ; static yyconst YY_CHAR yy_ec[256] = @@ -621,217 +622,219 @@ static yyconst YY_CHAR yy_meta[61] = 5, 3, 5, 5, 3, 3, 3, 3, 3, 3 } ; -static yyconst flex_uint16_t yy_base[913] = +static yyconst flex_uint16_t yy_base[922] = { 0, 0, 0, 59, 62, 65, 0, 63, 67, 64, 66, - 1204, 1205, 83, 1200, 125, 0, 174, 1205, 179, 185, - 80, 192, 1205, 1182, 87, 79, 37, 66, 1205, 1205, - 83, 156, 164, 1205, 1205, 1205, 110, 1188, 1152, 0, - 1180, 118, 1195, 190, 218, 1205, 1148, 1153, 1146, 247, - 1143, 1144, 178, 177, 164, 1146, 186, 190, 234, 1155, - 207, 195, 241, 210, 242, 245, 254, 1154, 0, 293, - 298, 309, 315, 320, 1205, 0, 1205, 326, 331, 202, - 253, 180, 302, 306, 232, 1205, 1151, 1182, 1205, 288, - 1205, 1133, 1170, 1147, 1142, 1177, 0, 347, 1131, 1132, + 1213, 1214, 83, 1209, 125, 0, 174, 1214, 179, 185, + 80, 192, 1214, 1191, 87, 79, 37, 66, 1214, 1214, + 83, 156, 164, 1214, 1214, 1214, 110, 1197, 1161, 0, + 1189, 118, 1204, 190, 218, 1214, 1157, 1162, 1155, 247, + 1152, 1153, 178, 177, 164, 1155, 186, 190, 234, 1164, + 207, 195, 241, 210, 242, 245, 254, 1163, 0, 293, + 298, 309, 315, 320, 1214, 0, 1214, 326, 331, 202, + 253, 180, 302, 306, 232, 1214, 1160, 1191, 1214, 288, + 1214, 1142, 1179, 1156, 1151, 1186, 0, 347, 1140, 1141, - 1129, 1135, 310, 1123, 1124, 199, 1138, 1131, 1131, 266, - 1123, 1118, 304, 1113, 1159, 212, 1116, 1157, 1131, 1128, - 1128, 1122, 258, 1116, 1105, 1108, 1107, 313, 1108, 1109, - 287, 343, 322, 1119, 1120, 1118, 1102, 1106, 1102, 1101, - 1094, 1109, 1102, 0, 322, 350, 335, 338, 352, 342, - 1101, 1205, 0, 1135, 1095, 1102, 1137, 1205, 385, 1106, - 1088, 1102, 1099, 1098, 1084, 1125, 1099, 1080, 1087, 1082, - 1092, 1081, 1093, 1088, 1083, 1074, 1086, 1079, 1070, 1072, - 1085, 1205, 1072, 1079, 1082, 1065, 1105, 1064, 1072, 1075, - 1101, 1071, 1057, 1065, 1058, 1071, 1054, 1053, 1058, 1059, + 1138, 1144, 310, 1132, 1133, 199, 1147, 1140, 1140, 266, + 1132, 1127, 304, 1122, 1168, 212, 1125, 1166, 1140, 1137, + 1137, 1131, 258, 1125, 1114, 1117, 1116, 313, 1117, 1118, + 287, 343, 322, 1128, 1129, 1127, 1111, 1115, 1111, 1110, + 1103, 1118, 1111, 0, 322, 350, 335, 338, 352, 342, + 1110, 1214, 0, 1144, 1104, 1111, 1146, 1214, 385, 1115, + 1097, 1111, 1108, 1107, 1093, 1134, 1108, 1089, 1096, 1091, + 1101, 1090, 1102, 1097, 1092, 1083, 1095, 1088, 1079, 1081, + 1094, 1214, 1081, 1088, 1091, 1074, 1114, 1073, 1081, 1084, + 1110, 1080, 1066, 1074, 1067, 1080, 1063, 1062, 1067, 1068, - 1096, 1062, 1056, 308, 1063, 1058, 1057, 1041, 1055, 1049, - 1055, 1044, 1038, 1050, 1049, 1082, 1051, 1035, 1041, 373, - 1205, 1205, 378, 1205, 1205, 1030, 0, 153, 388, 1039, - 413, 1024, 1070, 1026, 1031, 1072, 1026, 1035, 1069, 1032, - 1029, 401, 1066, 1060, 1020, 1018, 1017, 1024, 1055, 1013, - 408, 1024, 1024, 1009, 1010, 1021, 1019, 1014, 1021, 1016, - 1012, 1003, 1047, 1041, 1002, 996, 1002, 992, 1003, 245, - 1007, 1205, 996, 996, 1007, 991, 983, 984, 988, 998, - 986, 996, 995, 994, 1027, 1026, 1025, 1205, 979, 1023, - 989, 1205, 1205, 988, 0, 978, 971, 1018, 1017, 983, + 1105, 1071, 1065, 308, 1072, 1067, 1066, 1050, 1064, 1058, + 1064, 1053, 1047, 1059, 1058, 1091, 1060, 1044, 1050, 373, + 1214, 1214, 378, 1214, 1214, 1039, 0, 153, 388, 1048, + 413, 1033, 1079, 1035, 1040, 1081, 1035, 1044, 1078, 1041, + 1038, 401, 1075, 1069, 1029, 1027, 1026, 1033, 1064, 1022, + 408, 1033, 1033, 1018, 1019, 1030, 1028, 1023, 1030, 1025, + 1021, 1012, 1056, 1050, 1011, 1005, 1011, 1001, 1012, 245, + 1016, 1214, 1005, 1005, 1016, 1000, 992, 993, 997, 1007, + 995, 1005, 1004, 1003, 1036, 1035, 1034, 1214, 988, 110, + 999, 1214, 1214, 998, 0, 988, 981, 1028, 1027, 993, - 973, 447, 1014, 978, 974, 964, 1205, 967, 966, 1205, - 968, 965, 353, 963, 1205, 973, 958, 959, 968, 996, - 955, 994, 1205, 953, 967, 991, 995, 961, 955, 957, - 958, 985, 947, 943, 942, 981, 951, 1205, 938, 941, - 935, 947, 937, 933, 1205, 978, 972, 934, 942, 936, - 940, 972, 966, 921, 924, 930, 920, 966, 918, 1205, - 1205, 1205, 922, 1205, 958, 928, 0, 914, 929, 1205, - 1205, 917, 922, 1205, 919, 909, 950, 914, 908, 918, - 917, 917, 906, 938, 907, 898, 900, 911, 898, 908, - 901, 906, 898, 905, 1205, 892, 901, 905, 889, 900, + 983, 447, 1024, 988, 984, 974, 1214, 977, 976, 1214, + 978, 975, 353, 973, 1214, 983, 968, 969, 978, 1006, + 965, 1004, 1214, 963, 977, 1001, 1005, 971, 965, 967, + 968, 995, 957, 953, 952, 991, 961, 1214, 948, 951, + 945, 957, 947, 943, 1214, 988, 982, 944, 952, 946, + 950, 982, 976, 931, 934, 940, 930, 976, 928, 1214, + 1214, 1214, 932, 1214, 941, 967, 937, 0, 923, 938, + 1214, 1214, 926, 931, 1214, 928, 918, 959, 923, 917, + 927, 926, 926, 915, 947, 916, 907, 909, 920, 907, + 917, 910, 915, 907, 914, 1214, 901, 910, 914, 898, - 885, 879, 884, 897, 896, 893, 921, 270, 878, 879, - 876, 1205, 890, 881, 915, 878, 913, 1205, 870, 886, - 910, 867, 908, 1205, 424, 878, 871, 1205, 876, 867, - 862, 907, 866, 900, 402, 899, 862, 853, 896, 858, - 867, 893, 859, 856, 857, 889, 859, 860, 853, 844, - 855, 858, 853, 848, 853, 850, 853, 848, 881, 880, - 839, 838, 832, 843, 1205, 832, 840, 840, 872, 828, - 818, 822, 863, 820, 828, 818, 350, 812, 68, 1205, - 863, 829, 823, 815, 825, 858, 1205, 823, 818, 815, - 821, 807, 822, 817, 806, 803, 809, 803, 812, 815, + 909, 894, 888, 893, 906, 905, 902, 930, 270, 887, + 888, 885, 1214, 899, 890, 924, 887, 922, 1214, 879, + 895, 919, 876, 917, 1214, 424, 887, 877, 879, 1214, + 884, 875, 870, 915, 874, 908, 402, 907, 870, 861, + 904, 866, 875, 901, 867, 864, 865, 897, 867, 868, + 861, 852, 863, 866, 861, 856, 861, 858, 861, 856, + 889, 888, 847, 846, 840, 851, 1214, 840, 848, 848, + 880, 836, 826, 830, 871, 828, 836, 826, 350, 820, + 367, 1214, 871, 837, 827, 830, 822, 832, 865, 1214, + 830, 825, 822, 828, 814, 829, 824, 813, 810, 816, - 798, 803, 810, 801, 809, 805, 838, 790, 790, 801, - 800, 787, 785, 786, 1205, 1205, 792, 799, 779, 405, - 783, 781, 825, 1205, 783, 823, 784, 774, 768, 778, - 780, 774, 783, 815, 784, 761, 1205, 807, 776, 775, - 762, 1205, 803, 774, 776, 805, 761, 756, 762, 756, - 800, 765, 755, 755, 749, 761, 760, 753, 762, 746, - 745, 1205, 759, 742, 742, 437, 740, 755, 735, 749, - 744, 747, 733, 744, 731, 731, 1205, 735, 1205, 734, - 736, 729, 738, 728, 724, 769, 1205, 727, 723, 721, - 731, 734, 763, 720, 761, 714, 1205, 727, 758, 757, + 810, 819, 822, 805, 810, 817, 808, 816, 812, 845, + 797, 797, 808, 807, 794, 792, 793, 1214, 1214, 799, + 806, 786, 405, 790, 788, 832, 1214, 790, 830, 791, + 781, 775, 785, 787, 781, 790, 822, 791, 768, 1214, + 814, 771, 782, 781, 768, 1214, 809, 780, 782, 811, + 767, 762, 768, 762, 806, 771, 761, 761, 755, 767, + 766, 759, 768, 752, 751, 1214, 765, 748, 748, 437, + 746, 761, 741, 755, 750, 753, 739, 750, 737, 737, + 1214, 741, 1214, 740, 742, 735, 744, 734, 730, 775, + 1214, 733, 729, 727, 737, 736, 739, 768, 725, 766, - 713, 1205, 708, 709, 706, 718, 746, 720, 719, 710, - 717, 697, 714, 744, 743, 1205, 704, 409, 741, 709, - 709, 696, 696, 691, 705, 734, 695, 732, 693, 696, - 688, 694, 682, 684, 678, 1205, 690, 689, 688, 674, - 688, 1205, 689, 1205, 672, 678, 1205, 1205, 685, 710, - 667, 708, 712, 673, 664, 671, 667, 662, 676, 675, - 1205, 1205, 657, 1205, 650, 1205, 633, 621, 607, 112, - 220, 281, 1205, 267, 1205, 273, 366, 391, 380, 427, - 444, 394, 438, 441, 419, 414, 419, 417, 459, 426, - 431, 420, 468, 431, 1205, 437, 437, 431, 439, 436, + 719, 1214, 732, 763, 762, 718, 1214, 713, 714, 711, + 723, 751, 725, 724, 715, 722, 702, 719, 749, 748, + 1214, 709, 436, 746, 714, 714, 701, 701, 696, 710, + 739, 700, 737, 698, 701, 693, 699, 687, 689, 683, + 1214, 695, 694, 693, 675, 678, 692, 1214, 693, 1214, + 676, 682, 1214, 1214, 689, 714, 671, 712, 716, 677, + 668, 661, 650, 627, 640, 633, 1214, 1214, 84, 1214, + 188, 1214, 251, 270, 273, 406, 425, 426, 1214, 384, + 1214, 391, 404, 417, 406, 453, 453, 417, 460, 461, + 435, 421, 431, 436, 430, 472, 439, 444, 428, 476, - 428, 430, 484, 442, 440, 487, 483, 449, 1205, 1205, - 449, 492, 494, 450, 497, 1205, 457, 499, 470, 1205, - 1205, 461, 461, 503, 470, 1205, 459, 459, 460, 457, - 1205, 477, 511, 466, 479, 481, 481, 478, 483, 1205, - 476, 485, 1205, 482, 487, 484, 477, 1205, 1205, 519, - 1205, 482, 1205, 485, 497, 494, 1205, 491, 530, 531, - 532, 495, 490, 535, 1205, 531, 504, 533, 493, 497, - 541, 507, 543, 511, 515, 505, 547, 498, 516, 516, - 513, 552, 520, 1205, 1205, 1205, 511, 521, 1205, 512, - 552, 511, 559, 518, 1205, 523, 1205, 562, 517, 530, + 446, 1214, 452, 452, 446, 454, 451, 443, 445, 492, + 450, 448, 495, 491, 457, 1214, 1214, 456, 500, 501, + 457, 503, 1214, 464, 507, 478, 1214, 1214, 469, 510, + 470, 512, 479, 1214, 468, 468, 469, 466, 1214, 486, + 520, 475, 488, 490, 490, 487, 492, 1214, 485, 494, + 1214, 491, 496, 493, 486, 1214, 1214, 528, 1214, 491, + 1214, 494, 506, 1214, 503, 1214, 500, 539, 540, 541, + 504, 499, 544, 1214, 540, 513, 542, 502, 506, 550, + 516, 552, 520, 524, 514, 556, 507, 525, 525, 522, + 561, 529, 1214, 1214, 1214, 520, 530, 1214, 521, 561, - 1205, 535, 532, 567, 527, 1205, 569, 528, 571, 527, - 526, 536, 1205, 570, 540, 1205, 543, 578, 541, 580, - 1205, 576, 1205, 577, 1205, 540, 546, 544, 548, 587, - 542, 1205, 542, 1205, 558, 547, 560, 552, 560, 562, - 1205, 596, 592, 546, 565, 566, 567, 602, 569, 1205, - 557, 573, 561, 561, 563, 1205, 567, 572, 571, 574, - 567, 609, 568, 575, 583, 575, 581, 570, 583, 588, - 577, 591, 583, 596, 592, 628, 629, 630, 595, 594, - 595, 1205, 1205, 1205, 634, 588, 602, 1205, 632, 593, - 592, 594, 603, 642, 602, 1205, 610, 645, 1205, 1205, + 520, 568, 527, 1214, 532, 1214, 571, 526, 539, 1214, + 544, 541, 576, 536, 1214, 578, 537, 580, 536, 535, + 545, 1214, 579, 549, 1214, 552, 587, 550, 589, 1214, + 585, 1214, 586, 1214, 549, 555, 553, 557, 596, 551, + 1214, 551, 1214, 567, 556, 569, 561, 569, 571, 1214, + 605, 601, 555, 574, 575, 576, 611, 578, 1214, 566, + 582, 570, 570, 572, 1214, 576, 581, 580, 583, 576, + 618, 577, 584, 592, 584, 590, 579, 592, 597, 586, + 600, 592, 605, 601, 637, 638, 639, 604, 603, 604, + 1214, 1214, 1214, 643, 597, 611, 1214, 641, 602, 601, - 651, 658, 665, 672, 679, 686, 690, 695, 697, 699, - 701, 703 + 603, 612, 651, 611, 1214, 619, 654, 1214, 1214, 660, + 667, 674, 681, 688, 695, 699, 704, 706, 708, 710, + 712 } ; -static yyconst flex_int16_t yy_def[913] = +static yyconst flex_int16_t yy_def[922] = { 0, - 900, 1, 901, 901, 1, 5, 5, 5, 5, 5, - 900, 900, 900, 900, 900, 902, 900, 900, 900, 900, - 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, - 900, 900, 900, 900, 900, 900, 900, 900, 900, 903, - 900, 900, 900, 904, 15, 900, 45, 45, 45, 905, + 909, 1, 910, 910, 1, 5, 5, 5, 5, 5, + 909, 909, 909, 909, 909, 911, 909, 909, 909, 909, + 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, + 909, 909, 909, 909, 909, 909, 909, 909, 909, 912, + 909, 909, 909, 913, 15, 909, 45, 45, 45, 914, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 902, 900, - 900, 900, 900, 900, 900, 906, 900, 900, 900, 900, - 900, 900, 900, 900, 900, 900, 900, 903, 900, 904, - 900, 907, 45, 45, 45, 908, 45, 905, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 911, 909, + 909, 909, 909, 909, 909, 915, 909, 909, 909, 909, + 909, 909, 909, 909, 909, 909, 909, 912, 909, 913, + 909, 916, 45, 45, 45, 917, 45, 914, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 906, 900, 900, 900, 900, 900, 900, - 900, 900, 909, 45, 45, 45, 908, 900, 905, 45, + 45, 45, 45, 915, 909, 909, 909, 909, 909, 909, + 909, 909, 918, 45, 45, 45, 917, 909, 914, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 900, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 909, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 900, - 900, 900, 900, 900, 900, 900, 910, 45, 45, 45, - 905, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 909, + 909, 909, 909, 909, 909, 909, 919, 45, 45, 45, + 914, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 900, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 900, 45, 45, - 45, 900, 900, 900, 911, 45, 45, 45, 45, 45, + 45, 909, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 909, 45, 45, + 45, 909, 909, 909, 920, 45, 45, 45, 45, 45, - 45, 905, 45, 45, 45, 45, 900, 45, 45, 900, - 45, 45, 45, 45, 900, 45, 45, 45, 45, 45, - 45, 45, 900, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 900, 45, 45, - 45, 45, 45, 45, 900, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 900, - 900, 900, 45, 900, 45, 900, 912, 45, 45, 900, - 900, 45, 45, 900, 45, 45, 45, 45, 45, 45, + 45, 914, 45, 45, 45, 45, 909, 45, 45, 909, + 45, 45, 45, 45, 909, 45, 45, 45, 45, 45, + 45, 45, 909, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 909, 45, 45, + 45, 45, 45, 45, 909, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 909, + 909, 909, 45, 909, 45, 45, 909, 921, 45, 45, + 909, 909, 45, 45, 909, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 900, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 909, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 900, 45, 45, 45, 45, 45, 900, 45, 45, - 45, 45, 45, 900, 45, 45, 45, 900, 45, 45, + 45, 45, 909, 45, 45, 45, 45, 45, 909, 45, + 45, 45, 45, 45, 909, 45, 45, 45, 45, 909, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 900, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 900, - 45, 45, 45, 45, 45, 45, 900, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 909, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 909, 45, 45, 45, 45, 45, 45, 45, 909, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 900, 900, 45, 45, 45, 45, - 45, 45, 45, 900, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 900, 45, 45, 45, - 45, 900, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 909, 909, 45, + 45, 45, 45, 45, 45, 45, 909, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 909, + 45, 45, 45, 45, 45, 909, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 900, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 900, 45, 900, 45, - 45, 45, 45, 45, 45, 45, 900, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 900, 45, 45, 45, + 45, 45, 45, 45, 45, 909, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 909, 45, 909, 45, 45, 45, 45, 45, 45, 45, + 909, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 900, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 900, 45, 45, 45, 45, + 45, 909, 45, 45, 45, 45, 909, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 900, 45, 45, 45, 45, - 45, 900, 45, 900, 45, 45, 900, 900, 45, 45, + 909, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 900, 900, 45, 900, 45, 900, 45, 45, 45, 45, - 45, 45, 900, 45, 900, 45, 45, 45, 45, 45, + 909, 45, 45, 45, 45, 45, 45, 909, 45, 909, + 45, 45, 909, 909, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 909, 909, 45, 909, + 45, 909, 45, 45, 45, 45, 45, 45, 909, 45, + 909, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 900, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 900, 900, - 45, 45, 45, 45, 45, 900, 45, 45, 45, 900, - 900, 45, 45, 45, 45, 900, 45, 45, 45, 45, - 900, 45, 45, 45, 45, 45, 45, 45, 45, 900, - 45, 45, 900, 45, 45, 45, 45, 900, 900, 45, - 900, 45, 900, 45, 45, 45, 900, 45, 45, 45, - 45, 45, 45, 45, 900, 45, 45, 45, 45, 45, + 45, 909, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 909, 909, 45, 45, 45, + 45, 45, 909, 45, 45, 45, 909, 909, 45, 45, + 45, 45, 45, 909, 45, 45, 45, 45, 909, 45, + 45, 45, 45, 45, 45, 45, 45, 909, 45, 45, + 909, 45, 45, 45, 45, 909, 909, 45, 909, 45, + 909, 45, 45, 909, 45, 909, 45, 45, 45, 45, + 45, 45, 45, 909, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 900, 900, 900, 45, 45, 900, 45, - 45, 45, 45, 45, 900, 45, 900, 45, 45, 45, + 45, 45, 909, 909, 909, 45, 45, 909, 45, 45, - 900, 45, 45, 45, 45, 900, 45, 45, 45, 45, - 45, 45, 900, 45, 45, 900, 45, 45, 45, 45, - 900, 45, 900, 45, 900, 45, 45, 45, 45, 45, - 45, 900, 45, 900, 45, 45, 45, 45, 45, 45, - 900, 45, 45, 45, 45, 45, 45, 45, 45, 900, - 45, 45, 45, 45, 45, 900, 45, 45, 45, 45, + 45, 45, 45, 909, 45, 909, 45, 45, 45, 909, + 45, 45, 45, 45, 909, 45, 45, 45, 45, 45, + 45, 909, 45, 45, 909, 45, 45, 45, 45, 909, + 45, 909, 45, 909, 45, 45, 45, 45, 45, 45, + 909, 45, 909, 45, 45, 45, 45, 45, 45, 909, + 45, 45, 45, 45, 45, 45, 45, 45, 909, 45, + 45, 45, 45, 45, 909, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 900, 900, 900, 45, 45, 45, 900, 45, 45, - 45, 45, 45, 45, 45, 900, 45, 45, 900, 0, + 909, 909, 909, 45, 45, 45, 909, 45, 45, 45, - 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, - 900, 900 + 45, 45, 45, 45, 909, 45, 45, 909, 0, 909, + 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, + 909 } ; -static yyconst flex_uint16_t yy_nxt[1266] = +static yyconst flex_uint16_t yy_nxt[1275] = { 0, 12, 13, 14, 13, 12, 15, 16, 12, 17, 18, 19, 20, 21, 22, 22, 22, 23, 24, 12, 12, @@ -845,8 +848,8 @@ static yyconst flex_uint16_t yy_nxt[1266] = 81, 12, 76, 82, 12, 78, 12, 78, 12, 80, 79, 79, 79, 80, 12, 12, 12, 12, 39, 12, - 12, 42, 12, 42, 80, 535, 82, 12, 83, 42, - 536, 42, 708, 12, 12, 44, 44, 44, 45, 45, + 12, 42, 12, 42, 80, 364, 82, 12, 83, 42, + 365, 42, 710, 12, 12, 44, 44, 44, 45, 45, 46, 45, 45, 45, 45, 45, 45, 45, 45, 47, 45, 45, 45, 45, 45, 45, 45, 48, 45, 45, 49, 45, 45, 45, 45, 45, 45, 50, 45, 45, @@ -857,40 +860,40 @@ static yyconst flex_uint16_t yy_nxt[1266] = 74, 109, 72, 70, 297, 73, 73, 73, 72, 84, 147, 110, 105, 72, 85, 72, 106, 182, 72, 107, - 111, 101, 92, 102, 72, 709, 103, 145, 116, 104, + 111, 101, 92, 102, 72, 711, 103, 145, 116, 104, 108, 72, 45, 147, 113, 168, 169, 117, 114, 118, 45, 115, 124, 45, 126, 131, 125, 145, 127, 132, 345, 183, 97, 45, 45, 45, 45, 45, 45, 45, 45, 45, 147, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 119, 120, 465, 128, 121, 146, 45, - 129, 133, 122, 45, 137, 150, 710, 45, 138, 130, + 45, 45, 45, 119, 120, 467, 128, 121, 146, 45, + 129, 133, 122, 45, 137, 150, 712, 45, 138, 130, 134, 135, 140, 91, 45, 136, 346, 45, 146, 45, - 98, 141, 139, 173, 466, 142, 74, 74, 74, 70, - 190, 71, 71, 71, 191, 711, 72, 78, 174, 78, - 92, 72, 79, 79, 79, 712, 70, 145, 73, 73, + 98, 141, 139, 173, 468, 142, 74, 74, 74, 70, + 190, 71, 71, 71, 191, 713, 72, 78, 174, 78, + 92, 72, 79, 79, 79, 714, 70, 145, 73, 73, 73, 146, 72, 74, 74, 74, 200, 72, 72, 79, 79, 79, 201, 72, 79, 79, 79, 148, 164, 177, 220, 149, 178, 275, 72, 179, 276, 165, 222, 72, 159, 159, 159, 196, 197, 222, 220, 159, 159, 159, 159, 159, 208, 220, 222, 221, 209, 221, 202, 203, 204, 225, 159, 159, 159, 159, 159, 159, 205, 223, - 206, 382, 532, 533, 207, 221, 292, 224, 231, 231, + 206, 383, 535, 536, 207, 221, 292, 224, 231, 231, - 231, 292, 298, 299, 383, 231, 231, 231, 231, 231, - 300, 313, 292, 323, 664, 314, 713, 293, 324, 665, - 231, 231, 231, 231, 231, 231, 302, 302, 302, 480, - 714, 715, 716, 302, 302, 302, 302, 302, 481, 490, - 573, 719, 616, 720, 574, 491, 721, 617, 302, 302, - 302, 302, 302, 302, 717, 325, 722, 723, 724, 326, - 45, 45, 45, 725, 726, 728, 729, 45, 45, 45, - 45, 45, 730, 731, 732, 733, 734, 735, 736, 737, - 738, 739, 45, 45, 45, 45, 45, 45, 618, 740, - 741, 742, 743, 744, 745, 718, 747, 748, 727, 749, + 231, 292, 298, 299, 384, 231, 231, 231, 231, 231, + 300, 313, 292, 323, 538, 314, 715, 293, 324, 539, + 231, 231, 231, 231, 231, 231, 302, 302, 302, 482, + 716, 717, 718, 302, 302, 302, 302, 302, 483, 493, + 577, 670, 621, 719, 578, 494, 671, 622, 302, 302, + 302, 302, 302, 302, 720, 325, 721, 722, 723, 326, + 45, 45, 45, 724, 726, 727, 728, 45, 45, 45, + 45, 45, 729, 730, 731, 732, 733, 734, 736, 737, + 738, 739, 45, 45, 45, 45, 45, 45, 623, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, - 750, 746, 751, 752, 753, 754, 755, 756, 757, 759, - 760, 761, 762, 758, 763, 764, 765, 766, 767, 768, - 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, + 751, 752, 753, 755, 725, 756, 757, 758, 759, 754, + 760, 735, 761, 762, 763, 764, 765, 766, 768, 769, + 770, 771, 767, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, @@ -904,77 +907,78 @@ static yyconst flex_uint16_t yy_nxt[1266] = 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, - 899, 36, 36, 36, 36, 36, 36, 36, 69, 707, - 69, 69, 69, 69, 69, 88, 706, 88, 705, 88, - 88, 88, 90, 90, 90, 90, 90, 90, 90, 96, - 96, 96, 96, 96, 96, 96, 144, 704, 144, 144, - 144, 144, 144, 90, 90, 703, 90, 157, 157, 157, + 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 36, 36, 36, 36, 36, 36, 36, 69, 709, 69, + 69, 69, 69, 69, 88, 708, 88, 707, 88, 88, + 88, 90, 90, 90, 90, 90, 90, 90, 96, 96, + 96, 96, 96, 96, 96, 144, 706, 144, 144, 144, - 157, 157, 227, 227, 295, 295, 367, 367, 90, 90, - 702, 701, 700, 699, 698, 697, 696, 695, 694, 693, - 692, 691, 690, 689, 688, 687, 686, 685, 684, 683, - 682, 681, 680, 679, 678, 677, 676, 675, 674, 673, - 672, 671, 670, 669, 668, 667, 666, 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, 636, 635, 634, 633, 632, 631, - 630, 629, 628, 627, 626, 625, 624, 623, 622, 621, - 620, 619, 615, 614, 613, 612, 611, 610, 609, 608, + 144, 144, 90, 90, 705, 90, 157, 157, 157, 157, + 157, 227, 227, 295, 295, 368, 368, 90, 90, 704, + 703, 702, 701, 700, 699, 698, 697, 696, 695, 694, + 693, 692, 691, 690, 689, 688, 687, 686, 685, 684, + 683, 682, 681, 680, 679, 678, 677, 676, 675, 674, + 673, 672, 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, 636, 635, 634, 633, 632, + 631, 630, 629, 628, 627, 626, 625, 624, 620, 619, - 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, 572, 571, 570, 569, 568, 567, 566, - 565, 564, 563, 562, 561, 560, 559, 558, 557, 556, - 555, 554, 553, 552, 551, 550, 549, 548, 547, 546, - 545, 544, 543, 542, 541, 540, 539, 538, 537, 534, - 531, 530, 529, 528, 527, 526, 525, 524, 523, 522, - 521, 520, 519, 518, 517, 516, 515, 514, 513, 512, - 511, 510, 509, 508, 507, 506, 505, 504, 503, 502, + 618, 617, 616, 615, 614, 613, 612, 611, 610, 609, + 608, 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, + 576, 575, 574, 573, 572, 571, 570, 569, 568, 567, + 566, 565, 564, 563, 562, 561, 560, 559, 558, 557, + 556, 555, 554, 553, 552, 551, 550, 549, 548, 547, + 546, 545, 544, 543, 542, 541, 540, 537, 534, 533, + 532, 531, 530, 529, 528, 527, 526, 525, 524, 523, + 522, 521, 520, 519, 518, 517, 516, 515, 514, 513, - 501, 500, 499, 498, 497, 496, 495, 494, 493, 492, - 489, 488, 487, 486, 485, 484, 483, 482, 479, 478, - 477, 476, 475, 474, 473, 472, 471, 470, 469, 468, - 467, 464, 463, 462, 461, 460, 459, 458, 457, 456, - 455, 454, 453, 452, 451, 450, 449, 448, 447, 446, - 445, 444, 443, 442, 441, 440, 439, 438, 437, 436, - 435, 434, 433, 432, 431, 430, 429, 428, 427, 426, - 425, 424, 423, 422, 421, 420, 419, 418, 417, 416, - 415, 414, 413, 412, 411, 410, 409, 408, 407, 406, - 405, 404, 403, 402, 401, 400, 399, 398, 397, 396, + 512, 511, 510, 509, 508, 507, 506, 505, 504, 503, + 502, 501, 500, 499, 498, 497, 496, 495, 492, 491, + 490, 489, 488, 487, 486, 485, 484, 481, 480, 479, + 478, 477, 476, 475, 474, 473, 472, 471, 470, 469, + 466, 465, 464, 463, 462, 461, 460, 459, 458, 457, + 456, 455, 454, 453, 452, 451, 450, 449, 448, 447, + 446, 445, 444, 443, 442, 441, 440, 439, 438, 437, + 436, 435, 434, 433, 432, 431, 430, 429, 428, 427, + 426, 425, 424, 423, 422, 421, 420, 419, 418, 417, + 416, 415, 414, 413, 412, 411, 410, 409, 408, 407, - 395, 394, 393, 392, 391, 390, 389, 388, 387, 386, - 385, 384, 381, 380, 379, 378, 377, 376, 375, 374, - 373, 372, 371, 370, 369, 368, 366, 365, 364, 363, - 362, 361, 360, 359, 358, 357, 356, 355, 354, 353, - 352, 351, 350, 349, 348, 347, 344, 343, 342, 341, - 340, 339, 338, 337, 336, 335, 334, 333, 332, 331, - 330, 329, 328, 327, 322, 321, 320, 319, 318, 317, - 316, 315, 312, 311, 310, 309, 308, 307, 306, 305, - 304, 303, 301, 294, 291, 290, 289, 288, 287, 286, - 285, 284, 283, 282, 281, 280, 279, 278, 277, 274, + 406, 405, 404, 403, 402, 401, 400, 399, 398, 397, + 396, 395, 394, 393, 392, 391, 390, 389, 388, 387, + 386, 385, 382, 381, 380, 379, 378, 377, 376, 375, + 374, 373, 372, 371, 370, 369, 367, 366, 363, 362, + 361, 360, 359, 358, 357, 356, 355, 354, 353, 352, + 351, 350, 349, 348, 347, 344, 343, 342, 341, 340, + 339, 338, 337, 336, 335, 334, 333, 332, 331, 330, + 329, 328, 327, 322, 321, 320, 319, 318, 317, 316, + 315, 312, 311, 310, 309, 308, 307, 306, 305, 304, + 303, 301, 294, 291, 290, 289, 288, 287, 286, 285, - 273, 272, 271, 270, 269, 268, 267, 266, 265, 264, - 263, 262, 261, 260, 259, 258, 257, 256, 255, 254, - 253, 252, 251, 250, 249, 248, 247, 246, 245, 244, - 243, 242, 241, 240, 239, 238, 237, 236, 235, 234, - 233, 232, 158, 230, 229, 228, 226, 219, 218, 217, - 216, 215, 214, 213, 212, 211, 210, 199, 198, 195, - 194, 193, 192, 189, 188, 187, 186, 185, 184, 181, - 180, 176, 175, 172, 171, 170, 167, 166, 163, 162, - 161, 160, 158, 156, 155, 154, 153, 152, 151, 143, - 123, 112, 100, 99, 95, 94, 93, 43, 89, 87, + 284, 283, 282, 281, 280, 279, 278, 277, 274, 273, + 272, 271, 270, 269, 268, 267, 266, 265, 264, 263, + 262, 261, 260, 259, 258, 257, 256, 255, 254, 253, + 252, 251, 250, 249, 248, 247, 246, 245, 244, 243, + 242, 241, 240, 239, 238, 237, 236, 235, 234, 233, + 232, 158, 230, 229, 228, 226, 219, 218, 217, 216, + 215, 214, 213, 212, 211, 210, 199, 198, 195, 194, + 193, 192, 189, 188, 187, 186, 185, 184, 181, 180, + 176, 175, 172, 171, 170, 167, 166, 163, 162, 161, + 160, 158, 156, 155, 154, 153, 152, 151, 143, 123, - 86, 77, 43, 900, 11, 900, 900, 900, 900, 900, - 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, - 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, - 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, - 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, - 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, - 900, 900, 900, 900, 900 + 112, 100, 99, 95, 94, 93, 43, 89, 87, 86, + 77, 43, 909, 11, 909, 909, 909, 909, 909, 909, + 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, + 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, + 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, + 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, + 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, + 909, 909, 909, 909 } ; -static yyconst flex_int16_t yy_chk[1266] = +static yyconst flex_int16_t yy_chk[1275] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -988,8 +992,8 @@ static yyconst flex_int16_t yy_chk[1266] = 27, 5, 21, 28, 5, 25, 5, 25, 5, 26, 25, 25, 25, 31, 5, 5, 7, 9, 5, 10, - 8, 37, 5, 37, 26, 479, 28, 5, 31, 42, - 479, 42, 670, 5, 5, 15, 15, 15, 15, 15, + 8, 37, 5, 37, 26, 290, 28, 5, 31, 42, + 290, 42, 669, 5, 5, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, @@ -1005,116 +1009,117 @@ static yyconst flex_int16_t yy_chk[1266] = 45, 57, 61, 45, 62, 64, 61, 80, 62, 64, 270, 116, 50, 45, 45, 45, 45, 45, 45, 50, 45, 45, 85, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 59, 59, 408, 63, 59, 81, 50, - 63, 65, 59, 50, 66, 85, 672, 50, 66, 63, + 45, 45, 45, 59, 59, 409, 63, 59, 81, 50, + 63, 65, 59, 50, 66, 85, 673, 50, 66, 63, 65, 65, 67, 90, 50, 65, 270, 50, 81, 50, - 50, 67, 66, 110, 408, 67, 70, 70, 70, 71, + 50, 67, 66, 110, 409, 67, 70, 70, 70, 71, 123, 71, 71, 71, 123, 674, 70, 72, 110, 72, - 90, 71, 72, 72, 72, 676, 73, 83, 73, 73, + 90, 71, 72, 72, 72, 675, 73, 83, 73, 73, 73, 84, 70, 74, 74, 74, 131, 71, 73, 78, 78, 78, 131, 74, 79, 79, 79, 83, 103, 113, 145, 84, 113, 204, 73, 113, 204, 103, 147, 74, 98, 98, 98, 128, 128, 150, 148, 98, 98, 98, 98, 98, 133, 145, 147, 146, 133, 149, 132, 132, 132, 150, 98, 98, 98, 98, 98, 98, 132, 148, - 132, 313, 477, 477, 132, 146, 220, 149, 159, 159, + 132, 313, 479, 479, 132, 146, 220, 149, 159, 159, 159, 223, 229, 229, 313, 159, 159, 159, 159, 159, - 229, 242, 220, 251, 618, 242, 677, 223, 251, 618, - 159, 159, 159, 159, 159, 159, 231, 231, 231, 425, - 678, 679, 680, 231, 231, 231, 231, 231, 425, 435, - 520, 682, 566, 683, 520, 435, 684, 566, 231, 231, - 231, 231, 231, 231, 681, 251, 685, 686, 687, 251, - 302, 302, 302, 688, 689, 690, 691, 302, 302, 302, - 302, 302, 692, 693, 694, 696, 697, 698, 699, 700, - 701, 702, 302, 302, 302, 302, 302, 302, 566, 703, - 704, 705, 706, 707, 708, 681, 711, 712, 689, 713, + 229, 242, 220, 251, 481, 242, 676, 223, 251, 481, + 159, 159, 159, 159, 159, 159, 231, 231, 231, 426, + 677, 678, 680, 231, 231, 231, 231, 231, 426, 437, + 523, 623, 570, 682, 523, 437, 623, 570, 231, 231, + 231, 231, 231, 231, 683, 251, 684, 685, 686, 251, + 302, 302, 302, 687, 688, 689, 690, 302, 302, 302, + 302, 302, 691, 692, 693, 694, 695, 696, 697, 698, + 699, 700, 302, 302, 302, 302, 302, 302, 570, 701, + 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, - 714, 708, 715, 717, 718, 719, 722, 723, 724, 725, - 727, 728, 729, 724, 730, 732, 733, 734, 735, 736, - 737, 738, 739, 741, 742, 744, 745, 746, 747, 750, - 752, 754, 755, 756, 758, 759, 760, 761, 762, 763, - 764, 766, 767, 768, 769, 770, 771, 772, 773, 774, - 775, 776, 777, 778, 779, 780, 781, 782, 783, 787, - 788, 790, 791, 792, 793, 794, 796, 798, 799, 800, - 802, 803, 804, 805, 807, 808, 809, 810, 811, 812, - 814, 815, 817, 818, 819, 820, 822, 824, 826, 827, - 828, 829, 830, 831, 833, 835, 836, 837, 838, 839, + 713, 714, 715, 718, 687, 719, 720, 721, 722, 715, + 724, 696, 725, 726, 729, 730, 731, 732, 733, 735, + 736, 737, 732, 738, 740, 741, 742, 743, 744, 745, + 746, 747, 749, 750, 752, 753, 754, 755, 758, 760, + 762, 763, 765, 767, 768, 769, 770, 771, 772, 773, + 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 796, 797, + 799, 800, 801, 802, 803, 805, 807, 808, 809, 811, + 812, 813, 814, 816, 817, 818, 819, 820, 821, 823, + 824, 826, 827, 828, 829, 831, 833, 835, 836, 837, - 840, 842, 843, 844, 845, 846, 847, 848, 849, 851, - 852, 853, 854, 855, 857, 858, 859, 860, 861, 862, - 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, - 873, 874, 875, 876, 877, 878, 879, 880, 881, 885, - 886, 887, 889, 890, 891, 892, 893, 894, 895, 897, - 898, 901, 901, 901, 901, 901, 901, 901, 902, 669, - 902, 902, 902, 902, 902, 903, 668, 903, 667, 903, - 903, 903, 904, 904, 904, 904, 904, 904, 904, 905, - 905, 905, 905, 905, 905, 905, 906, 665, 906, 906, - 906, 906, 906, 907, 907, 663, 907, 908, 908, 908, + 838, 839, 840, 842, 844, 845, 846, 847, 848, 849, + 851, 852, 853, 854, 855, 856, 857, 858, 860, 861, + 862, 863, 864, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 894, 895, + 896, 898, 899, 900, 901, 902, 903, 904, 906, 907, + 910, 910, 910, 910, 910, 910, 910, 911, 666, 911, + 911, 911, 911, 911, 912, 665, 912, 664, 912, 912, + 912, 913, 913, 913, 913, 913, 913, 913, 914, 914, + 914, 914, 914, 914, 914, 915, 663, 915, 915, 915, - 908, 908, 909, 909, 910, 910, 911, 911, 912, 912, - 660, 659, 658, 657, 656, 655, 654, 653, 652, 651, - 650, 649, 646, 645, 643, 641, 640, 639, 638, 637, + 915, 915, 916, 916, 662, 916, 917, 917, 917, 917, + 917, 918, 918, 919, 919, 920, 920, 921, 921, 661, + 660, 659, 658, 657, 656, 655, 652, 651, 649, 647, + 646, 645, 644, 643, 642, 640, 639, 638, 637, 636, 635, 634, 633, 632, 631, 630, 629, 628, 627, 626, - 625, 624, 623, 622, 621, 620, 619, 617, 615, 614, - 613, 612, 611, 610, 609, 608, 607, 606, 605, 604, - 603, 601, 600, 599, 598, 596, 595, 594, 593, 592, - 591, 590, 589, 588, 586, 585, 584, 583, 582, 581, - 580, 578, 576, 575, 574, 573, 572, 571, 570, 569, - 568, 567, 565, 564, 563, 561, 560, 559, 558, 557, + 625, 624, 622, 620, 619, 618, 617, 616, 615, 614, + 613, 612, 611, 610, 609, 608, 606, 605, 604, 603, + 601, 600, 599, 598, 597, 596, 595, 594, 593, 592, + 590, 589, 588, 587, 586, 585, 584, 582, 580, 579, + 578, 577, 576, 575, 574, 573, 572, 571, 569, 568, + 567, 565, 564, 563, 562, 561, 560, 559, 558, 557, 556, 555, 554, 553, 552, 551, 550, 549, 548, 547, - 546, 545, 544, 543, 541, 540, 539, 538, 536, 535, - 534, 533, 532, 531, 530, 529, 528, 527, 526, 525, - 523, 522, 521, 519, 518, 517, 514, 513, 512, 511, + 545, 544, 543, 542, 541, 539, 538, 537, 536, 535, + 534, 533, 532, 531, 530, 529, 528, 526, 525, 524, + 522, 521, 520, 517, 516, 515, 514, 513, 512, 511, 510, 509, 508, 507, 506, 505, 504, 503, 502, 501, 500, 499, 498, 497, 496, 495, 494, 493, 492, 491, - 490, 489, 488, 486, 485, 484, 483, 482, 481, 478, - 476, 475, 474, 473, 472, 471, 470, 469, 468, 467, - 466, 464, 463, 462, 461, 460, 459, 458, 457, 456, - 455, 454, 453, 452, 451, 450, 449, 448, 447, 446, + 489, 488, 487, 486, 485, 484, 483, 480, 478, 477, + 476, 475, 474, 473, 472, 471, 470, 469, 468, 466, + 465, 464, 463, 462, 461, 460, 459, 458, 457, 456, - 445, 444, 443, 442, 441, 440, 439, 438, 437, 436, - 434, 433, 432, 431, 430, 429, 427, 426, 423, 422, - 421, 420, 419, 417, 416, 415, 414, 413, 411, 410, - 409, 407, 406, 405, 404, 403, 402, 401, 400, 399, - 398, 397, 396, 394, 393, 392, 391, 390, 389, 388, + 455, 454, 453, 452, 451, 450, 449, 448, 447, 446, + 445, 444, 443, 442, 441, 440, 439, 438, 436, 435, + 434, 433, 432, 431, 429, 428, 427, 424, 423, 422, + 421, 420, 418, 417, 416, 415, 414, 412, 411, 410, + 408, 407, 406, 405, 404, 403, 402, 401, 400, 399, + 398, 397, 395, 394, 393, 392, 391, 390, 389, 388, 387, 386, 385, 384, 383, 382, 381, 380, 379, 378, - 377, 376, 375, 373, 372, 369, 368, 366, 365, 363, + 377, 376, 374, 373, 370, 369, 367, 366, 365, 363, 359, 358, 357, 356, 355, 354, 353, 352, 351, 350, 349, 348, 347, 346, 344, 343, 342, 341, 340, 339, - 337, 336, 335, 334, 333, 332, 331, 330, 329, 328, + 337, 336, 335, 334, 333, 332, 331, 330, 329, 328, 327, 326, 325, 324, 322, 321, 320, 319, 318, 317, 316, 314, 312, 311, 309, 308, 306, 305, 304, 303, - 301, 300, 299, 298, 297, 296, 294, 291, 290, 289, - 287, 286, 285, 284, 283, 282, 281, 280, 279, 278, - 277, 276, 275, 274, 273, 271, 269, 268, 267, 266, - 265, 264, 263, 262, 261, 260, 259, 258, 257, 256, - 255, 254, 253, 252, 250, 249, 248, 247, 246, 245, - 244, 243, 241, 240, 239, 238, 237, 236, 235, 234, - 233, 232, 230, 226, 219, 218, 217, 216, 215, 214, - 213, 212, 211, 210, 209, 208, 207, 206, 205, 203, + 301, 300, 299, 298, 297, 296, 294, 291, 289, 287, + 286, 285, 284, 283, 282, 281, 280, 279, 278, 277, + 276, 275, 274, 273, 271, 269, 268, 267, 266, 265, + 264, 263, 262, 261, 260, 259, 258, 257, 256, 255, + 254, 253, 252, 250, 249, 248, 247, 246, 245, 244, + 243, 241, 240, 239, 238, 237, 236, 235, 234, 233, + 232, 230, 226, 219, 218, 217, 216, 215, 214, 213, - 202, 201, 200, 199, 198, 197, 196, 195, 194, 193, - 192, 191, 190, 189, 188, 187, 186, 185, 184, 183, - 181, 180, 179, 178, 177, 176, 175, 174, 173, 172, - 171, 170, 169, 168, 167, 166, 165, 164, 163, 162, - 161, 160, 157, 156, 155, 154, 151, 143, 142, 141, - 140, 139, 138, 137, 136, 135, 134, 130, 129, 127, - 126, 125, 124, 122, 121, 120, 119, 118, 117, 115, - 114, 112, 111, 109, 108, 107, 105, 104, 102, 101, - 100, 99, 96, 95, 94, 93, 92, 88, 87, 68, - 60, 56, 52, 51, 49, 48, 47, 43, 41, 39, + 212, 211, 210, 209, 208, 207, 206, 205, 203, 202, + 201, 200, 199, 198, 197, 196, 195, 194, 193, 192, + 191, 190, 189, 188, 187, 186, 185, 184, 183, 181, + 180, 179, 178, 177, 176, 175, 174, 173, 172, 171, + 170, 169, 168, 167, 166, 165, 164, 163, 162, 161, + 160, 157, 156, 155, 154, 151, 143, 142, 141, 140, + 139, 138, 137, 136, 135, 134, 130, 129, 127, 126, + 125, 124, 122, 121, 120, 119, 118, 117, 115, 114, + 112, 111, 109, 108, 107, 105, 104, 102, 101, 100, + 99, 96, 95, 94, 93, 92, 88, 87, 68, 60, - 38, 24, 14, 11, 900, 900, 900, 900, 900, 900, - 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, - 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, - 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, - 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, - 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, - 900, 900, 900, 900, 900 + 56, 52, 51, 49, 48, 47, 43, 41, 39, 38, + 24, 14, 11, 909, 909, 909, 909, 909, 909, 909, + 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, + 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, + 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, + 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, + 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, + 909, 909, 909, 909 } ; static yy_state_type yy_last_accepting_state; @@ -1123,21 +1128,21 @@ static char *yy_last_accepting_cpos; extern int parser4__flex_debug; int parser4__flex_debug = 1; -static yyconst flex_int16_t yy_rule_linenum[116] = +static yyconst flex_int16_t yy_rule_linenum[117] = { 0, 128, 130, 132, 137, 138, 143, 144, 145, 157, 160, 165, 172, 181, 190, 199, 208, 217, 226, 235, 244, 253, 265, 275, 285, 295, 306, 316, 326, 336, 346, 355, 364, 373, 387, 402, 411, 420, 429, 438, 447, - 456, 465, 474, 483, 493, 502, 511, 520, 529, 538, - 547, 556, 566, 576, 586, 595, 605, 615, 625, 635, - 644, 654, 663, 672, 681, 690, 699, 709, 719, 728, + 456, 465, 474, 483, 492, 502, 511, 520, 529, 538, + 547, 556, 565, 575, 585, 595, 604, 614, 624, 634, + 644, 653, 663, 672, 681, 690, 699, 708, 718, 728, 737, 746, 755, 764, 773, 782, 791, 800, 809, 818, 827, 836, 845, 854, 863, 872, 881, 890, 899, 908, - 917, 926, 935, 945, 955, 967, 978, 991, 1089, 1094, + 917, 926, 935, 944, 954, 964, 976, 987, 1000, 1098, - 1099, 1104, 1105, 1106, 1107, 1108, 1109, 1111, 1129, 1142, - 1147, 1151, 1153, 1155, 1157 + 1103, 1108, 1113, 1114, 1115, 1116, 1117, 1118, 1120, 1138, + 1151, 1156, 1160, 1162, 1164, 1166 } ; /* The intent behind this definition is that it'll catch @@ -1208,7 +1213,7 @@ unsigned int comment_start_line = 0; // by moving it ahead by parser4_leng bytes. parser4_leng specifies the length of the // currently matched token. #define YY_USER_ACTION driver.loc_.columns(parser4_leng); -#line 1212 "dhcp4_lexer.cc" +#line 1217 "dhcp4_lexer.cc" #define INITIAL 0 #define COMMENT 1 @@ -1532,7 +1537,7 @@ YY_DECL } -#line 1536 "dhcp4_lexer.cc" +#line 1541 "dhcp4_lexer.cc" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -1561,13 +1566,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 >= 901 ) + if ( yy_current_state >= 910 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c]; ++yy_cp; } - while ( yy_current_state != 900 ); + while ( yy_current_state != 909 ); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); @@ -1586,13 +1591,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 < 116 ) + else if ( yy_act < 117 ) fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n", (long)yy_rule_linenum[yy_act], parser4_text ); - else if ( yy_act == 116 ) + else if ( yy_act == 117 ) fprintf( stderr, "--accepting default rule (\"%s\")\n", parser4_text ); - else if ( yy_act == 117 ) + else if ( yy_act == 118 ) fprintf( stderr, "--(end of buffer or a NUL)\n" ); else fprintf( stderr, "--EOF (start condition %d)\n", YY_START ); @@ -2036,10 +2041,10 @@ YY_RULE_SETUP #line 429 "dhcp4_lexer.ll" { switch(driver.ctx_) { - case isc::dhcp::Parser4Context::SUBNET4: - return isc::dhcp::Dhcp4Parser::make_SUBNET(driver.loc_); + case isc::dhcp::Parser4Context::POOLS: + return isc::dhcp::Dhcp4Parser::make_USER_CONTEXT(driver.loc_); default: - return isc::dhcp::Dhcp4Parser::make_STRING("subnet", driver.loc_); + return isc::dhcp::Dhcp4Parser::make_STRING("user-context", driver.loc_); } } YY_BREAK @@ -2049,9 +2054,9 @@ YY_RULE_SETUP { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: - return isc::dhcp::Dhcp4Parser::make_INTERFACE(driver.loc_); + return isc::dhcp::Dhcp4Parser::make_SUBNET(driver.loc_); default: - return isc::dhcp::Dhcp4Parser::make_STRING("interface", driver.loc_); + return isc::dhcp::Dhcp4Parser::make_STRING("subnet", driver.loc_); } } YY_BREAK @@ -2061,9 +2066,9 @@ YY_RULE_SETUP { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: - return isc::dhcp::Dhcp4Parser::make_INTERFACE_ID(driver.loc_); + return isc::dhcp::Dhcp4Parser::make_INTERFACE(driver.loc_); default: - return isc::dhcp::Dhcp4Parser::make_STRING("interface-id", driver.loc_); + return isc::dhcp::Dhcp4Parser::make_STRING("interface", driver.loc_); } } YY_BREAK @@ -2073,9 +2078,9 @@ YY_RULE_SETUP { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: - return isc::dhcp::Dhcp4Parser::make_ID(driver.loc_); + return isc::dhcp::Dhcp4Parser::make_INTERFACE_ID(driver.loc_); default: - return isc::dhcp::Dhcp4Parser::make_STRING("id", driver.loc_); + return isc::dhcp::Dhcp4Parser::make_STRING("interface-id", driver.loc_); } } YY_BREAK @@ -2085,9 +2090,9 @@ YY_RULE_SETUP { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: - return isc::dhcp::Dhcp4Parser::make_RAPID_COMMIT(driver.loc_); + return isc::dhcp::Dhcp4Parser::make_ID(driver.loc_); default: - return isc::dhcp::Dhcp4Parser::make_STRING("rapid-commit", driver.loc_); + return isc::dhcp::Dhcp4Parser::make_STRING("id", driver.loc_); } } YY_BREAK @@ -2097,15 +2102,27 @@ YY_RULE_SETUP { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: - return isc::dhcp::Dhcp4Parser::make_RESERVATION_MODE(driver.loc_); + return isc::dhcp::Dhcp4Parser::make_RAPID_COMMIT(driver.loc_); default: - return isc::dhcp::Dhcp4Parser::make_STRING("reservation-mode", driver.loc_); + return isc::dhcp::Dhcp4Parser::make_STRING("rapid-commit", driver.loc_); } } YY_BREAK case 44: YY_RULE_SETUP #line 483 "dhcp4_lexer.ll" +{ + switch(driver.ctx_) { + case isc::dhcp::Parser4Context::SUBNET4: + return isc::dhcp::Dhcp4Parser::make_RESERVATION_MODE(driver.loc_); + default: + return isc::dhcp::Dhcp4Parser::make_STRING("reservation-mode", driver.loc_); + } +} + YY_BREAK +case 45: +YY_RULE_SETUP +#line 492 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OPTION_DEF: @@ -2116,9 +2133,9 @@ YY_RULE_SETUP } } YY_BREAK -case 45: +case 46: YY_RULE_SETUP -#line 493 "dhcp4_lexer.ll" +#line 502 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -2128,9 +2145,9 @@ YY_RULE_SETUP } } YY_BREAK -case 46: +case 47: YY_RULE_SETUP -#line 502 "dhcp4_lexer.ll" +#line 511 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::CONFIG: @@ -2140,9 +2157,9 @@ YY_RULE_SETUP } } YY_BREAK -case 47: +case 48: YY_RULE_SETUP -#line 511 "dhcp4_lexer.ll" +#line 520 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LOGGING: @@ -2152,9 +2169,9 @@ YY_RULE_SETUP } } YY_BREAK -case 48: +case 49: YY_RULE_SETUP -#line 520 "dhcp4_lexer.ll" +#line 529 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LOGGERS: @@ -2164,9 +2181,9 @@ YY_RULE_SETUP } } YY_BREAK -case 49: +case 50: YY_RULE_SETUP -#line 529 "dhcp4_lexer.ll" +#line 538 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OUTPUT_OPTIONS: @@ -2176,9 +2193,9 @@ YY_RULE_SETUP } } YY_BREAK -case 50: +case 51: YY_RULE_SETUP -#line 538 "dhcp4_lexer.ll" +#line 547 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LOGGERS: @@ -2188,9 +2205,9 @@ YY_RULE_SETUP } } YY_BREAK -case 51: +case 52: YY_RULE_SETUP -#line 547 "dhcp4_lexer.ll" +#line 556 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::LOGGERS: @@ -2200,9 +2217,9 @@ YY_RULE_SETUP } } YY_BREAK -case 52: +case 53: YY_RULE_SETUP -#line 556 "dhcp4_lexer.ll" +#line 565 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -2213,9 +2230,9 @@ YY_RULE_SETUP } } YY_BREAK -case 53: +case 54: YY_RULE_SETUP -#line 566 "dhcp4_lexer.ll" +#line 575 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: @@ -2226,9 +2243,9 @@ YY_RULE_SETUP } } YY_BREAK -case 54: +case 55: YY_RULE_SETUP -#line 576 "dhcp4_lexer.ll" +#line 585 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::CLIENT_CLASSES: @@ -2239,9 +2256,9 @@ YY_RULE_SETUP } } YY_BREAK -case 55: +case 56: YY_RULE_SETUP -#line 586 "dhcp4_lexer.ll" +#line 595 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: @@ -2251,9 +2268,9 @@ YY_RULE_SETUP } } YY_BREAK -case 56: +case 57: YY_RULE_SETUP -#line 595 "dhcp4_lexer.ll" +#line 604 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS: @@ -2264,9 +2281,9 @@ YY_RULE_SETUP } } YY_BREAK -case 57: +case 58: YY_RULE_SETUP -#line 605 "dhcp4_lexer.ll" +#line 614 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS: @@ -2277,9 +2294,9 @@ YY_RULE_SETUP } } YY_BREAK -case 58: +case 59: YY_RULE_SETUP -#line 615 "dhcp4_lexer.ll" +#line 624 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS: @@ -2290,9 +2307,9 @@ YY_RULE_SETUP } } YY_BREAK -case 59: +case 60: YY_RULE_SETUP -#line 625 "dhcp4_lexer.ll" +#line 634 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS: @@ -2303,9 +2320,9 @@ YY_RULE_SETUP } } YY_BREAK -case 60: +case 61: YY_RULE_SETUP -#line 635 "dhcp4_lexer.ll" +#line 644 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::RESERVATIONS: @@ -2315,9 +2332,9 @@ YY_RULE_SETUP } } YY_BREAK -case 61: +case 62: YY_RULE_SETUP -#line 644 "dhcp4_lexer.ll" +#line 653 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OPTION_DEF: @@ -2328,9 +2345,9 @@ YY_RULE_SETUP } } YY_BREAK -case 62: +case 63: YY_RULE_SETUP -#line 654 "dhcp4_lexer.ll" +#line 663 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OPTION_DATA: @@ -2340,9 +2357,9 @@ YY_RULE_SETUP } } YY_BREAK -case 63: +case 64: YY_RULE_SETUP -#line 663 "dhcp4_lexer.ll" +#line 672 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OPTION_DEF: @@ -2352,9 +2369,9 @@ YY_RULE_SETUP } } YY_BREAK -case 64: +case 65: YY_RULE_SETUP -#line 672 "dhcp4_lexer.ll" +#line 681 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OPTION_DEF: @@ -2364,9 +2381,9 @@ YY_RULE_SETUP } } YY_BREAK -case 65: +case 66: YY_RULE_SETUP -#line 681 "dhcp4_lexer.ll" +#line 690 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::OPTION_DEF: @@ -2376,9 +2393,9 @@ YY_RULE_SETUP } } YY_BREAK -case 66: +case 67: YY_RULE_SETUP -#line 690 "dhcp4_lexer.ll" +#line 699 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: @@ -2388,9 +2405,9 @@ YY_RULE_SETUP } } YY_BREAK -case 67: +case 68: YY_RULE_SETUP -#line 699 "dhcp4_lexer.ll" +#line 708 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::RELAY: @@ -2401,9 +2418,9 @@ YY_RULE_SETUP } } YY_BREAK -case 68: +case 69: YY_RULE_SETUP -#line 709 "dhcp4_lexer.ll" +#line 718 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -2413,9 +2430,9 @@ YY_RULE_SETUP } } YY_BREAK -case 69: +case 70: YY_RULE_SETUP -#line 719 "dhcp4_lexer.ll" +#line 728 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::HOOKS_LIBRARIES: @@ -2425,9 +2442,9 @@ YY_RULE_SETUP } } YY_BREAK -case 70: +case 71: YY_RULE_SETUP -#line 728 "dhcp4_lexer.ll" +#line 737 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::HOOKS_LIBRARIES: @@ -2437,9 +2454,9 @@ YY_RULE_SETUP } } YY_BREAK -case 71: +case 72: YY_RULE_SETUP -#line 737 "dhcp4_lexer.ll" +#line 746 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -2449,9 +2466,9 @@ YY_RULE_SETUP } } YY_BREAK -case 72: +case 73: YY_RULE_SETUP -#line 746 "dhcp4_lexer.ll" +#line 755 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SERVER_ID: @@ -2461,9 +2478,9 @@ YY_RULE_SETUP } } YY_BREAK -case 73: +case 74: YY_RULE_SETUP -#line 755 "dhcp4_lexer.ll" +#line 764 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SERVER_ID: @@ -2473,9 +2490,9 @@ YY_RULE_SETUP } } YY_BREAK -case 74: +case 75: YY_RULE_SETUP -#line 764 "dhcp4_lexer.ll" +#line 773 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SERVER_ID: @@ -2485,9 +2502,9 @@ YY_RULE_SETUP } } YY_BREAK -case 75: +case 76: YY_RULE_SETUP -#line 773 "dhcp4_lexer.ll" +#line 782 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SERVER_ID: @@ -2497,9 +2514,9 @@ YY_RULE_SETUP } } YY_BREAK -case 76: +case 77: YY_RULE_SETUP -#line 782 "dhcp4_lexer.ll" +#line 791 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -2509,9 +2526,9 @@ YY_RULE_SETUP } } YY_BREAK -case 77: +case 78: YY_RULE_SETUP -#line 791 "dhcp4_lexer.ll" +#line 800 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING: @@ -2521,9 +2538,9 @@ YY_RULE_SETUP } } YY_BREAK -case 78: +case 79: YY_RULE_SETUP -#line 800 "dhcp4_lexer.ll" +#line 809 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING: @@ -2533,9 +2550,9 @@ YY_RULE_SETUP } } YY_BREAK -case 79: +case 80: YY_RULE_SETUP -#line 809 "dhcp4_lexer.ll" +#line 818 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING: @@ -2545,9 +2562,9 @@ YY_RULE_SETUP } } YY_BREAK -case 80: +case 81: YY_RULE_SETUP -#line 818 "dhcp4_lexer.ll" +#line 827 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING: @@ -2557,9 +2574,9 @@ YY_RULE_SETUP } } YY_BREAK -case 81: +case 82: YY_RULE_SETUP -#line 827 "dhcp4_lexer.ll" +#line 836 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING: @@ -2569,9 +2586,9 @@ YY_RULE_SETUP } } YY_BREAK -case 82: +case 83: YY_RULE_SETUP -#line 836 "dhcp4_lexer.ll" +#line 845 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::EXPIRED_LEASES_PROCESSING: @@ -2581,9 +2598,9 @@ YY_RULE_SETUP } } YY_BREAK -case 83: +case 84: YY_RULE_SETUP -#line 845 "dhcp4_lexer.ll" +#line 854 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -2593,9 +2610,9 @@ YY_RULE_SETUP } } YY_BREAK -case 84: +case 85: YY_RULE_SETUP -#line 854 "dhcp4_lexer.ll" +#line 863 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -2605,9 +2622,9 @@ YY_RULE_SETUP } } YY_BREAK -case 85: +case 86: YY_RULE_SETUP -#line 863 "dhcp4_lexer.ll" +#line 872 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::CONTROL_SOCKET: @@ -2617,9 +2634,9 @@ YY_RULE_SETUP } } YY_BREAK -case 86: +case 87: YY_RULE_SETUP -#line 872 "dhcp4_lexer.ll" +#line 881 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::CONTROL_SOCKET: @@ -2629,9 +2646,9 @@ YY_RULE_SETUP } } YY_BREAK -case 87: +case 88: YY_RULE_SETUP -#line 881 "dhcp4_lexer.ll" +#line 890 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -2641,9 +2658,9 @@ YY_RULE_SETUP } } YY_BREAK -case 88: +case 89: YY_RULE_SETUP -#line 890 "dhcp4_lexer.ll" +#line 899 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::CONFIG: @@ -2653,9 +2670,9 @@ YY_RULE_SETUP } } YY_BREAK -case 89: +case 90: YY_RULE_SETUP -#line 899 "dhcp4_lexer.ll" +#line 908 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::CONFIG: @@ -2665,9 +2682,9 @@ YY_RULE_SETUP } } YY_BREAK -case 90: +case 91: YY_RULE_SETUP -#line 908 "dhcp4_lexer.ll" +#line 917 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: @@ -2677,9 +2694,9 @@ YY_RULE_SETUP } } YY_BREAK -case 91: +case 92: YY_RULE_SETUP -#line 917 "dhcp4_lexer.ll" +#line 926 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: @@ -2689,9 +2706,9 @@ YY_RULE_SETUP } } YY_BREAK -case 92: +case 93: YY_RULE_SETUP -#line 926 "dhcp4_lexer.ll" +#line 935 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: @@ -2701,9 +2718,9 @@ YY_RULE_SETUP } } YY_BREAK -case 93: +case 94: YY_RULE_SETUP -#line 935 "dhcp4_lexer.ll" +#line 944 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -2714,9 +2731,9 @@ YY_RULE_SETUP } } YY_BREAK -case 94: +case 95: YY_RULE_SETUP -#line 945 "dhcp4_lexer.ll" +#line 954 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -2727,9 +2744,9 @@ YY_RULE_SETUP } } YY_BREAK -case 95: +case 96: YY_RULE_SETUP -#line 955 "dhcp4_lexer.ll" +#line 964 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::DHCP4: @@ -2742,9 +2759,9 @@ YY_RULE_SETUP } } YY_BREAK -case 96: +case 97: YY_RULE_SETUP -#line 967 "dhcp4_lexer.ll" +#line 976 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: @@ -2756,9 +2773,9 @@ YY_RULE_SETUP } } YY_BREAK -case 97: +case 98: YY_RULE_SETUP -#line 978 "dhcp4_lexer.ll" +#line 987 "dhcp4_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser4Context::SUBNET4: @@ -2770,9 +2787,9 @@ YY_RULE_SETUP } } YY_BREAK -case 98: +case 99: YY_RULE_SETUP -#line 991 "dhcp4_lexer.ll" +#line 1000 "dhcp4_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. @@ -2871,65 +2888,65 @@ YY_RULE_SETUP return isc::dhcp::Dhcp4Parser::make_STRING(decoded, driver.loc_); } YY_BREAK -case 99: -/* rule 99 can match eol */ +case 100: +/* rule 100 can match eol */ YY_RULE_SETUP -#line 1089 "dhcp4_lexer.ll" +#line 1098 "dhcp4_lexer.ll" { // Bad string with a forbidden control character inside driver.error(driver.loc_, "Invalid control in " + std::string(parser4_text)); } YY_BREAK -case 100: -/* rule 100 can match eol */ +case 101: +/* rule 101 can match eol */ YY_RULE_SETUP -#line 1094 "dhcp4_lexer.ll" +#line 1103 "dhcp4_lexer.ll" { // Bad string with a bad escape inside driver.error(driver.loc_, "Bad escape in " + std::string(parser4_text)); } YY_BREAK -case 101: +case 102: YY_RULE_SETUP -#line 1099 "dhcp4_lexer.ll" +#line 1108 "dhcp4_lexer.ll" { // Bad string with an open escape at the end driver.error(driver.loc_, "Overflow escape in " + std::string(parser4_text)); } YY_BREAK -case 102: -YY_RULE_SETUP -#line 1104 "dhcp4_lexer.ll" -{ return isc::dhcp::Dhcp4Parser::make_LSQUARE_BRACKET(driver.loc_); } - YY_BREAK case 103: YY_RULE_SETUP -#line 1105 "dhcp4_lexer.ll" -{ return isc::dhcp::Dhcp4Parser::make_RSQUARE_BRACKET(driver.loc_); } +#line 1113 "dhcp4_lexer.ll" +{ return isc::dhcp::Dhcp4Parser::make_LSQUARE_BRACKET(driver.loc_); } YY_BREAK case 104: YY_RULE_SETUP -#line 1106 "dhcp4_lexer.ll" -{ return isc::dhcp::Dhcp4Parser::make_LCURLY_BRACKET(driver.loc_); } +#line 1114 "dhcp4_lexer.ll" +{ return isc::dhcp::Dhcp4Parser::make_RSQUARE_BRACKET(driver.loc_); } YY_BREAK case 105: YY_RULE_SETUP -#line 1107 "dhcp4_lexer.ll" -{ return isc::dhcp::Dhcp4Parser::make_RCURLY_BRACKET(driver.loc_); } +#line 1115 "dhcp4_lexer.ll" +{ return isc::dhcp::Dhcp4Parser::make_LCURLY_BRACKET(driver.loc_); } YY_BREAK case 106: YY_RULE_SETUP -#line 1108 "dhcp4_lexer.ll" -{ return isc::dhcp::Dhcp4Parser::make_COMMA(driver.loc_); } +#line 1116 "dhcp4_lexer.ll" +{ return isc::dhcp::Dhcp4Parser::make_RCURLY_BRACKET(driver.loc_); } YY_BREAK case 107: YY_RULE_SETUP -#line 1109 "dhcp4_lexer.ll" -{ return isc::dhcp::Dhcp4Parser::make_COLON(driver.loc_); } +#line 1117 "dhcp4_lexer.ll" +{ return isc::dhcp::Dhcp4Parser::make_COMMA(driver.loc_); } YY_BREAK case 108: YY_RULE_SETUP -#line 1111 "dhcp4_lexer.ll" +#line 1118 "dhcp4_lexer.ll" +{ return isc::dhcp::Dhcp4Parser::make_COLON(driver.loc_); } + YY_BREAK +case 109: +YY_RULE_SETUP +#line 1120 "dhcp4_lexer.ll" { // An integer was found. std::string tmp(parser4_text); @@ -2948,9 +2965,9 @@ YY_RULE_SETUP return isc::dhcp::Dhcp4Parser::make_INTEGER(integer, driver.loc_); } YY_BREAK -case 109: +case 110: YY_RULE_SETUP -#line 1129 "dhcp4_lexer.ll" +#line 1138 "dhcp4_lexer.ll" { // A floating point was found. std::string tmp(parser4_text); @@ -2964,43 +2981,43 @@ YY_RULE_SETUP return isc::dhcp::Dhcp4Parser::make_FLOAT(fp, driver.loc_); } YY_BREAK -case 110: +case 111: YY_RULE_SETUP -#line 1142 "dhcp4_lexer.ll" +#line 1151 "dhcp4_lexer.ll" { string tmp(parser4_text); return isc::dhcp::Dhcp4Parser::make_BOOLEAN(tmp == "true", driver.loc_); } YY_BREAK -case 111: +case 112: YY_RULE_SETUP -#line 1147 "dhcp4_lexer.ll" +#line 1156 "dhcp4_lexer.ll" { return isc::dhcp::Dhcp4Parser::make_NULL_TYPE(driver.loc_); } YY_BREAK -case 112: -YY_RULE_SETUP -#line 1151 "dhcp4_lexer.ll" -driver.error (driver.loc_, "JSON true reserved keyword is lower case only"); - YY_BREAK case 113: YY_RULE_SETUP -#line 1153 "dhcp4_lexer.ll" -driver.error (driver.loc_, "JSON false reserved keyword is lower case only"); +#line 1160 "dhcp4_lexer.ll" +driver.error (driver.loc_, "JSON true reserved keyword is lower case only"); YY_BREAK case 114: YY_RULE_SETUP -#line 1155 "dhcp4_lexer.ll" -driver.error (driver.loc_, "JSON null reserved keyword is lower case only"); +#line 1162 "dhcp4_lexer.ll" +driver.error (driver.loc_, "JSON false reserved keyword is lower case only"); YY_BREAK case 115: YY_RULE_SETUP -#line 1157 "dhcp4_lexer.ll" +#line 1164 "dhcp4_lexer.ll" +driver.error (driver.loc_, "JSON null reserved keyword is lower case only"); + YY_BREAK +case 116: +YY_RULE_SETUP +#line 1166 "dhcp4_lexer.ll" driver.error (driver.loc_, "Invalid character: " + std::string(parser4_text)); YY_BREAK case YY_STATE_EOF(INITIAL): -#line 1159 "dhcp4_lexer.ll" +#line 1168 "dhcp4_lexer.ll" { if (driver.states_.empty()) { return isc::dhcp::Dhcp4Parser::make_END(driver.loc_); @@ -3024,12 +3041,12 @@ case YY_STATE_EOF(INITIAL): BEGIN(DIR_EXIT); } YY_BREAK -case 116: +case 117: YY_RULE_SETUP -#line 1182 "dhcp4_lexer.ll" +#line 1191 "dhcp4_lexer.ll" ECHO; YY_BREAK -#line 3033 "dhcp4_lexer.cc" +#line 3050 "dhcp4_lexer.cc" case YY_END_OF_BUFFER: { @@ -3346,7 +3363,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 >= 901 ) + if ( yy_current_state >= 910 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c]; @@ -3379,11 +3396,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 >= 901 ) + if ( yy_current_state >= 910 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c]; - yy_is_jam = (yy_current_state == 900); + yy_is_jam = (yy_current_state == 909); return yy_is_jam ? 0 : yy_current_state; } @@ -4132,7 +4149,7 @@ void parser4_free (void * ptr ) /* %ok-for-header */ -#line 1182 "dhcp4_lexer.ll" +#line 1191 "dhcp4_lexer.ll" diff --git a/src/bin/dhcp4/dhcp4_parser.cc b/src/bin/dhcp4/dhcp4_parser.cc index c8d7c9041e..0f26b846ea 100644 --- a/src/bin/dhcp4/dhcp4_parser.cc +++ b/src/bin/dhcp4/dhcp4_parser.cc @@ -253,24 +253,25 @@ namespace isc { namespace dhcp { { switch (that.type_get ()) { - case 122: // value - case 161: // socket_type + case 123: // value + case 127: // map_value + case 163: // socket_type value.move< ElementPtr > (that.value); break; - case 109: // "boolean" + case 110: // "boolean" value.move< bool > (that.value); break; - case 108: // "floating point" + case 109: // "floating point" value.move< double > (that.value); break; - case 107: // "integer" + case 108: // "integer" value.move< int64_t > (that.value); break; - case 106: // "constant string" + case 107: // "constant string" value.move< std::string > (that.value); break; @@ -289,24 +290,25 @@ namespace isc { namespace dhcp { state = that.state; switch (that.type_get ()) { - case 122: // value - case 161: // socket_type + case 123: // value + case 127: // map_value + case 163: // socket_type value.copy< ElementPtr > (that.value); break; - case 109: // "boolean" + case 110: // "boolean" value.copy< bool > (that.value); break; - case 108: // "floating point" + case 109: // "floating point" value.copy< double > (that.value); break; - case 107: // "integer" + case 108: // "integer" value.copy< int64_t > (that.value); break; - case 106: // "constant string" + case 107: // "constant string" value.copy< std::string > (that.value); break; @@ -346,46 +348,53 @@ namespace isc { namespace dhcp { << yysym.location << ": "; switch (yytype) { - case 106: // "constant string" + case 107: // "constant string" -#line 198 "dhcp4_parser.yy" // lalr1.cc:636 +#line 200 "dhcp4_parser.yy" // lalr1.cc:636 { yyoutput << yysym.value.template as< std::string > (); } -#line 354 "dhcp4_parser.cc" // lalr1.cc:636 +#line 356 "dhcp4_parser.cc" // lalr1.cc:636 break; - case 107: // "integer" + case 108: // "integer" -#line 198 "dhcp4_parser.yy" // lalr1.cc:636 +#line 200 "dhcp4_parser.yy" // lalr1.cc:636 { yyoutput << yysym.value.template as< int64_t > (); } -#line 361 "dhcp4_parser.cc" // lalr1.cc:636 +#line 363 "dhcp4_parser.cc" // lalr1.cc:636 break; - case 108: // "floating point" + case 109: // "floating point" -#line 198 "dhcp4_parser.yy" // lalr1.cc:636 +#line 200 "dhcp4_parser.yy" // lalr1.cc:636 { yyoutput << yysym.value.template as< double > (); } -#line 368 "dhcp4_parser.cc" // lalr1.cc:636 +#line 370 "dhcp4_parser.cc" // lalr1.cc:636 break; - case 109: // "boolean" + case 110: // "boolean" -#line 198 "dhcp4_parser.yy" // lalr1.cc:636 +#line 200 "dhcp4_parser.yy" // lalr1.cc:636 { yyoutput << yysym.value.template as< bool > (); } -#line 375 "dhcp4_parser.cc" // lalr1.cc:636 +#line 377 "dhcp4_parser.cc" // lalr1.cc:636 break; - case 122: // value + case 123: // value -#line 198 "dhcp4_parser.yy" // lalr1.cc:636 +#line 200 "dhcp4_parser.yy" // lalr1.cc:636 { yyoutput << yysym.value.template as< ElementPtr > (); } -#line 382 "dhcp4_parser.cc" // lalr1.cc:636 +#line 384 "dhcp4_parser.cc" // lalr1.cc:636 break; - case 161: // socket_type + case 127: // map_value -#line 198 "dhcp4_parser.yy" // lalr1.cc:636 +#line 200 "dhcp4_parser.yy" // lalr1.cc:636 { yyoutput << yysym.value.template as< ElementPtr > (); } -#line 389 "dhcp4_parser.cc" // lalr1.cc:636 +#line 391 "dhcp4_parser.cc" // lalr1.cc:636 + break; + + case 163: // socket_type + +#line 200 "dhcp4_parser.yy" // lalr1.cc:636 + { yyoutput << yysym.value.template as< ElementPtr > (); } +#line 398 "dhcp4_parser.cc" // lalr1.cc:636 break; @@ -585,24 +594,25 @@ namespace isc { namespace dhcp { when using variants. */ switch (yyr1_[yyn]) { - case 122: // value - case 161: // socket_type + case 123: // value + case 127: // map_value + case 163: // socket_type yylhs.value.build< ElementPtr > (); break; - case 109: // "boolean" + case 110: // "boolean" yylhs.value.build< bool > (); break; - case 108: // "floating point" + case 109: // "floating point" yylhs.value.build< double > (); break; - case 107: // "integer" + case 108: // "integer" yylhs.value.build< int64_t > (); break; - case 106: // "constant string" + case 107: // "constant string" yylhs.value.build< std::string > (); break; @@ -624,242 +634,248 @@ namespace isc { namespace dhcp { switch (yyn) { case 2: -#line 207 "dhcp4_parser.yy" // lalr1.cc:859 +#line 209 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.ctx_ = ctx.NO_KEYWORD; } -#line 630 "dhcp4_parser.cc" // lalr1.cc:859 +#line 640 "dhcp4_parser.cc" // lalr1.cc:859 break; case 4: -#line 208 "dhcp4_parser.yy" // lalr1.cc:859 +#line 210 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.ctx_ = ctx.CONFIG; } -#line 636 "dhcp4_parser.cc" // lalr1.cc:859 +#line 646 "dhcp4_parser.cc" // lalr1.cc:859 break; case 6: -#line 209 "dhcp4_parser.yy" // lalr1.cc:859 +#line 211 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.ctx_ = ctx.DHCP4; } -#line 642 "dhcp4_parser.cc" // lalr1.cc:859 +#line 652 "dhcp4_parser.cc" // lalr1.cc:859 break; case 8: -#line 210 "dhcp4_parser.yy" // lalr1.cc:859 +#line 212 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.ctx_ = ctx.INTERFACES_CONFIG; } -#line 648 "dhcp4_parser.cc" // lalr1.cc:859 +#line 658 "dhcp4_parser.cc" // lalr1.cc:859 break; case 10: -#line 211 "dhcp4_parser.yy" // lalr1.cc:859 +#line 213 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.ctx_ = ctx.SUBNET4; } -#line 654 "dhcp4_parser.cc" // lalr1.cc:859 +#line 664 "dhcp4_parser.cc" // lalr1.cc:859 break; case 12: -#line 212 "dhcp4_parser.yy" // lalr1.cc:859 +#line 214 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.ctx_ = ctx.POOLS; } -#line 660 "dhcp4_parser.cc" // lalr1.cc:859 +#line 670 "dhcp4_parser.cc" // lalr1.cc:859 break; case 14: -#line 213 "dhcp4_parser.yy" // lalr1.cc:859 +#line 215 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.ctx_ = ctx.RESERVATIONS; } -#line 666 "dhcp4_parser.cc" // lalr1.cc:859 +#line 676 "dhcp4_parser.cc" // lalr1.cc:859 break; case 16: -#line 214 "dhcp4_parser.yy" // lalr1.cc:859 +#line 216 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.ctx_ = ctx.OPTION_DEF; } -#line 672 "dhcp4_parser.cc" // lalr1.cc:859 +#line 682 "dhcp4_parser.cc" // lalr1.cc:859 break; case 18: -#line 215 "dhcp4_parser.yy" // lalr1.cc:859 +#line 217 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.ctx_ = ctx.OPTION_DATA; } -#line 678 "dhcp4_parser.cc" // lalr1.cc:859 +#line 688 "dhcp4_parser.cc" // lalr1.cc:859 break; case 20: -#line 216 "dhcp4_parser.yy" // lalr1.cc:859 +#line 218 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.ctx_ = ctx.HOOKS_LIBRARIES; } -#line 684 "dhcp4_parser.cc" // lalr1.cc:859 +#line 694 "dhcp4_parser.cc" // lalr1.cc:859 break; case 22: -#line 224 "dhcp4_parser.yy" // lalr1.cc:859 +#line 226 "dhcp4_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); } -#line 690 "dhcp4_parser.cc" // lalr1.cc:859 +#line 700 "dhcp4_parser.cc" // lalr1.cc:859 break; case 23: -#line 225 "dhcp4_parser.yy" // lalr1.cc:859 +#line 227 "dhcp4_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as< double > (), ctx.loc2pos(yystack_[0].location))); } -#line 696 "dhcp4_parser.cc" // lalr1.cc:859 +#line 706 "dhcp4_parser.cc" // lalr1.cc:859 break; case 24: -#line 226 "dhcp4_parser.yy" // lalr1.cc:859 +#line 228 "dhcp4_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); } -#line 702 "dhcp4_parser.cc" // lalr1.cc:859 +#line 712 "dhcp4_parser.cc" // lalr1.cc:859 break; case 25: -#line 227 "dhcp4_parser.yy" // lalr1.cc:859 +#line 229 "dhcp4_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); } -#line 708 "dhcp4_parser.cc" // lalr1.cc:859 +#line 718 "dhcp4_parser.cc" // lalr1.cc:859 break; case 26: -#line 228 "dhcp4_parser.yy" // lalr1.cc:859 +#line 230 "dhcp4_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); } -#line 714 "dhcp4_parser.cc" // lalr1.cc:859 +#line 724 "dhcp4_parser.cc" // lalr1.cc:859 break; case 27: -#line 229 "dhcp4_parser.yy" // lalr1.cc:859 +#line 231 "dhcp4_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } -#line 720 "dhcp4_parser.cc" // lalr1.cc:859 +#line 730 "dhcp4_parser.cc" // lalr1.cc:859 break; case 28: -#line 230 "dhcp4_parser.yy" // lalr1.cc:859 +#line 232 "dhcp4_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } -#line 726 "dhcp4_parser.cc" // lalr1.cc:859 +#line 736 "dhcp4_parser.cc" // lalr1.cc:859 break; case 29: -#line 233 "dhcp4_parser.yy" // lalr1.cc:859 +#line 235 "dhcp4_parser.yy" // lalr1.cc:859 { // Push back the JSON value on the stack ctx.stack_.push_back(yystack_[0].value.as< ElementPtr > ()); } -#line 735 "dhcp4_parser.cc" // lalr1.cc:859 +#line 745 "dhcp4_parser.cc" // lalr1.cc:859 break; case 30: -#line 238 "dhcp4_parser.yy" // lalr1.cc:859 +#line 240 "dhcp4_parser.yy" // lalr1.cc:859 { // 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 746 "dhcp4_parser.cc" // lalr1.cc:859 +#line 756 "dhcp4_parser.cc" // lalr1.cc:859 break; case 31: -#line 243 "dhcp4_parser.yy" // lalr1.cc:859 +#line 245 "dhcp4_parser.yy" // lalr1.cc:859 { // 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 756 "dhcp4_parser.cc" // lalr1.cc:859 +#line 766 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 34: -#line 254 "dhcp4_parser.yy" // lalr1.cc:859 - { - // map containing a single entry - ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ()); - } -#line 765 "dhcp4_parser.cc" // lalr1.cc:859 + case 32: +#line 251 "dhcp4_parser.yy" // lalr1.cc:859 + { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } +#line 772 "dhcp4_parser.cc" // lalr1.cc:859 break; case 35: #line 258 "dhcp4_parser.yy" // lalr1.cc:859 + { + // map containing a single entry + ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ()); + } +#line 781 "dhcp4_parser.cc" // lalr1.cc:859 + break; + + case 36: +#line 262 "dhcp4_parser.yy" // lalr1.cc:859 { // 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 > ()); } -#line 775 "dhcp4_parser.cc" // lalr1.cc:859 +#line 791 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 36: -#line 265 "dhcp4_parser.yy" // lalr1.cc:859 + case 37: +#line 269 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(l); } -#line 784 "dhcp4_parser.cc" // lalr1.cc:859 - break; - - case 37: -#line 268 "dhcp4_parser.yy" // lalr1.cc:859 - { - // list parsing complete. Put any sanity checking here -} -#line 792 "dhcp4_parser.cc" // lalr1.cc:859 - break; - - case 38: -#line 273 "dhcp4_parser.yy" // lalr1.cc:859 - { - // List parsing about to start -} #line 800 "dhcp4_parser.cc" // lalr1.cc:859 break; + case 38: +#line 272 "dhcp4_parser.yy" // lalr1.cc:859 + { + // list parsing complete. Put any sanity checking here +} +#line 808 "dhcp4_parser.cc" // lalr1.cc:859 + break; + case 39: -#line 275 "dhcp4_parser.yy" // lalr1.cc:859 +#line 277 "dhcp4_parser.yy" // lalr1.cc:859 + { + // List parsing about to start +} +#line 816 "dhcp4_parser.cc" // lalr1.cc:859 + break; + + case 40: +#line 279 "dhcp4_parser.yy" // lalr1.cc:859 { // list parsing complete. Put any sanity checking here //ctx.stack_.pop_back(); } -#line 809 "dhcp4_parser.cc" // lalr1.cc:859 - break; - - case 42: -#line 284 "dhcp4_parser.yy" // lalr1.cc:859 - { - // List consisting of a single element. - ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ()); - } -#line 818 "dhcp4_parser.cc" // lalr1.cc:859 +#line 825 "dhcp4_parser.cc" // lalr1.cc:859 break; case 43: #line 288 "dhcp4_parser.yy" // lalr1.cc:859 { - // List ending with , and a value. + // List consisting of a single element. ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ()); } -#line 827 "dhcp4_parser.cc" // lalr1.cc:859 +#line 834 "dhcp4_parser.cc" // lalr1.cc:859 break; case 44: -#line 299 "dhcp4_parser.yy" // lalr1.cc:859 +#line 292 "dhcp4_parser.yy" // lalr1.cc:859 + { + // List ending with , and a value. + ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ()); + } +#line 843 "dhcp4_parser.cc" // lalr1.cc:859 + break; + + case 45: +#line 303 "dhcp4_parser.yy" // lalr1.cc:859 { const std::string& where = ctx.contextName(); const std::string& keyword = yystack_[1].value.as< std::string > (); error(yystack_[1].location, "got unexpected keyword \"" + keyword + "\" in " + where + " map."); } -#line 838 "dhcp4_parser.cc" // lalr1.cc:859 +#line 854 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 45: -#line 309 "dhcp4_parser.yy" // lalr1.cc:859 + case 46: +#line 313 "dhcp4_parser.yy" // lalr1.cc:859 { // 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 849 "dhcp4_parser.cc" // lalr1.cc:859 +#line 865 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 46: -#line 314 "dhcp4_parser.yy" // lalr1.cc:859 + case 47: +#line 318 "dhcp4_parser.yy" // lalr1.cc:859 { // 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 859 "dhcp4_parser.cc" // lalr1.cc:859 +#line 875 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 54: -#line 333 "dhcp4_parser.yy" // lalr1.cc:859 + case 55: +#line 337 "dhcp4_parser.yy" // lalr1.cc:859 { // This code is executed when we're about to start parsing // the content of the map @@ -868,11 +884,11 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(m); ctx.enter(ctx.DHCP4); } -#line 872 "dhcp4_parser.cc" // lalr1.cc:859 +#line 888 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 55: -#line 340 "dhcp4_parser.yy" // lalr1.cc:859 + case 56: +#line 344 "dhcp4_parser.yy" // lalr1.cc:859 { // map parsing completed. If we ever want to do any wrap up // (maybe some sanity checking), this would be the best place @@ -880,578 +896,578 @@ namespace isc { namespace dhcp { ctx.stack_.pop_back(); ctx.leave(); } -#line 884 "dhcp4_parser.cc" // lalr1.cc:859 - break; - - case 56: -#line 350 "dhcp4_parser.yy" // lalr1.cc:859 - { - // Parse the Dhcp4 map - ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); - ctx.stack_.push_back(m); -} -#line 894 "dhcp4_parser.cc" // lalr1.cc:859 +#line 900 "dhcp4_parser.cc" // lalr1.cc:859 break; case 57: #line 354 "dhcp4_parser.yy" // lalr1.cc:859 { - // parsing completed + // Parse the Dhcp4 map + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.push_back(m); } -#line 902 "dhcp4_parser.cc" // lalr1.cc:859 +#line 910 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 82: -#line 388 "dhcp4_parser.yy" // lalr1.cc:859 + case 58: +#line 358 "dhcp4_parser.yy" // lalr1.cc:859 + { + // parsing completed +} +#line 918 "dhcp4_parser.cc" // lalr1.cc:859 + break; + + case 83: +#line 392 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("valid-lifetime", prf); } -#line 911 "dhcp4_parser.cc" // lalr1.cc:859 +#line 927 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 83: -#line 393 "dhcp4_parser.yy" // lalr1.cc:859 + case 84: +#line 397 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("renew-timer", prf); } -#line 920 "dhcp4_parser.cc" // lalr1.cc:859 +#line 936 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 84: -#line 398 "dhcp4_parser.yy" // lalr1.cc:859 + case 85: +#line 402 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("rebind-timer", prf); } -#line 929 "dhcp4_parser.cc" // lalr1.cc:859 +#line 945 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 85: -#line 403 "dhcp4_parser.yy" // lalr1.cc:859 + case 86: +#line 407 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr dpp(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("decline-probation-period", dpp); } -#line 938 "dhcp4_parser.cc" // lalr1.cc:859 +#line 954 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 86: -#line 408 "dhcp4_parser.yy" // lalr1.cc:859 + case 87: +#line 412 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr echo(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("echo-client-id", echo); } -#line 947 "dhcp4_parser.cc" // lalr1.cc:859 +#line 963 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 87: -#line 413 "dhcp4_parser.yy" // lalr1.cc:859 + case 88: +#line 417 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr match(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("match-client-id", match); } -#line 956 "dhcp4_parser.cc" // lalr1.cc:859 +#line 972 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 88: -#line 419 "dhcp4_parser.yy" // lalr1.cc:859 + case 89: +#line 423 "dhcp4_parser.yy" // lalr1.cc:859 { 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 967 "dhcp4_parser.cc" // lalr1.cc:859 +#line 983 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 89: -#line 424 "dhcp4_parser.yy" // lalr1.cc:859 + case 90: +#line 428 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 976 "dhcp4_parser.cc" // lalr1.cc:859 - break; - - case 94: -#line 437 "dhcp4_parser.yy" // lalr1.cc:859 - { - // Parse the interfaces-config map - ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); - ctx.stack_.push_back(m); -} -#line 986 "dhcp4_parser.cc" // lalr1.cc:859 +#line 992 "dhcp4_parser.cc" // lalr1.cc:859 break; case 95: #line 441 "dhcp4_parser.yy" // lalr1.cc:859 { - // parsing completed + // Parse the interfaces-config map + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.push_back(m); } -#line 994 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1002 "dhcp4_parser.cc" // lalr1.cc:859 break; case 96: #line 445 "dhcp4_parser.yy" // lalr1.cc:859 + { + // parsing completed +} +#line 1010 "dhcp4_parser.cc" // lalr1.cc:859 + break; + + case 97: +#line 449 "dhcp4_parser.yy" // lalr1.cc:859 { 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 1005 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1021 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 97: -#line 450 "dhcp4_parser.yy" // lalr1.cc:859 + case 98: +#line 454 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 1014 "dhcp4_parser.cc" // lalr1.cc:859 - break; - - case 98: -#line 455 "dhcp4_parser.yy" // lalr1.cc:859 - { - ctx.enter(ctx.DHCP_SOCKET_TYPE); -} -#line 1022 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1030 "dhcp4_parser.cc" // lalr1.cc:859 break; case 99: -#line 457 "dhcp4_parser.yy" // lalr1.cc:859 +#line 459 "dhcp4_parser.yy" // lalr1.cc:859 + { + ctx.enter(ctx.DHCP_SOCKET_TYPE); +} +#line 1038 "dhcp4_parser.cc" // lalr1.cc:859 + break; + + case 100: +#line 461 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("dhcp-socket-type", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); } -#line 1031 "dhcp4_parser.cc" // lalr1.cc:859 - break; - - case 100: -#line 462 "dhcp4_parser.yy" // lalr1.cc:859 - { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("raw", ctx.loc2pos(yystack_[0].location))); } -#line 1037 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1047 "dhcp4_parser.cc" // lalr1.cc:859 break; case 101: -#line 463 "dhcp4_parser.yy" // lalr1.cc:859 - { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("udp", ctx.loc2pos(yystack_[0].location))); } -#line 1043 "dhcp4_parser.cc" // lalr1.cc:859 +#line 466 "dhcp4_parser.yy" // lalr1.cc:859 + { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("raw", ctx.loc2pos(yystack_[0].location))); } +#line 1053 "dhcp4_parser.cc" // lalr1.cc:859 break; case 102: -#line 466 "dhcp4_parser.yy" // lalr1.cc:859 +#line 467 "dhcp4_parser.yy" // lalr1.cc:859 + { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("udp", ctx.loc2pos(yystack_[0].location))); } +#line 1059 "dhcp4_parser.cc" // lalr1.cc:859 + break; + + case 103: +#line 470 "dhcp4_parser.yy" // lalr1.cc:859 { 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 1054 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1070 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 103: -#line 471 "dhcp4_parser.yy" // lalr1.cc:859 + case 104: +#line 475 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 1063 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1079 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 104: -#line 476 "dhcp4_parser.yy" // lalr1.cc:859 + case 105: +#line 480 "dhcp4_parser.yy" // lalr1.cc:859 { 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 1074 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1090 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 105: -#line 481 "dhcp4_parser.yy" // lalr1.cc:859 + case 106: +#line 485 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 1083 "dhcp4_parser.cc" // lalr1.cc:859 - break; - - case 117: -#line 501 "dhcp4_parser.yy" // lalr1.cc:859 - { - ctx.enter(ctx.NO_KEYWORD); -} -#line 1091 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1099 "dhcp4_parser.cc" // lalr1.cc:859 break; case 118: -#line 503 "dhcp4_parser.yy" // lalr1.cc:859 +#line 505 "dhcp4_parser.yy" // lalr1.cc:859 + { + ctx.enter(ctx.NO_KEYWORD); +} +#line 1107 "dhcp4_parser.cc" // lalr1.cc:859 + break; + + case 119: +#line 507 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("type", prf); ctx.leave(); } -#line 1101 "dhcp4_parser.cc" // lalr1.cc:859 - break; - - case 119: -#line 509 "dhcp4_parser.yy" // lalr1.cc:859 - { - ctx.enter(ctx.NO_KEYWORD); -} -#line 1109 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1117 "dhcp4_parser.cc" // lalr1.cc:859 break; case 120: -#line 511 "dhcp4_parser.yy" // lalr1.cc:859 +#line 513 "dhcp4_parser.yy" // lalr1.cc:859 + { + ctx.enter(ctx.NO_KEYWORD); +} +#line 1125 "dhcp4_parser.cc" // lalr1.cc:859 + break; + + case 121: +#line 515 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr user(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("user", user); ctx.leave(); } -#line 1119 "dhcp4_parser.cc" // lalr1.cc:859 - break; - - case 121: -#line 517 "dhcp4_parser.yy" // lalr1.cc:859 - { - ctx.enter(ctx.NO_KEYWORD); -} -#line 1127 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1135 "dhcp4_parser.cc" // lalr1.cc:859 break; case 122: -#line 519 "dhcp4_parser.yy" // lalr1.cc:859 +#line 521 "dhcp4_parser.yy" // lalr1.cc:859 + { + ctx.enter(ctx.NO_KEYWORD); +} +#line 1143 "dhcp4_parser.cc" // lalr1.cc:859 + break; + + case 123: +#line 523 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr pwd(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("password", pwd); ctx.leave(); } -#line 1137 "dhcp4_parser.cc" // lalr1.cc:859 - break; - - case 123: -#line 525 "dhcp4_parser.yy" // lalr1.cc:859 - { - ctx.enter(ctx.NO_KEYWORD); -} -#line 1145 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1153 "dhcp4_parser.cc" // lalr1.cc:859 break; case 124: -#line 527 "dhcp4_parser.yy" // lalr1.cc:859 +#line 529 "dhcp4_parser.yy" // lalr1.cc:859 + { + ctx.enter(ctx.NO_KEYWORD); +} +#line 1161 "dhcp4_parser.cc" // lalr1.cc:859 + break; + + case 125: +#line 531 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr h(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("host", h); ctx.leave(); } -#line 1155 "dhcp4_parser.cc" // lalr1.cc:859 - break; - - case 125: -#line 533 "dhcp4_parser.yy" // lalr1.cc:859 - { - ctx.enter(ctx.NO_KEYWORD); -} -#line 1163 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1171 "dhcp4_parser.cc" // lalr1.cc:859 break; case 126: -#line 535 "dhcp4_parser.yy" // lalr1.cc:859 +#line 537 "dhcp4_parser.yy" // lalr1.cc:859 + { + ctx.enter(ctx.NO_KEYWORD); +} +#line 1179 "dhcp4_parser.cc" // lalr1.cc:859 + break; + + case 127: +#line 539 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("name", name); ctx.leave(); } -#line 1173 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1189 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 127: -#line 541 "dhcp4_parser.yy" // lalr1.cc:859 + case 128: +#line 545 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("persist", n); } -#line 1182 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1198 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 128: -#line 546 "dhcp4_parser.yy" // lalr1.cc:859 + case 129: +#line 550 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("lfc-interval", n); } -#line 1191 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1207 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 129: -#line 551 "dhcp4_parser.yy" // lalr1.cc:859 + case 130: +#line 555 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("readonly", n); } -#line 1200 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1216 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 130: -#line 556 "dhcp4_parser.yy" // lalr1.cc:859 + case 131: +#line 560 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(duid); } -#line 1209 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1225 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 131: -#line 561 "dhcp4_parser.yy" // lalr1.cc:859 + case 132: +#line 565 "dhcp4_parser.yy" // lalr1.cc:859 { 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 1220 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1236 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 132: -#line 566 "dhcp4_parser.yy" // lalr1.cc:859 + case 133: +#line 570 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 1229 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1245 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 139: -#line 581 "dhcp4_parser.yy" // lalr1.cc:859 + case 140: +#line 585 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(hwaddr); } -#line 1238 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1254 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 140: -#line 586 "dhcp4_parser.yy" // lalr1.cc:859 + case 141: +#line 590 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr circuit(new StringElement("circuit-id", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(circuit); } -#line 1247 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1263 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 141: -#line 591 "dhcp4_parser.yy" // lalr1.cc:859 + case 142: +#line 595 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr client(new StringElement("client-id", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(client); } -#line 1256 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1272 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 142: -#line 596 "dhcp4_parser.yy" // lalr1.cc:859 + case 143: +#line 600 "dhcp4_parser.yy" // lalr1.cc:859 { 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 1267 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1283 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 143: -#line 601 "dhcp4_parser.yy" // lalr1.cc:859 + case 144: +#line 605 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 1276 "dhcp4_parser.cc" // lalr1.cc:859 - break; - - case 148: -#line 614 "dhcp4_parser.yy" // lalr1.cc:859 - { - ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); - ctx.stack_.back()->add(m); - ctx.stack_.push_back(m); -} -#line 1286 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1292 "dhcp4_parser.cc" // lalr1.cc:859 break; case 149: #line 618 "dhcp4_parser.yy" // lalr1.cc:859 { - ctx.stack_.pop_back(); + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->add(m); + ctx.stack_.push_back(m); } -#line 1294 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1302 "dhcp4_parser.cc" // lalr1.cc:859 break; case 150: #line 622 "dhcp4_parser.yy" // lalr1.cc:859 { - // Parse the hooks-libraries list entry map - ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); - ctx.stack_.push_back(m); + ctx.stack_.pop_back(); } -#line 1304 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1310 "dhcp4_parser.cc" // lalr1.cc:859 break; case 151: #line 626 "dhcp4_parser.yy" // lalr1.cc:859 { - // parsing completed -} -#line 1312 "dhcp4_parser.cc" // lalr1.cc:859 - break; - - case 157: -#line 639 "dhcp4_parser.yy" // lalr1.cc:859 - { - ctx.enter(ctx.NO_KEYWORD); + // Parse the hooks-libraries list entry map + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.push_back(m); } #line 1320 "dhcp4_parser.cc" // lalr1.cc:859 break; + case 152: +#line 630 "dhcp4_parser.yy" // lalr1.cc:859 + { + // parsing completed +} +#line 1328 "dhcp4_parser.cc" // lalr1.cc:859 + break; + case 158: -#line 641 "dhcp4_parser.yy" // lalr1.cc:859 +#line 643 "dhcp4_parser.yy" // lalr1.cc:859 + { + ctx.enter(ctx.NO_KEYWORD); +} +#line 1336 "dhcp4_parser.cc" // lalr1.cc:859 + break; + + case 159: +#line 645 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr lib(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("library", lib); ctx.leave(); } -#line 1330 "dhcp4_parser.cc" // lalr1.cc:859 - break; - - case 159: -#line 647 "dhcp4_parser.yy" // lalr1.cc:859 - { - ctx.enter(ctx.NO_KEYWORD); -} -#line 1338 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1346 "dhcp4_parser.cc" // lalr1.cc:859 break; case 160: -#line 649 "dhcp4_parser.yy" // lalr1.cc:859 +#line 651 "dhcp4_parser.yy" // lalr1.cc:859 + { + ctx.enter(ctx.NO_KEYWORD); +} +#line 1354 "dhcp4_parser.cc" // lalr1.cc:859 + break; + + case 161: +#line 653 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("parameters", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); } -#line 1347 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1363 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 161: -#line 655 "dhcp4_parser.yy" // lalr1.cc:859 + case 162: +#line 659 "dhcp4_parser.yy" // lalr1.cc:859 { 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 1358 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1374 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 162: -#line 660 "dhcp4_parser.yy" // lalr1.cc:859 + case 163: +#line 664 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 1367 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1383 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 171: -#line 677 "dhcp4_parser.yy" // lalr1.cc:859 + case 172: +#line 681 "dhcp4_parser.yy" // lalr1.cc:859 { 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 1376 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1392 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 172: -#line 682 "dhcp4_parser.yy" // lalr1.cc:859 + case 173: +#line 686 "dhcp4_parser.yy" // lalr1.cc:859 { 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 1385 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1401 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 173: -#line 687 "dhcp4_parser.yy" // lalr1.cc:859 + case 174: +#line 691 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hold-reclaimed-time", value); } -#line 1394 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1410 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 174: -#line 692 "dhcp4_parser.yy" // lalr1.cc:859 + case 175: +#line 696 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-reclaim-leases", value); } -#line 1403 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1419 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 175: -#line 697 "dhcp4_parser.yy" // lalr1.cc:859 + case 176: +#line 701 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-reclaim-time", value); } -#line 1412 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1428 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 176: -#line 702 "dhcp4_parser.yy" // lalr1.cc:859 + case 177: +#line 706 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("unwarned-reclaim-cycles", value); } -#line 1421 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1437 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 177: -#line 710 "dhcp4_parser.yy" // lalr1.cc:859 + case 178: +#line 714 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("subnet4", l); ctx.stack_.push_back(l); ctx.enter(ctx.SUBNET4); } -#line 1432 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1448 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 178: -#line 715 "dhcp4_parser.yy" // lalr1.cc:859 + case 179: +#line 719 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 1441 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1457 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 183: -#line 735 "dhcp4_parser.yy" // lalr1.cc:859 + case 184: +#line 739 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 1451 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1467 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 184: -#line 739 "dhcp4_parser.yy" // lalr1.cc:859 + case 185: +#line 743 "dhcp4_parser.yy" // lalr1.cc:859 { // Once we reached this place, the subnet parsing is now complete. // If we want to, we can implement default values here. @@ -1470,1133 +1486,1150 @@ namespace isc { namespace dhcp { // } ctx.stack_.pop_back(); } -#line 1474 "dhcp4_parser.cc" // lalr1.cc:859 - break; - - case 185: -#line 758 "dhcp4_parser.yy" // lalr1.cc:859 - { - // Parse the subnet4 list entry map - ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); - ctx.stack_.push_back(m); -} -#line 1484 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1490 "dhcp4_parser.cc" // lalr1.cc:859 break; case 186: #line 762 "dhcp4_parser.yy" // lalr1.cc:859 { - // parsing completed -} -#line 1492 "dhcp4_parser.cc" // lalr1.cc:859 - break; - - case 209: -#line 794 "dhcp4_parser.yy" // lalr1.cc:859 - { - ctx.enter(ctx.NO_KEYWORD); + // Parse the subnet4 list entry map + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.push_back(m); } #line 1500 "dhcp4_parser.cc" // lalr1.cc:859 break; + case 187: +#line 766 "dhcp4_parser.yy" // lalr1.cc:859 + { + // parsing completed +} +#line 1508 "dhcp4_parser.cc" // lalr1.cc:859 + break; + case 210: -#line 796 "dhcp4_parser.yy" // lalr1.cc:859 +#line 798 "dhcp4_parser.yy" // lalr1.cc:859 + { + ctx.enter(ctx.NO_KEYWORD); +} +#line 1516 "dhcp4_parser.cc" // lalr1.cc:859 + break; + + case 211: +#line 800 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr subnet(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("subnet", subnet); ctx.leave(); } -#line 1510 "dhcp4_parser.cc" // lalr1.cc:859 - break; - - case 211: -#line 802 "dhcp4_parser.yy" // lalr1.cc:859 - { - ctx.enter(ctx.NO_KEYWORD); -} -#line 1518 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1526 "dhcp4_parser.cc" // lalr1.cc:859 break; case 212: -#line 804 "dhcp4_parser.yy" // lalr1.cc:859 +#line 806 "dhcp4_parser.yy" // lalr1.cc:859 + { + ctx.enter(ctx.NO_KEYWORD); +} +#line 1534 "dhcp4_parser.cc" // lalr1.cc:859 + break; + + case 213: +#line 808 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("4o6-interface", iface); ctx.leave(); } -#line 1528 "dhcp4_parser.cc" // lalr1.cc:859 - break; - - case 213: -#line 810 "dhcp4_parser.yy" // lalr1.cc:859 - { - ctx.enter(ctx.NO_KEYWORD); -} -#line 1536 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1544 "dhcp4_parser.cc" // lalr1.cc:859 break; case 214: -#line 812 "dhcp4_parser.yy" // lalr1.cc:859 +#line 814 "dhcp4_parser.yy" // lalr1.cc:859 + { + ctx.enter(ctx.NO_KEYWORD); +} +#line 1552 "dhcp4_parser.cc" // lalr1.cc:859 + break; + + case 215: +#line 816 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("4o6-interface-id", iface); ctx.leave(); } -#line 1546 "dhcp4_parser.cc" // lalr1.cc:859 - break; - - case 215: -#line 818 "dhcp4_parser.yy" // lalr1.cc:859 - { - ctx.enter(ctx.NO_KEYWORD); -} -#line 1554 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1562 "dhcp4_parser.cc" // lalr1.cc:859 break; case 216: -#line 820 "dhcp4_parser.yy" // lalr1.cc:859 +#line 822 "dhcp4_parser.yy" // lalr1.cc:859 + { + ctx.enter(ctx.NO_KEYWORD); +} +#line 1570 "dhcp4_parser.cc" // lalr1.cc:859 + break; + + case 217: +#line 824 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("4o6-subnet", iface); ctx.leave(); } -#line 1564 "dhcp4_parser.cc" // lalr1.cc:859 - break; - - case 217: -#line 826 "dhcp4_parser.yy" // lalr1.cc:859 - { - ctx.enter(ctx.NO_KEYWORD); -} -#line 1572 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1580 "dhcp4_parser.cc" // lalr1.cc:859 break; case 218: -#line 828 "dhcp4_parser.yy" // lalr1.cc:859 +#line 830 "dhcp4_parser.yy" // lalr1.cc:859 + { + ctx.enter(ctx.NO_KEYWORD); +} +#line 1588 "dhcp4_parser.cc" // lalr1.cc:859 + break; + + case 219: +#line 832 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("interface", iface); ctx.leave(); } -#line 1582 "dhcp4_parser.cc" // lalr1.cc:859 - break; - - case 219: -#line 834 "dhcp4_parser.yy" // lalr1.cc:859 - { - ctx.enter(ctx.NO_KEYWORD); -} -#line 1590 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1598 "dhcp4_parser.cc" // lalr1.cc:859 break; case 220: -#line 836 "dhcp4_parser.yy" // lalr1.cc:859 +#line 838 "dhcp4_parser.yy" // lalr1.cc:859 + { + ctx.enter(ctx.NO_KEYWORD); +} +#line 1606 "dhcp4_parser.cc" // lalr1.cc:859 + break; + + case 221: +#line 840 "dhcp4_parser.yy" // lalr1.cc:859 { 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 1600 "dhcp4_parser.cc" // lalr1.cc:859 - break; - - case 221: -#line 842 "dhcp4_parser.yy" // lalr1.cc:859 - { - ctx.enter(ctx.CLIENT_CLASS); -} -#line 1608 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1616 "dhcp4_parser.cc" // lalr1.cc:859 break; case 222: -#line 844 "dhcp4_parser.yy" // lalr1.cc:859 +#line 846 "dhcp4_parser.yy" // lalr1.cc:859 + { + ctx.enter(ctx.CLIENT_CLASS); +} +#line 1624 "dhcp4_parser.cc" // lalr1.cc:859 + break; + + case 223: +#line 848 "dhcp4_parser.yy" // lalr1.cc:859 { 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 1618 "dhcp4_parser.cc" // lalr1.cc:859 - break; - - case 223: -#line 850 "dhcp4_parser.yy" // lalr1.cc:859 - { - ctx.enter(ctx.NO_KEYWORD); -} -#line 1626 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1634 "dhcp4_parser.cc" // lalr1.cc:859 break; case 224: -#line 852 "dhcp4_parser.yy" // lalr1.cc:859 +#line 854 "dhcp4_parser.yy" // lalr1.cc:859 + { + ctx.enter(ctx.NO_KEYWORD); +} +#line 1642 "dhcp4_parser.cc" // lalr1.cc:859 + break; + + case 225: +#line 856 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr rm(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("reservation-mode", rm); ctx.leave(); } -#line 1636 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1652 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 225: -#line 858 "dhcp4_parser.yy" // lalr1.cc:859 + case 226: +#line 862 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr id(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("id", id); } -#line 1645 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1661 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 226: -#line 863 "dhcp4_parser.yy" // lalr1.cc:859 + case 227: +#line 867 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr rc(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("rapid-commit", rc); } -#line 1654 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1670 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 227: -#line 872 "dhcp4_parser.yy" // lalr1.cc:859 + case 228: +#line 876 "dhcp4_parser.yy" // lalr1.cc:859 { 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 1665 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1681 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 228: -#line 877 "dhcp4_parser.yy" // lalr1.cc:859 + case 229: +#line 881 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 1674 "dhcp4_parser.cc" // lalr1.cc:859 - break; - - case 233: -#line 894 "dhcp4_parser.yy" // lalr1.cc:859 - { - ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); - ctx.stack_.back()->add(m); - ctx.stack_.push_back(m); -} -#line 1684 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1690 "dhcp4_parser.cc" // lalr1.cc:859 break; case 234: #line 898 "dhcp4_parser.yy" // lalr1.cc:859 { - ctx.stack_.pop_back(); + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->add(m); + ctx.stack_.push_back(m); } -#line 1692 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1700 "dhcp4_parser.cc" // lalr1.cc:859 break; case 235: -#line 905 "dhcp4_parser.yy" // lalr1.cc:859 +#line 902 "dhcp4_parser.yy" // lalr1.cc:859 { - // Parse the option-def list entry map - ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); - ctx.stack_.push_back(m); + ctx.stack_.pop_back(); } -#line 1702 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1708 "dhcp4_parser.cc" // lalr1.cc:859 break; case 236: #line 909 "dhcp4_parser.yy" // lalr1.cc:859 { - // parsing completed + // Parse the option-def list entry map + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.push_back(m); } -#line 1710 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1718 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 250: -#line 935 "dhcp4_parser.yy" // lalr1.cc:859 + case 237: +#line 913 "dhcp4_parser.yy" // lalr1.cc:859 + { + // parsing completed +} +#line 1726 "dhcp4_parser.cc" // lalr1.cc:859 + break; + + case 251: +#line 939 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr code(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("code", code); } -#line 1719 "dhcp4_parser.cc" // lalr1.cc:859 - break; - - case 253: -#line 944 "dhcp4_parser.yy" // lalr1.cc:859 - { - ctx.enter(ctx.NO_KEYWORD); -} -#line 1727 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1735 "dhcp4_parser.cc" // lalr1.cc:859 break; case 254: -#line 946 "dhcp4_parser.yy" // lalr1.cc:859 +#line 948 "dhcp4_parser.yy" // lalr1.cc:859 + { + ctx.enter(ctx.NO_KEYWORD); +} +#line 1743 "dhcp4_parser.cc" // lalr1.cc:859 + break; + + case 255: +#line 950 "dhcp4_parser.yy" // lalr1.cc:859 { 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 1737 "dhcp4_parser.cc" // lalr1.cc:859 - break; - - case 255: -#line 952 "dhcp4_parser.yy" // lalr1.cc:859 - { - ctx.enter(ctx.NO_KEYWORD); -} -#line 1745 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1753 "dhcp4_parser.cc" // lalr1.cc:859 break; case 256: -#line 954 "dhcp4_parser.yy" // lalr1.cc:859 +#line 956 "dhcp4_parser.yy" // lalr1.cc:859 + { + ctx.enter(ctx.NO_KEYWORD); +} +#line 1761 "dhcp4_parser.cc" // lalr1.cc:859 + break; + + case 257: +#line 958 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr space(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("space", space); ctx.leave(); } -#line 1755 "dhcp4_parser.cc" // lalr1.cc:859 - break; - - case 258: -#line 962 "dhcp4_parser.yy" // lalr1.cc:859 - { - ctx.enter(ctx.NO_KEYWORD); -} -#line 1763 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1771 "dhcp4_parser.cc" // lalr1.cc:859 break; case 259: -#line 964 "dhcp4_parser.yy" // lalr1.cc:859 +#line 966 "dhcp4_parser.yy" // lalr1.cc:859 + { + ctx.enter(ctx.NO_KEYWORD); +} +#line 1779 "dhcp4_parser.cc" // lalr1.cc:859 + break; + + case 260: +#line 968 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr encap(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("encapsulate", encap); ctx.leave(); } -#line 1773 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1789 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 260: -#line 970 "dhcp4_parser.yy" // lalr1.cc:859 + case 261: +#line 974 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr array(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("array", array); } -#line 1782 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1798 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 261: -#line 979 "dhcp4_parser.yy" // lalr1.cc:859 + case 262: +#line 983 "dhcp4_parser.yy" // lalr1.cc:859 { 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 1793 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1809 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 262: -#line 984 "dhcp4_parser.yy" // lalr1.cc:859 + case 263: +#line 988 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 1802 "dhcp4_parser.cc" // lalr1.cc:859 - break; - - case 267: -#line 1003 "dhcp4_parser.yy" // lalr1.cc:859 - { - ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); - ctx.stack_.back()->add(m); - ctx.stack_.push_back(m); -} -#line 1812 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1818 "dhcp4_parser.cc" // lalr1.cc:859 break; case 268: #line 1007 "dhcp4_parser.yy" // lalr1.cc:859 { - ctx.stack_.pop_back(); + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->add(m); + ctx.stack_.push_back(m); } -#line 1820 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1828 "dhcp4_parser.cc" // lalr1.cc:859 break; case 269: -#line 1014 "dhcp4_parser.yy" // lalr1.cc:859 +#line 1011 "dhcp4_parser.yy" // lalr1.cc:859 { - // Parse the option-data list entry map - ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); - ctx.stack_.push_back(m); + ctx.stack_.pop_back(); } -#line 1830 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1836 "dhcp4_parser.cc" // lalr1.cc:859 break; case 270: #line 1018 "dhcp4_parser.yy" // lalr1.cc:859 { - // parsing completed -} -#line 1838 "dhcp4_parser.cc" // lalr1.cc:859 - break; - - case 282: -#line 1047 "dhcp4_parser.yy" // lalr1.cc:859 - { - ctx.enter(ctx.NO_KEYWORD); + // Parse the option-data list entry map + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.push_back(m); } #line 1846 "dhcp4_parser.cc" // lalr1.cc:859 break; + case 271: +#line 1022 "dhcp4_parser.yy" // lalr1.cc:859 + { + // parsing completed +} +#line 1854 "dhcp4_parser.cc" // lalr1.cc:859 + break; + case 283: -#line 1049 "dhcp4_parser.yy" // lalr1.cc:859 +#line 1051 "dhcp4_parser.yy" // lalr1.cc:859 + { + ctx.enter(ctx.NO_KEYWORD); +} +#line 1862 "dhcp4_parser.cc" // lalr1.cc:859 + break; + + case 284: +#line 1053 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr data(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("data", data); ctx.leave(); } -#line 1856 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1872 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 286: -#line 1059 "dhcp4_parser.yy" // lalr1.cc:859 + case 287: +#line 1063 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr space(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("csv-format", space); } -#line 1865 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1881 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 287: -#line 1067 "dhcp4_parser.yy" // lalr1.cc:859 + case 288: +#line 1071 "dhcp4_parser.yy" // lalr1.cc:859 { 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 1876 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1892 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 288: -#line 1072 "dhcp4_parser.yy" // lalr1.cc:859 + case 289: +#line 1076 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 1885 "dhcp4_parser.cc" // lalr1.cc:859 - break; - - case 293: -#line 1087 "dhcp4_parser.yy" // lalr1.cc:859 - { - ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); - ctx.stack_.back()->add(m); - ctx.stack_.push_back(m); -} -#line 1895 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1901 "dhcp4_parser.cc" // lalr1.cc:859 break; case 294: #line 1091 "dhcp4_parser.yy" // lalr1.cc:859 { - ctx.stack_.pop_back(); + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->add(m); + ctx.stack_.push_back(m); } -#line 1903 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1911 "dhcp4_parser.cc" // lalr1.cc:859 break; case 295: #line 1095 "dhcp4_parser.yy" // lalr1.cc:859 { - // Parse the pool list entry map - ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); - ctx.stack_.push_back(m); + ctx.stack_.pop_back(); } -#line 1913 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1919 "dhcp4_parser.cc" // lalr1.cc:859 break; case 296: #line 1099 "dhcp4_parser.yy" // lalr1.cc:859 { - // parsing completed -} -#line 1921 "dhcp4_parser.cc" // lalr1.cc:859 - break; - - case 302: -#line 1112 "dhcp4_parser.yy" // lalr1.cc:859 - { - ctx.enter(ctx.NO_KEYWORD); + // Parse the pool list entry map + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.push_back(m); } #line 1929 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 303: -#line 1114 "dhcp4_parser.yy" // lalr1.cc:859 + case 297: +#line 1103 "dhcp4_parser.yy" // lalr1.cc:859 + { + // parsing completed +} +#line 1937 "dhcp4_parser.cc" // lalr1.cc:859 + break; + + case 304: +#line 1117 "dhcp4_parser.yy" // lalr1.cc:859 + { + ctx.enter(ctx.NO_KEYWORD); +} +#line 1945 "dhcp4_parser.cc" // lalr1.cc:859 + break; + + case 305: +#line 1119 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr pool(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("pool", pool); ctx.leave(); } -#line 1939 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1955 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 304: -#line 1123 "dhcp4_parser.yy" // lalr1.cc:859 + case 306: +#line 1125 "dhcp4_parser.yy" // lalr1.cc:859 + { + ctx.enter(ctx.NO_KEYWORD); +} +#line 1963 "dhcp4_parser.cc" // lalr1.cc:859 + break; + + case 307: +#line 1127 "dhcp4_parser.yy" // lalr1.cc:859 + { + ctx.stack_.back()->set("user-context", yystack_[0].value.as< ElementPtr > ()); + ctx.leave(); +} +#line 1972 "dhcp4_parser.cc" // lalr1.cc:859 + break; + + case 308: +#line 1135 "dhcp4_parser.yy" // lalr1.cc:859 { 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 1950 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1983 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 305: -#line 1128 "dhcp4_parser.yy" // lalr1.cc:859 + case 309: +#line 1140 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 1959 "dhcp4_parser.cc" // lalr1.cc:859 +#line 1992 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 310: -#line 1141 "dhcp4_parser.yy" // lalr1.cc:859 + case 314: +#line 1153 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 1969 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2002 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 311: -#line 1145 "dhcp4_parser.yy" // lalr1.cc:859 + case 315: +#line 1157 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); } -#line 1977 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2010 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 312: -#line 1149 "dhcp4_parser.yy" // lalr1.cc:859 + case 316: +#line 1161 "dhcp4_parser.yy" // lalr1.cc:859 { // Parse the reservations list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 1987 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2020 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 313: -#line 1153 "dhcp4_parser.yy" // lalr1.cc:859 + case 317: +#line 1165 "dhcp4_parser.yy" // lalr1.cc:859 { // parsing completed } -#line 1995 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2028 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 330: -#line 1180 "dhcp4_parser.yy" // lalr1.cc:859 + case 334: +#line 1192 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2003 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2036 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 331: -#line 1182 "dhcp4_parser.yy" // lalr1.cc:859 + case 335: +#line 1194 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr next_server(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("next-server", next_server); ctx.leave(); } -#line 2013 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2046 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 332: -#line 1188 "dhcp4_parser.yy" // lalr1.cc:859 + case 336: +#line 1200 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2021 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2054 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 333: -#line 1190 "dhcp4_parser.yy" // lalr1.cc:859 + case 337: +#line 1202 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr srv(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("server-hostname", srv); ctx.leave(); } -#line 2031 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2064 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 334: -#line 1196 "dhcp4_parser.yy" // lalr1.cc:859 + case 338: +#line 1208 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2039 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2072 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 335: -#line 1198 "dhcp4_parser.yy" // lalr1.cc:859 + case 339: +#line 1210 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr bootfile(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("boot-file-name", bootfile); ctx.leave(); } -#line 2049 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2082 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 336: -#line 1204 "dhcp4_parser.yy" // lalr1.cc:859 + case 340: +#line 1216 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2057 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2090 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 337: -#line 1206 "dhcp4_parser.yy" // lalr1.cc:859 + case 341: +#line 1218 "dhcp4_parser.yy" // lalr1.cc:859 { 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 2067 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2100 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 338: -#line 1212 "dhcp4_parser.yy" // lalr1.cc:859 + case 342: +#line 1224 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2075 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2108 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 339: -#line 1214 "dhcp4_parser.yy" // lalr1.cc:859 + case 343: +#line 1226 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr d(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("duid", d); ctx.leave(); } -#line 2085 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2118 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 340: -#line 1220 "dhcp4_parser.yy" // lalr1.cc:859 + case 344: +#line 1232 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2093 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2126 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 341: -#line 1222 "dhcp4_parser.yy" // lalr1.cc:859 + case 345: +#line 1234 "dhcp4_parser.yy" // lalr1.cc:859 { 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 2103 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2136 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 342: -#line 1228 "dhcp4_parser.yy" // lalr1.cc:859 + case 346: +#line 1240 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2111 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2144 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 343: -#line 1230 "dhcp4_parser.yy" // lalr1.cc:859 + case 347: +#line 1242 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("client-id", hw); ctx.leave(); } -#line 2121 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2154 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 344: -#line 1236 "dhcp4_parser.yy" // lalr1.cc:859 + case 348: +#line 1248 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2129 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2162 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 345: -#line 1238 "dhcp4_parser.yy" // lalr1.cc:859 + case 349: +#line 1250 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("circuit-id", hw); ctx.leave(); } -#line 2139 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2172 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 346: -#line 1245 "dhcp4_parser.yy" // lalr1.cc:859 + case 350: +#line 1257 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2147 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2180 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 347: -#line 1247 "dhcp4_parser.yy" // lalr1.cc:859 + case 351: +#line 1259 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr host(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hostname", host); ctx.leave(); } -#line 2157 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2190 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 348: -#line 1253 "dhcp4_parser.yy" // lalr1.cc:859 + case 352: +#line 1265 "dhcp4_parser.yy" // lalr1.cc:859 { 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 2168 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2201 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 349: -#line 1258 "dhcp4_parser.yy" // lalr1.cc:859 + case 353: +#line 1270 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2177 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2210 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 350: -#line 1266 "dhcp4_parser.yy" // lalr1.cc:859 + case 354: +#line 1278 "dhcp4_parser.yy" // lalr1.cc:859 { 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 2188 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2221 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 351: -#line 1271 "dhcp4_parser.yy" // lalr1.cc:859 + case 355: +#line 1283 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2197 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2230 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 352: -#line 1276 "dhcp4_parser.yy" // lalr1.cc:859 + case 356: +#line 1288 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2205 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2238 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 353: -#line 1278 "dhcp4_parser.yy" // lalr1.cc:859 + case 357: +#line 1290 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr ip(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ip-address", ip); ctx.leave(); } -#line 2215 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2248 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 354: -#line 1287 "dhcp4_parser.yy" // lalr1.cc:859 + case 358: +#line 1299 "dhcp4_parser.yy" // lalr1.cc:859 { 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 2226 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2259 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 355: -#line 1292 "dhcp4_parser.yy" // lalr1.cc:859 + case 359: +#line 1304 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2235 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2268 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 358: -#line 1301 "dhcp4_parser.yy" // lalr1.cc:859 + case 362: +#line 1313 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 2245 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2278 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 359: -#line 1305 "dhcp4_parser.yy" // lalr1.cc:859 + case 363: +#line 1317 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); } -#line 2253 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2286 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 372: -#line 1328 "dhcp4_parser.yy" // lalr1.cc:859 + case 376: +#line 1340 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2261 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2294 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 373: -#line 1330 "dhcp4_parser.yy" // lalr1.cc:859 + case 377: +#line 1342 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr test(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("test", test); ctx.leave(); } -#line 2271 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2304 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 374: -#line 1339 "dhcp4_parser.yy" // lalr1.cc:859 + case 378: +#line 1351 "dhcp4_parser.yy" // lalr1.cc:859 { 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 2282 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2315 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 375: -#line 1344 "dhcp4_parser.yy" // lalr1.cc:859 + case 379: +#line 1356 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2291 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2324 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 385: -#line 1362 "dhcp4_parser.yy" // lalr1.cc:859 + case 389: +#line 1374 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr htype(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("htype", htype); } -#line 2300 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2333 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 386: -#line 1367 "dhcp4_parser.yy" // lalr1.cc:859 + case 390: +#line 1379 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2308 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2341 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 387: -#line 1369 "dhcp4_parser.yy" // lalr1.cc:859 + case 391: +#line 1381 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr id(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("identifier", id); ctx.leave(); } -#line 2318 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2351 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 388: -#line 1375 "dhcp4_parser.yy" // lalr1.cc:859 + case 392: +#line 1387 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("time", time); } -#line 2327 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2360 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 389: -#line 1380 "dhcp4_parser.yy" // lalr1.cc:859 + case 393: +#line 1392 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("enterprise-id", time); } -#line 2336 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2369 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 390: -#line 1387 "dhcp4_parser.yy" // lalr1.cc:859 + case 394: +#line 1399 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("dhcp4o6-port", time); } -#line 2345 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2378 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 391: -#line 1394 "dhcp4_parser.yy" // lalr1.cc:859 + case 395: +#line 1406 "dhcp4_parser.yy" // lalr1.cc:859 { 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 2356 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2389 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 392: -#line 1399 "dhcp4_parser.yy" // lalr1.cc:859 + case 396: +#line 1411 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2365 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2398 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 397: -#line 1412 "dhcp4_parser.yy" // lalr1.cc:859 + case 401: +#line 1424 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2373 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2406 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 398: -#line 1414 "dhcp4_parser.yy" // lalr1.cc:859 + case 402: +#line 1426 "dhcp4_parser.yy" // lalr1.cc:859 { 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 2383 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2416 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 399: -#line 1420 "dhcp4_parser.yy" // lalr1.cc:859 + case 403: +#line 1432 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2391 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2424 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 400: -#line 1422 "dhcp4_parser.yy" // lalr1.cc:859 + case 404: +#line 1434 "dhcp4_parser.yy" // lalr1.cc:859 { 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 2401 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2434 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 401: -#line 1430 "dhcp4_parser.yy" // lalr1.cc:859 + case 405: +#line 1442 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("dhcp-ddns", m); ctx.stack_.push_back(m); ctx.enter(ctx.NO_KEYWORD); } -#line 2412 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2445 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 402: -#line 1435 "dhcp4_parser.yy" // lalr1.cc:859 + case 406: +#line 1447 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2421 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2454 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 403: -#line 1442 "dhcp4_parser.yy" // lalr1.cc:859 + case 407: +#line 1454 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2429 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2462 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 404: -#line 1444 "dhcp4_parser.yy" // lalr1.cc:859 + case 408: +#line 1456 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("Dhcp6", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); } -#line 2438 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2471 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 405: -#line 1449 "dhcp4_parser.yy" // lalr1.cc:859 + case 409: +#line 1461 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2446 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2479 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 406: -#line 1451 "dhcp4_parser.yy" // lalr1.cc:859 + case 410: +#line 1463 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("DhcpDdns", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); } -#line 2455 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2488 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 407: -#line 1461 "dhcp4_parser.yy" // lalr1.cc:859 + case 411: +#line 1473 "dhcp4_parser.yy" // lalr1.cc:859 { 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 2466 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2499 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 408: -#line 1466 "dhcp4_parser.yy" // lalr1.cc:859 + case 412: +#line 1478 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2475 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2508 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 412: -#line 1483 "dhcp4_parser.yy" // lalr1.cc:859 + case 416: +#line 1495 "dhcp4_parser.yy" // lalr1.cc:859 { 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 2486 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2519 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 413: -#line 1488 "dhcp4_parser.yy" // lalr1.cc:859 + case 417: +#line 1500 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2495 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2528 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 416: -#line 1500 "dhcp4_parser.yy" // lalr1.cc:859 + case 420: +#line 1512 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(l); ctx.stack_.push_back(l); } -#line 2505 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2538 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 417: -#line 1504 "dhcp4_parser.yy" // lalr1.cc:859 + case 421: +#line 1516 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); } -#line 2513 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2546 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 425: -#line 1519 "dhcp4_parser.yy" // lalr1.cc:859 + case 429: +#line 1531 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr dl(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("debuglevel", dl); } -#line 2522 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2555 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 426: -#line 1523 "dhcp4_parser.yy" // lalr1.cc:859 + case 430: +#line 1535 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2530 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2563 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 427: -#line 1525 "dhcp4_parser.yy" // lalr1.cc:859 + case 431: +#line 1537 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("severity", sev); ctx.leave(); } -#line 2540 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2573 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 428: -#line 1531 "dhcp4_parser.yy" // lalr1.cc:859 + case 432: +#line 1543 "dhcp4_parser.yy" // lalr1.cc:859 { 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 2551 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2584 "dhcp4_parser.cc" // lalr1.cc:859 break; - case 429: -#line 1536 "dhcp4_parser.yy" // lalr1.cc:859 + case 433: +#line 1548 "dhcp4_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2560 "dhcp4_parser.cc" // lalr1.cc:859 - break; - - case 432: -#line 1545 "dhcp4_parser.yy" // lalr1.cc:859 - { - ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); - ctx.stack_.back()->add(m); - ctx.stack_.push_back(m); -} -#line 2570 "dhcp4_parser.cc" // lalr1.cc:859 - break; - - case 433: -#line 1549 "dhcp4_parser.yy" // lalr1.cc:859 - { - ctx.stack_.pop_back(); -} -#line 2578 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2593 "dhcp4_parser.cc" // lalr1.cc:859 break; case 436: #line 1557 "dhcp4_parser.yy" // lalr1.cc:859 { - ctx.enter(ctx.NO_KEYWORD); + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->add(m); + ctx.stack_.push_back(m); } -#line 2586 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2603 "dhcp4_parser.cc" // lalr1.cc:859 break; case 437: -#line 1559 "dhcp4_parser.yy" // lalr1.cc:859 +#line 1561 "dhcp4_parser.yy" // lalr1.cc:859 + { + ctx.stack_.pop_back(); +} +#line 2611 "dhcp4_parser.cc" // lalr1.cc:859 + break; + + case 440: +#line 1569 "dhcp4_parser.yy" // lalr1.cc:859 + { + ctx.enter(ctx.NO_KEYWORD); +} +#line 2619 "dhcp4_parser.cc" // lalr1.cc:859 + break; + + case 441: +#line 1571 "dhcp4_parser.yy" // lalr1.cc:859 { ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("output", sev); ctx.leave(); } -#line 2596 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2629 "dhcp4_parser.cc" // lalr1.cc:859 break; -#line 2600 "dhcp4_parser.cc" // lalr1.cc:859 +#line 2633 "dhcp4_parser.cc" // lalr1.cc:859 default: break; } @@ -2851,86 +2884,87 @@ namespace isc { namespace dhcp { } - const short int Dhcp4Parser::yypact_ninf_ = -411; + const short int Dhcp4Parser::yypact_ninf_ = -419; const signed char Dhcp4Parser::yytable_ninf_ = -1; const short int Dhcp4Parser::yypact_[] = { - 179, -411, -411, -411, -411, -411, -411, -411, -411, -411, - -411, 39, 22, 34, 54, 61, 94, 113, 155, 173, - 209, 218, -411, -411, -411, -411, -411, -411, -411, -411, - -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, - -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, - -411, -411, 22, -29, 18, 65, 106, 19, -6, 96, - 17, 67, -17, -411, 170, 175, 192, 199, 224, -411, - -411, -411, -411, 226, -411, 72, -411, -411, -411, -411, - -411, -411, 227, 228, -411, -411, -411, 230, 231, 232, - 235, -411, -411, -411, -411, -411, -411, -411, -411, 237, - -411, -411, -411, 131, -411, -411, -411, -411, -411, -411, - -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, - -411, -411, -411, -411, -411, -411, -411, -411, 134, -411, - -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, - 238, 240, -411, -411, -411, -411, -411, -411, -411, -411, - -411, 142, -411, -411, -411, -411, -411, -411, -411, -411, - -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, - -411, 143, -411, -411, -411, -411, -411, -411, -411, -411, - -411, -411, -411, -411, -411, 241, 245, -411, -411, -411, - -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, - 248, -411, -411, -411, 249, -411, -411, -411, 257, 266, - -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, - -411, 267, -411, -411, -411, -411, 264, 270, -411, -411, - -411, -411, -411, -411, -411, -411, -411, 167, -411, -411, - -411, -411, 22, 22, -411, 180, 281, 283, 284, 285, - -411, 18, -411, 286, 182, 183, 289, 290, 291, 193, - 194, 195, 196, 292, 293, 294, 295, 300, 301, 302, - 303, 204, 304, 305, 65, -411, 306, 308, 106, -411, - 26, 309, 310, 311, 312, 313, 314, 315, 213, 215, - 317, 318, 319, 321, 19, -411, 322, -6, -411, 323, - 324, 325, 326, 327, 328, 329, 330, 333, -411, 96, - 334, 335, 233, 337, 338, 339, 236, -411, 17, 340, - 239, -411, 67, 342, 343, -22, -411, -411, -411, 345, - 344, 346, 22, 22, -411, 347, -411, -411, 244, 348, - 349, -411, -411, -411, -411, 352, 353, 354, 357, 358, - 359, 360, 361, -411, 362, 363, -411, 366, 112, -411, - -411, -411, -411, -411, -411, -411, -411, 364, 370, -411, - -411, -411, 246, 269, 271, 371, 272, 274, 275, -411, - -411, 276, 277, 380, 379, -411, 282, -411, 287, 288, - 366, 296, 297, 298, 299, 316, 320, -411, 331, 332, - -411, 336, 341, 350, -411, -411, 351, -411, -411, 355, - 22, -411, 22, 65, 307, -411, -411, 106, -411, 161, - 161, 382, 383, 385, 197, 35, 390, 92, 11, 70, - -29, -411, -411, -411, -411, -411, 394, -411, 26, -411, - -411, -411, 392, -411, -411, -411, -411, -411, 393, 356, - -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, - -411, -411, -411, -411, -411, -411, -411, -411, -411, 169, - -411, 171, -411, -411, 190, -411, -411, -411, 397, 402, - 403, -411, 191, -411, -411, -411, -411, -411, -411, -411, - -411, -411, 200, -411, 381, 405, -411, -411, 404, 406, - -411, -411, 408, 409, -411, -411, -411, -411, -411, -411, - 29, -411, -411, -411, -411, -411, 99, -411, 410, 414, - -411, 407, 415, 416, 417, 420, 421, 201, -411, -411, - -411, -411, -411, -411, -411, -411, 423, 424, 425, -411, - -411, -411, 202, -411, -411, -411, -411, -411, -411, -411, - 203, -411, -411, -411, 210, 22, 365, -411, -411, 412, - 427, -411, -411, 426, 428, -411, -411, 431, -411, 429, - 307, -411, -411, 430, 432, 436, 367, 368, 369, 161, - -411, -411, 19, -411, 382, 17, -411, 383, 67, -411, - 385, 197, -411, 35, -411, -17, -411, 390, 372, 373, - 374, 375, 376, 377, 92, -411, 437, 378, 384, 386, - 11, -411, 439, 440, 70, -411, -411, 442, -411, -6, - -411, 392, 96, -411, 393, 441, -411, 444, -411, 388, - 389, 391, -411, -411, -411, -411, 211, -411, 438, -411, - 443, -411, -411, -411, 212, -411, -411, -411, -411, -411, - -411, -411, -411, 395, -411, -411, -411, -411, 396, 398, - -411, -411, 214, -411, 445, -411, 399, 447, -411, -411, - -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, - -411, -411, 141, -411, 48, 447, -411, -411, 446, -411, - -411, -411, 220, -411, -411, -411, -411, -411, 448, 400, - 451, 48, -411, 453, -411, 411, -411, 452, -411, -411, - 189, -411, 401, 452, -411, -411, 221, -411, -411, 456, - 401, -411, 413, -411, -411 + 184, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, 27, 23, 35, 60, 67, 78, 86, 95, 106, + 145, 149, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, 23, 13, 19, 65, 24, 17, -6, 99, + 165, 48, -7, -419, 49, 155, 166, 152, 178, -419, + -419, -419, -419, 216, -419, 42, -419, -419, -419, -419, + -419, -419, 218, 237, -419, -419, -419, 239, 240, 241, + 243, -419, -419, -419, -419, -419, -419, -419, -419, 244, + -419, -419, -419, 43, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, 54, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + 250, 251, -419, -419, -419, -419, -419, -419, -419, -419, + -419, 58, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, 72, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, 193, 234, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, 257, -419, -419, -419, 258, -419, -419, -419, + 255, 261, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, 265, -419, -419, -419, -419, 262, 271, + -419, -419, -419, -419, -419, -419, -419, -419, -419, 102, + -419, -419, -419, -419, 23, 23, -419, 168, 272, 273, + 274, 275, -419, 19, -419, 287, 182, 183, 290, 291, + 292, 189, 190, 191, 192, 297, 298, 299, 300, 301, + 302, 303, 304, 202, 305, 307, 65, -419, 308, 309, + 24, -419, 20, 310, 311, 312, 313, 314, 315, 316, + 214, 215, 317, 319, 320, 322, 17, -419, 323, 324, + -6, -419, 325, 326, 327, 328, 329, 330, 331, 332, + 333, -419, 99, 334, 335, 232, 339, 340, 341, 236, + -419, 165, 343, 238, -419, 48, 345, 346, 36, -419, + -419, -419, 347, 348, 349, 23, 23, -419, 350, -419, + -419, 245, 351, 352, -419, -419, -419, -419, 355, 356, + 357, 358, 361, 362, 364, 365, -419, 366, 367, -419, + 363, 114, -419, -419, -419, -419, -419, -419, -419, -419, + 368, 372, -419, -419, -419, 246, 247, 270, 374, 277, + 278, 279, -419, -419, 280, 282, 375, 383, -419, 284, + 385, -419, 286, 289, 363, 293, 294, 295, 296, 306, + 318, -419, 321, 336, -419, 337, 338, 342, -419, -419, + 344, -419, -419, 353, 23, -419, 23, 65, 360, -419, + -419, 24, -419, 150, 150, 387, 390, 392, 162, 34, + 397, 156, 112, 82, 13, -419, -419, -419, -419, -419, + 377, -419, 20, -419, -419, -419, 398, -419, -419, -419, + -419, -419, 399, 359, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, 113, -419, 133, -419, -419, + 137, -419, -419, -419, 378, 403, 404, -419, 139, -419, + -419, -419, -419, -419, -419, -419, -419, -419, 140, -419, + 405, 406, -419, -419, 408, 407, -419, -419, 409, 413, + -419, -419, -419, -419, -419, -419, 177, -419, -419, -419, + -419, -419, 197, -419, 411, 415, -419, 417, 419, 420, + 422, 425, 426, 143, -419, -419, -419, -419, -419, -419, + -419, -419, 427, 428, 429, -419, -419, -419, 151, -419, + -419, -419, -419, -419, -419, -419, 163, -419, -419, -419, + 179, 23, 354, -419, -419, 430, 416, -419, -419, 431, + 432, -419, -419, 433, -419, 434, 360, -419, -419, 435, + 436, 438, 369, 370, 371, 150, -419, -419, 17, -419, + 387, 165, -419, 390, 48, -419, 392, 162, -419, 34, + -419, -7, -419, 397, 376, 379, 380, 381, 382, 384, + 156, -419, 442, 386, 388, 389, 112, -419, 443, 444, + 82, -419, -419, 446, -419, -6, -419, 398, 99, -419, + 399, 449, -419, 450, -419, 373, 391, 393, -419, -419, + -419, -419, 188, -419, 448, -419, 451, -419, -419, -419, + 194, -419, -419, -419, -419, -419, -419, -419, -419, 394, + -419, -419, -419, -419, 395, 396, -419, -419, 201, -419, + 454, -419, 400, 447, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, 211, -419, + 18, 447, -419, -419, 453, -419, -419, -419, 210, -419, + -419, -419, -419, -419, 459, 401, 460, 18, -419, 461, + -419, 410, -419, 458, -419, -419, 233, -419, 412, 458, + -419, -419, 213, -419, -419, 463, 412, -419, 414, -419, + -419 }; const unsigned short int @@ -2938,410 +2972,415 @@ namespace isc { namespace dhcp { { 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 36, 30, 26, 25, 22, 23, 24, - 29, 3, 27, 28, 45, 5, 56, 7, 94, 9, - 185, 11, 295, 13, 312, 15, 235, 17, 269, 19, - 150, 21, 40, 32, 0, 0, 0, 0, 0, 314, - 237, 271, 0, 42, 0, 41, 0, 0, 33, 54, - 407, 403, 405, 0, 53, 0, 47, 49, 51, 52, - 50, 88, 0, 0, 330, 102, 104, 0, 0, 0, - 0, 177, 227, 261, 131, 354, 142, 161, 374, 0, - 391, 401, 81, 0, 58, 60, 61, 62, 63, 78, - 79, 65, 66, 67, 68, 72, 73, 64, 70, 71, - 80, 69, 74, 75, 76, 77, 96, 98, 0, 90, - 92, 93, 358, 211, 213, 215, 287, 209, 217, 219, - 0, 0, 223, 221, 304, 350, 208, 189, 190, 191, - 203, 0, 187, 194, 205, 206, 207, 195, 196, 199, - 201, 197, 198, 192, 193, 200, 204, 202, 302, 301, - 300, 0, 297, 299, 332, 334, 348, 338, 340, 344, - 342, 346, 336, 329, 325, 0, 315, 316, 326, 327, - 328, 322, 318, 323, 320, 321, 324, 319, 117, 125, - 0, 255, 253, 258, 0, 248, 252, 249, 0, 238, - 239, 241, 251, 242, 243, 244, 257, 245, 246, 247, - 282, 0, 280, 281, 284, 285, 0, 272, 273, 275, - 276, 277, 278, 279, 157, 159, 154, 0, 152, 155, - 156, 37, 0, 0, 31, 0, 0, 0, 0, 0, - 44, 0, 46, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 37, 30, 26, 25, 22, 23, 24, + 29, 3, 27, 28, 46, 5, 57, 7, 95, 9, + 186, 11, 296, 13, 316, 15, 236, 17, 270, 19, + 151, 21, 41, 33, 0, 0, 0, 0, 0, 318, + 238, 272, 0, 43, 0, 42, 0, 0, 34, 55, + 411, 407, 409, 0, 54, 0, 48, 50, 52, 53, + 51, 89, 0, 0, 334, 103, 105, 0, 0, 0, + 0, 178, 228, 262, 132, 358, 143, 162, 378, 0, + 395, 405, 82, 0, 59, 61, 62, 63, 64, 79, + 80, 66, 67, 68, 69, 73, 74, 65, 71, 72, + 81, 70, 75, 76, 77, 78, 97, 99, 0, 91, + 93, 94, 362, 212, 214, 216, 288, 210, 218, 220, + 0, 0, 224, 222, 308, 354, 209, 190, 191, 192, + 204, 0, 188, 195, 206, 207, 208, 196, 197, 200, + 202, 198, 199, 193, 194, 201, 205, 203, 304, 306, + 303, 301, 0, 298, 300, 302, 336, 338, 352, 342, + 344, 348, 346, 350, 340, 333, 329, 0, 319, 320, + 330, 331, 332, 326, 322, 327, 324, 325, 328, 323, + 118, 126, 0, 256, 254, 259, 0, 249, 253, 250, + 0, 239, 240, 242, 252, 243, 244, 245, 258, 246, + 247, 248, 283, 0, 281, 282, 285, 286, 0, 273, + 274, 276, 277, 278, 279, 280, 158, 160, 155, 0, + 153, 156, 157, 38, 0, 0, 31, 0, 0, 0, + 0, 0, 45, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 57, 0, 0, 0, 95, - 360, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 186, 0, 0, 296, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 313, 0, - 0, 0, 0, 0, 0, 0, 0, 236, 0, 0, - 0, 270, 0, 0, 0, 0, 151, 43, 34, 0, - 0, 0, 0, 0, 48, 0, 86, 87, 0, 0, - 0, 82, 83, 84, 85, 0, 0, 0, 0, 0, - 0, 0, 0, 390, 0, 0, 59, 0, 0, 91, - 372, 370, 371, 366, 367, 368, 369, 0, 361, 362, - 364, 365, 0, 0, 0, 0, 0, 0, 0, 225, - 226, 0, 0, 0, 0, 188, 0, 298, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 317, 0, 0, - 250, 0, 0, 0, 260, 240, 0, 286, 274, 0, - 0, 153, 0, 0, 0, 404, 406, 0, 331, 0, - 0, 179, 229, 263, 0, 0, 144, 0, 0, 0, - 0, 38, 97, 100, 101, 99, 0, 359, 0, 212, - 214, 216, 289, 210, 218, 220, 224, 222, 306, 0, - 303, 333, 335, 349, 339, 341, 345, 343, 347, 337, - 118, 126, 256, 254, 259, 283, 158, 160, 35, 0, - 412, 0, 409, 411, 0, 119, 121, 123, 0, 0, - 0, 116, 0, 106, 108, 109, 110, 111, 112, 113, - 114, 115, 0, 183, 0, 180, 181, 233, 0, 230, - 231, 267, 0, 264, 265, 130, 139, 140, 141, 135, - 0, 133, 136, 137, 138, 356, 0, 148, 0, 145, - 146, 0, 0, 0, 0, 0, 0, 0, 163, 165, - 166, 167, 168, 169, 170, 386, 0, 0, 0, 384, - 378, 383, 0, 376, 381, 379, 380, 382, 397, 399, - 0, 393, 395, 396, 0, 40, 0, 363, 293, 0, - 290, 291, 310, 0, 307, 308, 352, 0, 55, 0, - 0, 408, 89, 0, 0, 0, 0, 0, 0, 0, - 103, 105, 0, 178, 0, 237, 228, 0, 271, 262, - 0, 0, 132, 0, 355, 0, 143, 0, 0, 0, - 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, - 0, 375, 0, 0, 0, 392, 402, 0, 373, 0, - 288, 0, 314, 305, 0, 0, 351, 0, 410, 0, - 0, 0, 127, 128, 129, 107, 0, 182, 0, 232, - 0, 266, 134, 357, 0, 147, 171, 172, 173, 174, - 175, 176, 164, 0, 385, 388, 389, 377, 0, 0, - 394, 39, 0, 292, 0, 309, 0, 0, 120, 122, - 124, 184, 234, 268, 149, 387, 398, 400, 294, 311, - 353, 416, 0, 414, 0, 0, 413, 428, 0, 426, - 424, 420, 0, 418, 422, 423, 421, 415, 0, 0, - 0, 0, 417, 0, 425, 0, 419, 0, 427, 432, - 0, 430, 0, 0, 429, 436, 0, 434, 431, 0, - 0, 433, 0, 435, 437 + 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, + 0, 96, 364, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, + 0, 297, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 317, 0, 0, 0, 0, 0, 0, 0, 0, + 237, 0, 0, 0, 271, 0, 0, 0, 0, 152, + 44, 35, 0, 0, 0, 0, 0, 49, 0, 87, + 88, 0, 0, 0, 83, 84, 85, 86, 0, 0, + 0, 0, 0, 0, 0, 0, 394, 0, 0, 60, + 0, 0, 92, 376, 374, 375, 370, 371, 372, 373, + 0, 365, 366, 368, 369, 0, 0, 0, 0, 0, + 0, 0, 226, 227, 0, 0, 0, 0, 189, 0, + 0, 299, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 321, 0, 0, 251, 0, 0, 0, 261, 241, + 0, 287, 275, 0, 0, 154, 0, 0, 0, 408, + 410, 0, 335, 0, 0, 180, 230, 264, 0, 0, + 145, 0, 0, 0, 0, 39, 98, 101, 102, 100, + 0, 363, 0, 213, 215, 217, 290, 211, 219, 221, + 225, 223, 310, 0, 305, 32, 307, 337, 339, 353, + 343, 345, 349, 347, 351, 341, 119, 127, 257, 255, + 260, 284, 159, 161, 36, 0, 416, 0, 413, 415, + 0, 120, 122, 124, 0, 0, 0, 117, 0, 107, + 109, 110, 111, 112, 113, 114, 115, 116, 0, 184, + 0, 181, 182, 234, 0, 231, 232, 268, 0, 265, + 266, 131, 140, 141, 142, 136, 0, 134, 137, 138, + 139, 360, 0, 149, 0, 146, 147, 0, 0, 0, + 0, 0, 0, 0, 164, 166, 167, 168, 169, 170, + 171, 390, 0, 0, 0, 388, 382, 387, 0, 380, + 385, 383, 384, 386, 401, 403, 0, 397, 399, 400, + 0, 41, 0, 367, 294, 0, 291, 292, 314, 0, + 311, 312, 356, 0, 56, 0, 0, 412, 90, 0, + 0, 0, 0, 0, 0, 0, 104, 106, 0, 179, + 0, 238, 229, 0, 272, 263, 0, 0, 133, 0, + 359, 0, 144, 0, 0, 0, 0, 0, 0, 0, + 0, 163, 0, 0, 0, 0, 0, 379, 0, 0, + 0, 396, 406, 0, 377, 0, 289, 0, 318, 309, + 0, 0, 355, 0, 414, 0, 0, 0, 128, 129, + 130, 108, 0, 183, 0, 233, 0, 267, 135, 361, + 0, 148, 172, 173, 174, 175, 176, 177, 165, 0, + 389, 392, 393, 381, 0, 0, 398, 40, 0, 293, + 0, 313, 0, 0, 121, 123, 125, 185, 235, 269, + 150, 391, 402, 404, 295, 315, 357, 420, 0, 418, + 0, 0, 417, 432, 0, 430, 428, 424, 0, 422, + 426, 427, 425, 419, 0, 0, 0, 0, 421, 0, + 429, 0, 423, 0, 431, 436, 0, 434, 0, 0, + 433, 440, 0, 438, 435, 0, 0, 437, 0, 439, + 441 }; const short int Dhcp4Parser::yypgoto_[] = { - -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, - -411, -411, 3, -411, -411, -411, -411, 5, -411, -411, - 73, -411, -93, -411, -54, -411, -411, -411, 216, -411, - -411, -411, -411, 51, 198, -56, -40, -38, -411, -411, - -37, -411, -411, 49, 187, -411, -411, -411, -411, -411, - -411, -411, -411, -411, -411, -411, 50, -111, -398, -411, - -411, -411, -411, -411, -411, -411, -59, -411, -410, -411, - -411, -411, -411, -411, -411, -122, -411, -411, -411, -411, - -411, -411, -411, -124, -411, -411, -411, -121, 152, -411, - -411, -411, -411, -411, -411, -411, -118, -411, -411, -411, - -411, -411, -411, -411, -411, -411, -411, -97, -411, -411, - -411, -94, 205, -411, -411, -411, -411, -411, -411, -411, - -411, -411, -411, -411, -411, -402, -411, -411, -411, -411, - -411, -411, -411, -411, -411, -98, -411, -411, -411, -95, - -411, 178, -411, -52, -411, -411, -411, -411, -48, -411, - -411, -411, -411, -411, -47, -411, -411, -411, -92, -411, - -411, -411, -88, -411, 181, -411, -411, -411, -411, -411, - -411, -411, -411, -411, -411, -115, -411, -411, -411, -110, - 217, -411, -411, -411, -411, -411, -411, -116, -411, -411, - -411, -112, -411, 206, -43, -411, -256, -411, -255, -411, - -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, - -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, - -411, -411, -411, -411, 74, -411, -411, -411, -411, -411, - -411, -99, -411, -411, -411, -411, -411, -411, -411, -411, - -411, -101, -411, -411, -411, -411, -411, -411, -411, -411, - -411, -411, -411, -411, -411, -49, -411, -411, -411, -169, - -411, -411, -183, -411, -411, -411, -411, -411, -411, -191, - -411, -411, -197, -411 + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, 6, -419, 22, -419, -419, -419, 0, -419, + -419, 64, -419, -93, -419, -54, -419, -419, -419, 217, + -419, -419, -419, -419, 52, 195, -56, -40, -37, -419, + -419, -36, -419, -419, 51, 196, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, 50, -112, -401, + -419, -419, -419, -419, -419, -419, -419, -59, -419, -418, + -419, -419, -419, -419, -419, -419, -122, -419, -419, -419, + -419, -419, -419, -419, -126, -419, -419, -419, -119, 157, + -419, -419, -419, -419, -419, -419, -419, -127, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -104, -419, + -419, -419, -97, 199, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -410, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -100, -419, -419, -419, + -92, -419, 185, -419, -52, -419, -419, -419, -419, -45, + -419, -419, -419, -419, -419, -47, -419, -419, -419, -91, + -419, -419, -419, -86, -419, 186, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -117, -419, -419, -419, + -113, 219, -419, -419, -419, -419, -419, -419, -419, -419, + -116, -419, -419, -419, -115, -419, 203, -44, -419, -257, + -419, -256, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, 74, -419, -419, + -419, -419, -419, -419, -98, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -96, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -53, -419, + -419, -419, -171, -419, -419, -185, -419, -419, -419, -419, + -419, -419, -194, -419, -419, -199, -419 }; const short int Dhcp4Parser::yydefgoto_[] = { -1, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 20, 21, 63, 31, 32, 53, 67, 68, 33, 52, - 432, 555, 64, 65, 102, 35, 54, 75, 76, 77, - 246, 37, 55, 103, 104, 105, 106, 107, 108, 109, - 110, 111, 253, 128, 129, 39, 56, 130, 276, 131, - 277, 435, 112, 257, 113, 258, 482, 483, 206, 310, - 485, 573, 486, 574, 487, 575, 207, 311, 489, 490, - 491, 509, 114, 266, 510, 511, 512, 513, 514, 115, - 268, 518, 519, 520, 595, 51, 62, 237, 238, 239, - 323, 240, 324, 116, 269, 527, 528, 529, 530, 531, - 532, 533, 534, 117, 263, 494, 495, 496, 582, 41, - 57, 151, 152, 153, 285, 154, 281, 155, 282, 156, - 283, 157, 286, 158, 287, 159, 291, 160, 290, 161, - 162, 118, 264, 498, 499, 500, 585, 47, 60, 208, - 209, 210, 211, 212, 213, 214, 215, 314, 216, 313, - 217, 218, 315, 219, 119, 265, 502, 503, 504, 588, - 49, 61, 226, 227, 228, 229, 230, 319, 231, 232, - 233, 164, 284, 559, 560, 561, 619, 43, 58, 171, - 172, 173, 296, 165, 292, 563, 564, 565, 622, 45, - 59, 185, 186, 187, 120, 256, 189, 299, 190, 300, - 191, 307, 192, 302, 193, 303, 194, 305, 195, 304, - 196, 306, 197, 301, 167, 293, 567, 625, 121, 267, - 516, 280, 367, 368, 369, 370, 371, 436, 122, 270, - 542, 543, 544, 545, 606, 546, 547, 123, 124, 272, - 550, 551, 552, 612, 553, 613, 125, 273, 78, 248, - 79, 249, 80, 247, 471, 472, 473, 569, 682, 683, - 684, 692, 693, 694, 695, 700, 696, 698, 710, 711, - 712, 716, 717, 719 + 20, 21, 63, 31, 32, 53, 456, 67, 68, 33, + 52, 436, 561, 64, 65, 102, 35, 54, 75, 76, + 77, 248, 37, 55, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 255, 128, 129, 39, 56, 130, 278, + 131, 279, 439, 112, 259, 113, 260, 488, 489, 208, + 313, 491, 579, 492, 580, 493, 581, 209, 314, 495, + 496, 497, 515, 114, 268, 516, 517, 518, 519, 520, + 115, 270, 524, 525, 526, 601, 51, 62, 239, 240, + 241, 326, 242, 327, 116, 271, 533, 534, 535, 536, + 537, 538, 539, 540, 117, 265, 500, 501, 502, 588, + 41, 57, 151, 152, 153, 287, 154, 283, 155, 284, + 156, 285, 157, 288, 158, 289, 159, 293, 160, 292, + 161, 162, 118, 266, 504, 505, 506, 591, 47, 60, + 210, 211, 212, 213, 214, 215, 216, 217, 317, 218, + 316, 219, 220, 318, 221, 119, 267, 508, 509, 510, + 594, 49, 61, 228, 229, 230, 231, 232, 322, 233, + 234, 235, 164, 286, 565, 566, 567, 625, 43, 58, + 172, 173, 174, 298, 175, 299, 165, 294, 569, 570, + 571, 628, 45, 59, 187, 188, 189, 120, 258, 191, + 302, 192, 303, 193, 310, 194, 305, 195, 306, 196, + 308, 197, 307, 198, 309, 199, 304, 167, 295, 573, + 631, 121, 269, 522, 282, 370, 371, 372, 373, 374, + 440, 122, 272, 548, 549, 550, 551, 612, 552, 553, + 123, 124, 274, 556, 557, 558, 618, 559, 619, 125, + 275, 78, 250, 79, 251, 80, 249, 477, 478, 479, + 575, 688, 689, 690, 698, 699, 700, 701, 706, 702, + 704, 716, 717, 718, 722, 723, 725 }; const unsigned short int Dhcp4Parser::yytable_[] = { - 74, 147, 223, 146, 169, 183, 205, 222, 236, 224, - 163, 170, 184, 225, 166, 30, 188, 148, 541, 149, - 150, 484, 484, 515, 365, 366, 132, 23, 69, 24, - 540, 25, 591, 93, 198, 592, 83, 84, 478, 22, - 198, 34, 132, 168, 84, 174, 175, 234, 235, 87, - 88, 89, 234, 235, 133, 134, 135, 199, 93, 200, - 201, 36, 202, 203, 204, 93, 199, 136, 38, 137, - 138, 139, 140, 141, 142, 251, 81, 66, 143, 144, - 252, 82, 83, 84, 360, 145, 85, 86, 199, 73, - 535, 536, 537, 538, 143, 87, 88, 89, 90, 91, - 73, 40, 593, 92, 93, 594, 70, 199, 220, 200, - 201, 221, 71, 72, 84, 174, 175, 73, 126, 127, - 42, 94, 95, 73, 73, 73, 433, 434, 26, 27, - 28, 29, 73, 96, 274, 93, 97, 278, 687, 275, - 688, 689, 279, 98, 685, 294, 297, 686, 99, 100, - 295, 298, 101, 176, 73, 548, 549, 177, 178, 179, - 180, 181, 44, 182, 521, 522, 523, 524, 525, 526, - 325, 73, 274, 73, 570, 326, 241, 568, 242, 571, - 46, 484, 365, 366, 198, 475, 476, 477, 478, 479, - 480, 643, 713, 278, 579, 714, 243, 74, 572, 580, - 541, 199, 73, 579, 604, 610, 614, 244, 581, 605, - 611, 615, 540, 245, 294, 325, 48, 297, 616, 671, - 674, 362, 678, 701, 720, 50, 361, 245, 702, 721, - 250, 254, 255, 363, 259, 260, 261, 364, 147, 262, - 146, 271, 288, 169, 289, 327, 328, 163, 309, 308, - 170, 166, 312, 316, 148, 183, 149, 150, 505, 506, - 507, 508, 184, 223, 205, 317, 188, 73, 222, 318, - 224, 320, 321, 322, 225, 1, 2, 3, 4, 5, - 6, 7, 8, 9, 10, 330, 329, 331, 332, 333, - 335, 336, 337, 338, 339, 340, 345, 346, 347, 348, - 341, 342, 343, 344, 349, 350, 351, 352, 354, 355, - 357, 353, 358, 372, 373, 374, 375, 376, 377, 378, - 379, 381, 382, 383, 380, 384, 386, 388, 389, 390, - 391, 392, 393, 394, 395, 415, 416, 396, 398, 399, - 400, 401, 402, 403, 406, 404, 409, 410, 407, 412, - 418, 413, 439, 414, 417, 419, 420, 421, 422, 423, - 488, 488, 424, 425, 426, 481, 481, 427, 428, 429, - 430, 431, 437, 438, 539, 440, 442, 441, 443, 362, - 444, 445, 446, 447, 361, 448, 449, 583, 450, 493, - 497, 363, 501, 451, 452, 364, 470, 517, 556, 558, - 562, 576, 454, 455, 456, 457, 577, 578, 584, 587, - 586, 598, 590, 467, 589, 468, 596, 597, 620, 599, - 600, 601, 458, 566, 602, 603, 459, 607, 608, 609, - 621, 624, 623, 627, 629, 554, 630, 460, 461, 626, - 631, 653, 462, 658, 659, 666, 672, 463, 661, 667, - 699, 673, 703, 679, 681, 705, 464, 465, 707, 709, - 722, 466, 617, 453, 469, 359, 474, 334, 635, 642, - 492, 618, 356, 645, 644, 633, 632, 411, 634, 646, - 647, 648, 649, 650, 651, 654, 652, 637, 636, 639, - 638, 655, 715, 656, 668, 669, 405, 670, 641, 385, - 640, 675, 676, 408, 677, 680, 663, 704, 665, 662, - 664, 657, 557, 660, 387, 397, 697, 708, 706, 724, - 488, 628, 718, 723, 0, 481, 147, 0, 146, 223, - 0, 205, 0, 0, 222, 163, 224, 0, 0, 166, - 225, 236, 148, 0, 149, 150, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 539, 0, 0, 0, - 0, 0, 0, 0, 0, 169, 0, 0, 183, 0, - 0, 0, 170, 0, 0, 184, 0, 0, 0, 188, + 74, 147, 225, 146, 170, 185, 207, 224, 238, 226, + 163, 171, 186, 166, 547, 190, 227, 148, 30, 521, + 149, 150, 490, 490, 132, 368, 369, 22, 23, 69, + 24, 546, 25, 93, 83, 84, 126, 127, 84, 176, + 177, 132, 34, 168, 169, 253, 276, 87, 88, 89, + 254, 277, 133, 134, 135, 243, 93, 280, 201, 93, + 201, 296, 281, 236, 237, 136, 297, 36, 137, 138, + 139, 140, 141, 142, 38, 300, 81, 143, 144, 363, + 301, 82, 83, 84, 145, 40, 85, 86, 201, 222, + 202, 203, 223, 42, 143, 87, 88, 89, 90, 91, + 73, 73, 44, 92, 93, 328, 236, 237, 70, 693, + 329, 694, 695, 46, 71, 72, 276, 84, 176, 177, + 66, 574, 94, 95, 73, 73, 73, 73, 437, 438, + 26, 27, 28, 29, 96, 200, 576, 97, 93, 484, + 280, 577, 585, 585, 98, 578, 610, 586, 587, 99, + 100, 611, 48, 101, 616, 73, 50, 178, 244, 617, + 246, 179, 180, 181, 182, 183, 620, 184, 554, 555, + 245, 621, 73, 200, 481, 482, 483, 484, 485, 486, + 597, 247, 247, 598, 490, 368, 369, 622, 200, 649, + 201, 296, 541, 542, 543, 544, 677, 328, 547, 74, + 599, 311, 680, 600, 300, 201, 73, 202, 203, 684, + 204, 205, 206, 707, 691, 546, 726, 692, 708, 73, + 252, 727, 256, 365, 511, 512, 513, 514, 364, 527, + 528, 529, 530, 531, 532, 366, 719, 312, 367, 720, + 147, 257, 146, 261, 262, 263, 170, 264, 273, 163, + 330, 331, 166, 171, 290, 291, 148, 73, 185, 149, + 150, 315, 319, 320, 321, 186, 225, 207, 190, 323, + 324, 224, 73, 226, 325, 332, 333, 334, 335, 336, + 227, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 357, + 356, 358, 360, 361, 375, 376, 377, 378, 379, 380, + 381, 384, 382, 385, 386, 383, 387, 389, 390, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 402, 403, + 404, 419, 420, 405, 406, 407, 408, 410, 411, 413, + 414, 416, 422, 443, 444, 417, 418, 421, 423, 424, + 425, 426, 427, 428, 494, 494, 429, 430, 435, 487, + 487, 431, 432, 433, 434, 442, 441, 445, 545, 446, + 452, 562, 582, 365, 447, 448, 449, 450, 364, 451, + 453, 454, 24, 457, 499, 366, 458, 503, 367, 507, + 460, 461, 462, 463, 523, 564, 568, 583, 584, 590, + 593, 589, 455, 464, 592, 595, 596, 602, 603, 627, + 473, 604, 474, 605, 606, 465, 607, 572, 466, 608, + 609, 613, 614, 615, 560, 630, 626, 629, 633, 635, + 636, 632, 637, 467, 468, 469, 659, 664, 665, 470, + 476, 471, 667, 672, 687, 673, 678, 705, 459, 679, + 472, 624, 685, 709, 711, 715, 713, 728, 623, 475, + 337, 359, 480, 641, 498, 648, 362, 651, 639, 638, + 674, 640, 650, 658, 652, 415, 643, 653, 654, 655, + 656, 642, 657, 645, 660, 388, 661, 662, 675, 644, + 676, 681, 682, 683, 721, 647, 409, 686, 646, 710, + 669, 412, 668, 670, 671, 401, 563, 714, 663, 391, + 703, 730, 712, 634, 666, 724, 494, 729, 0, 0, + 0, 487, 147, 0, 146, 225, 0, 207, 0, 0, + 224, 163, 226, 0, 166, 0, 0, 238, 148, 227, + 0, 149, 150, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 545, 0, 0, 0, 0, 0, 0, 0, + 0, 170, 0, 0, 185, 0, 0, 0, 171, 0, + 0, 186, 0, 0, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 691, 0, 0, 0, 0, - 690, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 691, 0, 0, 0, 0, 690 + 0, 697, 0, 0, 0, 0, 696, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 697, 0, + 0, 0, 0, 696 }; const short int Dhcp4Parser::yycheck_[] = { 54, 57, 61, 57, 58, 59, 60, 61, 62, 61, - 57, 58, 59, 61, 57, 12, 59, 57, 428, 57, - 57, 419, 420, 425, 280, 280, 7, 5, 10, 7, - 428, 9, 3, 39, 23, 6, 17, 18, 27, 0, - 23, 7, 7, 49, 18, 19, 20, 69, 70, 30, - 31, 32, 69, 70, 35, 36, 37, 40, 39, 42, - 43, 7, 45, 46, 47, 39, 40, 48, 7, 50, - 51, 52, 53, 54, 55, 3, 11, 106, 59, 60, - 8, 16, 17, 18, 58, 66, 21, 22, 40, 106, - 79, 80, 81, 82, 59, 30, 31, 32, 33, 34, - 106, 7, 3, 38, 39, 6, 88, 40, 41, 42, - 43, 44, 94, 95, 18, 19, 20, 106, 12, 13, - 7, 56, 57, 106, 106, 106, 14, 15, 106, 107, - 108, 109, 106, 68, 3, 39, 71, 3, 90, 8, - 92, 93, 8, 78, 3, 3, 3, 6, 83, 84, - 8, 8, 87, 57, 106, 85, 86, 61, 62, 63, - 64, 65, 7, 67, 72, 73, 74, 75, 76, 77, - 3, 106, 3, 106, 3, 8, 6, 8, 3, 8, - 7, 579, 438, 438, 23, 24, 25, 26, 27, 28, - 29, 593, 3, 3, 3, 6, 4, 251, 8, 8, - 610, 40, 106, 3, 3, 3, 3, 8, 8, 8, - 8, 8, 610, 3, 3, 3, 7, 3, 8, 8, - 8, 280, 8, 3, 3, 7, 280, 3, 8, 8, - 4, 4, 4, 280, 4, 4, 4, 280, 294, 4, - 294, 4, 4, 297, 4, 242, 243, 294, 3, 8, - 297, 294, 4, 4, 294, 309, 294, 294, 61, 62, - 63, 64, 309, 322, 318, 8, 309, 106, 322, 3, - 322, 4, 8, 3, 322, 96, 97, 98, 99, 100, - 101, 102, 103, 104, 105, 4, 106, 4, 4, 4, - 4, 109, 109, 4, 4, 4, 4, 4, 4, 4, - 107, 107, 107, 107, 4, 4, 4, 4, 4, 4, - 4, 107, 4, 4, 4, 4, 4, 4, 4, 4, - 107, 4, 4, 4, 109, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 332, 333, 4, 4, 4, - 107, 4, 4, 4, 4, 109, 4, 4, 109, 4, - 106, 7, 106, 7, 7, 7, 7, 5, 5, 5, - 419, 420, 5, 5, 5, 419, 420, 7, 7, 7, - 7, 5, 8, 3, 428, 106, 5, 106, 106, 438, - 106, 106, 106, 106, 438, 5, 7, 6, 106, 7, - 7, 438, 7, 106, 106, 438, 89, 7, 4, 7, - 7, 4, 106, 106, 106, 106, 4, 4, 3, 3, - 6, 4, 3, 410, 6, 412, 6, 3, 6, 4, - 4, 4, 106, 67, 4, 4, 106, 4, 4, 4, - 3, 3, 6, 4, 4, 430, 4, 106, 106, 8, - 4, 4, 106, 4, 4, 4, 8, 106, 6, 5, - 4, 8, 4, 8, 7, 4, 106, 106, 5, 7, - 4, 106, 555, 390, 413, 278, 417, 251, 579, 591, - 420, 106, 274, 597, 595, 107, 109, 325, 109, 107, - 107, 107, 107, 107, 107, 107, 604, 584, 582, 587, - 585, 107, 91, 107, 106, 106, 318, 106, 590, 294, - 588, 106, 106, 322, 106, 106, 621, 107, 624, 619, - 622, 610, 438, 614, 297, 309, 685, 106, 701, 106, - 579, 570, 713, 720, -1, 579, 582, -1, 582, 588, - -1, 585, -1, -1, 588, 582, 588, -1, -1, 582, - 588, 595, 582, -1, 582, 582, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 610, -1, -1, -1, - -1, -1, -1, -1, -1, 619, -1, -1, 622, -1, - -1, -1, 619, -1, -1, 622, -1, -1, -1, 622, + 57, 58, 59, 57, 432, 59, 61, 57, 12, 429, + 57, 57, 423, 424, 7, 282, 282, 0, 5, 10, + 7, 432, 9, 39, 17, 18, 12, 13, 18, 19, + 20, 7, 7, 49, 50, 3, 3, 30, 31, 32, + 8, 8, 35, 36, 37, 6, 39, 3, 40, 39, + 40, 3, 8, 70, 71, 48, 8, 7, 51, 52, + 53, 54, 55, 56, 7, 3, 11, 60, 61, 59, + 8, 16, 17, 18, 67, 7, 21, 22, 40, 41, + 42, 43, 44, 7, 60, 30, 31, 32, 33, 34, + 107, 107, 7, 38, 39, 3, 70, 71, 89, 91, + 8, 93, 94, 7, 95, 96, 3, 18, 19, 20, + 107, 8, 57, 58, 107, 107, 107, 107, 14, 15, + 107, 108, 109, 110, 69, 23, 3, 72, 39, 27, + 3, 8, 3, 3, 79, 8, 3, 8, 8, 84, + 85, 8, 7, 88, 3, 107, 7, 58, 3, 8, + 8, 62, 63, 64, 65, 66, 3, 68, 86, 87, + 4, 8, 107, 23, 24, 25, 26, 27, 28, 29, + 3, 3, 3, 6, 585, 442, 442, 8, 23, 599, + 40, 3, 80, 81, 82, 83, 8, 3, 616, 253, + 3, 8, 8, 6, 3, 40, 107, 42, 43, 8, + 45, 46, 47, 3, 3, 616, 3, 6, 8, 107, + 4, 8, 4, 282, 62, 63, 64, 65, 282, 73, + 74, 75, 76, 77, 78, 282, 3, 3, 282, 6, + 296, 4, 296, 4, 4, 4, 300, 4, 4, 296, + 244, 245, 296, 300, 4, 4, 296, 107, 312, 296, + 296, 4, 4, 8, 3, 312, 325, 321, 312, 4, + 8, 325, 107, 325, 3, 107, 4, 4, 4, 4, + 325, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 4, 110, 110, 4, 4, 4, 108, 108, 108, + 108, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 108, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 108, 4, 4, 110, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 108, 335, 336, 4, 4, 4, 110, 4, 110, 4, + 4, 4, 107, 107, 107, 7, 7, 7, 7, 7, + 5, 5, 5, 5, 423, 424, 5, 5, 5, 423, + 424, 7, 7, 7, 7, 3, 8, 107, 432, 5, + 5, 4, 4, 442, 107, 107, 107, 107, 442, 107, + 7, 107, 7, 107, 7, 442, 107, 7, 442, 7, + 107, 107, 107, 107, 7, 7, 7, 4, 4, 3, + 3, 6, 390, 107, 6, 6, 3, 6, 3, 3, + 414, 4, 416, 4, 4, 107, 4, 68, 107, 4, + 4, 4, 4, 4, 434, 3, 6, 6, 4, 4, + 4, 8, 4, 107, 107, 107, 4, 4, 4, 107, + 90, 107, 6, 4, 7, 5, 8, 4, 394, 8, + 107, 107, 8, 4, 4, 7, 5, 4, 561, 417, + 253, 276, 421, 585, 424, 597, 280, 603, 108, 110, + 107, 110, 601, 610, 108, 328, 590, 108, 108, 108, + 108, 588, 108, 593, 108, 296, 108, 108, 107, 591, + 107, 107, 107, 107, 92, 596, 321, 107, 594, 108, + 627, 325, 625, 628, 630, 312, 442, 107, 616, 300, + 691, 107, 707, 576, 620, 719, 585, 726, -1, -1, + -1, 585, 588, -1, 588, 594, -1, 591, -1, -1, + 594, 588, 594, -1, 588, -1, -1, 601, 588, 594, + -1, 588, 588, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 616, -1, -1, -1, -1, -1, -1, -1, + -1, 625, -1, -1, 628, -1, -1, -1, 625, -1, + -1, 628, -1, -1, 628, -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, 684, -1, -1, -1, -1, - 684, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 701, -1, -1, -1, -1, 701 + -1, 690, -1, -1, -1, -1, 690, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 707, -1, + -1, -1, -1, 707 }; const unsigned short int Dhcp4Parser::yystos_[] = { - 0, 96, 97, 98, 99, 100, 101, 102, 103, 104, - 105, 111, 112, 113, 114, 115, 116, 117, 118, 119, - 120, 121, 0, 5, 7, 9, 106, 107, 108, 109, - 122, 123, 124, 128, 7, 135, 7, 141, 7, 155, - 7, 219, 7, 287, 7, 299, 7, 247, 7, 270, - 7, 195, 129, 125, 136, 142, 156, 220, 288, 300, - 248, 271, 196, 122, 132, 133, 106, 126, 127, 10, - 88, 94, 95, 106, 134, 137, 138, 139, 358, 360, - 362, 11, 16, 17, 18, 21, 22, 30, 31, 32, - 33, 34, 38, 39, 56, 57, 68, 71, 78, 83, - 84, 87, 134, 143, 144, 145, 146, 147, 148, 149, - 150, 151, 162, 164, 182, 189, 203, 213, 241, 264, - 304, 328, 338, 347, 348, 356, 12, 13, 153, 154, - 157, 159, 7, 35, 36, 37, 48, 50, 51, 52, - 53, 54, 55, 59, 60, 66, 134, 145, 146, 147, - 150, 221, 222, 223, 225, 227, 229, 231, 233, 235, - 237, 239, 240, 264, 281, 293, 304, 324, 49, 134, - 264, 289, 290, 291, 19, 20, 57, 61, 62, 63, - 64, 65, 67, 134, 264, 301, 302, 303, 304, 306, - 308, 310, 312, 314, 316, 318, 320, 322, 23, 40, - 42, 43, 45, 46, 47, 134, 168, 176, 249, 250, - 251, 252, 253, 254, 255, 256, 258, 260, 261, 263, - 41, 44, 134, 176, 253, 258, 272, 273, 274, 275, - 276, 278, 279, 280, 69, 70, 134, 197, 198, 199, - 201, 6, 3, 4, 8, 3, 140, 363, 359, 361, - 4, 3, 8, 152, 4, 4, 305, 163, 165, 4, - 4, 4, 4, 214, 242, 265, 183, 329, 190, 204, - 339, 4, 349, 357, 3, 8, 158, 160, 3, 8, - 331, 226, 228, 230, 282, 224, 232, 234, 4, 4, - 238, 236, 294, 325, 3, 8, 292, 3, 8, 307, - 309, 323, 313, 315, 319, 317, 321, 311, 8, 3, - 169, 177, 4, 259, 257, 262, 4, 8, 3, 277, - 4, 8, 3, 200, 202, 3, 8, 122, 122, 106, - 4, 4, 4, 4, 138, 4, 109, 109, 4, 4, - 4, 107, 107, 107, 107, 4, 4, 4, 4, 4, - 4, 4, 4, 107, 4, 4, 144, 4, 4, 154, - 58, 134, 176, 264, 304, 306, 308, 332, 333, 334, - 335, 336, 4, 4, 4, 4, 4, 4, 4, 107, - 109, 4, 4, 4, 4, 222, 4, 290, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 303, 4, 4, - 107, 4, 4, 4, 109, 251, 4, 109, 274, 4, - 4, 198, 4, 7, 7, 122, 122, 7, 106, 7, - 7, 5, 5, 5, 5, 5, 5, 7, 7, 7, - 7, 5, 130, 14, 15, 161, 337, 8, 3, 106, - 106, 106, 5, 106, 106, 106, 106, 106, 5, 7, - 106, 106, 106, 130, 106, 106, 106, 106, 106, 106, - 106, 106, 106, 106, 106, 106, 106, 122, 122, 143, - 89, 364, 365, 366, 153, 24, 25, 26, 27, 28, - 29, 134, 166, 167, 168, 170, 172, 174, 176, 178, - 179, 180, 166, 7, 215, 216, 217, 7, 243, 244, - 245, 7, 266, 267, 268, 61, 62, 63, 64, 181, - 184, 185, 186, 187, 188, 235, 330, 7, 191, 192, - 193, 72, 73, 74, 75, 76, 77, 205, 206, 207, - 208, 209, 210, 211, 212, 79, 80, 81, 82, 134, - 168, 178, 340, 341, 342, 343, 345, 346, 85, 86, - 350, 351, 352, 354, 127, 131, 4, 334, 7, 283, - 284, 285, 7, 295, 296, 297, 67, 326, 8, 367, - 3, 8, 8, 171, 173, 175, 4, 4, 4, 3, - 8, 8, 218, 6, 3, 246, 6, 3, 269, 6, - 3, 3, 6, 3, 6, 194, 6, 3, 4, 4, - 4, 4, 4, 4, 3, 8, 344, 4, 4, 4, - 3, 8, 353, 355, 3, 8, 8, 132, 106, 286, - 6, 3, 298, 6, 3, 327, 8, 4, 365, 4, - 4, 4, 109, 107, 109, 167, 221, 217, 249, 245, - 272, 268, 185, 235, 197, 193, 107, 107, 107, 107, - 107, 107, 206, 4, 107, 107, 107, 341, 4, 4, - 351, 6, 289, 285, 301, 297, 4, 5, 106, 106, - 106, 8, 8, 8, 8, 106, 106, 106, 8, 8, - 106, 7, 368, 369, 370, 3, 6, 90, 92, 93, - 134, 176, 371, 372, 373, 374, 376, 369, 377, 4, - 375, 3, 8, 4, 107, 4, 372, 5, 106, 7, - 378, 379, 380, 3, 6, 91, 381, 382, 379, 383, - 3, 8, 4, 382, 106 + 0, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 0, 5, 7, 9, 107, 108, 109, 110, + 123, 124, 125, 130, 7, 137, 7, 143, 7, 157, + 7, 221, 7, 289, 7, 303, 7, 249, 7, 272, + 7, 197, 131, 126, 138, 144, 158, 222, 290, 304, + 250, 273, 198, 123, 134, 135, 107, 128, 129, 10, + 89, 95, 96, 107, 136, 139, 140, 141, 362, 364, + 366, 11, 16, 17, 18, 21, 22, 30, 31, 32, + 33, 34, 38, 39, 57, 58, 69, 72, 79, 84, + 85, 88, 136, 145, 146, 147, 148, 149, 150, 151, + 152, 153, 164, 166, 184, 191, 205, 215, 243, 266, + 308, 332, 342, 351, 352, 360, 12, 13, 155, 156, + 159, 161, 7, 35, 36, 37, 48, 51, 52, 53, + 54, 55, 56, 60, 61, 67, 136, 147, 148, 149, + 152, 223, 224, 225, 227, 229, 231, 233, 235, 237, + 239, 241, 242, 266, 283, 297, 308, 328, 49, 50, + 136, 266, 291, 292, 293, 295, 19, 20, 58, 62, + 63, 64, 65, 66, 68, 136, 266, 305, 306, 307, + 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, + 23, 40, 42, 43, 45, 46, 47, 136, 170, 178, + 251, 252, 253, 254, 255, 256, 257, 258, 260, 262, + 263, 265, 41, 44, 136, 178, 255, 260, 274, 275, + 276, 277, 278, 280, 281, 282, 70, 71, 136, 199, + 200, 201, 203, 6, 3, 4, 8, 3, 142, 367, + 363, 365, 4, 3, 8, 154, 4, 4, 309, 165, + 167, 4, 4, 4, 4, 216, 244, 267, 185, 333, + 192, 206, 343, 4, 353, 361, 3, 8, 160, 162, + 3, 8, 335, 228, 230, 232, 284, 226, 234, 236, + 4, 4, 240, 238, 298, 329, 3, 8, 294, 296, + 3, 8, 311, 313, 327, 317, 319, 323, 321, 325, + 315, 8, 3, 171, 179, 4, 261, 259, 264, 4, + 8, 3, 279, 4, 8, 3, 202, 204, 3, 8, + 123, 123, 107, 4, 4, 4, 4, 140, 4, 110, + 110, 4, 4, 4, 108, 108, 108, 108, 4, 4, + 4, 4, 4, 4, 4, 4, 108, 4, 4, 146, + 4, 4, 156, 59, 136, 178, 266, 308, 310, 312, + 336, 337, 338, 339, 340, 4, 4, 4, 4, 4, + 4, 4, 108, 110, 4, 4, 4, 4, 224, 4, + 4, 292, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 307, 4, 4, 108, 4, 4, 4, 110, 253, + 4, 110, 276, 4, 4, 200, 4, 7, 7, 123, + 123, 7, 107, 7, 7, 5, 5, 5, 5, 5, + 5, 7, 7, 7, 7, 5, 132, 14, 15, 163, + 341, 8, 3, 107, 107, 107, 5, 107, 107, 107, + 107, 107, 5, 7, 107, 125, 127, 107, 107, 132, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 123, 123, 145, 90, 368, 369, 370, + 155, 24, 25, 26, 27, 28, 29, 136, 168, 169, + 170, 172, 174, 176, 178, 180, 181, 182, 168, 7, + 217, 218, 219, 7, 245, 246, 247, 7, 268, 269, + 270, 62, 63, 64, 65, 183, 186, 187, 188, 189, + 190, 237, 334, 7, 193, 194, 195, 73, 74, 75, + 76, 77, 78, 207, 208, 209, 210, 211, 212, 213, + 214, 80, 81, 82, 83, 136, 170, 180, 344, 345, + 346, 347, 349, 350, 86, 87, 354, 355, 356, 358, + 129, 133, 4, 338, 7, 285, 286, 287, 7, 299, + 300, 301, 68, 330, 8, 371, 3, 8, 8, 173, + 175, 177, 4, 4, 4, 3, 8, 8, 220, 6, + 3, 248, 6, 3, 271, 6, 3, 3, 6, 3, + 6, 196, 6, 3, 4, 4, 4, 4, 4, 4, + 3, 8, 348, 4, 4, 4, 3, 8, 357, 359, + 3, 8, 8, 134, 107, 288, 6, 3, 302, 6, + 3, 331, 8, 4, 369, 4, 4, 4, 110, 108, + 110, 169, 223, 219, 251, 247, 274, 270, 187, 237, + 199, 195, 108, 108, 108, 108, 108, 108, 208, 4, + 108, 108, 108, 345, 4, 4, 355, 6, 291, 287, + 305, 301, 4, 5, 107, 107, 107, 8, 8, 8, + 8, 107, 107, 107, 8, 8, 107, 7, 372, 373, + 374, 3, 6, 91, 93, 94, 136, 178, 375, 376, + 377, 378, 380, 373, 381, 4, 379, 3, 8, 4, + 108, 4, 376, 5, 107, 7, 382, 383, 384, 3, + 6, 92, 385, 386, 383, 387, 3, 8, 4, 386, + 107 }; const unsigned short int Dhcp4Parser::yyr1_[] = { - 0, 110, 112, 111, 113, 111, 114, 111, 115, 111, - 116, 111, 117, 111, 118, 111, 119, 111, 120, 111, - 121, 111, 122, 122, 122, 122, 122, 122, 122, 123, - 125, 124, 126, 126, 127, 127, 129, 128, 131, 130, - 132, 132, 133, 133, 134, 136, 135, 137, 137, 138, - 138, 138, 138, 138, 140, 139, 142, 141, 143, 143, - 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 145, 146, 147, 148, 149, 150, 152, 151, - 153, 153, 154, 154, 156, 155, 158, 157, 160, 159, - 161, 161, 163, 162, 165, 164, 166, 166, 167, 167, - 167, 167, 167, 167, 167, 167, 167, 169, 168, 171, - 170, 173, 172, 175, 174, 177, 176, 178, 179, 180, - 181, 183, 182, 184, 184, 185, 185, 185, 185, 186, - 187, 188, 190, 189, 191, 191, 192, 192, 194, 193, - 196, 195, 197, 197, 197, 198, 198, 200, 199, 202, - 201, 204, 203, 205, 205, 206, 206, 206, 206, 206, - 206, 207, 208, 209, 210, 211, 212, 214, 213, 215, - 215, 216, 216, 218, 217, 220, 219, 221, 221, 222, - 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, - 222, 222, 222, 222, 222, 222, 222, 222, 222, 224, - 223, 226, 225, 228, 227, 230, 229, 232, 231, 234, - 233, 236, 235, 238, 237, 239, 240, 242, 241, 243, - 243, 244, 244, 246, 245, 248, 247, 249, 249, 250, - 250, 251, 251, 251, 251, 251, 251, 251, 251, 252, - 253, 254, 255, 257, 256, 259, 258, 260, 262, 261, - 263, 265, 264, 266, 266, 267, 267, 269, 268, 271, - 270, 272, 272, 273, 273, 274, 274, 274, 274, 274, - 274, 275, 277, 276, 278, 279, 280, 282, 281, 283, - 283, 284, 284, 286, 285, 288, 287, 289, 289, 290, - 290, 290, 292, 291, 294, 293, 295, 295, 296, 296, - 298, 297, 300, 299, 301, 301, 302, 302, 303, 303, - 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, - 305, 304, 307, 306, 309, 308, 311, 310, 313, 312, + 0, 111, 113, 112, 114, 112, 115, 112, 116, 112, + 117, 112, 118, 112, 119, 112, 120, 112, 121, 112, + 122, 112, 123, 123, 123, 123, 123, 123, 123, 124, + 126, 125, 127, 128, 128, 129, 129, 131, 130, 133, + 132, 134, 134, 135, 135, 136, 138, 137, 139, 139, + 140, 140, 140, 140, 140, 142, 141, 144, 143, 145, + 145, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 147, 148, 149, 150, 151, 152, 154, + 153, 155, 155, 156, 156, 158, 157, 160, 159, 162, + 161, 163, 163, 165, 164, 167, 166, 168, 168, 169, + 169, 169, 169, 169, 169, 169, 169, 169, 171, 170, + 173, 172, 175, 174, 177, 176, 179, 178, 180, 181, + 182, 183, 185, 184, 186, 186, 187, 187, 187, 187, + 188, 189, 190, 192, 191, 193, 193, 194, 194, 196, + 195, 198, 197, 199, 199, 199, 200, 200, 202, 201, + 204, 203, 206, 205, 207, 207, 208, 208, 208, 208, + 208, 208, 209, 210, 211, 212, 213, 214, 216, 215, + 217, 217, 218, 218, 220, 219, 222, 221, 223, 223, + 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 226, 225, 228, 227, 230, 229, 232, 231, 234, 233, + 236, 235, 238, 237, 240, 239, 241, 242, 244, 243, + 245, 245, 246, 246, 248, 247, 250, 249, 251, 251, + 252, 252, 253, 253, 253, 253, 253, 253, 253, 253, + 254, 255, 256, 257, 259, 258, 261, 260, 262, 264, + 263, 265, 267, 266, 268, 268, 269, 269, 271, 270, + 273, 272, 274, 274, 275, 275, 276, 276, 276, 276, + 276, 276, 277, 279, 278, 280, 281, 282, 284, 283, + 285, 285, 286, 286, 288, 287, 290, 289, 291, 291, + 292, 292, 292, 292, 294, 293, 296, 295, 298, 297, + 299, 299, 300, 300, 302, 301, 304, 303, 305, 305, + 306, 306, 307, 307, 307, 307, 307, 307, 307, 307, + 307, 307, 307, 307, 309, 308, 311, 310, 313, 312, 315, 314, 317, 316, 319, 318, 321, 320, 323, 322, - 325, 324, 327, 326, 329, 328, 330, 330, 331, 235, - 332, 332, 333, 333, 334, 334, 334, 334, 334, 334, - 334, 335, 337, 336, 339, 338, 340, 340, 341, 341, - 341, 341, 341, 341, 341, 342, 344, 343, 345, 346, - 347, 349, 348, 350, 350, 351, 351, 353, 352, 355, - 354, 357, 356, 359, 358, 361, 360, 363, 362, 364, - 364, 365, 367, 366, 368, 368, 370, 369, 371, 371, - 372, 372, 372, 372, 372, 373, 375, 374, 377, 376, - 378, 378, 380, 379, 381, 381, 383, 382 + 325, 324, 327, 326, 329, 328, 331, 330, 333, 332, + 334, 334, 335, 237, 336, 336, 337, 337, 338, 338, + 338, 338, 338, 338, 338, 339, 341, 340, 343, 342, + 344, 344, 345, 345, 345, 345, 345, 345, 345, 346, + 348, 347, 349, 350, 351, 353, 352, 354, 354, 355, + 355, 357, 356, 359, 358, 361, 360, 363, 362, 365, + 364, 367, 366, 368, 368, 369, 371, 370, 372, 372, + 374, 373, 375, 375, 376, 376, 376, 376, 376, 377, + 379, 378, 381, 380, 382, 382, 384, 383, 385, 385, + 387, 386 }; const unsigned char @@ -3350,47 +3389,48 @@ namespace isc { namespace dhcp { 0, 2, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, - 0, 4, 0, 1, 3, 5, 0, 4, 0, 4, - 0, 1, 1, 3, 2, 0, 4, 1, 3, 1, - 1, 1, 1, 1, 0, 6, 0, 4, 1, 3, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 3, 3, 3, 3, 3, 3, 0, 6, - 1, 3, 1, 1, 0, 4, 0, 4, 0, 4, - 1, 1, 0, 6, 0, 6, 1, 3, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 0, 4, 0, - 4, 0, 4, 0, 4, 0, 4, 3, 3, 3, - 1, 0, 6, 1, 3, 1, 1, 1, 1, 1, - 1, 1, 0, 6, 0, 1, 1, 3, 0, 4, - 0, 4, 1, 3, 1, 1, 1, 0, 4, 0, - 4, 0, 6, 1, 3, 1, 1, 1, 1, 1, - 1, 3, 3, 3, 3, 3, 3, 0, 6, 0, - 1, 1, 3, 0, 4, 0, 4, 1, 3, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, - 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, - 4, 0, 4, 0, 4, 3, 3, 0, 6, 0, - 1, 1, 3, 0, 4, 0, 4, 0, 1, 1, + 0, 4, 1, 0, 1, 3, 5, 0, 4, 0, + 4, 0, 1, 1, 3, 2, 0, 4, 1, 3, + 1, 1, 1, 1, 1, 0, 6, 0, 4, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 3, 1, 1, 0, 4, 0, 4, 1, 0, 4, - 3, 0, 6, 0, 1, 1, 3, 0, 4, 0, - 4, 0, 1, 1, 3, 1, 1, 1, 1, 1, - 1, 1, 0, 4, 1, 1, 3, 0, 6, 0, - 1, 1, 3, 0, 4, 0, 4, 1, 3, 1, - 1, 1, 0, 4, 0, 6, 0, 1, 1, 3, - 0, 4, 0, 4, 0, 1, 1, 3, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 3, 3, 3, 3, 3, 3, 0, + 6, 1, 3, 1, 1, 0, 4, 0, 4, 0, + 4, 1, 1, 0, 6, 0, 6, 1, 3, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 0, 4, + 0, 4, 0, 4, 0, 4, 0, 4, 3, 3, + 3, 1, 0, 6, 1, 3, 1, 1, 1, 1, + 1, 1, 1, 0, 6, 0, 1, 1, 3, 0, + 4, 0, 4, 1, 3, 1, 1, 1, 0, 4, + 0, 4, 0, 6, 1, 3, 1, 1, 1, 1, + 1, 1, 3, 3, 3, 3, 3, 3, 0, 6, + 0, 1, 1, 3, 0, 4, 0, 4, 1, 3, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, + 0, 4, 0, 4, 0, 4, 3, 3, 0, 6, + 0, 1, 1, 3, 0, 4, 0, 4, 0, 1, + 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 3, 1, 1, 0, 4, 0, 4, 1, 0, + 4, 3, 0, 6, 0, 1, 1, 3, 0, 4, + 0, 4, 0, 1, 1, 3, 1, 1, 1, 1, + 1, 1, 1, 0, 4, 1, 1, 3, 0, 6, + 0, 1, 1, 3, 0, 4, 0, 4, 1, 3, + 1, 1, 1, 1, 0, 4, 0, 4, 0, 6, + 0, 1, 1, 3, 0, 4, 0, 4, 0, 1, + 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, - 0, 6, 0, 4, 0, 6, 1, 3, 0, 4, - 0, 1, 1, 3, 1, 1, 1, 1, 1, 1, - 1, 1, 0, 4, 0, 6, 1, 3, 1, 1, - 1, 1, 1, 1, 1, 3, 0, 4, 3, 3, - 3, 0, 6, 1, 3, 1, 1, 0, 4, 0, - 4, 0, 6, 0, 4, 0, 4, 0, 6, 1, - 3, 1, 0, 6, 1, 3, 0, 4, 1, 3, - 1, 1, 1, 1, 1, 3, 0, 4, 0, 6, - 1, 3, 0, 4, 1, 3, 0, 4 + 0, 4, 0, 4, 0, 6, 0, 4, 0, 6, + 1, 3, 0, 4, 0, 1, 1, 3, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 4, 0, 6, + 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, + 0, 4, 3, 3, 3, 0, 6, 1, 3, 1, + 1, 0, 4, 0, 4, 0, 6, 0, 4, 0, + 4, 0, 6, 1, 3, 1, 0, 6, 1, 3, + 0, 4, 1, 3, 1, 1, 1, 1, 1, 3, + 0, 4, 0, 6, 1, 3, 0, 4, 1, 3, + 0, 4 }; @@ -3412,32 +3452,33 @@ namespace isc { namespace dhcp { "\"4o6-interface\"", "\"4o6-interface-id\"", "\"4o6-subnet\"", "\"option-def\"", "\"option-data\"", "\"name\"", "\"data\"", "\"code\"", "\"space\"", "\"csv-format\"", "\"record-types\"", "\"encapsulate\"", - "\"array\"", "\"pools\"", "\"pool\"", "\"subnet\"", "\"interface\"", - "\"interface-id\"", "\"id\"", "\"rapid-commit\"", "\"reservation-mode\"", - "\"host-reservation-identifiers\"", "\"client-classes\"", "\"test\"", - "\"client-class\"", "\"reservations\"", "\"duid\"", "\"hw-address\"", - "\"circuit-id\"", "\"client-id\"", "\"hostname\"", "\"relay\"", - "\"ip-address\"", "\"hooks-libraries\"", "\"library\"", "\"parameters\"", - "\"expired-leases-processing\"", "\"reclaim-timer-wait-time\"", - "\"flush-reclaimed-timer-wait-time\"", "\"hold-reclaimed-time\"", - "\"max-reclaim-leases\"", "\"max-reclaim-time\"", - "\"unwarned-reclaim-cycles\"", "\"server-id\"", "\"identifier\"", - "\"htype\"", "\"time\"", "\"enterprise-id\"", "\"dhcp4o6-port\"", - "\"control-socket\"", "\"socket-type\"", "\"socket-name\"", - "\"dhcp-ddns\"", "\"Logging\"", "\"loggers\"", "\"output_options\"", - "\"output\"", "\"debuglevel\"", "\"severity\"", "\"Dhcp6\"", - "\"DhcpDdns\"", "TOPLEVEL_JSON", "TOPLEVEL_DHCP4", "SUB_DHCP4", - "SUB_INTERFACES4", "SUB_SUBNET4", "SUB_POOL4", "SUB_RESERVATION", - "SUB_OPTION_DEF", "SUB_OPTION_DATA", "SUB_HOOKS_LIBRARY", - "\"constant string\"", "\"integer\"", "\"floating point\"", - "\"boolean\"", "$accept", "start", "$@1", "$@2", "$@3", "$@4", "$@5", - "$@6", "$@7", "$@8", "$@9", "$@10", "value", "sub_json", "map2", "$@11", - "map_content", "not_empty_map", "list_generic", "$@12", "list2", "$@13", - "list_content", "not_empty_list", "unknown_map_entry", "syntax_map", - "$@14", "global_objects", "global_object", "dhcp4_object", "$@15", - "sub_dhcp4", "$@16", "global_params", "global_param", "valid_lifetime", - "renew_timer", "rebind_timer", "decline_probation_period", - "echo_client_id", "match_client_id", "interfaces_config", "$@17", + "\"array\"", "\"pools\"", "\"pool\"", "\"user-context\"", "\"subnet\"", + "\"interface\"", "\"interface-id\"", "\"id\"", "\"rapid-commit\"", + "\"reservation-mode\"", "\"host-reservation-identifiers\"", + "\"client-classes\"", "\"test\"", "\"client-class\"", "\"reservations\"", + "\"duid\"", "\"hw-address\"", "\"circuit-id\"", "\"client-id\"", + "\"hostname\"", "\"relay\"", "\"ip-address\"", "\"hooks-libraries\"", + "\"library\"", "\"parameters\"", "\"expired-leases-processing\"", + "\"reclaim-timer-wait-time\"", "\"flush-reclaimed-timer-wait-time\"", + "\"hold-reclaimed-time\"", "\"max-reclaim-leases\"", + "\"max-reclaim-time\"", "\"unwarned-reclaim-cycles\"", "\"server-id\"", + "\"identifier\"", "\"htype\"", "\"time\"", "\"enterprise-id\"", + "\"dhcp4o6-port\"", "\"control-socket\"", "\"socket-type\"", + "\"socket-name\"", "\"dhcp-ddns\"", "\"Logging\"", "\"loggers\"", + "\"output_options\"", "\"output\"", "\"debuglevel\"", "\"severity\"", + "\"Dhcp6\"", "\"DhcpDdns\"", "TOPLEVEL_JSON", "TOPLEVEL_DHCP4", + "SUB_DHCP4", "SUB_INTERFACES4", "SUB_SUBNET4", "SUB_POOL4", + "SUB_RESERVATION", "SUB_OPTION_DEF", "SUB_OPTION_DATA", + "SUB_HOOKS_LIBRARY", "\"constant string\"", "\"integer\"", + "\"floating point\"", "\"boolean\"", "$accept", "start", "$@1", "$@2", + "$@3", "$@4", "$@5", "$@6", "$@7", "$@8", "$@9", "$@10", "value", + "sub_json", "map2", "$@11", "map_value", "map_content", "not_empty_map", + "list_generic", "$@12", "list2", "$@13", "list_content", + "not_empty_list", "unknown_map_entry", "syntax_map", "$@14", + "global_objects", "global_object", "dhcp4_object", "$@15", "sub_dhcp4", + "$@16", "global_params", "global_param", "valid_lifetime", "renew_timer", + "rebind_timer", "decline_probation_period", "echo_client_id", + "match_client_id", "interfaces_config", "$@17", "interfaces_config_params", "interfaces_config_param", "sub_interfaces4", "$@18", "interfaces_list", "$@19", "dhcp_socket_type", "$@20", "socket_type", "lease_database", "$@21", "hosts_database", "$@22", @@ -3473,78 +3514,79 @@ namespace isc { namespace dhcp { "option_data_code", "option_data_space", "option_data_csv_format", "pools_list", "$@56", "pools_list_content", "not_empty_pools_list", "pool_list_entry", "$@57", "sub_pool4", "$@58", "pool_params", - "pool_param", "pool_entry", "$@59", "reservations", "$@60", - "reservations_list", "not_empty_reservations_list", "reservation", - "$@61", "sub_reservation", "$@62", "reservation_params", - "not_empty_reservation_params", "reservation_param", "next_server", - "$@63", "server_hostname", "$@64", "boot_file_name", "$@65", - "ip_address", "$@66", "duid", "$@67", "hw_address", "$@68", - "client_id_value", "$@69", "circuit_id_value", "$@70", "hostname", - "$@71", "reservation_client_classes", "$@72", "relay", "$@73", - "relay_map", "$@74", "client_classes", "$@75", "client_classes_list", - "$@76", "client_class_params", "not_empty_client_class_params", - "client_class_param", "client_class_name", "client_class_test", "$@77", - "server_id", "$@78", "server_id_params", "server_id_param", "htype", - "identifier", "$@79", "time", "enterprise_id", "dhcp4o6_port", - "control_socket", "$@80", "control_socket_params", - "control_socket_param", "control_socket_type", "$@81", - "control_socket_name", "$@82", "dhcp_ddns", "$@83", "dhcp6_json_object", - "$@84", "dhcpddns_json_object", "$@85", "logging_object", "$@86", - "logging_params", "logging_param", "loggers", "$@87", "loggers_entries", - "logger_entry", "$@88", "logger_params", "logger_param", "debuglevel", - "severity", "$@89", "output_options_list", "$@90", - "output_options_list_content", "output_entry", "$@91", "output_params", - "output_param", "$@92", YY_NULLPTR + "pool_param", "pool_entry", "$@59", "user_context", "$@60", + "reservations", "$@61", "reservations_list", + "not_empty_reservations_list", "reservation", "$@62", "sub_reservation", + "$@63", "reservation_params", "not_empty_reservation_params", + "reservation_param", "next_server", "$@64", "server_hostname", "$@65", + "boot_file_name", "$@66", "ip_address", "$@67", "duid", "$@68", + "hw_address", "$@69", "client_id_value", "$@70", "circuit_id_value", + "$@71", "hostname", "$@72", "reservation_client_classes", "$@73", + "relay", "$@74", "relay_map", "$@75", "client_classes", "$@76", + "client_classes_list", "$@77", "client_class_params", + "not_empty_client_class_params", "client_class_param", + "client_class_name", "client_class_test", "$@78", "server_id", "$@79", + "server_id_params", "server_id_param", "htype", "identifier", "$@80", + "time", "enterprise_id", "dhcp4o6_port", "control_socket", "$@81", + "control_socket_params", "control_socket_param", "control_socket_type", + "$@82", "control_socket_name", "$@83", "dhcp_ddns", "$@84", + "dhcp6_json_object", "$@85", "dhcpddns_json_object", "$@86", + "logging_object", "$@87", "logging_params", "logging_param", "loggers", + "$@88", "loggers_entries", "logger_entry", "$@89", "logger_params", + "logger_param", "debuglevel", "severity", "$@90", "output_options_list", + "$@91", "output_options_list_content", "output_entry", "$@92", + "output_params", "output_param", "$@93", YY_NULLPTR }; #if PARSER4_DEBUG const unsigned short int Dhcp4Parser::yyrline_[] = { - 0, 207, 207, 207, 208, 208, 209, 209, 210, 210, - 211, 211, 212, 212, 213, 213, 214, 214, 215, 215, - 216, 216, 224, 225, 226, 227, 228, 229, 230, 233, - 238, 238, 250, 251, 254, 258, 265, 265, 273, 273, - 280, 281, 284, 288, 299, 309, 309, 321, 322, 326, - 327, 328, 329, 330, 333, 333, 350, 350, 358, 359, - 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, - 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, - 384, 385, 388, 393, 398, 403, 408, 413, 419, 419, - 429, 430, 433, 434, 437, 437, 445, 445, 455, 455, - 462, 463, 466, 466, 476, 476, 486, 487, 490, 491, - 492, 493, 494, 495, 496, 497, 498, 501, 501, 509, - 509, 517, 517, 525, 525, 533, 533, 541, 546, 551, - 556, 561, 561, 571, 572, 575, 576, 577, 578, 581, - 586, 591, 596, 596, 606, 607, 610, 611, 614, 614, - 622, 622, 630, 631, 632, 635, 636, 639, 639, 647, - 647, 655, 655, 665, 666, 669, 670, 671, 672, 673, - 674, 677, 682, 687, 692, 697, 702, 710, 710, 723, - 724, 727, 728, 735, 735, 758, 758, 767, 768, 772, - 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, - 783, 784, 785, 786, 787, 788, 789, 790, 791, 794, - 794, 802, 802, 810, 810, 818, 818, 826, 826, 834, - 834, 842, 842, 850, 850, 858, 863, 872, 872, 884, - 885, 888, 889, 894, 894, 905, 905, 915, 916, 919, - 920, 923, 924, 925, 926, 927, 928, 929, 930, 933, - 935, 940, 942, 944, 944, 952, 952, 960, 962, 962, - 970, 979, 979, 991, 992, 997, 998, 1003, 1003, 1014, - 1014, 1025, 1026, 1031, 1032, 1037, 1038, 1039, 1040, 1041, - 1042, 1045, 1047, 1047, 1055, 1057, 1059, 1067, 1067, 1079, - 1080, 1083, 1084, 1087, 1087, 1095, 1095, 1103, 1104, 1107, - 1108, 1109, 1112, 1112, 1123, 1123, 1133, 1134, 1137, 1138, - 1141, 1141, 1149, 1149, 1157, 1158, 1161, 1162, 1166, 1167, - 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, - 1180, 1180, 1188, 1188, 1196, 1196, 1204, 1204, 1212, 1212, - 1220, 1220, 1228, 1228, 1236, 1236, 1245, 1245, 1253, 1253, - 1266, 1266, 1276, 1276, 1287, 1287, 1297, 1298, 1301, 1301, - 1309, 1310, 1313, 1314, 1317, 1318, 1319, 1320, 1321, 1322, - 1323, 1326, 1328, 1328, 1339, 1339, 1349, 1350, 1353, 1354, - 1355, 1356, 1357, 1358, 1359, 1362, 1367, 1367, 1375, 1380, - 1387, 1394, 1394, 1404, 1405, 1408, 1409, 1412, 1412, 1420, - 1420, 1430, 1430, 1442, 1442, 1449, 1449, 1461, 1461, 1474, - 1475, 1479, 1483, 1483, 1495, 1496, 1500, 1500, 1508, 1509, - 1512, 1513, 1514, 1515, 1516, 1519, 1523, 1523, 1531, 1531, - 1541, 1542, 1545, 1545, 1553, 1554, 1557, 1557 + 0, 209, 209, 209, 210, 210, 211, 211, 212, 212, + 213, 213, 214, 214, 215, 215, 216, 216, 217, 217, + 218, 218, 226, 227, 228, 229, 230, 231, 232, 235, + 240, 240, 251, 254, 255, 258, 262, 269, 269, 277, + 277, 284, 285, 288, 292, 303, 313, 313, 325, 326, + 330, 331, 332, 333, 334, 337, 337, 354, 354, 362, + 363, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, + 387, 388, 389, 392, 397, 402, 407, 412, 417, 423, + 423, 433, 434, 437, 438, 441, 441, 449, 449, 459, + 459, 466, 467, 470, 470, 480, 480, 490, 491, 494, + 495, 496, 497, 498, 499, 500, 501, 502, 505, 505, + 513, 513, 521, 521, 529, 529, 537, 537, 545, 550, + 555, 560, 565, 565, 575, 576, 579, 580, 581, 582, + 585, 590, 595, 600, 600, 610, 611, 614, 615, 618, + 618, 626, 626, 634, 635, 636, 639, 640, 643, 643, + 651, 651, 659, 659, 669, 670, 673, 674, 675, 676, + 677, 678, 681, 686, 691, 696, 701, 706, 714, 714, + 727, 728, 731, 732, 739, 739, 762, 762, 771, 772, + 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, + 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, + 798, 798, 806, 806, 814, 814, 822, 822, 830, 830, + 838, 838, 846, 846, 854, 854, 862, 867, 876, 876, + 888, 889, 892, 893, 898, 898, 909, 909, 919, 920, + 923, 924, 927, 928, 929, 930, 931, 932, 933, 934, + 937, 939, 944, 946, 948, 948, 956, 956, 964, 966, + 966, 974, 983, 983, 995, 996, 1001, 1002, 1007, 1007, + 1018, 1018, 1029, 1030, 1035, 1036, 1041, 1042, 1043, 1044, + 1045, 1046, 1049, 1051, 1051, 1059, 1061, 1063, 1071, 1071, + 1083, 1084, 1087, 1088, 1091, 1091, 1099, 1099, 1107, 1108, + 1111, 1112, 1113, 1114, 1117, 1117, 1125, 1125, 1135, 1135, + 1145, 1146, 1149, 1150, 1153, 1153, 1161, 1161, 1169, 1170, + 1173, 1174, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, + 1186, 1187, 1188, 1189, 1192, 1192, 1200, 1200, 1208, 1208, + 1216, 1216, 1224, 1224, 1232, 1232, 1240, 1240, 1248, 1248, + 1257, 1257, 1265, 1265, 1278, 1278, 1288, 1288, 1299, 1299, + 1309, 1310, 1313, 1313, 1321, 1322, 1325, 1326, 1329, 1330, + 1331, 1332, 1333, 1334, 1335, 1338, 1340, 1340, 1351, 1351, + 1361, 1362, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1374, + 1379, 1379, 1387, 1392, 1399, 1406, 1406, 1416, 1417, 1420, + 1421, 1424, 1424, 1432, 1432, 1442, 1442, 1454, 1454, 1461, + 1461, 1473, 1473, 1486, 1487, 1491, 1495, 1495, 1507, 1508, + 1512, 1512, 1520, 1521, 1524, 1525, 1526, 1527, 1528, 1531, + 1535, 1535, 1543, 1543, 1553, 1554, 1557, 1557, 1565, 1566, + 1569, 1569 }; // Print the state stack on the debug stream. @@ -3579,8 +3621,8 @@ namespace isc { namespace dhcp { #line 14 "dhcp4_parser.yy" // lalr1.cc:1167 } } // isc::dhcp -#line 3583 "dhcp4_parser.cc" // lalr1.cc:1167 -#line 1565 "dhcp4_parser.yy" // lalr1.cc:1168 +#line 3625 "dhcp4_parser.cc" // lalr1.cc:1167 +#line 1577 "dhcp4_parser.yy" // lalr1.cc:1168 void diff --git a/src/bin/dhcp4/dhcp4_parser.h b/src/bin/dhcp4/dhcp4_parser.h index fd3299cd94..2489608a55 100644 --- a/src/bin/dhcp4/dhcp4_parser.h +++ b/src/bin/dhcp4/dhcp4_parser.h @@ -305,6 +305,7 @@ namespace isc { namespace dhcp { union union_type { // value + // map_value // socket_type char dummy1[sizeof(ElementPtr)]; @@ -389,66 +390,67 @@ namespace isc { namespace dhcp { TOKEN_ARRAY = 302, TOKEN_POOLS = 303, TOKEN_POOL = 304, - TOKEN_SUBNET = 305, - TOKEN_INTERFACE = 306, - TOKEN_INTERFACE_ID = 307, - TOKEN_ID = 308, - TOKEN_RAPID_COMMIT = 309, - TOKEN_RESERVATION_MODE = 310, - TOKEN_HOST_RESERVATION_IDENTIFIERS = 311, - TOKEN_CLIENT_CLASSES = 312, - TOKEN_TEST = 313, - TOKEN_CLIENT_CLASS = 314, - TOKEN_RESERVATIONS = 315, - TOKEN_DUID = 316, - TOKEN_HW_ADDRESS = 317, - TOKEN_CIRCUIT_ID = 318, - TOKEN_CLIENT_ID = 319, - TOKEN_HOSTNAME = 320, - TOKEN_RELAY = 321, - TOKEN_IP_ADDRESS = 322, - TOKEN_HOOKS_LIBRARIES = 323, - TOKEN_LIBRARY = 324, - TOKEN_PARAMETERS = 325, - TOKEN_EXPIRED_LEASES_PROCESSING = 326, - TOKEN_RECLAIM_TIMER_WAIT_TIME = 327, - TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 328, - TOKEN_HOLD_RECLAIMED_TIME = 329, - TOKEN_MAX_RECLAIM_LEASES = 330, - TOKEN_MAX_RECLAIM_TIME = 331, - TOKEN_UNWARNED_RECLAIM_CYCLES = 332, - TOKEN_SERVER_ID = 333, - TOKEN_IDENTIFIER = 334, - TOKEN_HTYPE = 335, - TOKEN_TIME = 336, - TOKEN_ENTERPRISE_ID = 337, - TOKEN_DHCP4O6_PORT = 338, - TOKEN_CONTROL_SOCKET = 339, - TOKEN_SOCKET_TYPE = 340, - TOKEN_SOCKET_NAME = 341, - TOKEN_DHCP_DDNS = 342, - TOKEN_LOGGING = 343, - TOKEN_LOGGERS = 344, - TOKEN_OUTPUT_OPTIONS = 345, - TOKEN_OUTPUT = 346, - TOKEN_DEBUGLEVEL = 347, - TOKEN_SEVERITY = 348, - TOKEN_DHCP6 = 349, - TOKEN_DHCPDDNS = 350, - TOKEN_TOPLEVEL_JSON = 351, - TOKEN_TOPLEVEL_DHCP4 = 352, - TOKEN_SUB_DHCP4 = 353, - TOKEN_SUB_INTERFACES4 = 354, - TOKEN_SUB_SUBNET4 = 355, - TOKEN_SUB_POOL4 = 356, - TOKEN_SUB_RESERVATION = 357, - TOKEN_SUB_OPTION_DEF = 358, - TOKEN_SUB_OPTION_DATA = 359, - TOKEN_SUB_HOOKS_LIBRARY = 360, - TOKEN_STRING = 361, - TOKEN_INTEGER = 362, - TOKEN_FLOAT = 363, - TOKEN_BOOLEAN = 364 + TOKEN_USER_CONTEXT = 305, + TOKEN_SUBNET = 306, + TOKEN_INTERFACE = 307, + TOKEN_INTERFACE_ID = 308, + TOKEN_ID = 309, + TOKEN_RAPID_COMMIT = 310, + TOKEN_RESERVATION_MODE = 311, + TOKEN_HOST_RESERVATION_IDENTIFIERS = 312, + TOKEN_CLIENT_CLASSES = 313, + TOKEN_TEST = 314, + TOKEN_CLIENT_CLASS = 315, + TOKEN_RESERVATIONS = 316, + TOKEN_DUID = 317, + TOKEN_HW_ADDRESS = 318, + TOKEN_CIRCUIT_ID = 319, + TOKEN_CLIENT_ID = 320, + TOKEN_HOSTNAME = 321, + TOKEN_RELAY = 322, + TOKEN_IP_ADDRESS = 323, + TOKEN_HOOKS_LIBRARIES = 324, + TOKEN_LIBRARY = 325, + TOKEN_PARAMETERS = 326, + TOKEN_EXPIRED_LEASES_PROCESSING = 327, + TOKEN_RECLAIM_TIMER_WAIT_TIME = 328, + TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 329, + TOKEN_HOLD_RECLAIMED_TIME = 330, + TOKEN_MAX_RECLAIM_LEASES = 331, + TOKEN_MAX_RECLAIM_TIME = 332, + TOKEN_UNWARNED_RECLAIM_CYCLES = 333, + TOKEN_SERVER_ID = 334, + TOKEN_IDENTIFIER = 335, + TOKEN_HTYPE = 336, + TOKEN_TIME = 337, + TOKEN_ENTERPRISE_ID = 338, + TOKEN_DHCP4O6_PORT = 339, + TOKEN_CONTROL_SOCKET = 340, + TOKEN_SOCKET_TYPE = 341, + TOKEN_SOCKET_NAME = 342, + TOKEN_DHCP_DDNS = 343, + TOKEN_LOGGING = 344, + TOKEN_LOGGERS = 345, + TOKEN_OUTPUT_OPTIONS = 346, + TOKEN_OUTPUT = 347, + TOKEN_DEBUGLEVEL = 348, + TOKEN_SEVERITY = 349, + TOKEN_DHCP6 = 350, + TOKEN_DHCPDDNS = 351, + TOKEN_TOPLEVEL_JSON = 352, + TOKEN_TOPLEVEL_DHCP4 = 353, + TOKEN_SUB_DHCP4 = 354, + TOKEN_SUB_INTERFACES4 = 355, + TOKEN_SUB_SUBNET4 = 356, + TOKEN_SUB_POOL4 = 357, + TOKEN_SUB_RESERVATION = 358, + TOKEN_SUB_OPTION_DEF = 359, + TOKEN_SUB_OPTION_DATA = 360, + TOKEN_SUB_HOOKS_LIBRARY = 361, + TOKEN_STRING = 362, + TOKEN_INTEGER = 363, + TOKEN_FLOAT = 364, + TOKEN_BOOLEAN = 365 }; }; @@ -755,6 +757,10 @@ namespace isc { namespace dhcp { symbol_type make_POOL (const location_type& l); + static inline + symbol_type + make_USER_CONTEXT (const location_type& l); + static inline symbol_type make_SUBNET (const location_type& l); @@ -1200,12 +1206,12 @@ namespace isc { namespace dhcp { enum { yyeof_ = 0, - yylast_ = 647, ///< Last index in yytable_. - yynnts_ = 274, ///< Number of nonterminal symbols. + yylast_ = 653, ///< Last index in yytable_. + yynnts_ = 277, ///< Number of nonterminal symbols. yyfinal_ = 22, ///< Termination state number. yyterror_ = 1, yyerrcode_ = 256, - yyntokens_ = 110 ///< Number of tokens. + yyntokens_ = 111 ///< Number of tokens. }; @@ -1258,9 +1264,9 @@ namespace isc { namespace dhcp { 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 + 105, 106, 107, 108, 109, 110 }; - const unsigned int user_token_number_max_ = 364; + const unsigned int user_token_number_max_ = 365; const token_number_type undef_token_ = 2; if (static_cast(t) <= yyeof_) @@ -1293,24 +1299,25 @@ namespace isc { namespace dhcp { { switch (other.type_get ()) { - case 122: // value - case 161: // socket_type + case 123: // value + case 127: // map_value + case 163: // socket_type value.copy< ElementPtr > (other.value); break; - case 109: // "boolean" + case 110: // "boolean" value.copy< bool > (other.value); break; - case 108: // "floating point" + case 109: // "floating point" value.copy< double > (other.value); break; - case 107: // "integer" + case 108: // "integer" value.copy< int64_t > (other.value); break; - case 106: // "constant string" + case 107: // "constant string" value.copy< std::string > (other.value); break; @@ -1331,24 +1338,25 @@ namespace isc { namespace dhcp { (void) v; switch (this->type_get ()) { - case 122: // value - case 161: // socket_type + case 123: // value + case 127: // map_value + case 163: // socket_type value.copy< ElementPtr > (v); break; - case 109: // "boolean" + case 110: // "boolean" value.copy< bool > (v); break; - case 108: // "floating point" + case 109: // "floating point" value.copy< double > (v); break; - case 107: // "integer" + case 108: // "integer" value.copy< int64_t > (v); break; - case 106: // "constant string" + case 107: // "constant string" value.copy< std::string > (v); break; @@ -1428,24 +1436,25 @@ namespace isc { namespace dhcp { // Type destructor. switch (yytype) { - case 122: // value - case 161: // socket_type + case 123: // value + case 127: // map_value + case 163: // socket_type value.template destroy< ElementPtr > (); break; - case 109: // "boolean" + case 110: // "boolean" value.template destroy< bool > (); break; - case 108: // "floating point" + case 109: // "floating point" value.template destroy< double > (); break; - case 107: // "integer" + case 108: // "integer" value.template destroy< int64_t > (); break; - case 106: // "constant string" + case 107: // "constant string" value.template destroy< std::string > (); break; @@ -1472,24 +1481,25 @@ namespace isc { namespace dhcp { super_type::move(s); switch (this->type_get ()) { - case 122: // value - case 161: // socket_type + case 123: // value + case 127: // map_value + case 163: // socket_type value.move< ElementPtr > (s.value); break; - case 109: // "boolean" + case 110: // "boolean" value.move< bool > (s.value); break; - case 108: // "floating point" + case 109: // "floating point" value.move< double > (s.value); break; - case 107: // "integer" + case 108: // "integer" value.move< int64_t > (s.value); break; - case 106: // "constant string" + case 107: // "constant string" value.move< std::string > (s.value); break; @@ -1558,7 +1568,8 @@ namespace isc { namespace dhcp { 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 + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365 }; return static_cast (yytoken_number_[type]); } @@ -1851,6 +1862,12 @@ namespace isc { namespace dhcp { return symbol_type (token::TOKEN_POOL, l); } + Dhcp4Parser::symbol_type + Dhcp4Parser::make_USER_CONTEXT (const location_type& l) + { + return symbol_type (token::TOKEN_USER_CONTEXT, l); + } + Dhcp4Parser::symbol_type Dhcp4Parser::make_SUBNET (const location_type& l) { @@ -2214,7 +2231,7 @@ namespace isc { namespace dhcp { #line 14 "dhcp4_parser.yy" // lalr1.cc:377 } } // isc::dhcp -#line 2218 "dhcp4_parser.h" // lalr1.cc:377 +#line 2235 "dhcp4_parser.h" // lalr1.cc:377 diff --git a/src/bin/dhcp4/location.hh b/src/bin/dhcp4/location.hh index 899035dd2b..b6625176fe 100644 --- a/src/bin/dhcp4/location.hh +++ b/src/bin/dhcp4/location.hh @@ -1,4 +1,4 @@ -// Generated 201701102225 +// Generated 201701120056 // A Bison parser, made by GNU Bison 3.0.4. // Locations for Bison parsers in C++ diff --git a/src/bin/dhcp4/position.hh b/src/bin/dhcp4/position.hh index 02c1781402..d2eba31629 100644 --- a/src/bin/dhcp4/position.hh +++ b/src/bin/dhcp4/position.hh @@ -1,4 +1,4 @@ -// Generated 201701102225 +// Generated 201701120056 // A Bison parser, made by GNU Bison 3.0.4. // Positions for Bison parsers in C++ diff --git a/src/bin/dhcp4/stack.hh b/src/bin/dhcp4/stack.hh index fec618b6b9..0ee3069412 100644 --- a/src/bin/dhcp4/stack.hh +++ b/src/bin/dhcp4/stack.hh @@ -1,4 +1,4 @@ -// Generated 201701102225 +// Generated 201701120056 // A Bison parser, made by GNU Bison 3.0.4. // Stack handling for Bison parsers in C++ diff --git a/src/bin/dhcp6/dhcp6_lexer.cc b/src/bin/dhcp6/dhcp6_lexer.cc index 145382d4d0..0b38bf7c4b 100644 --- a/src/bin/dhcp6/dhcp6_lexer.cc +++ b/src/bin/dhcp6/dhcp6_lexer.cc @@ -467,8 +467,8 @@ static void yynoreturn yy_fatal_error (yyconst char* msg ); (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 117 -#define YY_END_OF_BUFFER 118 +#define YY_NUM_RULES 118 +#define YY_END_OF_BUFFER 119 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -476,105 +476,107 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_accept[889] = +static yyconst flex_int16_t yy_accept[898] = { 0, - 110, 110, 0, 0, 0, 0, 0, 0, 0, 0, - 118, 116, 10, 11, 116, 1, 110, 107, 110, 110, - 116, 109, 108, 116, 116, 116, 116, 116, 103, 104, - 116, 116, 116, 105, 106, 5, 5, 5, 116, 116, - 116, 10, 11, 0, 0, 99, 0, 0, 0, 0, + 111, 111, 0, 0, 0, 0, 0, 0, 0, 0, + 119, 117, 10, 11, 117, 1, 111, 108, 111, 111, + 117, 110, 109, 117, 117, 117, 117, 117, 104, 105, + 117, 117, 117, 106, 107, 5, 5, 5, 117, 117, + 117, 10, 11, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1, 110, 110, - 0, 109, 110, 3, 2, 6, 0, 110, 0, 0, - 0, 0, 0, 0, 4, 0, 0, 9, 0, 100, - 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 111, 111, + 0, 110, 111, 3, 2, 6, 0, 111, 0, 0, + 0, 0, 0, 0, 4, 0, 0, 9, 0, 101, + 0, 0, 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 79, 80, 0, 0, 0, 101, 0, 0, 0, + 0, 80, 81, 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, 45, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 115, 113, 0, - 112, 111, 0, 0, 0, 78, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 116, 114, 0, + 113, 112, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 114, 111, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, + 0, 0, 0, 0, 0, 0, 115, 112, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, - 33, 0, 0, 0, 0, 0, 64, 0, 0, 0, + 33, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 60, 83, 18, 0, 19, 0, 0, - 0, 97, 12, 0, 0, 71, 0, 0, 0, 0, + 0, 0, 0, 61, 84, 18, 0, 19, 0, 0, + 0, 0, 98, 12, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 82, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 34, 0, 0, 0, 0, 0, 0, 0, 72, - 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, + 73, 0, 0, 0, 0, 0, 0, 68, 0, 0, + 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 55, 0, 0, 0, 0, 0, 0, 36, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 42, 0, 0, 0, 0, 52, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, + 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, + 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 76, 53, 0, 0, 0, 0, 0, - 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, - 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, + 0, 0, 0, 0, 0, 0, 77, 54, 0, 0, + 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 20, 35, 0, 0, 63, 0, 17, 0, - 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, + 0, 29, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 20, 35, 0, 0, + 64, 0, 17, 0, 0, 0, 0, 0, 0, 0, + 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, - 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 77, 0, 0, 0, 0, 0, 0, 68, 56, + 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, + 0, 0, 0, 0, 69, 57, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 66, 82, + 0, 14, 0, 74, 0, 0, 0, 0, 0, 0, + 30, 0, 76, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 65, 81, 0, 14, 0, 73, 0, 0, - 0, 0, 0, 0, 30, 0, 75, 0, 37, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, - 0, 31, 0, 0, 0, 0, 0, 0, 0, 26, + 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 50, 0, 31, 0, - 0, 0, 95, 94, 0, 0, 59, 0, 0, 0, - 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, - 44, 0, 62, 0, 23, 0, 0, 0, 0, 46, - 27, 0, 69, 0, 0, 61, 0, 0, 0, 0, - 0, 40, 84, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 58, 93, 0, 0, 0, 0, 0, 0, 0, - 16, 0, 15, 0, 0, 54, 0, 0, 0, 0, - 0, 25, 0, 38, 0, 0, 0, 0, 74, 0, + 0, 0, 0, 0, 0, 0, 26, 0, 0, 96, + 95, 0, 0, 0, 60, 0, 0, 0, 0, 93, + 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, + 63, 0, 23, 0, 0, 0, 0, 47, 27, 0, + 70, 0, 0, 62, 0, 42, 0, 0, 0, 0, + 40, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 59, 94, 0, 0, 0, 0, 0, 0, 0, 16, + 0, 15, 0, 0, 55, 0, 0, 0, 0, 0, + 25, 0, 38, 0, 0, 0, 0, 75, 0, 0, - 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, - 47, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 89, 24, 0, 0, 0, 0, 39, 0, 0, 88, + 0, 0, 0, 0, 0, 91, 0, 0, 0, 48, + 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, + 24, 0, 0, 0, 0, 39, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 50, 0, 0, 0, 0, 0, 86, - 91, 28, 0, 0, 0, 85, 0, 0, 0, 0, - 0, 0, 0, 51, 0, 0, 87, 0 + 0, 0, 51, 0, 0, 0, 0, 0, 87, 92, + 28, 0, 0, 0, 86, 0, 0, 0, 0, 0, + 0, 0, 52, 0, 0, 88, 0 + } ; static yyconst YY_CHAR yy_ec[256] = @@ -619,213 +621,215 @@ static yyconst YY_CHAR yy_meta[61] = 5, 3, 5, 5, 3, 3, 3, 3, 3, 3 } ; -static yyconst flex_uint16_t yy_base[901] = +static yyconst flex_uint16_t yy_base[910] = { 0, 0, 0, 59, 62, 65, 0, 63, 67, 64, 66, - 1192, 1193, 83, 1188, 125, 0, 174, 1193, 179, 185, - 80, 192, 1193, 1170, 87, 79, 37, 66, 1193, 1193, - 83, 156, 164, 1193, 1193, 1193, 110, 1176, 1140, 0, - 1168, 118, 1183, 190, 210, 1193, 1142, 1157, 171, 234, - 1132, 172, 201, 154, 1136, 173, 229, 229, 1145, 1144, - 163, 244, 191, 249, 232, 187, 1143, 0, 286, 292, - 303, 309, 313, 1193, 0, 1193, 320, 324, 240, 248, - 174, 265, 296, 261, 1193, 1140, 1171, 1193, 314, 1193, - 1122, 1137, 1168, 275, 1131, 1166, 0, 340, 1120, 1126, + 1201, 1202, 83, 1197, 125, 0, 174, 1202, 179, 185, + 80, 192, 1202, 1179, 87, 79, 37, 66, 1202, 1202, + 83, 156, 164, 1202, 1202, 1202, 110, 1185, 1149, 0, + 1177, 118, 1192, 190, 210, 1202, 1151, 1166, 171, 234, + 1141, 172, 201, 154, 1145, 173, 229, 229, 1154, 1153, + 163, 244, 191, 249, 232, 187, 1152, 0, 286, 292, + 303, 309, 313, 1202, 0, 1202, 320, 324, 240, 248, + 174, 265, 296, 261, 1202, 1149, 1180, 1202, 314, 1202, + 1131, 1146, 1177, 275, 1140, 1175, 0, 340, 1129, 1135, - 204, 1114, 1115, 306, 1129, 1122, 192, 259, 1111, 299, - 1106, 1152, 290, 1109, 1150, 1124, 1121, 1121, 1115, 293, - 1109, 1102, 1101, 306, 1142, 1101, 1102, 1110, 1099, 336, - 187, 1110, 1111, 1109, 1093, 1097, 1093, 1086, 1101, 1094, - 0, 317, 340, 335, 331, 341, 361, 1093, 1193, 0, - 1088, 1193, 1193, 1131, 1094, 1129, 1193, 388, 1098, 1093, - 1092, 1078, 1119, 1093, 1074, 1081, 1086, 1075, 1085, 1087, - 1082, 1075, 1076, 1067, 1079, 1072, 1063, 1065, 1078, 1193, - 1065, 1072, 1075, 1058, 1098, 1057, 1065, 1095, 1094, 1064, - 1059, 1052, 1065, 1048, 1049, 1046, 1051, 1055, 1051, 1055, + 204, 1123, 1124, 306, 1138, 1131, 192, 259, 1120, 299, + 1115, 1161, 290, 1118, 1159, 1133, 1130, 1130, 1124, 293, + 1118, 1111, 1110, 306, 1151, 1110, 1111, 1119, 1108, 336, + 187, 1119, 1120, 1118, 1102, 1106, 1102, 1095, 1110, 1103, + 0, 317, 340, 335, 331, 341, 361, 1102, 1202, 0, + 1097, 1202, 1202, 1140, 1103, 1138, 1202, 388, 1107, 1102, + 1101, 1087, 1128, 1102, 1083, 1090, 1095, 1084, 1094, 1096, + 1091, 1084, 1085, 1076, 1088, 1081, 1072, 1074, 1087, 1202, + 1074, 1081, 1084, 1067, 1107, 1066, 1074, 1104, 1103, 1073, + 1068, 1061, 1074, 1057, 1058, 1055, 1060, 1064, 1060, 1064, - 1049, 322, 1056, 1051, 1050, 1034, 1048, 1042, 1048, 1037, - 1031, 1043, 1042, 1045, 1029, 1035, 365, 1193, 1193, 366, - 1193, 1193, 1024, 0, 376, 1193, 1033, 416, 1018, 1027, - 1068, 1022, 1031, 1065, 1028, 1025, 1026, 382, 1061, 1016, - 1014, 1010, 1012, 1019, 1050, 1008, 410, 1019, 1019, 1004, - 1005, 1016, 1014, 1009, 1016, 1011, 998, 998, 1042, 998, - 992, 998, 988, 994, 998, 390, 354, 1002, 991, 991, - 1002, 986, 978, 979, 983, 993, 981, 991, 990, 989, - 1022, 1021, 1020, 974, 1018, 984, 1193, 1193, 983, 0, - 1015, 1014, 980, 970, 449, 1011, 963, 1193, 966, 965, + 1058, 322, 1065, 1060, 1059, 1043, 1057, 1051, 1057, 1046, + 1040, 1052, 1051, 1054, 1038, 1044, 365, 1202, 1202, 366, + 1202, 1202, 1033, 0, 376, 1202, 1042, 416, 1027, 1036, + 1077, 1031, 1040, 1074, 1037, 1034, 1035, 382, 1070, 1025, + 1023, 1019, 1021, 1028, 1059, 1017, 410, 1028, 1028, 1013, + 1014, 1025, 1023, 1018, 1025, 1020, 1007, 1007, 1051, 1007, + 1001, 1007, 997, 1003, 1007, 390, 354, 1011, 1000, 1000, + 1011, 995, 987, 988, 992, 1002, 990, 1000, 999, 998, + 1031, 1030, 1029, 983, 110, 994, 1202, 1202, 993, 0, + 1025, 1024, 990, 980, 449, 1021, 973, 1202, 976, 975, - 1193, 967, 964, 975, 971, 960, 1193, 956, 957, 967, - 965, 993, 952, 991, 1193, 950, 964, 988, 992, 958, - 952, 954, 955, 982, 944, 940, 939, 940, 948, 1193, - 939, 933, 945, 935, 934, 930, 1193, 975, 929, 922, - 967, 929, 937, 931, 935, 110, 962, 917, 920, 926, - 916, 962, 914, 1193, 1193, 1193, 918, 1193, 954, 924, - 0, 1193, 1193, 915, 920, 1193, 950, 914, 908, 918, - 917, 903, 916, 938, 899, 901, 911, 911, 898, 908, - 901, 906, 898, 905, 1193, 892, 901, 905, 889, 900, - 885, 879, 884, 881, 896, 922, 335, 879, 880, 884, + 1202, 977, 974, 985, 981, 970, 1202, 966, 967, 977, + 975, 1003, 962, 1001, 1202, 960, 974, 998, 1002, 968, + 962, 964, 965, 992, 954, 950, 949, 950, 958, 1202, + 949, 943, 955, 945, 944, 940, 1202, 985, 939, 932, + 977, 939, 947, 941, 945, 389, 972, 927, 930, 936, + 926, 972, 924, 1202, 1202, 1202, 928, 1202, 937, 963, + 933, 0, 1202, 1202, 924, 929, 1202, 959, 923, 917, + 927, 926, 912, 925, 947, 908, 910, 920, 920, 907, + 917, 910, 915, 907, 914, 1202, 901, 910, 914, 898, + 909, 894, 888, 893, 890, 905, 931, 335, 888, 889, - 876, 1193, 877, 408, 889, 880, 914, 877, 912, 1193, - 870, 868, 884, 908, 865, 906, 1193, 401, 876, 869, - 1193, 862, 907, 874, 900, 863, 854, 897, 867, 858, - 894, 858, 859, 863, 890, 860, 861, 854, 845, 856, - 859, 854, 849, 854, 851, 854, 849, 882, 881, 835, - 839, 845, 1193, 834, 842, 842, 828, 873, 838, 1193, - 831, 824, 826, 816, 820, 861, 818, 816, 825, 815, - 823, 808, 347, 1193, 859, 825, 819, 856, 1193, 815, - 808, 823, 818, 807, 817, 803, 804, 817, 800, 840, - 804, 811, 802, 810, 806, 839, 791, 791, 802, 801, + 893, 885, 1202, 886, 408, 898, 889, 923, 886, 921, + 1202, 879, 877, 893, 917, 874, 915, 1202, 401, 885, + 875, 877, 1202, 870, 915, 882, 908, 871, 862, 905, + 875, 866, 902, 866, 867, 871, 898, 868, 869, 862, + 853, 864, 867, 862, 857, 862, 859, 862, 857, 890, + 889, 843, 847, 853, 1202, 842, 850, 850, 836, 881, + 846, 1202, 839, 832, 834, 824, 828, 869, 826, 824, + 833, 823, 831, 816, 367, 1202, 867, 833, 823, 826, + 863, 1202, 822, 815, 830, 825, 814, 824, 810, 811, + 824, 807, 847, 811, 818, 809, 817, 813, 846, 798, - 788, 786, 787, 1193, 1193, 799, 800, 382, 785, 783, - 827, 826, 1193, 792, 790, 823, 781, 821, 782, 772, - 766, 773, 775, 777, 781, 813, 782, 759, 1193, 805, - 774, 1193, 778, 764, 759, 765, 759, 798, 802, 758, - 753, 765, 754, 763, 756, 765, 749, 748, 1193, 762, - 745, 745, 409, 743, 758, 738, 752, 747, 737, 748, - 735, 735, 1193, 1193, 775, 737, 1193, 737, 1193, 736, - 738, 731, 730, 739, 729, 771, 1193, 729, 725, 723, - 733, 720, 733, 764, 763, 719, 721, 1193, 715, 725, - 753, 712, 726, 725, 716, 723, 703, 720, 750, 749, + 798, 809, 808, 795, 793, 794, 1202, 1202, 806, 807, + 382, 792, 790, 834, 833, 1202, 799, 797, 830, 788, + 828, 789, 779, 773, 780, 782, 784, 788, 820, 789, + 766, 1202, 812, 769, 780, 1202, 784, 770, 765, 771, + 765, 804, 808, 764, 759, 771, 760, 769, 762, 771, + 755, 754, 1202, 768, 751, 751, 439, 749, 764, 744, + 758, 753, 743, 754, 741, 741, 1202, 1202, 781, 743, + 1202, 743, 1202, 742, 744, 737, 736, 745, 735, 777, + 1202, 735, 731, 729, 739, 738, 725, 738, 769, 768, + 724, 726, 1202, 720, 730, 758, 717, 731, 730, 721, - 1193, 710, 438, 427, 716, 716, 699, 703, 713, 742, - 703, 740, 699, 738, 699, 702, 694, 700, 693, 687, - 689, 1193, 696, 695, 694, 680, 680, 686, 1193, 1193, - 693, 689, 675, 721, 682, 685, 672, 679, 675, 670, - 684, 683, 1193, 1193, 679, 1193, 679, 1193, 664, 679, - 668, 707, 701, 705, 1193, 661, 1193, 665, 1193, 655, - 656, 666, 653, 660, 697, 423, 696, 695, 662, 655, - 429, 644, 640, 609, 649, 1193, 609, 82, 172, 266, - 368, 379, 383, 391, 439, 397, 441, 398, 445, 1193, - 413, 1193, 412, 427, 470, 471, 427, 473, 440, 1193, + 728, 708, 725, 755, 754, 1202, 715, 438, 427, 721, + 721, 704, 708, 718, 747, 708, 745, 704, 743, 704, + 707, 699, 705, 698, 692, 694, 1202, 701, 700, 699, + 681, 684, 684, 690, 1202, 1202, 697, 693, 679, 725, + 686, 689, 676, 683, 679, 674, 688, 687, 1202, 1202, + 683, 1202, 683, 1202, 668, 683, 672, 711, 705, 709, + 1202, 665, 1202, 669, 1202, 659, 660, 670, 657, 664, + 687, 423, 679, 660, 626, 604, 79, 429, 172, 277, + 360, 417, 1202, 397, 402, 406, 400, 411, 415, 407, + 409, 460, 419, 470, 425, 472, 1202, 446, 1202, 431, - 434, 476, 1193, 1193, 437, 437, 1193, 439, 439, 440, - 488, 1193, 489, 452, 445, 458, 460, 460, 457, 462, - 1193, 455, 1193, 464, 1193, 465, 462, 455, 468, 1193, - 1193, 498, 1193, 471, 462, 1193, 476, 473, 508, 509, - 472, 1193, 1193, 460, 507, 480, 509, 469, 473, 517, - 483, 519, 490, 480, 522, 476, 474, 520, 493, 489, - 528, 1193, 1193, 486, 530, 487, 527, 486, 534, 494, - 1193, 499, 1193, 492, 505, 1193, 502, 511, 499, 509, - 503, 1193, 503, 1193, 506, 502, 501, 511, 1193, 545, - 515, 518, 553, 513, 517, 512, 557, 553, 554, 526, + 439, 475, 476, 432, 478, 453, 1202, 447, 489, 1202, + 1202, 450, 491, 451, 1202, 448, 448, 449, 497, 1202, + 498, 461, 454, 467, 469, 469, 466, 471, 1202, 464, + 1202, 473, 1202, 474, 471, 464, 477, 1202, 1202, 507, + 1202, 480, 471, 1202, 485, 1202, 482, 517, 518, 481, + 1202, 1202, 469, 516, 489, 518, 478, 482, 526, 492, + 528, 499, 489, 531, 485, 483, 529, 502, 498, 537, + 1202, 1202, 495, 539, 496, 536, 495, 543, 503, 1202, + 508, 1202, 501, 514, 1202, 511, 520, 508, 518, 512, + 1202, 512, 1202, 515, 511, 510, 520, 1202, 554, 524, - 518, 524, 522, 526, 565, 520, 1193, 533, 521, 522, - 1193, 538, 527, 530, 541, 533, 541, 543, 1193, 577, - 578, 574, 542, 529, 548, 583, 550, 551, 586, 553, - 1193, 1193, 541, 546, 558, 546, 1193, 546, 548, 1193, - 552, 557, 554, 557, 560, 553, 595, 554, 561, 557, - 570, 562, 568, 557, 570, 575, 610, 565, 579, 571, - 584, 580, 616, 1193, 617, 618, 583, 582, 583, 1193, - 1193, 1193, 622, 576, 590, 1193, 620, 581, 580, 582, - 591, 630, 590, 1193, 598, 633, 1193, 1193, 639, 646, - 653, 660, 667, 674, 678, 683, 685, 687, 689, 691 + 527, 562, 522, 526, 521, 566, 562, 563, 535, 527, + 533, 531, 535, 574, 529, 1202, 542, 530, 531, 1202, + 547, 536, 539, 550, 542, 550, 552, 1202, 586, 587, + 583, 551, 538, 557, 592, 559, 560, 595, 562, 1202, + 1202, 550, 555, 567, 555, 1202, 555, 557, 1202, 561, + 566, 563, 566, 569, 562, 604, 563, 570, 566, 579, + 571, 577, 566, 579, 584, 619, 574, 588, 580, 593, + 589, 625, 1202, 626, 627, 592, 591, 592, 1202, 1202, + 1202, 631, 585, 599, 1202, 629, 590, 589, 591, 600, + 639, 599, 1202, 607, 642, 1202, 1202, 648, 655, 662, + 669, 676, 683, 687, 692, 694, 696, 698, 700 } ; -static yyconst flex_int16_t yy_def[901] = +static yyconst flex_int16_t yy_def[910] = { 0, - 888, 1, 889, 889, 1, 5, 5, 5, 5, 5, - 888, 888, 888, 888, 888, 890, 888, 888, 888, 888, - 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, - 888, 888, 888, 888, 888, 888, 888, 888, 888, 891, - 888, 888, 888, 892, 15, 888, 45, 45, 45, 893, + 897, 1, 898, 898, 1, 5, 5, 5, 5, 5, + 897, 897, 897, 897, 897, 899, 897, 897, 897, 897, + 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, + 897, 897, 897, 897, 897, 897, 897, 897, 897, 900, + 897, 897, 897, 901, 15, 897, 45, 45, 45, 902, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 890, 888, 888, - 888, 888, 888, 888, 894, 888, 888, 888, 888, 888, - 888, 888, 888, 888, 888, 888, 891, 888, 892, 888, - 895, 45, 45, 45, 45, 896, 45, 893, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 899, 897, 897, + 897, 897, 897, 897, 903, 897, 897, 897, 897, 897, + 897, 897, 897, 897, 897, 897, 900, 897, 901, 897, + 904, 45, 45, 45, 45, 905, 45, 902, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 894, 888, 888, 888, 888, 888, 888, 888, 888, 897, - 45, 888, 888, 45, 45, 896, 888, 893, 45, 45, + 903, 897, 897, 897, 897, 897, 897, 897, 897, 906, + 45, 897, 897, 45, 45, 905, 897, 902, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 888, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 897, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 888, 888, 888, 888, - 888, 888, 888, 898, 45, 888, 45, 893, 45, 45, + 45, 45, 45, 45, 45, 45, 897, 897, 897, 897, + 897, 897, 897, 907, 45, 897, 45, 902, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 888, 888, 888, 899, - 45, 45, 45, 45, 893, 45, 45, 888, 45, 45, + 45, 45, 45, 45, 45, 45, 897, 897, 897, 908, + 45, 45, 45, 45, 902, 45, 45, 897, 45, 45, - 888, 45, 45, 45, 45, 45, 888, 45, 45, 45, - 45, 45, 45, 45, 888, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 888, - 45, 45, 45, 45, 45, 45, 888, 45, 45, 45, + 897, 45, 45, 45, 45, 45, 897, 45, 45, 45, + 45, 45, 45, 45, 897, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 897, + 45, 45, 45, 45, 45, 45, 897, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 888, 888, 888, 45, 888, 45, 888, - 900, 888, 888, 45, 45, 888, 45, 45, 45, 45, + 45, 45, 45, 897, 897, 897, 45, 897, 45, 45, + 897, 909, 897, 897, 45, 45, 897, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 888, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 897, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 888, 45, 45, 45, 45, 45, 45, 45, 888, - 45, 45, 45, 45, 45, 45, 888, 45, 45, 45, - 888, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 897, 45, 45, 45, 45, 45, 45, 45, + 897, 45, 45, 45, 45, 45, 45, 897, 45, 45, + 45, 45, 897, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 888, 45, 45, 45, 45, 45, 45, 888, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 888, 45, 45, 45, 45, 888, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 897, 45, 45, 45, 45, 45, + 45, 897, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 897, 45, 45, 45, 45, + 45, 897, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 888, 888, 45, 45, 45, 45, 45, - 45, 45, 888, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 888, 45, - 45, 888, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 888, 45, + 45, 45, 45, 45, 45, 45, 897, 897, 45, 45, + 45, 45, 45, 45, 45, 897, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 888, 888, 45, 45, 888, 45, 888, 45, - 45, 45, 45, 45, 45, 45, 888, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 888, 45, 45, + 45, 897, 45, 45, 45, 897, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 897, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 897, 897, 45, 45, + 897, 45, 897, 45, 45, 45, 45, 45, 45, 45, + 897, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 897, 45, 45, 45, 45, 45, 45, 45, - 888, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 897, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 888, 45, 45, 45, 45, 45, 45, 888, 888, + 45, 45, 45, 45, 45, 45, 897, 45, 45, 45, + 45, 45, 45, 45, 897, 897, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 897, 897, + 45, 897, 45, 897, 45, 45, 45, 45, 45, 45, + 897, 45, 897, 45, 897, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 888, 888, 45, 888, 45, 888, 45, 45, - 45, 45, 45, 45, 888, 45, 888, 45, 888, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 888, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 888, - 45, 888, 45, 45, 45, 45, 45, 45, 45, 888, + 45, 45, 897, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 897, 45, 897, 45, - 45, 45, 888, 888, 45, 45, 888, 45, 45, 45, - 45, 888, 45, 45, 45, 45, 45, 45, 45, 45, - 888, 45, 888, 45, 888, 45, 45, 45, 45, 888, - 888, 45, 888, 45, 45, 888, 45, 45, 45, 45, - 45, 888, 888, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 888, 888, 45, 45, 45, 45, 45, 45, 45, - 888, 45, 888, 45, 45, 888, 45, 45, 45, 45, - 45, 888, 45, 888, 45, 45, 45, 45, 888, 45, + 45, 45, 45, 45, 45, 45, 897, 45, 45, 897, + 897, 45, 45, 45, 897, 45, 45, 45, 45, 897, + 45, 45, 45, 45, 45, 45, 45, 45, 897, 45, + 897, 45, 897, 45, 45, 45, 45, 897, 897, 45, + 897, 45, 45, 897, 45, 897, 45, 45, 45, 45, + 897, 897, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 897, 897, 45, 45, 45, 45, 45, 45, 45, 897, + 45, 897, 45, 45, 897, 45, 45, 45, 45, 45, + 897, 45, 897, 45, 45, 45, 45, 897, 45, 45, - 45, 45, 45, 45, 45, 45, 888, 45, 45, 45, - 888, 45, 45, 45, 45, 45, 45, 45, 888, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 888, 888, 45, 45, 45, 45, 888, 45, 45, 888, + 45, 45, 45, 45, 45, 897, 45, 45, 45, 897, + 45, 45, 45, 45, 45, 45, 45, 897, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 897, + 897, 45, 45, 45, 45, 897, 45, 45, 897, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 888, 45, 45, 45, 45, 45, 888, - 888, 888, 45, 45, 45, 888, 45, 45, 45, 45, - 45, 45, 45, 888, 45, 45, 888, 0, 888, 888, - 888, 888, 888, 888, 888, 888, 888, 888, 888, 888 + 45, 45, 897, 45, 45, 45, 45, 45, 897, 897, + 897, 45, 45, 45, 897, 45, 45, 45, 45, 45, + 45, 45, 897, 45, 45, 897, 0, 897, 897, 897, + 897, 897, 897, 897, 897, 897, 897, 897, 897 } ; -static yyconst flex_uint16_t yy_nxt[1254] = +static yyconst flex_uint16_t yy_nxt[1263] = { 0, 12, 13, 14, 13, 12, 15, 16, 12, 17, 18, 19, 20, 21, 22, 22, 22, 23, 24, 12, 12, @@ -839,8 +843,8 @@ static yyconst flex_uint16_t yy_nxt[1254] = 80, 12, 75, 81, 12, 77, 12, 77, 12, 79, 78, 78, 78, 79, 12, 12, 12, 12, 39, 12, - 12, 42, 12, 42, 79, 410, 81, 12, 82, 42, - 411, 42, 714, 12, 12, 44, 44, 44, 45, 45, + 12, 42, 12, 42, 79, 358, 81, 12, 82, 42, + 359, 42, 714, 12, 12, 44, 44, 44, 45, 45, 46, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 47, 48, 45, 49, 45, 45, 45, 45, 45, 45, 50, 45, 45, @@ -850,7 +854,7 @@ static yyconst flex_uint16_t yy_nxt[1254] = 69, 81, 72, 72, 72, 90, 94, 71, 73, 73, 73, 107, 71, 69, 144, 72, 72, 72, 71, 83, - 108, 715, 122, 71, 84, 71, 123, 100, 71, 95, + 108, 717, 122, 71, 84, 71, 123, 100, 71, 95, 101, 110, 91, 102, 71, 111, 129, 144, 112, 170, 130, 71, 45, 45, 138, 45, 103, 206, 139, 97, 104, 207, 161, 105, 171, 45, 45, 45, 45, 45, @@ -861,32 +865,32 @@ static yyconst flex_uint16_t yy_nxt[1254] = 142, 144, 127, 143, 128, 180, 172, 132, 133, 73, 73, 73, 134, 69, 154, 70, 70, 70, 173, 71, - 145, 77, 716, 77, 147, 71, 78, 78, 78, 90, + 145, 77, 718, 77, 147, 71, 78, 78, 78, 90, 69, 143, 72, 72, 72, 71, 73, 73, 73, 181, 188, 71, 71, 78, 78, 78, 71, 78, 78, 78, - 453, 146, 165, 166, 175, 217, 91, 176, 71, 189, + 455, 146, 165, 166, 175, 217, 91, 176, 71, 189, 177, 167, 71, 158, 158, 158, 193, 194, 219, 217, - 158, 158, 158, 158, 158, 218, 218, 271, 217, 454, + 158, 158, 158, 158, 158, 218, 218, 271, 217, 456, 272, 200, 201, 202, 219, 158, 158, 158, 158, 158, 158, 203, 220, 204, 219, 218, 221, 205, 287, 287, - 291, 292, 305, 339, 527, 337, 306, 340, 293, 528, + 291, 292, 305, 339, 411, 337, 306, 340, 293, 412, - 222, 228, 228, 228, 287, 288, 474, 717, 228, 228, - 228, 228, 228, 460, 601, 315, 475, 559, 461, 602, - 316, 560, 718, 228, 228, 228, 228, 228, 228, 295, - 295, 295, 648, 701, 707, 719, 295, 295, 295, 295, - 295, 338, 720, 646, 721, 722, 723, 462, 647, 724, - 725, 295, 295, 295, 295, 295, 295, 317, 726, 728, - 603, 318, 45, 45, 45, 727, 649, 729, 708, 45, - 45, 45, 45, 45, 702, 730, 731, 732, 733, 734, - 735, 736, 737, 738, 45, 45, 45, 45, 45, 45, - 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, + 222, 228, 228, 228, 287, 288, 476, 719, 228, 228, + 228, 228, 228, 462, 530, 315, 477, 563, 463, 531, + 316, 564, 720, 228, 228, 228, 228, 228, 228, 295, + 295, 295, 654, 708, 715, 721, 295, 295, 295, 295, + 295, 338, 722, 652, 606, 723, 724, 464, 653, 607, + 725, 295, 295, 295, 295, 295, 295, 317, 726, 727, + 728, 318, 45, 45, 45, 729, 655, 730, 716, 45, + 45, 45, 45, 45, 709, 731, 732, 733, 736, 737, + 738, 739, 740, 741, 45, 45, 45, 45, 45, 45, + 608, 734, 742, 743, 744, 745, 746, 747, 735, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, - 779, 780, 781, 782, 783, 784, 786, 787, 788, 789, - 785, 790, 791, 792, 793, 794, 795, 796, 797, 798, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 789, 790, 791, 792, 793, 795, 796, 797, 798, 794, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, @@ -896,78 +900,79 @@ static yyconst flex_uint16_t yy_nxt[1254] = 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, - 879, 880, 881, 882, 883, 884, 885, 886, 887, 36, - 36, 36, 36, 36, 36, 36, 68, 713, 68, 68, - 68, 68, 68, 87, 712, 87, 711, 87, 87, 87, - 89, 89, 89, 89, 89, 89, 89, 96, 96, 96, - 96, 96, 96, 96, 141, 710, 141, 141, 141, 141, - 141, 89, 89, 709, 89, 156, 156, 156, 156, 156, - 224, 224, 290, 290, 361, 361, 89, 89, 706, 705, + 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, + 889, 890, 891, 892, 893, 894, 895, 896, 36, 36, + 36, 36, 36, 36, 36, 68, 713, 68, 68, 68, + 68, 68, 87, 712, 87, 711, 87, 87, 87, 89, + 89, 89, 89, 89, 89, 89, 96, 96, 96, 96, + 96, 96, 96, 141, 710, 141, 141, 141, 141, 141, + 89, 89, 707, 89, 156, 156, 156, 156, 156, 224, - 704, 703, 700, 699, 698, 697, 696, 695, 694, 693, - 692, 691, 690, 689, 688, 687, 686, 685, 684, 683, - 682, 681, 680, 679, 678, 677, 676, 675, 674, 673, - 672, 671, 670, 669, 668, 667, 666, 665, 664, 663, - 662, 661, 660, 659, 658, 657, 656, 655, 654, 653, - 652, 651, 650, 645, 644, 643, 642, 641, 640, 639, - 638, 637, 636, 635, 634, 633, 632, 631, 630, 629, - 628, 627, 626, 625, 624, 623, 622, 621, 620, 619, - 618, 617, 616, 615, 614, 613, 612, 611, 610, 609, - 608, 607, 606, 605, 604, 600, 599, 598, 597, 596, + 224, 290, 290, 362, 362, 89, 89, 706, 705, 704, + 703, 702, 701, 700, 699, 698, 697, 696, 695, 694, + 693, 692, 691, 690, 689, 688, 687, 686, 685, 684, + 683, 682, 681, 680, 679, 678, 677, 676, 675, 674, + 673, 672, 671, 670, 669, 668, 667, 666, 665, 664, + 663, 662, 661, 660, 659, 658, 657, 656, 651, 650, + 649, 648, 647, 646, 645, 644, 643, 642, 641, 640, + 639, 638, 637, 636, 635, 634, 633, 632, 631, 630, + 629, 628, 627, 626, 625, 624, 623, 622, 621, 620, + 619, 618, 617, 616, 615, 614, 613, 612, 611, 610, - 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, 558, 557, 556, 555, 554, - 553, 552, 551, 550, 549, 548, 547, 546, 545, 544, - 543, 542, 541, 540, 539, 538, 537, 536, 535, 534, - 533, 532, 531, 530, 529, 526, 525, 524, 523, 522, - 521, 520, 519, 518, 517, 516, 515, 514, 513, 512, - 511, 510, 509, 508, 507, 506, 505, 504, 503, 502, - 501, 500, 499, 498, 497, 496, 495, 494, 493, 492, + 609, 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, 562, 561, 560, 559, 558, 557, 556, 555, + 554, 553, 552, 551, 550, 549, 548, 547, 546, 545, + 544, 543, 542, 541, 540, 539, 538, 537, 536, 535, + 534, 533, 532, 529, 528, 527, 526, 525, 524, 523, + 522, 521, 520, 519, 518, 517, 516, 515, 514, 513, + 512, 511, 510, 509, 508, 507, 506, 505, 504, 503, - 491, 490, 489, 488, 487, 486, 485, 484, 483, 482, - 481, 480, 479, 478, 477, 476, 473, 472, 471, 470, - 469, 468, 467, 466, 465, 464, 463, 459, 458, 457, - 456, 455, 452, 451, 450, 449, 448, 447, 446, 445, - 444, 443, 442, 441, 440, 439, 438, 437, 436, 435, - 434, 433, 432, 431, 430, 429, 428, 427, 426, 425, - 424, 423, 422, 421, 420, 419, 418, 417, 416, 415, - 414, 413, 412, 409, 408, 407, 406, 405, 404, 403, - 402, 401, 400, 399, 398, 397, 396, 395, 394, 393, - 392, 391, 390, 389, 388, 387, 386, 385, 384, 383, + 502, 501, 500, 499, 498, 497, 496, 495, 494, 493, + 492, 491, 490, 489, 488, 487, 486, 485, 484, 483, + 482, 481, 480, 479, 478, 475, 474, 473, 472, 471, + 470, 469, 468, 467, 466, 465, 461, 460, 459, 458, + 457, 454, 453, 452, 451, 450, 449, 448, 447, 446, + 445, 444, 443, 442, 441, 440, 439, 438, 437, 436, + 435, 434, 433, 432, 431, 430, 429, 428, 427, 426, + 425, 424, 423, 422, 421, 420, 419, 418, 417, 416, + 415, 414, 413, 410, 409, 408, 407, 406, 405, 404, + 403, 402, 401, 400, 399, 398, 397, 396, 395, 394, - 382, 381, 380, 379, 378, 377, 376, 375, 374, 373, - 372, 371, 370, 369, 368, 367, 366, 365, 364, 363, - 362, 360, 359, 358, 357, 356, 355, 354, 353, 352, - 351, 350, 349, 348, 347, 346, 345, 344, 343, 342, - 341, 336, 335, 334, 333, 332, 331, 330, 329, 328, - 327, 326, 325, 324, 323, 322, 321, 320, 319, 314, - 313, 312, 311, 310, 309, 308, 307, 304, 303, 302, - 301, 300, 299, 298, 297, 296, 294, 289, 286, 285, - 284, 283, 282, 281, 280, 279, 278, 277, 276, 275, - 274, 273, 270, 269, 268, 267, 266, 265, 264, 263, + 393, 392, 391, 390, 389, 388, 387, 386, 385, 384, + 383, 382, 381, 380, 379, 378, 377, 376, 375, 374, + 373, 372, 371, 370, 369, 368, 367, 366, 365, 364, + 363, 361, 360, 357, 356, 355, 354, 353, 352, 351, + 350, 349, 348, 347, 346, 345, 344, 343, 342, 341, + 336, 335, 334, 333, 332, 331, 330, 329, 328, 327, + 326, 325, 324, 323, 322, 321, 320, 319, 314, 313, + 312, 311, 310, 309, 308, 307, 304, 303, 302, 301, + 300, 299, 298, 297, 296, 294, 289, 286, 285, 284, + 283, 282, 281, 280, 279, 278, 277, 276, 275, 274, - 262, 261, 260, 259, 258, 257, 256, 255, 254, 253, - 252, 251, 250, 249, 248, 247, 246, 245, 244, 243, - 242, 241, 240, 239, 238, 237, 236, 235, 234, 233, - 232, 231, 230, 229, 157, 227, 226, 225, 223, 216, - 215, 214, 213, 212, 211, 210, 209, 208, 199, 198, - 197, 196, 195, 192, 191, 190, 187, 186, 185, 184, - 183, 182, 179, 178, 174, 169, 168, 164, 163, 160, - 159, 157, 155, 152, 151, 150, 149, 148, 140, 121, - 120, 109, 99, 93, 92, 43, 88, 86, 85, 76, - 43, 888, 11, 888, 888, 888, 888, 888, 888, 888, + 273, 270, 269, 268, 267, 266, 265, 264, 263, 262, + 261, 260, 259, 258, 257, 256, 255, 254, 253, 252, + 251, 250, 249, 248, 247, 246, 245, 244, 243, 242, + 241, 240, 239, 238, 237, 236, 235, 234, 233, 232, + 231, 230, 229, 157, 227, 226, 225, 223, 216, 215, + 214, 213, 212, 211, 210, 209, 208, 199, 198, 197, + 196, 195, 192, 191, 190, 187, 186, 185, 184, 183, + 182, 179, 178, 174, 169, 168, 164, 163, 160, 159, + 157, 155, 152, 151, 150, 149, 148, 140, 121, 120, + 109, 99, 93, 92, 43, 88, 86, 85, 76, 43, - 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, - 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, - 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, - 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, - 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, - 888, 888, 888 + 897, 11, 897, 897, 897, 897, 897, 897, 897, 897, + 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, + 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, + 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, + 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, + 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, + 897, 897 } ; -static yyconst flex_int16_t yy_chk[1254] = +static yyconst flex_int16_t yy_chk[1263] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -981,8 +986,8 @@ static yyconst flex_int16_t yy_chk[1254] = 27, 5, 21, 28, 5, 25, 5, 25, 5, 26, 25, 25, 25, 31, 5, 5, 7, 9, 5, 10, - 8, 37, 5, 37, 26, 346, 28, 5, 31, 42, - 346, 42, 678, 5, 5, 15, 15, 15, 15, 15, + 8, 37, 5, 37, 26, 285, 28, 5, 31, 42, + 285, 42, 677, 5, 5, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, @@ -1006,107 +1011,108 @@ static yyconst flex_int16_t yy_chk[1254] = 82, 71, 680, 71, 84, 70, 71, 71, 71, 89, 72, 83, 72, 72, 72, 69, 73, 73, 73, 113, 120, 70, 72, 77, 77, 77, 73, 78, 78, 78, - 397, 83, 104, 104, 110, 142, 89, 110, 72, 120, + 398, 83, 104, 104, 110, 142, 89, 110, 72, 120, 110, 104, 73, 98, 98, 98, 124, 124, 144, 145, - 98, 98, 98, 98, 98, 143, 146, 202, 142, 397, + 98, 98, 98, 98, 98, 143, 146, 202, 142, 398, 202, 130, 130, 130, 144, 98, 98, 98, 98, 98, 98, 130, 145, 130, 147, 143, 146, 130, 217, 220, - 225, 225, 238, 267, 473, 266, 238, 267, 225, 473, + 225, 225, 238, 267, 346, 266, 238, 267, 225, 346, - 147, 158, 158, 158, 217, 220, 418, 681, 158, 158, - 158, 158, 158, 404, 553, 247, 418, 508, 404, 553, - 247, 508, 682, 158, 158, 158, 158, 158, 158, 228, - 228, 228, 604, 666, 671, 683, 228, 228, 228, 228, - 228, 266, 684, 603, 685, 686, 687, 404, 603, 688, - 689, 228, 228, 228, 228, 228, 228, 247, 691, 693, - 553, 247, 295, 295, 295, 691, 604, 694, 671, 295, - 295, 295, 295, 295, 666, 695, 696, 697, 698, 699, - 701, 702, 705, 706, 295, 295, 295, 295, 295, 295, - 708, 709, 710, 711, 713, 714, 715, 716, 717, 718, + 147, 158, 158, 158, 217, 220, 419, 681, 158, 158, + 158, 158, 158, 405, 475, 247, 419, 511, 405, 475, + 247, 511, 682, 158, 158, 158, 158, 158, 158, 228, + 228, 228, 609, 672, 678, 684, 228, 228, 228, 228, + 228, 266, 685, 608, 557, 686, 687, 405, 608, 557, + 688, 228, 228, 228, 228, 228, 228, 247, 689, 690, + 691, 247, 295, 295, 295, 692, 609, 693, 678, 295, + 295, 295, 295, 295, 672, 694, 695, 696, 700, 701, + 702, 703, 704, 705, 295, 295, 295, 295, 295, 295, + 557, 698, 706, 708, 709, 712, 713, 714, 698, 716, - 719, 720, 722, 724, 726, 727, 728, 729, 732, 734, - 735, 737, 738, 739, 740, 741, 744, 745, 746, 747, - 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, - 758, 759, 760, 761, 764, 765, 766, 767, 768, 769, - 765, 770, 772, 774, 775, 777, 778, 779, 780, 781, - 783, 785, 786, 787, 788, 790, 791, 792, 793, 794, - 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, - 805, 806, 808, 809, 810, 812, 813, 814, 815, 816, - 817, 818, 820, 821, 822, 823, 824, 825, 826, 827, - 828, 829, 830, 833, 834, 835, 836, 838, 839, 841, + 717, 718, 719, 721, 722, 723, 724, 725, 726, 727, + 728, 730, 732, 734, 735, 736, 737, 740, 742, 743, + 745, 747, 748, 749, 750, 753, 754, 755, 756, 757, + 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, + 768, 769, 770, 773, 774, 775, 776, 777, 778, 774, + 779, 781, 783, 784, 786, 787, 788, 789, 790, 792, + 794, 795, 796, 797, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, + 815, 817, 818, 819, 821, 822, 823, 824, 825, 826, + 827, 829, 830, 831, 832, 833, 834, 835, 836, 837, - 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, + 838, 839, 842, 843, 844, 845, 847, 848, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, - 862, 863, 865, 866, 867, 868, 869, 873, 874, 875, - 877, 878, 879, 880, 881, 882, 883, 885, 886, 889, - 889, 889, 889, 889, 889, 889, 890, 677, 890, 890, - 890, 890, 890, 891, 675, 891, 674, 891, 891, 891, - 892, 892, 892, 892, 892, 892, 892, 893, 893, 893, - 893, 893, 893, 893, 894, 673, 894, 894, 894, 894, - 894, 895, 895, 672, 895, 896, 896, 896, 896, 896, - 897, 897, 898, 898, 899, 899, 900, 900, 670, 669, + 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, + 872, 874, 875, 876, 877, 878, 882, 883, 884, 886, + 887, 888, 889, 890, 891, 892, 894, 895, 898, 898, + 898, 898, 898, 898, 898, 899, 676, 899, 899, 899, + 899, 899, 900, 675, 900, 674, 900, 900, 900, 901, + 901, 901, 901, 901, 901, 901, 902, 902, 902, 902, + 902, 902, 902, 903, 673, 903, 903, 903, 903, 903, + 904, 904, 671, 904, 905, 905, 905, 905, 905, 906, - 668, 667, 665, 664, 663, 662, 661, 660, 658, 656, - 654, 653, 652, 651, 650, 649, 647, 645, 642, 641, - 640, 639, 638, 637, 636, 635, 634, 633, 632, 631, - 628, 627, 626, 625, 624, 623, 621, 620, 619, 618, - 617, 616, 615, 614, 613, 612, 611, 610, 609, 608, - 607, 606, 605, 602, 600, 599, 598, 597, 596, 595, - 594, 593, 592, 591, 590, 589, 587, 586, 585, 584, - 583, 582, 581, 580, 579, 578, 576, 575, 574, 573, - 572, 571, 570, 568, 566, 565, 562, 561, 560, 559, - 558, 557, 556, 555, 554, 552, 551, 550, 548, 547, + 906, 907, 907, 908, 908, 909, 909, 670, 669, 668, + 667, 666, 664, 662, 660, 659, 658, 657, 656, 655, + 653, 651, 648, 647, 646, 645, 644, 643, 642, 641, + 640, 639, 638, 637, 634, 633, 632, 631, 630, 629, + 628, 626, 625, 624, 623, 622, 621, 620, 619, 618, + 617, 616, 615, 614, 613, 612, 611, 610, 607, 605, + 604, 603, 602, 601, 600, 599, 598, 597, 596, 595, + 594, 592, 591, 590, 589, 588, 587, 586, 585, 584, + 583, 582, 580, 579, 578, 577, 576, 575, 574, 572, + 570, 569, 566, 565, 564, 563, 562, 561, 560, 559, + 558, 556, 555, 554, 552, 551, 550, 549, 548, 547, 546, 545, 544, 543, 542, 541, 540, 539, 538, 537, - 536, 535, 534, 533, 531, 530, 528, 527, 526, 525, - 524, 523, 522, 521, 520, 519, 518, 517, 516, 515, - 514, 512, 511, 510, 509, 507, 506, 503, 502, 501, + 535, 534, 533, 531, 530, 529, 528, 527, 526, 525, + 524, 523, 522, 521, 520, 519, 518, 517, 515, 514, + 513, 512, 510, 509, 506, 505, 504, 503, 502, 501, 500, 499, 498, 497, 496, 495, 494, 493, 492, 491, - 490, 489, 488, 487, 486, 485, 484, 483, 482, 481, - 480, 478, 477, 476, 475, 472, 471, 470, 469, 468, - 467, 466, 465, 464, 463, 462, 461, 459, 458, 457, - 456, 455, 454, 452, 451, 450, 449, 448, 447, 446, - 445, 444, 443, 442, 441, 440, 439, 438, 437, 436, + 490, 489, 488, 487, 486, 485, 484, 483, 481, 480, + 479, 478, 477, 474, 473, 472, 471, 470, 469, 468, + 467, 466, 465, 464, 463, 461, 460, 459, 458, 457, + 456, 454, 453, 452, 451, 450, 449, 448, 447, 446, + 445, 444, 443, 442, 441, 440, 439, 438, 437, 436, 435, 434, 433, 432, 431, 430, 429, 428, 427, 426, - 425, 424, 423, 422, 420, 419, 416, 415, 414, 413, - 412, 411, 409, 408, 407, 406, 405, 403, 401, 400, - 399, 398, 396, 395, 394, 393, 392, 391, 390, 389, - 388, 387, 386, 384, 383, 382, 381, 380, 379, 378, + 425, 424, 422, 421, 420, 417, 416, 415, 414, 413, + 412, 410, 409, 408, 407, 406, 404, 402, 401, 400, + 399, 397, 396, 395, 394, 393, 392, 391, 390, 389, + 388, 387, 385, 384, 383, 382, 381, 380, 379, 378, 377, 376, 375, 374, 373, 372, 371, 370, 369, 368, - 367, 365, 364, 360, 359, 357, 353, 352, 351, 350, + 366, 365, 361, 360, 359, 357, 353, 352, 351, 350, 349, 348, 347, 345, 344, 343, 342, 341, 340, 339, 338, 336, 335, 334, 333, 332, 331, 329, 328, 327, - 326, 325, 324, 323, 322, 321, 320, 319, 318, 317, + 326, 325, 324, 323, 322, 321, 320, 319, 318, 317, 316, 314, 313, 312, 311, 310, 309, 308, 306, 305, 304, 303, 302, 300, 299, 297, 296, 294, 293, 292, - 291, 289, 286, 285, 284, 283, 282, 281, 280, 279, - 278, 277, 276, 275, 274, 273, 272, 271, 270, 269, - 268, 265, 264, 263, 262, 261, 260, 259, 258, 257, - 256, 255, 254, 253, 252, 251, 250, 249, 248, 246, - 245, 244, 243, 242, 241, 240, 239, 237, 236, 235, - 234, 233, 232, 231, 230, 229, 227, 223, 216, 215, - 214, 213, 212, 211, 210, 209, 208, 207, 206, 205, - 204, 203, 201, 200, 199, 198, 197, 196, 195, 194, + 291, 289, 286, 284, 283, 282, 281, 280, 279, 278, + 277, 276, 275, 274, 273, 272, 271, 270, 269, 268, + 265, 264, 263, 262, 261, 260, 259, 258, 257, 256, + 255, 254, 253, 252, 251, 250, 249, 248, 246, 245, + 244, 243, 242, 241, 240, 239, 237, 236, 235, 234, + 233, 232, 231, 230, 229, 227, 223, 216, 215, 214, + 213, 212, 211, 210, 209, 208, 207, 206, 205, 204, - 193, 192, 191, 190, 189, 188, 187, 186, 185, 184, - 183, 182, 181, 179, 178, 177, 176, 175, 174, 173, - 172, 171, 170, 169, 168, 167, 166, 165, 164, 163, - 162, 161, 160, 159, 156, 155, 154, 151, 148, 140, - 139, 138, 137, 136, 135, 134, 133, 132, 129, 128, - 127, 126, 125, 123, 122, 121, 119, 118, 117, 116, - 115, 114, 112, 111, 109, 106, 105, 103, 102, 100, - 99, 96, 95, 93, 92, 91, 87, 86, 67, 60, - 59, 55, 51, 48, 47, 43, 41, 39, 38, 24, - 14, 11, 888, 888, 888, 888, 888, 888, 888, 888, + 203, 201, 200, 199, 198, 197, 196, 195, 194, 193, + 192, 191, 190, 189, 188, 187, 186, 185, 184, 183, + 182, 181, 179, 178, 177, 176, 175, 174, 173, 172, + 171, 170, 169, 168, 167, 166, 165, 164, 163, 162, + 161, 160, 159, 156, 155, 154, 151, 148, 140, 139, + 138, 137, 136, 135, 134, 133, 132, 129, 128, 127, + 126, 125, 123, 122, 121, 119, 118, 117, 116, 115, + 114, 112, 111, 109, 106, 105, 103, 102, 100, 99, + 96, 95, 93, 92, 91, 87, 86, 67, 60, 59, + 55, 51, 48, 47, 43, 41, 39, 38, 24, 14, - 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, - 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, - 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, - 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, - 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, - 888, 888, 888 + 11, 897, 897, 897, 897, 897, 897, 897, 897, 897, + 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, + 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, + 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, + 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, + 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, + 897, 897 } ; static yy_state_type yy_last_accepting_state; @@ -1115,21 +1121,21 @@ static char *yy_last_accepting_cpos; extern int parser6__flex_debug; int parser6__flex_debug = 1; -static yyconst flex_int16_t yy_rule_linenum[117] = +static yyconst flex_int16_t yy_rule_linenum[118] = { 0, 130, 132, 134, 139, 140, 145, 146, 147, 159, 162, 167, 174, 183, 192, 201, 210, 219, 228, 240, 250, 260, 270, 281, 291, 301, 311, 321, 331, 340, 349, 358, 373, 388, 397, 406, 415, 424, 433, 442, 451, - 460, 469, 478, 487, 496, 505, 514, 523, 533, 542, - 551, 560, 569, 578, 587, 596, 605, 614, 624, 634, - 644, 653, 662, 671, 682, 692, 701, 711, 720, 729, - 738, 747, 756, 765, 775, 784, 793, 802, 811, 820, - 829, 838, 847, 856, 865, 874, 883, 892, 901, 910, - 919, 928, 937, 946, 955, 964, 973, 982, 991, 1089, + 460, 469, 479, 488, 497, 506, 515, 524, 533, 543, + 552, 561, 570, 579, 588, 597, 606, 615, 624, 634, + 644, 654, 663, 672, 681, 692, 702, 711, 721, 730, + 739, 748, 757, 766, 775, 785, 794, 803, 812, 821, + 830, 839, 848, 857, 866, 875, 884, 893, 902, 911, + 920, 929, 938, 947, 956, 965, 974, 983, 992, 1001, - 1094, 1099, 1104, 1105, 1106, 1107, 1108, 1109, 1111, 1129, - 1142, 1147, 1151, 1153, 1155, 1157 + 1099, 1104, 1109, 1114, 1115, 1116, 1117, 1118, 1119, 1121, + 1139, 1152, 1157, 1161, 1163, 1165, 1167 } ; /* The intent behind this definition is that it'll catch @@ -1200,7 +1206,7 @@ unsigned int comment_start_line = 0; // by moving it ahead by parser6_leng bytes. parser6_leng specifies the length of the // currently matched token. #define YY_USER_ACTION driver.loc_.columns(parser6_leng); -#line 1204 "dhcp6_lexer.cc" +#line 1210 "dhcp6_lexer.cc" #define INITIAL 0 #define COMMENT 1 @@ -1526,7 +1532,7 @@ YY_DECL } -#line 1530 "dhcp6_lexer.cc" +#line 1536 "dhcp6_lexer.cc" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -1555,13 +1561,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 >= 889 ) + if ( yy_current_state >= 898 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c]; ++yy_cp; } - while ( yy_current_state != 888 ); + while ( yy_current_state != 897 ); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); @@ -1580,13 +1586,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 < 117 ) + else if ( yy_act < 118 ) fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n", (long)yy_rule_linenum[yy_act], parser6_text ); - else if ( yy_act == 117 ) + else if ( yy_act == 118 ) fprintf( stderr, "--accepting default rule (\"%s\")\n", parser6_text ); - else if ( yy_act == 118 ) + else if ( yy_act == 119 ) fprintf( stderr, "--(end of buffer or a NUL)\n" ); else fprintf( stderr, "--EOF (start condition %d)\n", YY_START ); @@ -2078,6 +2084,19 @@ YY_RULE_SETUP case 42: YY_RULE_SETUP #line 469 "dhcp6_lexer.ll" +{ + switch(driver.ctx_) { + case isc::dhcp::Parser6Context::POOLS: + case isc::dhcp::Parser6Context::PD_POOLS: + return isc::dhcp::Dhcp6Parser::make_USER_CONTEXT(driver.loc_); + default: + return isc::dhcp::Dhcp6Parser::make_STRING("user-context", driver.loc_); + } +} + YY_BREAK +case 43: +YY_RULE_SETUP +#line 479 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -2087,9 +2106,9 @@ YY_RULE_SETUP } } YY_BREAK -case 43: +case 44: YY_RULE_SETUP -#line 478 "dhcp6_lexer.ll" +#line 488 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -2099,9 +2118,9 @@ YY_RULE_SETUP } } YY_BREAK -case 44: +case 45: YY_RULE_SETUP -#line 487 "dhcp6_lexer.ll" +#line 497 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -2111,9 +2130,9 @@ YY_RULE_SETUP } } YY_BREAK -case 45: +case 46: YY_RULE_SETUP -#line 496 "dhcp6_lexer.ll" +#line 506 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -2123,9 +2142,9 @@ YY_RULE_SETUP } } YY_BREAK -case 46: +case 47: YY_RULE_SETUP -#line 505 "dhcp6_lexer.ll" +#line 515 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -2135,9 +2154,9 @@ YY_RULE_SETUP } } YY_BREAK -case 47: +case 48: YY_RULE_SETUP -#line 514 "dhcp6_lexer.ll" +#line 524 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -2147,9 +2166,9 @@ YY_RULE_SETUP } } YY_BREAK -case 48: +case 49: YY_RULE_SETUP -#line 523 "dhcp6_lexer.ll" +#line 533 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DEF: @@ -2160,9 +2179,9 @@ YY_RULE_SETUP } } YY_BREAK -case 49: +case 50: YY_RULE_SETUP -#line 533 "dhcp6_lexer.ll" +#line 543 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -2172,9 +2191,9 @@ YY_RULE_SETUP } } YY_BREAK -case 50: +case 51: YY_RULE_SETUP -#line 542 "dhcp6_lexer.ll" +#line 552 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -2184,9 +2203,9 @@ YY_RULE_SETUP } } YY_BREAK -case 51: +case 52: YY_RULE_SETUP -#line 551 "dhcp6_lexer.ll" +#line 561 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -2196,9 +2215,9 @@ YY_RULE_SETUP } } YY_BREAK -case 52: +case 53: YY_RULE_SETUP -#line 560 "dhcp6_lexer.ll" +#line 570 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::CONFIG: @@ -2208,9 +2227,9 @@ YY_RULE_SETUP } } YY_BREAK -case 53: +case 54: YY_RULE_SETUP -#line 569 "dhcp6_lexer.ll" +#line 579 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LOGGING: @@ -2220,9 +2239,9 @@ YY_RULE_SETUP } } YY_BREAK -case 54: +case 55: YY_RULE_SETUP -#line 578 "dhcp6_lexer.ll" +#line 588 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LOGGERS: @@ -2232,9 +2251,9 @@ YY_RULE_SETUP } } YY_BREAK -case 55: +case 56: YY_RULE_SETUP -#line 587 "dhcp6_lexer.ll" +#line 597 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OUTPUT_OPTIONS: @@ -2244,9 +2263,9 @@ YY_RULE_SETUP } } YY_BREAK -case 56: +case 57: YY_RULE_SETUP -#line 596 "dhcp6_lexer.ll" +#line 606 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LOGGERS: @@ -2256,9 +2275,9 @@ YY_RULE_SETUP } } YY_BREAK -case 57: +case 58: YY_RULE_SETUP -#line 605 "dhcp6_lexer.ll" +#line 615 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::LOGGERS: @@ -2268,9 +2287,9 @@ YY_RULE_SETUP } } YY_BREAK -case 58: +case 59: YY_RULE_SETUP -#line 614 "dhcp6_lexer.ll" +#line 624 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -2281,9 +2300,9 @@ YY_RULE_SETUP } } YY_BREAK -case 59: +case 60: YY_RULE_SETUP -#line 624 "dhcp6_lexer.ll" +#line 634 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -2294,9 +2313,9 @@ YY_RULE_SETUP } } YY_BREAK -case 60: +case 61: YY_RULE_SETUP -#line 634 "dhcp6_lexer.ll" +#line 644 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::CLIENT_CLASSES: @@ -2307,9 +2326,9 @@ YY_RULE_SETUP } } YY_BREAK -case 61: +case 62: YY_RULE_SETUP -#line 644 "dhcp6_lexer.ll" +#line 654 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -2319,9 +2338,9 @@ YY_RULE_SETUP } } YY_BREAK -case 62: +case 63: YY_RULE_SETUP -#line 653 "dhcp6_lexer.ll" +#line 663 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RESERVATIONS: @@ -2331,9 +2350,9 @@ YY_RULE_SETUP } } YY_BREAK -case 63: +case 64: YY_RULE_SETUP -#line 662 "dhcp6_lexer.ll" +#line 672 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RESERVATIONS: @@ -2343,9 +2362,9 @@ YY_RULE_SETUP } } YY_BREAK -case 64: +case 65: YY_RULE_SETUP -#line 671 "dhcp6_lexer.ll" +#line 681 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::MAC_SOURCES: @@ -2357,9 +2376,9 @@ YY_RULE_SETUP } } YY_BREAK -case 65: +case 66: YY_RULE_SETUP -#line 682 "dhcp6_lexer.ll" +#line 692 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::HOST_RESERVATION_IDENTIFIERS: @@ -2370,9 +2389,9 @@ YY_RULE_SETUP } } YY_BREAK -case 66: +case 67: YY_RULE_SETUP -#line 692 "dhcp6_lexer.ll" +#line 702 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RESERVATIONS: @@ -2382,9 +2401,9 @@ YY_RULE_SETUP } } YY_BREAK -case 67: +case 68: YY_RULE_SETUP -#line 701 "dhcp6_lexer.ll" +#line 711 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DEF: @@ -2395,9 +2414,9 @@ YY_RULE_SETUP } } YY_BREAK -case 68: +case 69: YY_RULE_SETUP -#line 711 "dhcp6_lexer.ll" +#line 721 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DATA: @@ -2407,9 +2426,9 @@ YY_RULE_SETUP } } YY_BREAK -case 69: +case 70: YY_RULE_SETUP -#line 720 "dhcp6_lexer.ll" +#line 730 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DEF: @@ -2419,9 +2438,9 @@ YY_RULE_SETUP } } YY_BREAK -case 70: +case 71: YY_RULE_SETUP -#line 729 "dhcp6_lexer.ll" +#line 739 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DEF: @@ -2431,9 +2450,9 @@ YY_RULE_SETUP } } YY_BREAK -case 71: +case 72: YY_RULE_SETUP -#line 738 "dhcp6_lexer.ll" +#line 748 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::OPTION_DEF: @@ -2443,9 +2462,9 @@ YY_RULE_SETUP } } YY_BREAK -case 72: +case 73: YY_RULE_SETUP -#line 747 "dhcp6_lexer.ll" +#line 757 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SUBNET6: @@ -2455,9 +2474,9 @@ YY_RULE_SETUP } } YY_BREAK -case 73: +case 74: YY_RULE_SETUP -#line 756 "dhcp6_lexer.ll" +#line 766 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::RELAY: @@ -2467,9 +2486,9 @@ YY_RULE_SETUP } } YY_BREAK -case 74: +case 75: YY_RULE_SETUP -#line 765 "dhcp6_lexer.ll" +#line 775 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -2479,9 +2498,9 @@ YY_RULE_SETUP } } YY_BREAK -case 75: +case 76: YY_RULE_SETUP -#line 775 "dhcp6_lexer.ll" +#line 785 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::HOOKS_LIBRARIES: @@ -2491,9 +2510,9 @@ YY_RULE_SETUP } } YY_BREAK -case 76: +case 77: YY_RULE_SETUP -#line 784 "dhcp6_lexer.ll" +#line 794 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::HOOKS_LIBRARIES: @@ -2503,9 +2522,9 @@ YY_RULE_SETUP } } YY_BREAK -case 77: +case 78: YY_RULE_SETUP -#line 793 "dhcp6_lexer.ll" +#line 803 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -2515,9 +2534,9 @@ YY_RULE_SETUP } } YY_BREAK -case 78: +case 79: YY_RULE_SETUP -#line 802 "dhcp6_lexer.ll" +#line 812 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DUID_TYPE: @@ -2527,9 +2546,9 @@ YY_RULE_SETUP } } YY_BREAK -case 79: +case 80: YY_RULE_SETUP -#line 811 "dhcp6_lexer.ll" +#line 821 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DUID_TYPE: @@ -2539,9 +2558,9 @@ YY_RULE_SETUP } } YY_BREAK -case 80: +case 81: YY_RULE_SETUP -#line 820 "dhcp6_lexer.ll" +#line 830 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DUID_TYPE: @@ -2551,9 +2570,9 @@ YY_RULE_SETUP } } YY_BREAK -case 81: +case 82: YY_RULE_SETUP -#line 829 "dhcp6_lexer.ll" +#line 839 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SERVER_ID: @@ -2563,9 +2582,9 @@ YY_RULE_SETUP } } YY_BREAK -case 82: +case 83: YY_RULE_SETUP -#line 838 "dhcp6_lexer.ll" +#line 848 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SERVER_ID: @@ -2575,9 +2594,9 @@ YY_RULE_SETUP } } YY_BREAK -case 83: +case 84: YY_RULE_SETUP -#line 847 "dhcp6_lexer.ll" +#line 857 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SERVER_ID: @@ -2587,9 +2606,9 @@ YY_RULE_SETUP } } YY_BREAK -case 84: +case 85: YY_RULE_SETUP -#line 856 "dhcp6_lexer.ll" +#line 866 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::SERVER_ID: @@ -2599,9 +2618,9 @@ YY_RULE_SETUP } } YY_BREAK -case 85: +case 86: YY_RULE_SETUP -#line 865 "dhcp6_lexer.ll" +#line 875 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -2611,9 +2630,9 @@ YY_RULE_SETUP } } YY_BREAK -case 86: +case 87: YY_RULE_SETUP -#line 874 "dhcp6_lexer.ll" +#line 884 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING: @@ -2623,9 +2642,9 @@ YY_RULE_SETUP } } YY_BREAK -case 87: +case 88: YY_RULE_SETUP -#line 883 "dhcp6_lexer.ll" +#line 893 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING: @@ -2635,9 +2654,9 @@ YY_RULE_SETUP } } YY_BREAK -case 88: +case 89: YY_RULE_SETUP -#line 892 "dhcp6_lexer.ll" +#line 902 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING: @@ -2647,9 +2666,9 @@ YY_RULE_SETUP } } YY_BREAK -case 89: +case 90: YY_RULE_SETUP -#line 901 "dhcp6_lexer.ll" +#line 911 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING: @@ -2659,9 +2678,9 @@ YY_RULE_SETUP } } YY_BREAK -case 90: +case 91: YY_RULE_SETUP -#line 910 "dhcp6_lexer.ll" +#line 920 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING: @@ -2671,9 +2690,9 @@ YY_RULE_SETUP } } YY_BREAK -case 91: +case 92: YY_RULE_SETUP -#line 919 "dhcp6_lexer.ll" +#line 929 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::EXPIRED_LEASES_PROCESSING: @@ -2683,9 +2702,9 @@ YY_RULE_SETUP } } YY_BREAK -case 92: +case 93: YY_RULE_SETUP -#line 928 "dhcp6_lexer.ll" +#line 938 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -2695,9 +2714,9 @@ YY_RULE_SETUP } } YY_BREAK -case 93: +case 94: YY_RULE_SETUP -#line 937 "dhcp6_lexer.ll" +#line 947 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -2707,9 +2726,9 @@ YY_RULE_SETUP } } YY_BREAK -case 94: +case 95: YY_RULE_SETUP -#line 946 "dhcp6_lexer.ll" +#line 956 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::CONTROL_SOCKET: @@ -2719,9 +2738,9 @@ YY_RULE_SETUP } } YY_BREAK -case 95: +case 96: YY_RULE_SETUP -#line 955 "dhcp6_lexer.ll" +#line 965 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::CONTROL_SOCKET: @@ -2731,9 +2750,9 @@ YY_RULE_SETUP } } YY_BREAK -case 96: +case 97: YY_RULE_SETUP -#line 964 "dhcp6_lexer.ll" +#line 974 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::DHCP6: @@ -2743,9 +2762,9 @@ YY_RULE_SETUP } } YY_BREAK -case 97: +case 98: YY_RULE_SETUP -#line 973 "dhcp6_lexer.ll" +#line 983 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::CONFIG: @@ -2755,9 +2774,9 @@ YY_RULE_SETUP } } YY_BREAK -case 98: +case 99: YY_RULE_SETUP -#line 982 "dhcp6_lexer.ll" +#line 992 "dhcp6_lexer.ll" { switch(driver.ctx_) { case isc::dhcp::Parser6Context::CONFIG: @@ -2767,9 +2786,9 @@ YY_RULE_SETUP } } YY_BREAK -case 99: +case 100: YY_RULE_SETUP -#line 991 "dhcp6_lexer.ll" +#line 1001 "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. @@ -2868,65 +2887,65 @@ YY_RULE_SETUP return isc::dhcp::Dhcp6Parser::make_STRING(decoded, driver.loc_); } YY_BREAK -case 100: -/* rule 100 can match eol */ +case 101: +/* rule 101 can match eol */ YY_RULE_SETUP -#line 1089 "dhcp6_lexer.ll" +#line 1099 "dhcp6_lexer.ll" { // Bad string with a forbidden control character inside driver.error(driver.loc_, "Invalid control in " + std::string(parser6_text)); } YY_BREAK -case 101: -/* rule 101 can match eol */ +case 102: +/* rule 102 can match eol */ YY_RULE_SETUP -#line 1094 "dhcp6_lexer.ll" +#line 1104 "dhcp6_lexer.ll" { // Bad string with a bad escape inside driver.error(driver.loc_, "Bad escape in " + std::string(parser6_text)); } YY_BREAK -case 102: +case 103: YY_RULE_SETUP -#line 1099 "dhcp6_lexer.ll" +#line 1109 "dhcp6_lexer.ll" { // Bad string with an open escape at the end driver.error(driver.loc_, "Overflow escape in " + std::string(parser6_text)); } YY_BREAK -case 103: -YY_RULE_SETUP -#line 1104 "dhcp6_lexer.ll" -{ return isc::dhcp::Dhcp6Parser::make_LSQUARE_BRACKET(driver.loc_); } - YY_BREAK case 104: YY_RULE_SETUP -#line 1105 "dhcp6_lexer.ll" -{ return isc::dhcp::Dhcp6Parser::make_RSQUARE_BRACKET(driver.loc_); } +#line 1114 "dhcp6_lexer.ll" +{ return isc::dhcp::Dhcp6Parser::make_LSQUARE_BRACKET(driver.loc_); } YY_BREAK case 105: YY_RULE_SETUP -#line 1106 "dhcp6_lexer.ll" -{ return isc::dhcp::Dhcp6Parser::make_LCURLY_BRACKET(driver.loc_); } +#line 1115 "dhcp6_lexer.ll" +{ return isc::dhcp::Dhcp6Parser::make_RSQUARE_BRACKET(driver.loc_); } YY_BREAK case 106: YY_RULE_SETUP -#line 1107 "dhcp6_lexer.ll" -{ return isc::dhcp::Dhcp6Parser::make_RCURLY_BRACKET(driver.loc_); } +#line 1116 "dhcp6_lexer.ll" +{ return isc::dhcp::Dhcp6Parser::make_LCURLY_BRACKET(driver.loc_); } YY_BREAK case 107: YY_RULE_SETUP -#line 1108 "dhcp6_lexer.ll" -{ return isc::dhcp::Dhcp6Parser::make_COMMA(driver.loc_); } +#line 1117 "dhcp6_lexer.ll" +{ return isc::dhcp::Dhcp6Parser::make_RCURLY_BRACKET(driver.loc_); } YY_BREAK case 108: YY_RULE_SETUP -#line 1109 "dhcp6_lexer.ll" -{ return isc::dhcp::Dhcp6Parser::make_COLON(driver.loc_); } +#line 1118 "dhcp6_lexer.ll" +{ return isc::dhcp::Dhcp6Parser::make_COMMA(driver.loc_); } YY_BREAK case 109: YY_RULE_SETUP -#line 1111 "dhcp6_lexer.ll" +#line 1119 "dhcp6_lexer.ll" +{ return isc::dhcp::Dhcp6Parser::make_COLON(driver.loc_); } + YY_BREAK +case 110: +YY_RULE_SETUP +#line 1121 "dhcp6_lexer.ll" { // An integer was found. std::string tmp(parser6_text); @@ -2945,9 +2964,9 @@ YY_RULE_SETUP return isc::dhcp::Dhcp6Parser::make_INTEGER(integer, driver.loc_); } YY_BREAK -case 110: +case 111: YY_RULE_SETUP -#line 1129 "dhcp6_lexer.ll" +#line 1139 "dhcp6_lexer.ll" { // A floating point was found. std::string tmp(parser6_text); @@ -2961,43 +2980,43 @@ YY_RULE_SETUP return isc::dhcp::Dhcp6Parser::make_FLOAT(fp, driver.loc_); } YY_BREAK -case 111: +case 112: YY_RULE_SETUP -#line 1142 "dhcp6_lexer.ll" +#line 1152 "dhcp6_lexer.ll" { string tmp(parser6_text); return isc::dhcp::Dhcp6Parser::make_BOOLEAN(tmp == "true", driver.loc_); } YY_BREAK -case 112: +case 113: YY_RULE_SETUP -#line 1147 "dhcp6_lexer.ll" +#line 1157 "dhcp6_lexer.ll" { return isc::dhcp::Dhcp6Parser::make_NULL_TYPE(driver.loc_); } YY_BREAK -case 113: -YY_RULE_SETUP -#line 1151 "dhcp6_lexer.ll" -driver.error (driver.loc_, "JSON true reserved keyword is lower case only"); - YY_BREAK case 114: YY_RULE_SETUP -#line 1153 "dhcp6_lexer.ll" -driver.error (driver.loc_, "JSON false reserved keyword is lower case only"); +#line 1161 "dhcp6_lexer.ll" +driver.error (driver.loc_, "JSON true reserved keyword is lower case only"); YY_BREAK case 115: YY_RULE_SETUP -#line 1155 "dhcp6_lexer.ll" -driver.error (driver.loc_, "JSON null reserved keyword is lower case only"); +#line 1163 "dhcp6_lexer.ll" +driver.error (driver.loc_, "JSON false reserved keyword is lower case only"); YY_BREAK case 116: YY_RULE_SETUP -#line 1157 "dhcp6_lexer.ll" +#line 1165 "dhcp6_lexer.ll" +driver.error (driver.loc_, "JSON null reserved keyword is lower case only"); + YY_BREAK +case 117: +YY_RULE_SETUP +#line 1167 "dhcp6_lexer.ll" driver.error (driver.loc_, "Invalid character: " + std::string(parser6_text)); YY_BREAK case YY_STATE_EOF(INITIAL): -#line 1159 "dhcp6_lexer.ll" +#line 1169 "dhcp6_lexer.ll" { if (driver.states_.empty()) { return isc::dhcp::Dhcp6Parser::make_END(driver.loc_); @@ -3021,12 +3040,12 @@ case YY_STATE_EOF(INITIAL): BEGIN(DIR_EXIT); } YY_BREAK -case 117: +case 118: YY_RULE_SETUP -#line 1182 "dhcp6_lexer.ll" +#line 1192 "dhcp6_lexer.ll" ECHO; YY_BREAK -#line 3030 "dhcp6_lexer.cc" +#line 3049 "dhcp6_lexer.cc" case YY_END_OF_BUFFER: { @@ -3343,7 +3362,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 >= 889 ) + if ( yy_current_state >= 898 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c]; @@ -3376,11 +3395,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 >= 889 ) + if ( yy_current_state >= 898 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c]; - yy_is_jam = (yy_current_state == 888); + yy_is_jam = (yy_current_state == 897); return yy_is_jam ? 0 : yy_current_state; } @@ -4129,7 +4148,7 @@ void parser6_free (void * ptr ) /* %ok-for-header */ -#line 1182 "dhcp6_lexer.ll" +#line 1192 "dhcp6_lexer.ll" diff --git a/src/bin/dhcp6/dhcp6_parser.cc b/src/bin/dhcp6/dhcp6_parser.cc index 15a89469f5..84e809cba3 100644 --- a/src/bin/dhcp6/dhcp6_parser.cc +++ b/src/bin/dhcp6/dhcp6_parser.cc @@ -253,24 +253,25 @@ namespace isc { namespace dhcp { { switch (that.type_get ()) { - case 125: // value - case 350: // duid_type + case 126: // value + case 130: // map_value + case 354: // duid_type value.move< ElementPtr > (that.value); break; - case 111: // "boolean" + case 112: // "boolean" value.move< bool > (that.value); break; - case 110: // "floating point" + case 111: // "floating point" value.move< double > (that.value); break; - case 109: // "integer" + case 110: // "integer" value.move< int64_t > (that.value); break; - case 108: // "constant string" + case 109: // "constant string" value.move< std::string > (that.value); break; @@ -289,24 +290,25 @@ namespace isc { namespace dhcp { state = that.state; switch (that.type_get ()) { - case 125: // value - case 350: // duid_type + case 126: // value + case 130: // map_value + case 354: // duid_type value.copy< ElementPtr > (that.value); break; - case 111: // "boolean" + case 112: // "boolean" value.copy< bool > (that.value); break; - case 110: // "floating point" + case 111: // "floating point" value.copy< double > (that.value); break; - case 109: // "integer" + case 110: // "integer" value.copy< int64_t > (that.value); break; - case 108: // "constant string" + case 109: // "constant string" value.copy< std::string > (that.value); break; @@ -346,46 +348,53 @@ namespace isc { namespace dhcp { << yysym.location << ": "; switch (yytype) { - case 108: // "constant string" + case 109: // "constant string" -#line 199 "dhcp6_parser.yy" // lalr1.cc:636 +#line 201 "dhcp6_parser.yy" // lalr1.cc:636 { yyoutput << yysym.value.template as< std::string > (); } -#line 354 "dhcp6_parser.cc" // lalr1.cc:636 +#line 356 "dhcp6_parser.cc" // lalr1.cc:636 break; - case 109: // "integer" + case 110: // "integer" -#line 199 "dhcp6_parser.yy" // lalr1.cc:636 +#line 201 "dhcp6_parser.yy" // lalr1.cc:636 { yyoutput << yysym.value.template as< int64_t > (); } -#line 361 "dhcp6_parser.cc" // lalr1.cc:636 +#line 363 "dhcp6_parser.cc" // lalr1.cc:636 break; - case 110: // "floating point" + case 111: // "floating point" -#line 199 "dhcp6_parser.yy" // lalr1.cc:636 +#line 201 "dhcp6_parser.yy" // lalr1.cc:636 { yyoutput << yysym.value.template as< double > (); } -#line 368 "dhcp6_parser.cc" // lalr1.cc:636 +#line 370 "dhcp6_parser.cc" // lalr1.cc:636 break; - case 111: // "boolean" + case 112: // "boolean" -#line 199 "dhcp6_parser.yy" // lalr1.cc:636 +#line 201 "dhcp6_parser.yy" // lalr1.cc:636 { yyoutput << yysym.value.template as< bool > (); } -#line 375 "dhcp6_parser.cc" // lalr1.cc:636 +#line 377 "dhcp6_parser.cc" // lalr1.cc:636 break; - case 125: // value + case 126: // value -#line 199 "dhcp6_parser.yy" // lalr1.cc:636 +#line 201 "dhcp6_parser.yy" // lalr1.cc:636 { yyoutput << yysym.value.template as< ElementPtr > (); } -#line 382 "dhcp6_parser.cc" // lalr1.cc:636 +#line 384 "dhcp6_parser.cc" // lalr1.cc:636 break; - case 350: // duid_type + case 130: // map_value -#line 199 "dhcp6_parser.yy" // lalr1.cc:636 +#line 201 "dhcp6_parser.yy" // lalr1.cc:636 { yyoutput << yysym.value.template as< ElementPtr > (); } -#line 389 "dhcp6_parser.cc" // lalr1.cc:636 +#line 391 "dhcp6_parser.cc" // lalr1.cc:636 + break; + + case 354: // duid_type + +#line 201 "dhcp6_parser.yy" // lalr1.cc:636 + { yyoutput << yysym.value.template as< ElementPtr > (); } +#line 398 "dhcp6_parser.cc" // lalr1.cc:636 break; @@ -585,24 +594,25 @@ namespace isc { namespace dhcp { when using variants. */ switch (yyr1_[yyn]) { - case 125: // value - case 350: // duid_type + case 126: // value + case 130: // map_value + case 354: // duid_type yylhs.value.build< ElementPtr > (); break; - case 111: // "boolean" + case 112: // "boolean" yylhs.value.build< bool > (); break; - case 110: // "floating point" + case 111: // "floating point" yylhs.value.build< double > (); break; - case 109: // "integer" + case 110: // "integer" yylhs.value.build< int64_t > (); break; - case 108: // "constant string" + case 109: // "constant string" yylhs.value.build< std::string > (); break; @@ -624,248 +634,254 @@ namespace isc { namespace dhcp { switch (yyn) { case 2: -#line 208 "dhcp6_parser.yy" // lalr1.cc:859 +#line 210 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.ctx_ = ctx.NO_KEYWORD; } -#line 630 "dhcp6_parser.cc" // lalr1.cc:859 +#line 640 "dhcp6_parser.cc" // lalr1.cc:859 break; case 4: -#line 209 "dhcp6_parser.yy" // lalr1.cc:859 +#line 211 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.ctx_ = ctx.CONFIG; } -#line 636 "dhcp6_parser.cc" // lalr1.cc:859 +#line 646 "dhcp6_parser.cc" // lalr1.cc:859 break; case 6: -#line 210 "dhcp6_parser.yy" // lalr1.cc:859 +#line 212 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.ctx_ = ctx.DHCP6; } -#line 642 "dhcp6_parser.cc" // lalr1.cc:859 +#line 652 "dhcp6_parser.cc" // lalr1.cc:859 break; case 8: -#line 211 "dhcp6_parser.yy" // lalr1.cc:859 +#line 213 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.ctx_ = ctx.INTERFACES_CONFIG; } -#line 648 "dhcp6_parser.cc" // lalr1.cc:859 +#line 658 "dhcp6_parser.cc" // lalr1.cc:859 break; case 10: -#line 212 "dhcp6_parser.yy" // lalr1.cc:859 +#line 214 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.ctx_ = ctx.SUBNET6; } -#line 654 "dhcp6_parser.cc" // lalr1.cc:859 +#line 664 "dhcp6_parser.cc" // lalr1.cc:859 break; case 12: -#line 213 "dhcp6_parser.yy" // lalr1.cc:859 +#line 215 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.ctx_ = ctx.POOLS; } -#line 660 "dhcp6_parser.cc" // lalr1.cc:859 +#line 670 "dhcp6_parser.cc" // lalr1.cc:859 break; case 14: -#line 214 "dhcp6_parser.yy" // lalr1.cc:859 +#line 216 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.ctx_ = ctx.PD_POOLS; } -#line 666 "dhcp6_parser.cc" // lalr1.cc:859 +#line 676 "dhcp6_parser.cc" // lalr1.cc:859 break; case 16: -#line 215 "dhcp6_parser.yy" // lalr1.cc:859 +#line 217 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.ctx_ = ctx.RESERVATIONS; } -#line 672 "dhcp6_parser.cc" // lalr1.cc:859 +#line 682 "dhcp6_parser.cc" // lalr1.cc:859 break; case 18: -#line 216 "dhcp6_parser.yy" // lalr1.cc:859 +#line 218 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.ctx_ = ctx.OPTION_DEF; } -#line 678 "dhcp6_parser.cc" // lalr1.cc:859 +#line 688 "dhcp6_parser.cc" // lalr1.cc:859 break; case 20: -#line 217 "dhcp6_parser.yy" // lalr1.cc:859 +#line 219 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.ctx_ = ctx.OPTION_DATA; } -#line 684 "dhcp6_parser.cc" // lalr1.cc:859 +#line 694 "dhcp6_parser.cc" // lalr1.cc:859 break; case 22: -#line 218 "dhcp6_parser.yy" // lalr1.cc:859 +#line 220 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.ctx_ = ctx.HOOKS_LIBRARIES; } -#line 690 "dhcp6_parser.cc" // lalr1.cc:859 +#line 700 "dhcp6_parser.cc" // lalr1.cc:859 break; case 24: -#line 226 "dhcp6_parser.yy" // lalr1.cc:859 +#line 228 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); } -#line 696 "dhcp6_parser.cc" // lalr1.cc:859 +#line 706 "dhcp6_parser.cc" // lalr1.cc:859 break; case 25: -#line 227 "dhcp6_parser.yy" // lalr1.cc:859 +#line 229 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as< double > (), ctx.loc2pos(yystack_[0].location))); } -#line 702 "dhcp6_parser.cc" // lalr1.cc:859 +#line 712 "dhcp6_parser.cc" // lalr1.cc:859 break; case 26: -#line 228 "dhcp6_parser.yy" // lalr1.cc:859 +#line 230 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); } -#line 708 "dhcp6_parser.cc" // lalr1.cc:859 +#line 718 "dhcp6_parser.cc" // lalr1.cc:859 break; case 27: -#line 229 "dhcp6_parser.yy" // lalr1.cc:859 +#line 231 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); } -#line 714 "dhcp6_parser.cc" // lalr1.cc:859 +#line 724 "dhcp6_parser.cc" // lalr1.cc:859 break; case 28: -#line 230 "dhcp6_parser.yy" // lalr1.cc:859 +#line 232 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); } -#line 720 "dhcp6_parser.cc" // lalr1.cc:859 +#line 730 "dhcp6_parser.cc" // lalr1.cc:859 break; case 29: -#line 231 "dhcp6_parser.yy" // lalr1.cc:859 +#line 233 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } -#line 726 "dhcp6_parser.cc" // lalr1.cc:859 +#line 736 "dhcp6_parser.cc" // lalr1.cc:859 break; case 30: -#line 232 "dhcp6_parser.yy" // lalr1.cc:859 +#line 234 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } -#line 732 "dhcp6_parser.cc" // lalr1.cc:859 +#line 742 "dhcp6_parser.cc" // lalr1.cc:859 break; case 31: -#line 235 "dhcp6_parser.yy" // lalr1.cc:859 +#line 237 "dhcp6_parser.yy" // lalr1.cc:859 { // Push back the JSON value on the stack ctx.stack_.push_back(yystack_[0].value.as< ElementPtr > ()); } -#line 741 "dhcp6_parser.cc" // lalr1.cc:859 +#line 751 "dhcp6_parser.cc" // lalr1.cc:859 break; case 32: -#line 240 "dhcp6_parser.yy" // lalr1.cc:859 +#line 242 "dhcp6_parser.yy" // lalr1.cc:859 { // 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 752 "dhcp6_parser.cc" // lalr1.cc:859 +#line 762 "dhcp6_parser.cc" // lalr1.cc:859 break; case 33: -#line 245 "dhcp6_parser.yy" // lalr1.cc:859 +#line 247 "dhcp6_parser.yy" // lalr1.cc:859 { // 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 762 "dhcp6_parser.cc" // lalr1.cc:859 +#line 772 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 36: -#line 256 "dhcp6_parser.yy" // lalr1.cc:859 - { - // map containing a single entry - ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ()); - } -#line 771 "dhcp6_parser.cc" // lalr1.cc:859 + case 34: +#line 253 "dhcp6_parser.yy" // lalr1.cc:859 + { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); } +#line 778 "dhcp6_parser.cc" // lalr1.cc:859 break; case 37: #line 260 "dhcp6_parser.yy" // lalr1.cc:859 + { + // map containing a single entry + ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ()); + } +#line 787 "dhcp6_parser.cc" // lalr1.cc:859 + break; + + case 38: +#line 264 "dhcp6_parser.yy" // lalr1.cc:859 { // 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 > ()); } -#line 781 "dhcp6_parser.cc" // lalr1.cc:859 +#line 797 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 38: -#line 267 "dhcp6_parser.yy" // lalr1.cc:859 + case 39: +#line 271 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(l); } -#line 790 "dhcp6_parser.cc" // lalr1.cc:859 - break; - - case 39: -#line 270 "dhcp6_parser.yy" // lalr1.cc:859 - { - // list parsing complete. Put any sanity checking here -} -#line 798 "dhcp6_parser.cc" // lalr1.cc:859 - break; - - case 40: -#line 275 "dhcp6_parser.yy" // lalr1.cc:859 - { - // List parsing about to start -} #line 806 "dhcp6_parser.cc" // lalr1.cc:859 break; + case 40: +#line 274 "dhcp6_parser.yy" // lalr1.cc:859 + { + // list parsing complete. Put any sanity checking here +} +#line 814 "dhcp6_parser.cc" // lalr1.cc:859 + break; + case 41: -#line 277 "dhcp6_parser.yy" // lalr1.cc:859 +#line 279 "dhcp6_parser.yy" // lalr1.cc:859 + { + // List parsing about to start +} +#line 822 "dhcp6_parser.cc" // lalr1.cc:859 + break; + + case 42: +#line 281 "dhcp6_parser.yy" // lalr1.cc:859 { // list parsing complete. Put any sanity checking here //ctx.stack_.pop_back(); } -#line 815 "dhcp6_parser.cc" // lalr1.cc:859 - break; - - case 44: -#line 286 "dhcp6_parser.yy" // lalr1.cc:859 - { - // List consisting of a single element. - ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ()); - } -#line 824 "dhcp6_parser.cc" // lalr1.cc:859 +#line 831 "dhcp6_parser.cc" // lalr1.cc:859 break; case 45: #line 290 "dhcp6_parser.yy" // lalr1.cc:859 { - // List ending with , and a value. + // List consisting of a single element. ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ()); } -#line 833 "dhcp6_parser.cc" // lalr1.cc:859 +#line 840 "dhcp6_parser.cc" // lalr1.cc:859 break; case 46: -#line 301 "dhcp6_parser.yy" // lalr1.cc:859 +#line 294 "dhcp6_parser.yy" // lalr1.cc:859 + { + // List ending with , and a value. + ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ()); + } +#line 849 "dhcp6_parser.cc" // lalr1.cc:859 + break; + + case 47: +#line 305 "dhcp6_parser.yy" // lalr1.cc:859 { const std::string& where = ctx.contextName(); const std::string& keyword = yystack_[1].value.as< std::string > (); error(yystack_[1].location, "got unexpected keyword \"" + keyword + "\" in " + where + " map."); } -#line 844 "dhcp6_parser.cc" // lalr1.cc:859 +#line 860 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 47: -#line 311 "dhcp6_parser.yy" // lalr1.cc:859 + case 48: +#line 315 "dhcp6_parser.yy" // lalr1.cc:859 { // 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 855 "dhcp6_parser.cc" // lalr1.cc:859 +#line 871 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 48: -#line 316 "dhcp6_parser.yy" // lalr1.cc:859 + case 49: +#line 320 "dhcp6_parser.yy" // lalr1.cc:859 { // 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 865 "dhcp6_parser.cc" // lalr1.cc:859 +#line 881 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 56: -#line 335 "dhcp6_parser.yy" // lalr1.cc:859 + case 57: +#line 339 "dhcp6_parser.yy" // lalr1.cc:859 { // This code is executed when we're about to start parsing // the content of the map @@ -874,11 +890,11 @@ namespace isc { namespace dhcp { ctx.stack_.push_back(m); ctx.enter(ctx.DHCP6); } -#line 878 "dhcp6_parser.cc" // lalr1.cc:859 +#line 894 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 57: -#line 342 "dhcp6_parser.yy" // lalr1.cc:859 + case 58: +#line 346 "dhcp6_parser.yy" // lalr1.cc:859 { // map parsing completed. If we ever want to do any wrap up // (maybe some sanity checking), this would be the best place @@ -886,571 +902,571 @@ namespace isc { namespace dhcp { ctx.stack_.pop_back(); ctx.leave(); } -#line 890 "dhcp6_parser.cc" // lalr1.cc:859 - break; - - case 58: -#line 352 "dhcp6_parser.yy" // lalr1.cc:859 - { - // Parse the Dhcp6 map - ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); - ctx.stack_.push_back(m); -} -#line 900 "dhcp6_parser.cc" // lalr1.cc:859 +#line 906 "dhcp6_parser.cc" // lalr1.cc:859 break; case 59: #line 356 "dhcp6_parser.yy" // lalr1.cc:859 { - // parsing completed + // Parse the Dhcp6 map + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.push_back(m); } -#line 908 "dhcp6_parser.cc" // lalr1.cc:859 +#line 916 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 84: -#line 390 "dhcp6_parser.yy" // lalr1.cc:859 + case 60: +#line 360 "dhcp6_parser.yy" // lalr1.cc:859 + { + // parsing completed +} +#line 924 "dhcp6_parser.cc" // lalr1.cc:859 + break; + + case 85: +#line 394 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("preferred-lifetime", prf); } -#line 917 "dhcp6_parser.cc" // lalr1.cc:859 +#line 933 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 85: -#line 395 "dhcp6_parser.yy" // lalr1.cc:859 + case 86: +#line 399 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("valid-lifetime", prf); } -#line 926 "dhcp6_parser.cc" // lalr1.cc:859 +#line 942 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 86: -#line 400 "dhcp6_parser.yy" // lalr1.cc:859 + case 87: +#line 404 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("renew-timer", prf); } -#line 935 "dhcp6_parser.cc" // lalr1.cc:859 +#line 951 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 87: -#line 405 "dhcp6_parser.yy" // lalr1.cc:859 + case 88: +#line 409 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("rebind-timer", prf); } -#line 944 "dhcp6_parser.cc" // lalr1.cc:859 +#line 960 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 88: -#line 410 "dhcp6_parser.yy" // lalr1.cc:859 + case 89: +#line 414 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr dpp(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("decline-probation-period", dpp); } -#line 953 "dhcp6_parser.cc" // lalr1.cc:859 +#line 969 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 89: -#line 415 "dhcp6_parser.yy" // lalr1.cc:859 + case 90: +#line 419 "dhcp6_parser.yy" // lalr1.cc:859 { 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 964 "dhcp6_parser.cc" // lalr1.cc:859 +#line 980 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 90: -#line 420 "dhcp6_parser.yy" // lalr1.cc:859 + case 91: +#line 424 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 973 "dhcp6_parser.cc" // lalr1.cc:859 - break; - - case 91: -#line 425 "dhcp6_parser.yy" // lalr1.cc:859 - { - // Parse the interfaces-config map - ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); - ctx.stack_.push_back(m); -} -#line 983 "dhcp6_parser.cc" // lalr1.cc:859 +#line 989 "dhcp6_parser.cc" // lalr1.cc:859 break; case 92: #line 429 "dhcp6_parser.yy" // lalr1.cc:859 { - // parsing completed + // Parse the interfaces-config map + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.push_back(m); } -#line 991 "dhcp6_parser.cc" // lalr1.cc:859 +#line 999 "dhcp6_parser.cc" // lalr1.cc:859 break; case 93: #line 433 "dhcp6_parser.yy" // lalr1.cc:859 + { + // parsing completed +} +#line 1007 "dhcp6_parser.cc" // lalr1.cc:859 + break; + + case 94: +#line 437 "dhcp6_parser.yy" // lalr1.cc:859 { 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 1002 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1018 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 94: -#line 438 "dhcp6_parser.yy" // lalr1.cc:859 + case 95: +#line 442 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 1011 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1027 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 95: -#line 443 "dhcp6_parser.yy" // lalr1.cc:859 + case 96: +#line 447 "dhcp6_parser.yy" // lalr1.cc:859 { 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 1022 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1038 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 96: -#line 448 "dhcp6_parser.yy" // lalr1.cc:859 + case 97: +#line 452 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 1031 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1047 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 97: -#line 453 "dhcp6_parser.yy" // lalr1.cc:859 + case 98: +#line 457 "dhcp6_parser.yy" // lalr1.cc:859 { 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 1042 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1058 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 98: -#line 458 "dhcp6_parser.yy" // lalr1.cc:859 + case 99: +#line 462 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 1051 "dhcp6_parser.cc" // lalr1.cc:859 - break; - - case 110: -#line 478 "dhcp6_parser.yy" // lalr1.cc:859 - { - ctx.enter(ctx.NO_KEYWORD); -} -#line 1059 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1067 "dhcp6_parser.cc" // lalr1.cc:859 break; case 111: -#line 480 "dhcp6_parser.yy" // lalr1.cc:859 +#line 482 "dhcp6_parser.yy" // lalr1.cc:859 + { + ctx.enter(ctx.NO_KEYWORD); +} +#line 1075 "dhcp6_parser.cc" // lalr1.cc:859 + break; + + case 112: +#line 484 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("type", prf); ctx.leave(); } -#line 1069 "dhcp6_parser.cc" // lalr1.cc:859 - break; - - case 112: -#line 486 "dhcp6_parser.yy" // lalr1.cc:859 - { - ctx.enter(ctx.NO_KEYWORD); -} -#line 1077 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1085 "dhcp6_parser.cc" // lalr1.cc:859 break; case 113: -#line 488 "dhcp6_parser.yy" // lalr1.cc:859 +#line 490 "dhcp6_parser.yy" // lalr1.cc:859 + { + ctx.enter(ctx.NO_KEYWORD); +} +#line 1093 "dhcp6_parser.cc" // lalr1.cc:859 + break; + + case 114: +#line 492 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr user(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("user", user); ctx.leave(); } -#line 1087 "dhcp6_parser.cc" // lalr1.cc:859 - break; - - case 114: -#line 494 "dhcp6_parser.yy" // lalr1.cc:859 - { - ctx.enter(ctx.NO_KEYWORD); -} -#line 1095 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1103 "dhcp6_parser.cc" // lalr1.cc:859 break; case 115: -#line 496 "dhcp6_parser.yy" // lalr1.cc:859 +#line 498 "dhcp6_parser.yy" // lalr1.cc:859 + { + ctx.enter(ctx.NO_KEYWORD); +} +#line 1111 "dhcp6_parser.cc" // lalr1.cc:859 + break; + + case 116: +#line 500 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr pwd(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("password", pwd); ctx.leave(); } -#line 1105 "dhcp6_parser.cc" // lalr1.cc:859 - break; - - case 116: -#line 502 "dhcp6_parser.yy" // lalr1.cc:859 - { - ctx.enter(ctx.NO_KEYWORD); -} -#line 1113 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1121 "dhcp6_parser.cc" // lalr1.cc:859 break; case 117: -#line 504 "dhcp6_parser.yy" // lalr1.cc:859 +#line 506 "dhcp6_parser.yy" // lalr1.cc:859 + { + ctx.enter(ctx.NO_KEYWORD); +} +#line 1129 "dhcp6_parser.cc" // lalr1.cc:859 + break; + + case 118: +#line 508 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr h(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("host", h); ctx.leave(); } -#line 1123 "dhcp6_parser.cc" // lalr1.cc:859 - break; - - case 118: -#line 510 "dhcp6_parser.yy" // lalr1.cc:859 - { - ctx.enter(ctx.NO_KEYWORD); -} -#line 1131 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1139 "dhcp6_parser.cc" // lalr1.cc:859 break; case 119: -#line 512 "dhcp6_parser.yy" // lalr1.cc:859 +#line 514 "dhcp6_parser.yy" // lalr1.cc:859 + { + ctx.enter(ctx.NO_KEYWORD); +} +#line 1147 "dhcp6_parser.cc" // lalr1.cc:859 + break; + + case 120: +#line 516 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("name", name); ctx.leave(); } -#line 1141 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1157 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 120: -#line 518 "dhcp6_parser.yy" // lalr1.cc:859 + case 121: +#line 522 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("persist", n); } -#line 1150 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1166 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 121: -#line 523 "dhcp6_parser.yy" // lalr1.cc:859 + case 122: +#line 527 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("lfc-interval", n); } -#line 1159 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1175 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 122: -#line 528 "dhcp6_parser.yy" // lalr1.cc:859 + case 123: +#line 532 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("readonly", n); } -#line 1168 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1184 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 123: -#line 533 "dhcp6_parser.yy" // lalr1.cc:859 + case 124: +#line 537 "dhcp6_parser.yy" // lalr1.cc:859 { 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 1179 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1195 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 124: -#line 538 "dhcp6_parser.yy" // lalr1.cc:859 + case 125: +#line 542 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 1188 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1204 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 129: -#line 551 "dhcp6_parser.yy" // lalr1.cc:859 + case 130: +#line 555 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(duid); } -#line 1197 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1213 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 130: -#line 556 "dhcp6_parser.yy" // lalr1.cc:859 + case 131: +#line 560 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr duid(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(duid); } -#line 1206 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1222 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 131: -#line 561 "dhcp6_parser.yy" // lalr1.cc:859 + case 132: +#line 565 "dhcp6_parser.yy" // lalr1.cc:859 { 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 1217 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1233 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 132: -#line 566 "dhcp6_parser.yy" // lalr1.cc:859 + case 133: +#line 570 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 1226 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1242 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 137: -#line 579 "dhcp6_parser.yy" // lalr1.cc:859 + case 138: +#line 583 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(hwaddr); } -#line 1235 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1251 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 138: -#line 584 "dhcp6_parser.yy" // lalr1.cc:859 + case 139: +#line 588 "dhcp6_parser.yy" // lalr1.cc:859 { 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 1246 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1262 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 139: -#line 589 "dhcp6_parser.yy" // lalr1.cc:859 + case 140: +#line 593 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 1255 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1271 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 140: -#line 594 "dhcp6_parser.yy" // lalr1.cc:859 + case 141: +#line 598 "dhcp6_parser.yy" // lalr1.cc:859 { 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 1266 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1282 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 141: -#line 599 "dhcp6_parser.yy" // lalr1.cc:859 + case 142: +#line 603 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 1275 "dhcp6_parser.cc" // lalr1.cc:859 - break; - - case 146: -#line 612 "dhcp6_parser.yy" // lalr1.cc:859 - { - ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); - ctx.stack_.back()->add(m); - ctx.stack_.push_back(m); -} -#line 1285 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1291 "dhcp6_parser.cc" // lalr1.cc:859 break; case 147: #line 616 "dhcp6_parser.yy" // lalr1.cc:859 { - ctx.stack_.pop_back(); + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->add(m); + ctx.stack_.push_back(m); } -#line 1293 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1301 "dhcp6_parser.cc" // lalr1.cc:859 break; case 148: #line 620 "dhcp6_parser.yy" // lalr1.cc:859 { - // Parse the hooks-libraries list entry map - ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); - ctx.stack_.push_back(m); + ctx.stack_.pop_back(); } -#line 1303 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1309 "dhcp6_parser.cc" // lalr1.cc:859 break; case 149: #line 624 "dhcp6_parser.yy" // lalr1.cc:859 { - // parsing completed -} -#line 1311 "dhcp6_parser.cc" // lalr1.cc:859 - break; - - case 155: -#line 637 "dhcp6_parser.yy" // lalr1.cc:859 - { - ctx.enter(ctx.NO_KEYWORD); + // Parse the hooks-libraries list entry map + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.push_back(m); } #line 1319 "dhcp6_parser.cc" // lalr1.cc:859 break; + case 150: +#line 628 "dhcp6_parser.yy" // lalr1.cc:859 + { + // parsing completed +} +#line 1327 "dhcp6_parser.cc" // lalr1.cc:859 + break; + case 156: -#line 639 "dhcp6_parser.yy" // lalr1.cc:859 +#line 641 "dhcp6_parser.yy" // lalr1.cc:859 + { + ctx.enter(ctx.NO_KEYWORD); +} +#line 1335 "dhcp6_parser.cc" // lalr1.cc:859 + break; + + case 157: +#line 643 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr lib(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("library", lib); ctx.leave(); } -#line 1329 "dhcp6_parser.cc" // lalr1.cc:859 - break; - - case 157: -#line 645 "dhcp6_parser.yy" // lalr1.cc:859 - { - ctx.enter(ctx.NO_KEYWORD); -} -#line 1337 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1345 "dhcp6_parser.cc" // lalr1.cc:859 break; case 158: -#line 647 "dhcp6_parser.yy" // lalr1.cc:859 +#line 649 "dhcp6_parser.yy" // lalr1.cc:859 + { + ctx.enter(ctx.NO_KEYWORD); +} +#line 1353 "dhcp6_parser.cc" // lalr1.cc:859 + break; + + case 159: +#line 651 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("parameters", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); } -#line 1346 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1362 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 159: -#line 653 "dhcp6_parser.yy" // lalr1.cc:859 + case 160: +#line 657 "dhcp6_parser.yy" // lalr1.cc:859 { 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 1357 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1373 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 160: -#line 658 "dhcp6_parser.yy" // lalr1.cc:859 + case 161: +#line 662 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 1366 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1382 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 169: -#line 675 "dhcp6_parser.yy" // lalr1.cc:859 + case 170: +#line 679 "dhcp6_parser.yy" // lalr1.cc:859 { 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 1375 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1391 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 170: -#line 680 "dhcp6_parser.yy" // lalr1.cc:859 + case 171: +#line 684 "dhcp6_parser.yy" // lalr1.cc:859 { 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 1384 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1400 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 171: -#line 685 "dhcp6_parser.yy" // lalr1.cc:859 + case 172: +#line 689 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hold-reclaimed-time", value); } -#line 1393 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1409 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 172: -#line 690 "dhcp6_parser.yy" // lalr1.cc:859 + case 173: +#line 694 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-reclaim-leases", value); } -#line 1402 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1418 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 173: -#line 695 "dhcp6_parser.yy" // lalr1.cc:859 + case 174: +#line 699 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("max-reclaim-time", value); } -#line 1411 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1427 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 174: -#line 700 "dhcp6_parser.yy" // lalr1.cc:859 + case 175: +#line 704 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("unwarned-reclaim-cycles", value); } -#line 1420 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1436 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 175: -#line 708 "dhcp6_parser.yy" // lalr1.cc:859 + case 176: +#line 712 "dhcp6_parser.yy" // lalr1.cc:859 { 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 1431 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1447 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 176: -#line 713 "dhcp6_parser.yy" // lalr1.cc:859 + case 177: +#line 717 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 1440 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1456 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 181: -#line 733 "dhcp6_parser.yy" // lalr1.cc:859 + case 182: +#line 737 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 1450 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1466 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 182: -#line 737 "dhcp6_parser.yy" // lalr1.cc:859 + case 183: +#line 741 "dhcp6_parser.yy" // lalr1.cc:859 { // Once we reached this place, the subnet parsing is now complete. // If we want to, we can implement default values here. @@ -1469,1183 +1485,1200 @@ namespace isc { namespace dhcp { // } ctx.stack_.pop_back(); } -#line 1473 "dhcp6_parser.cc" // lalr1.cc:859 - break; - - case 183: -#line 756 "dhcp6_parser.yy" // lalr1.cc:859 - { - // Parse the subnet6 list entry map - ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); - ctx.stack_.push_back(m); -} -#line 1483 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1489 "dhcp6_parser.cc" // lalr1.cc:859 break; case 184: #line 760 "dhcp6_parser.yy" // lalr1.cc:859 { - // parsing completed -} -#line 1491 "dhcp6_parser.cc" // lalr1.cc:859 - break; - - case 204: -#line 789 "dhcp6_parser.yy" // lalr1.cc:859 - { - ctx.enter(ctx.NO_KEYWORD); + // Parse the subnet6 list entry map + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.push_back(m); } #line 1499 "dhcp6_parser.cc" // lalr1.cc:859 break; + case 185: +#line 764 "dhcp6_parser.yy" // lalr1.cc:859 + { + // parsing completed +} +#line 1507 "dhcp6_parser.cc" // lalr1.cc:859 + break; + case 205: -#line 791 "dhcp6_parser.yy" // lalr1.cc:859 +#line 793 "dhcp6_parser.yy" // lalr1.cc:859 + { + ctx.enter(ctx.NO_KEYWORD); +} +#line 1515 "dhcp6_parser.cc" // lalr1.cc:859 + break; + + case 206: +#line 795 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr subnet(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("subnet", subnet); ctx.leave(); } -#line 1509 "dhcp6_parser.cc" // lalr1.cc:859 - break; - - case 206: -#line 797 "dhcp6_parser.yy" // lalr1.cc:859 - { - ctx.enter(ctx.NO_KEYWORD); -} -#line 1517 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1525 "dhcp6_parser.cc" // lalr1.cc:859 break; case 207: -#line 799 "dhcp6_parser.yy" // lalr1.cc:859 +#line 801 "dhcp6_parser.yy" // lalr1.cc:859 + { + ctx.enter(ctx.NO_KEYWORD); +} +#line 1533 "dhcp6_parser.cc" // lalr1.cc:859 + break; + + case 208: +#line 803 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("interface", iface); ctx.leave(); } -#line 1527 "dhcp6_parser.cc" // lalr1.cc:859 - break; - - case 208: -#line 805 "dhcp6_parser.yy" // lalr1.cc:859 - { - ctx.enter(ctx.NO_KEYWORD); -} -#line 1535 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1543 "dhcp6_parser.cc" // lalr1.cc:859 break; case 209: -#line 807 "dhcp6_parser.yy" // lalr1.cc:859 +#line 809 "dhcp6_parser.yy" // lalr1.cc:859 + { + ctx.enter(ctx.NO_KEYWORD); +} +#line 1551 "dhcp6_parser.cc" // lalr1.cc:859 + break; + + case 210: +#line 811 "dhcp6_parser.yy" // lalr1.cc:859 { 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 1545 "dhcp6_parser.cc" // lalr1.cc:859 - break; - - case 210: -#line 813 "dhcp6_parser.yy" // lalr1.cc:859 - { - ctx.enter(ctx.CLIENT_CLASS); -} -#line 1553 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1561 "dhcp6_parser.cc" // lalr1.cc:859 break; case 211: -#line 815 "dhcp6_parser.yy" // lalr1.cc:859 +#line 817 "dhcp6_parser.yy" // lalr1.cc:859 + { + ctx.enter(ctx.CLIENT_CLASS); +} +#line 1569 "dhcp6_parser.cc" // lalr1.cc:859 + break; + + case 212: +#line 819 "dhcp6_parser.yy" // lalr1.cc:859 { 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 1563 "dhcp6_parser.cc" // lalr1.cc:859 - break; - - case 212: -#line 821 "dhcp6_parser.yy" // lalr1.cc:859 - { - ctx.enter(ctx.NO_KEYWORD); -} -#line 1571 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1579 "dhcp6_parser.cc" // lalr1.cc:859 break; case 213: -#line 823 "dhcp6_parser.yy" // lalr1.cc:859 +#line 825 "dhcp6_parser.yy" // lalr1.cc:859 + { + ctx.enter(ctx.NO_KEYWORD); +} +#line 1587 "dhcp6_parser.cc" // lalr1.cc:859 + break; + + case 214: +#line 827 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr rm(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("reservation-mode", rm); ctx.leave(); } -#line 1581 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1597 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 214: -#line 829 "dhcp6_parser.yy" // lalr1.cc:859 + case 215: +#line 833 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr id(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("id", id); } -#line 1590 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1606 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 215: -#line 834 "dhcp6_parser.yy" // lalr1.cc:859 + case 216: +#line 838 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr rc(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("rapid-commit", rc); } -#line 1599 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1615 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 216: -#line 843 "dhcp6_parser.yy" // lalr1.cc:859 + case 217: +#line 847 "dhcp6_parser.yy" // lalr1.cc:859 { 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 1610 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1626 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 217: -#line 848 "dhcp6_parser.yy" // lalr1.cc:859 + case 218: +#line 852 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 1619 "dhcp6_parser.cc" // lalr1.cc:859 - break; - - case 222: -#line 865 "dhcp6_parser.yy" // lalr1.cc:859 - { - ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); - ctx.stack_.back()->add(m); - ctx.stack_.push_back(m); -} -#line 1629 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1635 "dhcp6_parser.cc" // lalr1.cc:859 break; case 223: #line 869 "dhcp6_parser.yy" // lalr1.cc:859 { - ctx.stack_.pop_back(); + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->add(m); + ctx.stack_.push_back(m); } -#line 1637 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1645 "dhcp6_parser.cc" // lalr1.cc:859 break; case 224: -#line 876 "dhcp6_parser.yy" // lalr1.cc:859 +#line 873 "dhcp6_parser.yy" // lalr1.cc:859 { - // Parse the option-def list entry map - ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); - ctx.stack_.push_back(m); + ctx.stack_.pop_back(); } -#line 1647 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1653 "dhcp6_parser.cc" // lalr1.cc:859 break; case 225: #line 880 "dhcp6_parser.yy" // lalr1.cc:859 { - // parsing completed + // Parse the option-def list entry map + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.push_back(m); } -#line 1655 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1663 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 239: -#line 906 "dhcp6_parser.yy" // lalr1.cc:859 + case 226: +#line 884 "dhcp6_parser.yy" // lalr1.cc:859 + { + // parsing completed +} +#line 1671 "dhcp6_parser.cc" // lalr1.cc:859 + break; + + case 240: +#line 910 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr code(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("code", code); } -#line 1664 "dhcp6_parser.cc" // lalr1.cc:859 - break; - - case 241: -#line 913 "dhcp6_parser.yy" // lalr1.cc:859 - { - ctx.enter(ctx.NO_KEYWORD); -} -#line 1672 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1680 "dhcp6_parser.cc" // lalr1.cc:859 break; case 242: -#line 915 "dhcp6_parser.yy" // lalr1.cc:859 +#line 917 "dhcp6_parser.yy" // lalr1.cc:859 + { + ctx.enter(ctx.NO_KEYWORD); +} +#line 1688 "dhcp6_parser.cc" // lalr1.cc:859 + break; + + case 243: +#line 919 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("type", prf); ctx.leave(); } -#line 1682 "dhcp6_parser.cc" // lalr1.cc:859 - break; - - case 243: -#line 921 "dhcp6_parser.yy" // lalr1.cc:859 - { - ctx.enter(ctx.NO_KEYWORD); -} -#line 1690 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1698 "dhcp6_parser.cc" // lalr1.cc:859 break; case 244: -#line 923 "dhcp6_parser.yy" // lalr1.cc:859 +#line 925 "dhcp6_parser.yy" // lalr1.cc:859 + { + ctx.enter(ctx.NO_KEYWORD); +} +#line 1706 "dhcp6_parser.cc" // lalr1.cc:859 + break; + + case 245: +#line 927 "dhcp6_parser.yy" // lalr1.cc:859 { 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 1700 "dhcp6_parser.cc" // lalr1.cc:859 - break; - - case 245: -#line 929 "dhcp6_parser.yy" // lalr1.cc:859 - { - ctx.enter(ctx.NO_KEYWORD); -} -#line 1708 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1716 "dhcp6_parser.cc" // lalr1.cc:859 break; case 246: -#line 931 "dhcp6_parser.yy" // lalr1.cc:859 +#line 933 "dhcp6_parser.yy" // lalr1.cc:859 + { + ctx.enter(ctx.NO_KEYWORD); +} +#line 1724 "dhcp6_parser.cc" // lalr1.cc:859 + break; + + case 247: +#line 935 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr space(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("space", space); ctx.leave(); } -#line 1718 "dhcp6_parser.cc" // lalr1.cc:859 - break; - - case 248: -#line 939 "dhcp6_parser.yy" // lalr1.cc:859 - { - ctx.enter(ctx.NO_KEYWORD); -} -#line 1726 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1734 "dhcp6_parser.cc" // lalr1.cc:859 break; case 249: -#line 941 "dhcp6_parser.yy" // lalr1.cc:859 +#line 943 "dhcp6_parser.yy" // lalr1.cc:859 + { + ctx.enter(ctx.NO_KEYWORD); +} +#line 1742 "dhcp6_parser.cc" // lalr1.cc:859 + break; + + case 250: +#line 945 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr encap(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("encapsulate", encap); ctx.leave(); } -#line 1736 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1752 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 250: -#line 947 "dhcp6_parser.yy" // lalr1.cc:859 + case 251: +#line 951 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr array(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("array", array); } -#line 1745 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1761 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 251: -#line 956 "dhcp6_parser.yy" // lalr1.cc:859 + case 252: +#line 960 "dhcp6_parser.yy" // lalr1.cc:859 { 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 1756 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1772 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 252: -#line 961 "dhcp6_parser.yy" // lalr1.cc:859 + case 253: +#line 965 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 1765 "dhcp6_parser.cc" // lalr1.cc:859 - break; - - case 257: -#line 980 "dhcp6_parser.yy" // lalr1.cc:859 - { - ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); - ctx.stack_.back()->add(m); - ctx.stack_.push_back(m); -} -#line 1775 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1781 "dhcp6_parser.cc" // lalr1.cc:859 break; case 258: #line 984 "dhcp6_parser.yy" // lalr1.cc:859 { - ctx.stack_.pop_back(); + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->add(m); + ctx.stack_.push_back(m); } -#line 1783 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1791 "dhcp6_parser.cc" // lalr1.cc:859 break; case 259: -#line 991 "dhcp6_parser.yy" // lalr1.cc:859 +#line 988 "dhcp6_parser.yy" // lalr1.cc:859 { - // Parse the option-data list entry map - ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); - ctx.stack_.push_back(m); + ctx.stack_.pop_back(); } -#line 1793 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1799 "dhcp6_parser.cc" // lalr1.cc:859 break; case 260: #line 995 "dhcp6_parser.yy" // lalr1.cc:859 { - // parsing completed -} -#line 1801 "dhcp6_parser.cc" // lalr1.cc:859 - break; - - case 272: -#line 1024 "dhcp6_parser.yy" // lalr1.cc:859 - { - ctx.enter(ctx.NO_KEYWORD); + // Parse the option-data list entry map + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.push_back(m); } #line 1809 "dhcp6_parser.cc" // lalr1.cc:859 break; + case 261: +#line 999 "dhcp6_parser.yy" // lalr1.cc:859 + { + // parsing completed +} +#line 1817 "dhcp6_parser.cc" // lalr1.cc:859 + break; + case 273: -#line 1026 "dhcp6_parser.yy" // lalr1.cc:859 +#line 1028 "dhcp6_parser.yy" // lalr1.cc:859 + { + ctx.enter(ctx.NO_KEYWORD); +} +#line 1825 "dhcp6_parser.cc" // lalr1.cc:859 + break; + + case 274: +#line 1030 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr data(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("data", data); ctx.leave(); } -#line 1819 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1835 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 276: -#line 1036 "dhcp6_parser.yy" // lalr1.cc:859 + case 277: +#line 1040 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr space(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("csv-format", space); } -#line 1828 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1844 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 277: -#line 1044 "dhcp6_parser.yy" // lalr1.cc:859 + case 278: +#line 1048 "dhcp6_parser.yy" // lalr1.cc:859 { 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 1839 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1855 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 278: -#line 1049 "dhcp6_parser.yy" // lalr1.cc:859 + case 279: +#line 1053 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 1848 "dhcp6_parser.cc" // lalr1.cc:859 - break; - - case 283: -#line 1064 "dhcp6_parser.yy" // lalr1.cc:859 - { - ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); - ctx.stack_.back()->add(m); - ctx.stack_.push_back(m); -} -#line 1858 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1864 "dhcp6_parser.cc" // lalr1.cc:859 break; case 284: #line 1068 "dhcp6_parser.yy" // lalr1.cc:859 { - ctx.stack_.pop_back(); + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.back()->add(m); + ctx.stack_.push_back(m); } -#line 1866 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1874 "dhcp6_parser.cc" // lalr1.cc:859 break; case 285: #line 1072 "dhcp6_parser.yy" // lalr1.cc:859 { - // Parse the pool list entry map - ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); - ctx.stack_.push_back(m); + ctx.stack_.pop_back(); } -#line 1876 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1882 "dhcp6_parser.cc" // lalr1.cc:859 break; case 286: #line 1076 "dhcp6_parser.yy" // lalr1.cc:859 { - // parsing completed -} -#line 1884 "dhcp6_parser.cc" // lalr1.cc:859 - break; - - case 292: -#line 1089 "dhcp6_parser.yy" // lalr1.cc:859 - { - ctx.enter(ctx.NO_KEYWORD); + // Parse the pool list entry map + ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); + ctx.stack_.push_back(m); } #line 1892 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 293: -#line 1091 "dhcp6_parser.yy" // lalr1.cc:859 + case 287: +#line 1080 "dhcp6_parser.yy" // lalr1.cc:859 + { + // parsing completed +} +#line 1900 "dhcp6_parser.cc" // lalr1.cc:859 + break; + + case 294: +#line 1094 "dhcp6_parser.yy" // lalr1.cc:859 + { + ctx.enter(ctx.NO_KEYWORD); +} +#line 1908 "dhcp6_parser.cc" // lalr1.cc:859 + break; + + case 295: +#line 1096 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr pool(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("pool", pool); ctx.leave(); } -#line 1902 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1918 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 294: -#line 1100 "dhcp6_parser.yy" // lalr1.cc:859 + case 296: +#line 1102 "dhcp6_parser.yy" // lalr1.cc:859 + { + ctx.enter(ctx.NO_KEYWORD); +} +#line 1926 "dhcp6_parser.cc" // lalr1.cc:859 + break; + + case 297: +#line 1104 "dhcp6_parser.yy" // lalr1.cc:859 + { + ctx.stack_.back()->set("user-context", yystack_[0].value.as< ElementPtr > ()); + ctx.leave(); +} +#line 1935 "dhcp6_parser.cc" // lalr1.cc:859 + break; + + case 298: +#line 1112 "dhcp6_parser.yy" // lalr1.cc:859 { 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 1913 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1946 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 295: -#line 1105 "dhcp6_parser.yy" // lalr1.cc:859 + case 299: +#line 1117 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 1922 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1955 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 300: -#line 1120 "dhcp6_parser.yy" // lalr1.cc:859 + case 304: +#line 1132 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 1932 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1965 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 301: -#line 1124 "dhcp6_parser.yy" // lalr1.cc:859 + case 305: +#line 1136 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); } -#line 1940 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1973 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 302: -#line 1128 "dhcp6_parser.yy" // lalr1.cc:859 + case 306: +#line 1140 "dhcp6_parser.yy" // lalr1.cc:859 { // Parse the pd-pool list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 1950 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1983 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 303: -#line 1132 "dhcp6_parser.yy" // lalr1.cc:859 + case 307: +#line 1144 "dhcp6_parser.yy" // lalr1.cc:859 { // parsing completed } -#line 1958 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1991 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 313: -#line 1149 "dhcp6_parser.yy" // lalr1.cc:859 + case 318: +#line 1162 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 1966 "dhcp6_parser.cc" // lalr1.cc:859 +#line 1999 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 314: -#line 1151 "dhcp6_parser.yy" // lalr1.cc:859 + case 319: +#line 1164 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("prefix", prf); ctx.leave(); } -#line 1976 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2009 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 315: -#line 1157 "dhcp6_parser.yy" // lalr1.cc:859 + case 320: +#line 1170 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("prefix-len", prf); } -#line 1985 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2018 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 316: -#line 1162 "dhcp6_parser.yy" // lalr1.cc:859 + case 321: +#line 1175 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 1993 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2026 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 317: -#line 1164 "dhcp6_parser.yy" // lalr1.cc:859 + case 322: +#line 1177 "dhcp6_parser.yy" // lalr1.cc:859 { 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 2003 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2036 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 318: -#line 1170 "dhcp6_parser.yy" // lalr1.cc:859 + case 323: +#line 1183 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("excluded-prefix-len", prf); } -#line 2012 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2045 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 319: -#line 1175 "dhcp6_parser.yy" // lalr1.cc:859 + case 324: +#line 1188 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr deleg(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("delegated-len", deleg); } -#line 2021 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2054 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 320: -#line 1183 "dhcp6_parser.yy" // lalr1.cc:859 + case 325: +#line 1196 "dhcp6_parser.yy" // lalr1.cc:859 { 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 2032 "dhcp6_parser.cc" // lalr1.cc:859 - break; - - case 321: -#line 1188 "dhcp6_parser.yy" // lalr1.cc:859 - { - ctx.stack_.pop_back(); - ctx.leave(); -} -#line 2041 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2065 "dhcp6_parser.cc" // lalr1.cc:859 break; case 326: #line 1201 "dhcp6_parser.yy" // lalr1.cc:859 + { + ctx.stack_.pop_back(); + ctx.leave(); +} +#line 2074 "dhcp6_parser.cc" // lalr1.cc:859 + break; + + case 331: +#line 1214 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 2051 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2084 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 327: -#line 1205 "dhcp6_parser.yy" // lalr1.cc:859 + case 332: +#line 1218 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); } -#line 2059 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2092 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 328: -#line 1209 "dhcp6_parser.yy" // lalr1.cc:859 + case 333: +#line 1222 "dhcp6_parser.yy" // lalr1.cc:859 { // Parse the reservations list entry map ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.push_back(m); } -#line 2069 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2102 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 329: -#line 1213 "dhcp6_parser.yy" // lalr1.cc:859 + case 334: +#line 1226 "dhcp6_parser.yy" // lalr1.cc:859 { // parsing completed } -#line 2077 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2110 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 342: -#line 1236 "dhcp6_parser.yy" // lalr1.cc:859 + case 347: +#line 1249 "dhcp6_parser.yy" // lalr1.cc:859 { 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 2088 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2121 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 343: -#line 1241 "dhcp6_parser.yy" // lalr1.cc:859 + case 348: +#line 1254 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2097 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2130 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 344: -#line 1246 "dhcp6_parser.yy" // lalr1.cc:859 + case 349: +#line 1259 "dhcp6_parser.yy" // lalr1.cc:859 { 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 2108 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2141 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 345: -#line 1251 "dhcp6_parser.yy" // lalr1.cc:859 + case 350: +#line 1264 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2117 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2150 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 346: -#line 1256 "dhcp6_parser.yy" // lalr1.cc:859 + case 351: +#line 1269 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2125 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2158 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 347: -#line 1258 "dhcp6_parser.yy" // lalr1.cc:859 + case 352: +#line 1271 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr d(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("duid", d); ctx.leave(); } -#line 2135 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2168 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 348: -#line 1264 "dhcp6_parser.yy" // lalr1.cc:859 + case 353: +#line 1277 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2143 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2176 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 349: -#line 1266 "dhcp6_parser.yy" // lalr1.cc:859 + case 354: +#line 1279 "dhcp6_parser.yy" // lalr1.cc:859 { 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 2153 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2186 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 350: -#line 1272 "dhcp6_parser.yy" // lalr1.cc:859 + case 355: +#line 1285 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2161 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2194 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 351: -#line 1274 "dhcp6_parser.yy" // lalr1.cc:859 + case 356: +#line 1287 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr host(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("hostname", host); ctx.leave(); } -#line 2171 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2204 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 352: -#line 1280 "dhcp6_parser.yy" // lalr1.cc:859 + case 357: +#line 1293 "dhcp6_parser.yy" // lalr1.cc:859 { 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 2182 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2215 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 353: -#line 1285 "dhcp6_parser.yy" // lalr1.cc:859 + case 358: +#line 1298 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2191 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2224 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 354: -#line 1293 "dhcp6_parser.yy" // lalr1.cc:859 + case 359: +#line 1306 "dhcp6_parser.yy" // lalr1.cc:859 { 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 2202 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2235 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 355: -#line 1298 "dhcp6_parser.yy" // lalr1.cc:859 + case 360: +#line 1311 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2211 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2244 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 356: -#line 1303 "dhcp6_parser.yy" // lalr1.cc:859 + case 361: +#line 1316 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2219 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2252 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 357: -#line 1305 "dhcp6_parser.yy" // lalr1.cc:859 + case 362: +#line 1318 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr ip(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("ip-address", ip); ctx.leave(); } -#line 2229 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2262 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 358: -#line 1314 "dhcp6_parser.yy" // lalr1.cc:859 + case 363: +#line 1327 "dhcp6_parser.yy" // lalr1.cc:859 { 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 2240 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2273 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 359: -#line 1319 "dhcp6_parser.yy" // lalr1.cc:859 + case 364: +#line 1332 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2249 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2282 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 362: -#line 1328 "dhcp6_parser.yy" // lalr1.cc:859 + case 367: +#line 1341 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 2259 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2292 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 363: -#line 1332 "dhcp6_parser.yy" // lalr1.cc:859 + case 368: +#line 1345 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); } -#line 2267 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2300 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 373: -#line 1352 "dhcp6_parser.yy" // lalr1.cc:859 + case 378: +#line 1365 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2275 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2308 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 374: -#line 1354 "dhcp6_parser.yy" // lalr1.cc:859 + case 379: +#line 1367 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr test(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("test", test); ctx.leave(); } -#line 2285 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2318 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 375: -#line 1363 "dhcp6_parser.yy" // lalr1.cc:859 + case 380: +#line 1376 "dhcp6_parser.yy" // lalr1.cc:859 { 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 2296 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2329 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 376: -#line 1368 "dhcp6_parser.yy" // lalr1.cc:859 + case 381: +#line 1381 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2305 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2338 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 386: -#line 1386 "dhcp6_parser.yy" // lalr1.cc:859 + case 391: +#line 1399 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.DUID_TYPE); } -#line 2313 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2346 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 387: -#line 1388 "dhcp6_parser.yy" // lalr1.cc:859 + case 392: +#line 1401 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("type", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); } -#line 2322 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2355 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 388: -#line 1393 "dhcp6_parser.yy" // lalr1.cc:859 + case 393: +#line 1406 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("LLT", ctx.loc2pos(yystack_[0].location))); } -#line 2328 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2361 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 389: -#line 1394 "dhcp6_parser.yy" // lalr1.cc:859 + case 394: +#line 1407 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("EN", ctx.loc2pos(yystack_[0].location))); } -#line 2334 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2367 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 390: -#line 1395 "dhcp6_parser.yy" // lalr1.cc:859 + case 395: +#line 1408 "dhcp6_parser.yy" // lalr1.cc:859 { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("LL", ctx.loc2pos(yystack_[0].location))); } -#line 2340 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2373 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 391: -#line 1398 "dhcp6_parser.yy" // lalr1.cc:859 + case 396: +#line 1411 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr htype(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("htype", htype); } -#line 2349 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2382 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 392: -#line 1403 "dhcp6_parser.yy" // lalr1.cc:859 + case 397: +#line 1416 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2357 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2390 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 393: -#line 1405 "dhcp6_parser.yy" // lalr1.cc:859 + case 398: +#line 1418 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr id(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("identifier", id); ctx.leave(); } -#line 2367 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2400 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 394: -#line 1411 "dhcp6_parser.yy" // lalr1.cc:859 + case 399: +#line 1424 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("time", time); } -#line 2376 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2409 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 395: -#line 1416 "dhcp6_parser.yy" // lalr1.cc:859 + case 400: +#line 1429 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("enterprise-id", time); } -#line 2385 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2418 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 396: -#line 1423 "dhcp6_parser.yy" // lalr1.cc:859 + case 401: +#line 1436 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("dhcp4o6-port", time); } -#line 2394 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2427 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 397: -#line 1430 "dhcp6_parser.yy" // lalr1.cc:859 + case 402: +#line 1443 "dhcp6_parser.yy" // lalr1.cc:859 { 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 2405 "dhcp6_parser.cc" // lalr1.cc:859 - break; - - case 398: -#line 1435 "dhcp6_parser.yy" // lalr1.cc:859 - { - ctx.stack_.pop_back(); - ctx.leave(); -} -#line 2414 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2438 "dhcp6_parser.cc" // lalr1.cc:859 break; case 403: #line 1448 "dhcp6_parser.yy" // lalr1.cc:859 { - ctx.enter(ctx.NO_KEYWORD); + ctx.stack_.pop_back(); + ctx.leave(); } -#line 2422 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2447 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 404: -#line 1450 "dhcp6_parser.yy" // lalr1.cc:859 + case 408: +#line 1461 "dhcp6_parser.yy" // lalr1.cc:859 + { + ctx.enter(ctx.NO_KEYWORD); +} +#line 2455 "dhcp6_parser.cc" // lalr1.cc:859 + break; + + case 409: +#line 1463 "dhcp6_parser.yy" // lalr1.cc:859 { 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 2432 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2465 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 405: -#line 1456 "dhcp6_parser.yy" // lalr1.cc:859 + case 410: +#line 1469 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2440 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2473 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 406: -#line 1458 "dhcp6_parser.yy" // lalr1.cc:859 + case 411: +#line 1471 "dhcp6_parser.yy" // lalr1.cc:859 { 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 2450 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2483 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 407: -#line 1466 "dhcp6_parser.yy" // lalr1.cc:859 + case 412: +#line 1479 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("dhcp-ddns", m); ctx.stack_.push_back(m); ctx.enter(ctx.NO_KEYWORD); } -#line 2461 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2494 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 408: -#line 1471 "dhcp6_parser.yy" // lalr1.cc:859 + case 413: +#line 1484 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2470 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2503 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 409: -#line 1478 "dhcp6_parser.yy" // lalr1.cc:859 + case 414: +#line 1491 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2478 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2511 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 410: -#line 1480 "dhcp6_parser.yy" // lalr1.cc:859 + case 415: +#line 1493 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("Dhcp4", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); } -#line 2487 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2520 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 411: -#line 1485 "dhcp6_parser.yy" // lalr1.cc:859 + case 416: +#line 1498 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2495 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2528 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 412: -#line 1487 "dhcp6_parser.yy" // lalr1.cc:859 + case 417: +#line 1500 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.back()->set("DhcpDdns", yystack_[0].value.as< ElementPtr > ()); ctx.leave(); } -#line 2504 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2537 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 413: -#line 1497 "dhcp6_parser.yy" // lalr1.cc:859 + case 418: +#line 1510 "dhcp6_parser.yy" // lalr1.cc:859 { 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 2515 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2548 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 414: -#line 1502 "dhcp6_parser.yy" // lalr1.cc:859 + case 419: +#line 1515 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2524 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2557 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 418: -#line 1519 "dhcp6_parser.yy" // lalr1.cc:859 + case 423: +#line 1532 "dhcp6_parser.yy" // lalr1.cc:859 { 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 2535 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2568 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 419: -#line 1524 "dhcp6_parser.yy" // lalr1.cc:859 + case 424: +#line 1537 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2544 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2577 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 422: -#line 1536 "dhcp6_parser.yy" // lalr1.cc:859 + case 427: +#line 1549 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(l); ctx.stack_.push_back(l); } -#line 2554 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2587 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 423: -#line 1540 "dhcp6_parser.yy" // lalr1.cc:859 + case 428: +#line 1553 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); } -#line 2562 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2595 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 431: -#line 1555 "dhcp6_parser.yy" // lalr1.cc:859 + case 436: +#line 1568 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr dl(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("debuglevel", dl); } -#line 2571 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2604 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 432: -#line 1559 "dhcp6_parser.yy" // lalr1.cc:859 + case 437: +#line 1572 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2579 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2612 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 433: -#line 1561 "dhcp6_parser.yy" // lalr1.cc:859 + case 438: +#line 1574 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("severity", sev); ctx.leave(); } -#line 2589 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2622 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 434: -#line 1567 "dhcp6_parser.yy" // lalr1.cc:859 + case 439: +#line 1580 "dhcp6_parser.yy" // lalr1.cc:859 { 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 2600 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2633 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 435: -#line 1572 "dhcp6_parser.yy" // lalr1.cc:859 + case 440: +#line 1585 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); ctx.leave(); } -#line 2609 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2642 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 438: -#line 1581 "dhcp6_parser.yy" // lalr1.cc:859 + case 443: +#line 1594 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->add(m); ctx.stack_.push_back(m); } -#line 2619 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2652 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 439: -#line 1585 "dhcp6_parser.yy" // lalr1.cc:859 + case 444: +#line 1598 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.stack_.pop_back(); } -#line 2627 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2660 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 442: -#line 1593 "dhcp6_parser.yy" // lalr1.cc:859 + case 447: +#line 1606 "dhcp6_parser.yy" // lalr1.cc:859 { ctx.enter(ctx.NO_KEYWORD); } -#line 2635 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2668 "dhcp6_parser.cc" // lalr1.cc:859 break; - case 443: -#line 1595 "dhcp6_parser.yy" // lalr1.cc:859 + case 448: +#line 1608 "dhcp6_parser.yy" // lalr1.cc:859 { ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); ctx.stack_.back()->set("output", sev); ctx.leave(); } -#line 2645 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2678 "dhcp6_parser.cc" // lalr1.cc:859 break; -#line 2649 "dhcp6_parser.cc" // lalr1.cc:859 +#line 2682 "dhcp6_parser.cc" // lalr1.cc:859 default: break; } @@ -2900,88 +2933,88 @@ namespace isc { namespace dhcp { } - const short int Dhcp6Parser::yypact_ninf_ = -427; + const short int Dhcp6Parser::yypact_ninf_ = -432; const signed char Dhcp6Parser::yytable_ninf_ = -1; const short int Dhcp6Parser::yypact_[] = { - 107, -427, -427, -427, -427, -427, -427, -427, -427, -427, - -427, -427, 29, 21, 32, 56, 58, 60, 67, 71, - 73, 83, 103, 108, -427, -427, -427, -427, -427, -427, - -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, - -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, - -427, -427, -427, -427, -427, -427, 21, -56, 12, 59, - 42, 11, -8, 95, 93, 61, 72, 50, -427, 117, - 124, 129, 134, 148, -427, -427, -427, -427, 153, -427, - 45, -427, -427, -427, -427, -427, -427, -427, -427, 196, - 198, 237, 245, 246, -427, -427, -427, -427, -427, -427, - -427, -427, -427, -427, 265, -427, -427, -427, 47, -427, - -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, - -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, - -427, -427, 217, -427, -427, -427, -427, -427, -427, 266, - 267, -427, -427, -427, -427, -427, -427, -427, -427, -427, - 63, -427, -427, -427, -427, -427, -427, -427, -427, -427, - -427, -427, -427, -427, -427, -427, -427, 118, -427, -427, - -427, 268, -427, 270, 272, -427, -427, 138, -427, -427, - -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, - -427, -427, 250, 274, -427, -427, -427, -427, -427, -427, - -427, -427, -427, 275, -427, -427, -427, 276, -427, -427, - 273, 279, -427, -427, -427, -427, -427, -427, -427, -427, - -427, -427, -427, 280, -427, -427, -427, -427, 277, 283, - -427, -427, -427, -427, -427, -427, -427, -427, -427, 156, - -427, -427, -427, -427, 21, 21, -427, 170, 284, 285, - 286, 287, -427, 12, -427, 288, 289, 290, 174, 187, - 192, 193, 194, 291, 293, 294, 295, 296, 300, 301, - 302, 303, 304, 200, 306, 307, 59, -427, 308, -427, - 8, 309, 310, 311, 312, 313, 209, 176, 315, 316, - 317, 318, 11, -427, 319, -8, -427, 320, 216, 322, - 218, 219, 95, -427, 325, 326, 327, 328, 329, 330, - -427, 93, 331, 332, 231, 335, 337, 338, 234, -427, - 61, 339, 235, -427, 72, 340, 343, 82, -427, -427, - -427, 344, 342, 346, 21, 21, -427, 347, 348, 349, - -427, -427, -427, -427, -427, 345, 352, 355, 356, 357, - 358, 359, 360, 361, 364, -427, 365, 366, -427, 357, - -427, -427, -427, -427, 367, 363, -427, -427, -427, 362, - 369, 269, 271, 278, -427, -427, 281, 282, 373, 374, - -427, 292, -427, 297, -427, 298, -427, -427, -427, 357, - 357, 357, 299, 314, 321, -427, 323, 324, -427, 333, - 334, 336, -427, -427, 341, -427, -427, 350, 21, -427, - 21, 59, 305, -427, -427, 42, 26, 26, 375, 376, - 378, -29, -427, -427, 123, 20, 380, 146, 80, 181, - -56, -427, 384, -427, 8, 385, 386, -427, -427, -427, - -427, -427, 387, 351, -427, -427, -427, -427, -427, -427, - -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, - -427, -427, 163, -427, 171, -427, -427, 372, -427, -427, - -427, -427, 392, 393, 394, -427, 175, -427, -427, -427, - -427, -427, -427, -427, -427, -427, 178, -427, 395, 388, - -427, -427, 396, 400, -427, -427, 398, 405, -427, -427, - -427, 86, -427, -427, -427, 21, -427, -427, 162, -427, - -427, -427, 233, -427, 403, 407, -427, 408, 410, 411, - 413, 414, 415, 188, -427, -427, -427, -427, -427, -427, - -427, -427, -427, 416, 417, 419, -427, -427, 189, -427, - -427, -427, -427, -427, -427, -427, -427, 190, -427, -427, - -427, 191, 353, -427, -427, 418, 422, -427, -427, 420, - 424, -427, -427, 427, 425, -427, -427, 391, -427, 426, - 305, -427, -427, 430, 431, 432, 433, 354, 368, 370, - 26, -427, -427, 11, -427, 375, 61, -427, 376, 72, - -427, 378, -29, -427, 434, 123, -427, 20, -427, 50, - -427, 380, 371, 377, 379, 381, 382, 383, 146, -427, - 435, 439, 389, 390, 397, 80, -427, 441, 442, 181, - -427, -427, -427, -8, -427, 385, 95, -427, 386, 93, - -427, 387, 443, -427, 445, -427, 399, 401, 402, 404, - -427, -427, -427, -427, 220, -427, 440, -427, 444, -427, - -427, -427, -427, -427, 221, -427, -427, -427, -427, -427, - -427, -427, -427, 186, 406, -427, -427, -427, -427, 409, - 412, -427, 223, -427, 224, -427, 446, -427, 421, 448, - -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, - -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, - 240, -427, 79, 448, -427, -427, 447, -427, -427, -427, - 230, -427, -427, -427, -427, -427, 449, 423, 452, 79, - -427, 454, -427, 428, -427, 450, -427, -427, 254, -427, - 429, 450, -427, -427, 232, -427, -427, 456, 429, -427, - 436, -427, -427 + 101, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, 43, 19, 40, 89, 108, 110, 138, 152, + 154, 163, 165, 174, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, 19, 80, 17, 65, + 47, 16, 66, 7, 77, 67, 39, -8, -432, 190, + 210, 216, 220, 229, -432, -432, -432, -432, 234, -432, + 54, -432, -432, -432, -432, -432, -432, -432, -432, 238, + 247, 250, 260, 263, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, 267, -432, -432, -432, 119, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, 264, -432, -432, -432, -432, -432, -432, 269, + 270, -432, -432, -432, -432, -432, -432, -432, -432, -432, + 144, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, 150, -432, + -432, -432, -432, 271, -432, 272, 273, -432, -432, -432, + 170, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, 274, 275, -432, -432, -432, + -432, -432, -432, -432, -432, -432, 276, -432, -432, -432, + 279, -432, -432, 277, 281, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, 282, -432, -432, -432, + -432, 280, 284, -432, -432, -432, -432, -432, -432, -432, + -432, -432, 176, -432, -432, -432, -432, 19, 19, -432, + 183, 285, 286, 287, 289, -432, 17, -432, 290, 291, + 292, 188, 191, 192, 193, 194, 293, 295, 296, 301, + 302, 303, 304, 305, 306, 307, 202, 309, 310, 65, + -432, 311, -432, 114, 312, 313, 314, 315, 316, 212, + 213, 317, 319, 320, 322, 16, -432, 323, 324, 66, + -432, 325, 222, 326, 223, 224, 7, -432, 327, 331, + 332, 333, 334, 335, -432, 77, 336, 337, 232, 341, + 342, 343, 236, -432, 67, 345, 239, -432, 39, 346, + 348, 178, -432, -432, -432, 349, 347, 351, 19, 19, + -432, 352, 353, 354, -432, -432, -432, -432, -432, 350, + 357, 360, 361, 362, 363, 364, 365, 366, 369, -432, + 370, 371, -432, 362, -432, -432, -432, -432, 372, 368, + -432, -432, -432, 367, 374, 278, 283, 288, -432, -432, + 294, 297, 377, 376, -432, 298, 378, -432, 299, -432, + 300, -432, -432, -432, 362, 362, 362, 308, 318, 321, + -432, 328, 329, -432, 330, 338, 339, -432, -432, 340, + -432, -432, 344, 19, -432, 19, 65, 355, -432, -432, + 47, 14, 14, 379, 381, 383, -25, -432, -432, 23, + 76, 384, 93, 27, 181, 80, -432, 380, -432, 114, + 386, 387, -432, -432, -432, -432, -432, 388, 356, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, 177, + -432, 179, -432, -432, 390, -432, -432, -432, -432, 392, + 395, 396, -432, 180, -432, -432, -432, -432, -432, -432, + -432, -432, -432, 189, -432, 398, 399, -432, -432, 404, + 402, -432, -432, 405, 409, -432, -432, -432, 52, -432, + -432, -432, 19, -432, -432, 74, -432, -432, -432, 143, + -432, 407, 411, -432, 397, 412, 415, 417, 419, 420, + 207, -432, -432, -432, -432, -432, -432, -432, -432, -432, + 421, 422, 424, -432, -432, 208, -432, -432, -432, -432, + -432, -432, -432, -432, 209, -432, -432, -432, 211, 358, + -432, -432, 423, 428, -432, -432, 426, 430, -432, -432, + 429, 431, -432, -432, 432, -432, 437, 355, -432, -432, + 438, 439, 440, 441, 359, 373, 375, 14, -432, -432, + 16, -432, 379, 67, -432, 381, 39, -432, 383, -25, + -432, 444, 23, -432, 76, -432, -8, -432, 384, 382, + 385, 389, 391, 393, 394, 93, -432, 447, 448, 400, + 401, 403, 27, -432, 450, 451, 181, -432, -432, -432, + 66, -432, 386, 7, -432, 387, 77, -432, 388, 452, + -432, 410, -432, 406, 408, 414, 416, -432, -432, -432, + -432, 218, -432, 449, -432, 453, -432, -432, -432, -432, + -432, 219, -432, -432, -432, -432, -432, -432, -432, -432, + 182, 418, -432, -432, -432, -432, 425, 427, -432, 221, + -432, 227, -432, 454, -432, 433, 456, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, 187, -432, 68, + 456, -432, -432, 455, -432, -432, -432, 228, -432, -432, + -432, -432, -432, 460, 434, 461, 68, -432, 463, -432, + 442, -432, 459, -432, -432, 237, -432, 413, 459, -432, + -432, 231, -432, -432, 465, 413, -432, 443, -432, -432 }; const unsigned short int @@ -2989,421 +3022,421 @@ namespace isc { namespace dhcp { { 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 38, 32, 28, 27, 24, - 25, 26, 31, 3, 29, 30, 47, 5, 58, 7, - 91, 9, 183, 11, 285, 13, 302, 15, 328, 17, - 224, 19, 259, 21, 148, 23, 42, 34, 0, 0, - 0, 0, 0, 0, 330, 226, 261, 0, 44, 0, - 43, 0, 0, 35, 56, 413, 409, 411, 0, 55, - 0, 49, 51, 53, 54, 52, 89, 95, 97, 0, - 0, 0, 0, 0, 175, 216, 251, 123, 138, 131, - 358, 140, 159, 375, 0, 397, 407, 83, 0, 60, - 62, 63, 64, 65, 66, 68, 69, 70, 71, 73, - 72, 77, 78, 67, 75, 76, 74, 79, 80, 81, - 82, 93, 0, 362, 277, 294, 204, 206, 208, 0, - 0, 212, 210, 320, 354, 203, 187, 188, 189, 190, - 0, 185, 194, 195, 196, 199, 201, 197, 198, 191, - 192, 193, 200, 202, 292, 291, 290, 0, 287, 289, - 313, 0, 316, 0, 0, 312, 309, 0, 304, 306, - 307, 310, 311, 308, 352, 342, 344, 346, 348, 350, - 341, 340, 0, 331, 332, 336, 337, 334, 338, 339, - 335, 241, 118, 0, 245, 243, 248, 0, 237, 238, - 0, 227, 228, 230, 240, 231, 232, 233, 247, 234, - 235, 236, 272, 0, 270, 271, 274, 275, 0, 262, - 263, 265, 266, 267, 268, 269, 155, 157, 152, 0, - 150, 153, 154, 39, 0, 0, 33, 0, 0, 0, - 0, 0, 46, 0, 48, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 39, 32, 28, 27, 24, + 25, 26, 31, 3, 29, 30, 48, 5, 59, 7, + 92, 9, 184, 11, 286, 13, 306, 15, 333, 17, + 225, 19, 260, 21, 149, 23, 43, 35, 0, 0, + 0, 0, 0, 0, 335, 227, 262, 0, 45, 0, + 44, 0, 0, 36, 57, 418, 414, 416, 0, 56, + 0, 50, 52, 54, 55, 53, 90, 96, 98, 0, + 0, 0, 0, 0, 176, 217, 252, 124, 139, 132, + 363, 141, 160, 380, 0, 402, 412, 84, 0, 61, + 63, 64, 65, 66, 67, 69, 70, 71, 72, 74, + 73, 78, 79, 68, 76, 77, 75, 80, 81, 82, + 83, 94, 0, 367, 278, 298, 205, 207, 209, 0, + 0, 213, 211, 325, 359, 204, 188, 189, 190, 191, + 0, 186, 195, 196, 197, 200, 202, 198, 199, 192, + 193, 194, 201, 203, 294, 296, 293, 291, 0, 288, + 290, 292, 318, 0, 321, 0, 0, 317, 313, 316, + 0, 308, 310, 311, 314, 315, 312, 357, 347, 349, + 351, 353, 355, 346, 345, 0, 336, 337, 341, 342, + 339, 343, 344, 340, 242, 119, 0, 246, 244, 249, + 0, 238, 239, 0, 228, 229, 231, 241, 232, 233, + 234, 248, 235, 236, 237, 273, 0, 271, 272, 275, + 276, 0, 263, 264, 266, 267, 268, 269, 270, 156, + 158, 153, 0, 151, 154, 155, 40, 0, 0, 33, + 0, 0, 0, 0, 0, 47, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 59, 0, 92, - 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 184, 0, 0, 286, 0, 0, 0, - 0, 0, 0, 303, 0, 0, 0, 0, 0, 0, - 329, 0, 0, 0, 0, 0, 0, 0, 0, 225, - 0, 0, 0, 260, 0, 0, 0, 0, 149, 45, - 36, 0, 0, 0, 0, 0, 50, 0, 0, 0, - 84, 85, 86, 87, 88, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 396, 0, 0, 61, 0, - 373, 371, 372, 370, 0, 365, 366, 368, 369, 0, - 0, 0, 0, 0, 214, 215, 0, 0, 0, 0, - 186, 0, 288, 0, 315, 0, 318, 319, 305, 0, - 0, 0, 0, 0, 0, 333, 0, 0, 239, 0, - 0, 0, 250, 229, 0, 276, 264, 0, 0, 151, - 0, 0, 0, 410, 412, 0, 0, 0, 177, 218, - 253, 0, 40, 139, 0, 0, 142, 0, 0, 0, - 0, 94, 0, 363, 0, 279, 296, 205, 207, 209, - 213, 211, 322, 0, 293, 314, 317, 353, 343, 345, - 347, 349, 351, 242, 119, 246, 244, 249, 273, 156, - 158, 37, 0, 418, 0, 415, 417, 0, 110, 112, - 114, 116, 0, 0, 0, 109, 0, 99, 101, 102, - 103, 104, 105, 106, 107, 108, 0, 181, 0, 178, - 179, 222, 0, 219, 220, 257, 0, 254, 255, 129, - 130, 0, 125, 127, 128, 42, 137, 135, 0, 133, - 136, 360, 0, 146, 0, 143, 144, 0, 0, 0, - 0, 0, 0, 0, 161, 163, 164, 165, 166, 167, - 168, 386, 392, 0, 0, 0, 385, 384, 0, 377, - 379, 382, 380, 381, 383, 403, 405, 0, 399, 401, - 402, 0, 0, 367, 283, 0, 280, 281, 300, 0, - 297, 298, 326, 0, 323, 324, 356, 0, 57, 0, - 0, 414, 90, 0, 0, 0, 0, 0, 0, 0, - 0, 96, 98, 0, 176, 0, 226, 217, 0, 261, - 252, 0, 0, 124, 0, 0, 132, 0, 359, 0, - 141, 0, 0, 0, 0, 0, 0, 0, 0, 160, - 0, 0, 0, 0, 0, 0, 376, 0, 0, 0, - 398, 408, 374, 0, 278, 0, 0, 295, 0, 330, - 321, 0, 0, 355, 0, 416, 0, 0, 0, 0, - 120, 121, 122, 100, 0, 180, 0, 221, 0, 256, - 126, 41, 134, 361, 0, 145, 169, 170, 171, 172, - 173, 174, 162, 0, 0, 391, 394, 395, 378, 0, - 0, 400, 0, 282, 0, 299, 0, 325, 0, 0, - 111, 113, 115, 117, 182, 223, 258, 147, 388, 389, - 390, 387, 393, 404, 406, 284, 301, 327, 357, 422, - 0, 420, 0, 0, 419, 434, 0, 432, 430, 426, - 0, 424, 428, 429, 427, 421, 0, 0, 0, 0, - 423, 0, 431, 0, 425, 0, 433, 438, 0, 436, - 0, 0, 435, 442, 0, 440, 437, 0, 0, 439, - 0, 441, 443 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 60, 0, 93, 369, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 185, 0, 0, 0, + 287, 0, 0, 0, 0, 0, 0, 307, 0, 0, + 0, 0, 0, 0, 334, 0, 0, 0, 0, 0, + 0, 0, 0, 226, 0, 0, 0, 261, 0, 0, + 0, 0, 150, 46, 37, 0, 0, 0, 0, 0, + 51, 0, 0, 0, 85, 86, 87, 88, 89, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 401, + 0, 0, 62, 0, 378, 376, 377, 375, 0, 370, + 371, 373, 374, 0, 0, 0, 0, 0, 215, 216, + 0, 0, 0, 0, 187, 0, 0, 289, 0, 320, + 0, 323, 324, 309, 0, 0, 0, 0, 0, 0, + 338, 0, 0, 240, 0, 0, 0, 251, 230, 0, + 277, 265, 0, 0, 152, 0, 0, 0, 415, 417, + 0, 0, 0, 178, 219, 254, 0, 41, 140, 0, + 0, 143, 0, 0, 0, 0, 95, 0, 368, 0, + 280, 300, 206, 208, 210, 214, 212, 327, 0, 295, + 34, 297, 319, 322, 358, 348, 350, 352, 354, 356, + 243, 120, 247, 245, 250, 274, 157, 159, 38, 0, + 423, 0, 420, 422, 0, 111, 113, 115, 117, 0, + 0, 0, 110, 0, 100, 102, 103, 104, 105, 106, + 107, 108, 109, 0, 182, 0, 179, 180, 223, 0, + 220, 221, 258, 0, 255, 256, 130, 131, 0, 126, + 128, 129, 43, 138, 136, 0, 134, 137, 365, 0, + 147, 0, 144, 145, 0, 0, 0, 0, 0, 0, + 0, 162, 164, 165, 166, 167, 168, 169, 391, 397, + 0, 0, 0, 390, 389, 0, 382, 384, 387, 385, + 386, 388, 408, 410, 0, 404, 406, 407, 0, 0, + 372, 284, 0, 281, 282, 304, 0, 301, 302, 331, + 0, 328, 329, 361, 0, 58, 0, 0, 419, 91, + 0, 0, 0, 0, 0, 0, 0, 0, 97, 99, + 0, 177, 0, 227, 218, 0, 262, 253, 0, 0, + 125, 0, 0, 133, 0, 364, 0, 142, 0, 0, + 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, + 0, 0, 0, 381, 0, 0, 0, 403, 413, 379, + 0, 279, 0, 0, 299, 0, 335, 326, 0, 0, + 360, 0, 421, 0, 0, 0, 0, 121, 122, 123, + 101, 0, 181, 0, 222, 0, 257, 127, 42, 135, + 366, 0, 146, 170, 171, 172, 173, 174, 175, 163, + 0, 0, 396, 399, 400, 383, 0, 0, 405, 0, + 283, 0, 303, 0, 330, 0, 0, 112, 114, 116, + 118, 183, 224, 259, 148, 393, 394, 395, 392, 398, + 409, 411, 285, 305, 332, 362, 427, 0, 425, 0, + 0, 424, 439, 0, 437, 435, 431, 0, 429, 433, + 434, 432, 426, 0, 0, 0, 0, 428, 0, 436, + 0, 430, 0, 438, 443, 0, 441, 0, 0, 440, + 447, 0, 445, 442, 0, 0, 444, 0, 446, 448 }; const short int Dhcp6Parser::yypgoto_[] = { - -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, - -427, -427, -427, 3, -427, -427, -427, -427, 33, -427, - -427, -214, -427, -67, -427, -58, -427, -427, -427, 211, - -427, -427, -427, -427, 51, 195, -41, -38, -37, -36, - -427, -427, -427, -427, -427, 52, -427, -427, -427, -427, - -427, 49, -112, -427, -427, -427, -427, -427, -427, -427, - -427, -65, -427, -426, -427, -427, -427, -427, -427, -123, - -405, -427, -427, -427, -427, -125, -427, -427, -427, -427, - -427, -427, -427, -129, -427, -427, -427, -126, 147, -427, - -427, -427, -427, -427, -427, -427, -133, -427, -427, -427, - -427, -427, -427, -427, -427, -427, -427, -109, -427, -427, - -427, -105, 197, -427, -427, -427, -427, -427, -427, -415, - -427, -427, -427, -427, -427, -427, -427, -427, -427, -106, - -427, -427, -427, -107, -427, 164, -427, -51, -427, -427, - -427, -427, -427, -49, -427, -427, -427, -427, -427, -50, - -427, -427, -427, -108, -427, -427, -427, -104, -427, 169, - -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, - -138, -427, -427, -427, -128, 199, -427, -427, -427, -427, - -427, -427, -132, -427, -427, -427, -124, 201, -427, -427, - -427, -427, -427, -427, -427, -427, -427, -427, -427, -134, - -427, -427, -427, -121, -427, 202, -427, -427, -427, -427, - -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, - -427, -427, -427, -427, -427, -427, -427, -427, 66, -427, - -427, -427, -427, -427, -427, -114, -427, -427, -427, -427, - -427, -427, -427, -427, -427, -427, -427, -427, -115, -427, - -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, - -427, -427, -59, -427, -427, -427, -198, -427, -427, -203, - -427, -427, -427, -427, -427, -427, -213, -427, -427, -219, - -427 + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, 5, -432, 50, -432, -432, -432, 25, + -432, -432, -239, -432, -54, -432, -58, -432, -432, -432, + 214, -432, -432, -432, -432, 56, 195, -51, -45, -40, + -36, -432, -432, -432, -432, -432, 53, -432, -432, -432, + -432, -432, 55, -112, -432, -432, -432, -432, -432, -432, + -432, -432, -65, -432, -431, -432, -432, -432, -432, -432, + -123, -407, -432, -432, -432, -432, -124, -432, -432, -432, + -432, -432, -432, -432, -129, -432, -432, -432, -126, 151, + -432, -432, -432, -432, -432, -432, -432, -134, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -108, -432, + -432, -432, -105, 196, -432, -432, -432, -432, -432, -432, + -410, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -109, -432, -432, -432, -104, -432, 164, -432, -49, -432, + -432, -432, -432, -432, -47, -432, -432, -432, -432, -432, + -50, -432, -432, -432, -102, -432, -432, -432, -106, -432, + 166, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -139, -432, -432, -432, -133, 199, -432, -432, -48, + -432, -432, -432, -432, -432, -135, -432, -432, -432, -131, + 201, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -130, -432, -432, -432, -127, -432, 197, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, 75, -432, -432, -432, -432, -432, -432, -117, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -110, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -59, -432, -432, -432, -191, + -432, -432, -206, -432, -432, -432, -432, -432, -432, -217, + -432, -432, -221, -432 }; const short int Dhcp6Parser::yydefgoto_[] = { -1, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 68, 33, 34, 57, 72, 73, 35, - 56, 423, 505, 69, 70, 107, 37, 58, 80, 81, - 82, 248, 39, 59, 108, 109, 110, 111, 112, 113, - 114, 115, 255, 41, 60, 132, 278, 116, 256, 117, - 257, 476, 477, 478, 573, 479, 574, 480, 575, 481, - 576, 209, 313, 483, 484, 485, 118, 266, 501, 502, - 503, 504, 119, 268, 508, 509, 510, 120, 267, 121, - 270, 514, 515, 516, 599, 55, 67, 239, 240, 241, - 325, 242, 326, 122, 271, 523, 524, 525, 526, 527, - 528, 529, 530, 123, 263, 488, 489, 490, 583, 43, - 61, 150, 151, 152, 283, 153, 284, 154, 285, 155, - 289, 156, 288, 157, 158, 124, 264, 492, 493, 494, - 586, 51, 65, 210, 211, 212, 213, 214, 215, 216, - 312, 217, 316, 218, 315, 219, 220, 317, 221, 125, - 265, 496, 497, 498, 589, 53, 66, 228, 229, 230, - 231, 232, 321, 233, 234, 235, 160, 281, 555, 556, - 557, 623, 45, 62, 167, 168, 169, 294, 161, 282, - 559, 560, 561, 626, 47, 63, 177, 178, 179, 297, - 180, 181, 299, 182, 183, 162, 290, 563, 564, 565, - 629, 49, 64, 192, 193, 194, 195, 305, 196, 306, - 197, 307, 198, 308, 199, 309, 200, 304, 163, 291, - 567, 632, 126, 269, 512, 280, 364, 365, 366, 367, - 368, 432, 127, 272, 538, 539, 540, 610, 691, 541, - 542, 611, 543, 544, 128, 129, 274, 547, 548, 549, - 617, 550, 618, 130, 275, 83, 250, 84, 251, 85, - 249, 464, 465, 466, 569, 700, 701, 702, 710, 711, - 712, 713, 718, 714, 716, 728, 729, 730, 734, 735, - 737 + 21, 22, 23, 68, 33, 34, 57, 451, 72, 73, + 35, 56, 428, 512, 69, 70, 107, 37, 58, 80, + 81, 82, 251, 39, 59, 108, 109, 110, 111, 112, + 113, 114, 115, 258, 41, 60, 132, 281, 116, 259, + 117, 260, 483, 484, 485, 580, 486, 581, 487, 582, + 488, 583, 212, 317, 490, 491, 492, 118, 269, 508, + 509, 510, 511, 119, 271, 515, 516, 517, 120, 270, + 121, 273, 521, 522, 523, 606, 55, 67, 242, 243, + 244, 329, 245, 330, 122, 274, 530, 531, 532, 533, + 534, 535, 536, 537, 123, 266, 495, 496, 497, 590, + 43, 61, 150, 151, 152, 286, 153, 287, 154, 288, + 155, 292, 156, 291, 157, 158, 124, 267, 499, 500, + 501, 593, 51, 65, 213, 214, 215, 216, 217, 218, + 219, 316, 220, 320, 221, 319, 222, 223, 321, 224, + 125, 268, 503, 504, 505, 596, 53, 66, 231, 232, + 233, 234, 235, 325, 236, 237, 238, 160, 284, 562, + 563, 564, 630, 45, 62, 168, 169, 170, 297, 171, + 298, 161, 285, 566, 567, 568, 633, 47, 63, 180, + 181, 182, 301, 183, 184, 303, 185, 186, 162, 293, + 570, 571, 572, 636, 49, 64, 195, 196, 197, 198, + 309, 199, 310, 200, 311, 201, 312, 202, 313, 203, + 308, 163, 294, 574, 639, 126, 272, 519, 283, 368, + 369, 370, 371, 372, 437, 127, 275, 545, 546, 547, + 617, 698, 548, 549, 618, 550, 551, 128, 129, 277, + 554, 555, 556, 624, 557, 625, 130, 278, 83, 253, + 84, 254, 85, 252, 471, 472, 473, 576, 707, 708, + 709, 717, 718, 719, 720, 725, 721, 723, 735, 736, + 737, 741, 742, 744 }; const unsigned short int Dhcp6Parser::yytable_[] = { - 79, 225, 537, 145, 165, 175, 190, 208, 224, 238, - 511, 159, 166, 176, 191, 226, 32, 227, 133, 507, - 146, 96, 74, 147, 148, 149, 25, 133, 26, 24, - 27, 164, 499, 89, 90, 91, 92, 96, 202, 36, - 96, 468, 469, 470, 471, 472, 473, 474, 253, 134, - 276, 135, 71, 254, 131, 277, 202, 136, 137, 138, - 139, 140, 141, 38, 360, 40, 292, 42, 142, 143, - 86, 293, 87, 88, 44, 144, 201, 142, 46, 500, - 48, 89, 90, 91, 92, 93, 94, 95, 96, 592, - 50, 202, 593, 203, 204, 531, 205, 206, 207, 472, - 78, 75, 202, 222, 203, 204, 223, 76, 77, 202, - 52, 97, 98, 99, 100, 54, 78, 236, 237, 78, - 78, 295, 96, 243, 96, 101, 296, 244, 102, 28, - 29, 30, 31, 245, 78, 103, 170, 171, 172, 173, - 174, 302, 246, 104, 105, 431, 303, 106, 184, 236, - 237, 247, 185, 186, 187, 188, 189, 252, 78, 327, - 532, 533, 534, 535, 328, 595, 276, 78, 596, 78, - 705, 568, 706, 707, 570, 447, 448, 449, 580, 571, - 78, 580, 653, 581, 499, 506, 582, 78, 78, 537, - 507, 608, 615, 619, 247, 79, 609, 616, 620, 621, - 258, 78, 259, 78, 1, 2, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 362, 517, 518, 519, 520, - 521, 522, 361, 292, 327, 279, 295, 302, 684, 687, - 363, 695, 696, 719, 145, 738, 597, 165, 720, 598, - 739, 260, 159, 703, 175, 166, 704, 329, 330, 261, - 262, 146, 176, 190, 147, 148, 149, 731, 310, 225, - 732, 191, 208, 688, 689, 690, 224, 545, 546, 273, - 286, 287, 298, 226, 300, 227, 301, 311, 331, 314, - 318, 319, 320, 340, 322, 323, 324, 375, 332, 333, - 334, 335, 337, 338, 339, 345, 341, 346, 347, 348, - 349, 342, 343, 344, 350, 351, 352, 353, 354, 355, - 356, 357, 359, 369, 370, 371, 372, 373, 374, 376, - 377, 378, 379, 381, 383, 384, 385, 386, 387, 389, - 390, 391, 392, 393, 394, 396, 397, 413, 414, 399, - 398, 400, 401, 404, 407, 402, 405, 408, 410, 411, - 418, 482, 482, 412, 415, 416, 417, 419, 475, 475, - 420, 421, 422, 424, 425, 426, 434, 435, 427, 362, - 536, 428, 429, 430, 436, 433, 361, 437, 442, 438, - 572, 443, 487, 491, 363, 495, 439, 513, 552, 440, - 441, 585, 554, 558, 562, 463, 577, 578, 579, 633, - 444, 584, 587, 588, 590, 445, 446, 450, 591, 600, - 601, 460, 602, 461, 603, 604, 566, 605, 606, 607, - 612, 613, 451, 614, 624, 625, 627, 628, 631, 452, - 634, 453, 454, 630, 636, 637, 638, 639, 594, 663, - 651, 455, 456, 664, 457, 669, 670, 678, 685, 458, - 679, 717, 686, 721, 697, 699, 723, 727, 459, 725, - 740, 622, 462, 551, 336, 640, 486, 467, 643, 650, - 652, 358, 655, 654, 409, 662, 645, 641, 644, 646, - 656, 642, 647, 649, 403, 648, 657, 673, 658, 380, - 659, 660, 661, 406, 382, 672, 675, 677, 665, 666, - 553, 668, 674, 388, 671, 715, 667, 680, 676, 681, - 682, 635, 683, 395, 692, 482, 724, 693, 736, 741, - 694, 733, 475, 0, 225, 145, 0, 0, 208, 698, - 0, 224, 722, 159, 0, 0, 726, 0, 226, 0, - 227, 238, 146, 0, 742, 147, 148, 149, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 536, 0, 0, - 0, 0, 0, 0, 0, 165, 0, 0, 175, 0, - 0, 190, 0, 166, 0, 0, 176, 0, 0, 191, + 79, 228, 544, 145, 166, 177, 193, 211, 227, 241, + 146, 159, 167, 178, 194, 179, 147, 229, 32, 230, + 518, 148, 514, 133, 25, 149, 26, 74, 27, 475, + 476, 477, 478, 479, 480, 481, 96, 506, 89, 90, + 91, 92, 538, 24, 205, 96, 479, 36, 172, 173, + 174, 175, 176, 165, 134, 599, 135, 256, 600, 131, + 239, 240, 257, 136, 137, 138, 139, 140, 141, 205, + 225, 206, 207, 226, 142, 143, 86, 602, 87, 88, + 603, 144, 204, 133, 507, 506, 513, 89, 90, 91, + 92, 93, 94, 95, 96, 96, 38, 205, 205, 206, + 207, 78, 208, 209, 210, 164, 96, 75, 539, 540, + 541, 542, 165, 76, 77, 40, 78, 42, 97, 98, + 99, 100, 279, 78, 436, 78, 78, 280, 28, 29, + 30, 31, 101, 187, 142, 102, 78, 188, 189, 190, + 191, 192, 103, 96, 205, 44, 604, 295, 78, 605, + 104, 105, 296, 299, 106, 454, 455, 456, 300, 46, + 712, 48, 713, 714, 524, 525, 526, 527, 528, 529, + 50, 364, 52, 306, 78, 78, 78, 78, 307, 331, + 279, 54, 577, 587, 332, 575, 78, 578, 588, 71, + 710, 544, 587, 711, 660, 514, 246, 589, 79, 1, + 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 615, 622, 626, 247, 250, 616, 623, 627, 366, 628, + 248, 295, 331, 78, 299, 365, 691, 694, 249, 702, + 306, 726, 250, 367, 745, 703, 727, 145, 255, 746, + 738, 166, 261, 739, 146, 159, 239, 240, 177, 167, + 147, 262, 333, 334, 263, 148, 178, 193, 179, 149, + 695, 696, 697, 228, 264, 194, 211, 265, 552, 553, + 227, 276, 282, 289, 290, 302, 304, 305, 315, 229, + 318, 230, 314, 322, 324, 323, 326, 328, 327, 336, + 337, 338, 335, 339, 341, 342, 343, 349, 344, 350, + 351, 345, 346, 347, 348, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 363, 373, 374, 375, 376, + 377, 380, 378, 381, 382, 379, 383, 385, 386, 388, + 390, 394, 389, 391, 392, 395, 396, 397, 398, 399, + 401, 402, 403, 418, 419, 404, 405, 406, 407, 409, + 412, 410, 413, 415, 416, 423, 489, 489, 417, 420, + 421, 422, 424, 482, 482, 425, 426, 427, 429, 430, + 431, 439, 440, 432, 366, 543, 433, 434, 435, 441, + 438, 365, 447, 448, 559, 26, 494, 442, 498, 367, + 502, 520, 443, 561, 565, 569, 584, 444, 579, 585, + 586, 609, 592, 445, 591, 595, 446, 449, 452, 453, + 594, 597, 598, 607, 608, 686, 610, 457, 467, 611, + 468, 612, 573, 613, 614, 619, 620, 458, 621, 631, + 459, 632, 634, 635, 638, 637, 450, 460, 461, 462, + 640, 641, 643, 644, 645, 646, 470, 463, 464, 465, + 658, 670, 671, 466, 676, 677, 685, 692, 601, 724, + 558, 693, 704, 706, 728, 730, 734, 629, 732, 747, + 340, 647, 469, 474, 362, 650, 657, 493, 659, 662, + 661, 669, 414, 648, 652, 651, 654, 649, 408, 653, + 655, 384, 663, 680, 411, 664, 656, 679, 387, 665, + 682, 666, 681, 667, 668, 675, 740, 393, 684, 683, + 672, 673, 400, 674, 560, 687, 678, 688, 642, 722, + 731, 743, 489, 689, 748, 690, 0, 699, 0, 482, + 0, 228, 145, 0, 700, 211, 701, 0, 227, 146, + 159, 0, 705, 0, 729, 147, 0, 229, 241, 230, + 148, 733, 749, 0, 149, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 543, 0, 0, 0, 0, 0, + 0, 0, 166, 0, 0, 177, 0, 0, 193, 0, + 167, 0, 0, 178, 0, 179, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 709, 0, 0, - 0, 0, 0, 0, 708, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 709, 0, 0, 0, 0, 0, - 0, 708 + 0, 0, 0, 0, 716, 0, 0, 0, 0, 0, + 0, 715, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 716, 0, 0, 0, 0, 0, 0, 715 }; const short int Dhcp6Parser::yycheck_[] = { - 58, 66, 428, 61, 62, 63, 64, 65, 66, 67, - 425, 61, 62, 63, 64, 66, 13, 66, 7, 424, - 61, 29, 10, 61, 61, 61, 5, 7, 7, 0, - 9, 39, 61, 22, 23, 24, 25, 29, 30, 7, - 29, 15, 16, 17, 18, 19, 20, 21, 3, 38, - 3, 40, 108, 8, 12, 8, 30, 46, 47, 48, - 49, 50, 51, 7, 56, 7, 3, 7, 57, 58, - 11, 8, 13, 14, 7, 64, 15, 57, 7, 108, - 7, 22, 23, 24, 25, 26, 27, 28, 29, 3, - 7, 30, 6, 32, 33, 15, 35, 36, 37, 19, - 108, 89, 30, 31, 32, 33, 34, 95, 96, 30, - 7, 52, 53, 54, 55, 7, 108, 67, 68, 108, - 108, 3, 29, 6, 29, 66, 8, 3, 69, 108, - 109, 110, 111, 4, 108, 76, 41, 42, 43, 44, - 45, 3, 8, 84, 85, 359, 8, 88, 55, 67, - 68, 3, 59, 60, 61, 62, 63, 4, 108, 3, - 80, 81, 82, 83, 8, 3, 3, 108, 6, 108, - 91, 8, 93, 94, 3, 389, 390, 391, 3, 8, - 108, 3, 597, 8, 61, 62, 8, 108, 108, 615, - 595, 3, 3, 3, 3, 253, 8, 8, 8, 8, - 4, 108, 4, 108, 97, 98, 99, 100, 101, 102, - 103, 104, 105, 106, 107, 280, 70, 71, 72, 73, - 74, 75, 280, 3, 3, 8, 3, 3, 8, 8, - 280, 8, 8, 3, 292, 3, 3, 295, 8, 6, - 8, 4, 292, 3, 302, 295, 6, 244, 245, 4, - 4, 292, 302, 311, 292, 292, 292, 3, 8, 324, - 6, 311, 320, 77, 78, 79, 324, 86, 87, 4, - 4, 4, 4, 324, 4, 324, 4, 3, 108, 4, - 4, 8, 3, 109, 4, 8, 3, 111, 4, 4, - 4, 4, 4, 4, 4, 4, 109, 4, 4, 4, - 4, 109, 109, 109, 4, 4, 4, 4, 4, 109, - 4, 4, 4, 4, 4, 4, 4, 4, 109, 4, - 4, 4, 4, 4, 4, 109, 4, 109, 109, 4, - 4, 4, 4, 4, 4, 4, 4, 334, 335, 4, - 109, 4, 4, 4, 4, 111, 111, 4, 4, 7, - 5, 416, 417, 7, 7, 7, 7, 5, 416, 417, - 5, 5, 5, 5, 5, 5, 3, 5, 7, 434, - 428, 7, 7, 7, 5, 8, 434, 108, 5, 108, - 8, 7, 7, 7, 434, 7, 108, 7, 4, 108, - 108, 3, 7, 7, 7, 90, 4, 4, 4, 8, - 108, 6, 6, 3, 6, 108, 108, 108, 3, 6, - 3, 408, 4, 410, 4, 4, 65, 4, 4, 4, - 4, 4, 108, 4, 6, 3, 6, 3, 3, 108, - 4, 108, 108, 6, 4, 4, 4, 4, 505, 4, - 6, 108, 108, 4, 108, 4, 4, 4, 8, 108, - 5, 4, 8, 4, 8, 7, 4, 7, 108, 5, - 4, 108, 411, 430, 253, 111, 417, 415, 580, 592, - 595, 276, 601, 599, 327, 608, 585, 109, 583, 586, - 109, 111, 588, 591, 320, 589, 109, 625, 109, 292, - 109, 109, 109, 324, 295, 623, 628, 631, 109, 109, - 434, 615, 626, 302, 619, 703, 109, 108, 629, 108, - 108, 570, 108, 311, 108, 580, 719, 108, 731, 738, - 108, 92, 580, -1, 589, 583, -1, -1, 586, 108, - -1, 589, 109, 583, -1, -1, 108, -1, 589, -1, - 589, 599, 583, -1, 108, 583, 583, 583, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 615, -1, -1, - -1, -1, -1, -1, -1, 623, -1, -1, 626, -1, - -1, 629, -1, 623, -1, -1, 626, -1, -1, 629, + 58, 66, 433, 61, 62, 63, 64, 65, 66, 67, + 61, 61, 62, 63, 64, 63, 61, 66, 13, 66, + 430, 61, 429, 7, 5, 61, 7, 10, 9, 15, + 16, 17, 18, 19, 20, 21, 29, 62, 22, 23, + 24, 25, 15, 0, 30, 29, 19, 7, 41, 42, + 43, 44, 45, 46, 38, 3, 40, 3, 6, 12, + 68, 69, 8, 47, 48, 49, 50, 51, 52, 30, + 31, 32, 33, 34, 58, 59, 11, 3, 13, 14, + 6, 65, 15, 7, 109, 62, 63, 22, 23, 24, + 25, 26, 27, 28, 29, 29, 7, 30, 30, 32, + 33, 109, 35, 36, 37, 39, 29, 90, 81, 82, + 83, 84, 46, 96, 97, 7, 109, 7, 53, 54, + 55, 56, 3, 109, 363, 109, 109, 8, 109, 110, + 111, 112, 67, 56, 58, 70, 109, 60, 61, 62, + 63, 64, 77, 29, 30, 7, 3, 3, 109, 6, + 85, 86, 8, 3, 89, 394, 395, 396, 8, 7, + 92, 7, 94, 95, 71, 72, 73, 74, 75, 76, + 7, 57, 7, 3, 109, 109, 109, 109, 8, 3, + 3, 7, 3, 3, 8, 8, 109, 8, 8, 109, + 3, 622, 3, 6, 604, 602, 6, 8, 256, 98, + 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 3, 3, 3, 3, 3, 8, 8, 8, 283, 8, + 4, 3, 3, 109, 3, 283, 8, 8, 8, 8, + 3, 3, 3, 283, 3, 8, 8, 295, 4, 8, + 3, 299, 4, 6, 295, 295, 68, 69, 306, 299, + 295, 4, 247, 248, 4, 295, 306, 315, 306, 295, + 78, 79, 80, 328, 4, 315, 324, 4, 87, 88, + 328, 4, 8, 4, 4, 4, 4, 4, 3, 328, + 4, 328, 8, 4, 3, 8, 4, 3, 8, 4, + 4, 4, 109, 4, 4, 4, 4, 4, 110, 4, + 4, 110, 110, 110, 110, 4, 4, 4, 4, 4, + 4, 4, 110, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 110, 4, 4, 112, 4, 4, 4, 4, + 4, 4, 110, 110, 110, 4, 4, 4, 4, 4, + 4, 4, 110, 338, 339, 4, 4, 4, 112, 4, + 4, 112, 4, 4, 7, 5, 421, 422, 7, 7, + 7, 7, 5, 421, 422, 5, 5, 5, 5, 5, + 5, 3, 5, 7, 439, 433, 7, 7, 7, 5, + 8, 439, 5, 7, 4, 7, 7, 109, 7, 439, + 7, 7, 109, 7, 7, 7, 4, 109, 8, 4, + 4, 4, 3, 109, 6, 3, 109, 109, 109, 109, + 6, 6, 3, 6, 3, 5, 4, 109, 413, 4, + 415, 4, 66, 4, 4, 4, 4, 109, 4, 6, + 109, 3, 6, 3, 3, 6, 386, 109, 109, 109, + 8, 4, 4, 4, 4, 4, 91, 109, 109, 109, + 6, 4, 4, 109, 4, 4, 4, 8, 512, 4, + 435, 8, 8, 7, 4, 4, 7, 109, 5, 4, + 256, 112, 416, 420, 279, 587, 599, 422, 602, 608, + 606, 615, 331, 110, 592, 590, 595, 112, 324, 593, + 596, 295, 110, 632, 328, 110, 598, 630, 299, 110, + 635, 110, 633, 110, 110, 622, 93, 306, 638, 636, + 110, 110, 315, 110, 439, 109, 626, 109, 577, 710, + 726, 738, 587, 109, 745, 109, -1, 109, -1, 587, + -1, 596, 590, -1, 109, 593, 109, -1, 596, 590, + 590, -1, 109, -1, 110, 590, -1, 596, 606, 596, + 590, 109, 109, -1, 590, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 622, -1, -1, -1, -1, -1, + -1, -1, 630, -1, -1, 633, -1, -1, 636, -1, + 630, -1, -1, 633, -1, 633, 636, -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, -1, -1, -1, -1, -1, 702, -1, -1, - -1, -1, -1, -1, 702, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 719, -1, -1, -1, -1, -1, - -1, 719 + -1, -1, -1, -1, 709, -1, -1, -1, -1, -1, + -1, 709, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 726, -1, -1, -1, -1, -1, -1, 726 }; const unsigned short int Dhcp6Parser::yystos_[] = { - 0, 97, 98, 99, 100, 101, 102, 103, 104, 105, - 106, 107, 113, 114, 115, 116, 117, 118, 119, 120, - 121, 122, 123, 124, 0, 5, 7, 9, 108, 109, - 110, 111, 125, 126, 127, 131, 7, 138, 7, 144, - 7, 155, 7, 221, 7, 284, 7, 296, 7, 313, - 7, 243, 7, 267, 7, 197, 132, 128, 139, 145, - 156, 222, 285, 297, 314, 244, 268, 198, 125, 135, - 136, 108, 129, 130, 10, 89, 95, 96, 108, 137, - 140, 141, 142, 367, 369, 371, 11, 13, 14, 22, - 23, 24, 25, 26, 27, 28, 29, 52, 53, 54, - 55, 66, 69, 76, 84, 85, 88, 137, 146, 147, - 148, 149, 150, 151, 152, 153, 159, 161, 178, 184, - 189, 191, 205, 215, 237, 261, 334, 344, 356, 357, - 365, 12, 157, 7, 38, 40, 46, 47, 48, 49, - 50, 51, 57, 58, 64, 137, 148, 149, 150, 151, - 223, 224, 225, 227, 229, 231, 233, 235, 236, 261, - 278, 290, 307, 330, 39, 137, 261, 286, 287, 288, - 41, 42, 43, 44, 45, 137, 261, 298, 299, 300, - 302, 303, 305, 306, 55, 59, 60, 61, 62, 63, - 137, 261, 315, 316, 317, 318, 320, 322, 324, 326, - 328, 15, 30, 32, 33, 35, 36, 37, 137, 173, - 245, 246, 247, 248, 249, 250, 251, 253, 255, 257, - 258, 260, 31, 34, 137, 173, 249, 255, 269, 270, - 271, 272, 273, 275, 276, 277, 67, 68, 137, 199, - 200, 201, 203, 6, 3, 4, 8, 3, 143, 372, - 368, 370, 4, 3, 8, 154, 160, 162, 4, 4, - 4, 4, 4, 216, 238, 262, 179, 190, 185, 335, - 192, 206, 345, 4, 358, 366, 3, 8, 158, 8, - 337, 279, 291, 226, 228, 230, 4, 4, 234, 232, - 308, 331, 3, 8, 289, 3, 8, 301, 4, 304, - 4, 4, 3, 8, 329, 319, 321, 323, 325, 327, - 8, 3, 252, 174, 4, 256, 254, 259, 4, 8, - 3, 274, 4, 8, 3, 202, 204, 3, 8, 125, - 125, 108, 4, 4, 4, 4, 141, 4, 4, 4, - 109, 109, 109, 109, 109, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 109, 4, 4, 147, 4, - 56, 137, 173, 261, 338, 339, 340, 341, 342, 4, - 4, 4, 4, 4, 109, 111, 4, 4, 4, 4, - 224, 4, 287, 4, 109, 4, 109, 109, 299, 4, - 4, 4, 4, 4, 4, 317, 4, 4, 109, 4, - 4, 4, 111, 247, 4, 111, 271, 4, 4, 200, - 4, 7, 7, 125, 125, 7, 7, 7, 5, 5, - 5, 5, 5, 133, 5, 5, 5, 7, 7, 7, - 7, 133, 343, 8, 3, 5, 5, 108, 108, 108, - 108, 108, 5, 7, 108, 108, 108, 133, 133, 133, - 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, - 125, 125, 146, 90, 373, 374, 375, 157, 15, 16, - 17, 18, 19, 20, 21, 137, 163, 164, 165, 167, - 169, 171, 173, 175, 176, 177, 163, 7, 217, 218, - 219, 7, 239, 240, 241, 7, 263, 264, 265, 61, - 108, 180, 181, 182, 183, 134, 62, 182, 186, 187, - 188, 231, 336, 7, 193, 194, 195, 70, 71, 72, - 73, 74, 75, 207, 208, 209, 210, 211, 212, 213, - 214, 15, 80, 81, 82, 83, 137, 175, 346, 347, - 348, 351, 352, 354, 355, 86, 87, 359, 360, 361, - 363, 130, 4, 340, 7, 280, 281, 282, 7, 292, - 293, 294, 7, 309, 310, 311, 65, 332, 8, 376, - 3, 8, 8, 166, 168, 170, 172, 4, 4, 4, - 3, 8, 8, 220, 6, 3, 242, 6, 3, 266, - 6, 3, 3, 6, 135, 3, 6, 3, 6, 196, - 6, 3, 4, 4, 4, 4, 4, 4, 3, 8, - 349, 353, 4, 4, 4, 3, 8, 362, 364, 3, - 8, 8, 108, 283, 6, 3, 295, 6, 3, 312, - 6, 3, 333, 8, 4, 374, 4, 4, 4, 4, - 111, 109, 111, 164, 223, 219, 245, 241, 269, 265, - 181, 6, 187, 231, 199, 195, 109, 109, 109, 109, - 109, 109, 208, 4, 4, 109, 109, 109, 347, 4, - 4, 360, 286, 282, 298, 294, 315, 311, 4, 5, - 108, 108, 108, 108, 8, 8, 8, 8, 77, 78, - 79, 350, 108, 108, 108, 8, 8, 8, 108, 7, - 377, 378, 379, 3, 6, 91, 93, 94, 137, 173, - 380, 381, 382, 383, 385, 378, 386, 4, 384, 3, - 8, 4, 109, 4, 381, 5, 108, 7, 387, 388, - 389, 3, 6, 92, 390, 391, 388, 392, 3, 8, - 4, 391, 108 + 0, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 0, 5, 7, 9, 109, 110, + 111, 112, 126, 127, 128, 133, 7, 140, 7, 146, + 7, 157, 7, 223, 7, 286, 7, 300, 7, 317, + 7, 245, 7, 269, 7, 199, 134, 129, 141, 147, + 158, 224, 287, 301, 318, 246, 270, 200, 126, 137, + 138, 109, 131, 132, 10, 90, 96, 97, 109, 139, + 142, 143, 144, 371, 373, 375, 11, 13, 14, 22, + 23, 24, 25, 26, 27, 28, 29, 53, 54, 55, + 56, 67, 70, 77, 85, 86, 89, 139, 148, 149, + 150, 151, 152, 153, 154, 155, 161, 163, 180, 186, + 191, 193, 207, 217, 239, 263, 338, 348, 360, 361, + 369, 12, 159, 7, 38, 40, 47, 48, 49, 50, + 51, 52, 58, 59, 65, 139, 150, 151, 152, 153, + 225, 226, 227, 229, 231, 233, 235, 237, 238, 263, + 280, 294, 311, 334, 39, 46, 139, 263, 288, 289, + 290, 292, 41, 42, 43, 44, 45, 139, 263, 292, + 302, 303, 304, 306, 307, 309, 310, 56, 60, 61, + 62, 63, 64, 139, 263, 319, 320, 321, 322, 324, + 326, 328, 330, 332, 15, 30, 32, 33, 35, 36, + 37, 139, 175, 247, 248, 249, 250, 251, 252, 253, + 255, 257, 259, 260, 262, 31, 34, 139, 175, 251, + 257, 271, 272, 273, 274, 275, 277, 278, 279, 68, + 69, 139, 201, 202, 203, 205, 6, 3, 4, 8, + 3, 145, 376, 372, 374, 4, 3, 8, 156, 162, + 164, 4, 4, 4, 4, 4, 218, 240, 264, 181, + 192, 187, 339, 194, 208, 349, 4, 362, 370, 3, + 8, 160, 8, 341, 281, 295, 228, 230, 232, 4, + 4, 236, 234, 312, 335, 3, 8, 291, 293, 3, + 8, 305, 4, 308, 4, 4, 3, 8, 333, 323, + 325, 327, 329, 331, 8, 3, 254, 176, 4, 258, + 256, 261, 4, 8, 3, 276, 4, 8, 3, 204, + 206, 3, 8, 126, 126, 109, 4, 4, 4, 4, + 143, 4, 4, 4, 110, 110, 110, 110, 110, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 110, + 4, 4, 149, 4, 57, 139, 175, 263, 342, 343, + 344, 345, 346, 4, 4, 4, 4, 4, 110, 112, + 4, 4, 4, 4, 226, 4, 4, 289, 4, 110, + 4, 110, 110, 303, 4, 4, 4, 4, 4, 4, + 321, 4, 4, 110, 4, 4, 4, 112, 249, 4, + 112, 273, 4, 4, 202, 4, 7, 7, 126, 126, + 7, 7, 7, 5, 5, 5, 5, 5, 135, 5, + 5, 5, 7, 7, 7, 7, 135, 347, 8, 3, + 5, 5, 109, 109, 109, 109, 109, 5, 7, 109, + 128, 130, 109, 109, 135, 135, 135, 109, 109, 109, + 109, 109, 109, 109, 109, 109, 109, 126, 126, 148, + 91, 377, 378, 379, 159, 15, 16, 17, 18, 19, + 20, 21, 139, 165, 166, 167, 169, 171, 173, 175, + 177, 178, 179, 165, 7, 219, 220, 221, 7, 241, + 242, 243, 7, 265, 266, 267, 62, 109, 182, 183, + 184, 185, 136, 63, 184, 188, 189, 190, 233, 340, + 7, 195, 196, 197, 71, 72, 73, 74, 75, 76, + 209, 210, 211, 212, 213, 214, 215, 216, 15, 81, + 82, 83, 84, 139, 177, 350, 351, 352, 355, 356, + 358, 359, 87, 88, 363, 364, 365, 367, 132, 4, + 344, 7, 282, 283, 284, 7, 296, 297, 298, 7, + 313, 314, 315, 66, 336, 8, 380, 3, 8, 8, + 168, 170, 172, 174, 4, 4, 4, 3, 8, 8, + 222, 6, 3, 244, 6, 3, 268, 6, 3, 3, + 6, 137, 3, 6, 3, 6, 198, 6, 3, 4, + 4, 4, 4, 4, 4, 3, 8, 353, 357, 4, + 4, 4, 3, 8, 366, 368, 3, 8, 8, 109, + 285, 6, 3, 299, 6, 3, 316, 6, 3, 337, + 8, 4, 378, 4, 4, 4, 4, 112, 110, 112, + 166, 225, 221, 247, 243, 271, 267, 183, 6, 189, + 233, 201, 197, 110, 110, 110, 110, 110, 110, 210, + 4, 4, 110, 110, 110, 351, 4, 4, 364, 288, + 284, 302, 298, 319, 315, 4, 5, 109, 109, 109, + 109, 8, 8, 8, 8, 78, 79, 80, 354, 109, + 109, 109, 8, 8, 8, 109, 7, 381, 382, 383, + 3, 6, 92, 94, 95, 139, 175, 384, 385, 386, + 387, 389, 382, 390, 4, 388, 3, 8, 4, 110, + 4, 385, 5, 109, 7, 391, 392, 393, 3, 6, + 93, 394, 395, 392, 396, 3, 8, 4, 395, 109 }; const unsigned short int Dhcp6Parser::yyr1_[] = { - 0, 112, 114, 113, 115, 113, 116, 113, 117, 113, - 118, 113, 119, 113, 120, 113, 121, 113, 122, 113, - 123, 113, 124, 113, 125, 125, 125, 125, 125, 125, - 125, 126, 128, 127, 129, 129, 130, 130, 132, 131, - 134, 133, 135, 135, 136, 136, 137, 139, 138, 140, - 140, 141, 141, 141, 141, 141, 143, 142, 145, 144, - 146, 146, 147, 147, 147, 147, 147, 147, 147, 147, - 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, - 147, 147, 147, 147, 148, 149, 150, 151, 152, 154, - 153, 156, 155, 158, 157, 160, 159, 162, 161, 163, - 163, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 166, 165, 168, 167, 170, 169, 172, 171, 174, 173, - 175, 176, 177, 179, 178, 180, 180, 181, 181, 182, - 183, 185, 184, 186, 186, 187, 187, 188, 190, 189, - 192, 191, 193, 193, 194, 194, 196, 195, 198, 197, - 199, 199, 199, 200, 200, 202, 201, 204, 203, 206, - 205, 207, 207, 208, 208, 208, 208, 208, 208, 209, - 210, 211, 212, 213, 214, 216, 215, 217, 217, 218, - 218, 220, 219, 222, 221, 223, 223, 224, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 226, 225, 228, 227, 230, 229, - 232, 231, 234, 233, 235, 236, 238, 237, 239, 239, - 240, 240, 242, 241, 244, 243, 245, 245, 246, 246, - 247, 247, 247, 247, 247, 247, 247, 247, 248, 249, - 250, 252, 251, 254, 253, 256, 255, 257, 259, 258, - 260, 262, 261, 263, 263, 264, 264, 266, 265, 268, - 267, 269, 269, 270, 270, 271, 271, 271, 271, 271, - 271, 272, 274, 273, 275, 276, 277, 279, 278, 280, - 280, 281, 281, 283, 282, 285, 284, 286, 286, 287, - 287, 287, 289, 288, 291, 290, 292, 292, 293, 293, - 295, 294, 297, 296, 298, 298, 299, 299, 299, 299, - 299, 299, 299, 301, 300, 302, 304, 303, 305, 306, - 308, 307, 309, 309, 310, 310, 312, 311, 314, 313, - 315, 315, 316, 316, 317, 317, 317, 317, 317, 317, - 317, 317, 319, 318, 321, 320, 323, 322, 325, 324, - 327, 326, 329, 328, 331, 330, 333, 332, 335, 334, - 336, 336, 337, 231, 338, 338, 339, 339, 340, 340, - 340, 340, 341, 343, 342, 345, 344, 346, 346, 347, - 347, 347, 347, 347, 347, 347, 349, 348, 350, 350, - 350, 351, 353, 352, 354, 355, 356, 358, 357, 359, - 359, 360, 360, 362, 361, 364, 363, 366, 365, 368, - 367, 370, 369, 372, 371, 373, 373, 374, 376, 375, - 377, 377, 379, 378, 380, 380, 381, 381, 381, 381, - 381, 382, 384, 383, 386, 385, 387, 387, 389, 388, - 390, 390, 392, 391 + 0, 113, 115, 114, 116, 114, 117, 114, 118, 114, + 119, 114, 120, 114, 121, 114, 122, 114, 123, 114, + 124, 114, 125, 114, 126, 126, 126, 126, 126, 126, + 126, 127, 129, 128, 130, 131, 131, 132, 132, 134, + 133, 136, 135, 137, 137, 138, 138, 139, 141, 140, + 142, 142, 143, 143, 143, 143, 143, 145, 144, 147, + 146, 148, 148, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 150, 151, 152, 153, 154, + 156, 155, 158, 157, 160, 159, 162, 161, 164, 163, + 165, 165, 166, 166, 166, 166, 166, 166, 166, 166, + 166, 168, 167, 170, 169, 172, 171, 174, 173, 176, + 175, 177, 178, 179, 181, 180, 182, 182, 183, 183, + 184, 185, 187, 186, 188, 188, 189, 189, 190, 192, + 191, 194, 193, 195, 195, 196, 196, 198, 197, 200, + 199, 201, 201, 201, 202, 202, 204, 203, 206, 205, + 208, 207, 209, 209, 210, 210, 210, 210, 210, 210, + 211, 212, 213, 214, 215, 216, 218, 217, 219, 219, + 220, 220, 222, 221, 224, 223, 225, 225, 226, 226, + 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, + 226, 226, 226, 226, 226, 228, 227, 230, 229, 232, + 231, 234, 233, 236, 235, 237, 238, 240, 239, 241, + 241, 242, 242, 244, 243, 246, 245, 247, 247, 248, + 248, 249, 249, 249, 249, 249, 249, 249, 249, 250, + 251, 252, 254, 253, 256, 255, 258, 257, 259, 261, + 260, 262, 264, 263, 265, 265, 266, 266, 268, 267, + 270, 269, 271, 271, 272, 272, 273, 273, 273, 273, + 273, 273, 274, 276, 275, 277, 278, 279, 281, 280, + 282, 282, 283, 283, 285, 284, 287, 286, 288, 288, + 289, 289, 289, 289, 291, 290, 293, 292, 295, 294, + 296, 296, 297, 297, 299, 298, 301, 300, 302, 302, + 303, 303, 303, 303, 303, 303, 303, 303, 305, 304, + 306, 308, 307, 309, 310, 312, 311, 313, 313, 314, + 314, 316, 315, 318, 317, 319, 319, 320, 320, 321, + 321, 321, 321, 321, 321, 321, 321, 323, 322, 325, + 324, 327, 326, 329, 328, 331, 330, 333, 332, 335, + 334, 337, 336, 339, 338, 340, 340, 341, 233, 342, + 342, 343, 343, 344, 344, 344, 344, 345, 347, 346, + 349, 348, 350, 350, 351, 351, 351, 351, 351, 351, + 351, 353, 352, 354, 354, 354, 355, 357, 356, 358, + 359, 360, 362, 361, 363, 363, 364, 364, 366, 365, + 368, 367, 370, 369, 372, 371, 374, 373, 376, 375, + 377, 377, 378, 380, 379, 381, 381, 383, 382, 384, + 384, 385, 385, 385, 385, 385, 386, 388, 387, 390, + 389, 391, 391, 393, 392, 394, 394, 396, 395 }; const unsigned char @@ -3412,48 +3445,48 @@ namespace isc { namespace dhcp { 0, 2, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 1, 1, 1, 1, 1, 1, - 1, 1, 0, 4, 0, 1, 3, 5, 0, 4, - 0, 4, 0, 1, 1, 3, 2, 0, 4, 1, - 3, 1, 1, 1, 1, 1, 0, 6, 0, 4, + 1, 1, 0, 4, 1, 0, 1, 3, 5, 0, + 4, 0, 4, 0, 1, 1, 3, 2, 0, 4, + 1, 3, 1, 1, 1, 1, 1, 0, 6, 0, + 4, 1, 3, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, + 0, 6, 0, 4, 0, 4, 0, 6, 0, 6, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 0, 4, 0, 4, 0, 4, 0, 4, 0, + 4, 3, 3, 3, 0, 6, 1, 3, 1, 1, + 1, 1, 0, 6, 1, 3, 1, 1, 1, 0, + 4, 0, 6, 0, 1, 1, 3, 0, 4, 0, + 4, 1, 3, 1, 1, 1, 0, 4, 0, 4, + 0, 6, 1, 3, 1, 1, 1, 1, 1, 1, + 3, 3, 3, 3, 3, 3, 0, 6, 0, 1, + 1, 3, 0, 4, 0, 4, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 3, 3, 3, 3, 3, 0, - 6, 0, 4, 0, 4, 0, 6, 0, 6, 1, + 1, 1, 1, 1, 1, 0, 4, 0, 4, 0, + 4, 0, 4, 0, 4, 3, 3, 0, 6, 0, + 1, 1, 3, 0, 4, 0, 4, 0, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 0, 4, 0, 4, 0, 4, 0, 4, 0, 4, - 3, 3, 3, 0, 6, 1, 3, 1, 1, 1, - 1, 0, 6, 1, 3, 1, 1, 1, 0, 4, - 0, 6, 0, 1, 1, 3, 0, 4, 0, 4, - 1, 3, 1, 1, 1, 0, 4, 0, 4, 0, - 6, 1, 3, 1, 1, 1, 1, 1, 1, 3, - 3, 3, 3, 3, 3, 0, 6, 0, 1, 1, - 3, 0, 4, 0, 4, 1, 3, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 0, 4, 0, 4, 0, 4, - 0, 4, 0, 4, 3, 3, 0, 6, 0, 1, - 1, 3, 0, 4, 0, 4, 0, 1, 1, 3, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, - 1, 0, 4, 0, 4, 0, 4, 1, 0, 4, - 3, 0, 6, 0, 1, 1, 3, 0, 4, 0, - 4, 0, 1, 1, 3, 1, 1, 1, 1, 1, - 1, 1, 0, 4, 1, 1, 3, 0, 6, 0, - 1, 1, 3, 0, 4, 0, 4, 1, 3, 1, - 1, 1, 0, 4, 0, 6, 0, 1, 1, 3, - 0, 4, 0, 4, 1, 3, 1, 1, 1, 1, - 1, 1, 1, 0, 4, 3, 0, 4, 3, 3, - 0, 6, 0, 1, 1, 3, 0, 4, 0, 4, - 0, 1, 1, 3, 1, 1, 1, 1, 1, 1, - 1, 1, 0, 4, 0, 4, 0, 4, 0, 4, - 0, 4, 0, 4, 0, 6, 0, 4, 0, 6, - 1, 3, 0, 4, 0, 1, 1, 3, 1, 1, - 1, 1, 1, 0, 4, 0, 6, 1, 3, 1, - 1, 1, 1, 1, 1, 1, 0, 4, 1, 1, - 1, 3, 0, 4, 3, 3, 3, 0, 6, 1, - 3, 1, 1, 0, 4, 0, 4, 0, 6, 0, - 4, 0, 4, 0, 6, 1, 3, 1, 0, 6, - 1, 3, 0, 4, 1, 3, 1, 1, 1, 1, - 1, 3, 0, 4, 0, 6, 1, 3, 0, 4, - 1, 3, 0, 4 + 3, 1, 0, 4, 0, 4, 0, 4, 1, 0, + 4, 3, 0, 6, 0, 1, 1, 3, 0, 4, + 0, 4, 0, 1, 1, 3, 1, 1, 1, 1, + 1, 1, 1, 0, 4, 1, 1, 3, 0, 6, + 0, 1, 1, 3, 0, 4, 0, 4, 1, 3, + 1, 1, 1, 1, 0, 4, 0, 4, 0, 6, + 0, 1, 1, 3, 0, 4, 0, 4, 1, 3, + 1, 1, 1, 1, 1, 1, 1, 1, 0, 4, + 3, 0, 4, 3, 3, 0, 6, 0, 1, 1, + 3, 0, 4, 0, 4, 0, 1, 1, 3, 1, + 1, 1, 1, 1, 1, 1, 1, 0, 4, 0, + 4, 0, 4, 0, 4, 0, 4, 0, 4, 0, + 6, 0, 4, 0, 6, 1, 3, 0, 4, 0, + 1, 1, 3, 1, 1, 1, 1, 1, 0, 4, + 0, 6, 1, 3, 1, 1, 1, 1, 1, 1, + 1, 0, 4, 1, 1, 1, 3, 0, 4, 3, + 3, 3, 0, 6, 1, 3, 1, 1, 0, 4, + 0, 4, 0, 6, 0, 4, 0, 4, 0, 6, + 1, 3, 1, 0, 6, 1, 3, 0, 4, 1, + 3, 1, 1, 1, 1, 1, 3, 0, 4, 0, + 6, 1, 3, 0, 4, 1, 3, 0, 4 }; @@ -3474,13 +3507,14 @@ namespace isc { namespace dhcp { "\"space\"", "\"csv-format\"", "\"record-types\"", "\"encapsulate\"", "\"array\"", "\"pools\"", "\"pool\"", "\"pd-pools\"", "\"prefix\"", "\"prefix-len\"", "\"excluded-prefix\"", "\"excluded-prefix-len\"", - "\"delegated-len\"", "\"subnet\"", "\"interface\"", "\"interface-id\"", - "\"id\"", "\"rapid-commit\"", "\"reservation-mode\"", "\"mac-sources\"", - "\"relay-supplied-options\"", "\"host-reservation-identifiers\"", - "\"client-classes\"", "\"test\"", "\"client-class\"", "\"reservations\"", - "\"ip-addresses\"", "\"prefixes\"", "\"duid\"", "\"hw-address\"", - "\"hostname\"", "\"relay\"", "\"ip-address\"", "\"hooks-libraries\"", - "\"library\"", "\"parameters\"", "\"expired-leases-processing\"", + "\"delegated-len\"", "\"user-context\"", "\"subnet\"", "\"interface\"", + "\"interface-id\"", "\"id\"", "\"rapid-commit\"", "\"reservation-mode\"", + "\"mac-sources\"", "\"relay-supplied-options\"", + "\"host-reservation-identifiers\"", "\"client-classes\"", "\"test\"", + "\"client-class\"", "\"reservations\"", "\"ip-addresses\"", + "\"prefixes\"", "\"duid\"", "\"hw-address\"", "\"hostname\"", + "\"relay\"", "\"ip-address\"", "\"hooks-libraries\"", "\"library\"", + "\"parameters\"", "\"expired-leases-processing\"", "\"reclaim-timer-wait-time\"", "\"flush-reclaimed-timer-wait-time\"", "\"hold-reclaimed-time\"", "\"max-reclaim-leases\"", "\"max-reclaim-time\"", "\"unwarned-reclaim-cycles\"", "\"server-id\"", @@ -3494,7 +3528,7 @@ namespace isc { namespace dhcp { "SUB_OPTION_DATA", "SUB_HOOKS_LIBRARY", "\"constant string\"", "\"integer\"", "\"floating point\"", "\"boolean\"", "$accept", "start", "$@1", "$@2", "$@3", "$@4", "$@5", "$@6", "$@7", "$@8", "$@9", "$@10", - "$@11", "value", "sub_json", "map2", "$@12", "map_content", + "$@11", "value", "sub_json", "map2", "$@12", "map_value", "map_content", "not_empty_map", "list_generic", "$@13", "list2", "$@14", "list_content", "not_empty_list", "unknown_map_entry", "syntax_map", "$@15", "global_objects", "global_object", "dhcp6_object", "$@16", "sub_dhcp6", @@ -3535,81 +3569,82 @@ namespace isc { namespace dhcp { "option_data_code", "option_data_space", "option_data_csv_format", "pools_list", "$@56", "pools_list_content", "not_empty_pools_list", "pool_list_entry", "$@57", "sub_pool6", "$@58", "pool_params", - "pool_param", "pool_entry", "$@59", "pd_pools_list", "$@60", - "pd_pools_list_content", "not_empty_pd_pools_list", "pd_pool_entry", - "$@61", "sub_pd_pool", "$@62", "pd_pool_params", "pd_pool_param", - "pd_prefix", "$@63", "pd_prefix_len", "excluded_prefix", "$@64", - "excluded_prefix_len", "pd_delegated_len", "reservations", "$@65", - "reservations_list", "not_empty_reservations_list", "reservation", - "$@66", "sub_reservation", "$@67", "reservation_params", - "not_empty_reservation_params", "reservation_param", "ip_addresses", - "$@68", "prefixes", "$@69", "duid", "$@70", "hw_address", "$@71", - "hostname", "$@72", "reservation_client_classes", "$@73", "relay", - "$@74", "relay_map", "$@75", "client_classes", "$@76", - "client_classes_list", "$@77", "client_class_params", - "not_empty_client_class_params", "client_class_param", - "client_class_name", "client_class_test", "$@78", "server_id", "$@79", - "server_id_params", "server_id_param", "server_id_type", "$@80", - "duid_type", "htype", "identifier", "$@81", "time", "enterprise_id", - "dhcp4o6_port", "control_socket", "$@82", "control_socket_params", - "control_socket_param", "socket_type", "$@83", "socket_name", "$@84", - "dhcp_ddns", "$@85", "dhcp4_json_object", "$@86", "dhcpddns_json_object", - "$@87", "logging_object", "$@88", "logging_params", "logging_param", - "loggers", "$@89", "loggers_entries", "logger_entry", "$@90", - "logger_params", "logger_param", "debuglevel", "severity", "$@91", - "output_options_list", "$@92", "output_options_list_content", - "output_entry", "$@93", "output_params", "output_param", "$@94", YY_NULLPTR + "pool_param", "pool_entry", "$@59", "user_context", "$@60", + "pd_pools_list", "$@61", "pd_pools_list_content", + "not_empty_pd_pools_list", "pd_pool_entry", "$@62", "sub_pd_pool", + "$@63", "pd_pool_params", "pd_pool_param", "pd_prefix", "$@64", + "pd_prefix_len", "excluded_prefix", "$@65", "excluded_prefix_len", + "pd_delegated_len", "reservations", "$@66", "reservations_list", + "not_empty_reservations_list", "reservation", "$@67", "sub_reservation", + "$@68", "reservation_params", "not_empty_reservation_params", + "reservation_param", "ip_addresses", "$@69", "prefixes", "$@70", "duid", + "$@71", "hw_address", "$@72", "hostname", "$@73", + "reservation_client_classes", "$@74", "relay", "$@75", "relay_map", + "$@76", "client_classes", "$@77", "client_classes_list", "$@78", + "client_class_params", "not_empty_client_class_params", + "client_class_param", "client_class_name", "client_class_test", "$@79", + "server_id", "$@80", "server_id_params", "server_id_param", + "server_id_type", "$@81", "duid_type", "htype", "identifier", "$@82", + "time", "enterprise_id", "dhcp4o6_port", "control_socket", "$@83", + "control_socket_params", "control_socket_param", "socket_type", "$@84", + "socket_name", "$@85", "dhcp_ddns", "$@86", "dhcp4_json_object", "$@87", + "dhcpddns_json_object", "$@88", "logging_object", "$@89", + "logging_params", "logging_param", "loggers", "$@90", "loggers_entries", + "logger_entry", "$@91", "logger_params", "logger_param", "debuglevel", + "severity", "$@92", "output_options_list", "$@93", + "output_options_list_content", "output_entry", "$@94", "output_params", + "output_param", "$@95", YY_NULLPTR }; #if PARSER6_DEBUG const unsigned short int Dhcp6Parser::yyrline_[] = { - 0, 208, 208, 208, 209, 209, 210, 210, 211, 211, - 212, 212, 213, 213, 214, 214, 215, 215, 216, 216, - 217, 217, 218, 218, 226, 227, 228, 229, 230, 231, - 232, 235, 240, 240, 252, 253, 256, 260, 267, 267, - 275, 275, 282, 283, 286, 290, 301, 311, 311, 323, - 324, 328, 329, 330, 331, 332, 335, 335, 352, 352, - 360, 361, 366, 367, 368, 369, 370, 371, 372, 373, - 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, - 384, 385, 386, 387, 390, 395, 400, 405, 410, 415, - 415, 425, 425, 433, 433, 443, 443, 453, 453, 463, - 464, 467, 468, 469, 470, 471, 472, 473, 474, 475, - 478, 478, 486, 486, 494, 494, 502, 502, 510, 510, - 518, 523, 528, 533, 533, 543, 544, 547, 548, 551, - 556, 561, 561, 571, 572, 575, 576, 579, 584, 584, - 594, 594, 604, 605, 608, 609, 612, 612, 620, 620, - 628, 629, 630, 633, 634, 637, 637, 645, 645, 653, - 653, 663, 664, 667, 668, 669, 670, 671, 672, 675, - 680, 685, 690, 695, 700, 708, 708, 721, 722, 725, - 726, 733, 733, 756, 756, 765, 766, 770, 771, 772, - 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, - 783, 784, 785, 786, 789, 789, 797, 797, 805, 805, - 813, 813, 821, 821, 829, 834, 843, 843, 855, 856, - 859, 860, 865, 865, 876, 876, 886, 887, 890, 891, - 894, 895, 896, 897, 898, 899, 900, 901, 904, 906, - 911, 913, 913, 921, 921, 929, 929, 937, 939, 939, - 947, 956, 956, 968, 969, 974, 975, 980, 980, 991, - 991, 1002, 1003, 1008, 1009, 1014, 1015, 1016, 1017, 1018, - 1019, 1022, 1024, 1024, 1032, 1034, 1036, 1044, 1044, 1056, - 1057, 1060, 1061, 1064, 1064, 1072, 1072, 1080, 1081, 1084, - 1085, 1086, 1089, 1089, 1100, 1100, 1112, 1113, 1116, 1117, - 1120, 1120, 1128, 1128, 1136, 1137, 1140, 1141, 1142, 1143, - 1144, 1145, 1146, 1149, 1149, 1157, 1162, 1162, 1170, 1175, - 1183, 1183, 1193, 1194, 1197, 1198, 1201, 1201, 1209, 1209, - 1217, 1218, 1221, 1222, 1226, 1227, 1228, 1229, 1230, 1231, - 1232, 1233, 1236, 1236, 1246, 1246, 1256, 1256, 1264, 1264, - 1272, 1272, 1280, 1280, 1293, 1293, 1303, 1303, 1314, 1314, - 1324, 1325, 1328, 1328, 1336, 1337, 1340, 1341, 1344, 1345, - 1346, 1347, 1350, 1352, 1352, 1363, 1363, 1373, 1374, 1377, - 1378, 1379, 1380, 1381, 1382, 1383, 1386, 1386, 1393, 1394, - 1395, 1398, 1403, 1403, 1411, 1416, 1423, 1430, 1430, 1440, - 1441, 1444, 1445, 1448, 1448, 1456, 1456, 1466, 1466, 1478, - 1478, 1485, 1485, 1497, 1497, 1510, 1511, 1515, 1519, 1519, - 1531, 1532, 1536, 1536, 1544, 1545, 1548, 1549, 1550, 1551, - 1552, 1555, 1559, 1559, 1567, 1567, 1577, 1578, 1581, 1581, - 1589, 1590, 1593, 1593 + 0, 210, 210, 210, 211, 211, 212, 212, 213, 213, + 214, 214, 215, 215, 216, 216, 217, 217, 218, 218, + 219, 219, 220, 220, 228, 229, 230, 231, 232, 233, + 234, 237, 242, 242, 253, 256, 257, 260, 264, 271, + 271, 279, 279, 286, 287, 290, 294, 305, 315, 315, + 327, 328, 332, 333, 334, 335, 336, 339, 339, 356, + 356, 364, 365, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 394, 399, 404, 409, 414, + 419, 419, 429, 429, 437, 437, 447, 447, 457, 457, + 467, 468, 471, 472, 473, 474, 475, 476, 477, 478, + 479, 482, 482, 490, 490, 498, 498, 506, 506, 514, + 514, 522, 527, 532, 537, 537, 547, 548, 551, 552, + 555, 560, 565, 565, 575, 576, 579, 580, 583, 588, + 588, 598, 598, 608, 609, 612, 613, 616, 616, 624, + 624, 632, 633, 634, 637, 638, 641, 641, 649, 649, + 657, 657, 667, 668, 671, 672, 673, 674, 675, 676, + 679, 684, 689, 694, 699, 704, 712, 712, 725, 726, + 729, 730, 737, 737, 760, 760, 769, 770, 774, 775, + 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, + 786, 787, 788, 789, 790, 793, 793, 801, 801, 809, + 809, 817, 817, 825, 825, 833, 838, 847, 847, 859, + 860, 863, 864, 869, 869, 880, 880, 890, 891, 894, + 895, 898, 899, 900, 901, 902, 903, 904, 905, 908, + 910, 915, 917, 917, 925, 925, 933, 933, 941, 943, + 943, 951, 960, 960, 972, 973, 978, 979, 984, 984, + 995, 995, 1006, 1007, 1012, 1013, 1018, 1019, 1020, 1021, + 1022, 1023, 1026, 1028, 1028, 1036, 1038, 1040, 1048, 1048, + 1060, 1061, 1064, 1065, 1068, 1068, 1076, 1076, 1084, 1085, + 1088, 1089, 1090, 1091, 1094, 1094, 1102, 1102, 1112, 1112, + 1124, 1125, 1128, 1129, 1132, 1132, 1140, 1140, 1148, 1149, + 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1162, 1162, + 1170, 1175, 1175, 1183, 1188, 1196, 1196, 1206, 1207, 1210, + 1211, 1214, 1214, 1222, 1222, 1230, 1231, 1234, 1235, 1239, + 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1249, 1249, 1259, + 1259, 1269, 1269, 1277, 1277, 1285, 1285, 1293, 1293, 1306, + 1306, 1316, 1316, 1327, 1327, 1337, 1338, 1341, 1341, 1349, + 1350, 1353, 1354, 1357, 1358, 1359, 1360, 1363, 1365, 1365, + 1376, 1376, 1386, 1387, 1390, 1391, 1392, 1393, 1394, 1395, + 1396, 1399, 1399, 1406, 1407, 1408, 1411, 1416, 1416, 1424, + 1429, 1436, 1443, 1443, 1453, 1454, 1457, 1458, 1461, 1461, + 1469, 1469, 1479, 1479, 1491, 1491, 1498, 1498, 1510, 1510, + 1523, 1524, 1528, 1532, 1532, 1544, 1545, 1549, 1549, 1557, + 1558, 1561, 1562, 1563, 1564, 1565, 1568, 1572, 1572, 1580, + 1580, 1590, 1591, 1594, 1594, 1602, 1603, 1606, 1606 }; // Print the state stack on the debug stream. @@ -3644,8 +3679,8 @@ namespace isc { namespace dhcp { #line 14 "dhcp6_parser.yy" // lalr1.cc:1167 } } // isc::dhcp -#line 3648 "dhcp6_parser.cc" // lalr1.cc:1167 -#line 1601 "dhcp6_parser.yy" // lalr1.cc:1168 +#line 3683 "dhcp6_parser.cc" // lalr1.cc:1167 +#line 1614 "dhcp6_parser.yy" // lalr1.cc:1168 void diff --git a/src/bin/dhcp6/dhcp6_parser.h b/src/bin/dhcp6/dhcp6_parser.h index 302ae838aa..08ad200887 100644 --- a/src/bin/dhcp6/dhcp6_parser.h +++ b/src/bin/dhcp6/dhcp6_parser.h @@ -305,6 +305,7 @@ namespace isc { namespace dhcp { union union_type { // value + // map_value // duid_type char dummy1[sizeof(ElementPtr)]; @@ -385,72 +386,73 @@ namespace isc { namespace dhcp { TOKEN_EXCLUDED_PREFIX = 298, TOKEN_EXCLUDED_PREFIX_LEN = 299, TOKEN_DELEGATED_LEN = 300, - TOKEN_SUBNET = 301, - TOKEN_INTERFACE = 302, - TOKEN_INTERFACE_ID = 303, - TOKEN_ID = 304, - TOKEN_RAPID_COMMIT = 305, - TOKEN_RESERVATION_MODE = 306, - TOKEN_MAC_SOURCES = 307, - TOKEN_RELAY_SUPPLIED_OPTIONS = 308, - TOKEN_HOST_RESERVATION_IDENTIFIERS = 309, - TOKEN_CLIENT_CLASSES = 310, - TOKEN_TEST = 311, - TOKEN_CLIENT_CLASS = 312, - TOKEN_RESERVATIONS = 313, - TOKEN_IP_ADDRESSES = 314, - TOKEN_PREFIXES = 315, - TOKEN_DUID = 316, - TOKEN_HW_ADDRESS = 317, - TOKEN_HOSTNAME = 318, - TOKEN_RELAY = 319, - TOKEN_IP_ADDRESS = 320, - TOKEN_HOOKS_LIBRARIES = 321, - TOKEN_LIBRARY = 322, - TOKEN_PARAMETERS = 323, - TOKEN_EXPIRED_LEASES_PROCESSING = 324, - TOKEN_RECLAIM_TIMER_WAIT_TIME = 325, - TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 326, - TOKEN_HOLD_RECLAIMED_TIME = 327, - TOKEN_MAX_RECLAIM_LEASES = 328, - TOKEN_MAX_RECLAIM_TIME = 329, - TOKEN_UNWARNED_RECLAIM_CYCLES = 330, - TOKEN_SERVER_ID = 331, - TOKEN_LLT = 332, - TOKEN_EN = 333, - TOKEN_LL = 334, - TOKEN_IDENTIFIER = 335, - TOKEN_HTYPE = 336, - TOKEN_TIME = 337, - TOKEN_ENTERPRISE_ID = 338, - TOKEN_DHCP4O6_PORT = 339, - TOKEN_CONTROL_SOCKET = 340, - TOKEN_SOCKET_TYPE = 341, - TOKEN_SOCKET_NAME = 342, - TOKEN_DHCP_DDNS = 343, - TOKEN_LOGGING = 344, - TOKEN_LOGGERS = 345, - TOKEN_OUTPUT_OPTIONS = 346, - TOKEN_OUTPUT = 347, - TOKEN_DEBUGLEVEL = 348, - TOKEN_SEVERITY = 349, - TOKEN_DHCP4 = 350, - TOKEN_DHCPDDNS = 351, - TOKEN_TOPLEVEL_JSON = 352, - TOKEN_TOPLEVEL_DHCP6 = 353, - TOKEN_SUB_DHCP6 = 354, - TOKEN_SUB_INTERFACES6 = 355, - TOKEN_SUB_SUBNET6 = 356, - TOKEN_SUB_POOL6 = 357, - TOKEN_SUB_PD_POOL = 358, - TOKEN_SUB_RESERVATION = 359, - TOKEN_SUB_OPTION_DEF = 360, - TOKEN_SUB_OPTION_DATA = 361, - TOKEN_SUB_HOOKS_LIBRARY = 362, - TOKEN_STRING = 363, - TOKEN_INTEGER = 364, - TOKEN_FLOAT = 365, - TOKEN_BOOLEAN = 366 + TOKEN_USER_CONTEXT = 301, + TOKEN_SUBNET = 302, + TOKEN_INTERFACE = 303, + TOKEN_INTERFACE_ID = 304, + TOKEN_ID = 305, + TOKEN_RAPID_COMMIT = 306, + TOKEN_RESERVATION_MODE = 307, + TOKEN_MAC_SOURCES = 308, + TOKEN_RELAY_SUPPLIED_OPTIONS = 309, + TOKEN_HOST_RESERVATION_IDENTIFIERS = 310, + TOKEN_CLIENT_CLASSES = 311, + TOKEN_TEST = 312, + TOKEN_CLIENT_CLASS = 313, + TOKEN_RESERVATIONS = 314, + TOKEN_IP_ADDRESSES = 315, + TOKEN_PREFIXES = 316, + TOKEN_DUID = 317, + TOKEN_HW_ADDRESS = 318, + TOKEN_HOSTNAME = 319, + TOKEN_RELAY = 320, + TOKEN_IP_ADDRESS = 321, + TOKEN_HOOKS_LIBRARIES = 322, + TOKEN_LIBRARY = 323, + TOKEN_PARAMETERS = 324, + TOKEN_EXPIRED_LEASES_PROCESSING = 325, + TOKEN_RECLAIM_TIMER_WAIT_TIME = 326, + TOKEN_FLUSH_RECLAIMED_TIMER_WAIT_TIME = 327, + TOKEN_HOLD_RECLAIMED_TIME = 328, + TOKEN_MAX_RECLAIM_LEASES = 329, + TOKEN_MAX_RECLAIM_TIME = 330, + TOKEN_UNWARNED_RECLAIM_CYCLES = 331, + TOKEN_SERVER_ID = 332, + TOKEN_LLT = 333, + TOKEN_EN = 334, + TOKEN_LL = 335, + TOKEN_IDENTIFIER = 336, + TOKEN_HTYPE = 337, + TOKEN_TIME = 338, + TOKEN_ENTERPRISE_ID = 339, + TOKEN_DHCP4O6_PORT = 340, + TOKEN_CONTROL_SOCKET = 341, + TOKEN_SOCKET_TYPE = 342, + TOKEN_SOCKET_NAME = 343, + TOKEN_DHCP_DDNS = 344, + TOKEN_LOGGING = 345, + TOKEN_LOGGERS = 346, + TOKEN_OUTPUT_OPTIONS = 347, + TOKEN_OUTPUT = 348, + TOKEN_DEBUGLEVEL = 349, + TOKEN_SEVERITY = 350, + TOKEN_DHCP4 = 351, + TOKEN_DHCPDDNS = 352, + TOKEN_TOPLEVEL_JSON = 353, + TOKEN_TOPLEVEL_DHCP6 = 354, + TOKEN_SUB_DHCP6 = 355, + TOKEN_SUB_INTERFACES6 = 356, + TOKEN_SUB_SUBNET6 = 357, + TOKEN_SUB_POOL6 = 358, + TOKEN_SUB_PD_POOL = 359, + TOKEN_SUB_RESERVATION = 360, + TOKEN_SUB_OPTION_DEF = 361, + TOKEN_SUB_OPTION_DATA = 362, + TOKEN_SUB_HOOKS_LIBRARY = 363, + TOKEN_STRING = 364, + TOKEN_INTEGER = 365, + TOKEN_FLOAT = 366, + TOKEN_BOOLEAN = 367 }; }; @@ -741,6 +743,10 @@ namespace isc { namespace dhcp { symbol_type make_DELEGATED_LEN (const location_type& l); + static inline + symbol_type + make_USER_CONTEXT (const location_type& l); + static inline symbol_type make_SUBNET (const location_type& l); @@ -1210,12 +1216,12 @@ namespace isc { namespace dhcp { enum { yyeof_ = 0, - yylast_ = 661, ///< Last index in yytable_. - yynnts_ = 281, ///< Number of nonterminal symbols. + yylast_ = 668, ///< Last index in yytable_. + yynnts_ = 284, ///< Number of nonterminal symbols. yyfinal_ = 24, ///< Termination state number. yyterror_ = 1, yyerrcode_ = 256, - yyntokens_ = 112 ///< Number of tokens. + yyntokens_ = 113 ///< Number of tokens. }; @@ -1268,9 +1274,9 @@ namespace isc { namespace dhcp { 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 + 105, 106, 107, 108, 109, 110, 111, 112 }; - const unsigned int user_token_number_max_ = 366; + const unsigned int user_token_number_max_ = 367; const token_number_type undef_token_ = 2; if (static_cast(t) <= yyeof_) @@ -1303,24 +1309,25 @@ namespace isc { namespace dhcp { { switch (other.type_get ()) { - case 125: // value - case 350: // duid_type + case 126: // value + case 130: // map_value + case 354: // duid_type value.copy< ElementPtr > (other.value); break; - case 111: // "boolean" + case 112: // "boolean" value.copy< bool > (other.value); break; - case 110: // "floating point" + case 111: // "floating point" value.copy< double > (other.value); break; - case 109: // "integer" + case 110: // "integer" value.copy< int64_t > (other.value); break; - case 108: // "constant string" + case 109: // "constant string" value.copy< std::string > (other.value); break; @@ -1341,24 +1348,25 @@ namespace isc { namespace dhcp { (void) v; switch (this->type_get ()) { - case 125: // value - case 350: // duid_type + case 126: // value + case 130: // map_value + case 354: // duid_type value.copy< ElementPtr > (v); break; - case 111: // "boolean" + case 112: // "boolean" value.copy< bool > (v); break; - case 110: // "floating point" + case 111: // "floating point" value.copy< double > (v); break; - case 109: // "integer" + case 110: // "integer" value.copy< int64_t > (v); break; - case 108: // "constant string" + case 109: // "constant string" value.copy< std::string > (v); break; @@ -1438,24 +1446,25 @@ namespace isc { namespace dhcp { // Type destructor. switch (yytype) { - case 125: // value - case 350: // duid_type + case 126: // value + case 130: // map_value + case 354: // duid_type value.template destroy< ElementPtr > (); break; - case 111: // "boolean" + case 112: // "boolean" value.template destroy< bool > (); break; - case 110: // "floating point" + case 111: // "floating point" value.template destroy< double > (); break; - case 109: // "integer" + case 110: // "integer" value.template destroy< int64_t > (); break; - case 108: // "constant string" + case 109: // "constant string" value.template destroy< std::string > (); break; @@ -1482,24 +1491,25 @@ namespace isc { namespace dhcp { super_type::move(s); switch (this->type_get ()) { - case 125: // value - case 350: // duid_type + case 126: // value + case 130: // map_value + case 354: // duid_type value.move< ElementPtr > (s.value); break; - case 111: // "boolean" + case 112: // "boolean" value.move< bool > (s.value); break; - case 110: // "floating point" + case 111: // "floating point" value.move< double > (s.value); break; - case 109: // "integer" + case 110: // "integer" value.move< int64_t > (s.value); break; - case 108: // "constant string" + case 109: // "constant string" value.move< std::string > (s.value); break; @@ -1569,7 +1579,7 @@ namespace isc { namespace dhcp { 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 + 365, 366, 367 }; return static_cast (yytoken_number_[type]); } @@ -1838,6 +1848,12 @@ namespace isc { namespace dhcp { return symbol_type (token::TOKEN_DELEGATED_LEN, l); } + Dhcp6Parser::symbol_type + Dhcp6Parser::make_USER_CONTEXT (const location_type& l) + { + return symbol_type (token::TOKEN_USER_CONTEXT, l); + } + Dhcp6Parser::symbol_type Dhcp6Parser::make_SUBNET (const location_type& l) { @@ -2237,7 +2253,7 @@ namespace isc { namespace dhcp { #line 14 "dhcp6_parser.yy" // lalr1.cc:377 } } // isc::dhcp -#line 2241 "dhcp6_parser.h" // lalr1.cc:377 +#line 2257 "dhcp6_parser.h" // lalr1.cc:377 diff --git a/src/bin/dhcp6/location.hh b/src/bin/dhcp6/location.hh index ca85a553e8..e1acfd6eed 100644 --- a/src/bin/dhcp6/location.hh +++ b/src/bin/dhcp6/location.hh @@ -1,4 +1,4 @@ -// Generated 201701102225 +// Generated 201701120056 // A Bison parser, made by GNU Bison 3.0.4. // Locations for Bison parsers in C++ diff --git a/src/bin/dhcp6/position.hh b/src/bin/dhcp6/position.hh index 9a4005eb75..b454cf0917 100644 --- a/src/bin/dhcp6/position.hh +++ b/src/bin/dhcp6/position.hh @@ -1,4 +1,4 @@ -// Generated 201701102225 +// Generated 201701120056 // A Bison parser, made by GNU Bison 3.0.4. // Positions for Bison parsers in C++ diff --git a/src/bin/dhcp6/stack.hh b/src/bin/dhcp6/stack.hh index 1b934c7596..fb4fc62d0c 100644 --- a/src/bin/dhcp6/stack.hh +++ b/src/bin/dhcp6/stack.hh @@ -1,4 +1,4 @@ -// Generated 201701102225 +// Generated 201701120056 // A Bison parser, made by GNU Bison 3.0.4. // Stack handling for Bison parsers in C++ From 00442d75b0e8fbb05f732bd363d2acec9236c2d9 Mon Sep 17 00:00:00 2001 From: Francis Dupont Date: Thu, 12 Jan 2017 10:13:31 +0100 Subject: [PATCH 04/10] [5097] Improved pd-pools parsing, tentative fix for #3956 --- src/bin/dhcp6/json_config_parser.cc | 64 +++++++++++++++++-------- src/lib/dhcpsrv/parsers/dhcp_parsers.cc | 52 +++++++++++++------- 2 files changed, 78 insertions(+), 38 deletions(-) diff --git a/src/bin/dhcp6/json_config_parser.cc b/src/bin/dhcp6/json_config_parser.cc index bf913f5012..247fdc34a4 100644 --- a/src/bin/dhcp6/json_config_parser.cc +++ b/src/bin/dhcp6/json_config_parser.cc @@ -171,12 +171,9 @@ public: void parse(ConstElementPtr pd_pool_) { std::string addr_str; std::string excluded_prefix_str = "::"; - int64_t prefix_len; - int64_t delegated_len; - int64_t excluded_prefix_len = 0; - bool got_prefix = false; - bool got_prefix_len = false; - bool got_delegated_len = false; + uint8_t prefix_len = 0; + uint8_t delegated_len = 0; + uint8_t excluded_prefix_len = 0; // Parse the elements that make up the option definition. BOOST_FOREACH(ConfigPair param, pd_pool_->mapValue()) { @@ -185,24 +182,21 @@ public: try { if (entry == "prefix") { addr_str = value->stringValue(); - got_prefix = true; } else if (entry == "excluded-prefix") { excluded_prefix_str = value->stringValue(); } else if (entry == "prefix-len") { - prefix_len = value->intValue(); - got_prefix_len = true; + prefix_len = getUint8(entry, value); } else if (entry == "delegated-len") { - delegated_len = value->intValue(); - got_delegated_len = true; + delegated_len = getUint8(entry, value); } else if (entry == "excluded-prefix-len") { - excluded_prefix_len = value->intValue(); + excluded_prefix_len = getUint8(entry, value); } else if (entry == "option-data") { OptionDataListParser opts_parser(AF_INET6); opts_parser.parse(options_, value); } else if (entry == "user-context") { user_context_ = value; } else { - isc_throw(DhcpConfigError, + isc_throw(isc::dhcp::DhcpConfigError, "unsupported parameter: " << entry << " (" << value->getPosition() << ")"); } @@ -216,13 +210,9 @@ public: // Check the pool parameters. It will throw an exception if any // of the required parameters are not present or invalid. - if (!got_prefix || !got_prefix_len || !got_delegated_len) { - isc_throw(isc::dhcp::DhcpConfigError, - "Missing parameter '" - << (!got_prefix ? "prefix" : - (!got_prefix_len ? "prefix-len" : "delegated-len")) - << "' (" << pd_pool_->getPosition() << ")"); - } + require_("prefix", pd_pool_); + require_("prefix-len", pd_pool_); + require_("delegated-len", pd_pool_); try { // Attempt to construct the local pool. pool_.reset(new Pool6(IOAddress(addr_str), @@ -248,7 +238,39 @@ public: pools_->push_back(pool_); } -protected: +private: + + /// @brief Require a mandatory element + /// + /// @param name Entry name + /// @param config Pools configuration + /// @throw isc::dhcp::DhcpConfigError if not present + void require_(const std::string& name, ConstElementPtr config) const { + if (!config->contains(name)) { + isc_throw(isc::dhcp::DhcpConfigError, + "Missing parameter '" << name << "' (" + << config->getPosition() << ")"); + } + } + + /// @brief Get an uint8_t value + /// + /// @param name Entry name + /// @param value Integer element value + /// @return uint8_t value + /// @throw isc::data::TypeError when it is not an integer + /// isc::dhcp::DhcpConfigError when it does not fit in an uint8_t + uint8_t getUint8(const std::string& name, ConstElementPtr value) const { + int64_t val_int = value->intValue(); + if ((val_int < std::numeric_limits::min()) || + (val_int > std::numeric_limits::max())) { + isc_throw(isc::dhcp::DhcpConfigError, + "out of range value (" << val_int + << ") specified for parameter '" + << name << "' (" << value->getPosition() << ")"); + } + return (static_cast(val_int)); + } /// Pointer to the created pool object. isc::dhcp::Pool6Ptr pool_; diff --git a/src/lib/dhcpsrv/parsers/dhcp_parsers.cc b/src/lib/dhcpsrv/parsers/dhcp_parsers.cc index 265ad21989..1e85b32548 100644 --- a/src/lib/dhcpsrv/parsers/dhcp_parsers.cc +++ b/src/lib/dhcpsrv/parsers/dhcp_parsers.cc @@ -903,34 +903,42 @@ PoolParser::parse(ConstElementPtr pool_structure, len = boost::lexical_cast(prefix_len); } catch (...) { isc_throw(DhcpConfigError, "Failed to parse pool " - "definition: " << text_pool->stringValue() - << " (" << text_pool->getPosition() << ")"); + "definition: " << txt << " (" + << text_pool->getPosition() << ")"); } - pool = poolMaker(addr, len); - pools_->push_back(pool); - - // If there's user-context specified, store it. - ConstElementPtr user_context = pool_structure->get("user-context"); - if (user_context) { - if (user_context->getType() != Element::map) { - isc_throw(isc::dhcp::DhcpConfigError, "User context has to be a map (" - << user_context->getPosition() << ")"); - } - pool->setUserContext(user_context); + try { + pool = poolMaker(addr, len); + pools_->push_back(pool); + } catch (const std::exception& ex) { + isc_throw(DhcpConfigError, "Failed to create pool defined by: " + << txt << " (" << text_pool->getPosition() << ")"); } } else { + isc::asiolink::IOAddress min("::"); + isc::asiolink::IOAddress max("::"); // Is this min-max notation? pos = txt.find("-"); if (pos != string::npos) { // using min-max notation - isc::asiolink::IOAddress min(txt.substr(0,pos)); - isc::asiolink::IOAddress max(txt.substr(pos + 1)); + try { + min = isc::asiolink::IOAddress(txt.substr(0, pos)); + max = isc::asiolink::IOAddress(txt.substr(pos + 1)); + } catch (...) { + isc_throw(DhcpConfigError, "Failed to parse pool " + "definition: " << txt << " (" + << text_pool->getPosition() << ")"); + } - pool = poolMaker(min, max); - pools_->push_back(pool); + try { + pool = poolMaker(min, max); + pools_->push_back(pool); + } catch (const std::exception& ex) { + isc_throw(DhcpConfigError, "Failed to create pool defined by: " + << txt << " (" << text_pool->getPosition() << ")"); + } } } @@ -942,6 +950,16 @@ PoolParser::parse(ConstElementPtr pool_structure, << text_pool->getPosition() << ")"); } + // If there's user-context specified, store it. + ConstElementPtr user_context = pool_structure->get("user-context"); + if (user_context) { + if (user_context->getType() != Element::map) { + isc_throw(isc::dhcp::DhcpConfigError, "User context has to be a map (" + << user_context->getPosition() << ")"); + } + pool->setUserContext(user_context); + } + // Parser pool specific options. ConstElementPtr option_data = pool_structure->get("option-data"); if (option_data) { From 249822b7e23a0250d071d8dec411732da9c1d8f3 Mon Sep 17 00:00:00 2001 From: Francis Dupont Date: Thu, 12 Jan 2017 10:42:14 +0100 Subject: [PATCH 05/10] [5097] Added unit tests for user-context in min-max pools --- src/bin/dhcp4/tests/config_parser_unittest.cc | 55 ++++++++++++++ src/bin/dhcp6/tests/config_parser_unittest.cc | 75 +++++++++++++++++-- 2 files changed, 124 insertions(+), 6 deletions(-) diff --git a/src/bin/dhcp4/tests/config_parser_unittest.cc b/src/bin/dhcp4/tests/config_parser_unittest.cc index 22f9508fc8..ffb5548f4e 100644 --- a/src/bin/dhcp4/tests/config_parser_unittest.cc +++ b/src/bin/dhcp4/tests/config_parser_unittest.cc @@ -107,6 +107,28 @@ const char* PARSER_CONFIGS[] = { " ]," " \"subnet\": \"192.0.2.0/24\"" " } ]" + "}", + + // Configuration 3: one min-max pool with user context containing lw4over6 parameters + "{" + " \"interfaces-config\": {" + " \"interfaces\": [\"*\" ]" + " }," + " \"valid-lifetime\": 4000," + " \"rebind-timer\": 2000," + " \"renew-timer\": 1000," + " \"subnet4\": [ {" + " \"pools\": [ " + " { \"pool\": \"192.0.2.0 - 192.0.2.15\"," + " \"user-context\": {" + " \"integer-param\": 42," + " \"string-param\": \"Sagittarius\"," + " \"bool-param\": true" + " }" + " }" + " ]," + " \"subnet\": \"192.0.2.0/24\"" + " } ]" "}" }; @@ -4481,5 +4503,38 @@ TEST_F(Dhcp4ParserTest, poolUserContextData) { EXPECT_EQ(true, bool_value); } +// Test verifies that it's possible to specify parameters in the user context +// in the min-max address pool. +TEST_F(Dhcp4ParserTest, pooMinMaxlUserContext) { + PoolPtr pool; + getPool(string(PARSER_CONFIGS[3]), 0, 0, pool); + ASSERT_TRUE(pool); + ConstElementPtr ctx = pool->getContext(); + ASSERT_TRUE(ctx); + + // The context should be of type map and contain 4 parameters. + EXPECT_EQ(Element::map, ctx->getType()); + EXPECT_EQ(3, ctx->size()); + ConstElementPtr int_param = ctx->get("integer-param"); + ConstElementPtr str_param = ctx->get("string-param"); + ConstElementPtr bool_param = ctx->get("bool-param"); + + ASSERT_TRUE(int_param); + ASSERT_EQ(Element::integer, int_param->getType()); + int64_t int_value; + EXPECT_NO_THROW(int_param->getValue(int_value)); + EXPECT_EQ(42L, int_value); + + ASSERT_TRUE(str_param); + ASSERT_EQ(Element::string, str_param->getType()); + EXPECT_EQ("Sagittarius", str_param->stringValue()); + + ASSERT_TRUE(bool_param); + bool bool_value; + ASSERT_EQ(Element::boolean, bool_param->getType()); + EXPECT_NO_THROW(bool_param->getValue(bool_value)); + EXPECT_EQ(true, bool_value); +} + } diff --git a/src/bin/dhcp6/tests/config_parser_unittest.cc b/src/bin/dhcp6/tests/config_parser_unittest.cc index d007490636..7876a854cb 100644 --- a/src/bin/dhcp6/tests/config_parser_unittest.cc +++ b/src/bin/dhcp6/tests/config_parser_unittest.cc @@ -118,7 +118,31 @@ const char* PARSER_CONFIGS[] = { " } ]" "}", - // Configuration 3: pd-pool without any user-context + // Configuration 3: one min-max pool with user context containing lw4over6 parameters + "{" + " \"interfaces-config\": {" + " \"interfaces\": [\"*\" ]" + " }," + " \"valid-lifetime\": 4000," + " \"preferred-lifetime\": 3000," + " \"rebind-timer\": 2000," + " \"renew-timer\": 1000," + " \"subnet6\": [ {" + " \"pools\": [ " + " { \"pool\": \"2001:db8:: - 2001:db8::ffff:ffff:ffff:ffff\"," + " \"user-context\": {" + " \"lw4over6-sharing-ratio\": 64," + " \"lw4over6-v4-pool\": \"192.0.2.0/24\"," + " \"lw4over6-sysports-exclude\": true," + " \"lw4over6-bind-prefix-len\": 56" + " }" + " }" + " ]," + " \"subnet\": \"2001:db8::/32\"" + " } ]" + "}", + + // Configuration 4: pd-pool without any user-context "{" " \"interfaces-config\": {" " \"interfaces\": [\"*\" ]" @@ -137,7 +161,7 @@ const char* PARSER_CONFIGS[] = { " } ]" "}", - // Configuration 4: pd-pool with empty user-context + // Configuration 5: pd-pool with empty user-context "{" " \"interfaces-config\": {" " \"interfaces\": [\"*\" ]" @@ -158,7 +182,7 @@ const char* PARSER_CONFIGS[] = { " } ]" "}", - // Configuration 5: pd-pool with user-context with lw4over6 parameters + // Configuration 6: pd-pool with user-context with lw4over6 parameters "{" " \"interfaces-config\": {" " \"interfaces\": [\"*\" ]" @@ -4866,11 +4890,50 @@ TEST_F(Dhcp6ParserTest, poolUserContextlw4over6) { EXPECT_EQ(56L, int_value); } +// Test verifies that it's possible to specify parameters in the user context +// in the min-max address pool. +TEST_F(Dhcp6ParserTest, poolMinMaxUserContext) { + PoolPtr pool; + getPool(string(PARSER_CONFIGS[3]), 0, 0, Lease::TYPE_NA, pool); + ASSERT_TRUE(pool); + ConstElementPtr ctx = pool->getContext(); + ASSERT_TRUE(ctx); + + // The context should be of type map and contain 4 parameters. + EXPECT_EQ(Element::map, ctx->getType()); + EXPECT_EQ(4, ctx->size()); + ConstElementPtr ratio = ctx->get("lw4over6-sharing-ratio"); + ConstElementPtr v4pool = ctx->get("lw4over6-v4-pool"); + ConstElementPtr exclude = ctx->get("lw4over6-sysports-exclude"); + ConstElementPtr v6len = ctx->get("lw4over6-bind-prefix-len"); + + ASSERT_TRUE(ratio); + ASSERT_EQ(Element::integer, ratio->getType()); + int64_t int_value; + EXPECT_NO_THROW(ratio->getValue(int_value)); + EXPECT_EQ(64L, int_value); + + ASSERT_TRUE(v4pool); + ASSERT_EQ(Element::string, v4pool->getType()); + EXPECT_EQ("192.0.2.0/24", v4pool->stringValue()); + + ASSERT_TRUE(exclude); + bool bool_value; + ASSERT_EQ(Element::boolean, exclude->getType()); + EXPECT_NO_THROW(exclude->getValue(bool_value)); + EXPECT_EQ(true, bool_value); + + ASSERT_TRUE(v6len); + ASSERT_EQ(Element::integer, v6len->getType()); + EXPECT_NO_THROW(v6len->getValue(int_value)); + EXPECT_EQ(56L, int_value); +} + // Test verifies that regular configuration does not provide any user context // in the address pool. TEST_F(Dhcp6ParserTest, pdPoolUserContextMissing) { PoolPtr pool; - getPool(string(PARSER_CONFIGS[3]), 0, 0, Lease::TYPE_PD, pool); + getPool(string(PARSER_CONFIGS[4]), 0, 0, Lease::TYPE_PD, pool); ASSERT_TRUE(pool); EXPECT_FALSE(pool->getContext()); } @@ -4879,7 +4942,7 @@ TEST_F(Dhcp6ParserTest, pdPoolUserContextMissing) { // address pool. TEST_F(Dhcp6ParserTest, pdPoolUserContextEmpty) { PoolPtr pool; - getPool(string(PARSER_CONFIGS[4]), 0, 0, Lease::TYPE_PD, pool); + getPool(string(PARSER_CONFIGS[5]), 0, 0, Lease::TYPE_PD, pool); ASSERT_TRUE(pool); ConstElementPtr ctx = pool->getContext(); ASSERT_TRUE(ctx); @@ -4893,7 +4956,7 @@ TEST_F(Dhcp6ParserTest, pdPoolUserContextEmpty) { // in the address pool. TEST_F(Dhcp6ParserTest, pdPoolUserContextlw4over6) { PoolPtr pool; - getPool(string(PARSER_CONFIGS[5]), 0, 0, Lease::TYPE_PD, pool); + getPool(string(PARSER_CONFIGS[6]), 0, 0, Lease::TYPE_PD, pool); ASSERT_TRUE(pool); ConstElementPtr ctx = pool->getContext(); ASSERT_TRUE(ctx); From 6871fc5b14320ff1e514037a0cc63678b47de9e9 Mon Sep 17 00:00:00 2001 From: Francis Dupont Date: Thu, 12 Jan 2017 11:37:49 +0100 Subject: [PATCH 06/10] [5097] Added unit tests for bad pools (cf #3956) --- src/bin/dhcp4/tests/config_parser_unittest.cc | 109 +++++++++++++++++ src/bin/dhcp6/tests/config_parser_unittest.cc | 115 ++++++++++++++++++ 2 files changed, 224 insertions(+) diff --git a/src/bin/dhcp4/tests/config_parser_unittest.cc b/src/bin/dhcp4/tests/config_parser_unittest.cc index ffb5548f4e..c59efc6d09 100644 --- a/src/bin/dhcp4/tests/config_parser_unittest.cc +++ b/src/bin/dhcp4/tests/config_parser_unittest.cc @@ -1466,6 +1466,115 @@ TEST_F(Dhcp4ParserTest, poolPrefixLen) { EXPECT_EQ(4000, subnet->getValid()); } +// Goal of this test is to verify if invalid pool definitions +// return a location in the error message. +TEST_F(Dhcp4ParserTest, badPools) { + + // not a prefix + string config_bogus1 = "{ " + genIfaceConfig() + "," + + "\"rebind-timer\": 2000, " + "\"renew-timer\": 1000, " + "\"subnet4\": [ { " + " \"pools\": [ { \"pool\": \"foo/28\" } ]," + " \"subnet\": \"192.0.2.0/24\" } ]," + "\"valid-lifetime\": 4000 }"; + + // not a length + string config_bogus2 = "{ " + genIfaceConfig() + "," + + "\"rebind-timer\": 2000, " + "\"renew-timer\": 1000, " + "\"subnet4\": [ { " + " \"pools\": [ { \"pool\": \"192.0.2.128/foo\" } ]," + " \"subnet\": \"192.0.2.0/24\" } ]," + "\"valid-lifetime\": 4000 }"; + + // invalid prefix length + string config_bogus3 = "{ " + genIfaceConfig() + "," + + "\"rebind-timer\": 2000, " + "\"renew-timer\": 1000, " + "\"subnet4\": [ { " + " \"pools\": [ { \"pool\": \"192.0.2.128/100\" } ]," + " \"subnet\": \"192.0.2.0/24\" } ]," + "\"valid-lifetime\": 4000 }"; + + // not a prefix nor a min-max + string config_bogus4 = "{ " + genIfaceConfig() + "," + + "\"rebind-timer\": 2000, " + "\"renew-timer\": 1000, " + "\"subnet4\": [ { " + " \"pools\": [ { \"pool\": \"foo\" } ]," + " \"subnet\": \"192.0.2.0/24\" } ]," + "\"valid-lifetime\": 4000 }"; + + // not an address + string config_bogus5 = "{ " + genIfaceConfig() + "," + + "\"rebind-timer\": 2000, " + "\"renew-timer\": 1000, " + "\"subnet4\": [ { " + " \"pools\": [ { \"pool\": \"foo - bar\" } ]," + " \"subnet\": \"192.0.2.0/24\" } ]," + "\"valid-lifetime\": 4000 }"; + + // min > max + string config_bogus6 = "{ " + genIfaceConfig() + "," + + "\"rebind-timer\": 2000, " + "\"renew-timer\": 1000, " + "\"subnet4\": [ { " + " \"pools\": [ { \"pool\": \"192.0.2.200 - 192.0.2.100\" } ]," + " \"subnet\": \"192.0.2.0/24\" } ]," + "\"valid-lifetime\": 4000 }"; + + ConstElementPtr json1; + ASSERT_NO_THROW(json1 = parseDHCP4(config_bogus1)); + ConstElementPtr json2; + ASSERT_NO_THROW(json2 = parseDHCP4(config_bogus2)); + ConstElementPtr json3; + ASSERT_NO_THROW(json3 = parseDHCP4(config_bogus3)); + ConstElementPtr json4; + ASSERT_NO_THROW(json4 = parseDHCP4(config_bogus4)); + ConstElementPtr json5; + ASSERT_NO_THROW(json5 = parseDHCP4(config_bogus5)); + ConstElementPtr json6; + ASSERT_NO_THROW(json6 = parseDHCP4(config_bogus6)); + + ConstElementPtr status; + EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json1)); + + // check if returned status is always a failure + checkResult(status, 1); + EXPECT_TRUE(errorContainsPosition(status, "")); + + CfgMgr::instance().clear(); + + EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json2)); + checkResult(status, 1); + EXPECT_TRUE(errorContainsPosition(status, "")); + + CfgMgr::instance().clear(); + + EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json3)); + checkResult(status, 1); + EXPECT_TRUE(errorContainsPosition(status, "")); + + CfgMgr::instance().clear(); + + EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json4)); + checkResult(status, 1); + EXPECT_TRUE(errorContainsPosition(status, "")); + + CfgMgr::instance().clear(); + + EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json5)); + checkResult(status, 1); + EXPECT_TRUE(errorContainsPosition(status, "")); + + CfgMgr::instance().clear(); + + EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json6)); + checkResult(status, 1); + EXPECT_TRUE(errorContainsPosition(status, "")); +} + // The goal of this test is to check whether an option definition // that defines an option carrying an IPv4 address can be created. TEST_F(Dhcp4ParserTest, optionDefIpv4Address) { diff --git a/src/bin/dhcp6/tests/config_parser_unittest.cc b/src/bin/dhcp6/tests/config_parser_unittest.cc index 7876a854cb..7f121d8ff8 100644 --- a/src/bin/dhcp6/tests/config_parser_unittest.cc +++ b/src/bin/dhcp6/tests/config_parser_unittest.cc @@ -1512,6 +1512,121 @@ TEST_F(Dhcp6ParserTest, poolPrefixLen) { EXPECT_EQ(4000, subnet->getValid()); } +// Goal of this test is to verify if invalid pool definitions +// return a location in the error message. +TEST_F(Dhcp6ParserTest, badPools) { + + // not a prefix + string config_bogus1 = "{ " + genIfaceConfig() + "," + "\"preferred-lifetime\": 3000," + "\"rebind-timer\": 2000, " + "\"renew-timer\": 1000, " + "\"subnet6\": [ { " + " \"pools\": [ { \"pool\": \"foo/80\" } ]," + " \"subnet\": \"2001:db8:1::/64\" } ]," + "\"valid-lifetime\": 4000 }"; + + // not a length + string config_bogus2 = "{ " + genIfaceConfig() + "," + "\"preferred-lifetime\": 3000," + "\"rebind-timer\": 2000, " + "\"renew-timer\": 1000, " + "\"subnet6\": [ { " + " \"pools\": [ { \"pool\": \"2001:db8:1::/foo\" } ]," + " \"subnet\": \"2001:db8:1::/64\" } ]," + "\"valid-lifetime\": 4000 }"; + + // invalid prefix length + string config_bogus3 = "{ " + genIfaceConfig() + "," + "\"preferred-lifetime\": 3000," + "\"rebind-timer\": 2000, " + "\"renew-timer\": 1000, " + "\"subnet6\": [ { " + " \"pools\": [ { \"pool\": \"2001:db8:1::/200\" } ]," + " \"subnet\": \"2001:db8:1::/64\" } ]," + "\"valid-lifetime\": 4000 }"; + + // not a prefix nor a min-max + string config_bogus4 = "{ " + genIfaceConfig() + "," + "\"preferred-lifetime\": 3000," + "\"rebind-timer\": 2000, " + "\"renew-timer\": 1000, " + "\"subnet6\": [ { " + " \"pools\": [ { \"pool\": \"foo\" } ]," + " \"subnet\": \"2001:db8:1::/64\" } ]," + "\"valid-lifetime\": 4000 }"; + + // not an address + string config_bogus5 = "{ " + genIfaceConfig() + "," + "\"preferred-lifetime\": 3000," + "\"rebind-timer\": 2000, " + "\"renew-timer\": 1000, " + "\"subnet6\": [ { " + " \"pools\": [ { \"pool\": \"foo - bar\" } ]," + " \"subnet\": \"2001:db8:1::/64\" } ]," + "\"valid-lifetime\": 4000 }"; + + // min > max + string config_bogus6 = "{ " + genIfaceConfig() + "," + "\"preferred-lifetime\": 3000," + "\"rebind-timer\": 2000, " + "\"renew-timer\": 1000, " + "\"subnet6\": [ { " + " \"pools\": [ { \"pool\": \"2001:db8::ff:ffff - 2001:db8::\" } ]," + " \"subnet\": \"2001:db8:1::/64\" } ]," + "\"valid-lifetime\": 4000 }"; + + ConstElementPtr json1; + ASSERT_NO_THROW(json1 = parseDHCP6(config_bogus1)); + ConstElementPtr json2; + ASSERT_NO_THROW(json2 = parseDHCP6(config_bogus2)); + ConstElementPtr json3; + ASSERT_NO_THROW(json3 = parseDHCP6(config_bogus3)); + ConstElementPtr json4; + ASSERT_NO_THROW(json4 = parseDHCP6(config_bogus4)); + ConstElementPtr json5; + ASSERT_NO_THROW(json5 = parseDHCP6(config_bogus5)); + ConstElementPtr json6; + ASSERT_NO_THROW(json6 = parseDHCP6(config_bogus6)); + + ConstElementPtr status; + EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json1)); + + // check if returned status is always a failure + checkResult(status, 1); + EXPECT_TRUE(errorContainsPosition(status, "")); + + CfgMgr::instance().clear(); + + EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json2)); + checkResult(status, 1); + EXPECT_TRUE(errorContainsPosition(status, "")); + + CfgMgr::instance().clear(); + + EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json3)); + checkResult(status, 1); + EXPECT_TRUE(errorContainsPosition(status, "")); + + CfgMgr::instance().clear(); + + EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json4)); + checkResult(status, 1); + EXPECT_TRUE(errorContainsPosition(status, "")); + + CfgMgr::instance().clear(); + + EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json5)); + checkResult(status, 1); + EXPECT_TRUE(errorContainsPosition(status, "")); + + CfgMgr::instance().clear(); + + EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json6)); + checkResult(status, 1); + EXPECT_TRUE(errorContainsPosition(status, "")); +} + // Goal of this test is to verify the basic parsing of a prefix delegation // pool. It uses a single, valid pd pool. TEST_F(Dhcp6ParserTest, pdPoolBasics) { From 1af539811e1f72b05e19d047796ae42d96eac8d9 Mon Sep 17 00:00:00 2001 From: Francis Dupont Date: Thu, 12 Jan 2017 13:12:51 +0100 Subject: [PATCH 07/10] [5097] Added a check and unit tests against prefix length truncation --- src/bin/dhcp4/tests/config_parser_unittest.cc | 17 ++++++++++++++++ src/bin/dhcp6/tests/config_parser_unittest.cc | 20 ++++++++++++++++++- src/lib/dhcpsrv/parsers/dhcp_parsers.cc | 7 ++++++- 3 files changed, 42 insertions(+), 2 deletions(-) diff --git a/src/bin/dhcp4/tests/config_parser_unittest.cc b/src/bin/dhcp4/tests/config_parser_unittest.cc index c59efc6d09..9ba58a4b7b 100644 --- a/src/bin/dhcp4/tests/config_parser_unittest.cc +++ b/src/bin/dhcp4/tests/config_parser_unittest.cc @@ -1524,6 +1524,15 @@ TEST_F(Dhcp4ParserTest, badPools) { " \"subnet\": \"192.0.2.0/24\" } ]," "\"valid-lifetime\": 4000 }"; + // out of range prefix length (new check) + string config_bogus7 = "{ " + genIfaceConfig() + "," + + "\"rebind-timer\": 2000, " + "\"renew-timer\": 1000, " + "\"subnet4\": [ { " + " \"pools\": [ { \"pool\": \"192.0.2.128/1052\" } ]," + " \"subnet\": \"192.0.2.0/24\" } ]," + "\"valid-lifetime\": 4000 }"; + ConstElementPtr json1; ASSERT_NO_THROW(json1 = parseDHCP4(config_bogus1)); ConstElementPtr json2; @@ -1536,6 +1545,8 @@ TEST_F(Dhcp4ParserTest, badPools) { ASSERT_NO_THROW(json5 = parseDHCP4(config_bogus5)); ConstElementPtr json6; ASSERT_NO_THROW(json6 = parseDHCP4(config_bogus6)); + ConstElementPtr json7; + ASSERT_NO_THROW(json7 = parseDHCP4(config_bogus7)); ConstElementPtr status; EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json1)); @@ -1573,6 +1584,12 @@ TEST_F(Dhcp4ParserTest, badPools) { EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json6)); checkResult(status, 1); EXPECT_TRUE(errorContainsPosition(status, "")); + + CfgMgr::instance().clear(); + + EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json7)); + checkResult(status, 1); + EXPECT_TRUE(errorContainsPosition(status, "")); } // The goal of this test is to check whether an option definition diff --git a/src/bin/dhcp6/tests/config_parser_unittest.cc b/src/bin/dhcp6/tests/config_parser_unittest.cc index 7f121d8ff8..382fc07d8b 100644 --- a/src/bin/dhcp6/tests/config_parser_unittest.cc +++ b/src/bin/dhcp6/tests/config_parser_unittest.cc @@ -1572,7 +1572,17 @@ TEST_F(Dhcp6ParserTest, badPools) { "\"rebind-timer\": 2000, " "\"renew-timer\": 1000, " "\"subnet6\": [ { " - " \"pools\": [ { \"pool\": \"2001:db8::ff:ffff - 2001:db8::\" } ]," + " \"pools\": [ { \"pool\": \"2001:db8:1::ffff - 2001:db8:1::\" } ]," + " \"subnet\": \"2001:db8:1::/64\" } ]," + "\"valid-lifetime\": 4000 }"; + + // out of range prefix length (new check) + string config_bogus7 = "{ " + genIfaceConfig() + "," + "\"preferred-lifetime\": 3000," + "\"rebind-timer\": 2000, " + "\"renew-timer\": 1000, " + "\"subnet6\": [ { " + " \"pools\": [ { \"pool\": \"2001:db8:1::/1104\" } ]," " \"subnet\": \"2001:db8:1::/64\" } ]," "\"valid-lifetime\": 4000 }"; @@ -1588,6 +1598,8 @@ TEST_F(Dhcp6ParserTest, badPools) { ASSERT_NO_THROW(json5 = parseDHCP6(config_bogus5)); ConstElementPtr json6; ASSERT_NO_THROW(json6 = parseDHCP6(config_bogus6)); + ConstElementPtr json7; + ASSERT_NO_THROW(json7 = parseDHCP6(config_bogus7)); ConstElementPtr status; EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json1)); @@ -1625,6 +1637,12 @@ TEST_F(Dhcp6ParserTest, badPools) { EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json6)); checkResult(status, 1); EXPECT_TRUE(errorContainsPosition(status, "")); + + CfgMgr::instance().clear(); + + EXPECT_NO_THROW(status = configureDhcp6Server(srv_, json7)); + checkResult(status, 1); + EXPECT_TRUE(errorContainsPosition(status, "")); } // Goal of this test is to verify the basic parsing of a prefix delegation diff --git a/src/lib/dhcpsrv/parsers/dhcp_parsers.cc b/src/lib/dhcpsrv/parsers/dhcp_parsers.cc index 1e85b32548..8c2e09c034 100644 --- a/src/lib/dhcpsrv/parsers/dhcp_parsers.cc +++ b/src/lib/dhcpsrv/parsers/dhcp_parsers.cc @@ -900,7 +900,12 @@ PoolParser::parse(ConstElementPtr pool_structure, // No checks for values over 128. Range correctness will // be checked in Pool4 constructor. - len = boost::lexical_cast(prefix_len); + int val_len = boost::lexical_cast(prefix_len); + if ((val_len < std::numeric_limits::min()) || + (val_len > std::numeric_limits::max())) { + isc_throw(OutOfRange, ""); + } + len = static_cast(val_len); } catch (...) { isc_throw(DhcpConfigError, "Failed to parse pool " "definition: " << txt << " (" From c5d913c6384461ae413040f3f1cbd201b4674042 Mon Sep 17 00:00:00 2001 From: Francis Dupont Date: Wed, 18 Jan 2017 00:19:44 +0100 Subject: [PATCH 08/10] [5097] Addressed not unit test comments --- src/bin/dhcp4/json_config_parser.cc | 25 +++------ src/bin/dhcp6/json_config_parser.cc | 68 ++++++++----------------- src/lib/cc/simple_parser.h | 22 ++++++++ src/lib/dhcpsrv/parsers/dhcp_parsers.cc | 17 +++---- src/lib/dhcpsrv/parsers/dhcp_parsers.h | 36 +++---------- 5 files changed, 66 insertions(+), 102 deletions(-) diff --git a/src/bin/dhcp4/json_config_parser.cc b/src/bin/dhcp4/json_config_parser.cc index 9ed084bb91..cde03b72f0 100644 --- a/src/bin/dhcp4/json_config_parser.cc +++ b/src/bin/dhcp4/json_config_parser.cc @@ -54,14 +54,6 @@ namespace { /// /// It is useful for parsing Dhcp4/subnet4[X]/pool parameters. class Pool4Parser : public PoolParser { -public: - - /// @brief Constructor. - /// - /// @param pools storage container in which to store the parsed pool. - Pool4Parser(PoolStoragePtr pools) : PoolParser(pools) { - } - protected: /// @brief Creates a Pool4 object given a IPv4 prefix and the prefix length. /// @@ -89,22 +81,19 @@ protected: /// @brief Specialization of the pool list parser for DHCPv4 class Pools4ListParser : PoolsListParser { public: - /// @brief Constructor. - /// - /// @param pools storage container in which to store the parsed pool. - Pools4ListParser(PoolStoragePtr pools) : PoolsListParser(pools) { - } /// @brief parses the actual structure /// /// This method parses the actual list of pools. /// + /// @param pools storage container in which to store the parsed pool. /// @param pools_list a list of pool structures /// @throw isc::dhcp::DhcpConfigError when pool parsing fails - void parse(isc::data::ConstElementPtr pools_list) { + void parse(PoolStoragePtr pools, + isc::data::ConstElementPtr pools_list) { BOOST_FOREACH(ConstElementPtr pool, pools_list->listValue()) { - Pool4Parser parser(pools_); - parser.parse(pool, AF_INET); + Pool4Parser parser; + parser.parse(pools, pool, AF_INET); } } }; @@ -133,8 +122,8 @@ public: /// Parse Pools first. ConstElementPtr pools = subnet->get("pools"); if (pools) { - Pools4ListParser parser(pools_); - parser.parse(pools); + Pools4ListParser parser; + parser.parse(pools_, pools); } SubnetConfigParser::build(subnet); diff --git a/src/bin/dhcp6/json_config_parser.cc b/src/bin/dhcp6/json_config_parser.cc index 247fdc34a4..fbc4e47c5f 100644 --- a/src/bin/dhcp6/json_config_parser.cc +++ b/src/bin/dhcp6/json_config_parser.cc @@ -71,14 +71,6 @@ typedef boost::shared_ptr Uint32ParserPtr; /// /// It is useful for parsing Dhcp6/subnet6[X]/pool parameters. class Pool6Parser : public PoolParser { -public: - - /// @brief Constructor. - /// - /// @param pools storage container in which to store the parsed pool. - Pool6Parser(PoolStoragePtr pools) : PoolParser(pools) { - } - protected: /// @brief Creates a Pool6 object given a IPv6 prefix and the prefix length. /// @@ -112,22 +104,19 @@ protected: /// @brief Specialization of the pool list parser for DHCPv6 class Pools6ListParser : PoolsListParser { public: - /// @brief Constructor. - /// - /// @param pools storage container in which to store the parsed pool. - Pools6ListParser(PoolStoragePtr pools) : PoolsListParser(pools) { - } /// @brief parses the actual structure /// /// This method parses the actual list of pools. /// + /// @param pools storage container in which to store the parsed pool. /// @param pools_list a list of pool structures /// @throw isc::dhcp::DhcpConfigError when pool parsing fails - void parse(isc::data::ConstElementPtr pools_list) { + void parse(PoolStoragePtr pools, + isc::data::ConstElementPtr pools_list) { BOOST_FOREACH(ConstElementPtr pool, pools_list->listValue()) { - Pool6Parser parser(pools_); - parser.parse(pool, AF_INET6); + Pool6Parser parser; + parser.parse(pools, pool, AF_INET6); } } }; @@ -154,9 +143,7 @@ public: /// @brief Constructor. /// - /// @param pools storage container in which to store the parsed pool. - PdPoolParser(PoolStoragePtr pools) - : pools_(pools), options_(new CfgOption()) { + PdPoolParser() : options_(new CfgOption()) { } /// @brief Builds a prefix delegation pool from the given configuration @@ -164,11 +151,13 @@ public: /// This function parses configuration entries and creates an instance /// of a dhcp::Pool6 configured for prefix delegation. /// + /// @param pools storage container in which to store the parsed pool. /// @param pd_pool_ pointer to an element that holds configuration entries /// that define a prefix delegation pool. /// /// @throw DhcpConfigError if configuration parsing fails. - void parse(ConstElementPtr pd_pool_) { + void parse(PoolStoragePtr pools, + ConstElementPtr pd_pool_) { std::string addr_str; std::string excluded_prefix_str = "::"; uint8_t prefix_len = 0; @@ -235,7 +224,7 @@ public: } // Add the local pool to the external storage ptr. - pools_->push_back(pool_); + pools->push_back(pool_); } private: @@ -261,23 +250,12 @@ private: /// @throw isc::data::TypeError when it is not an integer /// isc::dhcp::DhcpConfigError when it does not fit in an uint8_t uint8_t getUint8(const std::string& name, ConstElementPtr value) const { - int64_t val_int = value->intValue(); - if ((val_int < std::numeric_limits::min()) || - (val_int > std::numeric_limits::max())) { - isc_throw(isc::dhcp::DhcpConfigError, - "out of range value (" << val_int - << ") specified for parameter '" - << name << "' (" << value->getPosition() << ")"); - } - return (static_cast(val_int)); + return (extractInt(name, value)); } /// Pointer to the created pool object. isc::dhcp::Pool6Ptr pool_; - /// Pointer to storage to which the local pool is written upon commit. - isc::dhcp::PoolStoragePtr pools_; - /// A storage for pool specific option values. CfgOptionPtr options_; @@ -289,29 +267,25 @@ private: /// This parser iterates over a list of prefix delegation pool entries and /// creates pool instances for each one. If the parsing is successful, the /// collection of pools is committed to the provided storage. -class PdPoolListParser : public PoolsListParser { +class PdPoolsListParser : public PoolsListParser { public: - /// @brief Constructor. - /// - /// @param storage is the pool storage in which to store the parsed - /// pools in this list - PdPoolListParser(PoolStoragePtr pools) : PoolsListParser(pools) { - } /// @brief Parse configuration entries. /// /// This function parses configuration entries and creates instances /// of prefix delegation pools . /// + /// @param storage is the pool storage in which to store the parsed /// @param pd_pool_list pointer to an element that holds entries /// that define a prefix delegation pool. /// /// @throw DhcpConfigError if configuration parsing fails. - void parse(isc::data::ConstElementPtr pd_pool_list) { + void parse(PoolStoragePtr pools, + isc::data::ConstElementPtr pd_pool_list) { // Loop through the list of pd pools. BOOST_FOREACH(ConstElementPtr pd_pool, pd_pool_list->listValue()) { - PdPoolParser parser(pools_); - parser.parse(pd_pool); + PdPoolParser parser; + parser.parse(pools, pd_pool); } } }; @@ -341,13 +315,13 @@ public: /// Parse all pools first. ConstElementPtr pools = subnet->get("pools"); if (pools) { - Pools6ListParser parser(pools_); - parser.parse(pools); + Pools6ListParser parser; + parser.parse(pools_, pools); } ConstElementPtr pd_pools = subnet->get("pd-pools"); if (pd_pools) { - PdPoolListParser parser(pools_); - parser.parse(pd_pools); + PdPoolsListParser parser; + parser.parse(pools_, pd_pools); } SubnetConfigParser::build(subnet); diff --git a/src/lib/cc/simple_parser.h b/src/lib/cc/simple_parser.h index 82e9cd4267..cfcf82bc64 100644 --- a/src/lib/cc/simple_parser.h +++ b/src/lib/cc/simple_parser.h @@ -147,6 +147,28 @@ class SimpleParser { /// @return a boolean value of the parameter static bool getBoolean(isc::data::ConstElementPtr scope, const std::string& name); + + /// @brief Returns an integer value with range checking + /// + /// This template should be instantied in parsers when useful + /// + /// @tparam int_type the integer type e.g. uint32_t + /// @tparam out_of_range always @c isc::dhcp::DhcpConfigError + /// @param name name of the parameter for error report + /// @param value value of the parameter + /// @throw isc::data::TypeError when the value is not an integer + /// @throw out_of_range when the value does not fit in int_type + template int_type + extractInt(const std::string& name, ConstElementPtr value) const { + int64_t val_int = value->intValue(); + if ((val_int < std::numeric_limits::min()) || + (val_int > std::numeric_limits::max())) { + isc_throw(out_of_range, "out of range value (" << val_int + << ") specified for parameter '" << name + << "' (" << value->getPosition() << ")"); + } + return (static_cast(val_int)); + } }; }; diff --git a/src/lib/dhcpsrv/parsers/dhcp_parsers.cc b/src/lib/dhcpsrv/parsers/dhcp_parsers.cc index 8c2e09c034..e45c823bcf 100644 --- a/src/lib/dhcpsrv/parsers/dhcp_parsers.cc +++ b/src/lib/dhcpsrv/parsers/dhcp_parsers.cc @@ -853,14 +853,10 @@ RelayInfoParser::parse(const isc::dhcp::Subnet::RelayInfoPtr& cfg, } //****************************** PoolParser ******************************** -PoolParser::PoolParser(PoolStoragePtr pools) : pools_(pools) { -} - -PoolParser::~PoolParser() { -} void -PoolParser::parse(ConstElementPtr pool_structure, +PoolParser::parse(PoolStoragePtr pools, + ConstElementPtr pool_structure, const uint16_t address_family) { ConstElementPtr text_pool = pool_structure->get("pool"); @@ -899,10 +895,13 @@ PoolParser::parse(ConstElementPtr pool_structure, // digits (because there are extra characters left over). // No checks for values over 128. Range correctness will - // be checked in Pool4 constructor. + // be checked in Pool4 constructor, here we only check + // the representation fits in an uint8_t as this can't + // be done by a direct lexical cast as explained... int val_len = boost::lexical_cast(prefix_len); if ((val_len < std::numeric_limits::min()) || (val_len > std::numeric_limits::max())) { + // This exception will be handled 4 line later! isc_throw(OutOfRange, ""); } len = static_cast(val_len); @@ -914,7 +913,7 @@ PoolParser::parse(ConstElementPtr pool_structure, try { pool = poolMaker(addr, len); - pools_->push_back(pool); + pools->push_back(pool); } catch (const std::exception& ex) { isc_throw(DhcpConfigError, "Failed to create pool defined by: " << txt << " (" << text_pool->getPosition() << ")"); @@ -939,7 +938,7 @@ PoolParser::parse(ConstElementPtr pool_structure, try { pool = poolMaker(min, max); - pools_->push_back(pool); + pools->push_back(pool); } catch (const std::exception& ex) { isc_throw(DhcpConfigError, "Failed to create pool defined by: " << txt << " (" << text_pool->getPosition() << ")"); diff --git a/src/lib/dhcpsrv/parsers/dhcp_parsers.h b/src/lib/dhcpsrv/parsers/dhcp_parsers.h index 2cfe6e625e..ace34fb07c 100644 --- a/src/lib/dhcpsrv/parsers/dhcp_parsers.h +++ b/src/lib/dhcpsrv/parsers/dhcp_parsers.h @@ -706,23 +706,21 @@ typedef boost::shared_ptr PoolStoragePtr; class PoolParser : public isc::data::SimpleParser { public: - /// @brief constructor. - /// - /// @param pools is the storage in which to store the parsed pool - PoolParser(PoolStoragePtr pools); - /// @brief destructor. - virtual ~PoolParser(); + virtual ~PoolParser() { + } /// @brief parses the actual structure /// /// This method parses the actual list of interfaces. /// No validation is done at this stage, everything is interpreted as /// interface name. + /// @param pools is the storage in which to store the parsed pool /// @param pool_structure a single entry on a list of pools /// @param address_family AF_INET (for DHCPv4) or AF_INET6 (for DHCPv6). /// @throw isc::dhcp::DhcpConfigError when pool parsing fails - virtual void parse(isc::data::ConstElementPtr pool_structure, + virtual void parse(PoolStoragePtr pools, + isc::data::ConstElementPtr pool_structure, const uint16_t address_family); protected: @@ -744,12 +742,6 @@ protected: virtual PoolPtr poolMaker(isc::asiolink::IOAddress &min, isc::asiolink::IOAddress &max, int32_t ptype = 0) = 0; - - /// @brief pointer to the actual Pools storage - /// - /// That is typically a storage somewhere in Subnet parser - /// (an upper level parser). - PoolStoragePtr pools_; }; /// @brief Parser for a list of pools @@ -760,12 +752,6 @@ protected: class PoolsListParser : public isc::data::SimpleParser { public: - /// @brief constructor. - /// - /// @param pools is the storage in which to store the parsed pools. - PoolsListParser(PoolStoragePtr pools) : pools_(pools) { - } - /// @brief destructor. virtual ~PoolsListParser() { } @@ -774,17 +760,11 @@ public: /// /// This method parses the actual list of pools. /// + /// @param pools is the storage in which to store the parsed pools. /// @param pools_list a list of pool structures /// @throw isc::dhcp::DhcpConfigError when pool parsing fails - virtual void parse(isc::data::ConstElementPtr pools_list) = 0; - -protected: - - /// @brief pointer to the actual Pools storage - /// - /// That is typically a storage somewhere in Subnet parser - /// (an upper level parser). - PoolStoragePtr pools_; + virtual void parse(PoolStoragePtr pools, + isc::data::ConstElementPtr pools_list) = 0; }; /// @brief parser for additional relay information From bdac736eb48c02fede0138631d937299a80079db Mon Sep 17 00:00:00 2001 From: Francis Dupont Date: Wed, 18 Jan 2017 01:08:28 +0100 Subject: [PATCH 09/10] [5097] Added an unit test and 2 examples --- doc/examples/kea6/hooks.json | 6 +++- doc/examples/kea6/multiple-options.json | 15 +++++++++ src/lib/cc/simple_parser.h | 2 +- src/lib/cc/tests/simple_parser_unittest.cc | 37 +++++++++++++++++++++- 4 files changed, 57 insertions(+), 3 deletions(-) diff --git a/doc/examples/kea6/hooks.json b/doc/examples/kea6/hooks.json index c4039b845d..23a403514f 100644 --- a/doc/examples/kea6/hooks.json +++ b/doc/examples/kea6/hooks.json @@ -24,7 +24,11 @@ # Define a single subnet. "subnet6": [ { - "pools": [ { "pool": "2001:db8:1::/80" } ], + "pools": [ + { + "pool": "2001:db8:1::/80", + "user-context": { "charging": true } + } ], "subnet": "2001:db8:1::/64", "interface": "ethX" } diff --git a/doc/examples/kea6/multiple-options.json b/doc/examples/kea6/multiple-options.json index b0d2cf1be3..45b249dd7e 100644 --- a/doc/examples/kea6/multiple-options.json +++ b/doc/examples/kea6/multiple-options.json @@ -39,6 +39,8 @@ # addresses from the other pool, or the clients obtaining # stateless configuration will be assigned subnet specific value # of option 12, i.e. 2001:db8:1:0:ff00::1. +# For DHCPv6 subnets can have prefix delegation pools too so +# a pd-pools with an option-data is defined too. "subnet6": [ { "option-data": [ @@ -65,6 +67,19 @@ "pool": "2001:db8:1::500 - 2001:db8:2::1000" } ], + "pd-pools": [ + { + "prefix": "2001:2b8:2::", + "prefix-len": 56, + "delegated-len": 64, + "option-data": [ + { + "code": 12, + "data": "3001:cafe::12:" + } + ] + } + ], "subnet": "2001:db8:1::/64", "interface": "ethX" } diff --git a/src/lib/cc/simple_parser.h b/src/lib/cc/simple_parser.h index cfcf82bc64..1a3a500f8d 100644 --- a/src/lib/cc/simple_parser.h +++ b/src/lib/cc/simple_parser.h @@ -11,7 +11,7 @@ #include #include #include -#include +#include namespace isc { namespace data { diff --git a/src/lib/cc/tests/simple_parser_unittest.cc b/src/lib/cc/tests/simple_parser_unittest.cc index d61f557d07..aa0ccdf81b 100644 --- a/src/lib/cc/tests/simple_parser_unittest.cc +++ b/src/lib/cc/tests/simple_parser_unittest.cc @@ -1,9 +1,10 @@ -// Copyright (C) 2016 Internet Systems Consortium, Inc. ("ISC") +// Copyright (C) 2016-2017 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 @@ -54,6 +55,18 @@ public: } }; +class SimpleParserClassTest : public SimpleParser { +public: + /// @brief Instantiation of extractInt for uint8_t + /// + /// @param name name of the parameter for error report + /// @param value value of the parameter + uint8_t extractUint8(const std::string& name, ConstElementPtr value) const { + return (extractInt(name, value)); + } + +}; + // This test checks if the parameters can be inherited from the global // scope to the subnet scope. TEST_F(SimpleParserTest, deriveParams) { @@ -130,3 +143,25 @@ TEST_F(SimpleParserTest, setListDefaults) { checkIntegerValue(third, "rebind-timer", 1800); checkIntegerValue(third, "renew-timer", 900); } + +// This test exercises the extractInt template +TEST_F(SimpleParserTest, extractInt) { + + SimpleParserClassTest parser; + + // extractInt checks if it is an integer + ConstElementPtr not_int(new StringElement("xyz")); + EXPECT_THROW(parser.extractUint8("foo", not_int), TypeError); + + // extractInt checks bounds + ConstElementPtr negative(new IntElement(-1)); + EXPECT_THROW(parser.extractUint8("foo", negative), isc::OutOfRange); + ConstElementPtr too_large(new IntElement(1024)); + EXPECT_THROW(parser.extractUint8("foo", too_large),isc::OutOfRange); + + // checks if extractInt can return the expected value + ConstElementPtr hundred(new IntElement(100)); + uint8_t val = 0; + EXPECT_NO_THROW(val = parser.extractUint8("foo", hundred)); + EXPECT_EQ(100, val); +} From dad9ff71101d63000a110acd0fc5338e107dc78b Mon Sep 17 00:00:00 2001 From: Francis Dupont Date: Wed, 18 Jan 2017 12:01:15 +0100 Subject: [PATCH 10/10] [5097] Added a new template for D2ClientConfigParser tools --- src/lib/cc/simple_parser.h | 32 ++++++++++++++- src/lib/cc/tests/simple_parser_unittest.cc | 46 ++++++++++++++++++++++ 2 files changed, 77 insertions(+), 1 deletion(-) diff --git a/src/lib/cc/simple_parser.h b/src/lib/cc/simple_parser.h index 1a3a500f8d..3747ea5da8 100644 --- a/src/lib/cc/simple_parser.h +++ b/src/lib/cc/simple_parser.h @@ -1,4 +1,4 @@ -// Copyright (C) 2016 Internet Systems Consortium, Inc. ("ISC") +// Copyright (C) 2016-2017 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 @@ -156,6 +156,7 @@ class SimpleParser { /// @tparam out_of_range always @c isc::dhcp::DhcpConfigError /// @param name name of the parameter for error report /// @param value value of the parameter + /// @return a value of int_type /// @throw isc::data::TypeError when the value is not an integer /// @throw out_of_range when the value does not fit in int_type template int_type @@ -169,6 +170,35 @@ class SimpleParser { } return (static_cast(val_int)); } + + /// @brief Returns a converted value + /// + /// This template should be instantied in parsers when useful + /// + /// @tparam target_type the type of the result + /// @tparam convert the conversion function std::string -> target_type + /// @tparam exception_type always @c isc::dhcp::DhcpConfigError + /// @param name name of the parameter for error report + /// @param type_name name of target_type for error report + /// @param value value of the parameter + /// @return a converted value of target_type + /// @throw isc::data::TypeError when the value is not an integer + /// @throw exception_type when the value cannot be converted + template target_type + extractConvert(const std::string& name, + const std::string& type_name, + ConstElementPtr value) const { + std::string str = value->stringValue(); + try { + return (convert(str)); + } catch (const std::exception&) { + isc_throw(exception_type, "invalid " << type_name << " (" << str + << ") specified for parameter '" << name + << "' (" << value->getPosition() << ")"); + } + } }; }; diff --git a/src/lib/cc/tests/simple_parser_unittest.cc b/src/lib/cc/tests/simple_parser_unittest.cc index aa0ccdf81b..163d19210c 100644 --- a/src/lib/cc/tests/simple_parser_unittest.cc +++ b/src/lib/cc/tests/simple_parser_unittest.cc @@ -61,10 +61,35 @@ public: /// /// @param name name of the parameter for error report /// @param value value of the parameter + /// @return an uint8_t value uint8_t extractUint8(const std::string& name, ConstElementPtr value) const { return (extractInt(name, value)); } + /// @brief Instantiation of extractConvert + /// + /// @param name name of the parameter for error report + /// @param value value of the parameter + /// @return a bool value + bool extractBool(const std::string& name, ConstElementPtr value) const { + return (extractConvert + (name, "boolean", value)); + } + + /// @brief Convert to boolean + /// + /// @param str the string "false" or "true" + /// @return false for "false" and true for "true" + /// @thrown isc::OutOfRange if not "false" or "true' + static bool toBool(const std::string& str) { + if (str == "false") { + return (false); + } else if (str == "true") { + return (true); + } else { + isc_throw(TypeError, "not a boolean: " << str); + } + } }; // This test checks if the parameters can be inherited from the global @@ -165,3 +190,24 @@ TEST_F(SimpleParserTest, extractInt) { EXPECT_NO_THROW(val = parser.extractUint8("foo", hundred)); EXPECT_EQ(100, val); } + +// This test exercises the extractConvert template +TEST_F(SimpleParserTest, extractConvert) { + + SimpleParserClassTest parser; + + // extractConvert checks if it is a string + ConstElementPtr not_bool(new IntElement(1)); + EXPECT_THROW(parser.extractBool("foo", not_bool), TypeError); + + // checks if extractConvert can return the expected value + ConstElementPtr a_bool(new StringElement("false")); + bool val = true; + EXPECT_NO_THROW(val = parser.extractBool("foo", a_bool)); + EXPECT_FALSE(val); + + // extractConvert checks convertion + ConstElementPtr bad_bool(new StringElement("foo")); + EXPECT_THROW(parser.extractBool("bar", bad_bool), isc::BadValue); +} +