]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#3140] Updated ping check
authorFrancis Dupont <fdupont@isc.org>
Fri, 17 Oct 2025 14:40:18 +0000 (16:40 +0200)
committerFrancis Dupont <fdupont@isc.org>
Wed, 5 Nov 2025 21:46:19 +0000 (22:46 +0100)
src/hooks/dhcp/ping_check/ping_check_mgr.cc
src/hooks/dhcp/ping_check/tests/ping_check_mgr_unittests.cc

index 9ad95b239b55d82988389186dc761fcf250b881a..0a9231292a90942f3e8a4019223d0ebb6863bee2 100644 (file)
@@ -10,6 +10,7 @@
 #include <ping_check_log.h>
 #include <dhcpsrv/cfgmgr.h>
 #include <hooks/hooks_manager.h>
+#include <stats/stats_mgr.h>
 #include <util/multi_threading_mgr.h>
 #include <util/chrono_time_utils.h>
 
@@ -18,6 +19,7 @@ using namespace isc::asiolink;
 using namespace isc::dhcp;
 using namespace isc::data;
 using namespace isc::hooks;
+using namespace isc::stats;
 using namespace isc::util;
 using namespace std;
 using namespace std::chrono;
@@ -505,6 +507,11 @@ PingCheckMgr::shouldPing(Lease4Ptr& lease, Pkt4Ptr& query,
                   PING_CHECK_DUPLICATE_CHECK)
                   .arg(lease->addr_)
                   .arg(query->getLabel());
+        // Duplicates are a trivial instance of queue full.
+        StatsMgr::instance().addValue("pkt4-queue-full",
+                                      static_cast<int64_t>(1));
+        StatsMgr::instance().addValue("pkt4-receive-drop",
+                                      static_cast<int64_t>(1));
         return (CalloutHandle::CalloutNextStep::NEXT_STEP_DROP);
     }
 
index 74b2d22131d88d680a02131a238ab9f0fd88b89a..af70317d7e917c80dc149efed8dcb60e94686c6b 100644 (file)
@@ -14,6 +14,7 @@
 #include <dhcpsrv/cfgmgr.h>
 #include <dhcpsrv/lease.h>
 #include <hooks/hooks_manager.h>
+#include <stats/stats_mgr.h>
 #include <util/chrono_time_utils.h>
 #include <testutils/gtest_utils.h>
 #include <testutils/multi_threading_utils.h>
@@ -1582,10 +1583,24 @@ public:
         auto lqp2 = makeLeaseQueryPair(IOAddress("127.0.0.2"), 333);
         lqp2.lease_->client_id_ = old_lease->client_id_;
 
+        // Initialize statistics.
+        using namespace isc::stats;
+        StatsMgr& stats_mgr = StatsMgr::instance();
+        stats_mgr.setValue("pkt4-queue-full", static_cast<int64_t>(0));
+        stats_mgr.setValue("pkt4-receive-drop", static_cast<int64_t>(0));
+
         // Trying to start a ping for an address already being checked should return DROP.
         ASSERT_NO_THROW_LOG(status = mgr_->shouldPing(lqp2.lease_, lqp2.query_, empty_lease, empty_host, config));
         EXPECT_EQ(status, CalloutHandle::NEXT_STEP_DROP);
 
+        // The pkt4-queue-full and pkt4-receive-drop stats was bumped by one.
+        ObservationPtr stat_qf = stats_mgr.getObservation("pkt4-queue-full");
+        ObservationPtr stat_rd = stats_mgr.getObservation("pkt4-receive-drop");
+        ASSERT_TRUE(stat_qf);
+        ASSERT_TRUE(stat_rd);
+        EXPECT_EQ(1, stat_qf->getInteger().first);
+        EXPECT_EQ(1, stat_rd->getInteger().first);
+
         // Stop the mgr.
         ASSERT_NO_THROW(mgr_->stop());