From: Marcin Siodelski Date: Thu, 16 Apr 2015 10:14:15 +0000 (+0200) Subject: [3699] Added more traces to the CfgHosts class. X-Git-Tag: trac3764a_base~4^2~4 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=82600b5611d6fe1978accaefe6b42b77cee18f4f;p=thirdparty%2Fkea.git [3699] Added more traces to the CfgHosts class. --- diff --git a/src/lib/dhcpsrv/cfg_hosts.cc b/src/lib/dhcpsrv/cfg_hosts.cc index 988efac4ec..7f76e34768 100644 --- a/src/lib/dhcpsrv/cfg_hosts.cc +++ b/src/lib/dhcpsrv/cfg_hosts.cc @@ -81,7 +81,34 @@ void CfgHosts::getAllInternal(const std::vector& identifier, const Host::IdentifierType& identifier_type, Storage& storage) const { - // HOST_RESRV_GET_ALL_IDENTIFIER + // We will need to transform the identifier into the textual format. + // Until we do it, we mark it as invalid. + std::string identifier_text = "(invalid)"; + if (!identifier.empty()) { + try { + // Use Host object to find the textual form of the identifier. + // This may throw exception if the identifier is invalid. + Host host(&identifier[0], identifier.size(), identifier_type, + SubnetID(0), SubnetID(0), IOAddress::IPV4_ZERO_ADDRESS()); + identifier_text = host.getIdentifierAsText(); + + } catch (...) { + // Suppress exception and keep using (invalid) as an + // identifier. We will log that the identifier is + // invalid and return. + } + + } + // This will log that we're invoking this function with the specified + // identifier. The identifier may also be marked as (invalid) if it + // had 0 length or its type is unsupported. + LOG_DEBUG(hosts_logger, HOSTS_DBG_TRACE, HOSTS_CFG_GET_ALL_IDENTIFIER) + .arg(identifier_text); + + // Do nothing if the identifier specified is invalid. + if (identifier_text == "(invalid)") { + return; + } // Use the identifier and identifier type as a composite key. const HostContainerIndex0& idx = hosts_.get<0>(); diff --git a/src/lib/dhcpsrv/host.cc b/src/lib/dhcpsrv/host.cc index d2b20db412..3b94e3c708 100644 --- a/src/lib/dhcpsrv/host.cc +++ b/src/lib/dhcpsrv/host.cc @@ -138,6 +138,24 @@ Host::getIdentifierType() const { return (IDENT_DUID); } +std::string +Host::getIdentifierAsText() const { + std::string txt; + if (hw_address_) { + txt = "hwaddr=" + hw_address_->toText(false); + } else { + txt = "duid="; + if (duid_) { + txt += duid_->toText(); + } else { + txt += "(none)"; + } + } + + return (txt); + +} + void Host::setIdentifier(const uint8_t* identifier, const size_t len, const IdentifierType& type) { @@ -251,23 +269,6 @@ Host::addClientClassInternal(ClientClasses& classes, } } -std::string -Host::getIdentifierAsText() const { - std::string txt; - if (hw_address_) { - txt = "hwaddr=" + hw_address_->toText(false); - } else { - txt = "duid="; - if (duid_) { - txt += duid_->toText(); - } else { - txt += "(none)"; - } - } - - return (txt); -} - std::string Host::toText() const { std::ostringstream s; diff --git a/src/lib/dhcpsrv/hosts_messages.mes b/src/lib/dhcpsrv/hosts_messages.mes index 2e56f0ffd1..c41ec26a8c 100644 --- a/src/lib/dhcpsrv/hosts_messages.mes +++ b/src/lib/dhcpsrv/hosts_messages.mes @@ -34,6 +34,11 @@ This debug message is issued when retrieving reservations for all hosts using specific HW address or DUID. The arguments specify the HW address and DUID respectively. The argument specify the HW address and DUID respectively. +% HOSTS_CFG_GET_ALL_IDENTIFIER get all hosts with reservations using identifier: %1 +This debug message is issued when retrieving reservations for all hosts +identified by HW address or DUID. The argument holds both the identifier +type and the value. + % HOSTS_CFG_GET_ALL_SUBNET_ID_ADDRESS6 get all hosts with reservations for subnet id %1 and IPv6 address %2 This debug message is issued when retrieving all hosts connected to the specific subnet and having the specific IPv6 address reserved.