diff options
author | Marcin Siodelski <marcin@isc.org> | 2015-04-15 22:31:36 +0200 |
---|---|---|
committer | Marcin Siodelski <marcin@isc.org> | 2015-04-16 11:30:23 +0200 |
commit | ac87e6cef07c69e9bad7278f66cee18385313d13 (patch) | |
tree | 8f8266d2455fd12d1913d33e44ff4da82d3399e4 /src/lib/dhcpsrv/cfg_hosts.cc | |
parent | [master] Added ChangeLog entry for #3198. (diff) | |
download | kea-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.cc | 90 |
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(); |