29 const uint8_t* identifier_begin,
30 const size_t identifier_len)
const {
34 getAllInternal<ConstHostCollection>(identifier_type, identifier_begin,
35 identifier_len, collection);
41 const uint8_t* identifier_begin,
const size_t identifier_len) {
45 getAllInternal<HostCollection>(identifier_type, identifier_begin,
46 identifier_len, collection);
55 getAllInternal4<ConstHostCollection>(subnet_id, collection);
64 getAllInternal4<HostCollection>(subnet_id, collection);
73 getAllInternal6<ConstHostCollection>(subnet_id, collection);
82 getAllInternal6<HostCollection>(subnet_id, collection);
91 getAllbyHostnameInternal<ConstHostCollection>(hostname, collection);
100 getAllbyHostnameInternal<HostCollection>(hostname, collection);
110 getAllbyHostnameInternal4<ConstHostCollection>(hostname, subnet_id, collection);
120 getAllbyHostnameInternal4<HostCollection>(hostname, subnet_id, collection);
130 getAllbyHostnameInternal6<ConstHostCollection>(hostname, subnet_id, collection);
140 getAllbyHostnameInternal6<HostCollection>(hostname, subnet_id, collection);
147 uint64_t lower_host_id,
152 getPageInternal4<ConstHostCollection>(subnet_id,
162 uint64_t lower_host_id,
167 getPageInternal4<HostCollection>(subnet_id,
177 uint64_t lower_host_id,
182 getPageInternal6<ConstHostCollection>(subnet_id,
192 uint64_t lower_host_id,
197 getPageInternal6<HostCollection>(subnet_id,
206 uint64_t lower_host_id,
211 getPageInternal<ConstHostCollection>(lower_host_id,
219 uint64_t lower_host_id,
224 getPageInternal<HostCollection>(lower_host_id,
232 uint64_t lower_host_id,
237 getPageInternal<ConstHostCollection>(lower_host_id,
245 uint64_t lower_host_id,
250 getPageInternal<HostCollection>(lower_host_id,
261 getAllInternal4<ConstHostCollection>(address, collection);
270 getAllInternal4<HostCollection>(address, collection);
279 getAllInternal6<ConstHostCollection>(address, collection);
288 getAllInternal6<HostCollection>(address, collection);
292template<
typename Storage>
295 const uint8_t* identifier,
296 const size_t identifier_len,
297 Storage& storage)
const {
305 .arg(identifier_text);
310 boost::make_tuple(std::vector<uint8_t>(identifier,
311 identifier + identifier_len),
315 for (HostContainerIndex0::iterator host = idx.lower_bound(t);
316 host != idx.upper_bound(t);
320 .arg(identifier_text)
321 .arg((*host)->toText());
322 storage.push_back(*host);
327 .arg(identifier_text)
328 .arg(storage.size());
331template<
typename Storage>
333CfgHosts::getAllInternal4(
const SubnetID& subnet_id,
334 Storage& storage)
const {
343 for (HostContainerIndex2::iterator host = idx.lower_bound(subnet_id);
344 host != idx.upper_bound(subnet_id);
349 .arg((*host)->toText());
350 storage.push_back(*host);
356 .arg(storage.size());
359template<
typename Storage>
361CfgHosts::getAllInternal6(
const SubnetID& subnet_id,
362 Storage& storage)
const {
371 for (HostContainerIndex3::iterator host = idx.lower_bound(subnet_id);
372 host != idx.upper_bound(subnet_id);
377 .arg((*host)->toText());
378 storage.push_back(*host);
384 .arg(storage.size());
387template<
typename Storage>
389CfgHosts::getAllbyHostnameInternal(
const std::string& hostname,
390 Storage& storage)
const {
399 for (HostContainerIndex5::iterator host = idx.lower_bound(hostname);
400 host != idx.upper_bound(hostname);
405 .arg((*host)->toText());
406 storage.push_back(*host);
412 .arg(storage.size());
415template<
typename Storage>
417CfgHosts::getAllbyHostnameInternal4(
const std::string& hostname,
419 Storage& storage)
const {
430 for (HostContainerIndex5::iterator host = idx.lower_bound(hostname);
431 host != idx.upper_bound(hostname);
433 if ((*host)->getIPv4SubnetID() != subnet_id) {
440 .arg((*host)->toText());
441 storage.push_back(*host);
449 .arg(storage.size());
452template<
typename Storage>
454CfgHosts::getAllbyHostnameInternal6(
const std::string& hostname,
456 Storage& storage)
const {
467 for (HostContainerIndex5::iterator host = idx.lower_bound(hostname);
468 host != idx.upper_bound(hostname);
470 if ((*host)->getIPv6SubnetID() != subnet_id) {
477 .arg((*host)->toText());
478 storage.push_back(*host);
486 .arg(storage.size());
489template<
typename Storage>
491CfgHosts::getPageInternal(uint64_t lower_host_id,
492 const HostPageSize& page_size,
493 Storage& storage)
const {
499 HostContainerIndex4::const_iterator host = idx.lower_bound(lower_host_id);
503 (host != idx.end()) && ((*host)->getHostId() == lower_host_id)) {
508 for (; host != idx.end(); ++host) {
511 .arg((*host)->toText());
512 storage.push_back(*host);
513 if (storage.size() >= page_size.page_size_) {
520 .arg(storage.size());
523template<
typename Storage>
525CfgHosts::getPageInternal4(
const SubnetID& subnet_id,
526 uint64_t lower_host_id,
527 const HostPageSize& page_size,
528 Storage& storage)
const {
535 HostContainerIndex4::const_iterator host = idx.lower_bound(lower_host_id);
539 (host != idx.end()) && ((*host)->getHostId() == lower_host_id)) {
544 for (; host != idx.end(); ++host) {
545 if ((*host)->getIPv4SubnetID() != subnet_id) {
551 .arg((*host)->toText());
552 storage.push_back(*host);
553 if (storage.size() >= page_size.page_size_) {
561 .arg(storage.size());
564template<
typename Storage>
566CfgHosts::getPageInternal6(
const SubnetID& subnet_id,
567 uint64_t lower_host_id,
568 const HostPageSize& page_size,
569 Storage& storage)
const {
576 HostContainerIndex4::const_iterator host = idx.lower_bound(lower_host_id);
580 (host != idx.end()) && ((*host)->getHostId() == lower_host_id)) {
585 for (; host != idx.end(); ++host) {
586 if ((*host)->getIPv6SubnetID() != subnet_id) {
592 .arg((*host)->toText());
593 storage.push_back(*host);
594 if (storage.size() >= page_size.page_size_) {
602 .arg(storage.size());
606template<
typename Storage>
608CfgHosts::getAllInternal4(
const IOAddress& address, Storage& storage)
const {
613 if (!address.
isV4()) {
614 isc_throw(BadHostAddress,
"must specify an IPv4 address when searching"
615 " for a host, specified address was " << address);
621 for (HostContainerIndex1::iterator host = r.first; host != r.second;
626 .arg((*host)->toText());
627 storage.push_back(*host);
632 .arg(storage.size());
635template<
typename Storage>
637CfgHosts::getAllInternal6(
const IOAddress& address, Storage& storage)
const {
642 if (!address.
isV6()) {
643 isc_throw(BadHostAddress,
"must specify an IPv6 address when searching"
644 " for a host, specified address was " << address);
650 for (HostContainer6Index4::iterator reservation = r.first; reservation != r.second;
655 .arg(reservation->host_->toText());
656 storage.push_back(reservation->host_);
661 .arg(storage.size());
667 const uint8_t* identifier_begin,
668 const size_t identifier_len)
const {
669 return (getHostInternal(subnet_id,
false, identifier_type, identifier_begin,
676 const uint8_t* identifier_begin,
677 const size_t identifier_len) {
678 return (getHostInternal(subnet_id,
false, identifier_type, identifier_begin,
685 .arg(subnet_id).arg(address.
toText());
688 for (ConstHostCollection::const_iterator host = hosts.begin();
689 host != hosts.end(); ++host) {
690 if ((*host)->getIPv4SubnetID() == subnet_id) {
695 .arg((*host)->toText());
701 .arg(subnet_id).arg(address.
toText());
709 .arg(subnet_id).arg(address.
toText());
712 for (
auto host :
getAll4(address)) {
713 if (host->getIPv4SubnetID() == subnet_id) {
718 .arg(host->toText());
719 hosts.push_back(host);
733 const uint8_t* identifier_begin,
734 const size_t identifier_len)
const {
735 return (getHostInternal(subnet_id,
true, identifier_type, identifier_begin,
742 const uint8_t* identifier_begin,
743 const size_t identifier_len) {
744 return (getHostInternal(subnet_id,
true, identifier_type, identifier_begin,
750 return (getHostInternal6<ConstHostPtr>(prefix, prefix_len));
755 return (getHostInternal6<HostPtr>(prefix, prefix_len));
762 return (getHostInternal6<ConstHostPtr, ConstHostCollection>(subnet_id, address));
769 return (getHostInternal6<HostPtr, HostCollection>(subnet_id, address));
776 getAllInternal6(subnet_id, address, hosts);
780template<
typename ReturnType,
typename Storage>
782CfgHosts::getHostInternal6(
const SubnetID& subnet_id,
785 .arg(subnet_id).arg(address.
toText());
788 getAllInternal6<Storage>(subnet_id, address, storage);
789 switch (storage.size()) {
802 .arg((*storage.begin())->toText());
803 return (*storage.begin());
807 " for the host belonging to the subnet with id '"
808 << subnet_id <<
"' and using the address '"
809 << address.
toText() <<
"'");
814template<
typename ReturnType>
817 const uint8_t prefix_len)
const {
819 .arg(prefix.
toText()).arg(
static_cast<int>(prefix_len));
824 idx.upper_bound(prefix));
825 for (HostContainer6Index0::iterator resrv = r.first; resrv != r.second;
827 if (resrv->resrv_.getPrefixLen() == prefix_len) {
831 .arg(
static_cast<int>(prefix_len))
832 .arg(resrv->host_->toText());
833 return (resrv->host_);
840 .arg(
static_cast<int>(prefix_len));
841 return (ReturnType());
844template<
typename Storage>
846CfgHosts::getAllInternal6(
const SubnetID& subnet_id,
848 Storage& storage)
const {
850 .arg(subnet_id).arg(address.
toText());
853 if (!address.
isV6()) {
854 isc_throw(BadHostAddress,
"must specify an IPv6 address when searching"
855 " for a host, specified address was " << address);
861 idx.upper_bound(boost::make_tuple(subnet_id, address)));
867 for(HostContainer6Index1::iterator resrv = r.first; resrv != r.second; ++resrv) {
872 .arg(resrv->host_->toText());
873 storage.push_back(resrv->host_);
880 .arg(storage.size());
884CfgHosts::getHostInternal(
const SubnetID& subnet_id,
const bool subnet6,
886 const uint8_t* identifier,
887 const size_t identifier_len)
const {
890 .arg(subnet6 ?
"IPv6" :
"IPv4")
898 getAllInternal<HostCollection>(identifier_type, identifier, identifier_len,
904 for (HostCollection::const_iterator host_it = hosts.begin();
905 host_it != hosts.end(); ++host_it) {
907 SubnetID host_subnet_id = subnet6 ? (*host_it)->getIPv6SubnetID() :
908 (*host_it)->getIPv4SubnetID();
910 if (subnet_id == host_subnet_id) {
922 isc_throw(DuplicateHost,
"more than one reservation found"
923 " for the host belonging to the subnet with id '"
924 << subnet_id <<
"' and using the identifier '"
939 .arg(host->toText());
955 .arg(host ? host->toText() :
"(no-host)");
960 " is added to the configuration");
964 if (host->getIPv4SubnetID() == SUBNET_ID_UNUSED &&
965 host->getIPv6SubnetID() == SUBNET_ID_UNUSED) {
967 " 0 when adding new host reservation");
976CfgHosts::add4(
const HostPtr& host) {
979 DuidPtr duid = host->getDuid();
982 if (host->getIPv4SubnetID() != SUBNET_ID_UNUSED) {
983 if (hwaddr && !hwaddr->hwaddr_.empty() &&
985 &hwaddr->hwaddr_[0], hwaddr->hwaddr_.size())) {
987 <<
" address '" << hwaddr->toText(
false)
988 <<
"' to the IPv4 subnet id '" << host->getIPv4SubnetID()
989 <<
"' as this host has already been added");
991 if (duid && !duid->getDuid().empty() &&
993 &duid->getDuid()[0], duid->getDuid().size())) {
994 isc_throw(DuplicateHost,
"failed to add new host using the "
995 <<
"DUID '" << duid->toText()
996 <<
"' to the IPv4 subnet id '" << host->getIPv4SubnetID()
997 <<
"' as this host has already been added");
1000 }
else if (host->getIPv6SubnetID() != SUBNET_ID_UNUSED) {
1001 if (duid && !duid->getDuid().empty() &&
1003 &duid->getDuid()[0], duid->getDuid().size())) {
1004 isc_throw(DuplicateHost,
"failed to add new host using the "
1005 <<
"DUID '" << duid->toText()
1006 <<
"' to the IPv6 subnet id '" << host->getIPv6SubnetID()
1007 <<
"' as this host has already been added");
1009 if (hwaddr && !hwaddr->hwaddr_.empty() &&
1011 &hwaddr->hwaddr_[0], hwaddr->hwaddr_.size())) {
1012 isc_throw(DuplicateHost,
"failed to add new host using the HW"
1013 <<
" address '" << hwaddr->toText(
false)
1014 <<
"' to the IPv6 subnet id '" << host->getIPv6SubnetID()
1015 <<
"' as this host has already been added");
1020 if (ip_reservations_unique_ && !host->getIPv4Reservation().isV4Zero() &&
1021 (host->getIPv4SubnetID() != SUBNET_ID_UNUSED) &&
1022 get4(host->getIPv4SubnetID(), host->getIPv4Reservation())) {
1023 isc_throw(ReservedAddress,
"failed to add new host using the HW"
1024 " address '" << (hwaddr ? hwaddr->toText(
false) :
"(null)")
1025 <<
" and DUID '" << (duid ? duid->toText() :
"(null)")
1026 <<
"' to the IPv4 subnet id '" << host->getIPv4SubnetID()
1027 <<
"' for the address " << host->getIPv4Reservation()
1028 <<
": There's already a reservation for this address");
1032 const std::vector<uint8_t>&
id = host->getIdentifier();
1033 if ((host->getIPv4SubnetID() != SUBNET_ID_UNUSED) && !
id.empty()) {
1034 if (
get4(host->getIPv4SubnetID(), host->getIdentifierType(), &
id[0],
1036 isc_throw(DuplicateHost,
"failed to add duplicate IPv4 host using identifier: "
1038 &
id[0],
id.size()));
1043 host->setHostId(++next_host_id_);
1044 hosts_.insert(host);
1048CfgHosts::add6(
const HostPtr& host) {
1050 if (host->getIPv6SubnetID() == SUBNET_ID_UNUSED) {
1055 HWAddrPtr hwaddr = host->getHWAddress();
1056 DuidPtr duid = host->getDuid();
1062 if (std::distance(reservations.first, reservations.second) == 0) {
1072 if (ip_reservations_unique_) {
1074 if (
get6(host->getIPv6SubnetID(), it->second.getPrefix())) {
1075 isc_throw(DuplicateHost,
"failed to add address reservation for "
1076 <<
"host using the HW address '"
1077 << (hwaddr ? hwaddr->toText(
false) :
"(null)")
1078 <<
" and DUID '" << (duid ? duid->toText() :
"(null)")
1079 <<
"' to the IPv6 subnet id '" << host->getIPv6SubnetID()
1080 <<
"' for address/prefix " << it->second.getPrefix()
1081 <<
": There's already reservation for this address/prefix");
1084 hosts6_.insert(HostResrv6Tuple(it->second, host));
1090 size_t erased_hosts = 0;
1091 size_t erased_addresses = 0;
1095 for (
auto host :
getAll4(subnet_id, addr)) {
1096 erased_hosts += idx.erase(host->getHostId());
1098 erased_addresses = erased_hosts;
1103 const auto& range = idx6.equal_range(boost::make_tuple(subnet_id, addr));
1104 erased_addresses = boost::distance(range);
1106 for (
auto key = range.first; key != range.second; ++key) {
1107 erased_hosts += idx.erase(key->host_->getHostId());
1109 idx6.erase(range.first, range.second);
1114 .arg(erased_addresses)
1118 return (erased_hosts != 0);
1124 size_t erased = idx.erase(subnet_id);
1136 const uint8_t* identifier_begin,
1137 const size_t identifier_len) {
1139 const auto t = boost::make_tuple(std::vector<uint8_t>(identifier_begin,
1140 identifier_begin + identifier_len),
1142 const auto& range = idx.equal_range(t);
1144 for (
auto key = range.first; key != range.second;) {
1145 if ((*key)->getIPv4SubnetID() != subnet_id) {
1151 key = idx.erase(key);
1160 return (erased != 0);
1167 size_t erased_addresses = idx6.erase(subnet_id);
1171 size_t erased_hosts = idx.erase(subnet_id);
1175 .arg(erased_addresses)
1178 return (erased_hosts);
1184 const uint8_t* identifier_begin,
1185 const size_t identifier_len) {
1189 const auto t = boost::make_tuple(std::vector<uint8_t>(identifier_begin,
1190 identifier_begin + identifier_len),
1192 const auto& range = idx.equal_range(t);
1193 size_t erased_hosts = 0;
1194 size_t erased_reservations = 0;
1195 for (
auto key = range.first; key != range.second;) {
1196 if ((*key)->getIPv6SubnetID() != subnet_id) {
1203 auto host_id = (*key)->getHostId();
1204 key = idx.erase(key);
1207 erased_reservations += idx6.erase(host_id);
1212 .arg(erased_reservations)
1216 return (erased_hosts != 0);
1221 ip_reservations_unique_ = unique;
1229 if (family == AF_INET) {
1230 return (toElement4());
1231 }
else if (family == AF_INET6) {
1232 return (toElement6());
1235 "address family: " << family);
1240CfgHosts::toElement4()
const {
1244 for (HostContainerIndex0::const_iterator host = idx.begin();
1245 host != idx.end(); ++host) {
1251 SubnetID subnet_id = (*host)->getIPv4SubnetID();
1252 result.
add(subnet_id, map);
1258CfgHosts::toElement6()
const {
1259 CfgHostsList result;
1262 for (HostContainerIndex0::const_iterator host = idx.begin();
1263 host != idx.end(); ++host) {
1269 SubnetID subnet_id = (*host)->getIPv6SubnetID();
1270 result.add(subnet_id, map);
1272 return (result.externalize());
A generic exception that is thrown if a parameter given to a method is considered invalid in that con...
The IOAddress class represents an IP addresses (version agnostic)
std::string toText() const
Convert the address to a string.
bool isV6() const
Convenience function to check for an IPv6 address.
bool isV4() const
Convenience function to check for an IPv4 address.
Utility class to represent host reservation configurations internally as a map keyed by subnet IDs,...
void add(SubnetID id, isc::data::ElementPtr resv)
Add a host reservation to the map.
isc::data::ElementPtr externalize() const
Externalize the map to a list Element.
virtual size_t delAll4(const SubnetID &subnet_id)
Attempts to delete all hosts for a given IPv4 subnet.
virtual void add(const HostPtr &host)
Adds a new host to the collection.
virtual ConstHostCollection getPage6(const SubnetID &subnet_id, size_t &source_index, uint64_t lower_host_id, const HostPageSize &page_size) const
Returns range of hosts in a DHCPv6 subnet.
virtual bool del4(const SubnetID &subnet_id, const Host::IdentifierType &identifier_type, const uint8_t *identifier_begin, const size_t identifier_len)
Attempts to delete a host by (subnet4-id, identifier, identifier-type)
virtual bool del(const SubnetID &subnet_id, const asiolink::IOAddress &addr)
Attempts to delete a hosts by address.
virtual bool setIPReservationsUnique(const bool unique)
Controls whether IP reservations are unique or non-unique.
virtual size_t delAll6(const SubnetID &subnet_id)
Attempts to delete all hosts for a given IPv6 subnet.
virtual ConstHostPtr get6(const SubnetID &subnet_id, const Host::IdentifierType &identifier_type, const uint8_t *identifier_begin, const size_t identifier_len) const
Returns a host connected to the IPv6 subnet.
virtual ConstHostCollection getAllbyHostname(const std::string &hostname) const
Return all hosts with a hostname.
virtual bool del6(const SubnetID &subnet_id, const Host::IdentifierType &identifier_type, const uint8_t *identifier_begin, const size_t identifier_len)
Attempts to delete a host by (subnet6-id, identifier, identifier-type)
virtual ConstHostCollection getPage4(const SubnetID &subnet_id, size_t &source_index, uint64_t lower_host_id, const HostPageSize &page_size) const
Returns range of hosts in a DHCPv4 subnet.
virtual ConstHostCollection getAll4(const SubnetID &subnet_id) const
Return all hosts in a DHCPv4 subnet.
virtual ConstHostPtr get4(const SubnetID &subnet_id, const Host::IdentifierType &identifier_type, const uint8_t *identifier_begin, const size_t identifier_len) const
Returns a host connected to the IPv4 subnet.
virtual ConstHostCollection getAll6(const SubnetID &subnet_id) const
Return all hosts in a DHCPv6 subnet.
virtual ConstHostCollection getAllbyHostname6(const std::string &hostname, const SubnetID &subnet_id) const
Return all hosts with a hostname in a DHCPv6 subnet.
isc::data::ElementPtr toElement() const
Unparse a configuration object.
virtual ConstHostCollection getAllbyHostname4(const std::string &hostname, const SubnetID &subnet_id) const
Return all hosts with a hostname in a DHCPv4 subnet.
virtual ConstHostCollection getAll(const Host::IdentifierType &identifier_type, const uint8_t *identifier_begin, const size_t identifier_len) const
Return all hosts connected to any subnet for which reservations have been made using a specified iden...
uint16_t getFamily() const
Returns address family.
static CfgMgr & instance()
returns a single instance of Configuration Manager
Exception thrown when the duplicate Host object is detected.
Wraps value holding size of the page with host reservations.
IdentifierType
Type of the host identifier.
std::string getIdentifierAsText() const
Returns host identifier in a textual form.
#define isc_throw(type, stream)
A shortcut macro to insert known values into exception arguments.
#define LOG_DEBUG(LOGGER, LEVEL, MESSAGE)
Macro to conveniently test debug output and log it.
boost::shared_ptr< Element > ElementPtr
const isc::log::MessageID HOSTS_CFG_GET_ALL_SUBNET_ID_ADDRESS6_COUNT
const isc::log::MessageID HOSTS_CFG_DEL4
IPv6ResrvCollection::const_iterator IPv6ResrvIterator
HostContainer6::nth_index< 4 >::type HostContainer6Index4
Fifth index type in the HostContainer6.
HostContainer::nth_index< 4 >::type HostContainerIndex4
Fifth index type in the HostContainer.
const isc::log::MessageID HOSTS_CFG_GET_ALL_ADDRESS4_HOST
const isc::log::MessageID HOSTS_CFG_GET_ALL_ADDRESS6_COUNT
const isc::log::MessageID HOSTS_CFG_GET_ALL
const isc::log::MessageID HOSTS_CFG_GET_ALL_SUBNET_ID6
std::pair< HostContainerIndex1::iterator, HostContainerIndex1::iterator > HostContainerIndex1Range
Results range returned using the HostContainerIndex1.
const isc::log::MessageID HOSTS_CFG_GET_ALL_HOSTNAME_SUBNET_ID4_HOST
isc::log::Logger hosts_logger("hosts")
Logger for the HostMgr and the code it calls.
const isc::log::MessageID HOSTS_CFG_GET_ALL_IDENTIFIER_COUNT
const isc::log::MessageID HOSTS_CFG_GET_ALL_HOST
const isc::log::MessageID HOSTS_CFG_GET_ONE_SUBNET_ID_ADDRESS4
const isc::log::MessageID HOSTS_CFG_GET_ALL_IDENTIFIER
const isc::log::MessageID HOSTS_CFG_GET_ALL_SUBNET_ID_ADDRESS4_HOST
const isc::log::MessageID HOSTS_CFG_ADD_HOST
const isc::log::MessageID HOSTS_CFG_GET_ALL_SUBNET_ID_ADDRESS4
std::pair< HostContainer6Index1::iterator, HostContainer6Index1::iterator > HostContainer6Index1Range
Results range returned using the HostContainer6Index1.
boost::shared_ptr< Host > HostPtr
Pointer to the Host object.
HostContainer6::nth_index< 3 >::type HostContainer6Index3
Fourth index type in the HostContainer6.
const isc::log::MessageID HOSTS_CFG_GET_ONE_SUBNET_ID_ADDRESS4_NULL
const isc::log::MessageID HOSTS_CFG_GET_ALL_SUBNET_ID_ADDRESS6
std::vector< ConstHostPtr > ConstHostCollection
Collection of the const Host objects.
const isc::log::MessageID HOSTS_CFG_GET_ALL_SUBNET_ID6_HOST
boost::shared_ptr< DUID > DuidPtr
const isc::log::MessageID HOSTS_CFG_GET_ALL_HOSTNAME_SUBNET_ID6_COUNT
const isc::log::MessageID HOSTS_CFG_GET_ALL_HOSTNAME_SUBNET_ID6
HostContainer6::nth_index< 0 >::type HostContainer6Index0
First index type in the HostContainer6.
const isc::log::MessageID HOSTS_CFG_GET_ALL_SUBNET_ID4
std::pair< HostContainer6Index4::iterator, HostContainer6Index4::iterator > HostContainer6Index4Range
Results range returned using the HostContainer6Index4.
const isc::log::MessageID HOSTS_CFG_GET_ONE_PREFIX_NULL
const isc::log::MessageID HOSTS_CFG_GET_ALL_COUNT
const isc::log::MessageID HOSTS_CFG_GET_ONE_SUBNET_ID_IDENTIFIER
const isc::log::MessageID HOSTS_CFG_GET_ALL_SUBNET_ID4_HOST
const isc::log::MessageID HOSTS_CFG_GET_ALL_ADDRESS6
std::pair< IPv6ResrvIterator, IPv6ResrvIterator > IPv6ResrvRange
const isc::log::MessageID HOSTS_CFG_GET_ALL_IDENTIFIER_HOST
HostContainer6::nth_index< 1 >::type HostContainer6Index1
Second index type in the HostContainer6.
std::vector< HostPtr > HostCollection
Collection of the Host objects.
boost::shared_ptr< HWAddr > HWAddrPtr
Shared pointer to a hardware address structure.
const isc::log::MessageID HOSTS_CFG_GET_ONE_PREFIX_HOST
const isc::log::MessageID HOSTS_CFG_DEL6
const isc::log::MessageID HOSTS_CFG_GET_ALL_HOSTNAME_HOST
const isc::log::MessageID HOSTS_CFG_GET_ALL_HOSTNAME_SUBNET_ID6_HOST
const isc::log::MessageID HOSTS_CFG_GET_ONE_SUBNET_ID_IDENTIFIER_HOST
HostContainer::nth_index< 1 >::type HostContainerIndex1
Second index type in the HostContainer.
HostContainer6::nth_index< 2 >::type HostContainer6Index2
Third index type in the HostContainer6.
HostContainer::nth_index< 3 >::type HostContainerIndex3
Forth index type in the HostContainer.
const int HOSTS_DBG_TRACE
Logging levels for the host reservations management.
const isc::log::MessageID HOSTS_CFG_GET_ALL_HOSTNAME
uint32_t SubnetID
Defines unique IPv4 or IPv6 subnet identifier.
const isc::log::MessageID HOSTS_CFG_GET_ONE_SUBNET_ID_ADDRESS6
const isc::log::MessageID HOSTS_CFG_GET_ALL_ADDRESS4
const isc::log::MessageID HOSTS_CFG_GET_ONE_SUBNET_ID_IDENTIFIER_NULL
std::pair< HostContainer6Index0::iterator, HostContainer6Index0::iterator > HostContainer6Index0Range
Results range returned using the HostContainer6Index0.
const isc::log::MessageID HOSTS_CFG_GET_ONE_PREFIX
boost::shared_ptr< const Host > ConstHostPtr
Const pointer to the Host object.
const isc::log::MessageID HOSTS_CFG_GET_ONE_SUBNET_ID_ADDRESS4_HOST
const isc::log::MessageID HOSTS_CFG_GET_ONE_SUBNET_ID_ADDRESS6_HOST
HostContainer::nth_index< 0 >::type HostContainerIndex0
First index type in the HostContainer.
const isc::log::MessageID HOSTS_CFG_GET_ALL_ADDRESS4_COUNT
const isc::log::MessageID HOSTS_CFG_GET_ALL_HOSTNAME_COUNT
const isc::log::MessageID HOSTS_CFG_GET_ALL_SUBNET_ID_ADDRESS6_HOST
const isc::log::MessageID HOSTS_CFG_GET_ALL_SUBNET_ID4_COUNT
const int HOSTS_DBG_TRACE_DETAIL_DATA
Records detailed results of lookups.
const isc::log::MessageID HOSTS_CFG_GET_ALL_HOSTNAME_SUBNET_ID4
const isc::log::MessageID HOSTS_CFG_DEL_ALL_SUBNET6
const int HOSTS_DBG_RESULTS
Records the results of the lookups.
const isc::log::MessageID HOSTS_CFG_GET_ALL_SUBNET_ID6_COUNT
const isc::log::MessageID HOSTS_CFG_DEL_ALL_SUBNET4
HostContainer::nth_index< 5 >::type HostContainerIndex5
Sixth index type in the HostContainer.
const isc::log::MessageID HOSTS_CFG_GET_ALL_ADDRESS6_HOST
HostContainer::nth_index< 2 >::type HostContainerIndex2
Third index type in the HostContainer.
const isc::log::MessageID HOSTS_CFG_DEL
const isc::log::MessageID HOSTS_CFG_GET_ONE_SUBNET_ID_ADDRESS6_NULL
const isc::log::MessageID HOSTS_CFG_GET_ALL_HOSTNAME_SUBNET_ID4_COUNT
const isc::log::MessageID HOSTS_CFG_GET_ALL_SUBNET_ID_ADDRESS4_COUNT
Defines the logger used by the top-level component of kea-lfc.