From: Francis Dupont Date: Wed, 2 May 2018 20:00:34 +0000 (+0200) Subject: [5605a] Added a sanity_only flag to selectSubnet* X-Git-Tag: trac5536_base~4^2~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=aeac538382db1301d0e70dc7612e70a92459e338;p=thirdparty%2Fkea.git [5605a] Added a sanity_only flag to selectSubnet* --- diff --git a/src/bin/dhcp4/dhcp4_srv.cc b/src/bin/dhcp4/dhcp4_srv.cc index 447f8b8c4c..e3430f515c 100644 --- a/src/bin/dhcp4/dhcp4_srv.cc +++ b/src/bin/dhcp4/dhcp4_srv.cc @@ -490,11 +490,12 @@ Dhcpv4Srv::shutdown() { } isc::dhcp::Subnet4Ptr -Dhcpv4Srv::selectSubnet(const Pkt4Ptr& query, bool& drop) const { +Dhcpv4Srv::selectSubnet(const Pkt4Ptr& query, bool& drop, + bool sanity_only) const { // DHCPv4-over-DHCPv6 is a special (and complex) case if (query->isDhcp4o6()) { - return (selectSubnet4o6(query, drop)); + return (selectSubnet4o6(query, drop, sanity_only)); } Subnet4Ptr subnet; @@ -546,7 +547,8 @@ Dhcpv4Srv::selectSubnet(const Pkt4Ptr& query, bool& drop) const { subnet = cfgmgr.getCurrentCfg()->getCfgSubnets4()->selectSubnet(selector); // Let's execute all callouts registered for subnet4_select - if (HooksManager::calloutsPresent(Hooks.hook_index_subnet4_select_)) { + if (!sanity_only && + HooksManager::calloutsPresent(Hooks.hook_index_subnet4_select_)) { CalloutHandlePtr callout_handle = getCalloutHandle(query); // We're reusing callout_handle from previous calls @@ -611,7 +613,8 @@ Dhcpv4Srv::selectSubnet(const Pkt4Ptr& query, bool& drop) const { } isc::dhcp::Subnet4Ptr -Dhcpv4Srv::selectSubnet4o6(const Pkt4Ptr& query, bool& drop) const { +Dhcpv4Srv::selectSubnet4o6(const Pkt4Ptr& query, bool& drop, + bool sanity_only) const { Subnet4Ptr subnet; @@ -661,7 +664,8 @@ Dhcpv4Srv::selectSubnet4o6(const Pkt4Ptr& query, bool& drop) const { subnet = cfgmgr.getCurrentCfg()->getCfgSubnets4()->selectSubnet4o6(selector); // Let's execute all callouts registered for subnet4_select - if (HooksManager::calloutsPresent(Hooks.hook_index_subnet4_select_)) { + if (!sanity_only && + HooksManager::calloutsPresent(Hooks.hook_index_subnet4_select_)) { CalloutHandlePtr callout_handle = getCalloutHandle(query); // We're reusing callout_handle from previous calls @@ -2996,9 +3000,10 @@ Dhcpv4Srv::acceptDirectRequest(const Pkt4Ptr& pkt) const { return (false); } bool drop = false; - bool result = (!pkt->getLocalAddr().isV4Bcast() || selectSubnet(pkt, drop)); + bool result = (!pkt->getLocalAddr().isV4Bcast() || + selectSubnet(pkt, drop, true)); if (drop) { - // The packet must be dropped. + // The packet must be dropped but as sanity_only is true it is dead code. return (false); } return (result); diff --git a/src/bin/dhcp4/dhcp4_srv.h b/src/bin/dhcp4/dhcp4_srv.h index 6f2362b2dc..8656de8f89 100644 --- a/src/bin/dhcp4/dhcp4_srv.h +++ b/src/bin/dhcp4/dhcp4_srv.h @@ -792,17 +792,21 @@ protected: /// /// @param query client's message /// @param drop if it is true the packet will be dropped + /// @param sanity_only if it is true the callout won't be called /// @return selected subnet (or NULL if no suitable subnet was found) isc::dhcp::Subnet4Ptr selectSubnet(const Pkt4Ptr& query, - bool& drop) const; + bool& drop, + bool sanity_only = false) const; /// @brief Selects a subnet for a given client's DHCP4o6 packet. /// /// @param query client's message /// @param drop if it is true the packet will be dropped + /// @param sanity_only if it is true the callout won't be called /// @return selected subnet (or NULL if no suitable subnet was found) isc::dhcp::Subnet4Ptr selectSubnet4o6(const Pkt4Ptr& query, - bool& drop) const; + bool& drop, + bool sanity_only = false) const; /// indicates if shutdown is in progress. Setting it to true will /// initiate server shutdown procedure.