exit(EXIT_FAILURE);
}
memset(item[0].mpm_ctx_ts, 0, sizeof(MpmCtx));
- item[0].mpm_ctx_ts->global = 1;
+ item[0].mpm_ctx_ts->flags |= MPMCTX_FLAGS_GLOBAL;
/* toclient */
item[0].mpm_ctx_tc = SCMalloc(sizeof(MpmCtx));
exit(EXIT_FAILURE);
}
memset(item[0].mpm_ctx_tc, 0, sizeof(MpmCtx));
- item[0].mpm_ctx_tc->global = 1;
+ item[0].mpm_ctx_tc->flags |= MPMCTX_FLAGS_GLOBAL;
/* our id starts from 0 always. Helps us with the ctx retrieval from
* the array */
exit(EXIT_FAILURE);
}
memset(items[i].mpm_ctx_ts, 0, sizeof(MpmCtx));
- items[i].mpm_ctx_ts->global = 1;
+ items[i].mpm_ctx_ts->flags |= MPMCTX_FLAGS_GLOBAL;
}
if (items[i].mpm_ctx_tc == NULL) {
items[i].mpm_ctx_tc = SCMalloc(sizeof(MpmCtx));
exit(EXIT_FAILURE);
}
memset(items[i].mpm_ctx_tc, 0, sizeof(MpmCtx));
- items[i].mpm_ctx_tc->global = 1;
+ items[i].mpm_ctx_tc->flags |= MPMCTX_FLAGS_GLOBAL;
}
return items[i].id;
}
exit(EXIT_FAILURE);
}
memset(new_item[0].mpm_ctx_ts, 0, sizeof(MpmCtx));
- new_item[0].mpm_ctx_ts->global = 1;
+ new_item[0].mpm_ctx_ts->flags |= MPMCTX_FLAGS_GLOBAL;
/* toclient */
new_item[0].mpm_ctx_tc = SCMalloc(sizeof(MpmCtx));
exit(EXIT_FAILURE);
}
memset(new_item[0].mpm_ctx_tc, 0, sizeof(MpmCtx));
- new_item[0].mpm_ctx_tc->global = 1;
+ new_item[0].mpm_ctx_tc->flags |= MPMCTX_FLAGS_GLOBAL;
new_item[0].id = de_ctx->mpm_ctx_factory_container->no_of_items;
de_ctx->mpm_ctx_factory_container->no_of_items++;
mpm_ctx->pattern_cnt++;
+ if (!(mpm_ctx->flags & MPMCTX_FLAGS_NODEPTH)) {
+ if (depth) {
+ mpm_ctx->maxdepth = MAX(mpm_ctx->maxdepth, depth);
+ SCLogDebug("%p: depth %u max %u", mpm_ctx, depth, mpm_ctx->maxdepth);
+ } else {
+ mpm_ctx->flags |= MPMCTX_FLAGS_NODEPTH;
+ mpm_ctx->maxdepth = 0;
+ SCLogDebug("%p: alas, no depth for us", mpm_ctx);
+ }
+ }
+
if (mpm_ctx->maxlen < patlen)
mpm_ctx->maxlen = patlen;
struct MpmPattern_ *next;
} MpmPattern;
+/* Indicates if this a global mpm_ctx. Global mpm_ctx is the one that
+ * is instantiated when we use "single". Non-global is "full", i.e.
+ * one per sgh. */
+#define MPMCTX_FLAGS_GLOBAL BIT_U8(0)
+#define MPMCTX_FLAGS_NODEPTH BIT_U8(1)
+
typedef struct MpmCtx_ {
void *ctx;
- uint16_t mpm_type;
+ uint8_t mpm_type;
+
+ uint8_t flags;
- /* Indicates if this a global mpm_ctx. Global mpm_ctx is the one that
- * is instantiated when we use "single". Non-global is "full", i.e.
- * one per sgh. We are using a uint16_t here to avoiding using a pad.
- * You can use a uint8_t here as well. */
- uint16_t global;
+ uint16_t maxdepth;
/* unique patterns */
uint32_t pattern_cnt;