From: Francis Dupont Date: Wed, 15 Oct 2025 15:15:14 +0000 (+0200) Subject: [#3140] [4157] Added RADIUS pending request X-Git-Tag: Kea-3.1.4~84 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=35c3906012fb705d1ffc670d90f69006c93af5d4;p=thirdparty%2Fkea.git [#3140] [4157] Added RADIUS pending request --- diff --git a/src/hooks/dhcp/radius/radius_callout.cc b/src/hooks/dhcp/radius/radius_callout.cc index 32e6a7a4d7..39b3b5209b 100644 --- a/src/hooks/dhcp/radius/radius_callout.cc +++ b/src/hooks/dhcp/radius/radius_callout.cc @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -40,6 +41,7 @@ using namespace isc::dhcp; using namespace isc::hooks; using namespace isc::process; using namespace isc::radius; +using namespace isc::stats; using namespace isc::util; using namespace std; @@ -181,6 +183,10 @@ RadiusAuthHandlerPtr subnet4Select(CalloutHandle& handle, LOG_DEBUG(radius_logger, RADIUS_DBG_TRACE, RADIUS_ACCESS_CONFLICT) .arg(query->getLabel()) .arg(text); + StatsMgr::instance().addValue("pkt4-queue-full", + static_cast(1)); + StatsMgr::instance().addValue("pkt4-receive-drop", + static_cast(1)); handle.setStatus(CalloutHandle::NEXT_STEP_DROP); return (handler); } @@ -192,6 +198,10 @@ RadiusAuthHandlerPtr subnet4Select(CalloutHandle& handle, RADIUS_ACCESS_MAX_PENDING_REQUESTS) .arg(query->getLabel()) .arg(text); + StatsMgr::instance().addValue("pkt4-queue-full", + static_cast(1)); + StatsMgr::instance().addValue("pkt4-receive-drop", + static_cast(1)); handle.setStatus(CalloutHandle::NEXT_STEP_DROP); return (handler); } @@ -326,6 +336,10 @@ RadiusAuthHandlerPtr subnet6Select(CalloutHandle& handle, LOG_DEBUG(radius_logger, RADIUS_DBG_TRACE, RADIUS_ACCESS_CONFLICT) .arg(query->getLabel()) .arg(text); + StatsMgr::instance().addValue("pkt6-queue-full", + static_cast(1)); + StatsMgr::instance().addValue("pkt6-receive-drop", + static_cast(1)); handle.setStatus(CalloutHandle::NEXT_STEP_DROP); return (handler); } @@ -337,6 +351,10 @@ RadiusAuthHandlerPtr subnet6Select(CalloutHandle& handle, RADIUS_ACCESS_MAX_PENDING_REQUESTS) .arg(query->getLabel()) .arg(text); + StatsMgr::instance().addValue("pkt6-queue-full", + static_cast(1)); + StatsMgr::instance().addValue("pkt6-receive-drop", + static_cast(1)); handle.setStatus(CalloutHandle::NEXT_STEP_DROP); return (handler); } diff --git a/src/hooks/dhcp/radius/tests/access_unittests.cc b/src/hooks/dhcp/radius/tests/access_unittests.cc index 17980fbf3e..97adc8bb70 100644 --- a/src/hooks/dhcp/radius/tests/access_unittests.cc +++ b/src/hooks/dhcp/radius/tests/access_unittests.cc @@ -35,6 +35,7 @@ #include #include #include +#include #include #include @@ -54,6 +55,7 @@ using namespace isc::dhcp; using namespace isc::dhcp::test; using namespace isc::hooks; using namespace isc::radius; +using namespace isc::stats; using namespace isc::test; using namespace isc::util; @@ -3398,6 +3400,12 @@ TEST_F(AccessTest, twoQueries4) { Subnet4Ptr subnet(new Subnet4(IOAddress("192.0.2.0"), 24, 1, 2, 3, 1)); CfgMgr::instance().getCurrentCfg()->getCfgSubnets4()->add(subnet); + // Initialize stats. + StatsMgr::instance().setValue("pkt4-queue-full", + static_cast(0)); + StatsMgr::instance().setValue("pkt4-receive-drop", + static_cast(0)); + // Start not servicing server. thread_.reset(new thread(bind(&AccessTest::dummyServer, this))); system_clock::time_point start(system_clock::now()); @@ -3416,12 +3424,28 @@ TEST_F(AccessTest, twoQueries4) { this_thread::sleep_for(1ms); } EXPECT_TRUE(finished_); + + // Check stats. + ObservationPtr qf_stat = + StatsMgr::instance().getObservation("pkt4-queue-full"); + ObservationPtr rd_stat = + StatsMgr::instance().getObservation("pkt4-receive-drop"); + ASSERT_TRUE(qf_stat); + ASSERT_TRUE(rd_stat); + EXPECT_EQ(1, qf_stat->getInteger().first); + EXPECT_EQ(1, rd_stat->getInteger().first); } TEST_F(AccessTest, twoQueries6) { Subnet6Ptr subnet(new Subnet6(IOAddress("2001:db8::"), 64, 1, 2, 3, 4, 1)); CfgMgr::instance().getCurrentCfg()->getCfgSubnets6()->add(subnet); + // Initialize stats. + StatsMgr::instance().setValue("pkt6-queue-full", + static_cast(0)); + StatsMgr::instance().setValue("pkt6-receive-drop", + static_cast(0)); + // Start not servicing server. thread_.reset(new thread(bind(&AccessTest::dummyServer, this))); system_clock::time_point start(system_clock::now()); @@ -3440,6 +3464,16 @@ TEST_F(AccessTest, twoQueries6) { this_thread::sleep_for(1ms); } EXPECT_TRUE(finished_); + + // Check stats. + ObservationPtr qf_stat = + StatsMgr::instance().getObservation("pkt6-queue-full"); + ObservationPtr rd_stat = + StatsMgr::instance().getObservation("pkt6-receive-drop"); + ASSERT_TRUE(qf_stat); + ASSERT_TRUE(rd_stat); + EXPECT_EQ(1, qf_stat->getInteger().first); + EXPECT_EQ(1, rd_stat->getInteger().first); } TEST_F(AccessTest, maxPendingRequest4) { @@ -3449,6 +3483,12 @@ TEST_F(AccessTest, maxPendingRequest4) { Subnet4Ptr subnet(new Subnet4(IOAddress("192.0.2.0"), 24, 1, 2, 3, 1)); CfgMgr::instance().getCurrentCfg()->getCfgSubnets4()->add(subnet); + // Initialize stats. + StatsMgr::instance().setValue("pkt4-queue-full", + static_cast(0)); + StatsMgr::instance().setValue("pkt4-receive-drop", + static_cast(0)); + // Start not servicing server. thread_.reset(new thread(bind(&AccessTest::dummyServer, this))); system_clock::time_point start(system_clock::now()); @@ -3467,6 +3507,16 @@ TEST_F(AccessTest, maxPendingRequest4) { this_thread::sleep_for(1ms); } EXPECT_TRUE(finished_); + + // Check stats. + ObservationPtr qf_stat = + StatsMgr::instance().getObservation("pkt4-queue-full"); + ObservationPtr rd_stat = + StatsMgr::instance().getObservation("pkt4-receive-drop"); + ASSERT_TRUE(qf_stat); + ASSERT_TRUE(rd_stat); + EXPECT_EQ(1, qf_stat->getInteger().first); + EXPECT_EQ(1, rd_stat->getInteger().first); } TEST_F(AccessTest, maxPendingRequest6) { @@ -3476,6 +3526,12 @@ TEST_F(AccessTest, maxPendingRequest6) { Subnet6Ptr subnet(new Subnet6(IOAddress("2001:db8::"), 64, 1, 2, 3, 4, 1)); CfgMgr::instance().getCurrentCfg()->getCfgSubnets6()->add(subnet); + // Initialize stats. + StatsMgr::instance().setValue("pkt6-queue-full", + static_cast(0)); + StatsMgr::instance().setValue("pkt6-receive-drop", + static_cast(0)); + // Start not servicing server. thread_.reset(new thread(bind(&AccessTest::dummyServer, this))); system_clock::time_point start(system_clock::now()); @@ -3494,6 +3550,16 @@ TEST_F(AccessTest, maxPendingRequest6) { this_thread::sleep_for(1ms); } EXPECT_TRUE(finished_); + + // Check stats. + ObservationPtr qf_stat = + StatsMgr::instance().getObservation("pkt6-queue-full"); + ObservationPtr rd_stat = + StatsMgr::instance().getObservation("pkt6-receive-drop"); + ASSERT_TRUE(qf_stat); + ASSERT_TRUE(rd_stat); + EXPECT_EQ(1, qf_stat->getInteger().first); + EXPECT_EQ(1, rd_stat->getInteger().first); } TEST_F(AccessTest, noHost4) {