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),
50 lenient_option_parsing_(false), reservations_lookup_first_(false) {
54 : sequence_(sequence), cfg_iface_(new
CfgIface()),
65 decline_timer_(0), echo_v4_client_id_(true), dhcp4o6_port_(0),
68 lenient_option_parsing_(false), reservations_lookup_first_(false) {
77 if (subnets_num > 0) {
78 s <<
"added IPv4 subnets: " << subnets_num;
80 s <<
"no IPv4 subnets!";
87 if (subnets_num > 0) {
88 s <<
"added IPv6 subnets: " << subnets_num;
90 s <<
"no IPv6 subnets!";
97 s <<
"DDNS: " << (ddns_enabled ?
"enabled" :
"disabled") <<
"; ";
100 if (s.tellp() ==
static_cast<std::streampos
>(0)) {
101 s <<
"no config details available";
104 std::string summary = s.str();
105 size_t last_separator_pos = summary.find_last_of(
";");
106 if (last_separator_pos == summary.length() - 2) {
107 summary.erase(last_separator_pos);
122 new_config.cfg_iface_.reset(
new CfgIface(*cfg_iface_));
124 cfg_option_def_->copyTo(*new_config.cfg_option_def_);
125 cfg_option_->copyTo(*new_config.cfg_option_);
131 new_config.hooks_config_.
clear();
133 for (HookLibsCollection::const_iterator it = hooks_config_.
get().begin();
134 it != hooks_config_.
get().end(); ++it) {
135 new_config.hooks_config_.
add(it->first, it->second);
143 if (!ConfigBase::equals(other)) {
148 if ((*cfg_iface_ != *other.cfg_iface_) ||
149 (*cfg_option_def_ != *other.cfg_option_def_) ||
150 (*cfg_option_ != *other.cfg_option_) ||
151 (*class_dictionary_ != *other.class_dictionary_) ||
152 (*d2_client_config_ != *other.d2_client_config_)) {
158 if (hooks_config_.
get().size() != other.hooks_config_.
get().size()) {
162 return (hooks_config_.
equal(other.hooks_config_));
174 mergeGlobals(other_srv_config);
183 cfg_option_->merge(cfg_option_def_, (*other_srv_config.
getCfgOption()));
195 merge4(other_srv_config);
197 merge6(other_srv_config);
199 }
catch (
const std::bad_cast&) {
201 " of the SrvConfig as an argument of the call to"
202 " SrvConfig::merge()");
219SrvConfig::merge6(SrvConfig& other) {
221 cfg_shared_networks6_->merge(cfg_option_def_, *(other.getCfgSharedNetworks6()));
225 *(other.getCfgSubnets6()));
231SrvConfig::mergeGlobals(SrvConfig& other) {
242 for (
auto other_global : other.getConfiguredGlobals()->valuesMap()) {
252 std::string name = merged_global.first;
255 if (name ==
"decline-probation-period") {
257 }
else if (name ==
"echo-client-id") {
261 }
else if (name ==
"dhcp4o6-port") {
263 }
else if (name ==
"server-tag") {
265 }
else if (name ==
"ip-reservations-unique") {
267 }
else if (name ==
"reservations-lookup-first") {
270 }
catch(
const std::exception& ex) {
271 isc_throw (BadValue,
"Invalid value:" << element->str()
272 <<
" explicit global:" << name);
291 uint32_t max_samples = 0;
293 max_samples = samples->intValue();
295 if (max_samples != 0) {
302 int64_t time_duration = duration->intValue();
303 auto max_age = std::chrono::seconds(time_duration);
305 if (max_samples == 0) {
332 for (
auto def_value : defaults) {
344 switch (def_value.type_) {
351 int int_value = boost::lexical_cast<int>(def_value.value_);
354 catch (
const std::exception& ex) {
356 "Internal error. Integer value expected for: "
357 << def_value.name_ <<
", value is: "
358 << def_value.value_ );
365 if (def_value.value_ == std::string(
"true")) {
367 }
else if (def_value.value_ == std::string(
"false")) {
371 "Internal error. Boolean value for "
372 << def_value.name_ <<
" specified as "
373 << def_value.value_ <<
", expected true or false");
379 double dbl_value = boost::lexical_cast<double>(def_value.value_);
386 "Internal error. Incorrect default value type for "
399 const std::map<std::string, ConstElementPtr>& values = config->mapValue();
400 for (
auto value = values.begin(); value != values.end(); ++value) {
414 value = has_value->intValue();
417 uint32_t min_value = 0;
420 min_value = has_min->intValue();
423 uint32_t max_value = 0;
426 max_value = has_max->intValue();
429 if (!has_value && !has_min && !has_max) {
433 if (!has_min && !has_max) {
436 }
else if (!has_min) {
439 }
else if (!has_max) {
443 }
else if (has_min) {
450 << name <<
" but no " << name <<
" (default)");
458 if (min_value > max_value) {
459 if (has_min && has_max) {
461 << min_value <<
") is not less than max-" << name <<
" ("
462 << max_value <<
")");
463 }
else if (has_min) {
466 << min_value <<
") is not less than (default) " << name
467 <<
" (" << value <<
")");
471 <<
" (" << value <<
") is not less than max-" << name
472 <<
" (" << max_value <<
")");
477 if ((value < min_value) || (value > max_value)) {
479 << value <<
") is not between min-" << name <<
" ("
480 << min_value <<
") and max-" << name <<
" ("
481 << max_value <<
")");
487 const std::string& name)
const {
494 bool new_value =
true;
500 value = has_value->intValue();
503 uint32_t min_value = 0;
511 min_value = has_min->intValue();
514 uint32_t max_value = 0;
522 max_value = has_max->intValue();
525 if (!has_value && !has_min && !has_max) {
529 if (!has_min && !has_max) {
532 }
else if (!has_min) {
535 }
else if (!has_max) {
539 }
else if (has_min) {
546 << name <<
" but no " << name <<
" (default)");
554 if (min_value > max_value) {
555 if (has_min && has_max) {
556 std::string from_min = (new_min ?
"new" :
"previous");
557 std::string from_max = (new_max ?
"new" :
"previous");
559 <<
" min-" << name <<
" ("
560 << min_value <<
") is not less than "
561 << from_max <<
" max-" << name
562 <<
" (" << max_value <<
")");
563 }
else if (has_min) {
565 std::string from_min = (new_min ?
"new" :
"previous");
566 std::string from_value = (new_value ?
"new" :
"previous");
568 <<
" min-" << name <<
" ("
569 << min_value <<
") is not less than " << from_value
570 <<
" (default) " << name
571 <<
" (" << value <<
")");
574 std::string from_max = (new_max ?
"new" :
"previous");
575 std::string from_value = (new_value ?
"new" :
"previous");
577 <<
" (default) " << name
578 <<
" (" << value <<
") is not less than " << from_max
579 <<
" max-" << name <<
" (" << max_value <<
")");
584 if ((value < min_value) || (value > max_value)) {
585 std::string from_value = (new_value ?
"new" :
"previous");
586 std::string from_min = (new_min ?
"new" :
"previous");
587 std::string from_max = (new_max ?
"new" :
"previous");
589 <<
" (default) " << name <<
" ("
590 << value <<
") is not between " << from_min
591 <<
" min-" << name <<
" (" << min_value
592 <<
") and " << from_max <<
" max-"
593 << name <<
" (" << max_value <<
")");
606 ElementPtr dhcp = configured_globals_->toElement();
610 if (!loggers_info.empty()) {
613 for (LoggingInfoStorage::const_iterator
logger =
614 loggers_info.cbegin();
616 loggers->add(
logger->toElement());
618 dhcp->set(
"loggers", loggers);
625 if (family == AF_INET6) {
634 dhcp->set(
"decline-probation-period",
637 if (family == AF_INET) {
641 dhcp->set(
"dhcp4o6-port",
644 dhcp->set(
"dhcp-ddns", d2_client_config_->toElement());
646 dhcp->set(
"interfaces-config", cfg_iface_->toElement());
648 dhcp->set(
"option-def", cfg_option_def_->toElement());
650 dhcp->set(
"option-data", cfg_option_->toElement());
663 std::vector<ElementPtr> sn_list;
665 if (family == AF_INET) {
669 for (Subnet4Collection::const_iterator subnet = subnets->cbegin();
670 subnet != subnets->cend(); ++subnet) {
673 (*subnet)->getSharedNetwork(network);
677 ElementPtr subnet_cfg = (*subnet)->toElement();
678 sn_list.push_back(subnet_cfg);
679 plain_subnets->add(subnet_cfg);
681 dhcp->set(
"subnet4", plain_subnets);
684 ElementPtr shared_networks = cfg_shared_networks4_->toElement();
685 dhcp->set(
"shared-networks", shared_networks);
688 const std::vector<ElementPtr> networks = shared_networks->listValue();
689 for (
auto network = networks.cbegin();
690 network != networks.cend(); ++network) {
691 const std::vector<ElementPtr> sh_list =
692 (*network)->get(
"subnet4")->listValue();
693 for (
auto subnet = sh_list.cbegin();
694 subnet != sh_list.cend(); ++subnet) {
695 sn_list.push_back(*subnet);
703 for (Subnet6Collection::const_iterator subnet = subnets->cbegin();
704 subnet != subnets->cend(); ++subnet) {
707 (*subnet)->getSharedNetwork(network);
711 ElementPtr subnet_cfg = (*subnet)->toElement();
712 sn_list.push_back(subnet_cfg);
713 plain_subnets->add(subnet_cfg);
715 dhcp->set(
"subnet6", plain_subnets);
718 ElementPtr shared_networks = cfg_shared_networks6_->toElement();
719 dhcp->set(
"shared-networks", shared_networks);
722 const std::vector<ElementPtr> networks = shared_networks->listValue();
723 for (
auto network = networks.cbegin();
724 network != networks.cend(); ++network) {
725 const std::vector<ElementPtr> sh_list =
726 (*network)->get(
"subnet6")->listValue();
727 for (
auto subnet = sh_list.cbegin();
728 subnet != sh_list.cend(); ++subnet) {
729 sn_list.push_back(*subnet);
740 if (global_resvs->size() > 0) {
741 dhcp->set(
"reservations", global_resvs);
745 for (std::vector<ElementPtr>::const_iterator subnet = sn_list.cbegin();
746 subnet != sn_list.cend(); ++subnet) {
751 SubnetID subnet_id =
id->intValue();
753 (*subnet)->set(
"reservations", resvs);
758 dhcp->set(
"expired-leases-processing", expired);
759 if (family == AF_INET6) {
761 dhcp->set(
"server-id", cfg_duid_->toElement());
764 dhcp->set(
"relay-supplied-options", cfg_rsoo_->toElement());
768 dhcp->set(
"lease-database", lease_db.
toElement());
772 if (hosts_databases->size() > 0) {
773 dhcp->set(
"hosts-databases", hosts_databases);
777 if (family == AF_INET) {
778 host_ids = cfg_host_operations4_->toElement();
780 host_ids = cfg_host_operations6_->toElement();
782 dhcp->set(
"host-reservation-identifiers", host_ids);
784 if (family == AF_INET6) {
785 dhcp->set(
"mac-sources", cfg_mac_source_.
toElement());
788 if (!
isNull(control_socket_)) {
794 if (!client_classes->empty()) {
795 dhcp->set(
"client-classes", client_classes);
799 dhcp->set(
"hooks-libraries", hooks_libs);
801 result->set(family == AF_INET ?
"Dhcp4" :
"Dhcp6", dhcp);
804 dhcp->set(
"sanity-checks", cfg_consist);
810 dhcp->set(
"config-control", info_elem);
815 if (dhcp_queue_control) {
816 dhcp->set(
"dhcp-queue-control", dhcp_queue_control);
821 if (dhcp_multi_threading) {
822 dhcp->set(
"multi-threading", dhcp_multi_threading);
842 if (!srv_elem || (srv_elem->getType() !=
Element::map)) {
846 if (!srv_elem->contains(
"dhcp-ddns")) {
851 ElementPtr d2_elem = boost::const_pointer_cast<Element>(srv_elem->get(
"dhcp-ddns"));
857 std::string from_name;
861 std::vector<Param> params {
862 {
"override-no-update",
"ddns-override-no-update" },
863 {
"override-client-update",
"ddns-override-client-update" },
864 {
"replace-client-name",
"ddns-replace-client-name" },
865 {
"generated-prefix",
"ddns-generated-prefix" },
866 {
"qualifying-suffix",
"ddns-qualifying-suffix" },
867 {
"hostname-char-set",
"hostname-char-set" },
868 {
"hostname-char-replacement",
"hostname-char-replacement" }
871 for (
auto param : params) {
872 if (d2_elem->contains(param.from_name)) {
873 if (!srv_elem->contains(param.to_name)) {
875 srv_elem->set(param.to_name, d2_elem->get(param.from_name));
877 .arg(param.from_name).arg(param.to_name);
881 .arg(param.from_name).arg(param.to_name);
885 d2_elem->remove(param.from_name);
910 return (d2_client_enabled_ && subnet_->getDdnsSendUpdates().get());
919 return (subnet_->getDdnsOverrideNoUpdate().get());
927 return (subnet_->getDdnsOverrideClientUpdate().get());
936 return (subnet_->getDdnsReplaceClientNameMode().get());
945 return (subnet_->getDdnsGeneratedPrefix().get());
954 return (subnet_->getDdnsQualifyingSuffix().get());
963 return (subnet_->getHostnameCharSet().get());
972 return (subnet_->getHostnameCharReplacement().get());
980 if (!char_set.empty()) {
984 }
catch (
const std::exception& ex) {
986 "' is not a valid regular expression");
1000 return (subnet_->getDdnsUpdateOnRenew().get());
1009 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.
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.
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.
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.
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.
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.