SCEnter();
uint32_t ret = 0;
- MpmCtx *mpm_ctx = NULL;
+ const MpmCtx *mpm_ctx = NULL;
if (p->flowflags & FLOW_PKT_TOSERVER) {
DEBUG_VALIDATE_BUG_ON(det_ctx->sgh->mpm_stream_ctx_ts == NULL);
SCEnter();
uint32_t ret;
- MpmCtx *mpm_ctx = NULL;
+ const MpmCtx *mpm_ctx = NULL;
if (p->proto == IPPROTO_TCP) {
if (p->flowflags & FLOW_PKT_TOSERVER) {
uint32_t non_mpm_store_cnt;
/* pattern matcher instances */
- MpmCtx *mpm_proto_other_ctx;
-
- MpmCtx *mpm_proto_tcp_ctx_ts;
- MpmCtx *mpm_proto_udp_ctx_ts;
- MpmCtx *mpm_stream_ctx_ts;
- MpmCtx *mpm_uri_ctx_ts;
- MpmCtx *mpm_hcbd_ctx_ts;
- MpmCtx *mpm_hhd_ctx_ts;
- MpmCtx *mpm_hrhd_ctx_ts;
- MpmCtx *mpm_hmd_ctx_ts;
- MpmCtx *mpm_hcd_ctx_ts;
- MpmCtx *mpm_hrud_ctx_ts;
- MpmCtx *mpm_huad_ctx_ts;
- MpmCtx *mpm_hhhd_ctx_ts;
- MpmCtx *mpm_hrhhd_ctx_ts;
- MpmCtx *mpm_dnsquery_ctx_ts;
- MpmCtx *mpm_smtp_filedata_ctx_ts;
-
- MpmCtx *mpm_proto_tcp_ctx_tc;
- MpmCtx *mpm_proto_udp_ctx_tc;
- MpmCtx *mpm_stream_ctx_tc;
- MpmCtx *mpm_hsbd_ctx_tc;
- MpmCtx *mpm_hhd_ctx_tc;
- MpmCtx *mpm_hrhd_ctx_tc;
- MpmCtx *mpm_hcd_ctx_tc;
- MpmCtx *mpm_hsmd_ctx_tc;
- MpmCtx *mpm_hscd_ctx_tc;
+ const MpmCtx *mpm_proto_other_ctx;
+
+ const MpmCtx *mpm_proto_tcp_ctx_ts;
+ const MpmCtx *mpm_proto_udp_ctx_ts;
+ const MpmCtx *mpm_stream_ctx_ts;
+ const MpmCtx *mpm_uri_ctx_ts;
+ const MpmCtx *mpm_hcbd_ctx_ts;
+ const MpmCtx *mpm_hhd_ctx_ts;
+ const MpmCtx *mpm_hrhd_ctx_ts;
+ const MpmCtx *mpm_hmd_ctx_ts;
+ const MpmCtx *mpm_hcd_ctx_ts;
+ const MpmCtx *mpm_hrud_ctx_ts;
+ const MpmCtx *mpm_huad_ctx_ts;
+ const MpmCtx *mpm_hhhd_ctx_ts;
+ const MpmCtx *mpm_hrhhd_ctx_ts;
+ const MpmCtx *mpm_dnsquery_ctx_ts;
+ const MpmCtx *mpm_smtp_filedata_ctx_ts;
+
+ const MpmCtx *mpm_proto_tcp_ctx_tc;
+ const MpmCtx *mpm_proto_udp_ctx_tc;
+ const MpmCtx *mpm_stream_ctx_tc;
+ const MpmCtx *mpm_hsbd_ctx_tc;
+ const MpmCtx *mpm_hhd_ctx_tc;
+ const MpmCtx *mpm_hrhd_ctx_tc;
+ const MpmCtx *mpm_hcd_ctx_tc;
+ const MpmCtx *mpm_hsmd_ctx_tc;
+ const MpmCtx *mpm_hscd_ctx_tc;
uint16_t mpm_uricontent_minlen; /**< len of shortest mpm pattern in sgh */
#include "util-bloomfilter.h"
#include "util-unittest.h"
-BloomFilter *BloomFilterInit(uint32_t size, uint8_t iter, uint32_t (*Hash)(void *, uint16_t, uint8_t, uint32_t)) {
+BloomFilter *BloomFilterInit(uint32_t size, uint8_t iter,
+ uint32_t (*Hash)(const void *, uint16_t, uint8_t, uint32_t)) {
BloomFilter *bf = NULL;
if (size == 0 || iter == 0)
*/
#ifdef UNITTESTS
-static uint32_t BloomFilterTestHash(void *data, uint16_t datalen, uint8_t iter, uint32_t hash_size)
+static uint32_t BloomFilterTestHash(const void *data, uint16_t datalen, uint8_t iter, uint32_t hash_size)
{
uint8_t *d = (uint8_t *)data;
uint32_t i;
/* Bloom Filter structure */
typedef struct BloomFilter_ {
uint8_t hash_iterations;
- uint32_t (*Hash)(void *, uint16_t, uint8_t, uint32_t);
+ uint32_t (*Hash)(const void *, uint16_t, uint8_t, uint32_t);
uint32_t bitarray_size;
uint8_t *bitarray;
} BloomFilter;
/* prototypes */
-BloomFilter *BloomFilterInit(uint32_t, uint8_t, uint32_t (*Hash)(void *, uint16_t, uint8_t, uint32_t));
+BloomFilter *BloomFilterInit(uint32_t, uint8_t, uint32_t (*Hash)(const void *, uint16_t, uint8_t, uint32_t));
void BloomFilterFree(BloomFilter *);
void BloomFilterPrint(BloomFilter *);
int BloomFilterAdd(BloomFilter *, void *, uint16_t);
/** ----- Inline functions ---- */
-static inline int BloomFilterTest(BloomFilter *, void *, uint16_t);
+static inline int BloomFilterTest(const BloomFilter *, const void *, uint16_t);
-static inline int BloomFilterTest(BloomFilter *bf, void *data, uint16_t datalen)
+static inline int BloomFilterTest(const BloomFilter *bf, const void *data, uint16_t datalen)
{
uint8_t iter = 0;
uint32_t hash = 0;
int SCACBSAddPatternCS(MpmCtx *, uint8_t *, uint16_t, uint16_t, uint16_t,
uint32_t, SigIntId, uint8_t);
int SCACBSPreparePatterns(MpmCtx *mpm_ctx);
-uint32_t SCACBSSearch(MpmCtx *mpm_ctx, MpmThreadCtx *mpm_thread_ctx,
- PatternMatcherQueue *pmq, uint8_t *buf, uint16_t buflen);
+uint32_t SCACBSSearch(const MpmCtx *mpm_ctx, MpmThreadCtx *mpm_thread_ctx,
+ PatternMatcherQueue *pmq, const uint8_t *buf, uint16_t buflen);
void SCACBSPrintInfo(MpmCtx *mpm_ctx);
void SCACBSPrintSearchStats(MpmThreadCtx *mpm_thread_ctx);
void SCACBSRegisterTests(void);
*
* \retval matches Match count.
*/
-uint32_t SCACBSSearch(MpmCtx *mpm_ctx, MpmThreadCtx *mpm_thread_ctx,
- PatternMatcherQueue *pmq, uint8_t *buf, uint16_t buflen)
+uint32_t SCACBSSearch(const MpmCtx *mpm_ctx, MpmThreadCtx *mpm_thread_ctx,
+ PatternMatcherQueue *pmq, const uint8_t *buf, uint16_t buflen)
{
- SCACBSCtx *ctx = (SCACBSCtx *)mpm_ctx->ctx;
+ const SCACBSCtx *ctx = (SCACBSCtx *)mpm_ctx->ctx;
int i = 0;
int matches = 0;
uint8_t buf_local;
#ifdef FUNC_NAME
/* This function handles (ctx->state_count < 32767) */
-uint32_t FUNC_NAME(SCACTileSearchCtx *ctx, MpmThreadCtx *mpm_thread_ctx,
- PatternMatcherQueue *pmq, uint8_t *buf, uint16_t buflen)
+uint32_t FUNC_NAME(const SCACTileSearchCtx *ctx, MpmThreadCtx *mpm_thread_ctx,
+ PatternMatcherQueue *pmq, const uint8_t *buf, uint16_t buflen)
{
int i = 0;
int matches = 0;
uint8_t mpm_bitarray[ctx->mpm_bitarray_size];
memset(mpm_bitarray, 0, ctx->mpm_bitarray_size);
- uint8_t* restrict xlate = ctx->translate_table;
+ const uint8_t* restrict xlate = ctx->translate_table;
STYPE *state_table = (STYPE*)ctx->state_table;
STYPE state = 0;
int c = xlate[buf[0]];
int SCACTileAddPatternCS(MpmCtx *, uint8_t *, uint16_t, uint16_t, uint16_t,
uint32_t, SigIntId, uint8_t);
int SCACTilePreparePatterns(MpmCtx *mpm_ctx);
-uint32_t SCACTileSearch(MpmCtx *mpm_ctx, MpmThreadCtx *mpm_thread_ctx,
- PatternMatcherQueue *pmq, uint8_t *buf,
+uint32_t SCACTileSearch(const MpmCtx *mpm_ctx, MpmThreadCtx *mpm_thread_ctx,
+ PatternMatcherQueue *pmq, const uint8_t *buf,
uint16_t buflen);
void SCACTilePrintInfo(MpmCtx *mpm_ctx);
void SCACTilePrintSearchStats(MpmThreadCtx *mpm_thread_ctx);
void SCACTileRegisterTests(void);
-uint32_t SCACTileSearchLarge(SCACTileSearchCtx *ctx, MpmThreadCtx *mpm_thread_ctx,
+uint32_t SCACTileSearchLarge(const SCACTileSearchCtx *ctx, MpmThreadCtx *mpm_thread_ctx,
PatternMatcherQueue *pmq,
- uint8_t *buf, uint16_t buflen);
-uint32_t SCACTileSearchSmall256(SCACTileSearchCtx *ctx, MpmThreadCtx *mpm_thread_ctx,
+ const uint8_t *buf, uint16_t buflen);
+uint32_t SCACTileSearchSmall256(const SCACTileSearchCtx *ctx, MpmThreadCtx *mpm_thread_ctx,
PatternMatcherQueue *pmq,
- uint8_t *buf, uint16_t buflen);
-uint32_t SCACTileSearchSmall128(SCACTileSearchCtx *ctx, MpmThreadCtx *mpm_thread_ctx,
+ const uint8_t *buf, uint16_t buflen);
+uint32_t SCACTileSearchSmall128(const SCACTileSearchCtx *ctx, MpmThreadCtx *mpm_thread_ctx,
PatternMatcherQueue *pmq,
- uint8_t *buf, uint16_t buflen);
-uint32_t SCACTileSearchSmall64(SCACTileSearchCtx *ctx, MpmThreadCtx *mpm_thread_ctx,
+ const uint8_t *buf, uint16_t buflen);
+uint32_t SCACTileSearchSmall64(const SCACTileSearchCtx *ctx, MpmThreadCtx *mpm_thread_ctx,
PatternMatcherQueue *pmq,
- uint8_t *buf, uint16_t buflen);
-uint32_t SCACTileSearchSmall32(SCACTileSearchCtx *ctx, MpmThreadCtx *mpm_thread_ctx,
+ const uint8_t *buf, uint16_t buflen);
+uint32_t SCACTileSearchSmall32(const SCACTileSearchCtx *ctx, MpmThreadCtx *mpm_thread_ctx,
PatternMatcherQueue *pmq,
- uint8_t *buf, uint16_t buflen);
-uint32_t SCACTileSearchSmall16(SCACTileSearchCtx *ctx, MpmThreadCtx *mpm_thread_ctx,
+ const uint8_t *buf, uint16_t buflen);
+uint32_t SCACTileSearchSmall16(const SCACTileSearchCtx *ctx, MpmThreadCtx *mpm_thread_ctx,
PatternMatcherQueue *pmq,
- uint8_t *buf, uint16_t buflen);
-uint32_t SCACTileSearchSmall8(SCACTileSearchCtx *ctx, MpmThreadCtx *mpm_thread_ctx,
+ const uint8_t *buf, uint16_t buflen);
+uint32_t SCACTileSearchSmall8(const SCACTileSearchCtx *ctx, MpmThreadCtx *mpm_thread_ctx,
PatternMatcherQueue *pmq,
- uint8_t *buf, uint16_t buflen);
+ const uint8_t *buf, uint16_t buflen);
-uint32_t SCACTileSearchTiny256(SCACTileSearchCtx *ctx, MpmThreadCtx *mpm_thread_ctx,
- PatternMatcherQueue *pmq,
- uint8_t *buf, uint16_t buflen);
-uint32_t SCACTileSearchTiny128(SCACTileSearchCtx *ctx, MpmThreadCtx *mpm_thread_ctx,
- PatternMatcherQueue *pmq,
- uint8_t *buf, uint16_t buflen);
-uint32_t SCACTileSearchTiny64(SCACTileSearchCtx *ctx, MpmThreadCtx *mpm_thread_ctx,
+uint32_t SCACTileSearchTiny256(const SCACTileSearchCtx *ctx, MpmThreadCtx *mpm_thread_ctx,
PatternMatcherQueue *pmq,
- uint8_t *buf, uint16_t buflen);
-uint32_t SCACTileSearchTiny32(SCACTileSearchCtx *ctx, MpmThreadCtx *mpm_thread_ctx,
+ const uint8_t *buf, uint16_t buflen);
+uint32_t SCACTileSearchTiny128(const SCACTileSearchCtx *ctx, MpmThreadCtx *mpm_thread_ctx,
PatternMatcherQueue *pmq,
- uint8_t *buf, uint16_t buflen);
-uint32_t SCACTileSearchTiny16(SCACTileSearchCtx *ctx, MpmThreadCtx *mpm_thread_ctx,
- PatternMatcherQueue *pmq,
- uint8_t *buf, uint16_t buflen);
-uint32_t SCACTileSearchTiny8(SCACTileSearchCtx *ctx, MpmThreadCtx *mpm_thread_ctx,
+ const uint8_t *buf, uint16_t buflen);
+uint32_t SCACTileSearchTiny64(const SCACTileSearchCtx *ctx, MpmThreadCtx *mpm_thread_ctx,
+ PatternMatcherQueue *pmq,
+ const uint8_t *buf, uint16_t buflen);
+uint32_t SCACTileSearchTiny32(const SCACTileSearchCtx *ctx, MpmThreadCtx *mpm_thread_ctx,
PatternMatcherQueue *pmq,
- uint8_t *buf, uint16_t buflen);
+ const uint8_t *buf, uint16_t buflen);
+uint32_t SCACTileSearchTiny16(const SCACTileSearchCtx *ctx, MpmThreadCtx *mpm_thread_ctx,
+ PatternMatcherQueue *pmq,
+ const uint8_t *buf, uint16_t buflen);
+uint32_t SCACTileSearchTiny8(const SCACTileSearchCtx *ctx, MpmThreadCtx *mpm_thread_ctx,
+ PatternMatcherQueue *pmq,
+ const uint8_t *buf, uint16_t buflen);
static void SCACTileDestroyInitCtx(MpmCtx *mpm_ctx);
#define EXTRA 4 // need 4 extra bytes to avoid OOB reads
#endif
-int CheckMatch(SCACTileSearchCtx *ctx, PatternMatcherQueue *pmq,
- uint8_t *buf, uint16_t buflen,
+int CheckMatch(const SCACTileSearchCtx *ctx, PatternMatcherQueue *pmq,
+ const uint8_t *buf, uint16_t buflen,
uint16_t state, int i, int matches,
uint8_t *mpm_bitarray)
{
SCACTilePatternList *pattern_list = ctx->pattern_list;
- uint8_t *buf_offset = buf + i + 1; // Lift out of loop
+ const uint8_t *buf_offset = buf + i + 1; // Lift out of loop
uint32_t no_of_entries = ctx->output_table[state].no_of_entries;
MpmPatternIndex *patterns = ctx->output_table[state].patterns;
uint8_t *pmq_bitarray = pmq->pattern_id_bitarray;
*
* \retval matches Match count.
*/
-uint32_t SCACTileSearch(MpmCtx *mpm_ctx, MpmThreadCtx *mpm_thread_ctx,
- PatternMatcherQueue *pmq, uint8_t *buf, uint16_t buflen)
+uint32_t SCACTileSearch(const MpmCtx *mpm_ctx, MpmThreadCtx *mpm_thread_ctx,
+ PatternMatcherQueue *pmq, const uint8_t *buf, uint16_t buflen)
{
- SCACTileSearchCtx *search_ctx = (SCACTileSearchCtx *)mpm_ctx->ctx;
+ const SCACTileSearchCtx *search_ctx = (SCACTileSearchCtx *)mpm_ctx->ctx;
if (buflen == 0)
return 0;
}
/* This function handles (ctx->state_count >= 32767) */
-uint32_t SCACTileSearchLarge(SCACTileSearchCtx *ctx, MpmThreadCtx *mpm_thread_ctx,
+uint32_t SCACTileSearchLarge(const SCACTileSearchCtx *ctx, MpmThreadCtx *mpm_thread_ctx,
PatternMatcherQueue *pmq,
- uint8_t *buf, uint16_t buflen)
+ const uint8_t *buf, uint16_t buflen)
{
int i = 0;
int matches = 0;
uint8_t mpm_bitarray[ctx->mpm_bitarray_size];
memset(mpm_bitarray, 0, ctx->mpm_bitarray_size);
- uint8_t* restrict xlate = ctx->translate_table;
+ const uint8_t* restrict xlate = ctx->translate_table;
register int state = 0;
int32_t (*state_table_u32)[256] = ctx->state_table;
for (i = 0; i < buflen; i++) {
* number of states could make the next state could be 16 bits or
* 32 bits.
*/
- uint32_t (*search)(struct SCACTileSearchCtx_ *ctx, struct MpmThreadCtx_ *,
- PatternMatcherQueue *, uint8_t *, uint16_t);
+ uint32_t (*search)(const struct SCACTileSearchCtx_ *ctx, struct MpmThreadCtx_ *,
+ PatternMatcherQueue *, const uint8_t *, uint16_t);
/* Function to set the next state based on size of next state
* (bytes_per_state).
* number of states could make the next state could be 16 bits or
* 32 bits.
*/
- uint32_t (*search)(struct SCACTileSearchCtx_ *ctx, struct MpmThreadCtx_ *,
- PatternMatcherQueue *, uint8_t *, uint16_t);
+ uint32_t (*search)(const struct SCACTileSearchCtx_ *ctx, struct MpmThreadCtx_ *,
+ PatternMatcherQueue *, const uint8_t *, uint16_t);
/* Convert input character to matching alphabet */
uint8_t translate_table[256];
int SCACAddPatternCS(MpmCtx *, uint8_t *, uint16_t, uint16_t, uint16_t,
uint32_t, SigIntId, uint8_t);
int SCACPreparePatterns(MpmCtx *mpm_ctx);
-uint32_t SCACSearch(MpmCtx *mpm_ctx, MpmThreadCtx *mpm_thread_ctx,
- PatternMatcherQueue *pmq, uint8_t *buf, uint16_t buflen);
+uint32_t SCACSearch(const MpmCtx *mpm_ctx, MpmThreadCtx *mpm_thread_ctx,
+ PatternMatcherQueue *pmq, const uint8_t *buf, uint16_t buflen);
void SCACPrintInfo(MpmCtx *mpm_ctx);
void SCACPrintSearchStats(MpmThreadCtx *mpm_thread_ctx);
void SCACRegisterTests(void);
*
* \retval matches Match count.
*/
-uint32_t SCACSearch(MpmCtx *mpm_ctx, MpmThreadCtx *mpm_thread_ctx,
- PatternMatcherQueue *pmq, uint8_t *buf, uint16_t buflen)
+uint32_t SCACSearch(const MpmCtx *mpm_ctx, MpmThreadCtx *mpm_thread_ctx,
+ PatternMatcherQueue *pmq, const uint8_t *buf, uint16_t buflen)
{
- SCACCtx *ctx = (SCACCtx *)mpm_ctx->ctx;
+ const SCACCtx *ctx = (SCACCtx *)mpm_ctx->ctx;
int i = 0;
int matches = 0;
#undef BLOCK_SIZE
}
-uint32_t SCACCudaPacketResultsProcessing(Packet *p, MpmCtx *mpm_ctx,
- PatternMatcherQueue *pmq)
+uint32_t SCACCudaPacketResultsProcessing(Packet *p, const MpmCtx *mpm_ctx,
+ PatternMatcherQueue *pmq)
{
uint32_t u = 0;
int MpmCudaBufferDeSetup(void);
void SCACCudaStartDispatcher(void);
void SCACCudaKillDispatcher(void);
-uint32_t SCACCudaPacketResultsProcessing(Packet *p, MpmCtx *mpm_ctx,
+uint32_t SCACCudaPacketResultsProcessing(Packet *p, const MpmCtx *mpm_ctx,
PatternMatcherQueue *pmq);
void DetermineCudaStateTableSize(DetectEngineCtx *de_ctx);
int SCHSAddPatternCS(MpmCtx *, uint8_t *, uint16_t, uint16_t, uint16_t,
uint32_t, SigIntId, uint8_t);
int SCHSPreparePatterns(MpmCtx *mpm_ctx);
-uint32_t SCHSSearch(MpmCtx *mpm_ctx, MpmThreadCtx *mpm_thread_ctx,
- PatternMatcherQueue *pmq, uint8_t *buf, uint16_t buflen);
+uint32_t SCHSSearch(const MpmCtx *mpm_ctx, MpmThreadCtx *mpm_thread_ctx,
+ PatternMatcherQueue *pmq, const uint8_t *buf, const uint16_t buflen);
void SCHSPrintInfo(MpmCtx *mpm_ctx);
void SCHSPrintSearchStats(MpmThreadCtx *mpm_thread_ctx);
void SCHSRegisterTests(void);
*
* \retval matches Match count.
*/
-uint32_t SCHSSearch(MpmCtx *mpm_ctx, MpmThreadCtx *mpm_thread_ctx,
- PatternMatcherQueue *pmq, uint8_t *buf, uint16_t buflen)
+uint32_t SCHSSearch(const MpmCtx *mpm_ctx, MpmThreadCtx *mpm_thread_ctx,
+ PatternMatcherQueue *pmq, const uint8_t *buf, const uint16_t buflen)
{
uint32_t ret = 0;
SCHSCtx *ctx = (SCHSCtx *)mpm_ctx->ctx;
int (*AddPattern)(struct MpmCtx_ *, uint8_t *, uint16_t, uint16_t, uint16_t, uint32_t, SigIntId, uint8_t);
int (*AddPatternNocase)(struct MpmCtx_ *, uint8_t *, uint16_t, uint16_t, uint16_t, uint32_t, SigIntId, uint8_t);
int (*Prepare)(struct MpmCtx_ *);
- uint32_t (*Search)(struct MpmCtx_ *, struct MpmThreadCtx_ *, PatternMatcherQueue *, uint8_t *, uint16_t);
+ uint32_t (*Search)(const struct MpmCtx_ *, struct MpmThreadCtx_ *, PatternMatcherQueue *, const uint8_t *, uint16_t);
void (*Cleanup)(struct MpmThreadCtx_ *);
void (*PrintCtx)(struct MpmCtx_ *);
void (*PrintThreadCtx)(struct MpmThreadCtx_ *);