2
0
mirror of https://gitlab.isc.org/isc-projects/kea synced 2025-08-22 18:08:16 +00:00
kea/src/lib/dhcpsrv/parsers/base_network_parser.h

303 lines
12 KiB
C
Raw Normal View History

// Copyright (C) 2019-2025 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
#ifndef BASE_NETWORK_PARSER_H
#define BASE_NETWORK_PARSER_H
#include <cc/data.h>
#include <cc/simple_parser.h>
#include <dhcpsrv/cfg_globals.h>
#include <dhcpsrv/network.h>
namespace isc {
namespace dhcp {
/// @brief Common configuration parser for shared networks
/// and subnets.
class BaseNetworkParser : public data::SimpleParser {
protected:
/// @brief Parses common parameters
///
/// The parsed parameters are:
/// - renew-timer,
/// - rebind-timer,
2020-04-02 22:02:38 +02:00
/// - valid-lifetime,
/// - store-extended-info
2020-11-11 19:06:06 +02:00
/// - reservations-global
/// - reservations-in-subnet
/// - reservations-out-of-pool
///
/// @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 parseCommon(const data::ConstElementPtr& network_data,
NetworkPtr& network);
/// @brief Parses parameters related to "percent" timers settings.
///
/// The parsed parameters are:
/// - calculate-tee-times,
/// - t1-percent,
/// - t2-percent.
///
/// @param network_data Data element holding network configuration
/// to be parsed.
/// @param [out] network Pointer to a network in which parsed data is
/// to be stored.
///
/// @throw DhcpConfigError if configuration of these parameters is
/// invalid.
void parseTeePercents(const data::ConstElementPtr& network_data,
NetworkPtr& network);
/// @brief Parses parameters related to lease cache settings.
///
/// The parsed parameters are:
/// - cache-threshold,
2020-10-02 17:10:31 +02:00
/// - cache-max-age.
///
/// @param network_data Data element holding network configuration
/// to be parsed.
/// @param [out] network Pointer to a network in which parsed data is
/// to be stored.
///
/// @throw DhcpConfigError if configuration of these parameters is
/// invalid.
void parseCacheParams(const data::ConstElementPtr& network_data,
2022-11-21 17:30:31 +01:00
NetworkPtr& network);
[#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.
2019-09-26 08:33:41 -04:00
/// @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
[#2276] Initial impl ddns-resolution-conflict-mode New Files: src/bin/d2/check_exists_add.cc src/bin/d2/check_exists_add.h src/bin/d2/check_exists_remove.cc src/bin/d2/check_exists_remove.h src/bin/d2/simple_add_without_dhcid.cc src/bin/d2/simple_add_without_dhcid.h src/bin/d2/simple_remove_without_dhcid.cc src/bin/d2/simple_remove_without_dhcid.h src/bin/d2/tests/check_exists_add_unittests.cc src/bin/d2/tests/check_exists_remove_unittests.cc src/bin/d2/tests/simple_add_without_dhcid_unittests.cc src/bin/d2/tests/simple_remove_without_dhcid_unittests.cc Modified: doc/examples/kea4/all-keys.json doc/examples/kea4/with-ddns.json doc/examples/kea6/all-keys.json doc/examples/kea6/with-ddns.json src/bin/d2/Makefile.am src/bin/d2/check_exists_add.cc src/bin/d2/check_exists_add.h src/bin/d2/check_exists_remove.cc src/bin/d2/check_exists_remove.h src/bin/d2/d2_update_mgr.cc src/bin/d2/simple_add_without_dhcid.cc src/bin/d2/simple_add_without_dhcid.h src/bin/d2/simple_remove_without_dhcid.cc src/bin/d2/simple_remove_without_dhcid.h src/bin/d2/tests/Makefile.am src/bin/d2/tests/check_exists_add_unittests.cc src/bin/d2/tests/check_exists_remove_unittests.cc src/bin/d2/tests/d2_process_unittests.cc src/bin/d2/tests/d2_queue_mgr_unittests.cc src/bin/d2/tests/d2_update_mgr_unittests.cc src/bin/d2/tests/nc_add_unittests.cc src/bin/d2/tests/nc_remove_unittests.cc src/bin/d2/tests/simple_add_unittests.cc src/bin/d2/tests/simple_add_without_dhcid_unittests.cc src/bin/d2/tests/simple_remove_unittests.cc src/bin/d2/tests/simple_remove_without_dhcid_unittests.cc src/bin/dhcp4/dhcp4_lexer.cc src/bin/dhcp4/dhcp4_lexer.ll src/bin/dhcp4/dhcp4_parser.cc src/bin/dhcp4/dhcp4_parser.h src/bin/dhcp4/dhcp4_parser.yy src/bin/dhcp4/json_config_parser.cc src/bin/dhcp4/location.hh src/bin/dhcp4/parser_context.h src/bin/dhcp4/tests/config_parser_unittest.cc src/bin/dhcp4/tests/d2_unittest.cc src/bin/dhcp4/tests/fqdn_unittest.cc src/bin/dhcp4/tests/get_config_unittest.cc src/bin/dhcp6/dhcp6_lexer.cc src/bin/dhcp6/dhcp6_lexer.ll src/bin/dhcp6/dhcp6_parser.cc src/bin/dhcp6/dhcp6_parser.h src/bin/dhcp6/dhcp6_parser.yy src/bin/dhcp6/dhcp6_srv.cc src/bin/dhcp6/json_config_parser.cc src/bin/dhcp6/location.hh src/bin/dhcp6/parser_context.h src/bin/dhcp6/tests/config_parser_unittest.cc src/bin/dhcp6/tests/d2_unittest.cc src/bin/dhcp6/tests/fqdn_unittest.cc src/bin/dhcp6/tests/get_config_unittest.cc src/lib/d2srv/testutils/nc_test_utils.cc src/lib/d2srv/testutils/nc_test_utils.h src/lib/dhcp_ddns/ncr_msg.cc src/lib/dhcp_ddns/ncr_msg.h src/lib/dhcp_ddns/tests/ncr_udp_unittests.cc src/lib/dhcp_ddns/tests/ncr_unittests.cc src/lib/dhcpsrv/cfg_globals.cc src/lib/dhcpsrv/cfg_globals.h src/lib/dhcpsrv/ncr_generator.cc src/lib/dhcpsrv/network.cc src/lib/dhcpsrv/network.h src/lib/dhcpsrv/parsers/base_network_parser.cc src/lib/dhcpsrv/parsers/base_network_parser.h src/lib/dhcpsrv/parsers/simple_parser4.cc src/lib/dhcpsrv/parsers/simple_parser6.cc src/lib/dhcpsrv/srv_config.cc src/lib/dhcpsrv/srv_config.h src/lib/dhcpsrv/tests/d2_udp_unittest.cc src/lib/dhcpsrv/tests/dhcp_parsers_unittest.cc src/lib/dhcpsrv/tests/ncr_generator_unittest.cc src/lib/dhcpsrv/tests/network_unittest.cc src/lib/dhcpsrv/tests/srv_config_unittest.cc
2023-05-31 13:51:19 -04:00
/// - ddns-use-conflict-resolution (retained for backward compatibility)
/// - ddns-update-on-renew
/// - ddns-ttl-percent
[#2276] Initial impl ddns-resolution-conflict-mode New Files: src/bin/d2/check_exists_add.cc src/bin/d2/check_exists_add.h src/bin/d2/check_exists_remove.cc src/bin/d2/check_exists_remove.h src/bin/d2/simple_add_without_dhcid.cc src/bin/d2/simple_add_without_dhcid.h src/bin/d2/simple_remove_without_dhcid.cc src/bin/d2/simple_remove_without_dhcid.h src/bin/d2/tests/check_exists_add_unittests.cc src/bin/d2/tests/check_exists_remove_unittests.cc src/bin/d2/tests/simple_add_without_dhcid_unittests.cc src/bin/d2/tests/simple_remove_without_dhcid_unittests.cc Modified: doc/examples/kea4/all-keys.json doc/examples/kea4/with-ddns.json doc/examples/kea6/all-keys.json doc/examples/kea6/with-ddns.json src/bin/d2/Makefile.am src/bin/d2/check_exists_add.cc src/bin/d2/check_exists_add.h src/bin/d2/check_exists_remove.cc src/bin/d2/check_exists_remove.h src/bin/d2/d2_update_mgr.cc src/bin/d2/simple_add_without_dhcid.cc src/bin/d2/simple_add_without_dhcid.h src/bin/d2/simple_remove_without_dhcid.cc src/bin/d2/simple_remove_without_dhcid.h src/bin/d2/tests/Makefile.am src/bin/d2/tests/check_exists_add_unittests.cc src/bin/d2/tests/check_exists_remove_unittests.cc src/bin/d2/tests/d2_process_unittests.cc src/bin/d2/tests/d2_queue_mgr_unittests.cc src/bin/d2/tests/d2_update_mgr_unittests.cc src/bin/d2/tests/nc_add_unittests.cc src/bin/d2/tests/nc_remove_unittests.cc src/bin/d2/tests/simple_add_unittests.cc src/bin/d2/tests/simple_add_without_dhcid_unittests.cc src/bin/d2/tests/simple_remove_unittests.cc src/bin/d2/tests/simple_remove_without_dhcid_unittests.cc src/bin/dhcp4/dhcp4_lexer.cc src/bin/dhcp4/dhcp4_lexer.ll src/bin/dhcp4/dhcp4_parser.cc src/bin/dhcp4/dhcp4_parser.h src/bin/dhcp4/dhcp4_parser.yy src/bin/dhcp4/json_config_parser.cc src/bin/dhcp4/location.hh src/bin/dhcp4/parser_context.h src/bin/dhcp4/tests/config_parser_unittest.cc src/bin/dhcp4/tests/d2_unittest.cc src/bin/dhcp4/tests/fqdn_unittest.cc src/bin/dhcp4/tests/get_config_unittest.cc src/bin/dhcp6/dhcp6_lexer.cc src/bin/dhcp6/dhcp6_lexer.ll src/bin/dhcp6/dhcp6_parser.cc src/bin/dhcp6/dhcp6_parser.h src/bin/dhcp6/dhcp6_parser.yy src/bin/dhcp6/dhcp6_srv.cc src/bin/dhcp6/json_config_parser.cc src/bin/dhcp6/location.hh src/bin/dhcp6/parser_context.h src/bin/dhcp6/tests/config_parser_unittest.cc src/bin/dhcp6/tests/d2_unittest.cc src/bin/dhcp6/tests/fqdn_unittest.cc src/bin/dhcp6/tests/get_config_unittest.cc src/lib/d2srv/testutils/nc_test_utils.cc src/lib/d2srv/testutils/nc_test_utils.h src/lib/dhcp_ddns/ncr_msg.cc src/lib/dhcp_ddns/ncr_msg.h src/lib/dhcp_ddns/tests/ncr_udp_unittests.cc src/lib/dhcp_ddns/tests/ncr_unittests.cc src/lib/dhcpsrv/cfg_globals.cc src/lib/dhcpsrv/cfg_globals.h src/lib/dhcpsrv/ncr_generator.cc src/lib/dhcpsrv/network.cc src/lib/dhcpsrv/network.h src/lib/dhcpsrv/parsers/base_network_parser.cc src/lib/dhcpsrv/parsers/base_network_parser.h src/lib/dhcpsrv/parsers/simple_parser4.cc src/lib/dhcpsrv/parsers/simple_parser6.cc src/lib/dhcpsrv/srv_config.cc src/lib/dhcpsrv/srv_config.h src/lib/dhcpsrv/tests/d2_udp_unittest.cc src/lib/dhcpsrv/tests/dhcp_parsers_unittest.cc src/lib/dhcpsrv/tests/ncr_generator_unittest.cc src/lib/dhcpsrv/tests/network_unittest.cc src/lib/dhcpsrv/tests/srv_config_unittest.cc
2023-05-31 13:51:19 -04:00
/// - ddns-conflict-resolution-mode
[#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.
2019-09-26 08:33:41 -04:00
///
/// @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);
2022-11-21 17:30:31 +01:00
/// @brief Parses parameters pertaining to allocator selection.
///
/// The parsed parameters are:
/// - allocator
///
/// @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 parseAllocatorParams(const data::ConstElementPtr& network_data,
NetworkPtr& network);
/// @brief Parses parameters pertaining to prefix delegation allocator
/// selection.
///
/// The parsed parameters are:
/// - pd-allocator
///
/// @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 parsePdAllocatorParams(const data::ConstElementPtr& network_data,
Network6Ptr& network);
/// @brief Parses parameter related to adaptive lease time.
///
/// The parsed parameter is:
/// - adaptive-lease-time-threshold.
///
/// @param network_data Data element holding network configuration
/// to be parsed.
/// @param [out] network Pointer to a network in which parsed data is
/// to be stored.
///
/// @throw DhcpConfigError if configuration of this parameter is
/// invalid.
void parseAdaptiveLeaseTimeParam(const data::ConstElementPtr& network_data,
NetworkPtr& network);
/// @brief Parses offer-lifetime parameter (v4 only)
///
/// @param network_data Data element holding shared network
/// configuration to be parsed.
/// @param [out] network Pointer to the v4 network in which parsed data is
/// to be stored.
/// @throw DhcpConfigError if the value is less than 0.
void parseOfferLft(const data::ConstElementPtr& network_data,
Network4Ptr& network);
public:
typedef std::function<void(const isc::dhcp::ClientClass&)> ClassAdderFunc;
/// @brief Fetches the element for either 'evaluate-additional-classes' or deprecated
/// 'require-client-classes'
///
/// @param params configuration element tree to search.
/// @param adder_func function to add class names to an object's additional class list.
/// @throw DhcpConfigError if both entries are present.
static void getAdditionalClassesElem(data::ConstElementPtr params,
ClassAdderFunc adder_func);
[#3592] modified in lib dhcp and dhcpsrv src/lib/dhcp/classify.* ClientClasses:intersects() - new function src/lib/dhcp/tests/classify_unittest.cc TEST(ClassifyTest, ClientClassesIntersects) - new test src/lib/dhcpsrv/cfg_option.cc OptionDescriptor::allowedForClientClasses() use inet intersects() function src/lib/dhcpsrv/dhcpsrv_messages.mes DHCPSRV_CLIENT_CLASS_DEPRECATED - new message src/lib/dhcpsrv/network.* Network - replaced client_class_ string with client_classes_ container Network::clientSupported() - uses new intersects() function Network::allowClientClass() - modified to insert Network::toElement() - updated src/lib/dhcpsrv/parsers/base_network_parser.* BaseNetworkParser::getClientClassesElem() - new function src/lib/dhcpsrv/parsers/dhcp_parsers.cc src/lib/dhcpsrv/parsers/shared_network_parser.cc Updated parsers to use BaseNetworkParser::getClientClassesElem() src/lib/dhcpsrv/parsers/simple_parser4.cc src/lib/dhcpsrv/parsers/simple_parser6.cc Added client-classes src/lib/dhcpsrv/pool.* replaced client_class_ string with client_classes_ container Pool::clientSupported()- use new intersects() function src/lib/dhcpsrv/shared_network.cc ShareNetwork::getPreferredSubnet() - updated src/lib/dhcpsrv/tests/cfg_subnets4_unittest.cc src/lib/dhcpsrv/tests/cfg_subnets6_unittest.cc Updated tests src/lib/dhcpsrv/tests/dhcp_parsers_unittest.cc TEST_F(DhcpParserTest, deprecatedClientClassSubnet4) TEST_F(DhcpParserTest, deprecatedClientClassSubnet6) { TEST_F(DhcpParserTest, deprecatedClientClassPool4) { TEST_F(DhcpParserTest, deprecatedClientClassPool6) { src/lib/dhcpsrv/tests/network_unittest.cc Removed inheritance support check src/lib/dhcpsrv/tests/pool_unittest.cc Updated tests src/lib/dhcpsrv/tests/shared_network_parser_unittest.cc TEST_F(SharedNetwork4ParserTest, deprecatedClientClass) TEST_F(SharedNetwork6ParserTest, deprecatedClientClass) src/lib/dhcpsrv/tests/shared_network_unittest.cc src/lib/dhcpsrv/tests/subnet_unittest.cc Updated tests src/lib/dhcpsrv/testutils/generic_cb_dhcp4_unittest.cc src/lib/dhcpsrv/testutils/generic_cb_dhcp6_unittest.cc Updated tests
2024-10-30 14:31:18 -04:00
/// @brief Fetches the element for either 'client-classes' or deprecated
/// 'client-class'
///
/// @param params configuration element tree to search.
/// @param adder_func function to add class names to an object's client class list.
/// @throw DhcpConfigError if both entries are present.
static void getClientClassesElem(data::ConstElementPtr params,
ClassAdderFunc adder_func);
/// @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
/// - ddns-use-conflict-resolution (retained for backward compatibility)
/// - ddns-update-on-renew
/// - ddns-ttl-percent
/// - ddns-conflict-resolution-mode
/// - ddns-ttl
/// - ddns-ttl-min
/// - ddns-ttl-max
///
/// Owner types are expected to have public setters for each of these
/// parameters.
///
/// @tparam DdnsOwnerPtr pointer to the class type that owns the DDNS parameters.
/// @param config configuration element holding the DDNS parameters to parse.
/// @param owner Pointer to the DDNS parameter owner object into which parsed values
/// should be stored.
/// @throw BadValue for various invalid values.
template<typename DdnsOwnerTypePtr>
void parseDdnsParameters(const data::ConstElementPtr& config,
DdnsOwnerTypePtr owner) {
if (config->contains("ddns-send-updates")) {
owner->setDdnsSendUpdates(getBoolean(config, "ddns-send-updates"));
}
if (config->contains("ddns-override-no-update")) {
owner->setDdnsOverrideNoUpdate(getBoolean(config, "ddns-override-no-update"));
}
if (config->contains("ddns-override-client-update")) {
owner->setDdnsOverrideClientUpdate(getBoolean(config, "ddns-override-client-update"));
}
if (config->contains("ddns-replace-client-name")) {
owner->setDdnsReplaceClientNameMode(getAndConvert<D2ClientConfig::ReplaceClientNameMode,
D2ClientConfig::stringToReplaceClientNameMode>
(config, "ddns-replace-client-name",
"ReplaceClientName mode"));
}
if (config->contains("ddns-generated-prefix")) {
owner->setDdnsGeneratedPrefix(getString(config, "ddns-generated-prefix"));
}
if (config->contains("ddns-qualifying-suffix")) {
owner->setDdnsQualifyingSuffix(getString(config, "ddns-qualifying-suffix"));
}
std::string hostname_char_set;
if (config->contains("hostname-char-set")) {
hostname_char_set = getString(config, "hostname-char-set");
owner->setHostnameCharSet(hostname_char_set);
}
std::string hostname_char_replacement;
if (config->contains("hostname-char-replacement")) {
hostname_char_replacement = getString(config, "hostname-char-replacement");
owner->setHostnameCharReplacement(hostname_char_replacement);
}
// We need to validate sanitizer values here so we can detect problems and
// cause a configuration. We don't retain the compilation because it's not
// something we can inherit.
if (!hostname_char_set.empty()) {
try {
util::str::StringSanitizerPtr sanitizer(
new util::str::StringSanitizer(hostname_char_set,
hostname_char_replacement));
} catch (const std::exception& ex) {
isc_throw(BadValue, "hostname-char-set '" << hostname_char_set
<< "' is not a valid regular expression");
}
}
if (config->contains("ddns-update-on-renew")) {
owner->setDdnsUpdateOnRenew(getBoolean(config, "ddns-update-on-renew"));
}
bool has_ddns_ttl = false;
uint32_t ddns_ttl = 0;
if (config->contains("ddns-ttl")) {
ddns_ttl = getInteger(config, "ddns-ttl");
owner->setDdnsTtl(ddns_ttl);
has_ddns_ttl = true;
}
if (config->contains("ddns-ttl-percent")) {
if (has_ddns_ttl) {
isc_throw(BadValue, "cannot specify both ddns-ttl-percent and ddns-ttl");
}
owner->setDdnsTtlPercent(getDouble(config, "ddns-ttl-percent"));
}
uint32_t ddns_ttl_min = 0;
if (config->contains("ddns-ttl-min")) {
if (has_ddns_ttl) {
isc_throw(BadValue, "cannot specify both ddns-ttl-min and ddns-ttl");
}
ddns_ttl_min = getInteger(config, "ddns-ttl-min");
owner->setDdnsTtlMin(ddns_ttl_min);
}
if (config->contains("ddns-ttl-max")) {
if (has_ddns_ttl) {
isc_throw(BadValue, "cannot specify both ddns-ttl-max and ddns-ttl");
}
uint32_t ddns_ttl_max = getInteger(config, "ddns-ttl-max");
if (ddns_ttl_max < ddns_ttl_min) {
isc_throw(BadValue, "ddns-ttl-max: " << ddns_ttl_max
<< " must be greater than ddns-ttl-min: " << ddns_ttl_min);
}
owner->setDdnsTtlMax(ddns_ttl_max);
}
// For backward compatibility, ddns-conflict-resolution-mode is optional.
if (config->contains("ddns-conflict-resolution-mode")) {
owner->setDdnsConflictResolutionMode(getString(config,
"ddns-conflict-resolution-mode"));
}
}
};
} // end of namespace isc::dhcp
} // end of namespace isc
#endif