]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
stats: register ips capture stats for each packet thread
authorVictor Julien <vjulien@oisf.net>
Mon, 24 Jul 2023 19:09:10 +0000 (21:09 +0200)
committerVictor Julien <vjulien@oisf.net>
Tue, 25 Jul 2023 13:09:45 +0000 (15:09 +0200)
ReleasePacket based verdicts can happen in several threads,
depending on the runmode details.

Only register and update if in IPS mode.

src/decode.c
src/source-nfq.c
src/source-windivert.c
src/tm-threads.c

index 43220543bf1ebcb52f8a7428d3287092125ab7f6..90d755ba78c5215358dbd67851c3acca2e01790e 100644 (file)
@@ -834,6 +834,9 @@ thread_local CaptureStats t_capture_stats;
 /* TODO drop reason stats! */
 void CaptureStatsUpdate(ThreadVars *tv, const Packet *p)
 {
+    if (!EngineModeIsIPS() || PKT_IS_PSEUDOPKT(p))
+        return;
+
     CaptureStats *s = &t_capture_stats;
     if (unlikely(PacketCheckAction(p, ACTION_REJECT_ANY))) {
         StatsIncr(tv, s->counter_ips_rejected);
@@ -848,11 +851,13 @@ void CaptureStatsUpdate(ThreadVars *tv, const Packet *p)
 
 void CaptureStatsSetup(ThreadVars *tv)
 {
-    CaptureStats *s = &t_capture_stats;
-    s->counter_ips_accepted = StatsRegisterCounter("ips.accepted", tv);
-    s->counter_ips_blocked = StatsRegisterCounter("ips.blocked", tv);
-    s->counter_ips_rejected = StatsRegisterCounter("ips.rejected", tv);
-    s->counter_ips_replaced = StatsRegisterCounter("ips.replaced", tv);
+    if (EngineModeIsIPS()) {
+        CaptureStats *s = &t_capture_stats;
+        s->counter_ips_accepted = StatsRegisterCounter("ips.accepted", tv);
+        s->counter_ips_blocked = StatsRegisterCounter("ips.blocked", tv);
+        s->counter_ips_rejected = StatsRegisterCounter("ips.rejected", tv);
+        s->counter_ips_replaced = StatsRegisterCounter("ips.replaced", tv);
+    }
 }
 
 void DecodeGlobalConfig(void)
index 5c3d7a39f83e874e9566eae5cab25cdb657a19dc..cad4e2c7d7dbe03077ab0d766b69053644be6839 100644 (file)
@@ -775,10 +775,7 @@ TmEcode ReceiveNFQThreadDeinit(ThreadVars *t, void *data)
 
 TmEcode VerdictNFQThreadInit(ThreadVars *tv, const void *initdata, void **data)
 {
-    NFQThreadVars *ntv = (NFQThreadVars *) initdata;
-
-    CaptureStatsSetup(tv);
-
+    NFQThreadVars *ntv = (NFQThreadVars *)initdata;
     *data = (void *)ntv;
     return TM_ECODE_OK;
 }
index 89bf8009eaaea96817cee176d0d3e872dba86c03..6a3d366015174d748a465f87bfa0b4aea7b56396 100644 (file)
@@ -821,9 +821,6 @@ TmEcode VerdictWinDivertThreadInit(ThreadVars *tv, const void *initdata,
     SCEnter();
 
     WinDivertThreadVars *wd_tv = (WinDivertThreadVars *)initdata;
-
-    CaptureStatsSetup(tv);
-
     *data = wd_tv;
 
     SCReturnInt(TM_ECODE_OK);
index 361bad6df0b633d9a7b360f3f54829de787ba6aa..7bc1172a42d66b13b15e3c8e283376a69b915a2e 100644 (file)
@@ -242,7 +242,7 @@ static void *TmThreadsSlotPktAcqLoop(void *td)
 
     /* Drop the capabilities for this thread */
     SCDropCaps(tv);
-
+    CaptureStatsSetup(tv);
     PacketPoolInit();
 
     /* check if we are setup properly */
@@ -372,6 +372,7 @@ static void *TmThreadsSlotVar(void *td)
     char run = 1;
     TmEcode r = TM_ECODE_OK;
 
+    CaptureStatsSetup(tv);
     PacketPoolInit();//Empty();
 
     SCSetThreadName(tv->name);