]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#2022] Added PARK status handle
authorFrancis Dupont <fdupont@isc.org>
Fri, 19 Jan 2024 13:44:26 +0000 (14:44 +0100)
committerFrancis Dupont <fdupont@isc.org>
Mon, 5 Feb 2024 07:57:37 +0000 (08:57 +0100)
src/bin/dhcp6/dhcp6_messages.cc
src/bin/dhcp6/dhcp6_messages.h
src/bin/dhcp6/dhcp6_messages.mes
src/bin/dhcp6/dhcp6_srv.cc

index ac5996603398cb057f855803359df19b97021189..4df743c68fa26383b5a1ba80f1d070e96e21938e 100644 (file)
@@ -84,6 +84,7 @@ extern const isc::log::MessageID DHCP6_HOOK_PACKET_RCVD_SKIP = "DHCP6_HOOK_PACKE
 extern const isc::log::MessageID DHCP6_HOOK_PACKET_SEND_DROP = "DHCP6_HOOK_PACKET_SEND_DROP";
 extern const isc::log::MessageID DHCP6_HOOK_PACKET_SEND_SKIP = "DHCP6_HOOK_PACKET_SEND_SKIP";
 extern const isc::log::MessageID DHCP6_HOOK_SUBNET6_SELECT_DROP = "DHCP6_HOOK_SUBNET6_SELECT_DROP";
+extern const isc::log::MessageID DHCP6_HOOK_SUBNET6_SELECT_PARK = "DHCP6_HOOK_SUBNET6_SELECT_PARK";
 extern const isc::log::MessageID DHCP6_HOOK_SUBNET6_SELECT_SKIP = "DHCP6_HOOK_SUBNET6_SELECT_SKIP";
 extern const isc::log::MessageID DHCP6_INIT_FAIL = "DHCP6_INIT_FAIL";
 extern const isc::log::MessageID DHCP6_LEASE_ADVERT = "DHCP6_LEASE_ADVERT";
@@ -258,6 +259,7 @@ const char* values[] = {
     "DHCP6_HOOK_PACKET_SEND_DROP", "%1: prepared DHCPv6 response was not sent because a callout set the next ste to DROP",
     "DHCP6_HOOK_PACKET_SEND_SKIP", "%1: prepared DHCPv6 response is not built because a callout set the next step to SKIP",
     "DHCP6_HOOK_SUBNET6_SELECT_DROP", "%1: packet was dropped because a callout set the drop flag",
+    "DHCP6_HOOK_SUBNET6_SELECT_PARK", "%1: packet was parked",
     "DHCP6_HOOK_SUBNET6_SELECT_SKIP", "%1: no subnet was selected because a callout set the next step to SKIP",
     "DHCP6_INIT_FAIL", "failed to initialize Kea server: %1",
     "DHCP6_LEASE_ADVERT", "%1: lease for address %2 and iaid=%3 will be advertised",
index d087bb317a648c4fd6c74b2a679059d0929c3c8c..5df401a99e7bb7889b477791cbb34309438ba58c 100644 (file)
@@ -85,6 +85,7 @@ extern const isc::log::MessageID DHCP6_HOOK_PACKET_RCVD_SKIP;
 extern const isc::log::MessageID DHCP6_HOOK_PACKET_SEND_DROP;
 extern const isc::log::MessageID DHCP6_HOOK_PACKET_SEND_SKIP;
 extern const isc::log::MessageID DHCP6_HOOK_SUBNET6_SELECT_DROP;
+extern const isc::log::MessageID DHCP6_HOOK_SUBNET6_SELECT_PARK;
 extern const isc::log::MessageID DHCP6_HOOK_SUBNET6_SELECT_SKIP;
 extern const isc::log::MessageID DHCP6_INIT_FAIL;
 extern const isc::log::MessageID DHCP6_LEASE_ADVERT;
index 288663b9e6a1eafb8e0c54686fd439f1b31c12f8..d0e50ce8172fd11f744b0104b2f5f858e9aa486a 100644 (file)
@@ -472,6 +472,11 @@ point, the setting of the flag instructs the server to drop the
 received packet. The argument holds the client and transaction
 identification information.
 
+% DHCP6_HOOK_SUBNET6_SELECT_PARK %1: packet was parked
+This debug message is printed when a callout installed on the
+subnet6_select hook point set the park flag. The argument holds the
+client and transaction identification information.
+
 % DHCP6_HOOK_SUBNET6_SELECT_SKIP %1: no subnet was selected because a callout set the next step to SKIP
 This debug message is printed when a callout installed on the
 subnet6_select hook point set the next step to SKIP value. For this particular hook
index c7050038a166ee495a85e8d70c547fa886450eb6..4a0e04516883f0039cc043d126db17e4bd53bfb1 100644 (file)
@@ -2013,6 +2013,15 @@ Dhcpv6Srv::selectSubnet(const Pkt6Ptr& question, bool& drop) {
             return (Subnet6Ptr());
         }
 
+        // Callouts parked the packet. Same as drop but callouts will resume
+        // processing or drop the packet later.
+        if (callout_handle->getStatus() == CalloutHandle::NEXT_STEP_PARK) {
+            LOG_DEBUG(hooks_logger, DBG_DHCP6_HOOKS, DHCP6_HOOK_SUBNET6_SELECT_PARK)
+                .arg(question->getLabel());
+            drop = true;
+            return (Subnet6Ptr());
+        }
+
         // Use whatever subnet was specified by the callout
         callout_handle->getArgument("subnet6", subnet);
     }