mirror of
https://gitlab.isc.org/isc-projects/kea
synced 2025-09-05 00:15:17 +00:00
[#35,!517] Added DDDNS parameters to networks,subnets, and their parsers
src/lib/dhcpsrv/network.* Network - added DDNS parameters: Optional members, getters, setters Network::toElement() - added DDNS parameters src/lib/dhcpsrv/parsers/base_network_parser.* BaseNetworkParser::parseDdnsParams() - new method to parse DDNS parameters BaseNetworkParser::parseLifetime() - fixed unitialized variables warning src/lib/dhcpsrv/parsers/dhcp_parsers.cc Subnet4ConfigParser::initSubnet() Subnet6ConfigParser::initSubnet() - added call to parseDdnsParms(). src/lib/dhcpsrv/parsers/shared_network_parser.cc SharedNetwork4Parser::parse() SharedNetwork6Parser::parse() - added call to parseDdnsParms(). src/lib/dhcpsrv/parsers/simple_parser4.cc SimpleParser4::GLOBAL4_PARAMETERS SimpleParser4::GLOBAL4_DEFAULTS SimpleParser4::SUBNET4_PARAMETERS SimpleParser4::INHERIT_TO_SUBNET4 SimpleParser4::SHARED_NETWORK4_PARAMETERS - added DDNS parameters src/lib/dhcpsrv/parsers/simple_parser6.cc SimpleParser6::GLOBAL6_PARAMETERS SimpleParser6::GLOBAL6_DEFAULTS SimpleParser6::SUBNET6_PARAMETERS SimpleParser6::INHERIT_TO_SUBNET6 SimpleParser6::SHARED_NETWORK6_PARAMETERS - added DDNS parameters src/lib/dhcpsrv/tests/cfg_shared_networks4_unittest.cc src/lib/dhcpsrv/tests/cfg_shared_networks6_unittest.cc src/lib/dhcpsrv/tests/dhcp_parsers_unittest.cc src/lib/dhcpsrv/tests/network_unittest.cc src/lib/dhcpsrv/tests/shared_network_parser_unittest.cc src/lib/dhcpsrv/tests/shared_network_unittest.cc src/lib/dhcpsrv/tests/subnet_unittest.cc Updated tests.
This commit is contained in:
@@ -242,6 +242,32 @@ Network::toElement() const {
|
||||
map->set("t2-percent", Element::create(t2_percent_));
|
||||
}
|
||||
|
||||
if (!ddns_send_updates_.unspecified()) {
|
||||
map->set("ddns-send-updates", Element::create(ddns_send_updates_));
|
||||
}
|
||||
|
||||
if (!ddns_override_no_update_.unspecified()) {
|
||||
map->set("ddns-override-no-update", Element::create(ddns_override_no_update_));
|
||||
}
|
||||
|
||||
if (!ddns_override_client_update_.unspecified()) {
|
||||
map->set("ddns-override-client-update", Element::create(ddns_override_client_update_));
|
||||
}
|
||||
|
||||
if (!ddns_replace_client_name_mode_.unspecified()) {
|
||||
map->set("ddns-replace-client-name",
|
||||
Element::create(D2ClientConfig::
|
||||
replaceClientNameModeToString(ddns_replace_client_name_mode_)));
|
||||
}
|
||||
|
||||
if (!ddns_generated_prefix_.unspecified()) {
|
||||
map->set("ddns-generated-prefix", Element::create(ddns_generated_prefix_));
|
||||
}
|
||||
|
||||
if (!ddns_qualifying_suffix_.unspecified()) {
|
||||
map->set("ddns-qualifying-suffix", Element::create(ddns_qualifying_suffix_));
|
||||
}
|
||||
|
||||
return (map);
|
||||
}
|
||||
|
||||
|
@@ -16,6 +16,7 @@
|
||||
#include <dhcp/option.h>
|
||||
#include <dhcpsrv/cfg_option.h>
|
||||
#include <dhcpsrv/cfg_4o6.h>
|
||||
#include <dhcpsrv/d2_client_cfg.h>
|
||||
#include <dhcpsrv/triplet.h>
|
||||
#include <util/optional.h>
|
||||
#include <boost/shared_ptr.hpp>
|
||||
@@ -203,7 +204,9 @@ public:
|
||||
Network()
|
||||
: iface_name_(), client_class_(), t1_(), t2_(), valid_(),
|
||||
host_reservation_mode_(HR_ALL, true), cfg_option_(new CfgOption()),
|
||||
calculate_tee_times_(), t1_percent_(), t2_percent_() {
|
||||
calculate_tee_times_(), t1_percent_(), t2_percent_(),
|
||||
ddns_send_updates_(), ddns_override_no_update_(), ddns_override_client_update_(),
|
||||
ddns_replace_client_name_mode_(), ddns_generated_prefix_(), ddns_qualifying_suffix_() {
|
||||
}
|
||||
|
||||
/// @brief Virtual destructor.
|
||||
@@ -517,6 +520,132 @@ public:
|
||||
t2_percent_ = t2_percent;
|
||||
}
|
||||
|
||||
/// @brief Returns ddns-send-updates
|
||||
///
|
||||
/// @param inheritance inheritance mode to be used.
|
||||
util::Optional<bool>
|
||||
getDdnsSendUpdates(const Inheritance& inheritance = Inheritance::ALL) const {
|
||||
return (getProperty<Network>(&Network::getDdnsSendUpdates, ddns_send_updates_,
|
||||
inheritance, "ddns-send-updates"));
|
||||
}
|
||||
|
||||
/// @brief Sets new ddns-send-updates
|
||||
///
|
||||
/// @param ddns_send_updates_ New value to use.
|
||||
void setDdnsSendUpdates(const util::Optional<bool>& ddns_send_updates) {
|
||||
ddns_send_updates_ = ddns_send_updates;
|
||||
}
|
||||
|
||||
/// @brief Returns ddns-override-no-update
|
||||
///
|
||||
/// @param inheritance inheritance mode to be used.
|
||||
util::Optional<bool>
|
||||
getDdnsOverrideNoUpdate(const Inheritance& inheritance = Inheritance::ALL) const {
|
||||
return (getProperty<Network>(&Network::getDdnsOverrideNoUpdate, ddns_override_no_update_,
|
||||
inheritance, "ddns-override-no-update"));
|
||||
}
|
||||
|
||||
/// @brief Sets new ddns-override-no-update
|
||||
///
|
||||
/// @param ddns_override_no_update New value to use.
|
||||
void setDdnsOverrideNoUpdate(const util::Optional<bool>& ddns_override_no_update) {
|
||||
ddns_override_no_update_ = ddns_override_no_update;
|
||||
}
|
||||
|
||||
/// @brief Returns ddns-overridie-client-update
|
||||
///
|
||||
/// @param inheritance inheritance mode to be used.
|
||||
util::Optional<bool>
|
||||
getDdnsOverrideClientUpdate(const Inheritance& inheritance = Inheritance::ALL) const {
|
||||
return (getProperty<Network>(&Network::getDdnsOverrideClientUpdate, ddns_override_client_update_,
|
||||
inheritance, "ddns-override-client-update"));
|
||||
}
|
||||
|
||||
/// @brief Sets new ddns-override-client-update
|
||||
///
|
||||
/// @param ddns-override-client-update New value to use.
|
||||
void setDdnsOverrideClientUpdate(const util::Optional<bool>& ddns_override_client_update) {
|
||||
ddns_override_client_update_ = ddns_override_client_update;
|
||||
}
|
||||
|
||||
/// @brief Returns ddns-replace-client-name-mode
|
||||
///
|
||||
/// @param inheritance inheritance mode to be used.
|
||||
util::Optional<D2ClientConfig::ReplaceClientNameMode>
|
||||
getDdnsReplaceClientNameMode(const Inheritance& inheritance = Inheritance::ALL) const {
|
||||
// Inheritance for ddns-replace-client-name is a little different than for other
|
||||
// parameters. The value at the global level is given as a string.
|
||||
// Thus we call getProperty here without a global name to check if it
|
||||
// is specified on network level only.
|
||||
const util::Optional<D2ClientConfig::ReplaceClientNameMode>& mode
|
||||
= getProperty<Network>(&Network::getDdnsReplaceClientNameMode,
|
||||
ddns_replace_client_name_mode_, inheritance);
|
||||
|
||||
// If it is not specified at network level we need this special
|
||||
// case code to convert the global string value to an enum.
|
||||
if (mode.unspecified() && (inheritance != Inheritance::NONE) &&
|
||||
(inheritance != Inheritance::PARENT_NETWORK)) {
|
||||
// Get global mode.
|
||||
util::Optional<std::string> mode_label;
|
||||
mode_label = getGlobalProperty(mode_label, "ddns-replace-client-name");
|
||||
if (!mode_label.unspecified()) {
|
||||
try {
|
||||
// If the mode is globally configured, convert it to an enum.
|
||||
return (D2ClientConfig::stringToReplaceClientNameMode(mode_label.get()));
|
||||
} catch (...) {
|
||||
// This should not really happen because the configuration
|
||||
// parser should have already verified the globally configured
|
||||
// reservation mode. However, we want to be 100% sure that this
|
||||
// method doesn't throw. Let's just return unspecified.
|
||||
return (mode);
|
||||
}
|
||||
}
|
||||
}
|
||||
return (mode);
|
||||
}
|
||||
|
||||
/// @brief Sets new ddns-replace-client-name-mode
|
||||
///
|
||||
/// @param ddns_replace_client_name_mode New value to use.
|
||||
void setDdnsReplaceClientNameMode(const util::Optional<D2ClientConfig::ReplaceClientNameMode>&
|
||||
ddns_replace_client_name_mode) {
|
||||
ddns_replace_client_name_mode_ = ddns_replace_client_name_mode;
|
||||
}
|
||||
|
||||
/// @brief Returns ddns-generated-prefix
|
||||
///
|
||||
/// @param inheritance inheritance mode to be used.
|
||||
util::Optional<std::string>
|
||||
getDdnsGeneratedPrefix(const Inheritance& inheritance = Inheritance::ALL) const {
|
||||
return (getProperty<Network>(&Network::getDdnsGeneratedPrefix, ddns_generated_prefix_,
|
||||
inheritance, "ddns-generated-prefix"));
|
||||
}
|
||||
|
||||
/// @brief Sets new ddns-generated-prefix
|
||||
///
|
||||
/// @param ddns_generated-prefix New value to use.
|
||||
void setDdnsGeneratedPrefix(const util::Optional<std::string>& ddns_generated_prefix) {
|
||||
ddns_generated_prefix_ = ddns_generated_prefix;
|
||||
}
|
||||
|
||||
/// @brief Returns ddns-qualifying-suffix
|
||||
///
|
||||
/// @param inheritance inheritance mode to be used.
|
||||
util::Optional<std::string>
|
||||
getDdnsQualifyingSuffix(const Inheritance& inheritance = Inheritance::ALL) const {
|
||||
return (getProperty<Network>(&Network::getDdnsQualifyingSuffix, ddns_qualifying_suffix_,
|
||||
inheritance, "ddns-qualifying-suffix"));
|
||||
}
|
||||
|
||||
/// @brief Sets new ddns-qualifying-suffix
|
||||
///
|
||||
/// @param ddns_qualifying_suffix New value to use.
|
||||
void setDdnsQualifyingSuffix(const util::Optional<std::string>& ddns_qualifying_suffix) {
|
||||
ddns_qualifying_suffix_ = ddns_qualifying_suffix;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// @brief Unparses network object.
|
||||
///
|
||||
/// @return A pointer to unparsed network configuration.
|
||||
@@ -779,6 +908,26 @@ protected:
|
||||
/// @brief Percentage of the lease lifetime to use when calculating T2 timer
|
||||
util::Optional<double> t2_percent_;
|
||||
|
||||
/// @brief Should Kea perform DNS updates. Used to provide scoped enabling
|
||||
/// and disabling of updates.
|
||||
util::Optional<bool> ddns_send_updates_;
|
||||
|
||||
/// @brief Should Kea perform updates, even if client requested no updates.
|
||||
/// Overrides the client request for no updates via the N flag.
|
||||
util::Optional<bool> ddns_override_no_update_;
|
||||
|
||||
/// @brief Should Kea perform updates, even if client requested delegation.
|
||||
util::Optional<bool> ddns_override_client_update_;
|
||||
|
||||
/// @brief How Kea should handle the domain-name supplied by the client.
|
||||
util::Optional<D2ClientConfig::ReplaceClientNameMode> ddns_replace_client_name_mode_;
|
||||
|
||||
/// @brief Prefix Kea should use when generating domain-names.
|
||||
util::Optional<std::string> ddns_generated_prefix_;
|
||||
|
||||
/// @brief Suffix Kea should use when to qualify partial domain-names.
|
||||
util::Optional<std::string> ddns_qualifying_suffix_;
|
||||
|
||||
/// @brief Pointer to another network that this network belongs to.
|
||||
///
|
||||
/// The most common case is that this instance is a subnet which belongs
|
||||
|
@@ -18,11 +18,11 @@ namespace dhcp {
|
||||
const Triplet<uint32_t>
|
||||
BaseNetworkParser::parseLifetime(const ConstElementPtr& scope,
|
||||
const std::string& name) {
|
||||
uint32_t value;
|
||||
uint32_t value = 0;
|
||||
bool has_value = false;
|
||||
uint32_t min_value;
|
||||
uint32_t min_value = 0;
|
||||
bool has_min = false;
|
||||
uint32_t max_value;
|
||||
uint32_t max_value = 0;
|
||||
bool has_max = false;
|
||||
if (scope->contains(name)) {
|
||||
value = getInteger(scope, name);
|
||||
@@ -167,5 +167,37 @@ BaseNetworkParser::parseHostReservationMode(const data::ConstElementPtr& network
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
BaseNetworkParser::parseDdnsParams(const data::ConstElementPtr& network_data,
|
||||
NetworkPtr& network) {
|
||||
|
||||
if (network_data->contains("ddns-send-updates")) {
|
||||
network->setDdnsSendUpdates(getBoolean(network_data, "ddns-send-updates"));
|
||||
}
|
||||
|
||||
if (network_data->contains("ddns-override-no-update")) {
|
||||
network->setDdnsOverrideNoUpdate(getBoolean(network_data, "ddns-override-no-update"));
|
||||
}
|
||||
|
||||
if (network_data->contains("ddns-override-client-update")) {
|
||||
network->setDdnsOverrideClientUpdate(getBoolean(network_data, "ddns-override-client-update"));
|
||||
}
|
||||
|
||||
if (network_data->contains("ddns-replace-client-name")) {
|
||||
network->setDdnsReplaceClientNameMode(getAndConvert<D2ClientConfig::ReplaceClientNameMode,
|
||||
D2ClientConfig::stringToReplaceClientNameMode>
|
||||
(network_data, "ddns-replace-client-name",
|
||||
"ReplaceClientName mode"));
|
||||
}
|
||||
|
||||
if (network_data->contains("ddns-generated-prefix")) {
|
||||
network->setDdnsGeneratedPrefix(getString(network_data, "ddns-generated-prefix"));
|
||||
}
|
||||
|
||||
if (network_data->contains("ddns-qualifying-suffix")) {
|
||||
network->setDdnsQualifyingSuffix(getString(network_data, "ddns-qualifying-suffix"));
|
||||
}
|
||||
}
|
||||
|
||||
} // end of namespace isc::dhcp
|
||||
} // end of namespace isc
|
||||
|
@@ -62,13 +62,30 @@ protected:
|
||||
NetworkPtr& network);
|
||||
|
||||
/// @brief Parses host reservation mode.
|
||||
//
|
||||
///
|
||||
/// @param network_data Data element holding shared network
|
||||
/// configuration to be parsed.
|
||||
/// @param [out] network Pointer to a network in which parsed data is
|
||||
/// to be stored.
|
||||
void parseHostReservationMode(const data::ConstElementPtr& network_data,
|
||||
NetworkPtr& network);
|
||||
|
||||
/// @brief Parses parameters pertaining to DDNS behavior.
|
||||
///
|
||||
/// The parsed parameters are:
|
||||
/// - ddns-send-updates
|
||||
/// - ddns-override-no-update
|
||||
/// - ddns-override-client-update
|
||||
/// - ddns-replace-client-name
|
||||
/// - ddns-generated-prefix
|
||||
/// - ddns-qualifying-suffix
|
||||
///
|
||||
/// @param network_data Data element holding shared network
|
||||
/// configuration to be parsed.
|
||||
/// @param [out] network Pointer to a network in which parsed data is
|
||||
/// to be stored.
|
||||
void parseDdnsParams(const data::ConstElementPtr& network_data,
|
||||
NetworkPtr& network);
|
||||
};
|
||||
|
||||
} // end of namespace isc::dhcp
|
||||
|
@@ -925,6 +925,9 @@ Subnet4ConfigParser::initSubnet(data::ConstElementPtr params,
|
||||
|
||||
// Parse t1-percent and t2-percent
|
||||
parseTeePercents(params, network);
|
||||
|
||||
// Parse DDNS parameters
|
||||
parseDdnsParams(params, network);
|
||||
}
|
||||
|
||||
//**************************** Subnets4ListConfigParser **********************
|
||||
@@ -1314,6 +1317,9 @@ Subnet6ConfigParser::initSubnet(data::ConstElementPtr params,
|
||||
|
||||
// Parse t1-percent and t2-percent
|
||||
parseTeePercents(params, network);
|
||||
|
||||
// Parse DDNS parameters
|
||||
parseDdnsParams(params, network);
|
||||
}
|
||||
|
||||
//**************************** Subnet6ListConfigParser ********************
|
||||
|
@@ -174,6 +174,8 @@ SharedNetwork4Parser::parse(const data::ConstElementPtr& shared_network_data) {
|
||||
|
||||
parseTeePercents(shared_network_data, network);
|
||||
|
||||
// Parse DDNS parameters
|
||||
parseDdnsParams(shared_network_data, network);
|
||||
} catch (const DhcpConfigError&) {
|
||||
// Position was already added
|
||||
throw;
|
||||
@@ -326,6 +328,8 @@ SharedNetwork6Parser::parse(const data::ConstElementPtr& shared_network_data) {
|
||||
|
||||
parseTeePercents(shared_network_data, network);
|
||||
|
||||
// Parse DDNS parameters
|
||||
parseDdnsParams(shared_network_data, network);
|
||||
} catch (const std::exception& ex) {
|
||||
isc_throw(DhcpConfigError, ex.what() << " ("
|
||||
<< shared_network_data->getPosition() << ")");
|
||||
|
@@ -75,14 +75,14 @@ const SimpleKeywords SimpleParser4::GLOBAL4_PARAMETERS = {
|
||||
{ "t1-percent", Element::real },
|
||||
{ "t2-percent", Element::real },
|
||||
{ "loggers", Element::list },
|
||||
{ "hostname-char-set", Element::string },
|
||||
{ "hostname-char-replacement", Element::string },
|
||||
{ "ddns-send-updates", Element::boolean },
|
||||
{ "ddns-override-no-update", Element::boolean },
|
||||
{ "ddns-override-client-update", Element::boolean },
|
||||
{ "ddns-replace-client-name", Element::string },
|
||||
{ "ddns-generated-prefix", Element::string },
|
||||
{ "ddns-qualifying-suffix", Element::string }
|
||||
{ "hostname-char-set", Element::string },
|
||||
{ "hostname-char-replacement", Element::string }
|
||||
};
|
||||
|
||||
/// @brief This table defines default global values for DHCPv4
|
||||
@@ -109,7 +109,7 @@ const SimpleDefaults SimpleParser4::GLOBAL4_DEFAULTS = {
|
||||
{ "ddns-override-no-update", Element::boolean, "false" },
|
||||
{ "ddns-override-client-update", Element::boolean, "false" },
|
||||
{ "ddns-replace-client-name", Element::string, "never" },
|
||||
{ "ddns-generated-prefix", Element::string, "myhost" }
|
||||
{ "ddns-generated-prefix", Element::string, "myhost" },
|
||||
// TKM should this still be true? qualifying-suffix has no default ??
|
||||
{ "ddns-generated-suffix", Element::string, "" }
|
||||
};
|
||||
@@ -177,35 +177,41 @@ const SimpleDefaults SimpleParser4::OPTION4_DEFAULTS = {
|
||||
/// list and map types for entries.
|
||||
/// Order follows subnet4_param rule in bison grammar.
|
||||
const SimpleKeywords SimpleParser4::SUBNET4_PARAMETERS = {
|
||||
{ "valid-lifetime", Element::integer },
|
||||
{ "min-valid-lifetime", Element::integer },
|
||||
{ "max-valid-lifetime", Element::integer },
|
||||
{ "renew-timer", Element::integer },
|
||||
{ "rebind-timer", Element::integer },
|
||||
{ "option-data", Element::list },
|
||||
{ "pools", Element::list },
|
||||
{ "subnet", Element::string },
|
||||
{ "interface", Element::string },
|
||||
{ "id", Element::integer },
|
||||
{ "client-class", Element::string },
|
||||
{ "require-client-classes", Element::list },
|
||||
{ "reservations", Element::list },
|
||||
{ "reservation-mode", Element::string },
|
||||
{ "relay", Element::map },
|
||||
{ "match-client-id", Element::boolean },
|
||||
{ "authoritative", Element::boolean },
|
||||
{ "next-server", Element::string },
|
||||
{ "server-hostname", Element::string },
|
||||
{ "boot-file-name", Element::string },
|
||||
{ "4o6-interface", Element::string },
|
||||
{ "4o6-interface-id", Element::string },
|
||||
{ "4o6-subnet", Element::string },
|
||||
{ "user-context", Element::map },
|
||||
{ "comment", Element::string },
|
||||
{ "calculate-tee-times", Element::boolean },
|
||||
{ "t1-percent", Element::real },
|
||||
{ "t2-percent", Element::real },
|
||||
{ "metadata", Element::map }
|
||||
{ "valid-lifetime", Element::integer },
|
||||
{ "min-valid-lifetime", Element::integer },
|
||||
{ "max-valid-lifetime", Element::integer },
|
||||
{ "renew-timer", Element::integer },
|
||||
{ "rebind-timer", Element::integer },
|
||||
{ "option-data", Element::list },
|
||||
{ "pools", Element::list },
|
||||
{ "subnet", Element::string },
|
||||
{ "interface", Element::string },
|
||||
{ "id", Element::integer },
|
||||
{ "client-class", Element::string },
|
||||
{ "require-client-classes", Element::list },
|
||||
{ "reservations", Element::list },
|
||||
{ "reservation-mode", Element::string },
|
||||
{ "relay", Element::map },
|
||||
{ "match-client-id", Element::boolean },
|
||||
{ "authoritative", Element::boolean },
|
||||
{ "next-server", Element::string },
|
||||
{ "server-hostname", Element::string },
|
||||
{ "boot-file-name", Element::string },
|
||||
{ "4o6-interface", Element::string },
|
||||
{ "4o6-interface-id", Element::string },
|
||||
{ "4o6-subnet", Element::string },
|
||||
{ "user-context", Element::map },
|
||||
{ "comment", Element::string },
|
||||
{ "calculate-tee-times", Element::boolean },
|
||||
{ "t1-percent", Element::real },
|
||||
{ "t2-percent", Element::real },
|
||||
{ "ddns-send-updates", Element::boolean },
|
||||
{ "ddns-override-no-update", Element::boolean },
|
||||
{ "ddns-override-client-update", Element::boolean },
|
||||
{ "ddns-replace-client-name", Element::string },
|
||||
{ "ddns-generated-prefix", Element::string },
|
||||
{ "ddns-qualifying-suffix", Element::string },
|
||||
{ "metadata", Element::map },
|
||||
};
|
||||
|
||||
/// @brief This table defines default values for each IPv4 subnet.
|
||||
@@ -263,7 +269,13 @@ const ParamsList SimpleParser4::INHERIT_TO_SUBNET4 = {
|
||||
"max-valid-lifetime",
|
||||
"calculate-tee-times",
|
||||
"t1-percent",
|
||||
"t2-percent"
|
||||
"t2-percent",
|
||||
"ddns-send-updates",
|
||||
"ddns-override-no-update",
|
||||
"ddns-override-client-update",
|
||||
"ddns-replace-client-name",
|
||||
"ddns-generated-prefix",
|
||||
"ddns-qualifying-suffix"
|
||||
};
|
||||
|
||||
/// @brief This table defines all pool parameters.
|
||||
@@ -287,30 +299,36 @@ const SimpleKeywords SimpleParser4::POOL4_PARAMETERS = {
|
||||
/// list and map types for entries.
|
||||
/// Order follows shared_network_param rule in bison grammar.
|
||||
const SimpleKeywords SimpleParser4::SHARED_NETWORK4_PARAMETERS = {
|
||||
{ "name", Element::string },
|
||||
{ "subnet4", Element::list },
|
||||
{ "interface", Element::string },
|
||||
{ "renew-timer", Element::integer },
|
||||
{ "rebind-timer", Element::integer },
|
||||
{ "option-data", Element::list },
|
||||
{ "match-client-id", Element::boolean },
|
||||
{ "authoritative", Element::boolean },
|
||||
{ "next-server", Element::string },
|
||||
{ "server-hostname", Element::string },
|
||||
{ "boot-file-name", Element::string },
|
||||
{ "relay", Element::map },
|
||||
{ "reservation-mode", Element::string },
|
||||
{ "client-class", Element::string },
|
||||
{ "require-client-classes", Element::list },
|
||||
{ "valid-lifetime", Element::integer },
|
||||
{ "min-valid-lifetime", Element::integer },
|
||||
{ "max-valid-lifetime", Element::integer },
|
||||
{ "user-context", Element::map },
|
||||
{ "comment", Element::string },
|
||||
{ "calculate-tee-times", Element::boolean },
|
||||
{ "t1-percent", Element::real },
|
||||
{ "t2-percent", Element::real },
|
||||
{ "metadata", Element::map }
|
||||
{ "name", Element::string },
|
||||
{ "subnet4", Element::list },
|
||||
{ "interface", Element::string },
|
||||
{ "renew-timer", Element::integer },
|
||||
{ "rebind-timer", Element::integer },
|
||||
{ "option-data", Element::list },
|
||||
{ "match-client-id", Element::boolean },
|
||||
{ "authoritative", Element::boolean },
|
||||
{ "next-server", Element::string },
|
||||
{ "server-hostname", Element::string },
|
||||
{ "boot-file-name", Element::string },
|
||||
{ "relay", Element::map },
|
||||
{ "reservation-mode", Element::string },
|
||||
{ "client-class", Element::string },
|
||||
{ "require-client-classes", Element::list },
|
||||
{ "valid-lifetime", Element::integer },
|
||||
{ "min-valid-lifetime", Element::integer },
|
||||
{ "max-valid-lifetime", Element::integer },
|
||||
{ "user-context", Element::map },
|
||||
{ "comment", Element::string },
|
||||
{ "calculate-tee-times", Element::boolean },
|
||||
{ "t1-percent", Element::real },
|
||||
{ "t2-percent", Element::real },
|
||||
{ "ddns-send-updates", Element::boolean },
|
||||
{ "ddns-override-no-update", Element::boolean },
|
||||
{ "ddns-override-client-update", Element::boolean },
|
||||
{ "ddns-replace-client-name", Element::string },
|
||||
{ "ddns-generated-prefix", Element::string },
|
||||
{ "ddns-qualifying-suffix", Element::string },
|
||||
{ "metadata", Element::map },
|
||||
};
|
||||
|
||||
/// @brief This table defines default values for each IPv4 shared network.
|
||||
|
@@ -76,7 +76,13 @@ const SimpleKeywords SimpleParser6::GLOBAL6_PARAMETERS = {
|
||||
{ "t2-percent", Element::real },
|
||||
{ "loggers", Element::list },
|
||||
{ "hostname-char-set", Element::string },
|
||||
{ "hostname-char-replacement", Element::string }
|
||||
{ "hostname-char-replacement", Element::string },
|
||||
{ "ddns-send-updates", Element::boolean },
|
||||
{ "ddns-override-no-update", Element::boolean },
|
||||
{ "ddns-override-client-update", Element::boolean },
|
||||
{ "ddns-replace-client-name", Element::string },
|
||||
{ "ddns-generated-prefix", Element::string },
|
||||
{ "ddns-qualifying-suffix", Element::string }
|
||||
};
|
||||
|
||||
/// @brief This table defines default global values for DHCPv6
|
||||
@@ -85,15 +91,22 @@ const SimpleKeywords SimpleParser6::GLOBAL6_PARAMETERS = {
|
||||
/// in Dhcp6) are optional. If not defined, the following values will be
|
||||
/// used.
|
||||
const SimpleDefaults SimpleParser6::GLOBAL6_DEFAULTS = {
|
||||
{ "preferred-lifetime", Element::integer, "3600" },
|
||||
{ "valid-lifetime", Element::integer, "7200" },
|
||||
{ "decline-probation-period", Element::integer, "86400" }, // 24h
|
||||
{ "dhcp4o6-port", Element::integer, "0" },
|
||||
{ "server-tag", Element::string, "" },
|
||||
{ "reservation-mode", Element::string, "all" },
|
||||
{ "calculate-tee-times", Element::boolean, "true" },
|
||||
{ "t1-percent", Element::real, ".50" },
|
||||
{ "t2-percent", Element::real, ".80" }
|
||||
{ "preferred-lifetime", Element::integer, "3600" },
|
||||
{ "valid-lifetime", Element::integer, "7200" },
|
||||
{ "decline-probation-period", Element::integer, "86400" }, // 24h
|
||||
{ "dhcp4o6-port", Element::integer, "0" },
|
||||
{ "server-tag", Element::string, "" },
|
||||
{ "reservation-mode", Element::string, "all" },
|
||||
{ "calculate-tee-times", Element::boolean, "true" },
|
||||
{ "t1-percent", Element::real, ".50" },
|
||||
{ "t2-percent", Element::real, ".80" },
|
||||
{ "ddns-send-updates", Element::boolean, "false" },
|
||||
{ "ddns-override-no-update", Element::boolean, "false" },
|
||||
{ "ddns-override-client-update", Element::boolean, "false" },
|
||||
{ "ddns-replace-client-name", Element::string, "never" },
|
||||
{ "ddns-generated-prefix", Element::string, "myhost" },
|
||||
// TKM should this still be true? qualifying-suffix has no default ??
|
||||
{ "ddns-generated-suffix", Element::string, "" }
|
||||
};
|
||||
|
||||
/// @brief This table defines all option definition parameters.
|
||||
@@ -159,33 +172,39 @@ const SimpleDefaults SimpleParser6::OPTION6_DEFAULTS = {
|
||||
/// list and map types for entries.
|
||||
/// Order follows subnet6_param rule in bison grammar.
|
||||
const SimpleKeywords SimpleParser6::SUBNET6_PARAMETERS = {
|
||||
{ "preferred-lifetime", Element::integer },
|
||||
{ "min-preferred-lifetime", Element::integer },
|
||||
{ "max-preferred-lifetime", Element::integer },
|
||||
{ "valid-lifetime", Element::integer },
|
||||
{ "min-valid-lifetime", Element::integer },
|
||||
{ "max-valid-lifetime", Element::integer },
|
||||
{ "renew-timer", Element::integer },
|
||||
{ "rebind-timer", Element::integer },
|
||||
{ "option-data", Element::list },
|
||||
{ "pools", Element::list },
|
||||
{ "pd-pools", Element::list },
|
||||
{ "subnet", Element::string },
|
||||
{ "interface", Element::string },
|
||||
{ "interface-id", Element::string },
|
||||
{ "id", Element::integer },
|
||||
{ "rapid-commit", Element::boolean },
|
||||
{ "client-class", Element::string },
|
||||
{ "require-client-classes", Element::list },
|
||||
{ "reservations", Element::list },
|
||||
{ "reservation-mode", Element::string },
|
||||
{ "relay", Element::map },
|
||||
{ "user-context", Element::map },
|
||||
{ "comment", Element::string },
|
||||
{ "calculate-tee-times", Element::boolean },
|
||||
{ "t1-percent", Element::real },
|
||||
{ "t2-percent", Element::real },
|
||||
{ "metadata", Element::map }
|
||||
{ "preferred-lifetime", Element::integer },
|
||||
{ "min-preferred-lifetime", Element::integer },
|
||||
{ "max-preferred-lifetime", Element::integer },
|
||||
{ "valid-lifetime", Element::integer },
|
||||
{ "min-valid-lifetime", Element::integer },
|
||||
{ "max-valid-lifetime", Element::integer },
|
||||
{ "renew-timer", Element::integer },
|
||||
{ "rebind-timer", Element::integer },
|
||||
{ "option-data", Element::list },
|
||||
{ "pools", Element::list },
|
||||
{ "pd-pools", Element::list },
|
||||
{ "subnet", Element::string },
|
||||
{ "interface", Element::string },
|
||||
{ "interface-id", Element::string },
|
||||
{ "id", Element::integer },
|
||||
{ "rapid-commit", Element::boolean },
|
||||
{ "client-class", Element::string },
|
||||
{ "require-client-classes", Element::list },
|
||||
{ "reservations", Element::list },
|
||||
{ "reservation-mode", Element::string },
|
||||
{ "relay", Element::map },
|
||||
{ "user-context", Element::map },
|
||||
{ "comment", Element::string },
|
||||
{ "calculate-tee-times", Element::boolean },
|
||||
{ "t1-percent", Element::real },
|
||||
{ "t2-percent", Element::real },
|
||||
{ "ddns-send-updates", Element::boolean },
|
||||
{ "ddns-override-no-update", Element::boolean },
|
||||
{ "ddns-override-client-update", Element::boolean },
|
||||
{ "ddns-replace-client-name", Element::string },
|
||||
{ "ddns-generated-prefix", Element::string },
|
||||
{ "ddns-qualifying-suffix", Element::string },
|
||||
{ "metadata", Element::map }
|
||||
};
|
||||
|
||||
/// @brief This table defines default values for each IPv6 subnet.
|
||||
@@ -231,7 +250,13 @@ const ParamsList SimpleParser6::INHERIT_TO_SUBNET6 = {
|
||||
"max-valid-lifetime",
|
||||
"calculate-tee-times",
|
||||
"t1-percent",
|
||||
"t2-percent"
|
||||
"t2-percent",
|
||||
"ddns-send-updates",
|
||||
"ddns-override-no-update",
|
||||
"ddns-override-client-update",
|
||||
"ddns-replace-client-name",
|
||||
"ddns-generated-prefix",
|
||||
"ddns-qualifying-suffix"
|
||||
};
|
||||
|
||||
/// @brief This table defines all pool parameters.
|
||||
@@ -274,30 +299,36 @@ const SimpleKeywords SimpleParser6::PD_POOL6_PARAMETERS = {
|
||||
/// list and map types for entries.
|
||||
/// Order follows shared_network_param rule in bison grammar.
|
||||
const SimpleKeywords SimpleParser6::SHARED_NETWORK6_PARAMETERS = {
|
||||
{ "name", Element::string },
|
||||
{ "subnet6", Element::list },
|
||||
{ "interface", Element::string },
|
||||
{ "interface-id", Element::string },
|
||||
{ "renew-timer", Element::integer },
|
||||
{ "rebind-timer", Element::integer },
|
||||
{ "option-data", Element::list },
|
||||
{ "relay", Element::map },
|
||||
{ "reservation-mode", Element::string },
|
||||
{ "client-class", Element::string },
|
||||
{ "require-client-classes", Element::list },
|
||||
{ "preferred-lifetime", Element::integer },
|
||||
{ "min-preferred-lifetime", Element::integer },
|
||||
{ "max-preferred-lifetime", Element::integer },
|
||||
{ "rapid-commit", Element::boolean },
|
||||
{ "valid-lifetime", Element::integer },
|
||||
{ "min-valid-lifetime", Element::integer },
|
||||
{ "max-valid-lifetime", Element::integer },
|
||||
{ "user-context", Element::map },
|
||||
{ "comment", Element::string },
|
||||
{ "calculate-tee-times", Element::boolean },
|
||||
{ "t1-percent", Element::real },
|
||||
{ "t2-percent", Element::real },
|
||||
{ "metadata", Element::map }
|
||||
{ "name", Element::string },
|
||||
{ "subnet6", Element::list },
|
||||
{ "interface", Element::string },
|
||||
{ "interface-id", Element::string },
|
||||
{ "renew-timer", Element::integer },
|
||||
{ "rebind-timer", Element::integer },
|
||||
{ "option-data", Element::list },
|
||||
{ "relay", Element::map },
|
||||
{ "reservation-mode", Element::string },
|
||||
{ "client-class", Element::string },
|
||||
{ "require-client-classes", Element::list },
|
||||
{ "preferred-lifetime", Element::integer },
|
||||
{ "min-preferred-lifetime", Element::integer },
|
||||
{ "max-preferred-lifetime", Element::integer },
|
||||
{ "rapid-commit", Element::boolean },
|
||||
{ "valid-lifetime", Element::integer },
|
||||
{ "min-valid-lifetime", Element::integer },
|
||||
{ "max-valid-lifetime", Element::integer },
|
||||
{ "user-context", Element::map },
|
||||
{ "comment", Element::string },
|
||||
{ "calculate-tee-times", Element::boolean },
|
||||
{ "t1-percent", Element::real },
|
||||
{ "t2-percent", Element::real },
|
||||
{ "ddns-send-updates", Element::boolean },
|
||||
{ "ddns-override-no-update", Element::boolean },
|
||||
{ "ddns-override-client-update", Element::boolean },
|
||||
{ "ddns-replace-client-name", Element::string },
|
||||
{ "ddns-generated-prefix", Element::string },
|
||||
{ "ddns-qualifying-suffix", Element::string },
|
||||
{ "metadata", Element::map }
|
||||
};
|
||||
|
||||
/// @brief This table defines default values for each IPv6 subnet.
|
||||
|
@@ -192,17 +192,25 @@ TEST(CfgSharedNetworks4Test, unparse) {
|
||||
SharedNetwork4Ptr network1(new SharedNetwork4("frog"));
|
||||
SharedNetwork4Ptr network2(new SharedNetwork4("dog"));
|
||||
SharedNetwork4Ptr network3(new SharedNetwork4("cat"));
|
||||
|
||||
network1->setIface("eth0");
|
||||
network1->addRelayAddress(IOAddress("198.16.1.1"));
|
||||
network1->addRelayAddress(IOAddress("198.16.1.2"));
|
||||
network1->setCalculateTeeTimes(true);
|
||||
network1->setT1Percent(.35);
|
||||
network1->setT2Percent(.655);
|
||||
network1->setDdnsSendUpdates(true);
|
||||
network1->setDdnsOverrideNoUpdate(true);
|
||||
network1->setDdnsOverrideClientUpdate(true);
|
||||
network1->setDdnsReplaceClientNameMode(D2ClientConfig::RCM_ALWAYS);
|
||||
network1->setDdnsGeneratedPrefix("prefix");
|
||||
network1->setDdnsQualifyingSuffix("example.com.");
|
||||
|
||||
network2->setIface("eth1");
|
||||
network2->setT1(Triplet<uint32_t>(100));
|
||||
network2->setT2(Triplet<uint32_t>(200));
|
||||
network2->setValid(Triplet<uint32_t>(200, 300, 400));
|
||||
network2->setDdnsSendUpdates(false);
|
||||
|
||||
network3->setIface("eth2");
|
||||
network3->setValid(Triplet<uint32_t>(100));
|
||||
@@ -223,6 +231,7 @@ TEST(CfgSharedNetworks4Test, unparse) {
|
||||
" \"valid-lifetime\": 100\n"
|
||||
" },\n"
|
||||
" {\n"
|
||||
" \"ddns-send-updates\": false,\n"
|
||||
" \"interface\": \"eth1\",\n"
|
||||
" \"name\": \"dog\",\n"
|
||||
" \"rebind-timer\": 200,\n"
|
||||
@@ -236,6 +245,12 @@ TEST(CfgSharedNetworks4Test, unparse) {
|
||||
" },\n"
|
||||
" {\n"
|
||||
" \"calculate-tee-times\": true,\n"
|
||||
" \"ddns-generated-prefix\": \"prefix\",\n"
|
||||
" \"ddns-override-no-update\": true,\n"
|
||||
" \"ddns-override-client-update\": true,\n"
|
||||
" \"ddns-qualifying-suffix\": \"example.com.\",\n"
|
||||
" \"ddns-replace-client-name\": \"always\",\n"
|
||||
" \"ddns-send-updates\": true,\n"
|
||||
" \"interface\": \"eth0\",\n"
|
||||
" \"name\": \"frog\",\n"
|
||||
" \"option-data\": [ ],\n"
|
||||
|
@@ -200,12 +200,19 @@ TEST(CfgSharedNetworks6Test, unparse) {
|
||||
network1->setCalculateTeeTimes(true);
|
||||
network1->setT1Percent(.35);
|
||||
network1->setT2Percent(.655);
|
||||
network1->setDdnsSendUpdates(true);
|
||||
network1->setDdnsOverrideNoUpdate(true);
|
||||
network1->setDdnsOverrideClientUpdate(true);
|
||||
network1->setDdnsReplaceClientNameMode(D2ClientConfig::RCM_ALWAYS);
|
||||
network1->setDdnsGeneratedPrefix("prefix");
|
||||
network1->setDdnsQualifyingSuffix("example.com.");
|
||||
|
||||
network2->setIface("eth1");
|
||||
network2->setT1(Triplet<uint32_t>(100));
|
||||
network2->setT2(Triplet<uint32_t>(200));
|
||||
network2->setPreferred(Triplet<uint32_t>(200));
|
||||
network2->setValid(Triplet<uint32_t>(300));
|
||||
network2->setDdnsSendUpdates(false);
|
||||
|
||||
network3->setIface("eth2");
|
||||
network3->setPreferred(Triplet<uint32_t>(100,200,300));
|
||||
@@ -232,6 +239,7 @@ TEST(CfgSharedNetworks6Test, unparse) {
|
||||
" \"max-valid-lifetime\": 400\n"
|
||||
" },\n"
|
||||
" {\n"
|
||||
" \"ddns-send-updates\": false,\n"
|
||||
" \"interface\": \"eth1\",\n"
|
||||
" \"name\": \"dog\",\n"
|
||||
" \"option-data\": [ ],\n"
|
||||
@@ -244,6 +252,12 @@ TEST(CfgSharedNetworks6Test, unparse) {
|
||||
" },\n"
|
||||
" {\n"
|
||||
" \"calculate-tee-times\": true,\n"
|
||||
" \"ddns-generated-prefix\": \"prefix\",\n"
|
||||
" \"ddns-override-no-update\": true,\n"
|
||||
" \"ddns-override-client-update\": true,\n"
|
||||
" \"ddns-qualifying-suffix\": \"example.com.\",\n"
|
||||
" \"ddns-replace-client-name\": \"always\",\n"
|
||||
" \"ddns-send-updates\": true,\n"
|
||||
" \"interface\": \"eth0\",\n"
|
||||
" \"name\": \"frog\",\n"
|
||||
" \"option-data\": [ ],\n"
|
||||
|
@@ -2763,6 +2763,24 @@ TEST_F(ParseConfigTest, defaultSubnet4) {
|
||||
EXPECT_TRUE(subnet->get4o6().getSubnet4o6().unspecified());
|
||||
EXPECT_TRUE(subnet->get4o6().getSubnet4o6().get().first.isV6Zero());
|
||||
EXPECT_EQ(128, subnet->get4o6().getSubnet4o6().get().second);
|
||||
|
||||
EXPECT_TRUE(subnet->getDdnsSendUpdates().unspecified());
|
||||
EXPECT_FALSE(subnet->getDdnsSendUpdates().get());
|
||||
|
||||
EXPECT_TRUE(subnet->getDdnsOverrideNoUpdate().unspecified());
|
||||
EXPECT_FALSE(subnet->getDdnsOverrideNoUpdate().get());
|
||||
|
||||
EXPECT_TRUE(subnet->getDdnsOverrideClientUpdate().unspecified());
|
||||
EXPECT_FALSE(subnet->getDdnsOverrideClientUpdate().get());
|
||||
|
||||
EXPECT_TRUE(subnet->getDdnsReplaceClientNameMode().unspecified());
|
||||
EXPECT_EQ(D2ClientConfig::RCM_NEVER, subnet->getDdnsReplaceClientNameMode().get());
|
||||
|
||||
EXPECT_TRUE(subnet->getDdnsGeneratedPrefix().unspecified());
|
||||
EXPECT_TRUE(subnet->getDdnsGeneratedPrefix().empty());
|
||||
|
||||
EXPECT_TRUE(subnet->getDdnsQualifyingSuffix().unspecified());
|
||||
EXPECT_TRUE(subnet->getDdnsQualifyingSuffix().empty());
|
||||
}
|
||||
|
||||
// This test verifies that it is possible to parse an IPv6 subnet for which
|
||||
@@ -2816,6 +2834,24 @@ TEST_F(ParseConfigTest, defaultSubnet6) {
|
||||
|
||||
EXPECT_TRUE(subnet->getRapidCommit().unspecified());
|
||||
EXPECT_FALSE(subnet->getRapidCommit().get());
|
||||
|
||||
EXPECT_TRUE(subnet->getDdnsSendUpdates().unspecified());
|
||||
EXPECT_FALSE(subnet->getDdnsSendUpdates().get());
|
||||
|
||||
EXPECT_TRUE(subnet->getDdnsOverrideNoUpdate().unspecified());
|
||||
EXPECT_FALSE(subnet->getDdnsOverrideNoUpdate().get());
|
||||
|
||||
EXPECT_TRUE(subnet->getDdnsOverrideClientUpdate().unspecified());
|
||||
EXPECT_FALSE(subnet->getDdnsOverrideClientUpdate().get());
|
||||
|
||||
EXPECT_TRUE(subnet->getDdnsReplaceClientNameMode().unspecified());
|
||||
EXPECT_EQ(D2ClientConfig::RCM_NEVER, subnet->getDdnsReplaceClientNameMode().get());
|
||||
|
||||
EXPECT_TRUE(subnet->getDdnsGeneratedPrefix().unspecified());
|
||||
EXPECT_EQ("", subnet->getDdnsGeneratedPrefix().get());
|
||||
|
||||
EXPECT_TRUE(subnet->getDdnsQualifyingSuffix().unspecified());
|
||||
EXPECT_TRUE(subnet->getDdnsQualifyingSuffix().empty());
|
||||
}
|
||||
|
||||
// This test verifies that it is possible to parse an IPv4 shared network
|
||||
@@ -2870,6 +2906,24 @@ TEST_F(ParseConfigTest, defaultSharedNetwork4) {
|
||||
|
||||
EXPECT_TRUE(network->getAuthoritative().unspecified());
|
||||
EXPECT_FALSE(network->getAuthoritative().get());
|
||||
|
||||
EXPECT_TRUE(network->getDdnsSendUpdates().unspecified());
|
||||
EXPECT_FALSE(network->getDdnsSendUpdates().get());
|
||||
|
||||
EXPECT_TRUE(network->getDdnsOverrideNoUpdate().unspecified());
|
||||
EXPECT_FALSE(network->getDdnsOverrideNoUpdate().get());
|
||||
|
||||
EXPECT_TRUE(network->getDdnsOverrideClientUpdate().unspecified());
|
||||
EXPECT_FALSE(network->getDdnsOverrideClientUpdate().get());
|
||||
|
||||
EXPECT_TRUE(network->getDdnsReplaceClientNameMode().unspecified());
|
||||
EXPECT_EQ(D2ClientConfig::RCM_NEVER, network->getDdnsReplaceClientNameMode().get());
|
||||
|
||||
EXPECT_TRUE(network->getDdnsGeneratedPrefix().unspecified());
|
||||
EXPECT_TRUE(network->getDdnsGeneratedPrefix().empty());
|
||||
|
||||
EXPECT_TRUE(network->getDdnsQualifyingSuffix().unspecified());
|
||||
EXPECT_TRUE(network->getDdnsQualifyingSuffix().empty());
|
||||
}
|
||||
|
||||
// This test verifies that it is possible to parse an IPv6 shared network
|
||||
@@ -2924,10 +2978,26 @@ TEST_F(ParseConfigTest, defaultSharedNetwork6) {
|
||||
|
||||
EXPECT_TRUE(network->getRapidCommit().unspecified());
|
||||
EXPECT_FALSE(network->getRapidCommit().get());
|
||||
|
||||
EXPECT_TRUE(network->getDdnsSendUpdates().unspecified());
|
||||
EXPECT_FALSE(network->getDdnsSendUpdates().get());
|
||||
|
||||
EXPECT_TRUE(network->getDdnsOverrideNoUpdate().unspecified());
|
||||
EXPECT_FALSE(network->getDdnsOverrideNoUpdate().get());
|
||||
|
||||
EXPECT_TRUE(network->getDdnsOverrideClientUpdate().unspecified());
|
||||
EXPECT_FALSE(network->getDdnsOverrideClientUpdate().get());
|
||||
|
||||
EXPECT_TRUE(network->getDdnsReplaceClientNameMode().unspecified());
|
||||
EXPECT_EQ(D2ClientConfig::RCM_NEVER, network->getDdnsReplaceClientNameMode().get());
|
||||
|
||||
EXPECT_TRUE(network->getDdnsGeneratedPrefix().unspecified());
|
||||
EXPECT_TRUE(network->getDdnsGeneratedPrefix().empty());
|
||||
|
||||
EXPECT_TRUE(network->getDdnsQualifyingSuffix().unspecified());
|
||||
EXPECT_TRUE(network->getDdnsQualifyingSuffix().empty());
|
||||
}
|
||||
|
||||
|
||||
|
||||
// There's no test for ControlSocketParser, as it is tested in the DHCPv4 code
|
||||
// (see CtrlDhcpv4SrvTest.commandSocketBasic in
|
||||
// src/bin/dhcp4/tests/ctrl_dhcp4_srv_unittest.cc).
|
||||
|
@@ -128,7 +128,6 @@ public:
|
||||
EXPECT_EQ(global_value,
|
||||
((*net_child).*GetMethodPointer)(Network::Inheritance::GLOBAL).get());
|
||||
|
||||
|
||||
EXPECT_TRUE(((*net_child).*GetMethodPointer)(Network::Inheritance::NONE).unspecified());
|
||||
EXPECT_TRUE(((*net_child).*GetMethodPointer)(Network::Inheritance::PARENT_NETWORK).unspecified());
|
||||
}
|
||||
@@ -174,6 +173,12 @@ TEST_F(NetworkTest, inheritanceSupport4) {
|
||||
globals_->set("next-server", Element::create("192.0.2.3"));
|
||||
globals_->set("server-hostname", Element::create("g"));
|
||||
globals_->set("boot-file-name", Element::create("g"));
|
||||
globals_->set("ddns-send-updates", Element::create(true));
|
||||
globals_->set("ddns-override-no-update", Element::create(true));
|
||||
globals_->set("ddns-override-client-update", Element::create(true));
|
||||
globals_->set("ddns-replace-client-name", Element::create("always"));
|
||||
globals_->set("ddns-generated-prefix", Element::create("gp"));
|
||||
globals_->set("ddns-qualifying-suffix", Element::create("gs"));
|
||||
|
||||
// For each parameter for which inheritance is supported run
|
||||
// the test that checks if the values are inherited properly.
|
||||
@@ -260,6 +265,44 @@ TEST_F(NetworkTest, inheritanceSupport4) {
|
||||
&Network4::setFilename,
|
||||
"n", "g");
|
||||
}
|
||||
{
|
||||
SCOPED_TRACE("ddns-send-updates");
|
||||
testNetworkInheritance<TestNetwork4>(&Network4::getDdnsSendUpdates,
|
||||
&Network4::setDdnsSendUpdates,
|
||||
false, true);
|
||||
}
|
||||
{
|
||||
SCOPED_TRACE("ddns-override-no-update");
|
||||
testNetworkInheritance<TestNetwork4>(&Network4::getDdnsOverrideNoUpdate,
|
||||
&Network4::setDdnsOverrideNoUpdate,
|
||||
false, true);
|
||||
}
|
||||
{
|
||||
SCOPED_TRACE("ddns-override-client-update");
|
||||
testNetworkInheritance<TestNetwork4>(&Network4::getDdnsOverrideClientUpdate,
|
||||
&Network4::setDdnsOverrideClientUpdate,
|
||||
false, true);
|
||||
}
|
||||
|
||||
{
|
||||
SCOPED_TRACE("ddns-replace-client-name");
|
||||
testNetworkInheritance<TestNetwork4>(&Network4::getDdnsReplaceClientNameMode,
|
||||
&Network4::setDdnsReplaceClientNameMode,
|
||||
D2ClientConfig::RCM_WHEN_PRESENT,
|
||||
D2ClientConfig::RCM_ALWAYS);
|
||||
}
|
||||
{
|
||||
SCOPED_TRACE("ddns-generated-prefix");
|
||||
testNetworkInheritance<TestNetwork4>(&Network4::getDdnsGeneratedPrefix,
|
||||
&Network4::setDdnsGeneratedPrefix,
|
||||
"np", "gp");
|
||||
}
|
||||
{
|
||||
SCOPED_TRACE("ddns-qualifying-suffix");
|
||||
testNetworkInheritance<TestNetwork4>(&Network4::getDdnsQualifyingSuffix,
|
||||
&Network4::setDdnsQualifyingSuffix,
|
||||
"ns", "gs");
|
||||
}
|
||||
}
|
||||
|
||||
// This test verifies that the inheritance is supported for DHCPv6
|
||||
@@ -268,6 +311,12 @@ TEST_F(NetworkTest, inheritanceSupport6) {
|
||||
// Set global values for each parameter.
|
||||
globals_->set("preferred-lifetime", Element::create(80));
|
||||
globals_->set("rapid-commit", Element::create(false));
|
||||
globals_->set("ddns-send-updates", Element::create(true));
|
||||
globals_->set("ddns-override-no-update", Element::create(true));
|
||||
globals_->set("ddns-override-client-update", Element::create(true));
|
||||
globals_->set("ddns-replace-client-name", Element::create("always"));
|
||||
globals_->set("ddns-generated-prefix", Element::create("gp"));
|
||||
globals_->set("ddns-qualifying-suffix", Element::create("gs"));
|
||||
|
||||
// For each parameter for which inheritance is supported run
|
||||
// the test that checks if the values are inherited properly.
|
||||
@@ -284,6 +333,44 @@ TEST_F(NetworkTest, inheritanceSupport6) {
|
||||
&Network6::setRapidCommit,
|
||||
true, false);
|
||||
}
|
||||
{
|
||||
SCOPED_TRACE("ddns-send-updates");
|
||||
testNetworkInheritance<TestNetwork4>(&Network4::getDdnsSendUpdates,
|
||||
&Network4::setDdnsSendUpdates,
|
||||
false, true);
|
||||
}
|
||||
{
|
||||
SCOPED_TRACE("ddns-override-no-update");
|
||||
testNetworkInheritance<TestNetwork4>(&Network4::getDdnsOverrideNoUpdate,
|
||||
&Network4::setDdnsOverrideNoUpdate,
|
||||
false, true);
|
||||
}
|
||||
{
|
||||
SCOPED_TRACE("ddns-override-client-update");
|
||||
testNetworkInheritance<TestNetwork4>(&Network4::getDdnsOverrideClientUpdate,
|
||||
&Network4::setDdnsOverrideClientUpdate,
|
||||
false, true);
|
||||
}
|
||||
|
||||
{
|
||||
SCOPED_TRACE("ddns-replace-client-name");
|
||||
testNetworkInheritance<TestNetwork4>(&Network4::getDdnsReplaceClientNameMode,
|
||||
&Network4::setDdnsReplaceClientNameMode,
|
||||
D2ClientConfig::RCM_WHEN_PRESENT,
|
||||
D2ClientConfig::RCM_ALWAYS);
|
||||
}
|
||||
{
|
||||
SCOPED_TRACE("ddns-generated-prefix");
|
||||
testNetworkInheritance<TestNetwork4>(&Network4::getDdnsGeneratedPrefix,
|
||||
&Network4::setDdnsGeneratedPrefix,
|
||||
"np", "gp");
|
||||
}
|
||||
{
|
||||
SCOPED_TRACE("ddns-qualifying-suffix");
|
||||
testNetworkInheritance<TestNetwork4>(&Network4::getDdnsQualifyingSuffix,
|
||||
&Network4::setDdnsQualifyingSuffix,
|
||||
"ns", "gs");
|
||||
}
|
||||
|
||||
// Interface-id requires special type of test.
|
||||
boost::shared_ptr<TestNetwork6> net_child(new TestNetwork6());
|
||||
|
@@ -135,6 +135,12 @@ public:
|
||||
" \"calculate-tee-times\": true,"
|
||||
" \"t1-percent\": 0.345,"
|
||||
" \"t2-percent\": 0.721,"
|
||||
" \"ddns-send-updates\": true,"
|
||||
" \"ddns-override-no-update\": true,"
|
||||
" \"ddns-override-client-update\": true,"
|
||||
" \"ddns-replace-client-name\": \"always\","
|
||||
" \"ddns-generated-prefix\": \"prefix\","
|
||||
" \"ddns-qualifying-suffix\": \"example.com.\","
|
||||
" \"option-data\": ["
|
||||
" {"
|
||||
" \"name\": \"domain-name-servers\","
|
||||
@@ -246,6 +252,12 @@ TEST_F(SharedNetwork4ParserTest, parse) {
|
||||
EXPECT_EQ("10.0.0.1", network->getSiaddr().get().toText());
|
||||
EXPECT_EQ("example.org", network->getSname().get());
|
||||
EXPECT_EQ(Network::HR_OUT_OF_POOL, network->getHostReservationMode());
|
||||
EXPECT_TRUE(network->getDdnsSendUpdates().get());
|
||||
EXPECT_TRUE(network->getDdnsOverrideNoUpdate().get());
|
||||
EXPECT_TRUE(network->getDdnsOverrideClientUpdate().get());
|
||||
EXPECT_EQ(D2ClientConfig::RCM_ALWAYS, network->getDdnsReplaceClientNameMode().get());
|
||||
EXPECT_EQ("prefix", network->getDdnsGeneratedPrefix().get());
|
||||
EXPECT_EQ("example.com.", network->getDdnsQualifyingSuffix().get());
|
||||
|
||||
// Relay information.
|
||||
auto relay_info = network->getRelayInfo();
|
||||
@@ -445,6 +457,12 @@ public:
|
||||
" \"calculate-tee-times\": true,"
|
||||
" \"t1-percent\": 0.345,"
|
||||
" \"t2-percent\": 0.721,"
|
||||
" \"ddns-send-updates\": true,"
|
||||
" \"ddns-override-no-update\": true,"
|
||||
" \"ddns-override-client-update\": true,"
|
||||
" \"ddns-replace-client-name\": \"always\","
|
||||
" \"ddns-generated-prefix\": \"prefix\","
|
||||
" \"ddns-qualifying-suffix\": \"example.com.\","
|
||||
" \"option-data\": ["
|
||||
" {"
|
||||
" \"name\": \"dns-servers\","
|
||||
@@ -537,6 +555,12 @@ TEST_F(SharedNetwork6ParserTest, parse) {
|
||||
EXPECT_TRUE(network->getCalculateTeeTimes());
|
||||
EXPECT_EQ(0.345, network->getT1Percent());
|
||||
EXPECT_EQ(0.721, network->getT2Percent());
|
||||
EXPECT_TRUE(network->getDdnsSendUpdates().get());
|
||||
EXPECT_TRUE(network->getDdnsOverrideNoUpdate().get());
|
||||
EXPECT_TRUE(network->getDdnsOverrideClientUpdate().get());
|
||||
EXPECT_EQ(D2ClientConfig::RCM_ALWAYS, network->getDdnsReplaceClientNameMode().get());
|
||||
EXPECT_EQ("prefix", network->getDdnsGeneratedPrefix().get());
|
||||
EXPECT_EQ("example.com.", network->getDdnsQualifyingSuffix().get());
|
||||
|
||||
// Relay information.
|
||||
auto relay_info = network->getRelayInfo();
|
||||
|
@@ -66,6 +66,24 @@ TEST(SharedNetwork4Test, defaults) {
|
||||
|
||||
EXPECT_TRUE(network->getAuthoritative().unspecified());
|
||||
EXPECT_FALSE(network->getAuthoritative().get());
|
||||
|
||||
EXPECT_TRUE(network->getDdnsSendUpdates().unspecified());
|
||||
EXPECT_FALSE(network->getDdnsSendUpdates().get());
|
||||
|
||||
EXPECT_TRUE(network->getDdnsOverrideNoUpdate().unspecified());
|
||||
EXPECT_FALSE(network->getDdnsOverrideNoUpdate().get());
|
||||
|
||||
EXPECT_TRUE(network->getDdnsOverrideClientUpdate().unspecified());
|
||||
EXPECT_FALSE(network->getDdnsOverrideClientUpdate().get());
|
||||
|
||||
EXPECT_TRUE(network->getDdnsReplaceClientNameMode().unspecified());
|
||||
EXPECT_EQ(D2ClientConfig::RCM_NEVER, network->getDdnsReplaceClientNameMode().get());
|
||||
|
||||
EXPECT_TRUE(network->getDdnsGeneratedPrefix().unspecified());
|
||||
EXPECT_TRUE(network->getDdnsGeneratedPrefix().empty());
|
||||
|
||||
EXPECT_TRUE(network->getDdnsQualifyingSuffix().unspecified());
|
||||
EXPECT_TRUE(network->getDdnsQualifyingSuffix().empty());
|
||||
}
|
||||
|
||||
// This test verifies that shared network can be given a name and that
|
||||
@@ -679,6 +697,24 @@ TEST(SharedNetwork6Test, defaults) {
|
||||
|
||||
EXPECT_TRUE(network->getRapidCommit().unspecified());
|
||||
EXPECT_FALSE(network->getRapidCommit().get());
|
||||
|
||||
EXPECT_TRUE(network->getDdnsSendUpdates().unspecified());
|
||||
EXPECT_FALSE(network->getDdnsSendUpdates().get());
|
||||
|
||||
EXPECT_TRUE(network->getDdnsOverrideNoUpdate().unspecified());
|
||||
EXPECT_FALSE(network->getDdnsOverrideNoUpdate().get());
|
||||
|
||||
EXPECT_TRUE(network->getDdnsOverrideClientUpdate().unspecified());
|
||||
EXPECT_FALSE(network->getDdnsOverrideClientUpdate().get());
|
||||
|
||||
EXPECT_TRUE(network->getDdnsReplaceClientNameMode().unspecified());
|
||||
EXPECT_EQ(D2ClientConfig::RCM_NEVER, network->getDdnsReplaceClientNameMode().get());
|
||||
|
||||
EXPECT_TRUE(network->getDdnsGeneratedPrefix().unspecified());
|
||||
EXPECT_TRUE(network->getDdnsGeneratedPrefix().empty());
|
||||
|
||||
EXPECT_TRUE(network->getDdnsQualifyingSuffix().unspecified());
|
||||
EXPECT_TRUE(network->getDdnsQualifyingSuffix().empty());
|
||||
}
|
||||
|
||||
// This test verifies that shared network can be given a name and that
|
||||
|
@@ -115,6 +115,24 @@ TEST(Subnet4Test, defaults) {
|
||||
EXPECT_TRUE(subnet.get4o6().getSubnet4o6().unspecified());
|
||||
EXPECT_TRUE(subnet.get4o6().getSubnet4o6().get().first.isV6Zero());
|
||||
EXPECT_EQ(128, subnet.get4o6().getSubnet4o6().get().second);
|
||||
|
||||
EXPECT_TRUE(subnet.getDdnsSendUpdates().unspecified());
|
||||
EXPECT_FALSE(subnet.getDdnsSendUpdates().get());
|
||||
|
||||
EXPECT_TRUE(subnet.getDdnsOverrideNoUpdate().unspecified());
|
||||
EXPECT_FALSE(subnet.getDdnsOverrideNoUpdate().get());
|
||||
|
||||
EXPECT_TRUE(subnet.getDdnsOverrideClientUpdate().unspecified());
|
||||
EXPECT_FALSE(subnet.getDdnsOverrideClientUpdate().get());
|
||||
|
||||
EXPECT_TRUE(subnet.getDdnsReplaceClientNameMode().unspecified());
|
||||
EXPECT_EQ(D2ClientConfig::RCM_NEVER, subnet.getDdnsReplaceClientNameMode().get());
|
||||
|
||||
EXPECT_TRUE(subnet.getDdnsGeneratedPrefix().unspecified());
|
||||
EXPECT_TRUE(subnet.getDdnsGeneratedPrefix().empty());
|
||||
|
||||
EXPECT_TRUE(subnet.getDdnsQualifyingSuffix().unspecified());
|
||||
EXPECT_TRUE(subnet.getDdnsQualifyingSuffix().empty());
|
||||
}
|
||||
|
||||
// Checks that the subnet id can be either autogenerated or set to an
|
||||
@@ -819,6 +837,24 @@ TEST(SharedNetwork6Test, defaults) {
|
||||
|
||||
EXPECT_TRUE(subnet.getRapidCommit().unspecified());
|
||||
EXPECT_FALSE(subnet.getRapidCommit().get());
|
||||
|
||||
EXPECT_TRUE(subnet.getDdnsSendUpdates().unspecified());
|
||||
EXPECT_FALSE(subnet.getDdnsSendUpdates().get());
|
||||
|
||||
EXPECT_TRUE(subnet.getDdnsOverrideNoUpdate().unspecified());
|
||||
EXPECT_FALSE(subnet.getDdnsOverrideNoUpdate().get());
|
||||
|
||||
EXPECT_TRUE(subnet.getDdnsOverrideClientUpdate().unspecified());
|
||||
EXPECT_FALSE(subnet.getDdnsOverrideClientUpdate().get());
|
||||
|
||||
EXPECT_TRUE(subnet.getDdnsReplaceClientNameMode().unspecified());
|
||||
EXPECT_EQ(D2ClientConfig::RCM_NEVER, subnet.getDdnsReplaceClientNameMode().get());
|
||||
|
||||
EXPECT_TRUE(subnet.getDdnsGeneratedPrefix().unspecified());
|
||||
EXPECT_TRUE(subnet.getDdnsGeneratedPrefix().empty());
|
||||
|
||||
EXPECT_TRUE(subnet.getDdnsQualifyingSuffix().unspecified());
|
||||
EXPECT_TRUE(subnet.getDdnsQualifyingSuffix().empty());
|
||||
}
|
||||
|
||||
// Checks that the subnet id can be either autogenerated or set to an
|
||||
|
Reference in New Issue
Block a user