From: Marcin Siodelski Date: Wed, 5 Oct 2016 18:56:42 +0000 (+0200) Subject: [5022] Options can only be specified for DHCPv6 pools. X-Git-Tag: trac4631a_base~3^2~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b10ec64987878ff5599fc6fcec9bb095b05cc506;p=thirdparty%2Fkea.git [5022] Options can only be specified for DHCPv6 pools. --- diff --git a/src/bin/dhcp4/json_config_parser.cc b/src/bin/dhcp4/json_config_parser.cc index 02a5bbca16..52b554972b 100644 --- a/src/bin/dhcp4/json_config_parser.cc +++ b/src/bin/dhcp4/json_config_parser.cc @@ -32,6 +32,7 @@ #include #include +#include #include #include @@ -61,7 +62,7 @@ public: /// @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) { + :PoolParser(param_name, pools, AF_INET) { } protected: diff --git a/src/bin/dhcp6/json_config_parser.cc b/src/bin/dhcp6/json_config_parser.cc index 9939de3b6f..2f30470326 100644 --- a/src/bin/dhcp6/json_config_parser.cc +++ b/src/bin/dhcp6/json_config_parser.cc @@ -43,6 +43,7 @@ #include #include #include +#include #include #include @@ -78,7 +79,7 @@ public: /// @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) { + :PoolParser(param_name, pools, AF_INET6) { } protected: diff --git a/src/lib/dhcpsrv/parsers/dhcp_parsers.cc b/src/lib/dhcpsrv/parsers/dhcp_parsers.cc index efd7e23e72..b96416cf4b 100644 --- a/src/lib/dhcpsrv/parsers/dhcp_parsers.cc +++ b/src/lib/dhcpsrv/parsers/dhcp_parsers.cc @@ -1039,8 +1039,10 @@ void PoolsListParser::commit() { } //****************************** PoolParser ******************************** -PoolParser::PoolParser(const std::string&, PoolStoragePtr pools) - :pools_(pools), options_(new CfgOption()) { +PoolParser::PoolParser(const std::string&, PoolStoragePtr pools, + const uint16_t address_family) + :pools_(pools), options_(new CfgOption()), + address_family_(address_family) { if (!pools_) { isc_throw(isc::dhcp::DhcpConfigError, "parser logic error: " @@ -1124,9 +1126,15 @@ PoolParser::build(ConstElementPtr pool_structure) { ConstElementPtr option_data = pool_structure->get("option-data"); if (option_data) { try { + // Currently we don't support specifying options for the DHCPv4 server. + if (address_family_ == AF_INET) { + isc_throw(DhcpConfigError, "option-data is not supported for DHCPv4" + " address pools"); + } + OptionDataListParserPtr option_parser(new OptionDataListParser("option-data", options_, - AF_INET6)); + address_family_)); option_parser->build(option_data); option_parser->commit(); options_->copyTo(*pool->getCfgOption());; diff --git a/src/lib/dhcpsrv/parsers/dhcp_parsers.h b/src/lib/dhcpsrv/parsers/dhcp_parsers.h index 4092ccb97f..67f62074c1 100644 --- a/src/lib/dhcpsrv/parsers/dhcp_parsers.h +++ b/src/lib/dhcpsrv/parsers/dhcp_parsers.h @@ -835,8 +835,10 @@ public: /// 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); + PoolParser(const std::string& dummy, PoolStoragePtr pools, + const uint16_t address_family); /// @brief parses the actual structure /// @@ -882,6 +884,9 @@ protected: /// 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