summaryrefslogtreecommitdiffstats
path: root/src/lib/dhcpsrv/cfg_hosts.cc
diff options
context:
space:
mode:
authorMarcin Siodelski <marcin@isc.org>2015-04-15 22:31:36 +0200
committerMarcin Siodelski <marcin@isc.org>2015-04-16 11:30:23 +0200
commitac87e6cef07c69e9bad7278f66cee18385313d13 (patch)
tree8f8266d2455fd12d1913d33e44ff4da82d3399e4 /src/lib/dhcpsrv/cfg_hosts.cc
parent[master] Added ChangeLog entry for #3198. (diff)
downloadkea-ac87e6cef07c69e9bad7278f66cee18385313d13.tar.xz
kea-ac87e6cef07c69e9bad7278f66cee18385313d13.zip
[3699] Added trace messages to the CfgHosts class.
Diffstat (limited to 'src/lib/dhcpsrv/cfg_hosts.cc')
-rw-r--r--src/lib/dhcpsrv/cfg_hosts.cc90
1 files changed, 67 insertions, 23 deletions
diff --git a/src/lib/dhcpsrv/cfg_hosts.cc b/src/lib/dhcpsrv/cfg_hosts.cc
index 4d90f38fcf..988efac4ec 100644
--- a/src/lib/dhcpsrv/cfg_hosts.cc
+++ b/src/lib/dhcpsrv/cfg_hosts.cc
@@ -13,6 +13,7 @@
// PERFORMANCE OF THIS SOFTWARE.
#include <dhcpsrv/cfg_hosts.h>
+#include <dhcpsrv/hosts_log.h>
#include <exceptions/exceptions.h>
#include <ostream>
@@ -23,6 +24,8 @@ namespace dhcp {
ConstHostCollection
CfgHosts::getAll(const HWAddrPtr& hwaddr, const DuidPtr& duid) const {
+ // Do not issue logging message here because it will be logged by
+ // the getAllInternal method.
ConstHostCollection collection;
getAllInternal<ConstHostCollection>(hwaddr, duid, collection);
return (collection);
@@ -30,6 +33,8 @@ CfgHosts::getAll(const HWAddrPtr& hwaddr, const DuidPtr& duid) const {
HostCollection
CfgHosts::getAll(const HWAddrPtr& hwaddr, const DuidPtr& duid) {
+ // Do not issue logging message here because it will be logged by
+ // the getAllInternal method.
HostCollection collection;
getAllInternal<HostCollection>(hwaddr, duid, collection);
return (collection);
@@ -37,6 +42,8 @@ CfgHosts::getAll(const HWAddrPtr& hwaddr, const DuidPtr& duid) {
ConstHostCollection
CfgHosts::getAll4(const IOAddress& address) const {
+ // Do not issue logging message here because it will be logged by
+ // the getAllInternal4 method.
ConstHostCollection collection;
getAllInternal4<ConstHostCollection>(address, collection);
return (collection);
@@ -44,6 +51,8 @@ CfgHosts::getAll4(const IOAddress& address) const {
HostCollection
CfgHosts::getAll4(const IOAddress& address) {
+ // Do not issue logging message here because it will be logged by
+ // the getAllInternal4 method.
HostCollection collection;
getAllInternal4<HostCollection>(address, collection);
return (collection);
@@ -51,6 +60,8 @@ CfgHosts::getAll4(const IOAddress& address) {
ConstHostCollection
CfgHosts::getAll6(const IOAddress& address) const {
+ // Do not issue logging message here because it will be logged by
+ // the getAllInternal6 method.
ConstHostCollection collection;
getAllInternal6<ConstHostCollection>(address, collection);
return (collection);
@@ -58,6 +69,8 @@ CfgHosts::getAll6(const IOAddress& address) const {
HostCollection
CfgHosts::getAll6(const IOAddress& address) {
+ // Do not issue logging message here because it will be logged by
+ // the getAllInternal6 method.
HostCollection collection;
getAllInternal6<HostCollection>(address, collection);
return (collection);
@@ -68,6 +81,8 @@ void
CfgHosts::getAllInternal(const std::vector<uint8_t>& identifier,
const Host::IdentifierType& identifier_type,
Storage& storage) const {
+ // HOST_RESRV_GET_ALL_IDENTIFIER
+
// Use the identifier and identifier type as a composite key.
const HostContainerIndex0& idx = hosts_.get<0>();
boost::tuple<const std::vector<uint8_t>, const Host::IdentifierType> t =
@@ -84,6 +99,10 @@ template<typename Storage>
void
CfgHosts::getAllInternal(const HWAddrPtr& hwaddr, const DuidPtr& duid,
Storage& storage) const {
+ LOG_DEBUG(hosts_logger, HOSTS_DBG_TRACE, HOSTS_CFG_GET_ALL_HWADDR_DUID)
+ .arg(hwaddr ? hwaddr->toText() : "(no-hwaddr)")
+ .arg(duid ? duid->toText() : "(no-duid)");
+
// Get hosts using HW address.
if (hwaddr) {
getAllInternal<Storage>(hwaddr->hwaddr_, Host::IDENT_HWADDR, storage);
@@ -97,6 +116,9 @@ CfgHosts::getAllInternal(const HWAddrPtr& hwaddr, const DuidPtr& duid,
template<typename Storage>
void
CfgHosts::getAllInternal4(const IOAddress& address, Storage& storage) const {
+ LOG_DEBUG(hosts_logger, HOSTS_DBG_TRACE, HOSTS_CFG_GET_ALL_ADDRESS4)
+ .arg(address.toText());
+
// Must not specify address other than IPv4.
if (!address.isV4()) {
isc_throw(BadHostAddress, "must specify an IPv4 address when searching"
@@ -115,6 +137,9 @@ CfgHosts::getAllInternal4(const IOAddress& address, Storage& storage) const {
template<typename Storage>
void
CfgHosts::getAllInternal6(const IOAddress& address, Storage& storage) const {
+ LOG_DEBUG(hosts_logger, HOSTS_DBG_TRACE, HOSTS_CFG_GET_ALL_ADDRESS6)
+ .arg(address.toText());
+
// Must not specify address other than IPv6.
if (!address.isV6()) {
isc_throw(BadHostAddress, "must specify an IPv6 address when searching"
@@ -134,6 +159,7 @@ CfgHosts::getAllInternal6(const IOAddress& address, Storage& storage) const {
ConstHostPtr
CfgHosts::get4(const SubnetID& subnet_id, const HWAddrPtr& hwaddr,
const DuidPtr& duid) const {
+ // Do not log here because getHostInternal logs.
// The false value indicates that it is an IPv4 subnet.
return (getHostInternal(subnet_id, false, hwaddr, duid));
}
@@ -141,12 +167,16 @@ CfgHosts::get4(const SubnetID& subnet_id, const HWAddrPtr& hwaddr,
HostPtr
CfgHosts::get4(const SubnetID& subnet_id, const HWAddrPtr& hwaddr,
const DuidPtr& duid) {
+ // Do not log here because getHostInternal logs.
// The false value indicates that it is an IPv4 subnet.
return (getHostInternal(subnet_id, false, hwaddr, duid));
}
ConstHostPtr
CfgHosts::get4(const SubnetID& subnet_id, const IOAddress& address) const {
+ LOG_DEBUG(hosts_logger, HOSTS_DBG_TRACE, HOSTS_CFG_GET_ONE_SUBNET_ID_ADDRESS4)
+ .arg(subnet_id).arg(address.toText());
+
ConstHostCollection hosts = getAll4(address);
for (ConstHostCollection::const_iterator host = hosts.begin();
host != hosts.end(); ++host) {
@@ -161,6 +191,7 @@ CfgHosts::get4(const SubnetID& subnet_id, const IOAddress& address) const {
ConstHostPtr
CfgHosts::get6(const SubnetID& subnet_id, const DuidPtr& duid,
const HWAddrPtr& hwaddr) const {
+ // Do not log here because getHostInternal logs.
// The true value indicates that it is an IPv6 subnet.
return (getHostInternal(subnet_id, true, hwaddr, duid));
}
@@ -168,6 +199,7 @@ CfgHosts::get6(const SubnetID& subnet_id, const DuidPtr& duid,
HostPtr
CfgHosts::get6(const SubnetID& subnet_id, const DuidPtr& duid,
const HWAddrPtr& hwaddr) {
+ // Do not log here because getHostInternal logs.
// The true value indicates that it is an IPv6 subnet.
return (getHostInternal(subnet_id, true, hwaddr, duid));
}
@@ -186,12 +218,29 @@ CfgHosts::get6(const IOAddress&, const uint8_t) {
ConstHostPtr
CfgHosts::get6(const SubnetID& subnet_id,
const asiolink::IOAddress& address) const {
- ConstHostCollection storage;
- getAllInternal6(subnet_id, address, storage);
+ // Do not log here because getHostInternal6 logs.
+ return (getHostInternal6<ConstHostPtr, ConstHostCollection>(subnet_id, address));
+}
+HostPtr
+CfgHosts::get6(const SubnetID& subnet_id,
+ const asiolink::IOAddress& address) {
+ // Do not log here because getHostInternal6 logs.
+ return (getHostInternal6<HostPtr, HostCollection>(subnet_id, address));
+}
+
+template<typename ReturnType, typename Storage>
+ReturnType
+CfgHosts::getHostInternal6(const SubnetID& subnet_id,
+ const asiolink::IOAddress& address) const {
+ LOG_DEBUG(hosts_logger, HOSTS_DBG_TRACE, HOSTS_CFG_GET_ONE_SUBNET_ID_ADDRESS6)
+ .arg(subnet_id).arg(address.toText());
+
+ Storage storage;
+ getAllInternal6<Storage>(subnet_id, address, storage);
switch (storage.size()) {
case 0:
- return (ConstHostPtr());
+ return (HostPtr());
case 1:
return (*storage.begin());
default:
@@ -200,6 +249,7 @@ CfgHosts::get6(const SubnetID& subnet_id,
<< subnet_id << "' and using the address '"
<< address.toText() << "'");
}
+
}
template<typename Storage>
@@ -207,6 +257,9 @@ void
CfgHosts::getAllInternal6(const SubnetID& subnet_id,
const asiolink::IOAddress& address,
Storage& storage) const {
+ LOG_DEBUG(hosts_logger, HOSTS_DBG_TRACE, HOSTS_CFG_GET_ALL_SUBNET_ID_ADDRESS6)
+ .arg(subnet_id).arg(address.toText());
+
// Must not specify address other than IPv6.
if (!address.isV6()) {
isc_throw(BadHostAddress, "must specify an IPv6 address when searching"
@@ -228,25 +281,14 @@ CfgHosts::getAllInternal6(const SubnetID& subnet_id,
}
HostPtr
-CfgHosts::get6(const SubnetID& subnet_id, const asiolink::IOAddress& address) {
- HostCollection storage;
- getAllInternal6<HostCollection>(subnet_id, address, storage);
- switch (storage.size()) {
- case 0:
- return (HostPtr());
- case 1:
- return (*storage.begin());
- default:
- isc_throw(DuplicateHost, "more than one reservation found"
- " for the host belonging to the subnet with id '"
- << subnet_id << "' and using the address '"
- << address.toText() << "'");
- }
-}
-
-HostPtr
CfgHosts::getHostInternal(const SubnetID& subnet_id, const bool subnet6,
const HWAddrPtr& hwaddr, const DuidPtr& duid) const {
+ LOG_DEBUG(hosts_logger, HOSTS_DBG_TRACE, HOSTS_CFG_GET_ONE_SUBNET_ID_HWADDR_DUID)
+ .arg(subnet6 ? "IPv6" : "IPv4")
+ .arg(subnet_id)
+ .arg(hwaddr ? hwaddr->toText() : "(no-hwaddr)")
+ .arg(duid ? duid->toText() : "(no-duid)");
+
// Get all hosts for the HW address and DUID. This may return multiple hosts
// for different subnets, but the number of hosts returned should be low
// because one host presumably doesn't show up in many subnets.
@@ -290,11 +332,15 @@ CfgHosts::getHostInternal(const SubnetID& subnet_id, const bool subnet6,
void
CfgHosts::add(const HostPtr& host) {
+ LOG_DEBUG(hosts_logger, HOSTS_DBG_TRACE, HOSTS_CFG_ADD_HOST)
+ .arg(host ? host->toText() : "(no-host)");
+
// Sanity check that the host is non-null.
if (!host) {
isc_throw(BadValue, "specified host object must not be NULL when it"
" is added to the configuration");
}
+
// At least one subnet ID must be non-zero
if (host->getIPv4SubnetID() == 0 && host->getIPv6SubnetID() == 0) {
isc_throw(BadValue, "must not use both IPv4 and IPv6 subnet ids of"
@@ -308,7 +354,6 @@ CfgHosts::add(const HostPtr& host) {
void
CfgHosts::add4(const HostPtr& host) {
-
/// @todo This may need further sanity checks.
HWAddrPtr hwaddr = host->getHWAddress();
DuidPtr duid = host->getDuid();
@@ -316,7 +361,7 @@ CfgHosts::add4(const HostPtr& host) {
// There should be at least one resource reserved: hostname, IPv4
// address, IPv6 address or prefix.
if (host->getHostname().empty() &&
- (host->getIPv4Reservation() == IOAddress("0.0.0.0")) &&
+ (host->getIPv4Reservation().isV4Zero()) &&
(!host->hasIPv6Reservation())) {
std::ostringstream s;
if (hwaddr) {
@@ -357,7 +402,6 @@ CfgHosts::add4(const HostPtr& host) {
void
CfgHosts::add6(const HostPtr& host) {
-
/// @todo This may need further sanity checks.
HWAddrPtr hwaddr = host->getHWAddress();
DuidPtr duid = host->getDuid();