]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
flow-time: handle detect-less case
authorVictor Julien <victor@inliniac.net>
Mon, 16 Dec 2013 16:32:13 +0000 (17:32 +0100)
committerVictor Julien <victor@inliniac.net>
Mon, 27 Jan 2014 12:22:47 +0000 (13:22 +0100)
Flow timeout code keeps track of thread module running detect, and
fails (hard) if it doesn't find it.

This changeset retrieves the global g_detect_disabled and passes
it to the timeout handling code during setup.

src/flow-manager.c
src/flow-timeout.c
src/flow-timeout.h

index 17a2b280a657c5f1ff7550b62977e7dee8dacb71..90388882191ee8d302cae3ffa75cbc31120a00d1 100644 (file)
@@ -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) {
index 16b66fa55ce674a9a294f031a0bb6bf99618323e..9f57130e431d5926c290d3f29b4f20f64459e465 100644 (file)
@@ -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);
index 0345c7ebd07eb9b473aa510c4ddf86edb7ec8456..036bd50ce7af70955220fd52e9d19cf209667294 100644 (file)
@@ -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__ */