From: Eric Leblond Date: Mon, 10 Jun 2019 20:48:10 +0000 (+0200) Subject: bypass: bytes and pkts counters for local bypass X-Git-Tag: suricata-5.0.0-rc1~292 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=abbb066a96630e19aa8f7123a5b60175f03d8f44;p=thirdparty%2Fsuricata.git bypass: bytes and pkts counters for local bypass --- diff --git a/src/flow-worker.c b/src/flow-worker.c index 31de2d989d..33ec726b95 100644 --- a/src/flow-worker.c +++ b/src/flow-worker.c @@ -59,6 +59,9 @@ typedef struct FlowWorkerThreadData_ { void *output_thread; /* Output thread data. */ + uint16_t local_bypass_pkts; + uint16_t local_bypass_bytes; + PacketQueue pq; } FlowWorkerThreadData; @@ -67,14 +70,17 @@ typedef struct FlowWorkerThreadData_ { * * Handle flow creation/lookup */ -static inline TmEcode FlowUpdate(Packet *p) +static inline TmEcode FlowUpdate(ThreadVars *tv, FlowWorkerThreadData *fw, Packet *p) { FlowHandlePacketUpdate(p->flow, p); int state = SC_ATOMIC_GET(p->flow->flow_state); switch (state) { case FLOW_STATE_CAPTURE_BYPASSED: + return TM_ECODE_DONE; case FLOW_STATE_LOCAL_BYPASSED: + StatsAddUI64(tv, fw->local_bypass_pkts, 1); + StatsAddUI64(tv, fw->local_bypass_bytes, GET_PKT_LEN(p)); return TM_ECODE_DONE; default: return TM_ECODE_OK; @@ -92,6 +98,9 @@ static TmEcode FlowWorkerThreadInit(ThreadVars *tv, const void *initdata, void * SC_ATOMIC_INIT(fw->detect_thread); SC_ATOMIC_SET(fw->detect_thread, NULL); + fw->local_bypass_pkts = StatsRegisterCounter("flow_bypassed.local_pkts", tv); + fw->local_bypass_bytes = StatsRegisterCounter("flow_bypassed.local_bytes", tv); + fw->dtv = DecodeThreadVarsAlloc(tv); if (fw->dtv == NULL) { FlowWorkerThreadDeinit(tv, fw); @@ -181,7 +190,7 @@ static TmEcode FlowWorker(ThreadVars *tv, Packet *p, void *data, PacketQueue *pr FlowHandlePacket(tv, fw->dtv, p); if (likely(p->flow != NULL)) { DEBUG_ASSERT_FLOW_LOCKED(p->flow); - if (FlowUpdate(p) == TM_ECODE_DONE) { + if (FlowUpdate(tv, fw, p) == TM_ECODE_DONE) { FLOWLOCK_UNLOCK(p->flow); return TM_ECODE_OK; }