]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
detect: select detect engine at Detect entry
authorVictor Julien <victor@inliniac.net>
Fri, 30 Jan 2015 14:04:38 +0000 (15:04 +0100)
committerVictor Julien <victor@inliniac.net>
Thu, 23 Jul 2015 17:36:14 +0000 (19:36 +0200)
Limited to Pcap only currently.

src/detect-engine.c
src/detect-engine.h
src/detect.c

index 4e167f0613786b0a28cbf52afe4a3a967fb1cfa5..3d5adde9fec2b3b70f25114e6ecec70ea8f09d26 100644 (file)
@@ -1683,6 +1683,11 @@ void DetectEngineMultiTenantSetup(void)
             master->multi_tenant_enabled ? "enabled" : "disabled");
 }
 
+uint32_t DetectEngineTentantGetIdFromPcap(DetectEngineThreadCtx *det_ctx, const Packet *p)
+{
+    return p->pcap_v.tenant_id;
+}
+
 DetectEngineCtx *DetectEngineGetByTenantId(int tenant_id)
 {
     DetectEngineMasterCtx *master = &g_master_de_ctx;
index 70f5f1f758cbde741b955457351286fa1e0f1122..42c4bef58911a3cc7f8e5079a345471e53b75eb9 100644 (file)
@@ -86,6 +86,8 @@ int DetectEngineReloadIsStart(void);
 void DetectEngineReloadSetDone(void);
 int DetectEngineReloadIsDone(void);
 
+/* TODO move elsewhere? */
+uint32_t DetectEngineTentantGetIdFromPcap(DetectEngineThreadCtx *, const Packet *p);
 
 /**
  * \brief Registers an app inspection engine.
index 66de27ac6c0f374adb18d9bf50d802a88c9118af..906f79bc87c65cde3b5ad191e7a27eca1ba198af 100644 (file)
@@ -1983,13 +1983,18 @@ TmEcode Detect(ThreadVars *tv, Packet *p, void *data, PacketQueue *pq, PacketQue
             goto error;
         }
 
-        det_ctx = det_ctx->mt_det_ctxs[1];
-        BUG_ON(det_ctx == NULL);
-        de_ctx = det_ctx->de_ctx;
-        BUG_ON(de_ctx == NULL);
-        if (SC_ATOMIC_GET(det_ctx->so_far_used_by_detect) == 0) {
-            (void)SC_ATOMIC_SET(det_ctx->so_far_used_by_detect, 1);
-            SCLogDebug("MT de_ctx %p det_ctx %p", de_ctx, det_ctx);
+        uint32_t tenant_id = DetectEngineTentantGetIdFromPcap(det_ctx, p);
+        if (tenant_id > 0 && tenant_id < det_ctx->mt_det_ctxs_cnt) {
+            det_ctx = det_ctx->mt_det_ctxs[tenant_id];
+            BUG_ON(det_ctx == NULL);
+            de_ctx = det_ctx->de_ctx;
+            BUG_ON(de_ctx == NULL);
+            if (SC_ATOMIC_GET(det_ctx->so_far_used_by_detect) == 0) {
+                (void)SC_ATOMIC_SET(det_ctx->so_far_used_by_detect, 1);
+                SCLogDebug("MT de_ctx %p det_ctx %p (tenant %u)", de_ctx, det_ctx, tenant_id);
+            }
+        } else {
+            return TM_ECODE_OK;
         }
     }