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:
@@ -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);
|
||||||
|
@@ -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.
|
||||||
|
Reference in New Issue
Block a user