for (j = 0; j < 2; j++) {
mpm_ctx = &alpd_ctx.ctx_ipp[i].ctx_pm[j].mpm_ctx;
mpm_tctx = &alpd_tctx->mpm_tctx[i][j];
- mpm_table[mpm_ctx->mpm_type].InitThreadCtx(mpm_ctx, mpm_tctx);
+ MpmInitThreadCtx(mpm_tctx, mpm_ctx->mpm_type);
}
}
for (dir = 0; dir < 2; dir++) {
mpm_ctx = &alpd_ctx.ctx_ipp[ipproto_map].ctx_pm[dir].mpm_ctx;
mpm_tctx = &alpd_tctx->mpm_tctx[ipproto_map][dir];
- mpm_table[mpm_ctx->mpm_type].DestroyThreadCtx(mpm_ctx, mpm_tctx);
+ MpmDestroyThreadCtx(mpm_tctx, mpm_ctx->mpm_type);
}
}
PmqFree(&alpd_tctx->pmq);
}
if (td->ftp_mpm_thread_ctx != NULL) {
- mpm_table[FTP_MPM].DestroyThreadCtx(ftp_mpm_ctx, td->ftp_mpm_thread_ctx);
+ MpmDestroyThreadCtx(td->ftp_mpm_thread_ctx, FTP_MPM);
SCFree(td->ftp_mpm_thread_ctx);
}
}
if (td->smtp_mpm_thread_ctx != NULL) {
- mpm_table[SMTP_MPM].DestroyThreadCtx(smtp_mpm_ctx, td->smtp_mpm_thread_ctx);
+ MpmDestroyThreadCtx(td->smtp_mpm_thread_ctx, SMTP_MPM);
SCFree(td->smtp_mpm_thread_ctx);
}
break;
if (buffer->inspect_len >= mpm_ctx->minlen) {
- (void)mpm_table[mpm_ctx->mpm_type].Search(mpm_ctx,
- &det_ctx->mtcu, &det_ctx->pmq,
- buffer->inspect, buffer->inspect_len);
+ (void)mpm_table[mpm_ctx->mpm_type].Search(
+ mpm_ctx, &det_ctx->mtc, &det_ctx->pmq, buffer->inspect, buffer->inspect_len);
PREFILTER_PROFILING_ADD_BYTES(det_ctx, buffer->inspect_len);
}
// PrintRawDataFp(stdout, data, data_len);
(void)mpm_table[mpm_ctx->mpm_type].Search(
- mpm_ctx, &det_ctx->mtcu, &det_ctx->pmq, data, data_len);
+ mpm_ctx, &det_ctx->mtc, &det_ctx->pmq, data, data_len);
SCLogDebug("det_ctx->pmq.rule_id_array_cnt %u", det_ctx->pmq.rule_id_array_cnt);
PREFILTER_PROFILING_ADD_BYTES(det_ctx, data_len);
}
if (data != NULL && data_len >= mpm_ctx->minlen) {
(void)mpm_table[mpm_ctx->mpm_type].Search(
- mpm_ctx, &det_ctx->mtcu, &det_ctx->pmq, data, data_len);
+ mpm_ctx, &det_ctx->mtc, &det_ctx->pmq, data, data_len);
SCLogDebug("det_ctx->pmq.rule_id_array_cnt %u", det_ctx->pmq.rule_id_array_cnt);
PREFILTER_PROFILING_ADD_BYTES(det_ctx, data_len);
}
void PatternMatchThreadDestroy(MpmThreadCtx *mpm_thread_ctx, uint16_t mpm_matcher)
{
SCLogDebug("mpm_thread_ctx %p, mpm_matcher %"PRIu16"", mpm_thread_ctx, mpm_matcher);
- if (mpm_table[mpm_matcher].DestroyThreadCtx != NULL)
- mpm_table[mpm_matcher].DestroyThreadCtx(NULL, mpm_thread_ctx);
+ MpmDestroyThreadCtx(mpm_thread_ctx, mpm_matcher);
}
void PatternMatchThreadPrepare(MpmThreadCtx *mpm_thread_ctx, uint16_t mpm_matcher)
{
smd->det_ctx->stream_mpm_cnt++;
smd->det_ctx->stream_mpm_size += data_len;
#endif
- (void)mpm_table[smd->mpm_ctx->mpm_type].Search(smd->mpm_ctx,
- &smd->det_ctx->mtcs, &smd->det_ctx->pmq,
- data, data_len);
+ (void)mpm_table[smd->mpm_ctx->mpm_type].Search(
+ smd->mpm_ctx, &smd->det_ctx->mtc, &smd->det_ctx->pmq, data, data_len);
PREFILTER_PROFILING_ADD_BYTES(smd->det_ctx, data_len);
}
return 0;
//PrintRawDataFp(stdout, data, data_len);
if (data != NULL && data_len >= mpm_ctx->minlen) {
- (void)mpm_table[mpm_ctx->mpm_type].Search(mpm_ctx,
- &det_ctx->mtcu, &det_ctx->pmq, data, data_len);
+ (void)mpm_table[mpm_ctx->mpm_type].Search(
+ mpm_ctx, &det_ctx->mtc, &det_ctx->pmq, data, data_len);
PREFILTER_PROFILING_ADD_BYTES(det_ctx, data_len);
}
}
//PrintRawDataFp(stdout, data, data_len);
if (data != NULL && data_len >= mpm_ctx->minlen) {
- (void)mpm_table[mpm_ctx->mpm_type].Search(mpm_ctx,
- &det_ctx->mtcu, &det_ctx->pmq, data, data_len);
+ (void)mpm_table[mpm_ctx->mpm_type].Search(
+ mpm_ctx, &det_ctx->mtc, &det_ctx->pmq, data, data_len);
PREFILTER_PROFILING_ADD_BYTES(det_ctx, data_len);
}
}
static TmEcode ThreadCtxDoInit (DetectEngineCtx *de_ctx, DetectEngineThreadCtx *det_ctx)
{
PatternMatchThreadPrepare(&det_ctx->mtc, de_ctx->mpm_matcher);
- PatternMatchThreadPrepare(&det_ctx->mtcs, de_ctx->mpm_matcher);
- PatternMatchThreadPrepare(&det_ctx->mtcu, de_ctx->mpm_matcher);
PmqSetup(&det_ctx->pmq);
/** \todo get rid of this static */
if (det_ctx->de_ctx != NULL) {
PatternMatchThreadDestroy(&det_ctx->mtc, det_ctx->de_ctx->mpm_matcher);
- PatternMatchThreadDestroy(&det_ctx->mtcs, det_ctx->de_ctx->mpm_matcher);
- PatternMatchThreadDestroy(&det_ctx->mtcu, det_ctx->de_ctx->mpm_matcher);
}
PmqFree(&det_ctx->pmq);
{
/* XXX */
PatternMatchThreadPrint(&det_ctx->mtc, det_ctx->de_ctx->mpm_matcher);
- PatternMatchThreadPrint(&det_ctx->mtcu, det_ctx->de_ctx->mpm_matcher);
}
static uint32_t DetectKeywordCtxHashFunc(HashListTable *ht, void *data, uint16_t datalen)
if (buffer->inspect_len >= mpm_ctx->minlen) {
uint32_t prev_rule_id_array_cnt = det_ctx->pmq.rule_id_array_cnt;
- (void)mpm_table[mpm_ctx->mpm_type].Search(mpm_ctx,
- &det_ctx->mtcu, &det_ctx->pmq,
+ (void)mpm_table[mpm_ctx->mpm_type].Search(mpm_ctx, &det_ctx->mtc, &det_ctx->pmq,
buffer->inspect, buffer->inspect_len);
PREFILTER_PROFILING_ADD_BYTES(det_ctx, buffer->inspect_len);
continue;
if (buffer->inspect_len >= mpm_ctx->minlen) {
- (void)mpm_table[mpm_ctx->mpm_type].Search(mpm_ctx,
- &det_ctx->mtcu, &det_ctx->pmq,
+ (void)mpm_table[mpm_ctx->mpm_type].Search(mpm_ctx, &det_ctx->mtc, &det_ctx->pmq,
buffer->inspect, buffer->inspect_len);
PREFILTER_PROFILING_ADD_BYTES(det_ctx, buffer->inspect_len);
}
continue;
if (buffer->inspect_len >= mpm_ctx->minlen) {
- (void)mpm_table[mpm_ctx->mpm_type].Search(mpm_ctx,
- &det_ctx->mtcu, &det_ctx->pmq,
+ (void)mpm_table[mpm_ctx->mpm_type].Search(mpm_ctx, &det_ctx->mtc, &det_ctx->pmq,
buffer->inspect, buffer->inspect_len);
PREFILTER_PROFILING_ADD_BYTES(det_ctx, buffer->inspect_len);
}
if (buffer->inspect_len >= mpm_ctx->minlen) {
(void)mpm_table[mpm_ctx->mpm_type].Search(
- mpm_ctx, &det_ctx->mtcu, &det_ctx->pmq, buffer->inspect, buffer->inspect_len);
+ mpm_ctx, &det_ctx->mtc, &det_ctx->pmq, buffer->inspect, buffer->inspect_len);
PREFILTER_PROFILING_ADD_BYTES(det_ctx, buffer->inspect_len);
}
}
//PrintRawDataFp(stdout, data, data_len);
if (data != NULL && data_len >= mpm_ctx->minlen) {
- (void)mpm_table[mpm_ctx->mpm_type].Search(mpm_ctx,
- &det_ctx->mtcu, &det_ctx->pmq, data, data_len);
+ (void)mpm_table[mpm_ctx->mpm_type].Search(
+ mpm_ctx, &det_ctx->mtc, &det_ctx->pmq, data, data_len);
PREFILTER_PROFILING_ADD_BYTES(det_ctx, data_len);
}
}
if (buffer->inspect_len >= mpm_ctx->minlen) {
(void)mpm_table[mpm_ctx->mpm_type].Search(
- mpm_ctx, &det_ctx->mtcu, &det_ctx->pmq, buffer->inspect, buffer->inspect_len);
+ mpm_ctx, &det_ctx->mtc, &det_ctx->pmq, buffer->inspect, buffer->inspect_len);
PREFILTER_PROFILING_ADD_BYTES(det_ctx, buffer->inspect_len);
}
if (buffer->inspect_len >= mpm_ctx->minlen) {
(void)mpm_table[mpm_ctx->mpm_type].Search(
- mpm_ctx, &det_ctx->mtcu, &det_ctx->pmq, buffer->inspect, buffer->inspect_len);
+ mpm_ctx, &det_ctx->mtc, &det_ctx->pmq, buffer->inspect, buffer->inspect_len);
PREFILTER_PROFILING_ADD_BYTES(det_ctx, buffer->inspect_len);
}
//PrintRawDataFp(stdout, data, data_len);
if (data != NULL && data_len >= mpm_ctx->minlen) {
- (void)mpm_table[mpm_ctx->mpm_type].Search(mpm_ctx,
- &det_ctx->mtcu, &det_ctx->pmq, data, data_len);
+ (void)mpm_table[mpm_ctx->mpm_type].Search(
+ mpm_ctx, &det_ctx->mtc, &det_ctx->pmq, data, data_len);
PREFILTER_PROFILING_ADD_BYTES(det_ctx, data_len);
}
}
break;
if (buffer->inspect_len >= mpm_ctx->minlen) {
- (void)mpm_table[mpm_ctx->mpm_type].Search(mpm_ctx,
- &det_ctx->mtcu, &det_ctx->pmq,
- buffer->inspect, buffer->inspect_len);
+ (void)mpm_table[mpm_ctx->mpm_type].Search(
+ mpm_ctx, &det_ctx->mtc, &det_ctx->pmq, buffer->inspect, buffer->inspect_len);
PREFILTER_PROFILING_ADD_BYTES(det_ctx, buffer->inspect_len);
}
if (buffer->inspect_len >= mpm_ctx->minlen) {
(void)mpm_table[mpm_ctx->mpm_type].Search(
- mpm_ctx, &det_ctx->mtcu, &det_ctx->pmq, buffer->inspect, buffer->inspect_len);
+ mpm_ctx, &det_ctx->mtc, &det_ctx->pmq, buffer->inspect, buffer->inspect_len);
PREFILTER_PROFILING_ADD_BYTES(det_ctx, buffer->inspect_len);
}
local_id++;
break;
if (buffer->inspect_len >= mpm_ctx->minlen) {
- (void)mpm_table[mpm_ctx->mpm_type].Search(mpm_ctx,
- &det_ctx->mtcu, &det_ctx->pmq,
- buffer->inspect, buffer->inspect_len);
+ (void)mpm_table[mpm_ctx->mpm_type].Search(
+ mpm_ctx, &det_ctx->mtc, &det_ctx->pmq, buffer->inspect, buffer->inspect_len);
PREFILTER_PROFILING_ADD_BYTES(det_ctx, buffer->inspect_len);
}
break;
if (buffer->inspect_len >= mpm_ctx->minlen) {
- (void)mpm_table[mpm_ctx->mpm_type].Search(mpm_ctx,
- &det_ctx->mtcu, &det_ctx->pmq,
- buffer->inspect, buffer->inspect_len);
+ (void)mpm_table[mpm_ctx->mpm_type].Search(
+ mpm_ctx, &det_ctx->mtc, &det_ctx->pmq, buffer->inspect, buffer->inspect_len);
PREFILTER_PROFILING_ADD_BYTES(det_ctx, buffer->inspect_len);
}
break;
if (buffer->inspect_len >= mpm_ctx->minlen) {
- (void)mpm_table[mpm_ctx->mpm_type].Search(mpm_ctx,
- &det_ctx->mtcu, &det_ctx->pmq,
- buffer->inspect, buffer->inspect_len);
+ (void)mpm_table[mpm_ctx->mpm_type].Search(
+ mpm_ctx, &det_ctx->mtc, &det_ctx->pmq, buffer->inspect, buffer->inspect_len);
PREFILTER_PROFILING_ADD_BYTES(det_ctx, buffer->inspect_len);
}
local_id++;
break;
if (buffer->inspect_len >= mpm_ctx->minlen) {
- (void)mpm_table[mpm_ctx->mpm_type].Search(mpm_ctx,
- &det_ctx->mtcu, &det_ctx->pmq,
- buffer->inspect, buffer->inspect_len);
+ (void)mpm_table[mpm_ctx->mpm_type].Search(
+ mpm_ctx, &det_ctx->mtc, &det_ctx->pmq, buffer->inspect, buffer->inspect_len);
PREFILTER_PROFILING_ADD_BYTES(det_ctx, buffer->inspect_len);
}
local_id++;
if (buffer->inspect_len >= mpm_ctx->minlen) {
(void)mpm_table[mpm_ctx->mpm_type].Search(
- mpm_ctx, &det_ctx->mtcu, &det_ctx->pmq, buffer->inspect, buffer->inspect_len);
+ mpm_ctx, &det_ctx->mtc, &det_ctx->pmq, buffer->inspect, buffer->inspect_len);
PREFILTER_PROFILING_ADD_BYTES(det_ctx, buffer->inspect_len);
}
if (buffer->inspect_len >= mpm_ctx->minlen) {
(void)mpm_table[mpm_ctx->mpm_type].Search(
- mpm_ctx, &det_ctx->mtcu, &det_ctx->pmq, buffer->inspect, buffer->inspect_len);
+ mpm_ctx, &det_ctx->mtc, &det_ctx->pmq, buffer->inspect, buffer->inspect_len);
PREFILTER_PROFILING_ADD_BYTES(det_ctx, buffer->inspect_len);
}
break;
if (buffer->inspect_len >= mpm_ctx->minlen) {
- (void)mpm_table[mpm_ctx->mpm_type].Search(mpm_ctx,
- &det_ctx->mtcu, &det_ctx->pmq,
- buffer->inspect, buffer->inspect_len);
+ (void)mpm_table[mpm_ctx->mpm_type].Search(
+ mpm_ctx, &det_ctx->mtc, &det_ctx->pmq, buffer->inspect, buffer->inspect_len);
PREFILTER_PROFILING_ADD_BYTES(det_ctx, buffer->inspect_len);
}
SignatureNonPrefilterStore *non_pf_store_ptr;
uint32_t non_pf_store_cnt;
- /** pointer to the current mpm ctx that is stored
- * in a rule group head -- can be either a content
- * or uricontent ctx. */
- MpmThreadCtx mtc; /**< thread ctx for the mpm */
- MpmThreadCtx mtcu; /**< thread ctx for uricontent mpm */
- MpmThreadCtx mtcs; /**< thread ctx for stream mpm */
+ MpmThreadCtx mtc; /**< thread ctx for the mpm */
PrefilterRuleStore pmq;
/** SPM thread context used for scanning. This has been cloned from the
#include "util-validate.h"
void SCACBSInitCtx(MpmCtx *);
-void SCACBSInitThreadCtx(MpmCtx *, MpmThreadCtx *);
void SCACBSDestroyCtx(MpmCtx *);
-void SCACBSDestroyThreadCtx(MpmCtx *, MpmThreadCtx *);
int SCACBSAddPatternCI(MpmCtx *, uint8_t *, uint16_t, uint16_t, uint16_t,
uint32_t, SigIntId, uint8_t);
int SCACBSAddPatternCS(MpmCtx *, uint8_t *, uint16_t, uint16_t, uint16_t,
uint32_t SCACBSSearch(const MpmCtx *mpm_ctx, MpmThreadCtx *mpm_thread_ctx,
PrefilterRuleStore *pmq, const uint8_t *buf, uint32_t buflen);
void SCACBSPrintInfo(MpmCtx *mpm_ctx);
-void SCACBSPrintSearchStats(MpmThreadCtx *mpm_thread_ctx);
void SCACBSRegisterTests(void);
/* a placeholder to denote a failure transition in the goto table */
{
mpm_table[MPM_AC_BS].name = "ac-bs";
mpm_table[MPM_AC_BS].InitCtx = SCACBSInitCtx;
- mpm_table[MPM_AC_BS].InitThreadCtx = SCACBSInitThreadCtx;
mpm_table[MPM_AC_BS].DestroyCtx = SCACBSDestroyCtx;
- mpm_table[MPM_AC_BS].DestroyThreadCtx = SCACBSDestroyThreadCtx;
mpm_table[MPM_AC_BS].AddPattern = SCACBSAddPatternCS;
mpm_table[MPM_AC_BS].AddPatternNocase = SCACBSAddPatternCI;
mpm_table[MPM_AC_BS].Prepare = SCACBSPreparePatterns;
mpm_table[MPM_AC_BS].Search = SCACBSSearch;
mpm_table[MPM_AC_BS].PrintCtx = SCACBSPrintInfo;
- mpm_table[MPM_AC_BS].PrintThreadCtx = SCACBSPrintSearchStats;
mpm_table[MPM_AC_BS].RegisterUnittests = SCACBSRegisterTests;
-
- return;
}
/**
return -1;
}
-/**
- * \brief Init the mpm thread context.
- *
- * \param mpm_ctx Pointer to the mpm context.
- * \param mpm_thread_ctx Pointer to the mpm thread context.
- * \param matchsize We don't need this.
- */
-void SCACBSInitThreadCtx(MpmCtx *mpm_ctx, MpmThreadCtx *mpm_thread_ctx)
-{
- memset(mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
-
- mpm_thread_ctx->ctx = SCMalloc(sizeof(SCACBSThreadCtx));
- if (mpm_thread_ctx->ctx == NULL) {
- exit(EXIT_FAILURE);
- }
- memset(mpm_thread_ctx->ctx, 0, sizeof(SCACBSThreadCtx));
- mpm_thread_ctx->memory_cnt++;
- mpm_thread_ctx->memory_size += sizeof(SCACBSThreadCtx);
-
- return;
-}
-
/**
* \brief Initialize the AC context.
*
SCReturn;
}
-/**
- * \brief Destroy the mpm thread context.
- *
- * \param mpm_ctx Pointer to the mpm context.
- * \param mpm_thread_ctx Pointer to the mpm thread context.
- */
-void SCACBSDestroyThreadCtx(MpmCtx *mpm_ctx, MpmThreadCtx *mpm_thread_ctx)
-{
- SCACBSPrintSearchStats(mpm_thread_ctx);
-
- if (mpm_thread_ctx->ctx != NULL) {
- SCFree(mpm_thread_ctx->ctx);
- mpm_thread_ctx->ctx = NULL;
- mpm_thread_ctx->memory_cnt--;
- mpm_thread_ctx->memory_size -= sizeof(SCACBSThreadCtx);
- }
-
- return;
-}
-
/**
* \brief Destroy the mpm context.
*
return MpmAddPattern(mpm_ctx, pat, patlen, offset, depth, pid, sid, flags);
}
-void SCACBSPrintSearchStats(MpmThreadCtx *mpm_thread_ctx)
-{
-
-#ifdef SC_AC_BS_COUNTERS
- SCACBSThreadCtx *ctx = (SCACBSThreadCtx *)mpm_thread_ctx->ctx;
- printf("AC Thread Search stats (ctx %p)\n", ctx);
- printf("Total calls: %" PRIu32 "\n", ctx->total_calls);
- printf("Total matches: %" PRIu64 "\n", ctx->total_matches);
-#endif /* SC_AC_BS_COUNTERS */
-
- return;
-}
-
void SCACBSPrintInfo(MpmCtx *mpm_ctx)
{
SCACBSCtx *ctx = (SCACBSCtx *)mpm_ctx->ctx;
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_BS);
- SCACBSInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 match */
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"abcd", 4, 0, 0, 0, 0, 0);
printf("1 != %" PRIu32 " ",cnt);
SCACBSDestroyCtx(&mpm_ctx);
- SCACBSDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_BS);
- SCACBSInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 match */
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"abce", 4, 0, 0, 0, 0, 0);
printf("0 != %" PRIu32 " ",cnt);
SCACBSDestroyCtx(&mpm_ctx);
- SCACBSDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_BS);
- SCACBSInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 match */
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"abcd", 4, 0, 0, 0, 0, 0);
printf("3 != %" PRIu32 " ",cnt);
SCACBSDestroyCtx(&mpm_ctx);
- SCACBSDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_BS);
- SCACBSInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"abcd", 4, 0, 0, 0, 0, 0);
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"bcdegh", 6, 0, 0, 1, 0, 0);
printf("1 != %" PRIu32 " ",cnt);
SCACBSDestroyCtx(&mpm_ctx);
- SCACBSDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_BS);
- SCACBSInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
MpmAddPatternCI(&mpm_ctx, (uint8_t *)"ABCD", 4, 0, 0, 0, 0, 0);
MpmAddPatternCI(&mpm_ctx, (uint8_t *)"bCdEfG", 6, 0, 0, 1, 0, 0);
printf("3 != %" PRIu32 " ",cnt);
SCACBSDestroyCtx(&mpm_ctx);
- SCACBSDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_BS);
- SCACBSInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"abcd", 4, 0, 0, 0, 0, 0);
PmqSetup(&pmq);
printf("1 != %" PRIu32 " ",cnt);
SCACBSDestroyCtx(&mpm_ctx);
- SCACBSDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_BS);
- SCACBSInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* should match 30 times */
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"A", 1, 0, 0, 0, 0, 0);
printf("135 != %" PRIu32 " ",cnt);
SCACBSDestroyCtx(&mpm_ctx);
- SCACBSDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_BS);
- SCACBSInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 match */
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"abcd", 4, 0, 0, 0, 0, 0);
printf("0 != %" PRIu32 " ",cnt);
SCACBSDestroyCtx(&mpm_ctx);
- SCACBSDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_BS);
- SCACBSInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 match */
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"ab", 2, 0, 0, 0, 0, 0);
printf("1 != %" PRIu32 " ",cnt);
SCACBSDestroyCtx(&mpm_ctx);
- SCACBSDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_BS);
- SCACBSInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 match */
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"abcdefgh", 8, 0, 0, 0, 0, 0);
printf("1 != %" PRIu32 " ",cnt);
SCACBSDestroyCtx(&mpm_ctx);
- SCACBSDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_BS);
- SCACBSInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
if (MpmAddPatternCS(&mpm_ctx, (uint8_t *)"he", 2, 0, 0, 1, 0, 0) == -1)
goto end;
strlen(buf)) == 2);
end:
- SCACBSDestroyCtx(&mpm_ctx);
- SCACBSDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
- PmqFree(&pmq);
- return result;
+ SCACBSDestroyCtx(&mpm_ctx);
+ PmqFree(&pmq);
+ return result;
}
static int SCACBSTest12(void)
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_BS);
- SCACBSInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 match */
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"wxyz", 4, 0, 0, 0, 0, 0);
printf("2 != %" PRIu32 " ",cnt);
SCACBSDestroyCtx(&mpm_ctx);
- SCACBSDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_BS);
- SCACBSInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 match */
const char pat[] = "abcdefghijklmnopqrstuvwxyzABCD";
printf("1 != %" PRIu32 " ",cnt);
SCACBSDestroyCtx(&mpm_ctx);
- SCACBSDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_BS);
- SCACBSInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 match */
const char pat[] = "abcdefghijklmnopqrstuvwxyzABCDE";
printf("1 != %" PRIu32 " ",cnt);
SCACBSDestroyCtx(&mpm_ctx);
- SCACBSDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_BS);
- SCACBSInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 match */
const char pat[] = "abcdefghijklmnopqrstuvwxyzABCDEF";
printf("1 != %" PRIu32 " ",cnt);
SCACBSDestroyCtx(&mpm_ctx);
- SCACBSDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_BS);
- SCACBSInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 match */
const char pat[] = "abcdefghijklmnopqrstuvwxyzABC";
printf("1 != %" PRIu32 " ",cnt);
SCACBSDestroyCtx(&mpm_ctx);
- SCACBSDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_BS);
- SCACBSInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 match */
const char pat[] = "abcdefghijklmnopqrstuvwxyzAB";
printf("1 != %" PRIu32 " ",cnt);
SCACBSDestroyCtx(&mpm_ctx);
- SCACBSDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_BS);
- SCACBSInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 match */
const char pat[] = "abcde"
printf("1 != %" PRIu32 " ",cnt);
SCACBSDestroyCtx(&mpm_ctx);
- SCACBSDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_BS);
- SCACBSInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 */
const char pat[] = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_BS);
- SCACBSInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 */
const char pat[] = "AAAAA"
printf("1 != %" PRIu32 " ",cnt);
SCACBSDestroyCtx(&mpm_ctx);
- SCACBSDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_BS);
- SCACBSInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 */
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"AA", 2, 0, 0, 0, 0, 0);
printf("1 != %" PRIu32 " ",cnt);
SCACBSDestroyCtx(&mpm_ctx);
- SCACBSDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_BS);
- SCACBSInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 match */
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"abcd", 4, 0, 0, 0, 0, 0);
printf("2 != %" PRIu32 " ",cnt);
SCACBSDestroyCtx(&mpm_ctx);
- SCACBSDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_BS);
- SCACBSInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 */
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"AA", 2, 0, 0, 0, 0, 0);
printf("1 != %" PRIu32 " ",cnt);
SCACBSDestroyCtx(&mpm_ctx);
- SCACBSDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_BS);
- SCACBSInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 */
MpmAddPatternCI(&mpm_ctx, (uint8_t *)"AA", 2, 0, 0, 0, 0, 0);
printf("1 != %" PRIu32 " ",cnt);
SCACBSDestroyCtx(&mpm_ctx);
- SCACBSDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_BS);
- SCACBSInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
MpmAddPatternCI(&mpm_ctx, (uint8_t *)"ABCD", 4, 0, 0, 0, 0, 0);
MpmAddPatternCI(&mpm_ctx, (uint8_t *)"bCdEfG", 6, 0, 0, 1, 0, 0);
printf("3 != %" PRIu32 " ",cnt);
SCACBSDestroyCtx(&mpm_ctx);
- SCACBSDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_BS);
- SCACBSInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
MpmAddPatternCI(&mpm_ctx, (uint8_t *)"Works", 5, 0, 0, 0, 0, 0);
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"Works", 5, 0, 0, 1, 0, 0);
printf("3 != %" PRIu32 " ",cnt);
SCACBSDestroyCtx(&mpm_ctx);
- SCACBSDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_BS);
- SCACBSInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 0 match */
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"ONE", 3, 0, 0, 0, 0, 0);
printf("0 != %" PRIu32 " ",cnt);
SCACBSDestroyCtx(&mpm_ctx);
- SCACBSDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_BS);
- SCACBSInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 0 match */
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"one", 3, 0, 0, 0, 0, 0);
printf("0 != %" PRIu32 " ",cnt);
SCACBSDestroyCtx(&mpm_ctx);
- SCACBSDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_BS);
- SCACBSInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"abcde", 5, 0, 0, 0, 0, 0);
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"bcdef", 5, 0, 0, 1, 0, 0);
printf("3 != %" PRIu32 " ",cnt);
SCACBSDestroyCtx(&mpm_ctx);
- SCACBSDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
uint16_t single_state_size;
} SCACBSCtx;
-typedef struct SCACBSThreadCtx_ {
- /* the total calls we make to the search function */
- uint32_t total_calls;
- /* the total patterns that we ended up matching against */
- uint64_t total_matches;
-} SCACBSThreadCtx;
-
void MpmACBSRegister(void);
#if __BYTE_ORDER == __LITTLE_ENDIAN
void SCACTileInitCtx(MpmCtx *);
-void SCACTileInitThreadCtx(MpmCtx *, MpmThreadCtx *);
void SCACTileDestroyCtx(MpmCtx *);
-void SCACTileDestroyThreadCtx(MpmCtx *, MpmThreadCtx *);
int SCACTileAddPatternCI(MpmCtx *, uint8_t *, uint16_t, uint16_t, uint16_t,
uint32_t, SigIntId, uint8_t);
int SCACTileAddPatternCS(MpmCtx *, uint8_t *, uint16_t, uint16_t, uint16_t,
PrefilterRuleStore *pmq, const uint8_t *buf,
uint32_t buflen);
void SCACTilePrintInfo(MpmCtx *mpm_ctx);
-void SCACTilePrintSearchStats(MpmThreadCtx *mpm_thread_ctx);
void SCACTileRegisterTests(void);
uint32_t SCACTileSearchLarge(const SCACTileSearchCtx *ctx, MpmThreadCtx *mpm_thread_ctx,
return -1;
}
-/**
- * \brief Init the mpm thread context.
- *
- * \param mpm_ctx Pointer to the mpm context.
- * \param mpm_thread_ctx Pointer to the mpm thread context.
- */
-void SCACTileInitThreadCtx(MpmCtx *mpm_ctx, MpmThreadCtx *mpm_thread_ctx)
-{
- memset(mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
-
- mpm_thread_ctx->ctx = SCMalloc(sizeof(SCACTileThreadCtx));
- if (mpm_thread_ctx->ctx == NULL) {
- exit(EXIT_FAILURE);
- }
- memset(mpm_thread_ctx->ctx, 0, sizeof(SCACTileThreadCtx));
- mpm_thread_ctx->memory_cnt++;
- mpm_thread_ctx->memory_size += sizeof(SCACTileThreadCtx);
-}
-
/**
* \brief Initialize the AC context.
*
SCACTileGetConfig();
}
-/**
- * \brief Destroy the mpm thread context.
- *
- * \param mpm_ctx Pointer to the mpm context.
- * \param mpm_thread_ctx Pointer to the mpm thread context.
- */
-void SCACTileDestroyThreadCtx(MpmCtx *mpm_ctx, MpmThreadCtx *mpm_thread_ctx)
-{
- SCACTilePrintSearchStats(mpm_thread_ctx);
-
- if (mpm_thread_ctx->ctx != NULL) {
- SCFree(mpm_thread_ctx->ctx);
- mpm_thread_ctx->ctx = NULL;
- mpm_thread_ctx->memory_cnt--;
- mpm_thread_ctx->memory_size -= sizeof(SCACTileThreadCtx);
- }
-}
-
static void SCACTileDestroyInitCtx(MpmCtx *mpm_ctx)
{
SCACTileSearchCtx *search_ctx = (SCACTileSearchCtx *)mpm_ctx->ctx;
pid, sid, flags);
}
-void SCACTilePrintSearchStats(MpmThreadCtx *mpm_thread_ctx)
-{
-#ifdef SC_AC_TILE_COUNTERS
- SCACTileThreadCtx *ctx = (SCACTileThreadCtx *)mpm_thread_ctx->ctx;
- printf("AC Thread Search stats (ctx %p)\n", ctx);
- printf("Total calls: %" PRIu32 "\n", ctx->total_calls);
- printf("Total matches: %" PRIu64 "\n", ctx->total_matches);
-#endif /* SC_AC_TILE_COUNTERS */
-}
-
void SCACTilePrintInfo(MpmCtx *mpm_ctx)
{
SCACTileSearchCtx *search_ctx = (SCACTileSearchCtx *)mpm_ctx->ctx;
{
mpm_table[MPM_AC_KS].name = "ac-ks";
mpm_table[MPM_AC_KS].InitCtx = SCACTileInitCtx;
- mpm_table[MPM_AC_KS].InitThreadCtx = SCACTileInitThreadCtx;
mpm_table[MPM_AC_KS].DestroyCtx = SCACTileDestroyCtx;
- mpm_table[MPM_AC_KS].DestroyThreadCtx = SCACTileDestroyThreadCtx;
mpm_table[MPM_AC_KS].AddPattern = SCACTileAddPatternCS;
mpm_table[MPM_AC_KS].AddPatternNocase = SCACTileAddPatternCI;
mpm_table[MPM_AC_KS].Prepare = SCACTilePreparePatterns;
mpm_table[MPM_AC_KS].Search = SCACTileSearch;
mpm_table[MPM_AC_KS].PrintCtx = SCACTilePrintInfo;
- mpm_table[MPM_AC_KS].PrintThreadCtx = SCACTilePrintSearchStats;
mpm_table[MPM_AC_KS].RegisterUnittests = SCACTileRegisterTests;
}
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_KS);
- SCACTileInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 match */
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"abcd", 4, 0, 0, 0, 0, 0);
printf("1 != %" PRIu32 " ",cnt);
SCACTileDestroyCtx(&mpm_ctx);
- SCACTileDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_KS);
- SCACTileInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 match */
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"abce", 4, 0, 0, 0, 0, 0);
printf("0 != %" PRIu32 " ",cnt);
SCACTileDestroyCtx(&mpm_ctx);
- SCACTileDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_KS);
- SCACTileInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 match */
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"abcd", 4, 0, 0, 0, 0, 0);
printf("3 != %" PRIu32 " ",cnt);
SCACTileDestroyCtx(&mpm_ctx);
- SCACTileDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_KS);
- SCACTileInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"abcd", 4, 0, 0, 0, 0, 0);
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"bcdegh", 6, 0, 0, 1, 0, 0);
printf("1 != %" PRIu32 " ",cnt);
SCACTileDestroyCtx(&mpm_ctx);
- SCACTileDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_KS);
- SCACTileInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
MpmAddPatternCI(&mpm_ctx, (uint8_t *)"ABCD", 4, 0, 0, 0, 0, 0);
MpmAddPatternCI(&mpm_ctx, (uint8_t *)"bCdEfG", 6, 0, 0, 1, 0, 0);
printf("3 != %" PRIu32 " ",cnt);
SCACTileDestroyCtx(&mpm_ctx);
- SCACTileDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_KS);
- SCACTileInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"abcd", 4, 0, 0, 0, 0, 0);
PmqSetup(&pmq);
printf("1 != %" PRIu32 " ",cnt);
SCACTileDestroyCtx(&mpm_ctx);
- SCACTileDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_KS);
- SCACTileInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* should match 30 times */
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"A", 1, 0, 0, 0, 0, 0);
printf("135 != %" PRIu32 " ",cnt);
SCACTileDestroyCtx(&mpm_ctx);
- SCACTileDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_KS);
- SCACTileInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 match */
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"abcd", 4, 0, 0, 0, 0, 0);
printf("0 != %" PRIu32 " ",cnt);
SCACTileDestroyCtx(&mpm_ctx);
- SCACTileDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_KS);
- SCACTileInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 match */
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"ab", 2, 0, 0, 0, 0, 0);
printf("1 != %" PRIu32 " ",cnt);
SCACTileDestroyCtx(&mpm_ctx);
- SCACTileDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_KS);
- SCACTileInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 match */
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"abcdefgh", 8, 0, 0, 0, 0, 0);
printf("1 != %" PRIu32 " ",cnt);
SCACTileDestroyCtx(&mpm_ctx);
- SCACTileDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_KS);
- SCACTileInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
if (MpmAddPatternCS(&mpm_ctx, (uint8_t *)"he", 2, 0, 0, 1, 0, 0) == -1)
goto end;
strlen(buf)) == 2);
end:
- SCACTileDestroyCtx(&mpm_ctx);
- SCACTileDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
- PmqFree(&pmq);
- return result;
+ SCACTileDestroyCtx(&mpm_ctx);
+ PmqFree(&pmq);
+ return result;
}
static int SCACTileTest12(void)
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_KS);
- SCACTileInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 match */
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"wxyz", 4, 0, 0, 0, 0, 0);
printf("2 != %" PRIu32 " ",cnt);
SCACTileDestroyCtx(&mpm_ctx);
- SCACTileDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_KS);
- SCACTileInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 match */
const char pat[] = "abcdefghijklmnopqrstuvwxyzABCD";
printf("1 != %" PRIu32 " ",cnt);
SCACTileDestroyCtx(&mpm_ctx);
- SCACTileDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_KS);
- SCACTileInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 match */
const char pat[] = "abcdefghijklmnopqrstuvwxyzABCDE";
printf("1 != %" PRIu32 " ",cnt);
SCACTileDestroyCtx(&mpm_ctx);
- SCACTileDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_KS);
- SCACTileInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 match */
const char pat[] = "abcdefghijklmnopqrstuvwxyzABCDEF";
printf("1 != %" PRIu32 " ",cnt);
SCACTileDestroyCtx(&mpm_ctx);
- SCACTileDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_KS);
- SCACTileInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 match */
const char pat[] = "abcdefghijklmnopqrstuvwxyzABC";
printf("1 != %" PRIu32 " ",cnt);
SCACTileDestroyCtx(&mpm_ctx);
- SCACTileDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_KS);
- SCACTileInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 match */
const char pat[] = "abcdefghijklmnopqrstuvwxyzAB";
printf("1 != %" PRIu32 " ",cnt);
SCACTileDestroyCtx(&mpm_ctx);
- SCACTileDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_KS);
- SCACTileInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 match */
const char pat[] = "abcde"
printf("1 != %" PRIu32 " ",cnt);
SCACTileDestroyCtx(&mpm_ctx);
- SCACTileDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_KS);
- SCACTileInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 */
const char pat[] = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
printf("1 != %" PRIu32 " ",cnt);
SCACTileDestroyCtx(&mpm_ctx);
- SCACTileDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_KS);
- SCACTileInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 */
const char pat[] = "AAAAA"
printf("1 != %" PRIu32 " ",cnt);
SCACTileDestroyCtx(&mpm_ctx);
- SCACTileDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_KS);
- SCACTileInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 */
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"AA", 2, 0, 0, 0, 0, 0);
printf("1 != %" PRIu32 " ",cnt);
SCACTileDestroyCtx(&mpm_ctx);
- SCACTileDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_KS);
- SCACTileInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 match */
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"abcd", 4, 0, 0, 0, 0, 0);
printf("2 != %" PRIu32 " ",cnt);
SCACTileDestroyCtx(&mpm_ctx);
- SCACTileDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_KS);
- SCACTileInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 */
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"AA", 2, 0, 0, 0, 0, 0);
printf("1 != %" PRIu32 " ",cnt);
SCACTileDestroyCtx(&mpm_ctx);
- SCACTileDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_KS);
- SCACTileInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 */
MpmAddPatternCI(&mpm_ctx, (uint8_t *)"AA", 2, 0, 0, 0, 0, 0);
printf("1 != %" PRIu32 " ",cnt);
SCACTileDestroyCtx(&mpm_ctx);
- SCACTileDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_KS);
- SCACTileInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
MpmAddPatternCI(&mpm_ctx, (uint8_t *)"ABCD", 4, 0, 0, 0, 0, 0);
MpmAddPatternCI(&mpm_ctx, (uint8_t *)"bCdEfG", 6, 0, 0, 1, 0, 0);
printf("3 != %" PRIu32 " ",cnt);
SCACTileDestroyCtx(&mpm_ctx);
- SCACTileDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_KS);
- SCACTileInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
MpmAddPatternCI(&mpm_ctx, (uint8_t *)"Works", 5, 0, 0, 0, 0, 0);
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"Works", 5, 0, 0, 1, 0, 0);
printf("3 != %" PRIu32 " ",cnt);
SCACTileDestroyCtx(&mpm_ctx);
- SCACTileDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_KS);
- SCACTileInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 0 match */
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"ONE", 3, 0, 0, 0, 0, 0);
printf("0 != %" PRIu32 " ",cnt);
SCACTileDestroyCtx(&mpm_ctx);
- SCACTileDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC_KS);
- SCACTileInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 0 match */
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"one", 3, 0, 0, 0, 0, 0);
printf("0 != %" PRIu32 " ",cnt);
SCACTileDestroyCtx(&mpm_ctx);
- SCACTileDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
} SCACTileSearchCtx;
-
-typedef struct SCACTileThreadCtx_ {
- /* the total calls we make to the search function */
- uint32_t total_calls;
- /* the total patterns that we ended up matching against */
- uint64_t total_matches;
-} SCACTileThreadCtx;
-
void MpmACTileRegister(void);
#endif /* __UTIL_MPM_AC_KS__H__ */
#include "util-validate.h"
void SCACInitCtx(MpmCtx *);
-void SCACInitThreadCtx(MpmCtx *, MpmThreadCtx *);
void SCACDestroyCtx(MpmCtx *);
-void SCACDestroyThreadCtx(MpmCtx *, MpmThreadCtx *);
int SCACAddPatternCI(MpmCtx *, uint8_t *, uint16_t, uint16_t, uint16_t,
uint32_t, SigIntId, uint8_t);
int SCACAddPatternCS(MpmCtx *, uint8_t *, uint16_t, uint16_t, uint16_t,
uint32_t SCACSearch(const MpmCtx *mpm_ctx, MpmThreadCtx *mpm_thread_ctx,
PrefilterRuleStore *pmq, const uint8_t *buf, uint32_t buflen);
void SCACPrintInfo(MpmCtx *mpm_ctx);
-void SCACPrintSearchStats(MpmThreadCtx *mpm_thread_ctx);
void SCACRegisterTests(void);
/* a placeholder to denote a failure transition in the goto table */
return -1;
}
-/**
- * \brief Init the mpm thread context.
- *
- * \param mpm_ctx Pointer to the mpm context.
- * \param mpm_thread_ctx Pointer to the mpm thread context.
- * \param matchsize We don't need this.
- */
-void SCACInitThreadCtx(MpmCtx *mpm_ctx, MpmThreadCtx *mpm_thread_ctx)
-{
- memset(mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
-
- mpm_thread_ctx->ctx = SCMalloc(sizeof(SCACThreadCtx));
- if (mpm_thread_ctx->ctx == NULL) {
- exit(EXIT_FAILURE);
- }
- memset(mpm_thread_ctx->ctx, 0, sizeof(SCACThreadCtx));
- mpm_thread_ctx->memory_cnt++;
- mpm_thread_ctx->memory_size += sizeof(SCACThreadCtx);
-
- return;
-}
-
/**
* \brief Initialize the AC context.
*
SCReturn;
}
-/**
- * \brief Destroy the mpm thread context.
- *
- * \param mpm_ctx Pointer to the mpm context.
- * \param mpm_thread_ctx Pointer to the mpm thread context.
- */
-void SCACDestroyThreadCtx(MpmCtx *mpm_ctx, MpmThreadCtx *mpm_thread_ctx)
-{
- SCACPrintSearchStats(mpm_thread_ctx);
-
- if (mpm_thread_ctx->ctx != NULL) {
- SCFree(mpm_thread_ctx->ctx);
- mpm_thread_ctx->ctx = NULL;
- mpm_thread_ctx->memory_cnt--;
- mpm_thread_ctx->memory_size -= sizeof(SCACThreadCtx);
- }
-
- return;
-}
-
/**
* \brief Destroy the mpm context.
*
return MpmAddPattern(mpm_ctx, pat, patlen, offset, depth, pid, sid, flags);
}
-void SCACPrintSearchStats(MpmThreadCtx *mpm_thread_ctx)
-{
-
-#ifdef SC_AC_COUNTERS
- SCACThreadCtx *ctx = (SCACThreadCtx *)mpm_thread_ctx->ctx;
- printf("AC Thread Search stats (ctx %p)\n", ctx);
- printf("Total calls: %" PRIu32 "\n", ctx->total_calls);
- printf("Total matches: %" PRIu64 "\n", ctx->total_matches);
-#endif /* SC_AC_COUNTERS */
-
- return;
-}
-
void SCACPrintInfo(MpmCtx *mpm_ctx)
{
SCACCtx *ctx = (SCACCtx *)mpm_ctx->ctx;
{
mpm_table[MPM_AC].name = "ac";
mpm_table[MPM_AC].InitCtx = SCACInitCtx;
- mpm_table[MPM_AC].InitThreadCtx = SCACInitThreadCtx;
mpm_table[MPM_AC].DestroyCtx = SCACDestroyCtx;
- mpm_table[MPM_AC].DestroyThreadCtx = SCACDestroyThreadCtx;
mpm_table[MPM_AC].AddPattern = SCACAddPatternCS;
mpm_table[MPM_AC].AddPatternNocase = SCACAddPatternCI;
mpm_table[MPM_AC].Prepare = SCACPreparePatterns;
mpm_table[MPM_AC].Search = SCACSearch;
mpm_table[MPM_AC].PrintCtx = SCACPrintInfo;
- mpm_table[MPM_AC].PrintThreadCtx = SCACPrintSearchStats;
mpm_table[MPM_AC].RegisterUnittests = SCACRegisterTests;
return;
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC);
- SCACInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 match */
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"abcd", 4, 0, 0, 0, 0, 0);
printf("1 != %" PRIu32 " ",cnt);
SCACDestroyCtx(&mpm_ctx);
- SCACDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC);
- SCACInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 match */
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"abce", 4, 0, 0, 0, 0, 0);
printf("0 != %" PRIu32 " ",cnt);
SCACDestroyCtx(&mpm_ctx);
- SCACDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC);
- SCACInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 match */
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"abcd", 4, 0, 0, 0, 0, 0);
printf("3 != %" PRIu32 " ",cnt);
SCACDestroyCtx(&mpm_ctx);
- SCACDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC);
- SCACInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"abcd", 4, 0, 0, 0, 0, 0);
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"bcdegh", 6, 0, 0, 1, 0, 0);
printf("1 != %" PRIu32 " ",cnt);
SCACDestroyCtx(&mpm_ctx);
- SCACDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC);
- SCACInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
MpmAddPatternCI(&mpm_ctx, (uint8_t *)"ABCD", 4, 0, 0, 0, 0, 0);
MpmAddPatternCI(&mpm_ctx, (uint8_t *)"bCdEfG", 6, 0, 0, 1, 0, 0);
printf("3 != %" PRIu32 " ",cnt);
SCACDestroyCtx(&mpm_ctx);
- SCACDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC);
- SCACInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"abcd", 4, 0, 0, 0, 0, 0);
PmqSetup(&pmq);
printf("1 != %" PRIu32 " ",cnt);
SCACDestroyCtx(&mpm_ctx);
- SCACDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC);
- SCACInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* should match 30 times */
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"A", 1, 0, 0, 0, 0, 0);
printf("135 != %" PRIu32 " ",cnt);
SCACDestroyCtx(&mpm_ctx);
- SCACDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC);
- SCACInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 match */
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"abcd", 4, 0, 0, 0, 0, 0);
printf("0 != %" PRIu32 " ",cnt);
SCACDestroyCtx(&mpm_ctx);
- SCACDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC);
- SCACInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 match */
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"ab", 2, 0, 0, 0, 0, 0);
printf("1 != %" PRIu32 " ",cnt);
SCACDestroyCtx(&mpm_ctx);
- SCACDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC);
- SCACInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 match */
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"abcdefgh", 8, 0, 0, 0, 0, 0);
printf("1 != %" PRIu32 " ",cnt);
SCACDestroyCtx(&mpm_ctx);
- SCACDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC);
- SCACInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
if (MpmAddPatternCS(&mpm_ctx, (uint8_t *)"he", 2, 0, 0, 1, 0, 0) == -1)
goto end;
strlen(buf)) == 2);
end:
- SCACDestroyCtx(&mpm_ctx);
- SCACDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
- PmqFree(&pmq);
- return result;
+ SCACDestroyCtx(&mpm_ctx);
+ PmqFree(&pmq);
+ return result;
}
static int SCACTest12(void)
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC);
- SCACInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 match */
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"wxyz", 4, 0, 0, 0, 0, 0);
printf("2 != %" PRIu32 " ",cnt);
SCACDestroyCtx(&mpm_ctx);
- SCACDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC);
- SCACInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 match */
const char pat[] = "abcdefghijklmnopqrstuvwxyzABCD";
printf("1 != %" PRIu32 " ",cnt);
SCACDestroyCtx(&mpm_ctx);
- SCACDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC);
- SCACInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 match */
const char pat[] = "abcdefghijklmnopqrstuvwxyzABCDE";
printf("1 != %" PRIu32 " ",cnt);
SCACDestroyCtx(&mpm_ctx);
- SCACDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC);
- SCACInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 match */
const char pat[] = "abcdefghijklmnopqrstuvwxyzABCDEF";
printf("1 != %" PRIu32 " ",cnt);
SCACDestroyCtx(&mpm_ctx);
- SCACDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC);
- SCACInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 match */
const char pat[] = "abcdefghijklmnopqrstuvwxyzABC";
printf("1 != %" PRIu32 " ",cnt);
SCACDestroyCtx(&mpm_ctx);
- SCACDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC);
- SCACInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 match */
const char pat[] = "abcdefghijklmnopqrstuvwxyzAB";
printf("1 != %" PRIu32 " ",cnt);
SCACDestroyCtx(&mpm_ctx);
- SCACDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC);
- SCACInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 match */
const char pat[] = "abcde"
printf("1 != %" PRIu32 " ",cnt);
SCACDestroyCtx(&mpm_ctx);
- SCACDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC);
- SCACInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 */
const char pat[] = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
printf("1 != %" PRIu32 " ",cnt);
SCACDestroyCtx(&mpm_ctx);
- SCACDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC);
- SCACInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 */
const char pat[] = "AAAAA"
printf("1 != %" PRIu32 " ",cnt);
SCACDestroyCtx(&mpm_ctx);
- SCACDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC);
- SCACInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 */
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"AA", 2, 0, 0, 0, 0, 0);
printf("1 != %" PRIu32 " ",cnt);
SCACDestroyCtx(&mpm_ctx);
- SCACDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC);
- SCACInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 match */
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"abcd", 4, 0, 0, 0, 0, 0);
printf("2 != %" PRIu32 " ",cnt);
SCACDestroyCtx(&mpm_ctx);
- SCACDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC);
- SCACInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 */
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"AA", 2, 0, 0, 0, 0, 0);
printf("1 != %" PRIu32 " ",cnt);
SCACDestroyCtx(&mpm_ctx);
- SCACDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC);
- SCACInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 1 */
MpmAddPatternCI(&mpm_ctx, (uint8_t *)"AA", 2, 0, 0, 0, 0, 0);
printf("1 != %" PRIu32 " ",cnt);
SCACDestroyCtx(&mpm_ctx);
- SCACDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC);
- SCACInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
MpmAddPatternCI(&mpm_ctx, (uint8_t *)"ABCD", 4, 0, 0, 0, 0, 0);
MpmAddPatternCI(&mpm_ctx, (uint8_t *)"bCdEfG", 6, 0, 0, 1, 0, 0);
printf("3 != %" PRIu32 " ",cnt);
SCACDestroyCtx(&mpm_ctx);
- SCACDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0x00, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC);
- SCACInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
MpmAddPatternCI(&mpm_ctx, (uint8_t *)"Works", 5, 0, 0, 0, 0, 0);
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"Works", 5, 0, 0, 1, 0, 0);
printf("3 != %" PRIu32 " ",cnt);
SCACDestroyCtx(&mpm_ctx);
- SCACDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC);
- SCACInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 0 match */
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"ONE", 3, 0, 0, 0, 0, 0);
printf("0 != %" PRIu32 " ",cnt);
SCACDestroyCtx(&mpm_ctx);
- SCACDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
memset(&mpm_ctx, 0, sizeof(MpmCtx));
memset(&mpm_thread_ctx, 0, sizeof(MpmThreadCtx));
MpmInitCtx(&mpm_ctx, MPM_AC);
- SCACInitThreadCtx(&mpm_ctx, &mpm_thread_ctx);
/* 0 match */
MpmAddPatternCS(&mpm_ctx, (uint8_t *)"one", 3, 0, 0, 0, 0, 0);
printf("0 != %" PRIu32 " ",cnt);
SCACDestroyCtx(&mpm_ctx);
- SCACDestroyThreadCtx(&mpm_ctx, &mpm_thread_ctx);
PmqFree(&pmq);
return result;
}
} SCACCtx;
-typedef struct SCACThreadCtx_ {
- /* the total calls we make to the search function */
- uint32_t total_calls;
- /* the total patterns that we ended up matching against */
- uint64_t total_matches;
-} SCACThreadCtx;
-
void MpmACRegister(void);
#endif /* __UTIL_MPM_AC__H__ */
void MpmInitThreadCtx(MpmThreadCtx *mpm_thread_ctx, uint16_t matcher)
{
- mpm_table[matcher].InitThreadCtx(NULL, mpm_thread_ctx);
+ if (mpm_table[matcher].InitThreadCtx != NULL) {
+ mpm_table[matcher].InitThreadCtx(NULL, mpm_thread_ctx);
+ }
+}
+
+void MpmDestroyThreadCtx(MpmThreadCtx *mpm_thread_ctx, const uint16_t matcher)
+{
+ if (mpm_table[matcher].DestroyThreadCtx != NULL) {
+ mpm_table[matcher].DestroyThreadCtx(NULL, mpm_thread_ctx);
+ }
}
void MpmInitCtx(MpmCtx *mpm_ctx, uint8_t matcher)
void MpmInitCtx(MpmCtx *mpm_ctx, uint8_t matcher);
void MpmInitThreadCtx(MpmThreadCtx *mpm_thread_ctx, uint16_t);
+void MpmDestroyThreadCtx(MpmThreadCtx *mpm_thread_ctx, const uint16_t matcher);
int MpmAddPatternCS(struct MpmCtx_ *mpm_ctx, uint8_t *pat, uint16_t patlen,
uint16_t offset, uint16_t depth,