23 #include <boost/make_shared.hpp>
35 SrvConfig::SrvConfig()
36 : sequence_(0), cfg_iface_(new
CfgIface()),
47 decline_timer_(0), echo_v4_client_id_(true), dhcp4o6_port_(0),
50 lenient_option_parsing_(false), ignore_dhcp_server_identifier_(false),
51 ignore_rai_link_selection_(false), exclude_first_last_24_(false),
52 reservations_lookup_first_(false) {
56 : sequence_(sequence), cfg_iface_(new
CfgIface()),
67 decline_timer_(0), echo_v4_client_id_(true), dhcp4o6_port_(0),
70 lenient_option_parsing_(false), ignore_dhcp_server_identifier_(false),
71 ignore_rai_link_selection_(false), exclude_first_last_24_(false),
72 reservations_lookup_first_(false) {
81 if (subnets_num > 0) {
82 s <<
"added IPv4 subnets: " << subnets_num;
84 s <<
"no IPv4 subnets!";
91 if (subnets_num > 0) {
92 s <<
"added IPv6 subnets: " << subnets_num;
94 s <<
"no IPv6 subnets!";
101 s <<
"DDNS: " << (ddns_enabled ?
"enabled" :
"disabled") <<
"; ";
104 if (s.tellp() ==
static_cast<std::streampos
>(0)) {
105 s <<
"no config details available";
108 std::string summary = s.str();
109 size_t last_separator_pos = summary.find_last_of(
";");
110 if (last_separator_pos == summary.length() - 2) {
111 summary.erase(last_separator_pos);
126 new_config.cfg_iface_.reset(
new CfgIface(*cfg_iface_));
128 cfg_option_def_->copyTo(*new_config.cfg_option_def_);
129 cfg_option_->copyTo(*new_config.cfg_option_);
135 new_config.hooks_config_.
clear();
137 for (HookLibsCollection::const_iterator it = hooks_config_.get().begin();
138 it != hooks_config_.get().end(); ++it) {
139 new_config.hooks_config_.
add(it->first, it->second);
147 if (!ConfigBase::equals(other)) {
152 if ((*cfg_iface_ != *other.cfg_iface_) ||
153 (*cfg_option_def_ != *other.cfg_option_def_) ||
154 (*cfg_option_ != *other.cfg_option_) ||
155 (*class_dictionary_ != *other.class_dictionary_) ||
156 (*d2_client_config_ != *other.d2_client_config_)) {
162 if (hooks_config_.
get().size() != other.hooks_config_.
get().size()) {
166 return (hooks_config_.
equal(other.hooks_config_));
178 mergeGlobals(other_srv_config);
187 cfg_option_->merge(cfg_option_def_, (*other_srv_config.
getCfgOption()));
199 merge4(other_srv_config);
201 merge6(other_srv_config);
203 }
catch (
const std::bad_cast&) {
205 " of the SrvConfig as an argument of the call to"
206 " SrvConfig::merge()");
225 cfg_shared_networks6_->merge(cfg_option_def_, *(other.getCfgSharedNetworks6()));
229 *(other.getCfgSubnets6()));
235 SrvConfig::mergeGlobals(
SrvConfig& other) {
246 for (
auto other_global : other.getConfiguredGlobals()->valuesMap()) {
256 std::string name = merged_global.first;
259 if (name ==
"decline-probation-period") {
261 }
else if (name ==
"echo-client-id") {
265 }
else if (name ==
"dhcp4o6-port") {
267 }
else if (name ==
"server-tag") {
269 }
else if (name ==
"ip-reservations-unique") {
271 }
else if (name ==
"reservations-lookup-first") {
274 }
catch(
const std::exception& ex) {
275 isc_throw (BadValue,
"Invalid value:" << element->str()
276 <<
" explicit global:" << name);
295 uint32_t max_samples = 0;
297 max_samples = samples->intValue();
299 if (max_samples != 0) {
306 int64_t time_duration = duration->intValue();
307 auto max_age = std::chrono::seconds(time_duration);
309 if (max_samples == 0) {
336 for (
auto def_value : defaults) {
348 switch (def_value.type_) {
355 int int_value = boost::lexical_cast<int>(def_value.value_);
358 catch (
const std::exception& ex) {
360 "Internal error. Integer value expected for: "
361 << def_value.name_ <<
", value is: "
362 << def_value.value_ );
369 if (def_value.value_ == std::string(
"true")) {
371 }
else if (def_value.value_ == std::string(
"false")) {
375 "Internal error. Boolean value for "
376 << def_value.name_ <<
" specified as "
377 << def_value.value_ <<
", expected true or false");
383 double dbl_value = boost::lexical_cast<double>(def_value.value_);
390 "Internal error. Incorrect default value type for "
403 const std::map<std::string, ConstElementPtr>& values = config->mapValue();
404 for (
auto value = values.begin(); value != values.end(); ++value) {
418 value = has_value->intValue();
421 uint32_t min_value = 0;
424 min_value = has_min->intValue();
427 uint32_t max_value = 0;
430 max_value = has_max->intValue();
433 if (!has_value && !has_min && !has_max) {
437 if (!has_min && !has_max) {
440 }
else if (!has_min) {
443 }
else if (!has_max) {
447 }
else if (has_min) {
454 << name <<
" but no " << name <<
" (default)");
462 if (min_value > max_value) {
463 if (has_min && has_max) {
465 << min_value <<
") is not less than max-" << name <<
" ("
466 << max_value <<
")");
467 }
else if (has_min) {
470 << min_value <<
") is not less than (default) " << name
471 <<
" (" << value <<
")");
475 <<
" (" << value <<
") is not less than max-" << name
476 <<
" (" << max_value <<
")");
481 if ((value < min_value) || (value > max_value)) {
483 << value <<
") is not between min-" << name <<
" ("
484 << min_value <<
") and max-" << name <<
" ("
485 << max_value <<
")");
491 const std::string& name)
const {
498 bool new_value =
true;
504 value = has_value->intValue();
507 uint32_t min_value = 0;
515 min_value = has_min->intValue();
518 uint32_t max_value = 0;
526 max_value = has_max->intValue();
529 if (!has_value && !has_min && !has_max) {
533 if (!has_min && !has_max) {
536 }
else if (!has_min) {
539 }
else if (!has_max) {
543 }
else if (has_min) {
550 << name <<
" but no " << name <<
" (default)");
558 if (min_value > max_value) {
559 if (has_min && has_max) {
560 std::string from_min = (new_min ?
"new" :
"previous");
561 std::string from_max = (new_max ?
"new" :
"previous");
563 <<
" min-" << name <<
" ("
564 << min_value <<
") is not less than "
565 << from_max <<
" max-" << name
566 <<
" (" << max_value <<
")");
567 }
else if (has_min) {
569 std::string from_min = (new_min ?
"new" :
"previous");
570 std::string from_value = (new_value ?
"new" :
"previous");
572 <<
" min-" << name <<
" ("
573 << min_value <<
") is not less than " << from_value
574 <<
" (default) " << name
575 <<
" (" << value <<
")");
578 std::string from_max = (new_max ?
"new" :
"previous");
579 std::string from_value = (new_value ?
"new" :
"previous");
581 <<
" (default) " << name
582 <<
" (" << value <<
") is not less than " << from_max
583 <<
" max-" << name <<
" (" << max_value <<
")");
588 if ((value < min_value) || (value > max_value)) {
589 std::string from_value = (new_value ?
"new" :
"previous");
590 std::string from_min = (new_min ?
"new" :
"previous");
591 std::string from_max = (new_max ?
"new" :
"previous");
593 <<
" (default) " << name <<
" ("
594 << value <<
") is not between " << from_min
595 <<
" min-" << name <<
" (" << min_value
596 <<
") and " << from_max <<
" max-"
597 << name <<
" (" << max_value <<
")");
610 ElementPtr dhcp = configured_globals_->toElement();
614 if (!loggers_info.empty()) {
617 for (LoggingInfoStorage::const_iterator
logger =
618 loggers_info.cbegin();
620 loggers->add(
logger->toElement());
622 dhcp->set(
"loggers", loggers);
629 if (family == AF_INET6) {
643 compatibility->set(
"ignore-dhcp-server-identifier",
Element::create(
true));
646 compatibility->set(
"ignore-rai-link-selection",
Element::create(
true));
651 if (compatibility->size() > 0) {
652 dhcp->set(
"compatibility", compatibility);
656 dhcp->set(
"decline-probation-period",
659 if (family == AF_INET) {
663 dhcp->set(
"dhcp4o6-port",
666 dhcp->set(
"dhcp-ddns", d2_client_config_->toElement());
668 dhcp->set(
"interfaces-config", cfg_iface_->toElement());
670 dhcp->set(
"option-def", cfg_option_def_->toElement());
672 dhcp->set(
"option-data", cfg_option_->toElement());
685 std::vector<ElementPtr> sn_list;
687 if (family == AF_INET) {
691 for (Subnet4Collection::const_iterator subnet = subnets->cbegin();
692 subnet != subnets->cend(); ++subnet) {
695 (*subnet)->getSharedNetwork(network);
699 ElementPtr subnet_cfg = (*subnet)->toElement();
700 sn_list.push_back(subnet_cfg);
701 plain_subnets->add(subnet_cfg);
703 dhcp->set(
"subnet4", plain_subnets);
706 ElementPtr shared_networks = cfg_shared_networks4_->toElement();
707 dhcp->set(
"shared-networks", shared_networks);
710 const std::vector<ElementPtr> networks = shared_networks->listValue();
711 for (
auto network = networks.cbegin();
712 network != networks.cend(); ++network) {
713 const std::vector<ElementPtr> sh_list =
714 (*network)->get(
"subnet4")->listValue();
715 for (
auto subnet = sh_list.cbegin();
716 subnet != sh_list.cend(); ++subnet) {
717 sn_list.push_back(*subnet);
725 for (Subnet6Collection::const_iterator subnet = subnets->cbegin();
726 subnet != subnets->cend(); ++subnet) {
729 (*subnet)->getSharedNetwork(network);
733 ElementPtr subnet_cfg = (*subnet)->toElement();
734 sn_list.push_back(subnet_cfg);
735 plain_subnets->add(subnet_cfg);
737 dhcp->set(
"subnet6", plain_subnets);
740 ElementPtr shared_networks = cfg_shared_networks6_->toElement();
741 dhcp->set(
"shared-networks", shared_networks);
744 const std::vector<ElementPtr> networks = shared_networks->listValue();
745 for (
auto network = networks.cbegin();
746 network != networks.cend(); ++network) {
747 const std::vector<ElementPtr> sh_list =
748 (*network)->get(
"subnet6")->listValue();
749 for (
auto subnet = sh_list.cbegin();
750 subnet != sh_list.cend(); ++subnet) {
751 sn_list.push_back(*subnet);
762 if (global_resvs->size() > 0) {
763 dhcp->set(
"reservations", global_resvs);
767 for (std::vector<ElementPtr>::const_iterator subnet = sn_list.cbegin();
768 subnet != sn_list.cend(); ++subnet) {
773 SubnetID subnet_id =
id->intValue();
775 (*subnet)->set(
"reservations", resvs);
780 dhcp->set(
"expired-leases-processing", expired);
781 if (family == AF_INET6) {
783 dhcp->set(
"server-id", cfg_duid_->toElement());
786 dhcp->set(
"relay-supplied-options", cfg_rsoo_->toElement());
790 dhcp->set(
"lease-database", lease_db.
toElement());
794 if (hosts_databases->size() > 0) {
795 dhcp->set(
"hosts-databases", hosts_databases);
799 if (family == AF_INET) {
800 host_ids = cfg_host_operations4_->toElement();
802 host_ids = cfg_host_operations6_->toElement();
804 dhcp->set(
"host-reservation-identifiers", host_ids);
806 if (family == AF_INET6) {
807 dhcp->set(
"mac-sources", cfg_mac_source_.
toElement());
810 if (!
isNull(control_socket_)) {
816 if (!client_classes->empty()) {
817 dhcp->set(
"client-classes", client_classes);
821 dhcp->set(
"hooks-libraries", hooks_libs);
823 result->set(family == AF_INET ?
"Dhcp4" :
"Dhcp6", dhcp);
826 dhcp->set(
"sanity-checks", cfg_consist);
832 dhcp->set(
"config-control", info_elem);
837 if (dhcp_queue_control) {
838 dhcp->set(
"dhcp-queue-control", dhcp_queue_control);
843 if (dhcp_multi_threading) {
844 dhcp->set(
"multi-threading", dhcp_multi_threading);
864 if (!srv_elem || (srv_elem->getType() !=
Element::map)) {
868 if (!srv_elem->contains(
"dhcp-ddns")) {
873 ElementPtr d2_elem = boost::const_pointer_cast<Element>(srv_elem->get(
"dhcp-ddns"));
879 std::string from_name;
883 std::vector<Param> params {
884 {
"override-no-update",
"ddns-override-no-update" },
885 {
"override-client-update",
"ddns-override-client-update" },
886 {
"replace-client-name",
"ddns-replace-client-name" },
887 {
"generated-prefix",
"ddns-generated-prefix" },
888 {
"qualifying-suffix",
"ddns-qualifying-suffix" },
889 {
"hostname-char-set",
"hostname-char-set" },
890 {
"hostname-char-replacement",
"hostname-char-replacement" }
893 for (
auto param : params) {
894 if (d2_elem->contains(param.from_name)) {
895 if (!srv_elem->contains(param.to_name)) {
897 srv_elem->set(param.to_name, d2_elem->get(param.from_name));
899 .arg(param.from_name).arg(param.to_name);
903 .arg(param.from_name).arg(param.to_name);
907 d2_elem->remove(param.from_name);
932 return (d2_client_enabled_ && subnet_->getDdnsSendUpdates().get());
941 return (subnet_->getDdnsOverrideNoUpdate().get());
949 return (subnet_->getDdnsOverrideClientUpdate().get());
958 return (subnet_->getDdnsReplaceClientNameMode().get());
967 return (subnet_->getDdnsGeneratedPrefix().get());
976 return (subnet_->getDdnsQualifyingSuffix().get());
985 return (subnet_->getHostnameCharSet().get());
994 return (subnet_->getHostnameCharReplacement().get());
1001 std::string char_set = getHostnameCharSet();
1002 if (!char_set.empty()) {
1005 getHostnameCharReplacement()));
1006 }
catch (
const std::exception& ex) {
1008 "' is not a valid regular expression");
1022 return (subnet_->getDdnsUpdateOnRenew().get());
1031 return (subnet_->getDdnsUseConflictResolution().get());
1040 return (subnet_->getDdnsTtlPercent());
A generic exception that is thrown if a parameter given to a method is considered invalid in that con...
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 void moveReservationMode(isc::data::ElementPtr config)
Moves deprecated reservation-mode parameter to new reservations flags.
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.
@ RESERVATIONS_OUT_OF_POOL
Represents global configuration for host reservations.
Utility class to represent host reservation configurations internally as a map keyed by subnet IDs,...
isc::data::ConstElementPtr get(SubnetID id) const
Return the host reservations for a subnet ID.
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.
util::Optional< std::string > getDataDir() const
returns path do the data directory
uint16_t getFamily() const
Returns address family.
static CfgMgr & instance()
returns a single instance of Configuration Manager
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.
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.
bool getUseConflictResolution() const
Returns whether or not keah-dhcp-ddns should use conflict resolution.
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 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.
Specifies current DHCP configuration.
ClientClassDictionaryPtr getClientClassDictionary()
Returns pointer to the dictionary of global client class definitions.
static const uint32_t CFGSEL_SUBNET4
Number of IPv4 subnets.
static void moveDdnsParams(isc::data::ElementPtr srv_elem)
Moves deprecated parameters from dhcp-ddns element to global element.
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.
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.
CfgOptionDefPtr getCfgOptionDef()
Return pointer to non-const object representing user-defined option definitions.
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 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.
CfgOptionPtr getCfgOption()
Returns pointer to the non-const object holding options.
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.
void clear()
Removes all configured hooks libraries.
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.
void add(std::string libname, isc::data::ConstElementPtr parameters)
Adds additional hooks libraries.
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.
Statistics Manager class.
static StatsMgr & instance()
Statistics Manager accessor method.
void unspecified(bool unspecified)
Modifies the flag that indicates whether the value is specified or unspecified.
Implements a regular expression based string scrubber.
#define isc_throw(type, stream)
A shortcut macro to insert known values into exception arguments.
void setMaxSampleCountDefault(uint32_t max_samples)
Set default count limit.
void setMaxSampleAgeAll(const StatsDuration &duration)
Set duration limit for all collected statistics.
void setMaxSampleCountAll(uint32_t max_samples)
Set count limit for all collected statistics.
void setMaxSampleAgeDefault(const StatsDuration &duration)
Set default duration limit.
#define LOG_INFO(LOGGER, MESSAGE)
Macro to conveniently test info output and log it.
#define LOG_WARN(LOGGER, MESSAGE)
Macro to conveniently test warn output and log it.
isc::log::Logger logger("asiodns")
Use the ASIO logger.
ElementPtr copy(ConstElementPtr from, int level)
Copy the data up to a nesting level.
void merge(ElementPtr element, ConstElementPtr other)
Merges the data from other into element.
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< Subnet4 > Subnet4Ptr
A pointer to a Subnet4 object.
const isc::log::MessageID DHCPSRV_CFGMGR_DDNS_PARAMETER_IGNORED
const isc::log::MessageID DHCPSRV_CFGMGR_DDNS_PARAMETER_MOVED
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.
boost::shared_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.
virtual isc::data::ElementPtr toElement() const
Unparse.
utility class for unparsing
virtual isc::data::ElementPtr toElement() const
Unparse.