From 6a1138e2b12ee9f2b1f2ddee8cdef33401341590 Mon Sep 17 00:00:00 2001 From: Victor Julien Date: Mon, 24 Jul 2023 21:09:10 +0200 Subject: [PATCH] stats: register ips capture stats for each packet thread ReleasePacket based verdicts can happen in several threads, depending on the runmode details. Only register and update if in IPS mode. --- src/decode.c | 15 ++++++++++----- src/source-nfq.c | 5 +---- src/source-windivert.c | 3 --- src/tm-threads.c | 3 ++- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/decode.c b/src/decode.c index 43220543bf..90d755ba78 100644 --- a/src/decode.c +++ b/src/decode.c @@ -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) diff --git a/src/source-nfq.c b/src/source-nfq.c index 5c3d7a39f8..cad4e2c7d7 100644 --- a/src/source-nfq.c +++ b/src/source-nfq.c @@ -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; } diff --git a/src/source-windivert.c b/src/source-windivert.c index 89bf8009ea..6a3d366015 100644 --- a/src/source-windivert.c +++ b/src/source-windivert.c @@ -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); diff --git a/src/tm-threads.c b/src/tm-threads.c index 361bad6df0..7bc1172a42 100644 --- a/src/tm-threads.c +++ b/src/tm-threads.c @@ -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);