mirror of
https://gitlab.isc.org/isc-projects/kea
synced 2025-09-01 14:35:29 +00:00
[5305] v4 shared network parser now uses SimpleParser approach.
This commit is contained in:
@@ -24,38 +24,32 @@ namespace dhcp {
|
|||||||
SharedNetwork4Ptr
|
SharedNetwork4Ptr
|
||||||
SharedNetwork4Parser::parse(const data::ConstElementPtr& shared_network_data) {
|
SharedNetwork4Parser::parse(const data::ConstElementPtr& shared_network_data) {
|
||||||
SharedNetwork4Ptr shared_network;
|
SharedNetwork4Ptr shared_network;
|
||||||
std::string name;
|
|
||||||
try {
|
try {
|
||||||
// Shared network is a map.
|
|
||||||
const auto& element = shared_network_data->mapValue();
|
|
||||||
|
|
||||||
// Make sure that the network name has been specified. The name is required
|
// Make sure that the network name has been specified. The name is required
|
||||||
// to create a SharedNetwork4 object.
|
// to create a SharedNetwork4 object.
|
||||||
const auto& name_it = element.find("name");
|
std::string name = getString(shared_network_data, "name");
|
||||||
if (name_it == element.cend()) {
|
shared_network.reset(new SharedNetwork4(name));
|
||||||
isc_throw(DhcpConfigError, "parameter \"name\" must be specified for"
|
|
||||||
" a shared network");
|
|
||||||
|
|
||||||
|
// interface is an optional parameter
|
||||||
|
if (shared_network_data->contains("interface")) {
|
||||||
|
shared_network->setIface(getString(shared_network_data, "interface"));
|
||||||
}
|
}
|
||||||
shared_network.reset(new SharedNetwork4(name_it->second->stringValue()));
|
|
||||||
|
|
||||||
// Iterate over all parameters within the map and assign them to the
|
if (shared_network_data->contains("option-data")) {
|
||||||
// shared network.
|
auto json = shared_network_data->get("option-data");
|
||||||
for (auto param = element.cbegin(); param != element.cend(); ++param) {
|
|
||||||
if (param->first == "interface") {
|
|
||||||
shared_network->setIface(param->second->stringValue());
|
|
||||||
|
|
||||||
} else if (param->first == "option-data") {
|
|
||||||
// Create parser instance for option-data.
|
// Create parser instance for option-data.
|
||||||
CfgOptionPtr cfg_option = shared_network->getCfgOption();
|
CfgOptionPtr cfg_option = shared_network->getCfgOption();
|
||||||
OptionDataListParser parser(AF_INET);
|
OptionDataListParser parser(AF_INET);
|
||||||
parser.parse(cfg_option, param->second);
|
parser.parse(cfg_option, json);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (shared_network_data->contains("subnet4")) {
|
||||||
|
auto json = shared_network_data->get("subnet4");
|
||||||
|
|
||||||
} else if (param->first == "subnet4") {
|
|
||||||
// Create parser instance of subnet4.
|
// Create parser instance of subnet4.
|
||||||
Subnets4ListConfigParser parser;
|
Subnets4ListConfigParser parser;
|
||||||
Subnet4Collection subnets;
|
Subnet4Collection subnets;
|
||||||
parser.parse(subnets, param->second);
|
parser.parse(subnets, json);
|
||||||
|
|
||||||
// Add all returned subnets into shared network.
|
// Add all returned subnets into shared network.
|
||||||
for (auto subnet = subnets.cbegin(); subnet != subnets.cend();
|
for (auto subnet = subnets.cbegin(); subnet != subnets.cend();
|
||||||
@@ -63,8 +57,6 @@ SharedNetwork4Parser::parse(const data::ConstElementPtr& shared_network_data) {
|
|||||||
shared_network->add(*subnet);
|
shared_network->add(*subnet);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
} catch (const std::exception& ex) {
|
} catch (const std::exception& ex) {
|
||||||
isc_throw(DhcpConfigError, ex.what() << " ("
|
isc_throw(DhcpConfigError, ex.what() << " ("
|
||||||
<< shared_network_data->getPosition() << ")");
|
<< shared_network_data->getPosition() << ")");
|
||||||
|
@@ -17,7 +17,7 @@ namespace isc {
|
|||||||
namespace dhcp {
|
namespace dhcp {
|
||||||
|
|
||||||
/// @brief Implements parser for IPv4 shared networks.
|
/// @brief Implements parser for IPv4 shared networks.
|
||||||
class SharedNetwork4Parser {
|
class SharedNetwork4Parser : isc::data::SimpleParser {
|
||||||
public:
|
public:
|
||||||
|
|
||||||
/// @brief Parses shared configuration information for IPv4 shared network.
|
/// @brief Parses shared configuration information for IPv4 shared network.
|
||||||
@@ -32,7 +32,7 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
/// @brief Implements parser for IPv6 shared networks.
|
/// @brief Implements parser for IPv6 shared networks.
|
||||||
class SharedNetwork6Parser {
|
class SharedNetwork6Parser : isc::data::SimpleParser {
|
||||||
public:
|
public:
|
||||||
|
|
||||||
/// @brief Parses shared configuration information for IPv6 shared network.
|
/// @brief Parses shared configuration information for IPv6 shared network.
|
||||||
|
Reference in New Issue
Block a user