From 51bfe4960a1b55a7108ab0f6c6219d9d3fe2c7e5 Mon Sep 17 00:00:00 2001 From: Eric Leblond Date: Mon, 26 Sep 2016 13:35:44 +0200 Subject: [PATCH] flow: discard packets belonging to bypassed flows --- src/flow-worker.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/flow-worker.c b/src/flow-worker.c index a0fb0b013c..84ac31c7be 100644 --- a/src/flow-worker.c +++ b/src/flow-worker.c @@ -66,9 +66,18 @@ typedef struct FlowWorkerThreadData_ { * * Handle flow creation/lookup */ -static inline void FlowUpdate(Packet *p) +static inline TmEcode FlowUpdate(Packet *p) { FlowHandlePacketUpdate(p->flow, p); + + int state = SC_ATOMIC_GET(p->flow->flow_state); + switch (state) { + case FLOW_STATE_CAPTURE_BYPASSED: + case FLOW_STATE_LOCAL_BYPASSED: + return TM_ECODE_DONE; + default: + return TM_ECODE_OK; + } } static TmEcode FlowWorkerThreadInit(ThreadVars *tv, void *initdata, void **data) @@ -159,7 +168,10 @@ TmEcode FlowWorker(ThreadVars *tv, Packet *p, void *data, PacketQueue *preq, Pac FlowHandlePacket(tv, fw->dtv, p); if (likely(p->flow != NULL)) { DEBUG_ASSERT_FLOW_LOCKED(p->flow); - FlowUpdate(p); + if (FlowUpdate(p) == TM_ECODE_DONE) { + FLOWLOCK_UNLOCK(p->flow); + return TM_ECODE_OK; + } } /* Flow is now LOCKED */