WIP tx non-pf optimization

pull/12567/head
Victor Julien 2 weeks ago
parent 96fb25e45f
commit 60e062906d

@ -444,6 +444,11 @@ struct PrefilterNonPFData {
struct PrefilterNonPFDataSig array[]; struct PrefilterNonPFDataSig array[];
}; };
struct PrefilterNonPFDataTx {
uint32_t size;
uint32_t array[];
};
/** \internal /** \internal
* \brief wrapper for use in APIs */ * \brief wrapper for use in APIs */
static void PrefilterNonPFDataFree(void *data) static void PrefilterNonPFDataFree(void *data)
@ -454,15 +459,9 @@ static void PrefilterNonPFDataFree(void *data)
static void PrefilterTxNonPF(DetectEngineThreadCtx *det_ctx, const void *pectx, Packet *p, Flow *f, static void PrefilterTxNonPF(DetectEngineThreadCtx *det_ctx, const void *pectx, Packet *p, Flow *f,
void *tx, const uint64_t tx_id, const AppLayerTxData *tx_data, const uint8_t flags) void *tx, const uint64_t tx_id, const AppLayerTxData *tx_data, const uint8_t flags)
{ {
const struct PrefilterNonPFData *data = (const struct PrefilterNonPFData *)pectx; const struct PrefilterNonPFDataTx *data = (const struct PrefilterNonPFDataTx *)pectx;
SCLogDebug("adding %u sids", data->size); SCLogDebug("adding %u sids", data->size);
for (uint32_t i = 0; i < data->size; i++) { PrefilterAddSids(&det_ctx->pmq, data->array, data->size);
const struct PrefilterNonPFDataSig *ds = &data->array[i];
DEBUG_VALIDATE_BUG_ON(ds->value == ALPROTO_UNKNOWN);
DEBUG_VALIDATE_BUG_ON(!AppProtoEquals(ds->value, f->alproto));
const uint32_t sid = ds->sid;
PrefilterAddSids(&det_ctx->pmq, &sid, 1);
}
} }
#ifdef NONPF_PKT_STATS #ifdef NONPF_PKT_STATS
@ -610,7 +609,10 @@ static void TxNonPFFree(void *data)
/** \internal /** \internal
* \brief setup non-prefilter rules in special "non-prefilter" engines that are registered in the * \brief setup non-prefilter rules in special "non-prefilter" engines that are registered in the
* prefilter logic. \retval 0 ok \retval -1 error * prefilter logic.
*
* \retval 0 ok
* \retval -1 error
*/ */
static int SetupNonPrefilter(DetectEngineCtx *de_ctx, SigGroupHead *sgh) static int SetupNonPrefilter(DetectEngineCtx *de_ctx, SigGroupHead *sgh)
{ {
@ -869,12 +871,14 @@ static int SetupNonPrefilter(DetectEngineCtx *de_ctx, SigGroupHead *sgh)
continue; continue;
} }
struct PrefilterNonPFData *data = struct PrefilterNonPFDataTx *data =
SCCalloc(1, sizeof(*data) + t->sigs_cnt * sizeof(data->array[0])); SCCalloc(1, sizeof(*data) + t->sigs_cnt * sizeof(data->array[0]));
if (data == NULL) if (data == NULL)
goto error; goto error;
data->size = t->sigs_cnt; data->size = t->sigs_cnt;
memcpy((uint8_t *)&data->array, t->sigs, t->sigs_cnt * sizeof(data->array[0])); for (uint32_t i = 0; i < t->sigs_cnt; i++) {
data->array[i] = t->sigs[i].sid;
}
if (PrefilterAppendTxEngine(de_ctx, sgh, PrefilterTxNonPF, t->alproto, t->progress, if (PrefilterAppendTxEngine(de_ctx, sgh, PrefilterTxNonPF, t->alproto, t->progress,
(void *)data, PrefilterNonPFDataFree, t->engine_name) < 0) { (void *)data, PrefilterNonPFDataFree, t->engine_name) < 0) {
SCFree(data); SCFree(data);

Loading…
Cancel
Save