]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#3140] [4134] Checkpoint: add doc and UTs
authorFrancis Dupont <fdupont@isc.org>
Wed, 8 Oct 2025 08:56:31 +0000 (10:56 +0200)
committerFrancis Dupont <fdupont@isc.org>
Wed, 5 Nov 2025 21:46:18 +0000 (22:46 +0100)
doc/sphinx/arm/stats.rst
src/bin/dhcp4/dhcp4_srv.cc
src/bin/dhcp4/tests/ctrl_dhcp4_srv_unittest.cc
src/bin/dhcp4/tests/http_control_socket_unittest.cc
src/bin/dhcp6/dhcp6_srv.cc
src/bin/dhcp6/tests/ctrl_dhcp6_srv_unittest.cc
src/bin/dhcp6/tests/http_control_socket_unittest.cc
src/hooks/dhcp/limits/limit_manager.h

index ca08f38cd32c063dd36d4e00471461ce9416985b..db07e9c5c18520c8d2db139c002474865603aa91 100644 (file)
@@ -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,
index c039810ea4bf6d0924649210d914645ac79fd6d0..4034b017b52ebb0afd9e22753b1dc169d48aff67 100644 (file)
@@ -188,6 +188,7 @@ std::set<std::string> 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",
index 79a3fec5bfa81869537231031cccc6364ca8682a..6a435f045479e86392e4cd973946444a1867dbac 100644 (file)
@@ -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",
index 572973b3533b135fbbfd77c2c8ba341b21f37649..eaaa0bd14ecb91b8f1f2d2dafb8464f740bc845b 100644 (file)
@@ -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",
index 691f05a8e7953e1f5339d621b50c6695660118e8..33d92fb427a3da6178f0598343afdb6dc0883216 100644 (file)
@@ -248,6 +248,7 @@ std::set<std::string> 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",
index 35dd49b51c3e93bdd21263c4cc9b23553dacf49f..a247071fe31cc2e4ad42d7a0723a4d565ee4cd5f 100644 (file)
@@ -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",
index a703edffc6e53b47a7279ba122d23173c73ee3c4..51494b62814d1853d2f6ea927888450d97a215c4 100644 (file)
@@ -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",
index 7e8c0480cacfb237f992c9e25eb7d618716cc1a1..25ce6c4a5cfe80e2f7b1c5d8737464f350cbd2cd 100644 (file)
@@ -19,6 +19,7 @@
 #include <hooks/hooks.h>
 #include <limits/configuration.h>
 #include <limits/limits_logger.h>
+#include <stats/stats_mgr.h>
 #include <util/dhcp_space.h>
 #include <util/multi_threading_mgr.h>
 
@@ -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<int64_t>(1));
+                stats_mgr.addValue("pkt4-receive-drop",
+                                   static_cast<int64_t>(1));
+            } else {
+                stats_mgr.addValue("pkt6-limit-exceeded",
+                                   static_cast<int64_t>(1));
+                stats_mgr.addValue("pkt6-receive-drop",
+                                   static_cast<int64_t>(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<int64_t>(1));
+                stats_mgr.addValue("pkt4-receive-drop",
+                                   static_cast<int64_t>(1));
+            } else {
+                stats_mgr.addValue("pkt6-limit-exceeded",
+                                   static_cast<int64_t>(1));
+                stats_mgr.addValue("pkt6-receive-drop",
+                                   static_cast<int64_t>(1));
+            }
+
             return (0);
         }