55#include <hooks/dhcp/mysql_lb/mysql_lease_mgr.h>
56#include <hooks/dhcp/mysql_hb/mysql_host_data_source.h>
60#include <hooks/dhcp/pgsql_lb/pgsql_lease_mgr.h>
61#include <hooks/dhcp/pgsql_hb/pgsql_host_data_source.h>
64#include <boost/algorithm/string.hpp>
65#include <boost/lexical_cast.hpp>
66#include <boost/scoped_ptr.hpp>
67#include <boost/shared_ptr.hpp>
72#include <netinet/in.h>
96MySqlLeaseMgrInit mysql_init_lease;
97MySqlHostDataSourceInit mysql_init_host;
103PgSqlLeaseMgrInit pgsql_init_lease;
104PgSqlHostDataSourceInit pgsql_init_host;
111void dirExists(
const string& dir_path) {
113 if (stat(dir_path.c_str(), &statbuf) < 0) {
115 <<
"': " << strerror(errno));
117 if ((statbuf.st_mode & S_IFMT) != S_IFDIR) {
142 for (
auto const& source_elem : value->listValue()) {
143 std::string option_str = source_elem->stringValue();
147 code = boost::lexical_cast<int64_t>(option_str);
151 << option_str <<
"', the option code must be a"
152 " non-negative value");
154 }
else if (code > std::numeric_limits<uint16_t>::max()) {
156 << option_str <<
"', the option code must not be"
157 " greater than '" << std::numeric_limits<uint16_t>::max()
161 }
catch (
const boost::bad_lexical_cast &) {
169 code = def->getCode();
172 " specified option name '" << option_str <<
"'"
173 " while parsing the list of enabled"
174 " relay-supplied-options");
177 cfg->getCfgRSOO()->enable(code);
179 }
catch (
const std::exception& ex) {
215 if (global->contains(
"data-directory")) {
221 uint32_t probation_period =
222 getUint32(global,
"decline-probation-period");
223 cfg->setDeclinePeriod(probation_period);
226 uint16_t dhcp4o6_port = getUint16(global,
"dhcp4o6-port");
227 cfg->setDhcp4o6Port(dhcp4o6_port);
232 cfg->setContext(user_context);
236 std::string server_tag = getString(global,
"server-tag");
237 cfg->setServerTag(server_tag);
253 bool ip_reservations_unique = getBoolean(global,
"ip-reservations-unique");
254 cfg->setIPReservationsUnique(ip_reservations_unique);
266 if (!dest || !from) {
278 for (
auto const& net : *networks) {
289 for (
auto const& subnet : *subnets) {
307 cfg->sanityChecksLifetime(
"preferred-lifetime");
308 cfg->sanityChecksLifetime(
"valid-lifetime");
313 sharedNetworksSanityChecks(*networks, global->get(
"shared-networks"));
335 std::set<string> names;
338 for (
auto const& net : networks) {
343 string iface = net->getIface();
348 bool rapid_commit =
false;
352 if (subnets->size()) {
354 rapid_commit = (*subnets->begin())->getRapidCommit();
358 for (
auto const& subnet : *subnets) {
361 if (rapid_commit != subnet->getRapidCommit()) {
363 "must have the same rapid-commit value. Subnet "
365 <<
" has specified rapid-commit "
366 << (subnet->getRapidCommit() ?
"true" :
"false")
367 <<
", but earlier subnet in the same shared-network"
368 <<
" or the shared-network itself used rapid-commit "
369 << (rapid_commit ?
"true" :
"false"));
373 iface = subnet->getIface();
377 if (subnet->getIface().empty()) {
381 if (subnet->getIface() != iface) {
383 <<
" has specified interface " << subnet->getIface()
384 <<
", but earlier subnet in the same shared-network"
385 <<
" or the shared-network itself used " << iface);
390 txt += subnet->toText() +
" ";
395 if (net->getName().empty()) {
397 << txt <<
" is missing mandatory 'name' parameter");
401 if (names.find(net->getName()) != names.end()) {
403 "name " << net->getName() <<
" defined twice.");
405 names.insert(net->getName());
435 bool sock_changed = (sock_cfg && current_sock_cfg &&
436 !sock_cfg->equals(*current_sock_cfg));
443 if (!sock_cfg || !current_sock_cfg || sock_changed) {
480 string parameter_name;
490 mutable_cfg = boost::const_pointer_cast<Element>(config_set);
505 Dhcp6ConfigParser global_parser;
508 global_parser.parseEarly(srv_config, mutable_cfg);
512 if (data_directory) {
513 parameter_name =
"data-directory";
514 dirExists(data_directory->stringValue());
520 parameter_name =
"option-def";
523 parser.
parse(cfg_option_def, option_defs);
528 parameter_name =
"option-data";
531 parser.
parse(cfg_option, option_datas);
536 parameter_name =
"mac-sources";
539 parser.
parse(mac_source, mac_sources);
543 if (control_socket) {
544 mutable_cfg->remove(
"control-socket");
547 mutable_cfg->set(
"control-sockets", l);
551 if (control_sockets) {
552 parameter_name =
"control-sockets";
554 parser.
parse(*srv_config, control_sockets);
558 if (multi_threading) {
559 parameter_name =
"multi-threading";
561 parser.
parse(*srv_config, multi_threading);
564 bool multi_threading_enabled =
true;
565 uint32_t thread_count = 0;
566 uint32_t queue_size = 0;
568 multi_threading_enabled, thread_count, queue_size);
571 ConstElementPtr queue_control = mutable_cfg->get(
"dhcp-queue-control");
573 parameter_name =
"dhcp-queue-control";
575 srv_config->setDHCPQueueControl(parser.
parse(queue_control, multi_threading_enabled));
579 ConstElementPtr reservations_lookup_first = mutable_cfg->get(
"reservations-lookup-first");
580 if (reservations_lookup_first) {
581 parameter_name =
"reservations-lookup-first";
582 if (multi_threading_enabled) {
585 srv_config->setReservationsLookupFirst(reservations_lookup_first->boolValue());
589 mutable_cfg->get(
"host-reservation-identifiers");
590 if (hr_identifiers) {
591 parameter_name =
"host-reservation-identifiers";
593 parser.
parse(hr_identifiers);
598 parameter_name =
"server-id";
600 const CfgDUIDPtr& cfg = srv_config->getCfgDUID();
601 parser.
parse(cfg, server_id);
606 parameter_name =
"sanity-checks";
608 parser.
parse(*srv_config, sanity_checks);
612 mutable_cfg->get(
"expired-leases-processing");
613 if (expiration_cfg) {
614 parameter_name =
"expired-leases-processing";
623 if (hooks_libraries) {
624 parameter_name =
"hooks-libraries";
626 HooksConfig& libraries = srv_config->getHooksConfig();
627 hooks_parser.parse(libraries, hooks_libraries);
629 multi_threading_enabled);
638 parameter_name =
"dhcp-ddns";
642 d2_client_cfg = parser.
parse(dhcp_ddns);
646 if (client_classes) {
647 parameter_name =
"client-classes";
650 parser.
parse(client_classes, AF_INET6);
651 srv_config->setClientClassDictionary(dictionary);
656 if (lease_database) {
657 parameter_name =
"lease-database";
659 std::string access_string;
660 parser.
parse(access_string, lease_database);
662 cfg_db_access->setLeaseDbAccessString(access_string);
666 if (hosts_database) {
667 parameter_name =
"hosts-database";
669 std::string access_string;
670 parser.
parse(access_string, hosts_database);
672 cfg_db_access->setHostDbAccessString(access_string);
676 if (hosts_databases) {
677 parameter_name =
"hosts-databases";
679 for (
auto const& it : hosts_databases->listValue()) {
681 std::string access_string;
682 parser.
parse(access_string, it);
683 cfg_db_access->setHostDbAccessString(access_string);
689 if (shared_networks) {
690 parameter_name =
"shared-networks";
698 parser.parse(cfg, shared_networks);
702 global_parser.copySubnets6(srv_config->getCfgSubnets6(), cfg);
707 parameter_name =
"subnet6";
710 subnets_parser.
parse(srv_config, subnet6);
715 parameter_name =
"reservations";
717 HostReservationsListParser<HostReservationParser6> parser;
718 parser.parse(SUBNET_ID_GLOBAL, reservations, hosts);
719 for (
auto const& h : hosts) {
720 srv_config->getCfgHosts()->add(h);
725 if (config_control) {
726 parameter_name =
"config-control";
732 ConstElementPtr rsoo_list = mutable_cfg->get(
"relay-supplied-options");
734 parameter_name =
"relay-supplied-options";
735 RSOOListConfigParser parser;
736 parser.parse(srv_config, rsoo_list);
746 const std::map<std::string, ConstElementPtr>& values_map =
747 mutable_cfg->mapValue();
749 for (
auto const& config_pair : values_map) {
750 parameter_name = config_pair.first;
753 if ((config_pair.first ==
"data-directory") ||
754 (config_pair.first ==
"option-def") ||
755 (config_pair.first ==
"option-data") ||
756 (config_pair.first ==
"mac-sources") ||
757 (config_pair.first ==
"control-socket") ||
758 (config_pair.first ==
"control-sockets") ||
759 (config_pair.first ==
"multi-threading") ||
760 (config_pair.first ==
"dhcp-queue-control") ||
761 (config_pair.first ==
"host-reservation-identifiers") ||
762 (config_pair.first ==
"server-id") ||
763 (config_pair.first ==
"interfaces-config") ||
764 (config_pair.first ==
"sanity-checks") ||
765 (config_pair.first ==
"expired-leases-processing") ||
766 (config_pair.first ==
"hooks-libraries") ||
767 (config_pair.first ==
"dhcp-ddns") ||
768 (config_pair.first ==
"client-classes") ||
769 (config_pair.first ==
"lease-database") ||
770 (config_pair.first ==
"hosts-database") ||
771 (config_pair.first ==
"hosts-databases") ||
772 (config_pair.first ==
"subnet6") ||
773 (config_pair.first ==
"shared-networks") ||
774 (config_pair.first ==
"reservations") ||
775 (config_pair.first ==
"config-control") ||
776 (config_pair.first ==
"relay-supplied-options") ||
777 (config_pair.first ==
"loggers") ||
778 (config_pair.first ==
"compatibility")) {
792 if ( (config_pair.first ==
"renew-timer") ||
793 (config_pair.first ==
"rebind-timer") ||
794 (config_pair.first ==
"preferred-lifetime") ||
795 (config_pair.first ==
"min-preferred-lifetime") ||
796 (config_pair.first ==
"max-preferred-lifetime") ||
797 (config_pair.first ==
"valid-lifetime") ||
798 (config_pair.first ==
"min-valid-lifetime") ||
799 (config_pair.first ==
"max-valid-lifetime") ||
800 (config_pair.first ==
"decline-probation-period") ||
801 (config_pair.first ==
"dhcp4o6-port") ||
802 (config_pair.first ==
"server-tag") ||
803 (config_pair.first ==
"reservations-global") ||
804 (config_pair.first ==
"reservations-in-subnet") ||
805 (config_pair.first ==
"reservations-out-of-pool") ||
806 (config_pair.first ==
"calculate-tee-times") ||
807 (config_pair.first ==
"t1-percent") ||
808 (config_pair.first ==
"t2-percent") ||
809 (config_pair.first ==
"cache-threshold") ||
810 (config_pair.first ==
"cache-max-age") ||
811 (config_pair.first ==
"hostname-char-set") ||
812 (config_pair.first ==
"hostname-char-replacement") ||
813 (config_pair.first ==
"ddns-send-updates") ||
814 (config_pair.first ==
"ddns-override-no-update") ||
815 (config_pair.first ==
"ddns-override-client-update") ||
816 (config_pair.first ==
"ddns-replace-client-name") ||
817 (config_pair.first ==
"ddns-generated-prefix") ||
818 (config_pair.first ==
"ddns-qualifying-suffix") ||
819 (config_pair.first ==
"ddns-update-on-renew") ||
820 (config_pair.first ==
"ddns-use-conflict-resolution") ||
821 (config_pair.first ==
"ddns-conflict-resolution-mode") ||
822 (config_pair.first ==
"ddns-ttl-percent") ||
823 (config_pair.first ==
"store-extended-info") ||
824 (config_pair.first ==
"statistic-default-sample-count") ||
825 (config_pair.first ==
"statistic-default-sample-age") ||
826 (config_pair.first ==
"early-global-reservations-lookup") ||
827 (config_pair.first ==
"ip-reservations-unique") ||
828 (config_pair.first ==
"reservations-lookup-first") ||
829 (config_pair.first ==
"parked-packet-limit") ||
830 (config_pair.first ==
"allocator") ||
831 (config_pair.first ==
"pd-allocator") ) {
838 if (config_pair.first ==
"user-context") {
844 "unsupported global configuration parameter: " << config_pair.first
845 <<
" (" << config_pair.second->getPosition() <<
")");
849 parameter_name =
"<post parsing>";
852 global_parser.parse(srv_config, mutable_cfg);
857 global_parser.sanityChecks(srv_config, mutable_cfg);
860 if (!d2_client_cfg) {
863 d2_client_cfg->validateContents();
864 srv_config->setD2ClientConfig(d2_client_cfg);
867 .arg(parameter_name).arg(ex.what());
878 "Control-socket, hook-libraries, and D2 configuration "
879 "were sanity checked, but not applied.");
887 bool check_only,
bool extra_checks) {
890 "Can't parse NULL config");
895 .arg(server.redactConfig(config_set)->str());
917 string params =
"universe=6 persist=false";
923 cfg_db->setAppendedParameters(params);
924 cfg_db->createManagers();
925 }
catch (
const std::exception& ex) {
931 std::ostringstream err;
941 }
catch (
const std::exception& ex) {
942 err <<
"Error setting packet queue controls after server reconfiguration: "
961 server.discardPackets();
962 server.getCBControl()->reset();
966 string parameter_name;
975 mutable_cfg = boost::const_pointer_cast<Element>(config_set);
979 parameter_name =
"interfaces-config";
983 parser.
parse(cfg_iface, ifaces_config);
987 .arg(parameter_name).arg(ex.what());
994 " processing error");
1054 bool multi_threading_enabled =
true;
1055 uint32_t thread_count = 0;
1056 uint32_t queue_size = 0;
1058 multi_threading_enabled, thread_count, queue_size);
1059 libraries.loadLibraries(multi_threading_enabled);
1083 server.getCBControl()->databaseConfigFetch(srv_config,
1086 std::ostringstream err;
1087 err <<
"during update from config backend database: " << ex.what();
1093 std::ostringstream err;
1094 err <<
"during update from config backend database: "
1095 <<
"undefined configuration parsing error";
1110 if (notify_libraries) {
1111 return (notify_libraries);
1118 }
catch (
const std::exception& ex) {
1119 std::ostringstream err;
1120 err <<
"Error initializing hooks: "
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.
static IOServiceMgr & instance()
Access the IOServiceMgr singleton instance.
static std::string getHash(const isc::data::ConstElementPtr &config)
returns a hash of a given Element structure
static CommandMgr & instance()
CommandMgr is a singleton class.
static HttpCommandMgr & instance()
HttpCommandMgr is a singleton class.
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.
Parse Database Parameters.
void parse(std::string &access_string, isc::data::ConstElementPtr database_config)
Parse configuration value.
Wrapper class that holds MAC/hardware address sources.
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.
Parser for a list of client class definitions.
ClientClassDictionaryPtr parse(isc::data::ConstElementPtr class_def_list, uint16_t family, bool check_dependencies=true)
Parse configuration entries.
void parse(isc::data::ConstElementPtr cfg, isc::dhcp::SrvConfig &srv_cfg)
Parse compatibility flags.
Parser for the control-sockets structure.
void parse(SrvConfig &srv_cfg, isc::data::ConstElementPtr value)
"Parses" control-sockets structure
static isc::data::ConstElementPtr finishConfigHookLibraries(isc::data::ConstElementPtr config)
Configuration checker for hook libraries.
Parser for D2ClientConfig.
D2ClientConfigPtr parse(isc::data::ConstElementPtr d2_client_cfg)
Parses a given dhcp-ddns element into D2ClientConfig.
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.
Parser for the configuration of DHCP packet queue controls.
data::ElementPtr parse(const isc::data::ConstElementPtr &control_elem, bool multi_threading_enabled)
Parses content of the "dhcp-queue-control".
Parser for server DUID configuration.
void parse(const CfgDUIDPtr &cfg, isc::data::ConstElementPtr duid_configuration)
Parses DUID configuration.
To be removed. Please use ConfigError instead.
Parser for the configuration parameters pertaining to the processing of expired leases.
void parse(isc::data::ConstElementPtr expiration_config, isc::dhcp::CfgExpirationPtr expiration)
Parses parameters in the JSON map, pertaining to the processing of the expired leases.
static void logRegistered()
Logs out all registered backends.
Parser for a list of host identifiers for DHCPv6.
void parse(isc::data::ConstElementPtr ids_list)
Parses a list of host identifiers.
static IfaceMgr & instance()
IfaceMgr is a singleton class.
Parser for the configuration of interfaces.
void parse(const CfgIfacePtr &config, const isc::data::ConstElementPtr &values)
Parses content of the "interfaces-config".
static void logRegistered()
Logs out all registered backends.
static void setRuntimeOptionDefs(const OptionDefSpaceContainer &defs)
Copies option definitions created at runtime.
static OptionDefinitionPtr getOptionDef(const std::string &space, const uint16_t code)
Return the first option definition matching a particular option code.
static void revertRuntimeOptionDefs()
Reverts uncommitted changes to runtime option definitions.
parser for MAC/hardware acquisition sources
void parse(CfgMACSource &mac_sources, isc::data::ConstElementPtr value)
parses parameters value
Simple parser for multi-threading structure.
void parse(SrvConfig &srv_cfg, const isc::data::ConstElementPtr &value)
parses JSON structure.
Parser for option data values within a subnet.
void parse(const CfgOptionPtr &cfg, isc::data::ConstElementPtr option_data_list, bool encapsulate=true)
Parses a list of options, instantiates them and stores in cfg.
Parser for a list of option definitions.
void parse(CfgOptionDefPtr cfg, isc::data::ConstElementPtr def_list)
Parses a list of option definitions, create them and store in cfg.
Class of option definition space container.
Simple parser for sanity-checks structure.
void parse(SrvConfig &srv_cfg, const isc::data::ConstElementPtr &value)
parses JSON structure
static size_t deriveParameters(isc::data::ElementPtr global)
Derives (inherits) all parameters from global to more specific scopes.
static size_t setAllDefaults(isc::data::ElementPtr global)
Sets all defaults for DHCPv6 configuration.
static const uint32_t CFGSEL_ALL6
IPv6 related config.
this class parses a list of DHCP6 subnets
size_t parse(SrvConfigPtr cfg, data::ConstElementPtr subnets_list, bool encapsulate_options=true)
parses contents of the list
static const TimerMgrPtr & instance()
Returns pointer to the sole instance of the TimerMgr.
Wrapper class that holds hooks libraries configuration.
void verifyLibraries(const isc::data::Element::Position &position, bool multi_threading_enabled) const
Verifies that libraries stored in libraries_ are valid.
Parser for hooks library list.
static bool unloadLibraries()
Unload libraries.
static void prepareUnloadLibraries()
Prepare the unloading of libraries.
Implements parser for config control information, "config-control".
ConfigControlInfoPtr parse(const data::ConstElementPtr &config_control)
Parses a configuration control Element.
static MultiThreadingMgr & instance()
Returns a single instance of Multi Threading Manager.
Parsers for client class definitions.
This file contains several functions and constants that are used for handling commands and responses ...
#define isc_throw(type, stream)
A shortcut macro to insert known values into exception arguments.
Logging initialization functions.
#define LOG_ERROR(LOGGER, MESSAGE)
Macro to conveniently test error output and log it.
#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.
#define LOG_DEBUG(LOGGER, LEVEL, MESSAGE)
Macro to conveniently test debug output and log it.
const int CONTROL_RESULT_ERROR
Status code indicating a general failure.
ConstElementPtr createAnswer()
Creates a standard config/command level success answer message (i.e.
ConstElementPtr parseAnswer(int &rcode, const ConstElementPtr &msg)
boost::shared_ptr< HttpCommandConfig > HttpCommandConfigPtr
Pointer to a HttpCommandConfig object.
const int CONTROL_RESULT_SUCCESS
Status code indicating a successful operation.
boost::shared_ptr< const Element > ConstElementPtr
boost::shared_ptr< Element > ElementPtr
void configureCommandChannel()
Initialize the command channel based on the staging configuration.
boost::shared_ptr< CfgDUID > CfgDUIDPtr
Pointer to the Non-const object.
const isc::log::MessageID DHCP6_PARSER_FAIL
const isc::log::MessageID DHCP6_PARSER_EXCEPTION
boost::shared_ptr< D2ClientConfig > D2ClientConfigPtr
Defines a pointer for D2ClientConfig instances.
boost::shared_ptr< CfgOption > CfgOptionPtr
Non-const pointer.
boost::multi_index_container< SharedNetwork6Ptr, boost::multi_index::indexed_by< boost::multi_index::random_access< boost::multi_index::tag< SharedNetworkRandomAccessIndexTag > >, boost::multi_index::hashed_non_unique< boost::multi_index::tag< SharedNetworkIdIndexTag >, boost::multi_index::const_mem_fun< data::BaseStampedElement, uint64_t, &data::BaseStampedElement::getId > >, boost::multi_index::ordered_unique< boost::multi_index::tag< SharedNetworkNameIndexTag >, boost::multi_index::const_mem_fun< SharedNetwork6, std::string, &SharedNetwork6::getName > >, boost::multi_index::ordered_non_unique< boost::multi_index::tag< SharedNetworkModificationTimeIndexTag >, boost::multi_index::const_mem_fun< data::BaseStampedElement, boost::posix_time::ptime, &data::BaseStampedElement::getModificationTime > > > > SharedNetwork6Collection
Multi index container holding shared networks.
isc::data::ConstElementPtr configureDhcp6Server(Dhcpv6Srv &server, isc::data::ConstElementPtr config_set, bool check_only, bool extra_checks)
Configure DHCPv6 server (Dhcpv6Srv) with a set of configuration values.
boost::shared_ptr< CfgOptionDef > CfgOptionDefPtr
Non-const pointer.
boost::shared_ptr< CfgDbAccess > CfgDbAccessPtr
A pointer to the CfgDbAccess.
isc::data::ConstElementPtr processDhcp6Config(isc::data::ConstElementPtr config_set)
Process a DHCPv6 confguration and return an answer stating if the configuration is valid,...
const int DBG_DHCP6_COMMAND
Debug level used to log receiving commands.
const isc::log::MessageID DHCP6_CONFIG_COMPLETE
boost::shared_ptr< CfgIface > CfgIfacePtr
A pointer to the CfgIface .
boost::shared_ptr< SrvConfig > SrvConfigPtr
Non-const pointer to the SrvConfig.
boost::shared_ptr< CfgSubnets6 > CfgSubnets6Ptr
Non-const pointer.
std::vector< HostPtr > HostCollection
Collection of the Host objects.
const isc::log::MessageID DHCP6_RESERVATIONS_LOOKUP_FIRST_ENABLED
boost::shared_ptr< OptionDefinition > OptionDefinitionPtr
Pointer to option definition object.
boost::shared_ptr< ClientClassDictionary > ClientClassDictionaryPtr
Defines a pointer to a ClientClassDictionary.
boost::shared_ptr< CfgSharedNetworks6 > CfgSharedNetworks6Ptr
Pointer to the configuration of IPv6 shared networks.
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 > > > > Subnet6SimpleCollection
A simple collection of Subnet6 objects.
const isc::log::MessageID DHCP6_PARSER_COMMIT_EXCEPTION
const isc::log::MessageID DHCP6_CONFIG_START
SharedNetworksListParser< SharedNetwork6Parser > SharedNetworks6ListParser
Type of the shared networks list parser for IPv6.
const isc::log::MessageID DHCP6_PARSER_COMMIT_FAIL
isc::log::Logger dhcp6_logger(DHCP6_APP_LOGGER_NAME)
Base logger for DHCPv6 server.
const isc::log::MessageID DHCP6_CONFIG_PACKET_QUEUE
boost::shared_ptr< ConfigControlInfo > ConfigControlInfoPtr
Defines a pointer to a ConfigControlInfo.
Defines the logger used by the top-level component of kea-lfc.
#define DHCP6_OPTION_SPACE
static data::ElementPtr toElement(data::ConstElementPtr map)
Copy an Element map.