23#include <boost/make_shared.hpp>
36 : sequence_(0), cfg_iface_(new
CfgIface()),
47 decline_timer_(0), echo_v4_client_id_(true), dhcp4o6_port_(0),
49 configured_globals_(
Element::createMap()),
51 lenient_option_parsing_(false) {
55 : sequence_(sequence), cfg_iface_(new
CfgIface()),
66 decline_timer_(0), echo_v4_client_id_(true), dhcp4o6_port_(0),
68 configured_globals_(
Element::createMap()),
70 lenient_option_parsing_(false) {
79 if (subnets_num > 0) {
80 s <<
"added IPv4 subnets: " << subnets_num;
82 s <<
"no IPv4 subnets!";
89 if (subnets_num > 0) {
90 s <<
"added IPv6 subnets: " << subnets_num;
92 s <<
"no IPv6 subnets!";
99 s <<
"DDNS: " << (ddns_enabled ?
"enabled" :
"disabled") <<
"; ";
102 if (s.tellp() ==
static_cast<std::streampos
>(0)) {
103 s <<
"no config details available";
106 std::string summary = s.str();
107 size_t last_separator_pos = summary.find_last_of(
";");
108 if (last_separator_pos == summary.length() - 2) {
109 summary.erase(last_separator_pos);
124 new_config.cfg_iface_.reset(
new CfgIface(*cfg_iface_));
126 cfg_option_def_->copyTo(*new_config.cfg_option_def_);
127 cfg_option_->copyTo(*new_config.cfg_option_);
133 new_config.hooks_config_.
clear();
135 for (HookLibsCollection::const_iterator it =
136 hooks_config_.
get().begin();
137 it != hooks_config_.
get().end(); ++it) {
138 new_config.hooks_config_.
add(it->first, it->second);
146 if (!ConfigBase::equals(other)) {
151 if ((*cfg_iface_ != *other.cfg_iface_) ||
152 (*cfg_option_def_ != *other.cfg_option_def_) ||
153 (*cfg_option_ != *other.cfg_option_) ||
154 (*class_dictionary_ != *other.class_dictionary_) ||
155 (*d2_client_config_ != *other.d2_client_config_)) {
161 if (hooks_config_.
get().size() != other.hooks_config_.
get().size()) {
165 return (hooks_config_.
equal(other.hooks_config_));
177 mergeGlobals(other_srv_config);
186 cfg_option_->merge(cfg_option_def_, (*other_srv_config.
getCfgOption()));
198 merge4(other_srv_config);
200 merge6(other_srv_config);
202 }
catch (
const std::bad_cast&) {
204 " of the SrvConfig as an argument of the call to"
205 " SrvConfig::merge()");
222SrvConfig::merge6(SrvConfig& other) {
224 cfg_shared_networks6_->merge(cfg_option_def_, *(other.getCfgSharedNetworks6()));
228 *(other.getCfgSubnets6()));
234SrvConfig::mergeGlobals(SrvConfig& other) {
236 ElementPtr mutable_cfg = boost::const_pointer_cast<Element>(config_set);
239 if (other.getConfiguredGlobals()->find(
"reservation-mode")) {
240 mutable_cfg->remove(
"reservations-global");
241 mutable_cfg->remove(
"reservations-in-subnet");
242 mutable_cfg->remove(
"reservations-out-of-pool");
246 for (
auto other_global : other.getConfiguredGlobals()->mapValue()) {
255 for (
auto merged_global : config_set->mapValue()) {
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") {
272 }
catch(
const std::exception& ex) {
273 isc_throw (BadValue,
"Invalid value:" << element->str()
274 <<
" explicit global:" << name);
293 uint32_t max_samples = 0;
295 max_samples = samples->intValue();
297 if (max_samples != 0) {
304 int64_t time_duration = duration->intValue();
305 auto max_age = std::chrono::seconds(time_duration);
307 if (max_samples == 0) {
328 if (configured_globals_->contains(name)) {
329 global = configured_globals_->get(name);
350 for (
auto def_value : defaults) {
362 switch (def_value.type_) {
363 case Element::string: {
367 case Element::integer: {
369 int int_value = boost::lexical_cast<int>(def_value.value_);
372 catch (
const std::exception& ex) {
374 "Internal error. Integer value expected for: "
375 << def_value.name_ <<
", value is: "
376 << def_value.value_ );
381 case Element::boolean: {
383 if (def_value.value_ == std::string(
"true")) {
385 }
else if (def_value.value_ == std::string(
"false")) {
389 "Internal error. Boolean value for "
390 << def_value.name_ <<
" specified as "
391 << def_value.value_ <<
", expected true or false");
396 case Element::real: {
397 double dbl_value = boost::lexical_cast<double>(def_value.value_);
404 "Internal error. Incorrect default value type for "
413 if (config->getType() != Element::map) {
417 const std::map<std::string, ConstElementPtr>& values = config->mapValue();
418 for (
auto value = values.begin(); value != values.end(); ++value) {
419 if (value->second->getType() != Element::list &&
420 value->second->getType() != Element::map) {
432 value = has_value->intValue();
435 uint32_t min_value = 0;
438 min_value = has_min->intValue();
441 uint32_t max_value = 0;
444 max_value = has_max->intValue();
447 if (!has_value && !has_min && !has_max) {
451 if (!has_min && !has_max) {
454 }
else if (!has_min) {
457 }
else if (!has_max) {
461 }
else if (has_min) {
468 << name <<
" but no " << name <<
" (default)");
476 if (min_value > max_value) {
477 if (has_min && has_max) {
479 << min_value <<
") is not less than max-" << name <<
" ("
480 << max_value <<
")");
481 }
else if (has_min) {
484 << min_value <<
") is not less than (default) " << name
485 <<
" (" << value <<
")");
489 <<
" (" << value <<
") is not less than max-" << name
490 <<
" (" << max_value <<
")");
495 if ((value < min_value) || (value > max_value)) {
497 << value <<
") is not between min-" << name <<
" ("
498 << min_value <<
") and max-" << name <<
" ("
499 << max_value <<
")");
505 const std::string& name)
const {
512 bool new_value =
true;
518 value = has_value->intValue();
521 uint32_t min_value = 0;
529 min_value = has_min->intValue();
532 uint32_t max_value = 0;
540 max_value = has_max->intValue();
543 if (!has_value && !has_min && !has_max) {
547 if (!has_min && !has_max) {
550 }
else if (!has_min) {
553 }
else if (!has_max) {
557 }
else if (has_min) {
564 << name <<
" but no " << name <<
" (default)");
572 if (min_value > max_value) {
573 if (has_min && has_max) {
574 std::string from_min = (new_min ?
"new" :
"previous");
575 std::string from_max = (new_max ?
"new" :
"previous");
577 <<
" min-" << name <<
" ("
578 << min_value <<
") is not less than "
579 << from_max <<
" max-" << name
580 <<
" (" << max_value <<
")");
581 }
else if (has_min) {
583 std::string from_min = (new_min ?
"new" :
"previous");
584 std::string from_value = (new_value ?
"new" :
"previous");
586 <<
" min-" << name <<
" ("
587 << min_value <<
") is not less than " << from_value
588 <<
" (default) " << name
589 <<
" (" << value <<
")");
592 std::string from_max = (new_max ?
"new" :
"previous");
593 std::string from_value = (new_value ?
"new" :
"previous");
595 <<
" (default) " << name
596 <<
" (" << value <<
") is not less than " << from_max
597 <<
" max-" << name <<
" (" << max_value <<
")");
602 if ((value < min_value) || (value > max_value)) {
603 std::string from_value = (new_value ?
"new" :
"previous");
604 std::string from_min = (new_min ?
"new" :
"previous");
605 std::string from_max = (new_max ?
"new" :
"previous");
607 <<
" (default) " << name <<
" ("
608 << value <<
") is not between " << from_min
609 <<
" min-" << name <<
" (" << min_value
610 <<
") and " << from_max <<
" max-"
611 << name <<
" (" << max_value <<
")");
626 dhcp->setValue(configured_globals_->mapValue());
632 if (family == AF_INET6) {
636 dhcp->set(
"data-directory", Element::create(datadir));
641 dhcp->set(
"decline-probation-period",
642 Element::create(
static_cast<long long>(decline_timer_)));
644 if (family == AF_INET) {
645 dhcp->set(
"echo-client-id", Element::create(echo_v4_client_id_));
648 dhcp->set(
"dhcp4o6-port",
649 Element::create(
static_cast<int>(dhcp4o6_port_)));
651 dhcp->set(
"dhcp-ddns", d2_client_config_->toElement());
653 dhcp->set(
"interfaces-config", cfg_iface_->toElement());
655 dhcp->set(
"option-def", cfg_option_def_->toElement());
657 dhcp->set(
"option-data", cfg_option_->toElement());
670 std::vector<ElementPtr> sn_list;
672 if (family == AF_INET) {
674 ElementPtr plain_subnets = Element::createList();
676 for (Subnet4Collection::const_iterator subnet = subnets->cbegin();
677 subnet != subnets->cend(); ++subnet) {
680 (*subnet)->getSharedNetwork(network);
684 ElementPtr subnet_cfg = (*subnet)->toElement();
685 sn_list.push_back(subnet_cfg);
686 plain_subnets->add(subnet_cfg);
688 dhcp->set(
"subnet4", plain_subnets);
691 ElementPtr shared_networks = cfg_shared_networks4_->toElement();
692 dhcp->set(
"shared-networks", shared_networks);
695 const std::vector<ElementPtr> networks = shared_networks->listValue();
696 for (
auto network = networks.cbegin();
697 network != networks.cend(); ++network) {
698 const std::vector<ElementPtr> sh_list =
699 (*network)->get(
"subnet4")->listValue();
700 for (
auto subnet = sh_list.cbegin();
701 subnet != sh_list.cend(); ++subnet) {
702 sn_list.push_back(*subnet);
708 ElementPtr plain_subnets = Element::createList();
710 for (Subnet6Collection::const_iterator subnet = subnets->cbegin();
711 subnet != subnets->cend(); ++subnet) {
714 (*subnet)->getSharedNetwork(network);
718 ElementPtr subnet_cfg = (*subnet)->toElement();
719 sn_list.push_back(subnet_cfg);
720 plain_subnets->add(subnet_cfg);
722 dhcp->set(
"subnet6", plain_subnets);
725 ElementPtr shared_networks = cfg_shared_networks6_->toElement();
726 dhcp->set(
"shared-networks", shared_networks);
729 const std::vector<ElementPtr> networks = shared_networks->listValue();
730 for (
auto network = networks.cbegin();
731 network != networks.cend(); ++network) {
732 const std::vector<ElementPtr> sh_list =
733 (*network)->get(
"subnet6")->listValue();
734 for (
auto subnet = sh_list.cbegin();
735 subnet != sh_list.cend(); ++subnet) {
736 sn_list.push_back(*subnet);
747 if (global_resvs->size() > 0) {
748 dhcp->set(
"reservations", global_resvs);
752 for (std::vector<ElementPtr>::const_iterator subnet = sn_list.cbegin();
753 subnet != sn_list.cend(); ++subnet) {
758 SubnetID subnet_id =
id->intValue();
760 (*subnet)->set(
"reservations", resvs);
765 dhcp->set(
"expired-leases-processing", expired);
766 if (family == AF_INET6) {
768 dhcp->set(
"server-id", cfg_duid_->toElement());
771 dhcp->set(
"relay-supplied-options", cfg_rsoo_->toElement());
775 dhcp->set(
"lease-database", lease_db.
toElement());
779 if (hosts_databases->size() > 0) {
780 dhcp->set(
"hosts-databases", hosts_databases);
784 if (family == AF_INET) {
785 host_ids = cfg_host_operations4_->toElement();
787 host_ids = cfg_host_operations6_->toElement();
789 dhcp->set(
"host-reservation-identifiers", host_ids);
791 if (family == AF_INET6) {
792 dhcp->set(
"mac-sources", cfg_mac_source_.
toElement());
795 if (!
isNull(control_socket_)) {
796 dhcp->set(
"control-socket", UserContext::toElement(control_socket_));
801 if (!client_classes->empty()) {
802 dhcp->set(
"client-classes", client_classes);
806 dhcp->set(
"hooks-libraries", hooks_libs);
808 result->set(family == AF_INET ?
"Dhcp4" :
"Dhcp6", dhcp);
811 dhcp->set(
"sanity-checks", cfg_consist);
817 dhcp->set(
"config-control", info_elem);
822 if (dhcp_queue_control) {
823 dhcp->set(
"dhcp-queue-control", dhcp_queue_control);
828 if (dhcp_multi_threading) {
829 dhcp->set(
"multi-threading", dhcp_multi_threading);
849 if (!srv_elem || (srv_elem->getType() != Element::map)) {
853 if (!srv_elem->contains(
"dhcp-ddns")) {
858 ElementPtr d2_elem = boost::const_pointer_cast<Element>(srv_elem->get(
"dhcp-ddns"));
859 if (!d2_elem || (d2_elem->getType() != Element::map)) {
864 std::string from_name;
868 std::vector<Param> params {
869 {
"override-no-update",
"ddns-override-no-update" },
870 {
"override-client-update",
"ddns-override-client-update" },
871 {
"replace-client-name",
"ddns-replace-client-name" },
872 {
"generated-prefix",
"ddns-generated-prefix" },
873 {
"qualifying-suffix",
"ddns-qualifying-suffix" },
874 {
"hostname-char-set",
"hostname-char-set" },
875 {
"hostname-char-replacement",
"hostname-char-replacement" }
878 for (
auto param : params) {
879 if (d2_elem->contains(param.from_name)) {
880 if (!srv_elem->contains(param.to_name)) {
882 srv_elem->set(param.to_name, d2_elem->get(param.from_name));
884 .arg(param.from_name).arg(param.to_name);
888 .arg(param.from_name).arg(param.to_name);
892 d2_elem->remove(param.from_name);
917 return (d2_client_enabled_ && subnet_->getDdnsSendUpdates().get());
926 return (subnet_->getDdnsOverrideNoUpdate().get());
934 return (subnet_->getDdnsOverrideClientUpdate().get());
943 return (subnet_->getDdnsReplaceClientNameMode().get());
952 return (subnet_->getDdnsGeneratedPrefix().get());
961 return (subnet_->getDdnsQualifyingSuffix().get());
970 return (subnet_->getHostnameCharSet().get());
979 return (subnet_->getHostnameCharReplacement().get());
987 if (!char_set.empty()) {
991 }
catch (
const std::exception& ex) {
993 "' is not a valid regular expression");
1007 return (subnet_->getDdnsUpdateOnRenew().get());
1016 return (subnet_->getDdnsUseConflictResolution().get());
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.
The Element class represents a piece of data, used by the command channel and configuration parts.
static ElementPtr createMap(const Position &pos=ZERO_POSITION())
Creates an empty MapElement 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.
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.
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.
isc::data::ConstElementPtr getConfiguredGlobals() const
Returns pointer to configured global parameters.
void clearConfiguredGlobals()
Removes all 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.
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.
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.
static const uint32_t CFGSEL_SUBNET6
Number of IPv6 subnets.
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...
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.
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.
A template representing an optional value.
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.
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
Unique identifier for a subnet (both v4 and v6)
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
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.
virtual isc::data::ElementPtr toElement() const
Unparse.
utility class for unparsing
virtual isc::data::ElementPtr toElement() const
Unparse.