From: Francis Dupont Date: Wed, 8 Oct 2025 08:56:31 +0000 (+0200) Subject: [#3140] [4134] Checkpoint: add doc and UTs X-Git-Tag: Kea-3.1.4~69 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=30c9181eeade161e68daace30ea1bb28aae7479a;p=thirdparty%2Fkea.git [#3140] [4134] Checkpoint: add doc and UTs --- diff --git a/doc/sphinx/arm/stats.rst b/doc/sphinx/arm/stats.rst index ca08f38cd3..db07e9c5c1 100644 --- a/doc/sphinx/arm/stats.rst +++ b/doc/sphinx/arm/stats.rst @@ -280,6 +280,12 @@ Here is an example response returning all collected statistics: "2023-06-13 20:42:46.616308" ] ], + "pkt4-limit-exceeded": [ + [ + 0, + "2023-06-13 20:42:46.616310" + ] + ], "pkt4-nak-received": [ [ 0, @@ -627,6 +633,12 @@ or "2023-06-13 21:28:57.177742" ] ], + "pkt6-limit-exceeded": [ + [ + 0, + "2023-06-13 21:28:57.177742" + ] + ], "pkt6-not-for-us": [ [ 0, @@ -1074,6 +1086,12 @@ Here is an example response returning all collected statistics: "2023-06-13 20:42:46.616308" ] ], + "pkt4-limit-exceeded": [ + [ + 0, + "2023-06-13 20:42:46.616310" + ] + ], "pkt4-nak-received": [ [ 0, @@ -1337,6 +1355,12 @@ or "2023-06-13 21:28:57.177742" ] ], + "pkt6-limit-exceeded": [ + [ + 0, + "2023-06-13 21:28:57.177742" + ] + ], "pkt6-not-for-us": [ [ 0, diff --git a/src/bin/dhcp4/dhcp4_srv.cc b/src/bin/dhcp4/dhcp4_srv.cc index c039810ea4..4034b017b5 100644 --- a/src/bin/dhcp4/dhcp4_srv.cc +++ b/src/bin/dhcp4/dhcp4_srv.cc @@ -188,6 +188,7 @@ std::set dhcp4_statistics = { "pkt4-admin-filtered", "pkt4-not-for-us", "pkt4-processing-failed", + "pkt4-limit-exceeded", "pkt4-receive-drop", "v4-allocation-fail", "v4-allocation-fail-shared-network", diff --git a/src/bin/dhcp4/tests/ctrl_dhcp4_srv_unittest.cc b/src/bin/dhcp4/tests/ctrl_dhcp4_srv_unittest.cc index 79a3fec5bf..6a435f0454 100644 --- a/src/bin/dhcp4/tests/ctrl_dhcp4_srv_unittest.cc +++ b/src/bin/dhcp4/tests/ctrl_dhcp4_srv_unittest.cc @@ -635,6 +635,7 @@ TEST_F(CtrlChannelDhcpv4SrvTest, controlChannelStats) { "pkt4-admin-filtered", "pkt4-not-for-us", "pkt4-processing-failed", + "pkt4-limit-exceeded", "pkt4-receive-drop", "v4-allocation-fail", "v4-allocation-fail-shared-network", diff --git a/src/bin/dhcp4/tests/http_control_socket_unittest.cc b/src/bin/dhcp4/tests/http_control_socket_unittest.cc index 572973b353..eaaa0bd14e 100644 --- a/src/bin/dhcp4/tests/http_control_socket_unittest.cc +++ b/src/bin/dhcp4/tests/http_control_socket_unittest.cc @@ -946,6 +946,7 @@ BaseCtrlChannelDhcpv4Test::testControlChannelStats() { "pkt4-admin-filtered", "pkt4-not-for-us", "pkt4-processing-failed", + "pkt4-limit-exceeded", "pkt4-receive-drop", "v4-allocation-fail", "v4-allocation-fail-shared-network", diff --git a/src/bin/dhcp6/dhcp6_srv.cc b/src/bin/dhcp6/dhcp6_srv.cc index 691f05a8e7..33d92fb427 100644 --- a/src/bin/dhcp6/dhcp6_srv.cc +++ b/src/bin/dhcp6/dhcp6_srv.cc @@ -248,6 +248,7 @@ std::set dhcp6_statistics = { "pkt6-admin-filtered", "pkt6-not-for-us", "pkt6-processing-failed", + "pkt6-limit-exceeded", "pkt6-receive-drop", "v6-allocation-fail", "v6-allocation-fail-shared-network", diff --git a/src/bin/dhcp6/tests/ctrl_dhcp6_srv_unittest.cc b/src/bin/dhcp6/tests/ctrl_dhcp6_srv_unittest.cc index 35dd49b51c..a247071fe3 100644 --- a/src/bin/dhcp6/tests/ctrl_dhcp6_srv_unittest.cc +++ b/src/bin/dhcp6/tests/ctrl_dhcp6_srv_unittest.cc @@ -643,6 +643,7 @@ TEST_F(CtrlChannelDhcpv6SrvTest, controlChannelStats) { "pkt6-admin-filtered", "pkt6-not-for-us", "pkt6-processing-failed", + "pkt6-limit-exceeded", "pkt6-receive-drop", "v6-allocation-fail", "v6-allocation-fail-shared-network", diff --git a/src/bin/dhcp6/tests/http_control_socket_unittest.cc b/src/bin/dhcp6/tests/http_control_socket_unittest.cc index a703edffc6..51494b6281 100644 --- a/src/bin/dhcp6/tests/http_control_socket_unittest.cc +++ b/src/bin/dhcp6/tests/http_control_socket_unittest.cc @@ -961,6 +961,7 @@ BaseCtrlChannelDhcpv6Test::testControlChannelStats() { "pkt6-admin-filtered", "pkt6-not-for-us", "pkt6-processing-failed", + "pkt6-limit-exceeded", "pkt6-receive-drop", "v6-allocation-fail", "v6-allocation-fail-shared-network", diff --git a/src/hooks/dhcp/limits/limit_manager.h b/src/hooks/dhcp/limits/limit_manager.h index 7e8c0480ca..25ce6c4a5c 100644 --- a/src/hooks/dhcp/limits/limit_manager.h +++ b/src/hooks/dhcp/limits/limit_manager.h @@ -19,6 +19,7 @@ #include #include #include +#include #include #include @@ -262,7 +263,20 @@ struct LimitManager { common_client_classes.push_back(c.class_); } - if (handle.getStatus() != isc::hooks::CalloutHandle::NEXT_STEP_DROP) { + if (handle.getStatus() == isc::hooks::CalloutHandle::NEXT_STEP_DROP) { + isc::stats::StatsMgr& stats_mgr = isc::stats::StatsMgr::instance(); + if (D == isc::util::DhcpSpace::DHCPv4) { + stats_mgr.addValue("pkt4-limit-exceeded", + static_cast(1)); + stats_mgr.addValue("pkt4-receive-drop", + static_cast(1)); + } else { + stats_mgr.addValue("pkt6-limit-exceeded", + static_cast(1)); + stats_mgr.addValue("pkt6-receive-drop", + static_cast(1)); + } + } else { // Honor the packet and keep track of it. for (auto const& c : common_client_classes) { TimeSeries& time_series(clocked_in_times_by_class_.at(c)); @@ -365,6 +379,19 @@ struct LimitManager { .arg(subnet_id) .arg(limit.text_); + isc::stats::StatsMgr& stats_mgr = isc::stats::StatsMgr::instance(); + if (D == isc::util::DhcpSpace::DHCPv4) { + stats_mgr.addValue("pkt4-limit-exceeded", + static_cast(1)); + stats_mgr.addValue("pkt4-receive-drop", + static_cast(1)); + } else { + stats_mgr.addValue("pkt6-limit-exceeded", + static_cast(1)); + stats_mgr.addValue("pkt6-receive-drop", + static_cast(1)); + } + return (0); }