]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
multi-detect: set selector from yaml
authorVictor Julien <victor@inliniac.net>
Thu, 12 Feb 2015 11:39:27 +0000 (12:39 +0100)
committerVictor Julien <victor@inliniac.net>
Thu, 23 Jul 2015 17:36:15 +0000 (19:36 +0200)
Yaml setting is: multi-detect.selector

Implement 'vlan' and 'direct'.

src/detect-engine.c

index 5e0ce3f78c5894d126abb9e06addd1e14c9d569e..bec2c8baedfa3d7ea06e4a68d478d627f4b627cb 100644 (file)
@@ -1679,13 +1679,31 @@ int DetectEngineMultiTenantEnabled(void)
 void DetectEngineMultiTenantSetup(void)
 {
     DetectEngineMasterCtx *master = &g_master_de_ctx;
+    SCMutexLock(&master->lock);
     int enabled = 0;
     (void)ConfGetBool("multi-detect.enabled", &enabled);
     if (enabled == 1) {
         master->multi_tenant_enabled = 1;
+
+        char *handler = NULL;
+        if (ConfGet("multi-detect.selector", &handler) == 1) {
+            SCLogInfo("selector %s", handler);
+
+            if (strcmp(handler, "vlan") == 0) {
+                master->tenant_selector = TENANT_SELECTOR_VLAN;
+            } else if (strcmp(handler, "direct") == 0) {
+                master->tenant_selector = TENANT_SELECTOR_DIRECT;
+            } else {
+                SCLogError(SC_ERR_INVALID_VALUE, "unknown value %s "
+                                                 "multi-detect.selector", handler);
+                goto end;
+            }
+        }
+        SCLogInfo("multi-detect is enabled (multi tenancy). Selector: %s", handler);
     }
-    SCLogInfo("multi-detect is %s (multi tenancy)",
-            master->multi_tenant_enabled ? "enabled" : "disabled");
+    SCLogDebug("multi-detect not enabled (multi tenancy)");
+end:
+    SCMutexUnlock(&master->lock);
 }
 
 uint32_t DetectEngineTentantGetIdFromVlanId(const void *ctx, const Packet *p)