33#include <boost/make_shared.hpp>
46 : sequence_(0), cfg_iface_(new
CfgIface()),
57 decline_timer_(0), echo_v4_client_id_(true), dhcp4o6_port_(0),
60 lenient_option_parsing_(false), ignore_dhcp_server_identifier_(false),
61 ignore_rai_link_selection_(false), exclude_first_last_24_(false),
62 reservations_lookup_first_(false) {
66 : sequence_(sequence), cfg_iface_(new
CfgIface()),
77 decline_timer_(0), echo_v4_client_id_(true), dhcp4o6_port_(0),
80 lenient_option_parsing_(false), ignore_dhcp_server_identifier_(false),
81 ignore_rai_link_selection_(false), exclude_first_last_24_(false),
82 reservations_lookup_first_(false) {
91 if (subnets_num > 0) {
92 s <<
"added IPv4 subnets: " << subnets_num;
94 s <<
"no IPv4 subnets!";
101 if (subnets_num > 0) {
102 s <<
"added IPv6 subnets: " << subnets_num;
104 s <<
"no IPv6 subnets!";
111 s <<
"DDNS: " << (ddns_enabled ?
"enabled" :
"disabled") <<
"; ";
114 if (s.tellp() ==
static_cast<std::streampos
>(0)) {
115 s <<
"no config details available";
118 std::string summary = s.str();
119 size_t last_separator_pos = summary.find_last_of(
";");
120 if (last_separator_pos == summary.length() - 2) {
121 summary.erase(last_separator_pos);
136 new_config.cfg_iface_.reset(
new CfgIface(*cfg_iface_));
138 cfg_option_def_->copyTo(*new_config.cfg_option_def_);
139 cfg_option_->copyTo(*new_config.cfg_option_);
145 new_config.hooks_config_.clear();
147 for (
auto const& it : hooks_config_.
get()) {
148 new_config.hooks_config_.add(it.first, it.second);
161 if ((*cfg_iface_ != *other.cfg_iface_) ||
162 (*cfg_option_def_ != *other.cfg_option_def_) ||
163 (*cfg_option_ != *other.cfg_option_) ||
164 (*class_dictionary_ != *other.class_dictionary_) ||
165 (*d2_client_config_ != *other.d2_client_config_)) {
171 if (hooks_config_.
get().size() != other.hooks_config_.get().size()) {
175 return (hooks_config_.
equal(other.hooks_config_));
187 mergeGlobals(other_srv_config);
190 mergeGlobalMaps(other_srv_config);
196 cfg_option_def_->merge(*other_srv_config.getCfgOptionDef());
199 cfg_option_->merge(cfg_option_def_, *other_srv_config.getCfgOption());
201 if (!other_srv_config.getClientClassDictionary()->empty()) {
211 merge4(other_srv_config);
213 merge6(other_srv_config);
215 }
catch (
const std::bad_cast&) {
217 " of the SrvConfig as an argument of the call to"
218 " SrvConfig::merge()");
225 cfg_shared_networks4_->merge(cfg_option_def_, *(other.getCfgSharedNetworks4()));
229 *(other.getCfgSubnets4()));
235SrvConfig::merge6(SrvConfig& other) {
237 cfg_shared_networks6_->merge(cfg_option_def_, *(other.getCfgSharedNetworks6()));
241 *(other.getCfgSubnets6()));
247SrvConfig::mergeGlobals(SrvConfig& other) {
258 std::string name = merged_global.first;
261 if (name ==
"decline-probation-period") {
263 }
else if (name ==
"echo-client-id") {
267 }
else if (name ==
"dhcp4o6-port") {
269 }
else if (name ==
"server-tag") {
271 }
else if (name ==
"ip-reservations-unique") {
273 }
else if (name ==
"reservations-lookup-first") {
276 }
catch(
const std::exception& ex) {
278 <<
" explicit global:" << name);
284SrvConfig::mergeGlobalMaps(SrvConfig& other) {
287 config->set(other_global.first, other_global.second);
289 std::string parameter_name;
292 parameter_name =
"compatibility";
294 CompatibilityParser parser;
295 parser.parse(compatibility, *
this);
298 ElementPtr dhcp_ddns = boost::const_pointer_cast<Element>(config->get(
"dhcp-ddns"));
299 parameter_name =
"dhcp-ddns";
303 D2ClientConfigParser parser;
306 d2_client_cfg = parser.parse(dhcp_ddns);
307 if (!d2_client_cfg) {
308 d2_client_cfg.reset(
new D2ClientConfig());
310 d2_client_cfg->validateContents();
314 ConstElementPtr expiration_cfg = config->get(
"expired-leases-processing");
315 parameter_name =
"expired-leases-processing";
316 if (expiration_cfg) {
317 ExpirationConfigParser parser;
321 ElementPtr multi_threading = boost::const_pointer_cast<Element>(config->get(
"multi-threading"));
322 parameter_name =
"multi-threading";
323 if (multi_threading) {
329 MultiThreadingConfigParser parser;
330 parser.parse(*
this, multi_threading);
333 bool multi_threading_enabled =
true;
334 uint32_t thread_count = 0;
335 uint32_t queue_size = 0;
337 multi_threading_enabled, thread_count, queue_size);
338 ElementPtr sanity_checks = boost::const_pointer_cast<Element>(config->get(
"sanity-checks"));
339 parameter_name =
"sanity-checks";
346 SanityChecksParser parser;
347 parser.parse(*
this, sanity_checks);
351 parameter_name =
"server-id";
353 DUIDConfigParser parser;
355 parser.parse(cfg, server_id);
358 ElementPtr queue_control = boost::const_pointer_cast<Element>(config->get(
"dhcp-queue-control"));
359 parameter_name =
"dhcp-queue-control";
366 DHCPQueueControlParser parser;
390 uint32_t max_samples = 0;
392 max_samples = samples->intValue();
393 stats_mgr.setMaxSampleCountDefault(max_samples);
394 if (max_samples != 0) {
395 stats_mgr.setMaxSampleCountAll(max_samples);
401 int64_t time_duration = duration->intValue();
402 auto max_age = std::chrono::seconds(time_duration);
403 stats_mgr.setMaxSampleAgeDefault(max_age);
404 if (max_samples == 0) {
405 stats_mgr.setMaxSampleAgeAll(max_age);
430 for (
auto const& def_value : defaults) {
442 switch (def_value.type_) {
449 int int_value = boost::lexical_cast<int>(def_value.value_);
452 catch (
const std::exception& ex) {
454 "Internal error. Integer value expected for: "
455 << def_value.name_ <<
", value is: "
456 << def_value.value_ );
463 if (def_value.value_ == std::string(
"true")) {
465 }
else if (def_value.value_ == std::string(
"false")) {
469 "Internal error. Boolean value for "
470 << def_value.name_ <<
" specified as "
471 << def_value.value_ <<
", expected true or false");
477 double dbl_value = boost::lexical_cast<double>(def_value.value_);
484 "Internal error. Incorrect default value type for "
497 const std::map<std::string, ConstElementPtr>& values = config->mapValue();
498 for (
auto const& value : values) {
512 value = has_value->intValue();
515 uint32_t min_value = 0;
518 min_value = has_min->intValue();
521 uint32_t max_value = 0;
524 max_value = has_max->intValue();
527 if (!has_value && !has_min && !has_max) {
531 if (!has_min && !has_max) {
534 }
else if (!has_min) {
537 }
else if (!has_max) {
541 }
else if (has_min) {
548 << name <<
" but no " << name <<
" (default)");
556 if (min_value > max_value) {
557 if (has_min && has_max) {
559 << min_value <<
") is not less than max-" << name <<
" ("
560 << max_value <<
")");
561 }
else if (has_min) {
564 << min_value <<
") is not less than (default) " << name
565 <<
" (" << value <<
")");
569 <<
" (" << value <<
") is not less than max-" << name
570 <<
" (" << max_value <<
")");
575 if ((value < min_value) || (value > max_value)) {
577 << value <<
") is not between min-" << name <<
" ("
578 << min_value <<
") and max-" << name <<
" ("
579 << max_value <<
")");
585 const std::string& name)
const {
592 bool new_value =
true;
594 has_value = target_config.getConfiguredGlobal(name);
598 value = has_value->intValue();
601 uint32_t min_value = 0;
605 has_min = target_config.getConfiguredGlobal(
"min-" + name);
609 min_value = has_min->intValue();
612 uint32_t max_value = 0;
616 has_max = target_config.getConfiguredGlobal(
"max-" + name);
620 max_value = has_max->intValue();
623 if (!has_value && !has_min && !has_max) {
627 if (!has_min && !has_max) {
630 }
else if (!has_min) {
633 }
else if (!has_max) {
637 }
else if (has_min) {
644 << name <<
" but no " << name <<
" (default)");
652 if (min_value > max_value) {
653 if (has_min && has_max) {
654 std::string from_min = (new_min ?
"new" :
"previous");
655 std::string from_max = (new_max ?
"new" :
"previous");
657 <<
" min-" << name <<
" ("
658 << min_value <<
") is not less than "
659 << from_max <<
" max-" << name
660 <<
" (" << max_value <<
")");
661 }
else if (has_min) {
663 std::string from_min = (new_min ?
"new" :
"previous");
664 std::string from_value = (new_value ?
"new" :
"previous");
666 <<
" min-" << name <<
" ("
667 << min_value <<
") is not less than " << from_value
668 <<
" (default) " << name
669 <<
" (" << value <<
")");
672 std::string from_max = (new_max ?
"new" :
"previous");
673 std::string from_value = (new_value ?
"new" :
"previous");
675 <<
" (default) " << name
676 <<
" (" << value <<
") is not less than " << from_max
677 <<
" max-" << name <<
" (" << max_value <<
")");
682 if ((value < min_value) || (value > max_value)) {
683 std::string from_value = (new_value ?
"new" :
"previous");
684 std::string from_min = (new_min ?
"new" :
"previous");
685 std::string from_max = (new_max ?
"new" :
"previous");
687 <<
" (default) " << name <<
" ("
688 << value <<
") is not between " << from_min
689 <<
" min-" << name <<
" (" << min_value
690 <<
") and " << from_max <<
" max-"
691 << name <<
" (" << max_value <<
")");
704 ElementPtr dhcp = configured_globals_->toElement();
708 if (!loggers_info.empty()) {
711 for (LoggingInfoStorage::const_iterator logger =
712 loggers_info.cbegin();
713 logger != loggers_info.cend(); ++logger) {
714 loggers->add(logger->toElement());
716 dhcp->set(
"loggers", loggers);
723 if (family == AF_INET6) {
726 if (!datadir.unspecified()) {
737 compatibility->set(
"ignore-dhcp-server-identifier",
Element::create(
true));
740 compatibility->set(
"ignore-rai-link-selection",
Element::create(
true));
745 if (compatibility->size() > 0) {
746 dhcp->set(
"compatibility", compatibility);
750 dhcp->set(
"decline-probation-period",
753 if (family == AF_INET) {
757 dhcp->set(
"dhcp4o6-port",
760 dhcp->set(
"dhcp-ddns", d2_client_config_->toElement());
762 dhcp->set(
"interfaces-config", cfg_iface_->toElement());
764 dhcp->set(
"option-def", cfg_option_def_->toElement());
766 dhcp->set(
"option-data", cfg_option_->toElement());
779 std::vector<ElementPtr> sn_list;
781 if (family == AF_INET) {
785 for (
auto const& subnet : *subnets) {
788 subnet->getSharedNetwork(network);
793 sn_list.push_back(subnet_cfg);
794 plain_subnets->add(subnet_cfg);
796 dhcp->set(
"subnet4", plain_subnets);
799 ElementPtr shared_networks = cfg_shared_networks4_->toElement();
800 dhcp->set(
"shared-networks", shared_networks);
803 const std::vector<ElementPtr> networks = shared_networks->listValue();
804 for (
auto const& network : networks) {
805 const std::vector<ElementPtr> sh_list =
806 network->get(
"subnet4")->listValue();
807 for (
auto const& subnet : sh_list) {
808 sn_list.push_back(subnet);
816 for (
auto const& subnet : *subnets) {
819 subnet->getSharedNetwork(network);
824 sn_list.push_back(subnet_cfg);
825 plain_subnets->add(subnet_cfg);
827 dhcp->set(
"subnet6", plain_subnets);
830 ElementPtr shared_networks = cfg_shared_networks6_->toElement();
831 dhcp->set(
"shared-networks", shared_networks);
834 const std::vector<ElementPtr> networks = shared_networks->listValue();
835 for (
auto const& network : networks) {
836 const std::vector<ElementPtr> sh_list =
837 network->get(
"subnet6")->listValue();
838 for (
auto const& subnet : sh_list) {
839 sn_list.push_back(subnet);
850 if (global_resvs->size() > 0) {
851 dhcp->set(
"reservations", global_resvs);
855 for (
auto const& subnet : sn_list) {
860 SubnetID subnet_id =
id->intValue();
862 subnet->set(
"reservations", resvs);
867 dhcp->set(
"expired-leases-processing", expired);
868 if (family == AF_INET6) {
870 dhcp->set(
"server-id", cfg_duid_->toElement());
873 dhcp->set(
"relay-supplied-options", cfg_rsoo_->toElement());
877 dhcp->set(
"lease-database", lease_db.toElement());
881 if (hosts_databases->size() > 0) {
882 dhcp->set(
"hosts-databases", hosts_databases);
886 if (family == AF_INET) {
887 host_ids = cfg_host_operations4_->toElement();
889 host_ids = cfg_host_operations6_->toElement();
891 dhcp->set(
"host-reservation-identifiers", host_ids);
893 if (family == AF_INET6) {
894 dhcp->set(
"mac-sources", cfg_mac_source_.
toElement());
898 if (!
isNull(unix_control_socket_)) {
901 if (http_control_socket_) {
902 control_sockets->add(http_control_socket_->toElement());
904 if (!control_sockets->empty()) {
905 dhcp->set(
"control-sockets", control_sockets);
910 if (!client_classes->empty()) {
911 dhcp->set(
"client-classes", client_classes);
915 dhcp->set(
"hooks-libraries", hooks_libs);
917 result->set(family == AF_INET ?
"Dhcp4" :
"Dhcp6", dhcp);
920 dhcp->set(
"sanity-checks", cfg_consist);
926 dhcp->set(
"config-control", info_elem);
931 if (dhcp_queue_control) {
932 dhcp->set(
"dhcp-queue-control", dhcp_queue_control);
937 if (dhcp_multi_threading) {
938 dhcp->set(
"multi-threading", dhcp_multi_threading);
976 return (d2_client_enabled_ && subnet_->getDdnsSendUpdates().get());
985 return (subnet_->getDdnsOverrideNoUpdate().get());
993 return (subnet_->getDdnsOverrideClientUpdate().get());
1002 return (subnet_->getDdnsReplaceClientNameMode().get());
1011 return (subnet_->getDdnsGeneratedPrefix().get());
1020 return (subnet_->getDdnsQualifyingSuffix().get());
1029 return (subnet_->getHostnameCharSet().get());
1038 return (subnet_->getHostnameCharReplacement().get());
1046 if (!char_set.empty()) {
1050 }
catch (
const std::exception& ex) {
1052 "' is not a valid regular expression");
1066 return (subnet_->getDdnsUpdateOnRenew().get());
1075 return (subnet_->getDdnsTtlPercent());
1081 return (
"check-with-dhcid");
1084 return (subnet_->getDdnsConflictResolutionMode().get());
A generic exception that is thrown if a parameter given to a method is considered invalid in that con...
This is a base class for exceptions thrown from the DNS library module.
virtual const char * what() const
Returns a C-style character string of the cause of the exception.
A generic exception that is thrown if a function is called in a prohibited way.
static ElementPtr create(const Position &pos=ZERO_POSITION())
static ElementPtr createMap(const Position &pos=ZERO_POSITION())
Creates an empty MapElement type ElementPtr.
static ElementPtr createList(const Position &pos=ZERO_POSITION())
Creates an empty ListElement type ElementPtr.
Notes: IntElement type is changed to int64_t.
static size_t setDefaults(isc::data::ElementPtr scope, const SimpleDefaults &default_values)
Sets the default values.
Parameters for various consistency checks.
Holds manual configuration of the server identifier (DUID).
Holds access parameters and the configuration of the lease and hosts database connection.
Holds configuration parameters pertaining to lease expiration and lease affinity.
Class to store configured global parameters.
Represents global configuration for host reservations.
Utility class to represent host reservation configurations internally as a map keyed by subnet IDs,...
void internalize(isc::data::ConstElementPtr list)
Internalize a list Element.
Represents the host reservations specified in the configuration file.
Represents selection of interfaces for DHCP server.
virtual isc::data::ElementPtr toElement() const
Unparse a configuration object.
static CfgMgr & instance()
returns a single instance of Configuration Manager
static void extract(data::ConstElementPtr value, bool &enabled, uint32_t &thread_count, uint32_t &queue_size)
Extract multi-threading parameters from a given configuration.
Represents option definitions used by the DHCP server.
Represents option data configuration for the DHCP server.
Represents configuration of the RSOO options for the DHCP server.
Represents configuration of IPv4 shared networks.
Represents configuration of IPv6 shared networks.
Holds subnets configured for the DHCPv4 server.
Holds subnets configured for the DHCPv6 server.
Maintains a list of ClientClassDef's.
static size_t setAllDefaults(isc::data::ConstElementPtr d2_config)
Sets all defaults for D2 client configuration.
Acts as a storage vault for D2 client configuration.
ReplaceClientNameMode
Defines the client name replacement modes.
Convenience container for conveying DDNS behavioral parameters It is intended to be created per Packe...
std::string getHostnameCharReplacement() const
Returns the string to replace invalid characters when scrubbing hostnames.
D2ClientConfig::ReplaceClientNameMode getReplaceClientNameMode() const
Returns how Kea should handle the domain-name supplied by the client.
std::string getGeneratedPrefix() const
Returns the Prefix Kea should use when generating domain-names.
util::Optional< double > getTtlPercent() const
Returns percent of lease lifetime to use for TTL.
isc::util::str::StringSanitizerPtr getHostnameSanitizer() const
Returns a regular expression string sanitizer.
std::string getHostnameCharSet() const
Returns the regular expression describing invalid characters for client hostnames.
std::string getConflictResolutionMode() const
Returns the DDNS config resolution mode for kea-dhcp-ddns.
std::string getQualifyingSuffix() const
Returns the suffix Kea should use when to qualify partial domain-names.
bool getUpdateOnRenew() const
Returns whether or not DNS should be updated when leases renew.
bool getOverrideNoUpdate() const
Returns whether or not Kea should perform updates, even if client requested no updates.
bool getEnableUpdates() const
Returns whether or not DHCP DDNS updating is enabled.
bool getOverrideClientUpdate() const
Returns whether or not Kea should perform updates, even if client requested delegation.
static bool haveInstance()
Indicates if the lease manager has been instantiated.
static bool lenient_parsing_
Governs whether options should be parsed less strictly.
static const isc::data::SimpleDefaults DHCP_MULTI_THREADING4_DEFAULTS
This table defines default values for multi-threading in DHCPv4.
static const isc::data::SimpleDefaults SANITY_CHECKS4_DEFAULTS
This defines default values for sanity checking for DHCPv4.
static const isc::data::SimpleDefaults DHCP_QUEUE_CONTROL4_DEFAULTS
This table defines default values for dhcp-queue-control in DHCPv4.
static const isc::data::SimpleDefaults DHCP_QUEUE_CONTROL6_DEFAULTS
This table defines default values for dhcp-queue-control in DHCPv6.
static const isc::data::SimpleDefaults DHCP_MULTI_THREADING6_DEFAULTS
This table defines default values for multi-threading in DHCPv6.
static const isc::data::SimpleDefaults SANITY_CHECKS6_DEFAULTS
This defines default values for sanity checking for DHCPv6.
Specifies current DHCP configuration.
static const uint32_t CFGSEL_SUBNET4
Number of IPv4 subnets.
void setDhcp4o6Port(uint16_t port)
Sets DHCP4o6 IPC port.
void addConfiguredGlobal(const std::string &name, isc::data::ConstElementPtr value)
Adds a parameter to the collection configured globals.
CfgGlobalsPtr getConfiguredGlobals()
Returns non-const pointer to configured global parameters.
void setClientClassDictionary(const ClientClassDictionaryPtr &dictionary)
Sets the client class dictionary.
virtual void merge(ConfigBase &other)
Merges the configuration specified as a parameter into this configuration.
void extractConfiguredGlobals(isc::data::ConstElementPtr config)
Saves scalar elements from the global scope of a configuration.
isc::data::ConstElementPtr getConfiguredGlobal(std::string name) const
Returns pointer to a given configured global parameter.
CfgSharedNetworks6Ptr getCfgSharedNetworks6() const
Returns pointer to non-const object holding configuration of shared networks in DHCPv6.
bool getIgnoreRAILinkSelection() const
Get ignore RAI Link Selection compatibility flag.
void setD2ClientConfig(const D2ClientConfigPtr &d2_client_config)
Sets the D2 client configuration.
void applyDefaultsConfiguredGlobals(const isc::data::SimpleDefaults &defaults)
Applies defaults to global parameters.
void setIPReservationsUnique(const bool unique)
Configures the server to allow or disallow specifying multiple hosts with the same IP address/subnet.
void configureLowerLevelLibraries() const
Convenience method to propagate configuration parameters through inversion of control.
CfgDUIDPtr getCfgDUID()
Returns pointer to the object holding configuration of the server identifier.
bool sequenceEquals(const SrvConfig &other)
Compares configuration sequence with other sequence.
CfgSubnets4Ptr getCfgSubnets4()
Returns pointer to non-const object holding subnets configuration for DHCPv4.
CfgSubnets6Ptr getCfgSubnets6()
Returns pointer to non-const object holding subnets configuration for DHCPv6.
D2ClientConfigPtr getD2ClientConfig()
Returns pointer to the D2 client configuration.
void setReservationsLookupFirst(const bool first)
Sets whether the server does host reservations lookup before lease lookup.
const isc::data::ConstElementPtr getDHCPMultiThreading() const
Returns DHCP multi threading information.
void setDHCPQueueControl(const isc::data::ConstElementPtr dhcp_queue_control)
Sets information about the dhcp queue control.
void sanityChecksLifetime(const std::string &name) const
Conducts sanity checks on global lifetime parameters.
std::string getConfigSummary(const uint32_t selection) const
Returns summary of the configuration in the textual format.
const isc::data::ConstElementPtr getDHCPQueueControl() const
Returns DHCP queue control information.
bool equals(const SrvConfig &other) const
Compares two objects for equality.
uint32_t getSequence() const
Returns configuration sequence number.
static const uint32_t CFGSEL_DDNS
DDNS enabled/disabled.
void setDeclinePeriod(const uint32_t decline_timer)
Sets decline probation-period.
void removeStatistics()
Removes statistics.
CfgExpirationPtr getCfgExpiration()
Returns pointer to the object holding configuration pertaining to processing expired leases.
virtual isc::data::ElementPtr toElement() const
Unparse a configuration object.
bool getLenientOptionParsing() const
Get lenient option parsing compatibility flag.
static const uint32_t CFGSEL_SUBNET6
Number of IPv6 subnets.
bool getExcludeFirstLast24() const
Get exclude .0 and .255 addresses in subnets bigger than /24 flag.
void updateStatistics()
Updates statistics.
CfgDbAccessPtr getCfgDbAccess()
Returns pointer to the object holding configuration of the lease and host database connection paramet...
void setEchoClientId(const bool echo)
Sets whether server should send back client-id in DHCPv4.
void copy(SrvConfig &new_config) const
Copies the current configuration to a new configuration.
CfgSharedNetworks4Ptr getCfgSharedNetworks4() const
Returns pointer to non-const object holding configuration of shared networks in DHCPv4;.
CfgHostsPtr getCfgHosts()
Returns pointer to the non-const objects representing host reservations for different IPv4 and IPv6 s...
bool getIgnoreServerIdentifier() const
Get ignore DHCP Server Identifier compatibility flag.
DdnsParamsPtr getDdnsParams(const Subnet4Ptr &subnet) const
Fetches the DDNS parameters for a given DHCPv4 subnet.
SrvConfig()
Default constructor.
bool equal(const HooksConfig &other) const
Compares two Hooks Config classes for equality.
const isc::hooks::HookLibsCollection & get() const
Provides access to the configured hooks libraries.
isc::data::ElementPtr toElement() const
Unparse a configuration object.
Base class for all configurations.
process::ConstConfigControlInfoPtr getConfigControlInfo() const
Fetches a read-only copy of the configuration control information.
const process::LoggingInfoStorage & getLoggingInfo() const
Returns logging specific configuration.
void setServerTag(const util::Optional< std::string > &server_tag)
Sets the server's logical name.
void copy(ConfigBase &new_config) const
Copies the current configuration to a new configuration.
virtual void merge(ConfigBase &other)
Merges specified configuration into this configuration.
bool equals(const ConfigBase &other) const
Compares two configuration.
Statistics Manager class.
static StatsMgr & instance()
Statistics Manager accessor method.
A template representing an optional value.
Implements a regular expression based string scrubber.
#define isc_throw(type, stream)
A shortcut macro to insert known values into exception arguments.
#define LOG_WARN(LOGGER, MESSAGE)
Macro to conveniently test warn output and log it.
boost::shared_ptr< const Element > ConstElementPtr
bool isNull(ConstElementPtr p)
Checks whether the given ElementPtr is a NULL pointer.
std::vector< SimpleDefault > SimpleDefaults
This specifies all default values in a given scope (e.g. a subnet).
boost::shared_ptr< Element > ElementPtr
isc::log::Logger dhcpsrv_logger("dhcpsrv")
DHCP server library Logger.
boost::shared_ptr< CfgDUID > CfgDUIDPtr
Pointer to the Non-const object.
boost::shared_ptr< Subnet4 > Subnet4Ptr
A pointer to a Subnet4 object.
boost::shared_ptr< D2ClientConfig > D2ClientConfigPtr
Defines a pointer for D2ClientConfig instances.
boost::shared_ptr< Subnet6 > Subnet6Ptr
A pointer to a Subnet6 object.
boost::multi_index_container< Subnet6Ptr, boost::multi_index::indexed_by< boost::multi_index::ordered_unique< boost::multi_index::tag< SubnetSubnetIdIndexTag >, boost::multi_index::const_mem_fun< Subnet, SubnetID, &Subnet::getID > >, boost::multi_index::ordered_unique< boost::multi_index::tag< SubnetPrefixIndexTag >, boost::multi_index::const_mem_fun< Subnet, std::string, &Subnet::toText > >, boost::multi_index::ordered_non_unique< boost::multi_index::tag< SubnetModificationTimeIndexTag >, boost::multi_index::const_mem_fun< data::BaseStampedElement, boost::posix_time::ptime, &data::BaseStampedElement::getModificationTime > > > > Subnet6Collection
A collection of Subnet6 objects.
boost::shared_ptr< DdnsParams > DdnsParamsPtr
Defines a pointer for DdnsParams instances.
boost::shared_ptr< SharedNetwork6 > SharedNetwork6Ptr
Pointer to SharedNetwork6 object.
boost::multi_index_container< Subnet4Ptr, boost::multi_index::indexed_by< boost::multi_index::ordered_unique< boost::multi_index::tag< SubnetSubnetIdIndexTag >, boost::multi_index::const_mem_fun< Subnet, SubnetID, &Subnet::getID > >, boost::multi_index::ordered_unique< boost::multi_index::tag< SubnetPrefixIndexTag >, boost::multi_index::const_mem_fun< Subnet, std::string, &Subnet::toText > >, boost::multi_index::ordered_non_unique< boost::multi_index::tag< SubnetServerIdIndexTag >, boost::multi_index::const_mem_fun< Network4, asiolink::IOAddress, &Network4::getServerId > >, boost::multi_index::ordered_non_unique< boost::multi_index::tag< SubnetModificationTimeIndexTag >, boost::multi_index::const_mem_fun< data::BaseStampedElement, boost::posix_time::ptime, &data::BaseStampedElement::getModificationTime > > > > Subnet4Collection
A collection of Subnet4 objects.
uint32_t SubnetID
Defines unique IPv4 or IPv6 subnet identifier.
const isc::log::MessageID DHCPSRV_CFGMGR_IP_RESERVATIONS_UNIQUE_DUPLICATES_POSSIBLE
boost::shared_ptr< SharedNetwork4 > SharedNetwork4Ptr
Pointer to SharedNetwork4 object.
boost::shared_ptr< const ConfigControlInfo > ConstConfigControlInfoPtr
Defines a pointer to a const ConfigControlInfo.
std::unique_ptr< StringSanitizer > StringSanitizerPtr
Type representing the pointer to the StringSanitizer.
Defines the logger used by the top-level component of kea-lfc.
Represents the position of the data element within a configuration string.
void contextToElement(data::ElementPtr map) const
Merge unparse a user_context object.
static data::ElementPtr toElement(data::ConstElementPtr map)
Copy an Element map.
utility class for unparsing