2
0
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:
Tomek Mrugalski
2017-09-07 16:34:25 +02:00
parent a92d050042
commit e702bd6d52
2 changed files with 24 additions and 32 deletions

View File

@@ -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() << ")");

View File

@@ -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.