mirror of
https://gitlab.isc.org/isc-projects/kea
synced 2025-09-02 15:05:16 +00:00
[4105] config parser now uses getOptionalParam() methods.
This commit is contained in:
@@ -312,17 +312,15 @@ protected:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Try 4o6 specific parameter: 4o6-interface
|
// Try 4o6 specific parameter: 4o6-interface
|
||||||
try {
|
string iface4o6 = string_values_->getOptionalParam("4o6-interface", "");
|
||||||
string iface4o6 = string_values_->getParam("4o6-interface");
|
if (!iface4o6.empty()) {
|
||||||
subnet4->get4o6().setIface4o6(iface4o6);
|
subnet4->get4o6().setIface4o6(iface4o6);
|
||||||
subnet4->get4o6().enabled(true);
|
subnet4->get4o6().enabled(true);
|
||||||
} catch (const DhcpConfigError&) {
|
|
||||||
// Don't care. 4o6-subnet is optional.
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Try 4o6 specific parameter: 4o6-subnet
|
// Try 4o6 specific parameter: 4o6-subnet
|
||||||
try {
|
string subnet4o6 = string_values_->getOptionalParam("4o6-subnet", "");
|
||||||
string subnet4o6 = string_values_->getParam("4o6-subnet");
|
if (!subnet4o6.empty()) {
|
||||||
size_t slash = subnet4o6.find("/");
|
size_t slash = subnet4o6.find("/");
|
||||||
if (slash == std::string::npos) {
|
if (slash == std::string::npos) {
|
||||||
isc_throw(DhcpConfigError, "Missing / in the 4o6-subnet parameter:"
|
isc_throw(DhcpConfigError, "Missing / in the 4o6-subnet parameter:"
|
||||||
@@ -340,19 +338,15 @@ protected:
|
|||||||
}
|
}
|
||||||
subnet4->get4o6().setSubnet4o6(IOAddress(prefix), len);
|
subnet4->get4o6().setSubnet4o6(IOAddress(prefix), len);
|
||||||
subnet4->get4o6().enabled(true);
|
subnet4->get4o6().enabled(true);
|
||||||
} catch (const DhcpConfigError&) {
|
|
||||||
// Don't care. 4o6-subnet is optional.
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Try 4o6 specific paramter: 4o6-interface-id
|
// Try 4o6 specific paramter: 4o6-interface-id
|
||||||
try {
|
std::string ifaceid = string_values_->getOptionalParam("4o6-interface-id", "");
|
||||||
std::string ifaceid = string_values_->getParam("4o6-interface-id");
|
if (!ifaceid.empty()) {
|
||||||
OptionBuffer tmp(ifaceid.begin(), ifaceid.end());
|
OptionBuffer tmp(ifaceid.begin(), ifaceid.end());
|
||||||
OptionPtr opt(new Option(Option::V6, D6O_INTERFACE_ID, tmp));
|
OptionPtr opt(new Option(Option::V6, D6O_INTERFACE_ID, tmp));
|
||||||
subnet4->get4o6().setInterfaceId(opt);
|
subnet4->get4o6().setInterfaceId(opt);
|
||||||
subnet4->get4o6().enabled(true);
|
subnet4->get4o6().enabled(true);
|
||||||
} catch (const DhcpConfigError&) {
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Try setting up client class (if specified)
|
// Try setting up client class (if specified)
|
||||||
|
@@ -3850,6 +3850,63 @@ TEST_F(Dhcp4ParserTest, 4o6subnet) {
|
|||||||
EXPECT_EQ(45, dhcp4o6.getSubnet4o6().second);
|
EXPECT_EQ(45, dhcp4o6.getSubnet4o6().second);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Checks if the DHCPv4 is able to parse the configuration with 4o6 subnet
|
||||||
|
// defined.
|
||||||
|
TEST_F(Dhcp4ParserTest, 4o6subnetBogus) {
|
||||||
|
|
||||||
|
ConstElementPtr status;
|
||||||
|
|
||||||
|
// Just a plain v4 config (no 4o6 parameters)
|
||||||
|
string config[] = {
|
||||||
|
// Bogus configuration 1: missing / in subnet
|
||||||
|
"{ " + genIfaceConfig() + "," +
|
||||||
|
"\"rebind-timer\": 2000, "
|
||||||
|
"\"renew-timer\": 1000, "
|
||||||
|
"\"subnet4\": [ { "
|
||||||
|
" \"pools\": [ { \"pool\": \"192.0.2.1 - 192.0.2.100\" } ],"
|
||||||
|
" \"subnet\": \"192.0.2.0/24\","
|
||||||
|
" \"4o6-subnet\": \"2001:db8::123\" } ],"
|
||||||
|
"\"valid-lifetime\": 4000 }",
|
||||||
|
|
||||||
|
// Bogus configuration 2: incorrect address
|
||||||
|
"{ " + genIfaceConfig() + "," +
|
||||||
|
"\"rebind-timer\": 2000, "
|
||||||
|
"\"renew-timer\": 1000, "
|
||||||
|
"\"subnet4\": [ { "
|
||||||
|
" \"pools\": [ { \"pool\": \"192.0.2.1 - 192.0.2.100\" } ],"
|
||||||
|
" \"subnet\": \"192.0.2.0/24\","
|
||||||
|
" \"4o6-subnet\": \"2001:db8:bogus/45\" } ],"
|
||||||
|
"\"valid-lifetime\": 4000 }",
|
||||||
|
|
||||||
|
// Bogus configuration 3: incorrect prefix lenght
|
||||||
|
"{ " + genIfaceConfig() + "," +
|
||||||
|
"\"rebind-timer\": 2000, "
|
||||||
|
"\"renew-timer\": 1000, "
|
||||||
|
"\"subnet4\": [ { "
|
||||||
|
" \"pools\": [ { \"pool\": \"192.0.2.1 - 192.0.2.100\" } ],"
|
||||||
|
" \"subnet\": \"192.0.2.0/24\","
|
||||||
|
" \"4o6-subnet\": \"2001:db8::123/200\" } ],"
|
||||||
|
"\"valid-lifetime\": 4000 }"
|
||||||
|
};
|
||||||
|
|
||||||
|
ElementPtr json1 = Element::fromJSON(config[0]);
|
||||||
|
ElementPtr json2 = Element::fromJSON(config[0]);
|
||||||
|
ElementPtr json3 = Element::fromJSON(config[0]);
|
||||||
|
|
||||||
|
// Check that the first config is rejected.
|
||||||
|
EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json1));
|
||||||
|
checkResult(status, 1);
|
||||||
|
|
||||||
|
// Check that the second config is rejected.
|
||||||
|
EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json2));
|
||||||
|
checkResult(status, 1);
|
||||||
|
|
||||||
|
// Check that the third config is rejected.
|
||||||
|
EXPECT_NO_THROW(status = configureDhcp4Server(*srv_, json3));
|
||||||
|
checkResult(status, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Checks if the DHCPv4 is able to parse the configuration with 4o6 network
|
// Checks if the DHCPv4 is able to parse the configuration with 4o6 network
|
||||||
// interface defined.
|
// interface defined.
|
||||||
TEST_F(Dhcp4ParserTest, 4o6iface) {
|
TEST_F(Dhcp4ParserTest, 4o6iface) {
|
||||||
|
Reference in New Issue
Block a user