diff --git a/src/flow-manager.c b/src/flow-manager.c index 17a2b280a6..9038888219 100644 --- a/src/flow-manager.c +++ b/src/flow-manager.c @@ -365,6 +365,8 @@ next: return cnt; } +extern int g_detect_disabled; + /** \brief Thread that manages the flow table and times out flows. * * \param td ThreadVars casted to void ptr @@ -424,7 +426,7 @@ void *FlowManagerThread(void *td) memset(&ts, 0, sizeof(ts)); - FlowForceReassemblySetup(); + FlowForceReassemblySetup(g_detect_disabled); /* set the thread name */ if (SCSetThreadName(th_v->name) < 0) { diff --git a/src/flow-timeout.c b/src/flow-timeout.c index 16b66fa55c..9f57130e43 100644 --- a/src/flow-timeout.c +++ b/src/flow-timeout.c @@ -718,7 +718,10 @@ void FlowForceReassembly(void) return; } -void FlowForceReassemblySetup(void) +/** + * \param detect_disabled bool, indicating if we use a detection engine (true) + */ +void FlowForceReassemblySetup(int detect_disabled) { /* get StreamTCP TM's slot and TV containing this slot */ stream_pseudo_pkt_stream_tm_slot = TmSlotGetSlotForTM(TMM_STREAMTCP); @@ -737,27 +740,29 @@ void FlowForceReassemblySetup(void) exit(EXIT_FAILURE); } - /* get detect TM's slot and TV containing this slot */ - stream_pseudo_pkt_detect_tm_slot = TmSlotGetSlotForTM(TMM_DETECT); - if (stream_pseudo_pkt_detect_tm_slot == NULL) { - /* yes, this is fatal! */ - SCLogError(SC_ERR_TM_MODULES_ERROR, "Looks like we have failed to " - "retrieve a slot for DETECT TM"); - exit(EXIT_FAILURE); - } - stream_pseudo_pkt_detect_TV = - TmThreadsGetTVContainingSlot(stream_pseudo_pkt_detect_tm_slot); - if (stream_pseudo_pkt_detect_TV == NULL) { - /* yes, this is fatal! */ - SCLogError(SC_ERR_TM_MODULES_ERROR, "Looks like we have failed to " - "retrieve the TV containing the Detect TM slot"); - exit(EXIT_FAILURE); - } - if (stream_pseudo_pkt_detect_TV->tm_slots == stream_pseudo_pkt_detect_tm_slot) { - stream_pseudo_pkt_detect_prev_TV = stream_pseudo_pkt_detect_TV->prev; - } - if (strcasecmp(stream_pseudo_pkt_detect_TV->outqh_name, "packetpool") == 0) { - stream_pseudo_pkt_detect_TV = NULL; + if (!detect_disabled) { + /* get detect TM's slot and TV containing this slot */ + stream_pseudo_pkt_detect_tm_slot = TmSlotGetSlotForTM(TMM_DETECT); + if (stream_pseudo_pkt_detect_tm_slot == NULL) { + /* yes, this is fatal! */ + SCLogError(SC_ERR_TM_MODULES_ERROR, "Looks like we have failed to " + "retrieve a slot for DETECT TM"); + exit(EXIT_FAILURE); + } + stream_pseudo_pkt_detect_TV = + TmThreadsGetTVContainingSlot(stream_pseudo_pkt_detect_tm_slot); + if (stream_pseudo_pkt_detect_TV == NULL) { + /* yes, this is fatal! */ + SCLogError(SC_ERR_TM_MODULES_ERROR, "Looks like we have failed to " + "retrieve the TV containing the Detect TM slot"); + exit(EXIT_FAILURE); + } + if (stream_pseudo_pkt_detect_TV->tm_slots == stream_pseudo_pkt_detect_tm_slot) { + stream_pseudo_pkt_detect_prev_TV = stream_pseudo_pkt_detect_TV->prev; + } + if (strcasecmp(stream_pseudo_pkt_detect_TV->outqh_name, "packetpool") == 0) { + stream_pseudo_pkt_detect_TV = NULL; + } } SCMutexLock(&tv_root_lock); diff --git a/src/flow-timeout.h b/src/flow-timeout.h index 0345c7ebd0..036bd50ce7 100644 --- a/src/flow-timeout.h +++ b/src/flow-timeout.h @@ -27,6 +27,6 @@ int FlowForceReassemblyForFlowV2(Flow *f, int server, int client); int FlowForceReassemblyNeedReassembly(Flow *f, int *server, int *client); void FlowForceReassembly(void); -void FlowForceReassemblySetup(void); +void FlowForceReassemblySetup(int detect_disabled); #endif /* __FLOW_TIMEOUT_H__ */