Commit b10ec649 authored by Marcin Siodelski's avatar Marcin Siodelski

[5022] Options can only be specified for DHCPv6 pools.

parent 0a602468
......@@ -32,6 +32,7 @@
#include <limits>
#include <iostream>
#include <netinet/in.h>
#include <vector>
#include <map>
......@@ -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:
......
......@@ -43,6 +43,7 @@
#include <iostream>
#include <limits>
#include <map>
#include <netinet/in.h>
#include <vector>
#include <stdint.h>
......@@ -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:
......
......@@ -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());;
......
......@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment