2
0
mirror of https://gitlab.isc.org/isc-projects/kea synced 2025-09-05 00:15:17 +00:00

[5605a] Added a sanity_only flag to selectSubnet*

This commit is contained in:
Francis Dupont
2018-05-02 22:00:34 +02:00
parent 2e182eba86
commit aeac538382
2 changed files with 18 additions and 9 deletions

View File

@@ -490,11 +490,12 @@ Dhcpv4Srv::shutdown() {
} }
isc::dhcp::Subnet4Ptr 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 // DHCPv4-over-DHCPv6 is a special (and complex) case
if (query->isDhcp4o6()) { if (query->isDhcp4o6()) {
return (selectSubnet4o6(query, drop)); return (selectSubnet4o6(query, drop, sanity_only));
} }
Subnet4Ptr subnet; Subnet4Ptr subnet;
@@ -546,7 +547,8 @@ Dhcpv4Srv::selectSubnet(const Pkt4Ptr& query, bool& drop) const {
subnet = cfgmgr.getCurrentCfg()->getCfgSubnets4()->selectSubnet(selector); subnet = cfgmgr.getCurrentCfg()->getCfgSubnets4()->selectSubnet(selector);
// Let's execute all callouts registered for subnet4_select // 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); CalloutHandlePtr callout_handle = getCalloutHandle(query);
// We're reusing callout_handle from previous calls // We're reusing callout_handle from previous calls
@@ -611,7 +613,8 @@ Dhcpv4Srv::selectSubnet(const Pkt4Ptr& query, bool& drop) const {
} }
isc::dhcp::Subnet4Ptr isc::dhcp::Subnet4Ptr
Dhcpv4Srv::selectSubnet4o6(const Pkt4Ptr& query, bool& drop) const { Dhcpv4Srv::selectSubnet4o6(const Pkt4Ptr& query, bool& drop,
bool sanity_only) const {
Subnet4Ptr subnet; Subnet4Ptr subnet;
@@ -661,7 +664,8 @@ Dhcpv4Srv::selectSubnet4o6(const Pkt4Ptr& query, bool& drop) const {
subnet = cfgmgr.getCurrentCfg()->getCfgSubnets4()->selectSubnet4o6(selector); subnet = cfgmgr.getCurrentCfg()->getCfgSubnets4()->selectSubnet4o6(selector);
// Let's execute all callouts registered for subnet4_select // 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); CalloutHandlePtr callout_handle = getCalloutHandle(query);
// We're reusing callout_handle from previous calls // We're reusing callout_handle from previous calls
@@ -2996,9 +3000,10 @@ Dhcpv4Srv::acceptDirectRequest(const Pkt4Ptr& pkt) const {
return (false); return (false);
} }
bool drop = false; bool drop = false;
bool result = (!pkt->getLocalAddr().isV4Bcast() || selectSubnet(pkt, drop)); bool result = (!pkt->getLocalAddr().isV4Bcast() ||
selectSubnet(pkt, drop, true));
if (drop) { 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 (false);
} }
return (result); return (result);

View File

@@ -792,17 +792,21 @@ protected:
/// ///
/// @param query client's message /// @param query client's message
/// @param drop if it is true the packet will be dropped /// @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) /// @return selected subnet (or NULL if no suitable subnet was found)
isc::dhcp::Subnet4Ptr selectSubnet(const Pkt4Ptr& query, 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. /// @brief Selects a subnet for a given client's DHCP4o6 packet.
/// ///
/// @param query client's message /// @param query client's message
/// @param drop if it is true the packet will be dropped /// @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) /// @return selected subnet (or NULL if no suitable subnet was found)
isc::dhcp::Subnet4Ptr selectSubnet4o6(const Pkt4Ptr& query, 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 /// indicates if shutdown is in progress. Setting it to true will
/// initiate server shutdown procedure. /// initiate server shutdown procedure.