16#include <boost/foreach.hpp>
30 const uint8_t* identifier_begin,
31 const size_t identifier_len)
const {
35 getAllInternal<ConstHostCollection>(identifier_type, identifier_begin,
36 identifier_len, collection);
42 const uint8_t* identifier_begin,
const size_t identifier_len) {
46 getAllInternal<HostCollection>(identifier_type, identifier_begin,
47 identifier_len, collection);
56 getAllInternal4<ConstHostCollection>(subnet_id, collection);
65 getAllInternal4<HostCollection>(subnet_id, collection);
74 getAllInternal6<ConstHostCollection>(subnet_id, collection);
83 getAllInternal6<HostCollection>(subnet_id, collection);
92 getAllbyHostnameInternal<ConstHostCollection>(hostname, collection);
101 getAllbyHostnameInternal<HostCollection>(hostname, collection);
111 getAllbyHostnameInternal4<ConstHostCollection>(hostname, subnet_id, collection);
121 getAllbyHostnameInternal4<HostCollection>(hostname, subnet_id, collection);
131 getAllbyHostnameInternal6<ConstHostCollection>(hostname, subnet_id, collection);
141 getAllbyHostnameInternal6<HostCollection>(hostname, subnet_id, collection);
148 uint64_t lower_host_id,
153 getPageInternal4<ConstHostCollection>(subnet_id,
163 uint64_t lower_host_id,
168 getPageInternal4<HostCollection>(subnet_id,
178 uint64_t lower_host_id,
183 getPageInternal6<ConstHostCollection>(subnet_id,
193 uint64_t lower_host_id,
198 getPageInternal6<HostCollection>(subnet_id,
207 uint64_t lower_host_id,
212 getPageInternal<ConstHostCollection>(lower_host_id,
220 uint64_t lower_host_id,
225 getPageInternal<HostCollection>(lower_host_id,
233 uint64_t lower_host_id,
238 getPageInternal<ConstHostCollection>(lower_host_id,
246 uint64_t lower_host_id,
251 getPageInternal<HostCollection>(lower_host_id,
262 getAllInternal4<ConstHostCollection>(address, collection);
271 getAllInternal4<HostCollection>(address, collection);
280 getAllInternal6<ConstHostCollection>(address, collection);
289 getAllInternal6<HostCollection>(address, collection);
293template<
typename Storage>
296 const uint8_t* identifier,
297 const size_t identifier_len,
298 Storage& storage)
const {
306 .arg(identifier_text);
311 boost::make_tuple(std::vector<uint8_t>(identifier,
312 identifier + identifier_len),
316 for (HostContainerIndex0::iterator host = idx.lower_bound(t);
317 host != idx.upper_bound(t);
321 .arg(identifier_text)
322 .arg((*host)->toText());
323 storage.push_back(*host);
328 .arg(identifier_text)
329 .arg(storage.size());
332template<
typename Storage>
334CfgHosts::getAllInternal4(
const SubnetID& subnet_id,
335 Storage& storage)
const {
344 for (HostContainerIndex2::iterator host = idx.lower_bound(subnet_id);
345 host != idx.upper_bound(subnet_id);
350 .arg((*host)->toText());
351 storage.push_back(*host);
357 .arg(storage.size());
360template<
typename Storage>
362CfgHosts::getAllInternal6(
const SubnetID& subnet_id,
363 Storage& storage)
const {
372 for (HostContainerIndex3::iterator host = idx.lower_bound(subnet_id);
373 host != idx.upper_bound(subnet_id);
378 .arg((*host)->toText());
379 storage.push_back(*host);
385 .arg(storage.size());
388template<
typename Storage>
390CfgHosts::getAllbyHostnameInternal(
const std::string& hostname,
391 Storage& storage)
const {
400 for (HostContainerIndex5::iterator host = idx.lower_bound(hostname);
401 host != idx.upper_bound(hostname);
406 .arg((*host)->toText());
407 storage.push_back(*host);
413 .arg(storage.size());
416template<
typename Storage>
418CfgHosts::getAllbyHostnameInternal4(
const std::string& hostname,
420 Storage& storage)
const {
431 for (HostContainerIndex5::iterator host = idx.lower_bound(hostname);
432 host != idx.upper_bound(hostname);
434 if ((*host)->getIPv4SubnetID() != subnet_id) {
441 .arg((*host)->toText());
442 storage.push_back(*host);
450 .arg(storage.size());
453template<
typename Storage>
455CfgHosts::getAllbyHostnameInternal6(
const std::string& hostname,
457 Storage& storage)
const {
468 for (HostContainerIndex5::iterator host = idx.lower_bound(hostname);
469 host != idx.upper_bound(hostname);
471 if ((*host)->getIPv6SubnetID() != subnet_id) {
478 .arg((*host)->toText());
479 storage.push_back(*host);
487 .arg(storage.size());
490template<
typename Storage>
492CfgHosts::getPageInternal(uint64_t lower_host_id,
493 const HostPageSize& page_size,
494 Storage& storage)
const {
500 HostContainerIndex4::const_iterator host = idx.lower_bound(lower_host_id);
504 (host != idx.end()) && ((*host)->getHostId() == lower_host_id)) {
509 for (; host != idx.end(); ++host) {
512 .arg((*host)->toText());
513 storage.push_back(*host);
514 if (storage.size() >= page_size.page_size_) {
521 .arg(storage.size());
524template<
typename Storage>
526CfgHosts::getPageInternal4(
const SubnetID& subnet_id,
527 uint64_t lower_host_id,
528 const HostPageSize& page_size,
529 Storage& storage)
const {
536 HostContainerIndex4::const_iterator host = idx.lower_bound(lower_host_id);
540 (host != idx.end()) && ((*host)->getHostId() == lower_host_id)) {
545 for (; host != idx.end(); ++host) {
546 if ((*host)->getIPv4SubnetID() != subnet_id) {
552 .arg((*host)->toText());
553 storage.push_back(*host);
554 if (storage.size() >= page_size.page_size_) {
562 .arg(storage.size());
565template<
typename Storage>
567CfgHosts::getPageInternal6(
const SubnetID& subnet_id,
568 uint64_t lower_host_id,
569 const HostPageSize& page_size,
570 Storage& storage)
const {
577 HostContainerIndex4::const_iterator host = idx.lower_bound(lower_host_id);
581 (host != idx.end()) && ((*host)->getHostId() == lower_host_id)) {
586 for (; host != idx.end(); ++host) {
587 if ((*host)->getIPv6SubnetID() != subnet_id) {
593 .arg((*host)->toText());
594 storage.push_back(*host);
595 if (storage.size() >= page_size.page_size_) {
603 .arg(storage.size());
607template<
typename Storage>
609CfgHosts::getAllInternal4(
const IOAddress& address, Storage& storage)
const {
614 if (!address.
isV4()) {
615 isc_throw(BadHostAddress,
"must specify an IPv4 address when searching"
616 " for a host, specified address was " << address);
622 BOOST_FOREACH(
auto const& host, r) {
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 BOOST_FOREACH(
auto const& reservation, r) {
654 .arg(reservation.host_->toText());
655 storage.push_back(reservation.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 (
auto const& host : hosts) {
688 if (host->getIPv4SubnetID() == subnet_id) {
693 .arg(host->toText());
699 .arg(subnet_id).arg(address.
toText());
707 .arg(subnet_id).arg(address.
toText());
710 for (
auto const& host :
getAll4(address)) {
711 if (host->getIPv4SubnetID() == subnet_id) {
716 .arg(host->toText());
717 hosts.push_back(host);
731 const uint8_t* identifier_begin,
732 const size_t identifier_len)
const {
733 return (getHostInternal(subnet_id,
true, identifier_type, identifier_begin,
740 const uint8_t* identifier_begin,
741 const size_t identifier_len) {
742 return (getHostInternal(subnet_id,
true, identifier_type, identifier_begin,
748 return (getHostInternal6<ConstHostPtr>(prefix, prefix_len));
753 return (getHostInternal6<HostPtr>(prefix, prefix_len));
760 return (getHostInternal6<ConstHostPtr, ConstHostCollection>(subnet_id, address));
767 return (getHostInternal6<HostPtr, HostCollection>(subnet_id, address));
774 getAllInternal6(subnet_id, address, hosts);
778template<
typename ReturnType,
typename Storage>
780CfgHosts::getHostInternal6(
const SubnetID& subnet_id,
783 .arg(subnet_id).arg(address.
toText());
786 getAllInternal6<Storage>(subnet_id, address, storage);
787 switch (storage.size()) {
800 .arg((*storage.begin())->toText());
801 return (*storage.begin());
805 " for the host belonging to the subnet with id '"
806 << subnet_id <<
"' and using the address '"
807 << address.
toText() <<
"'");
812template<
typename ReturnType>
815 const uint8_t prefix_len)
const {
817 .arg(prefix.
toText()).arg(
static_cast<int>(prefix_len));
822 idx.upper_bound(prefix));
823 BOOST_FOREACH(
auto const& resrv, r) {
824 if (resrv.resrv_.getPrefixLen() == prefix_len) {
828 .arg(
static_cast<int>(prefix_len))
829 .arg(resrv.host_->toText());
830 return (resrv.host_);
837 .arg(
static_cast<int>(prefix_len));
838 return (ReturnType());
841template<
typename Storage>
843CfgHosts::getAllInternal6(
const SubnetID& subnet_id,
845 Storage& storage)
const {
847 .arg(subnet_id).arg(address.
toText());
850 if (!address.
isV6()) {
851 isc_throw(BadHostAddress,
"must specify an IPv6 address when searching"
852 " for a host, specified address was " << address);
858 idx.upper_bound(boost::make_tuple(subnet_id, address)));
864 BOOST_FOREACH(
auto const& resrv, r) {
869 .arg(resrv.host_->toText());
870 storage.push_back(resrv.host_);
877 .arg(storage.size());
881CfgHosts::getHostInternal(
const SubnetID& subnet_id,
const bool subnet6,
883 const uint8_t* identifier,
884 const size_t identifier_len)
const {
887 .arg(subnet6 ?
"IPv6" :
"IPv4")
895 getAllInternal<HostCollection>(identifier_type, identifier, identifier_len,
901 for (
auto const& host_it : hosts) {
903 SubnetID host_subnet_id = subnet6 ? host_it->getIPv6SubnetID() :
904 host_it->getIPv4SubnetID();
906 if (subnet_id == host_subnet_id) {
918 isc_throw(DuplicateHost,
"more than one reservation found"
919 " for the host belonging to the subnet with id '"
920 << subnet_id <<
"' and using the identifier '"
935 .arg(host->toText());
951 .arg(host ? host->toText() :
"(no-host)");
956 " is added to the configuration");
960 if (host->getIPv4SubnetID() == SUBNET_ID_UNUSED &&
961 host->getIPv6SubnetID() == SUBNET_ID_UNUSED) {
963 " 0 when adding new host reservation");
972CfgHosts::add4(
const HostPtr& host) {
975 DuidPtr duid = host->getDuid();
978 if (host->getIPv4SubnetID() != SUBNET_ID_UNUSED) {
979 if (hwaddr && !hwaddr->hwaddr_.empty() &&
981 &hwaddr->hwaddr_[0], hwaddr->hwaddr_.size())) {
983 <<
" address '" << hwaddr->toText(
false)
984 <<
"' to the IPv4 subnet id '" << host->getIPv4SubnetID()
985 <<
"' as this host has already been added");
987 if (duid && !duid->getDuid().empty() &&
989 &duid->getDuid()[0], duid->getDuid().size())) {
990 isc_throw(DuplicateHost,
"failed to add new host using the "
991 <<
"DUID '" << duid->toText()
992 <<
"' to the IPv4 subnet id '" << host->getIPv4SubnetID()
993 <<
"' as this host has already been added");
996 }
else if (host->getIPv6SubnetID() != SUBNET_ID_UNUSED) {
997 if (duid && !duid->getDuid().empty() &&
999 &duid->getDuid()[0], duid->getDuid().size())) {
1000 isc_throw(DuplicateHost,
"failed to add new host using the "
1001 <<
"DUID '" << duid->toText()
1002 <<
"' to the IPv6 subnet id '" << host->getIPv6SubnetID()
1003 <<
"' as this host has already been added");
1005 if (hwaddr && !hwaddr->hwaddr_.empty() &&
1007 &hwaddr->hwaddr_[0], hwaddr->hwaddr_.size())) {
1008 isc_throw(DuplicateHost,
"failed to add new host using the HW"
1009 <<
" address '" << hwaddr->toText(
false)
1010 <<
"' to the IPv6 subnet id '" << host->getIPv6SubnetID()
1011 <<
"' as this host has already been added");
1016 if (ip_reservations_unique_ && !host->getIPv4Reservation().isV4Zero() &&
1017 (host->getIPv4SubnetID() != SUBNET_ID_UNUSED) &&
1018 get4(host->getIPv4SubnetID(), host->getIPv4Reservation())) {
1019 isc_throw(ReservedAddress,
"failed to add new host using the HW"
1020 " address '" << (hwaddr ? hwaddr->toText(
false) :
"(null)")
1021 <<
" and DUID '" << (duid ? duid->toText() :
"(null)")
1022 <<
"' to the IPv4 subnet id '" << host->getIPv4SubnetID()
1023 <<
"' for the address " << host->getIPv4Reservation()
1024 <<
": There's already a reservation for this address");
1028 const std::vector<uint8_t>&
id = host->getIdentifier();
1029 if ((host->getIPv4SubnetID() != SUBNET_ID_UNUSED) && !
id.empty()) {
1030 if (
get4(host->getIPv4SubnetID(), host->getIdentifierType(), &
id[0],
1032 isc_throw(DuplicateHost,
"failed to add duplicate IPv4 host using identifier: "
1034 &
id[0],
id.size()));
1039 host->setHostId(++next_host_id_);
1040 hosts_.insert(host);
1044CfgHosts::add6(
const HostPtr& host) {
1046 if (host->getIPv6SubnetID() == SUBNET_ID_UNUSED) {
1051 HWAddrPtr hwaddr = host->getHWAddress();
1052 DuidPtr duid = host->getDuid();
1058 if (std::distance(reservations.first, reservations.second) == 0) {
1065 BOOST_FOREACH(
auto const& it, reservations) {
1067 if (ip_reservations_unique_) {
1069 if (
get6(host->getIPv6SubnetID(), it.second.getPrefix())) {
1070 isc_throw(DuplicateHost,
"failed to add address reservation for "
1071 <<
"host using the HW address '"
1072 << (hwaddr ? hwaddr->toText(
false) :
"(null)")
1073 <<
" and DUID '" << (duid ? duid->toText() :
"(null)")
1074 <<
"' to the IPv6 subnet id '" << host->getIPv6SubnetID()
1075 <<
"' for address/prefix " << it.second.getPrefix()
1076 <<
": There's already reservation for this address/prefix");
1079 hosts6_.insert(HostResrv6Tuple(it.second, host));
1085 size_t erased_hosts = 0;
1086 size_t erased_addresses = 0;
1090 for (
auto const& host :
getAll4(subnet_id, addr)) {
1091 erased_hosts += idx.erase(host->getHostId());
1093 erased_addresses = erased_hosts;
1098 auto const& range = idx6.equal_range(boost::make_tuple(subnet_id, addr));
1099 erased_addresses = boost::distance(range);
1101 BOOST_FOREACH(
auto const& key, range) {
1102 erased_hosts += idx.erase(key.host_->getHostId());
1104 idx6.erase(range.first, range.second);
1109 .arg(erased_addresses)
1113 return (erased_hosts != 0);
1119 size_t erased = idx.erase(subnet_id);
1131 const uint8_t* identifier_begin,
1132 const size_t identifier_len) {
1134 auto const t = boost::make_tuple(std::vector<uint8_t>(identifier_begin,
1135 identifier_begin + identifier_len),
1137 auto const& range = idx.equal_range(t);
1139 for (
auto key = range.first; key != range.second;) {
1140 if ((*key)->getIPv4SubnetID() != subnet_id) {
1146 key = idx.erase(key);
1155 return (erased != 0);
1162 size_t erased_addresses = idx6.erase(subnet_id);
1166 size_t erased_hosts = idx.erase(subnet_id);
1170 .arg(erased_addresses)
1173 return (erased_hosts);
1179 const uint8_t* identifier_begin,
1180 const size_t identifier_len) {
1184 auto const t = boost::make_tuple(std::vector<uint8_t>(identifier_begin,
1185 identifier_begin + identifier_len),
1187 auto const& range = idx.equal_range(t);
1188 size_t erased_hosts = 0;
1189 size_t erased_reservations = 0;
1190 for (
auto key = range.first; key != range.second;) {
1191 if ((*key)->getIPv6SubnetID() != subnet_id) {
1198 auto host_id = (*key)->getHostId();
1199 key = idx.erase(key);
1202 erased_reservations += idx6.erase(host_id);
1207 .arg(erased_reservations)
1211 return (erased_hosts != 0);
1216 ip_reservations_unique_ = unique;
1224 if (family == AF_INET) {
1225 return (toElement4());
1226 }
else if (family == AF_INET6) {
1227 return (toElement6());
1230 "address family: " << family);
1235CfgHosts::toElement4()
const {
1239 for (
auto const& host : idx) {
1245 SubnetID subnet_id = host->getIPv4SubnetID();
1246 result.
add(subnet_id, map);
1252CfgHosts::toElement6()
const {
1253 CfgHostsList result;
1256 for (
auto const& host : idx) {
1262 SubnetID subnet_id = host->getIPv6SubnetID();
1263 result.add(subnet_id, map);
1265 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
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.