]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
defrag: add defrag.memuse counter
authorVictor Julien <vjulien@oisf.net>
Fri, 24 May 2024 16:27:11 +0000 (18:27 +0200)
committerVictor Julien <victor@inliniac.net>
Tue, 4 Jun 2024 04:28:26 +0000 (06:28 +0200)
Gives a current snapshot of the memory in use by the defrag engine.

etc/schema.json
src/flow-manager.c

index 7d3f92801e83be0036ed8a11ca34e371f78ed3b8..f72fd050f8ebde956973215adf3d3f6aa7df6084 100644 (file)
                             "description":
                                     "How many times a fragment wasn't stored due to max-frags limit being reached"
                         },
+                        "memuse": {
+                            "type": "integer",
+                            "description": "Current memory use."
+                        },
                         "memcap_exception_policy": {
                             "description":
                                     "How many times defrag memcap exception policy was applied, and which one",
index 5bbc2e88b795af8413fc569685692e92e17b9046..b81b2dd9ffa1cf8e1ece217d9b81a5c6892c4a56 100644 (file)
@@ -49,6 +49,7 @@
 #include "threads.h"
 
 #include "host-timeout.h"
+#include "defrag-hash.h"
 #include "defrag-timeout.h"
 #include "ippair-timeout.h"
 #include "app-layer-htp-range.h"
@@ -607,6 +608,7 @@ typedef struct FlowManagerThreadData_ {
 
     FlowManagerTimeoutThread timeout;
     uint16_t counter_defrag_timeout;
+    uint16_t counter_defrag_memuse;
 } FlowManagerThreadData;
 
 static void FlowCountersInit(ThreadVars *t, FlowCounters *fc)
@@ -680,6 +682,7 @@ static TmEcode FlowManagerThreadInit(ThreadVars *t, const void *initdata, void *
 
     FlowCountersInit(t, &ftd->cnt);
     ftd->counter_defrag_timeout = StatsRegisterCounter("defrag.mgr.tracker_timeout", t);
+    ftd->counter_defrag_memuse = StatsRegisterCounter("defrag.memuse", t);
 
     PacketPoolInit();
     return TM_ECODE_OK;
@@ -877,6 +880,7 @@ static TmEcode FlowManager(ThreadVars *th_v, void *thread_data)
         }
         if (other_last_sec == 0 || other_last_sec < (uint32_t)SCTIME_SECS(ts)) {
             if (ftd->instance == 0) {
+                StatsSetUI64(th_v, ftd->counter_defrag_memuse, DefragTrackerGetMemcap());
                 uint32_t defrag_cnt = DefragTimeoutHash(ts);
                 if (defrag_cnt) {
                     StatsAddUI64(th_v, ftd->counter_defrag_timeout, defrag_cnt);