detect: select detect engine at Detect entry

Limited to Pcap only currently.
pull/1608/head
Victor Julien 12 years ago
parent bc7e9be5c6
commit 0ff6d3dcfd

@ -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;

@ -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.

@ -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;
}
}

Loading…
Cancel
Save