28 const uint8_t* identifier_begin,
29 const size_t identifier_len)
const {
33 getAllInternal<ConstHostCollection>(identifier_type, identifier_begin,
34 identifier_len, collection);
40 const uint8_t* identifier_begin,
const size_t identifier_len) {
44 getAllInternal<HostCollection>(identifier_type, identifier_begin,
45 identifier_len, collection);
50 CfgHosts::getAll4(
const SubnetID& subnet_id)
const {
54 getAllInternal4<ConstHostCollection>(subnet_id, collection);
63 getAllInternal4<HostCollection>(subnet_id, collection);
68 CfgHosts::getAll6(
const SubnetID& subnet_id)
const {
72 getAllInternal6<ConstHostCollection>(subnet_id, collection);
81 getAllInternal6<HostCollection>(subnet_id, collection);
86 CfgHosts::getAllbyHostname(
const std::string& hostname)
const {
90 getAllbyHostnameInternal<ConstHostCollection>(hostname, collection);
95 CfgHosts::getAllbyHostname(
const std::string& hostname) {
99 getAllbyHostnameInternal<HostCollection>(hostname, collection);
104 CfgHosts::getAllbyHostname4(
const std::string& hostname,
109 getAllbyHostnameInternal4<ConstHostCollection>(hostname, subnet_id, collection);
114 CfgHosts::getAllbyHostname4(
const std::string& hostname,
119 getAllbyHostnameInternal4<HostCollection>(hostname, subnet_id, collection);
124 CfgHosts::getAllbyHostname6(
const std::string& hostname,
129 getAllbyHostnameInternal6<ConstHostCollection>(hostname, subnet_id, collection);
134 CfgHosts::getAllbyHostname6(
const std::string& hostname,
139 getAllbyHostnameInternal6<HostCollection>(hostname, subnet_id, collection);
146 uint64_t lower_host_id,
151 getPageInternal4<ConstHostCollection>(subnet_id,
161 uint64_t lower_host_id,
166 getPageInternal4<HostCollection>(subnet_id,
176 uint64_t lower_host_id,
181 getPageInternal6<ConstHostCollection>(subnet_id,
191 uint64_t lower_host_id,
196 getPageInternal6<HostCollection>(subnet_id,
204 CfgHosts::getPage4(
size_t& ,
205 uint64_t lower_host_id,
210 getPageInternal<ConstHostCollection>(lower_host_id,
217 CfgHosts::getPage4(
size_t& ,
218 uint64_t lower_host_id,
223 getPageInternal<HostCollection>(lower_host_id,
230 CfgHosts::getPage6(
size_t& ,
231 uint64_t lower_host_id,
236 getPageInternal<ConstHostCollection>(lower_host_id,
243 CfgHosts::getPage6(
size_t& ,
244 uint64_t lower_host_id,
249 getPageInternal<HostCollection>(lower_host_id,
260 getAllInternal4<ConstHostCollection>(address, collection);
269 getAllInternal4<HostCollection>(address, collection);
278 getAllInternal6<ConstHostCollection>(address, collection);
287 getAllInternal6<HostCollection>(address, collection);
291 template<
typename Storage>
294 const uint8_t* identifier,
295 const size_t identifier_len,
296 Storage& storage)
const {
300 std::string identifier_text = Host::getIdentifierAsText(identifier_type,
304 .arg(identifier_text);
309 boost::make_tuple(std::vector<uint8_t>(identifier,
310 identifier + identifier_len),
314 for (HostContainerIndex0::iterator host = idx.lower_bound(t);
315 host != idx.upper_bound(t);
319 .arg(identifier_text)
320 .arg((*host)->toText());
321 storage.push_back(*host);
326 .arg(identifier_text)
327 .arg(storage.size());
330 template<
typename Storage>
332 CfgHosts::getAllInternal4(
const SubnetID& subnet_id,
333 Storage& storage)
const {
342 for (HostContainerIndex2::iterator host = idx.lower_bound(subnet_id);
343 host != idx.upper_bound(subnet_id);
348 .arg((*host)->toText());
349 storage.push_back(*host);
355 .arg(storage.size());
358 template<
typename Storage>
360 CfgHosts::getAllInternal6(
const SubnetID& subnet_id,
361 Storage& storage)
const {
370 for (HostContainerIndex3::iterator host = idx.lower_bound(subnet_id);
371 host != idx.upper_bound(subnet_id);
376 .arg((*host)->toText());
377 storage.push_back(*host);
383 .arg(storage.size());
386 template<
typename Storage>
388 CfgHosts::getAllbyHostnameInternal(
const std::string& hostname,
389 Storage& storage)
const {
398 for (HostContainerIndex5::iterator host = idx.lower_bound(hostname);
399 host != idx.upper_bound(hostname);
404 .arg((*host)->toText());
405 storage.push_back(*host);
411 .arg(storage.size());
414 template<
typename Storage>
416 CfgHosts::getAllbyHostnameInternal4(
const std::string& hostname,
418 Storage& storage)
const {
429 for (HostContainerIndex5::iterator host = idx.lower_bound(hostname);
430 host != idx.upper_bound(hostname);
432 if ((*host)->getIPv4SubnetID() != subnet_id) {
439 .arg((*host)->toText());
440 storage.push_back(*host);
448 .arg(storage.size());
451 template<
typename Storage>
453 CfgHosts::getAllbyHostnameInternal6(
const std::string& hostname,
455 Storage& storage)
const {
466 for (HostContainerIndex5::iterator host = idx.lower_bound(hostname);
467 host != idx.upper_bound(hostname);
469 if ((*host)->getIPv6SubnetID() != subnet_id) {
476 .arg((*host)->toText());
477 storage.push_back(*host);
485 .arg(storage.size());
488 template<
typename Storage>
490 CfgHosts::getPageInternal(uint64_t lower_host_id,
491 const HostPageSize& page_size,
492 Storage& storage)
const {
498 HostContainerIndex4::const_iterator host = idx.lower_bound(lower_host_id);
502 (host != idx.end()) && ((*host)->getHostId() == lower_host_id)) {
507 for (; host != idx.end(); ++host) {
510 .arg((*host)->toText());
511 storage.push_back(*host);
512 if (storage.size() >= page_size.page_size_) {
519 .arg(storage.size());
522 template<
typename Storage>
524 CfgHosts::getPageInternal4(
const SubnetID& subnet_id,
525 uint64_t lower_host_id,
526 const HostPageSize& page_size,
527 Storage& storage)
const {
534 HostContainerIndex4::const_iterator host = idx.lower_bound(lower_host_id);
538 (host != idx.end()) && ((*host)->getHostId() == lower_host_id)) {
543 for (; host != idx.end(); ++host) {
544 if ((*host)->getIPv4SubnetID() != subnet_id) {
550 .arg((*host)->toText());
551 storage.push_back(*host);
552 if (storage.size() >= page_size.page_size_) {
560 .arg(storage.size());
563 template<
typename Storage>
565 CfgHosts::getPageInternal6(
const SubnetID& subnet_id,
566 uint64_t lower_host_id,
567 const HostPageSize& page_size,
568 Storage& storage)
const {
575 HostContainerIndex4::const_iterator host = idx.lower_bound(lower_host_id);
579 (host != idx.end()) && ((*host)->getHostId() == lower_host_id)) {
584 for (; host != idx.end(); ++host) {
585 if ((*host)->getIPv6SubnetID() != subnet_id) {
591 .arg((*host)->toText());
592 storage.push_back(*host);
593 if (storage.size() >= page_size.page_size_) {
601 .arg(storage.size());
605 template<
typename Storage>
607 CfgHosts::getAllInternal4(
const IOAddress& address, Storage& storage)
const {
612 if (!address.
isV4()) {
613 isc_throw(BadHostAddress,
"must specify an IPv4 address when searching"
614 " for a host, specified address was " << address);
620 for (HostContainerIndex1::iterator host = r.first; host != r.second;
625 .arg((*host)->toText());
626 storage.push_back(*host);
631 .arg(storage.size());
634 template<
typename Storage>
636 CfgHosts::getAllInternal6(
const IOAddress& address, Storage& storage)
const {
641 if (!address.
isV6()) {
642 isc_throw(BadHostAddress,
"must specify an IPv6 address when searching"
643 " for a host, specified address was " << address);
649 for (HostContainerIndex1::iterator host = r.first; host != r.second;
654 .arg((*host)->toText());
655 storage.push_back(*host);
660 .arg(storage.size());
666 const uint8_t* identifier_begin,
667 const size_t identifier_len)
const {
668 return (getHostInternal(subnet_id,
false, identifier_type, identifier_begin,
675 const uint8_t* identifier_begin,
676 const size_t identifier_len) {
677 return (getHostInternal(subnet_id,
false, identifier_type, identifier_begin,
684 .arg(subnet_id).arg(address.
toText());
687 for (ConstHostCollection::const_iterator host = hosts.begin();
688 host != hosts.end(); ++host) {
689 if ((*host)->getIPv4SubnetID() == subnet_id) {
694 .arg((*host)->toText());
700 .arg(subnet_id).arg(address.
toText());
708 .arg(subnet_id).arg(address.
toText());
711 for (
auto host : getAll4(address)) {
712 if (host->getIPv4SubnetID() == subnet_id) {
717 .arg(host->toText());
718 hosts.push_back(host);
732 const uint8_t* identifier_begin,
733 const size_t identifier_len)
const {
734 return (getHostInternal(subnet_id,
true, identifier_type, identifier_begin,
741 const uint8_t* identifier_begin,
742 const size_t identifier_len) {
743 return (getHostInternal(subnet_id,
true, identifier_type, identifier_begin,
748 CfgHosts::get6(
const IOAddress& prefix,
const uint8_t prefix_len)
const {
749 return (getHostInternal6<ConstHostPtr>(prefix, prefix_len));
753 CfgHosts::get6(
const IOAddress& prefix,
const uint8_t prefix_len) {
754 return (getHostInternal6<HostPtr>(prefix, prefix_len));
761 return (getHostInternal6<ConstHostPtr, ConstHostCollection>(subnet_id, address));
768 return (getHostInternal6<HostPtr, HostCollection>(subnet_id, address));
775 getAllInternal6(subnet_id, address, hosts);
779 template<
typename ReturnType,
typename Storage>
781 CfgHosts::getHostInternal6(
const SubnetID& subnet_id,
784 .arg(subnet_id).arg(address.
toText());
787 getAllInternal6<Storage>(subnet_id, address, storage);
788 switch (storage.size()) {
793 .arg(address.toText());
800 .arg(address.toText())
801 .arg((*storage.begin())->toText());
802 return (*storage.begin());
806 " for the host belonging to the subnet with id '"
807 << subnet_id <<
"' and using the address '"
808 << address.toText() <<
"'");
813 template<
typename ReturnType>
815 CfgHosts::getHostInternal6(
const asiolink::IOAddress& prefix,
816 const uint8_t prefix_len)
const {
818 .arg(prefix.toText()).arg(static_cast<int>(prefix_len));
823 idx.upper_bound(prefix));
824 for (HostContainer6Index0::iterator resrv = r.first; resrv != r.second;
826 if (resrv->resrv_.getPrefixLen() == prefix_len) {
829 .arg(prefix.toText())
830 .arg(static_cast<int>(prefix_len))
831 .arg(resrv->host_->toText());
832 return (resrv->host_);
838 .arg(prefix.toText())
839 .arg(static_cast<int>(prefix_len));
840 return (ReturnType());
843 template<
typename Storage>
845 CfgHosts::getAllInternal6(
const SubnetID& subnet_id,
846 const asiolink::IOAddress& address,
847 Storage& storage)
const {
849 .arg(subnet_id).arg(address.toText());
852 if (!address.isV6()) {
853 isc_throw(BadHostAddress,
"must specify an IPv6 address when searching"
854 " for a host, specified address was " << address);
860 idx.upper_bound(boost::make_tuple(subnet_id, address)));
866 for(HostContainer6Index1::iterator resrv = r.first; resrv != r.second; ++resrv) {
870 .arg(address.toText())
871 .arg(resrv->host_->toText());
872 storage.push_back(resrv->host_);
878 .arg(address.toText())
879 .arg(storage.size());
883 CfgHosts::getHostInternal(
const SubnetID& subnet_id,
const bool subnet6,
884 const Host::IdentifierType& identifier_type,
885 const uint8_t* identifier,
886 const size_t identifier_len)
const {
889 .arg(subnet6 ?
"IPv6" :
"IPv4")
891 .arg(Host::getIdentifierAsText(identifier_type, identifier, identifier_len));
897 getAllInternal<HostCollection>(identifier_type, identifier, identifier_len,
903 for (HostCollection::const_iterator host_it = hosts.begin();
904 host_it != hosts.end(); ++host_it) {
906 SubnetID host_subnet_id = subnet6 ? (*host_it)->getIPv6SubnetID() :
907 (*host_it)->getIPv4SubnetID();
909 if (subnet_id == host_subnet_id) {
921 isc_throw(DuplicateHost,
"more than one reservation found"
922 " for the host belonging to the subnet with id '"
923 << subnet_id <<
"' and using the identifier '"
924 << Host::getIdentifierAsText(identifier_type,
936 .arg(Host::getIdentifierAsText(identifier_type, identifier,
938 .arg(host->toText());
944 .arg(Host::getIdentifierAsText(identifier_type, identifier,
954 .arg(host ? host->toText() :
"(no-host)");
959 " is added to the configuration");
963 if (host->getIPv4SubnetID() == SUBNET_ID_UNUSED &&
964 host->getIPv6SubnetID() == SUBNET_ID_UNUSED) {
966 " 0 when adding new host reservation");
975 CfgHosts::add4(
const HostPtr& host) {
978 DuidPtr duid = host->getDuid();
983 if (host->getHostname().empty() &&
984 (host->getIPv4Reservation().isV4Zero()) &&
985 !host->hasIPv6Reservation() &&
986 host->getNextServer().isV4Zero() &&
987 host->getServerHostname().empty() &&
988 host->getBootFileName().empty() &&
989 host->getCfgOption4()->empty() &&
990 host->getCfgOption6()->empty() &&
991 host->getClientClasses4().empty() &&
992 host->getClientClasses6().empty()) {
993 std::ostringstream s;
995 s <<
"for DUID: " << hwaddr->toText();
997 s <<
"for HW address: " << duid->toText();
999 isc_throw(BadValue,
"specified reservation " << s.str()
1000 <<
" must include at least one resource, i.e. "
1001 "hostname, IPv4 address, IPv6 address/prefix, "
1006 if (host->getIPv4SubnetID() != SUBNET_ID_UNUSED) {
1007 if (hwaddr && !hwaddr->hwaddr_.empty() &&
1008 get4(host->getIPv4SubnetID(), Host::IDENT_HWADDR,
1009 &hwaddr->hwaddr_[0], hwaddr->hwaddr_.size())) {
1010 isc_throw(DuplicateHost,
"failed to add new host using the HW"
1011 <<
" address '" << hwaddr->toText(
false)
1012 <<
"' to the IPv4 subnet id '" << host->getIPv4SubnetID()
1013 <<
"' as this host has already been added");
1015 if (duid && !duid->getDuid().empty() &&
1016 get4(host->getIPv4SubnetID(), Host::IDENT_DUID,
1017 &duid->getDuid()[0], duid->getDuid().size())) {
1018 isc_throw(DuplicateHost,
"failed to add new host using the "
1019 <<
"DUID '" << duid->toText()
1020 <<
"' to the IPv4 subnet id '" << host->getIPv4SubnetID()
1021 <<
"' as this host has already been added");
1024 }
else if (host->getIPv6SubnetID() != SUBNET_ID_UNUSED) {
1025 if (duid && !duid->getDuid().empty() &&
1026 get6(host->getIPv6SubnetID(), Host::IDENT_DUID,
1027 &duid->getDuid()[0], duid->getDuid().size())) {
1028 isc_throw(DuplicateHost,
"failed to add new host using the "
1029 <<
"DUID '" << duid->toText()
1030 <<
"' to the IPv6 subnet id '" << host->getIPv6SubnetID()
1031 <<
"' as this host has already been added");
1033 if (hwaddr && !hwaddr->hwaddr_.empty() &&
1034 get6(host->getIPv6SubnetID(), Host::IDENT_HWADDR,
1035 &hwaddr->hwaddr_[0], hwaddr->hwaddr_.size())) {
1036 isc_throw(DuplicateHost,
"failed to add new host using the HW"
1037 <<
" address '" << hwaddr->toText(
false)
1038 <<
"' to the IPv6 subnet id '" << host->getIPv6SubnetID()
1039 <<
"' as this host has already been added");
1044 if (ip_reservations_unique_ && !host->getIPv4Reservation().isV4Zero() &&
1045 (host->getIPv4SubnetID() != SUBNET_ID_UNUSED) &&
1046 get4(host->getIPv4SubnetID(), host->getIPv4Reservation())) {
1047 isc_throw(ReservedAddress,
"failed to add new host using the HW"
1048 " address '" << (hwaddr ? hwaddr->toText(
false) :
"(null)")
1049 <<
" and DUID '" << (duid ? duid->toText() :
"(null)")
1050 <<
"' to the IPv4 subnet id '" << host->getIPv4SubnetID()
1051 <<
"' for the address " << host->getIPv4Reservation()
1052 <<
": There's already a reservation for this address");
1056 const std::vector<uint8_t>&
id = host->getIdentifier();
1057 if ((host->getIPv4SubnetID() != SUBNET_ID_UNUSED) && !
id.empty()) {
1058 if (get4(host->getIPv4SubnetID(), host->getIdentifierType(), &
id[0],
1060 isc_throw(DuplicateHost,
"failed to add duplicate IPv4 host using identifier: "
1061 << Host::getIdentifierAsText(host->getIdentifierType(),
1062 &
id[0],
id.size()));
1067 host->setHostId(++next_host_id_);
1068 hosts_.insert(host);
1072 CfgHosts::add6(
const HostPtr& host) {
1074 if (host->getIPv6SubnetID() == SUBNET_ID_UNUSED) {
1079 HWAddrPtr hwaddr = host->getHWAddress();
1080 DuidPtr duid = host->getDuid();
1086 if (std::distance(reservations.first, reservations.second) == 0) {
1096 if (ip_reservations_unique_) {
1098 if (get6(host->getIPv6SubnetID(), it->second.getPrefix())) {
1099 isc_throw(DuplicateHost,
"failed to add address reservation for "
1100 <<
"host using the HW address '"
1101 << (hwaddr ? hwaddr->toText(
false) :
"(null)")
1102 <<
" and DUID '" << (duid ? duid->toText() :
"(null)")
1103 <<
"' to the IPv6 subnet id '" << host->getIPv6SubnetID()
1104 <<
"' for address/prefix " << it->second.getPrefix()
1105 <<
": There's already reservation for this address/prefix");
1108 hosts6_.insert(HostResrv6Tuple(it->second, host));
1122 size_t erased = idx.erase(subnet_id);
1145 size_t erased_addresses = idx6.erase(subnet_id);
1149 size_t erased_hosts = idx.erase(subnet_id);
1153 .arg(erased_addresses)
1156 return (erased_hosts);
1170 CfgHosts::setIPReservationsUnique(
const bool unique) {
1171 ip_reservations_unique_ = unique;
1177 CfgHosts::toElement()
const {
1178 uint16_t family = CfgMgr::instance().getFamily();
1179 if (family == AF_INET) {
1180 return (toElement4());
1181 }
else if (family == AF_INET6) {
1182 return (toElement6());
1185 "address family: " << family);
1190 CfgHosts::toElement4()
const {
1194 for (HostContainerIndex0::const_iterator host = idx.begin();
1195 host != idx.end(); ++host) {
1201 SubnetID subnet_id = (*host)->getIPv4SubnetID();
1202 result.
add(subnet_id, map);
1208 CfgHosts::toElement6()
const {
1209 CfgHostsList result;
1212 for (HostContainerIndex0::const_iterator host = idx.begin();
1213 host != idx.end(); ++host) {
1219 SubnetID subnet_id = (*host)->getIPv6SubnetID();
1220 result.add(subnet_id, map);
1222 return (result.externalize());
const isc::log::MessageID HOSTS_CFG_ADD_HOST
boost::shared_ptr< DUID > DuidPtr
std::pair< HostContainer6Index0::iterator, HostContainer6Index0::iterator > HostContainer6Index0Range
Results range returned using the HostContainer6Index0.
const int HOSTS_DBG_TRACE_DETAIL_DATA
Records detailed results of lookups.
HostContainer6::nth_index< 1 >::type HostContainer6Index1
Second index type in the HostContainer6.
const isc::log::MessageID HOSTS_CFG_GET_ALL_HOSTNAME_SUBNET_ID4
Wraps value holding size of the page with host reservations.
A generic exception that is thrown when a function is not implemented.
const isc::log::MessageID HOSTS_CFG_GET_ALL_ADDRESS4
std::pair< HostContainer6Index1::iterator, HostContainer6Index1::iterator > HostContainer6Index1Range
Results range returned using the HostContainer6Index1.
Utility class to represent host reservation configurations internally as a map keyed by subnet IDs...
boost::shared_ptr< HWAddr > HWAddrPtr
Shared pointer to a hardware address structure.
const isc::log::MessageID HOSTS_CFG_GET_ALL_HOST
const isc::log::MessageID HOSTS_CFG_GET_ONE_SUBNET_ID_IDENTIFIER
boost::shared_ptr< Host > HostPtr
Pointer to the Host object.
const isc::log::MessageID HOSTS_CFG_GET_ALL_SUBNET_ID4_COUNT
const isc::log::MessageID HOSTS_CFG_GET_ALL_SUBNET_ID_ADDRESS6
const isc::log::MessageID HOSTS_CFG_GET_ALL_HOSTNAME_SUBNET_ID6
const isc::log::MessageID HOSTS_CFG_GET_ONE_PREFIX_HOST
const int HOSTS_DBG_RESULTS
Records the results of the lookups.
isc::data::ConstElementPtr get(SubnetID id) const
Return the host reservations for a subnet ID.
const isc::log::MessageID HOSTS_CFG_GET_ONE_SUBNET_ID_ADDRESS4_HOST
std::pair< HostContainerIndex1::iterator, HostContainerIndex1::iterator > HostContainerIndex1Range
Results range returned using the HostContainerIndex1.
HostContainer6::nth_index< 2 >::type HostContainer6Index2
Third index type in the HostContainer6.
const isc::log::MessageID HOSTS_CFG_GET_ONE_SUBNET_ID_IDENTIFIER_NULL
boost::shared_ptr< Element > ElementPtr
const isc::log::MessageID HOSTS_CFG_GET_ALL_SUBNET_ID_ADDRESS4_HOST
HostContainer::nth_index< 0 >::type HostContainerIndex0
First index type in the HostContainer.
std::vector< HostPtr > HostCollection
Collection of the Host objects.
const isc::log::MessageID HOSTS_CFG_GET_ALL_HOSTNAME
const isc::log::MessageID HOSTS_CFG_GET_ALL_HOSTNAME_SUBNET_ID4_HOST
bool isV4() const
Convenience function to check for an IPv4 address.
const isc::log::MessageID HOSTS_CFG_GET_ALL_HOSTNAME_SUBNET_ID6_COUNT
const isc::log::MessageID HOSTS_CFG_GET_ALL_HOSTNAME_COUNT
HostContainer::nth_index< 3 >::type HostContainerIndex3
Forth index type in the HostContainer.
const isc::log::MessageID HOSTS_CFG_GET_ALL_IDENTIFIER_HOST
const isc::log::MessageID HOSTS_CFG_GET_ALL_IDENTIFIER_COUNT
#define isc_throw(type, stream)
A shortcut macro to insert known values into exception arguments.
void add(SubnetID id, isc::data::ElementPtr resv)
Add a host reservation to the map.
A generic exception that is thrown if a parameter given to a method is considered invalid in that con...
std::pair< IPv6ResrvIterator, IPv6ResrvIterator > IPv6ResrvRange
std::vector< ConstHostPtr > ConstHostCollection
Collection of the const Host objects.
isc::log::Logger hosts_logger("hosts")
Logger for the HostMgr and the code it calls.
const int HOSTS_DBG_TRACE
Logging levels for the host reservations management.
const isc::log::MessageID HOSTS_CFG_GET_ONE_PREFIX
const isc::log::MessageID HOSTS_CFG_GET_ALL_SUBNET_ID_ADDRESS4_COUNT
const isc::log::MessageID HOSTS_CFG_GET_ALL_SUBNET_ID6
const isc::log::MessageID HOSTS_CFG_GET_ALL_HOSTNAME_SUBNET_ID4_COUNT
const isc::log::MessageID HOSTS_CFG_GET_ALL_ADDRESS4_HOST
boost::shared_ptr< const Host > ConstHostPtr
Const pointer to the Host object.
HostContainer::nth_index< 1 >::type HostContainerIndex1
Second index type in the HostContainer.
IPv6ResrvCollection::const_iterator IPv6ResrvIterator
const isc::log::MessageID HOSTS_CFG_GET_ALL_SUBNET_ID4
HostContainer6::nth_index< 0 >::type HostContainer6Index0
First index type in the HostContainer6.
Defines the logger used by the top-level component of kea-dhcp-ddns.
const isc::log::MessageID HOSTS_CFG_GET_ALL_SUBNET_ID_ADDRESS4
const isc::log::MessageID HOSTS_CFG_GET_ALL_HOSTNAME_HOST
const isc::log::MessageID HOSTS_CFG_DEL_ALL_SUBNET4
Exception thrown when the duplicate Host object is detected.
const isc::log::MessageID HOSTS_CFG_GET_ALL_ADDRESS6_HOST
const isc::log::MessageID HOSTS_CFG_GET_ALL_SUBNET_ID4_HOST
HostContainer::nth_index< 4 >::type HostContainerIndex4
Fifth index type in the HostContainer.
const isc::log::MessageID HOSTS_CFG_GET_ONE_SUBNET_ID_ADDRESS6_NULL
const isc::log::MessageID HOSTS_CFG_GET_ALL_ADDRESS6
#define LOG_DEBUG(LOGGER, LEVEL, MESSAGE)
Macro to conveniently test debug output and log it.
std::string toText() const
Convert the address to a string.
const isc::log::MessageID HOSTS_CFG_GET_ALL_SUBNET_ID6_HOST
const isc::log::MessageID HOSTS_CFG_GET_ALL_HOSTNAME_SUBNET_ID6_HOST
bool isV6() const
Convenience function to check for an IPv6 address.
const isc::log::MessageID HOSTS_CFG_GET_ALL
const isc::log::MessageID HOSTS_CFG_GET_ALL_ADDRESS4_COUNT
const isc::log::MessageID HOSTS_CFG_DEL_ALL_SUBNET6
const isc::log::MessageID HOSTS_CFG_GET_ONE_SUBNET_ID_ADDRESS4_NULL
HostContainer::nth_index< 2 >::type HostContainerIndex2
Third index type in the HostContainer.
const isc::log::MessageID HOSTS_CFG_GET_ALL_SUBNET_ID_ADDRESS6_HOST
const isc::log::MessageID HOSTS_CFG_GET_ALL_IDENTIFIER
HostContainer::nth_index< 5 >::type HostContainerIndex5
Sixth index type in the HostContainer.
IdentifierType
Type of the host identifier.
The IOAddress class represents an IP addresses (version agnostic)
const isc::log::MessageID HOSTS_CFG_GET_ALL_COUNT
const isc::log::MessageID HOSTS_CFG_GET_ONE_SUBNET_ID_IDENTIFIER_HOST
const isc::log::MessageID HOSTS_CFG_GET_ONE_SUBNET_ID_ADDRESS6
const isc::log::MessageID HOSTS_CFG_GET_ONE_SUBNET_ID_ADDRESS6_HOST
const isc::log::MessageID HOSTS_CFG_GET_ONE_SUBNET_ID_ADDRESS4
const isc::log::MessageID HOSTS_CFG_GET_ALL_ADDRESS6_COUNT
isc::data::ElementPtr externalize() const
Externalize the map to a list Element.
const isc::log::MessageID HOSTS_CFG_GET_ALL_SUBNET_ID_ADDRESS6_COUNT
const isc::log::MessageID HOSTS_CFG_GET_ONE_PREFIX_NULL
uint32_t SubnetID
Unique identifier for a subnet (both v4 and v6)
const isc::log::MessageID HOSTS_CFG_GET_ALL_SUBNET_ID6_COUNT