]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[5605a] Added a sanity_only flag to selectSubnet*
authorFrancis Dupont <fdupont@isc.org>
Wed, 2 May 2018 20:00:34 +0000 (22:00 +0200)
committerFrancis Dupont <fdupont@isc.org>
Wed, 2 May 2018 20:00:34 +0000 (22:00 +0200)
src/bin/dhcp4/dhcp4_srv.cc
src/bin/dhcp4/dhcp4_srv.h

index 447f8b8c4c75568632bbe6b7a229623773353c0e..e3430f515cffe88574cbdb9aa4c28cb974892174 100644 (file)
@@ -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);
index 6f2362b2dc654af8d1f90aa47dc92094d4b310de..8656de8f8984f36abb6f7d5622ca2ce78a35c09c 100644 (file)
@@ -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.