17#include <boost/foreach.hpp>
35 const uint8_t* identifier_begin,
36 const size_t identifier_len)
const {
41 getAllInternal<ConstHostCollection>(identifier_type, identifier_begin,
42 identifier_len, collection);
48 const uint8_t* identifier_begin,
const size_t identifier_len) {
53 getAllInternal<HostCollection>(identifier_type, identifier_begin,
54 identifier_len, collection);
64 getAllInternal4<ConstHostCollection>(subnet_id, collection);
74 getAllInternal4<HostCollection>(subnet_id, collection);
84 getAllInternal6<ConstHostCollection>(subnet_id, collection);
94 getAllInternal6<HostCollection>(subnet_id, collection);
104 getAllbyHostnameInternal<ConstHostCollection>(hostname, collection);
114 getAllbyHostnameInternal<HostCollection>(hostname, collection);
125 getAllbyHostnameInternal4<ConstHostCollection>(hostname, subnet_id, collection);
136 getAllbyHostnameInternal4<HostCollection>(hostname, subnet_id, collection);
147 getAllbyHostnameInternal6<ConstHostCollection>(hostname, subnet_id, collection);
158 getAllbyHostnameInternal6<HostCollection>(hostname, subnet_id, collection);
165 uint64_t lower_host_id,
171 getPageInternal4<ConstHostCollection>(subnet_id,
181 uint64_t lower_host_id,
187 getPageInternal4<HostCollection>(subnet_id,
197 uint64_t lower_host_id,
203 getPageInternal6<ConstHostCollection>(subnet_id,
213 uint64_t lower_host_id,
219 getPageInternal6<HostCollection>(subnet_id,
228 uint64_t lower_host_id,
234 getPageInternal<ConstHostCollection>(lower_host_id,
242 uint64_t lower_host_id,
248 getPageInternal<HostCollection>(lower_host_id,
256 uint64_t lower_host_id,
262 getPageInternal<ConstHostCollection>(lower_host_id,
270 uint64_t lower_host_id,
276 getPageInternal<HostCollection>(lower_host_id,
288 getAllInternal4<ConstHostCollection>(address, collection);
298 getAllInternal4<HostCollection>(address, collection);
308 getAllInternal6<ConstHostCollection>(address, collection);
318 getAllInternal6<HostCollection>(address, collection);
322template<
typename Storage>
325 const uint8_t* identifier,
326 const size_t identifier_len,
327 Storage& storage)
const {
335 .arg(identifier_text);
340 boost::make_tuple(std::vector<uint8_t>(identifier,
341 identifier + identifier_len),
345 for (HostContainerIndex0::iterator host = idx.lower_bound(t);
346 host != idx.upper_bound(t);
350 .arg(identifier_text)
351 .arg((*host)->toText());
352 storage.push_back(*host);
357 .arg(identifier_text)
358 .arg(storage.size());
361template<
typename Storage>
363CfgHosts::getAllInternal4(
const SubnetID& subnet_id,
364 Storage& storage)
const {
373 for (HostContainerIndex2::iterator host = idx.lower_bound(subnet_id);
374 host != idx.upper_bound(subnet_id);
379 .arg((*host)->toText());
380 storage.push_back(*host);
386 .arg(storage.size());
389template<
typename Storage>
391CfgHosts::getAllInternal6(
const SubnetID& subnet_id,
392 Storage& storage)
const {
401 for (HostContainerIndex3::iterator host = idx.lower_bound(subnet_id);
402 host != idx.upper_bound(subnet_id);
407 .arg((*host)->toText());
408 storage.push_back(*host);
414 .arg(storage.size());
417template<
typename Storage>
419CfgHosts::getAllbyHostnameInternal(
const std::string& hostname,
420 Storage& storage)
const {
429 for (HostContainerIndex5::iterator host = idx.lower_bound(hostname);
430 host != idx.upper_bound(hostname);
435 .arg((*host)->toText());
436 storage.push_back(*host);
442 .arg(storage.size());
445template<
typename Storage>
447CfgHosts::getAllbyHostnameInternal4(
const std::string& hostname,
449 Storage& storage)
const {
460 for (HostContainerIndex5::iterator host = idx.lower_bound(hostname);
461 host != idx.upper_bound(hostname);
463 if ((*host)->getIPv4SubnetID() != subnet_id) {
470 .arg((*host)->toText());
471 storage.push_back(*host);
479 .arg(storage.size());
482template<
typename Storage>
484CfgHosts::getAllbyHostnameInternal6(
const std::string& hostname,
486 Storage& storage)
const {
497 for (HostContainerIndex5::iterator host = idx.lower_bound(hostname);
498 host != idx.upper_bound(hostname);
500 if ((*host)->getIPv6SubnetID() != subnet_id) {
507 .arg((*host)->toText());
508 storage.push_back(*host);
516 .arg(storage.size());
519template<
typename Storage>
521CfgHosts::getPageInternal(uint64_t lower_host_id,
522 const HostPageSize& page_size,
523 Storage& storage)
const {
529 HostContainerIndex4::const_iterator host = idx.lower_bound(lower_host_id);
533 (host != idx.end()) && ((*host)->getHostId() == lower_host_id)) {
538 for (; host != idx.end(); ++host) {
541 .arg((*host)->toText());
542 storage.push_back(*host);
543 if (storage.size() >= page_size.page_size_) {
550 .arg(storage.size());
553template<
typename Storage>
555CfgHosts::getPageInternal4(
const SubnetID& subnet_id,
556 uint64_t lower_host_id,
557 const HostPageSize& page_size,
558 Storage& storage)
const {
565 HostContainerIndex4::const_iterator host = idx.lower_bound(lower_host_id);
569 (host != idx.end()) && ((*host)->getHostId() == lower_host_id)) {
574 for (; host != idx.end(); ++host) {
575 if ((*host)->getIPv4SubnetID() != subnet_id) {
581 .arg((*host)->toText());
582 storage.push_back(*host);
583 if (storage.size() >= page_size.page_size_) {
591 .arg(storage.size());
594template<
typename Storage>
596CfgHosts::getPageInternal6(
const SubnetID& subnet_id,
597 uint64_t lower_host_id,
598 const HostPageSize& page_size,
599 Storage& storage)
const {
606 HostContainerIndex4::const_iterator host = idx.lower_bound(lower_host_id);
610 (host != idx.end()) && ((*host)->getHostId() == lower_host_id)) {
615 for (; host != idx.end(); ++host) {
616 if ((*host)->getIPv6SubnetID() != subnet_id) {
622 .arg((*host)->toText());
623 storage.push_back(*host);
624 if (storage.size() >= page_size.page_size_) {
632 .arg(storage.size());
636template<
typename Storage>
638CfgHosts::getAllInternal4(
const IOAddress& address, Storage& storage)
const {
640 .arg(address.toText());
643 if (!address.isV4()) {
644 isc_throw(BadHostAddress,
"must specify an IPv4 address when searching"
645 " for a host, specified address was " << address);
651 BOOST_FOREACH(
auto const& host, r) {
654 .arg(address.toText())
655 .arg(host->toText());
656 storage.push_back(host);
660 .arg(address.toText())
661 .arg(storage.size());
665CfgHosts::getAllInternal4(
const SubnetID& subnet_id,
669 .arg(address.toText());
672 if (!address.isV4()) {
673 isc_throw(BadHostAddress,
"must specify an IPv4 address when searching"
674 " for a host, specified address was " << address);
681 BOOST_FOREACH(
auto const& host, r) {
682 if (host->getIPv4SubnetID() == subnet_id) {
686 .arg(address.toText())
687 .arg(host->toText());
688 hosts.push_back(host);
695 .arg(address.toText())
700template<
typename Storage>
702CfgHosts::getAllInternal6(
const IOAddress& address, Storage& storage)
const {
704 .arg(address.toText());
707 if (!address.isV6()) {
708 isc_throw(BadHostAddress,
"must specify an IPv6 address when searching"
709 " for a host, specified address was " << address);
715 BOOST_FOREACH(
auto const& reservation, r) {
718 .arg(address.toText())
719 .arg(reservation.host_->toText());
720 storage.push_back(reservation.host_);
724 .arg(address.toText())
725 .arg(storage.size());
731 const uint8_t* identifier_begin,
732 const size_t identifier_len)
const {
734 return (getHostInternal(subnet_id,
false, identifier_type, identifier_begin,
741 const uint8_t* identifier_begin,
742 const size_t identifier_len) {
744 return (getHostInternal(subnet_id,
false, identifier_type, identifier_begin,
751 .arg(subnet_id).arg(address.toText());
758 .arg(address.toText());
765 .arg(address.toText())
766 .arg(host->toText());
775 return (getAllInternal4(subnet_id, address));
781 const uint8_t* identifier_begin,
782 const size_t identifier_len)
const {
784 return (getHostInternal(subnet_id,
true, identifier_type, identifier_begin,
791 const uint8_t* identifier_begin,
792 const size_t identifier_len) {
794 return (getHostInternal(subnet_id,
true, identifier_type, identifier_begin,
801 return (getHostInternal6<ConstHostPtr>(prefix, prefix_len));
807 return (getHostInternal6<HostPtr>(prefix, prefix_len));
815 return (getHostInternal6<ConstHostPtr, ConstHostCollection>(subnet_id, address));
823 return (getHostInternal6<HostPtr, HostCollection>(subnet_id, address));
831 getAllInternal6(subnet_id, address, hosts);
835template<
typename ReturnType,
typename Storage>
837CfgHosts::getHostInternal6(
const SubnetID& subnet_id,
840 .arg(subnet_id).arg(address.toText());
843 getAllInternal6<Storage>(subnet_id, address, storage);
844 switch (storage.size()) {
849 .arg(address.toText());
856 .arg(address.toText())
857 .arg((*storage.begin())->toText());
858 return (*storage.begin());
862 " for the host belonging to the subnet with id '"
863 << subnet_id <<
"' and using the address '"
864 << address.toText() <<
"'");
869template<
typename ReturnType>
872 const uint8_t prefix_len)
const {
874 .arg(prefix.toText()).arg(
static_cast<int>(prefix_len));
879 idx.upper_bound(prefix));
880 BOOST_FOREACH(
auto const& resrv, r) {
881 if (resrv.resrv_.getPrefixLen() == prefix_len) {
884 .arg(prefix.toText())
885 .arg(
static_cast<int>(prefix_len))
886 .arg(resrv.host_->toText());
887 return (resrv.host_);
893 .arg(prefix.toText())
894 .arg(
static_cast<int>(prefix_len));
895 return (ReturnType());
898template<
typename Storage>
900CfgHosts::getAllInternal6(
const SubnetID& subnet_id,
902 Storage& storage)
const {
904 .arg(subnet_id).arg(address.toText());
907 if (!address.isV6()) {
908 isc_throw(BadHostAddress,
"must specify an IPv6 address when searching"
909 " for a host, specified address was " << address);
915 idx.upper_bound(boost::make_tuple(subnet_id, address)));
921 BOOST_FOREACH(
auto const& resrv, r) {
925 .arg(address.toText())
926 .arg(resrv.host_->toText());
927 storage.push_back(resrv.host_);
933 .arg(address.toText())
934 .arg(storage.size());
938CfgHosts::getHostInternal(
const SubnetID& subnet_id,
const bool subnet6,
940 const uint8_t* identifier,
941 const size_t identifier_len)
const {
944 .arg(subnet6 ?
"IPv6" :
"IPv4")
946 .arg(Host::getIdentifierAsText(identifier_type, identifier, identifier_len));
952 getAllInternal<HostCollection>(identifier_type, identifier, identifier_len,
958 for (
auto const& host_it : hosts) {
960 SubnetID host_subnet_id = subnet6 ? host_it->getIPv6SubnetID() :
961 host_it->getIPv4SubnetID();
963 if (subnet_id == host_subnet_id) {
975 isc_throw(DuplicateHost,
"more than one reservation found"
976 " for the host belonging to the subnet with id '"
977 << subnet_id <<
"' and using the identifier '"
992 .arg(host->toText());
1008 .arg(host ? host->toText() :
"(no-host)");
1013 " is added to the configuration");
1017 if (host->getIPv4SubnetID() == SUBNET_ID_UNUSED &&
1018 host->getIPv6SubnetID() == SUBNET_ID_UNUSED) {
1020 " 0 when adding new host reservation");
1031CfgHosts::add4(
const HostPtr& host) {
1033 HWAddrPtr hwaddr = host->getHWAddress();
1034 DuidPtr duid = host->getDuid();
1037 if (host->getIPv4SubnetID() != SUBNET_ID_UNUSED) {
1038 if (hwaddr && !hwaddr->hwaddr_.empty() &&
1040 &hwaddr->hwaddr_[0], hwaddr->hwaddr_.size())) {
1042 <<
" address '" << hwaddr->toText(
false)
1043 <<
"' to the IPv4 subnet id '" << host->getIPv4SubnetID()
1044 <<
"' as this host has already been added");
1046 if (duid && !duid->getDuid().empty() &&
1048 &duid->getDuid()[0], duid->getDuid().size())) {
1049 isc_throw(DuplicateHost,
"failed to add new host using the "
1050 <<
"DUID '" << duid->toText()
1051 <<
"' to the IPv4 subnet id '" << host->getIPv4SubnetID()
1052 <<
"' as this host has already been added");
1055 }
else if (host->getIPv6SubnetID() != SUBNET_ID_UNUSED) {
1056 if (duid && !duid->getDuid().empty() &&
1058 &duid->getDuid()[0], duid->getDuid().size())) {
1059 isc_throw(DuplicateHost,
"failed to add new host using the "
1060 <<
"DUID '" << duid->toText()
1061 <<
"' to the IPv6 subnet id '" << host->getIPv6SubnetID()
1062 <<
"' as this host has already been added");
1064 if (hwaddr && !hwaddr->hwaddr_.empty() &&
1066 &hwaddr->hwaddr_[0], hwaddr->hwaddr_.size())) {
1067 isc_throw(DuplicateHost,
"failed to add new host using the HW"
1068 <<
" address '" << hwaddr->toText(
false)
1069 <<
"' to the IPv6 subnet id '" << host->getIPv6SubnetID()
1070 <<
"' as this host has already been added");
1075 if (ip_reservations_unique_ && !host->getIPv4Reservation().isV4Zero() &&
1076 (host->getIPv4SubnetID() != SUBNET_ID_UNUSED) &&
1077 !getAllInternal4(host->getIPv4SubnetID(),
1078 host->getIPv4Reservation()).empty()) {
1079 isc_throw(ReservedAddress,
"failed to add new host using the HW"
1080 " address '" << (hwaddr ? hwaddr->toText(
false) :
"(null)")
1081 <<
" and DUID '" << (duid ? duid->toText() :
"(null)")
1082 <<
"' to the IPv4 subnet id '" << host->getIPv4SubnetID()
1083 <<
"' for the address " << host->getIPv4Reservation()
1084 <<
": There's already a reservation for this address");
1088 const std::vector<uint8_t>&
id = host->getIdentifier();
1089 if ((host->getIPv4SubnetID() != SUBNET_ID_UNUSED) && !
id.empty()) {
1090 if (getHostInternal(host->getIPv4SubnetID(),
false,
1091 host->getIdentifierType(), &
id[0],
id.size())) {
1092 isc_throw(DuplicateHost,
"failed to add duplicate IPv4 host using identifier: "
1094 &
id[0],
id.size()));
1099 host->setHostId(++next_host_id_);
1100 hosts_.insert(host);
1104CfgHosts::add6(
const HostPtr& host) {
1106 if (host->getIPv6SubnetID() == SUBNET_ID_UNUSED) {
1111 HWAddrPtr hwaddr = host->getHWAddress();
1112 DuidPtr duid = host->getDuid();
1118 if (std::distance(reservations.first, reservations.second) == 0) {
1125 BOOST_FOREACH(
auto const& it, reservations) {
1127 if (ip_reservations_unique_) {
1129 if (getHostInternal6<ConstHostPtr, ConstHostCollection>
1130 (host->getIPv6SubnetID(), it.second.getPrefix())) {
1131 isc_throw(DuplicateHost,
"failed to add address reservation for "
1132 <<
"host using the HW address '"
1133 << (hwaddr ? hwaddr->toText(
false) :
"(null)")
1134 <<
" and DUID '" << (duid ? duid->toText() :
"(null)")
1135 <<
"' to the IPv6 subnet id '" << host->getIPv6SubnetID()
1136 <<
"' for address/prefix " << it.second.getPrefix()
1137 <<
": There's already reservation for this address/prefix");
1140 hosts6_.insert(HostResrv6Tuple(it.second, host));
1146 size_t erased_hosts = 0;
1147 size_t erased_addresses = 0;
1152 getAllInternal4<ConstHostCollection>(addr, hosts);
1154 for (
auto const& host : hosts) {
1155 if (host->getIPv4SubnetID() != subnet_id) {
1158 erased_hosts += idx.erase(host->getHostId());
1160 erased_addresses = erased_hosts;
1167 auto const& range = idx6.equal_range(boost::make_tuple(subnet_id, addr));
1171 BOOST_FOREACH(
auto const& key, range) {
1172 static_cast<void>(ids.insert(key.host_->getHostId()));
1175 for(
auto const&
id : ids) {
1176 erased_hosts += idx.erase(
id);
1177 erased_addresses += idx3.erase(
id);
1183 .arg(erased_addresses)
1187 return (erased_hosts != 0);
1194 size_t erased = idx.erase(subnet_id);
1206 const uint8_t* identifier_begin,
1207 const size_t identifier_len) {
1210 auto const t = boost::make_tuple(std::vector<uint8_t>(identifier_begin,
1211 identifier_begin + identifier_len),
1213 auto const& range = idx.equal_range(t);
1215 for (
auto key = range.first; key != range.second;) {
1216 if ((*key)->getIPv4SubnetID() != subnet_id) {
1222 key = idx.erase(key);
1231 return (erased != 0);
1239 size_t erased_addresses = idx6.erase(subnet_id);
1243 size_t erased_hosts = idx.erase(subnet_id);
1247 .arg(erased_addresses)
1250 return (erased_hosts);
1256 const uint8_t* identifier_begin,
1257 const size_t identifier_len) {
1261 auto const t = boost::make_tuple(std::vector<uint8_t>(identifier_begin,
1262 identifier_begin + identifier_len),
1265 auto const& range = idx.equal_range(t);
1266 size_t erased_hosts = 0;
1267 size_t erased_reservations = 0;
1268 for (
auto key = range.first; key != range.second;) {
1269 if ((*key)->getIPv6SubnetID() != subnet_id) {
1276 auto host_id = (*key)->getHostId();
1277 key = idx.erase(key);
1280 erased_reservations += idx6.erase(host_id);
1285 .arg(erased_reservations)
1289 return (erased_hosts != 0);
1294 bool deleted(
false);
1296 std::vector<uint8_t>
const& identifier(host->getIdentifier());
1297 auto const t = boost::make_tuple(identifier, host->getIdentifierType());
1299 auto const& range = idx.equal_range(t);
1300 if (host->getIPv4SubnetID() != SUBNET_ID_UNUSED) {
1302 for (
auto key = range.first; key != range.second;) {
1303 if ((*key)->getIPv4SubnetID() != host->getIPv4SubnetID()) {
1309 key = idx.erase(key);
1313 .arg(host->getIPv4SubnetID())
1314 .arg(host->getIdentifierAsText());
1316 }
else if (host->getIPv6SubnetID() != SUBNET_ID_UNUSED) {
1319 for (
auto key = range.first; key != range.second;) {
1320 if ((*key)->getIPv6SubnetID() != host->getIPv6SubnetID()) {
1325 auto host_id = (*key)->getHostId();
1326 key = idx.erase(key);
1328 size_t erased_reservations = idx6.erase(host_id);
1331 .arg(erased_reservations)
1332 .arg(host->getIPv6SubnetID())
1333 .arg(host->getIdentifierAsText());
1342 .arg(host->toText());
1350 ip_reservations_unique_ = unique;
1358 if (family == AF_INET) {
1359 return (toElement4());
1360 }
else if (family == AF_INET6) {
1361 return (toElement6());
1364 "address family: " << family);
1369CfgHosts::toElement4()
const {
1374 for (
auto const& host : idx) {
1380 SubnetID subnet_id = host->getIPv4SubnetID();
1381 result.add(subnet_id, map);
1383 return (result.externalize());
1387CfgHosts::toElement6()
const {
1388 CfgHostsList result;
1392 for (
auto const& host : idx) {
1398 SubnetID subnet_id = host->getIPv6SubnetID();
1399 result.add(subnet_id, map);
1401 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 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,...
virtual void update(HostPtr const &host)
Attempts to update an existing host entry.
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 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...
static CfgMgr & instance()
returns a single instance of Configuration Manager
Exception thrown when the duplicate Host object is detected.
Exception thrown when a Host object is expected, but none are found.
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
const isc::log::MessageID HOSTS_CFG_UPDATE_DEL6
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_UPDATE_DEL4
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_UPDATE_ADD
const isc::log::MessageID HOSTS_CFG_GET_ALL_SUBNET_ID_ADDRESS4_COUNT
Defines the logger used by the top-level component of kea-lfc.
RAII lock object to protect the code in the same scope with a mutex.