static int PrefilterSetupAppProto(DetectEngineCtx *de_ctx, SigGroupHead *sgh)
{
return PrefilterSetupPacketHeader(de_ctx, sgh, DETECT_AL_APP_LAYER_PROTOCOL,
- PrefilterPacketAppProtoSet,
- PrefilterPacketAppProtoCompare,
- PrefilterPacketAppProtoMatch);
+ SIG_MASK_REQUIRE_FLOW, PrefilterPacketAppProtoSet, PrefilterPacketAppProtoCompare,
+ PrefilterPacketAppProtoMatch);
}
static bool PrefilterAppProtoIsPrefilterable(const Signature *s)
static int PrefilterSetupDsize(DetectEngineCtx *de_ctx, SigGroupHead *sgh)
{
- return PrefilterSetupPacketHeader(de_ctx, sgh, DETECT_DSIZE, PrefilterPacketU16Set,
- PrefilterPacketU16Compare, PrefilterPacketDsizeMatch);
+ return PrefilterSetupPacketHeader(de_ctx, sgh, DETECT_DSIZE, SIG_MASK_REQUIRE_REAL_PKT,
+ PrefilterPacketU16Set, PrefilterPacketU16Compare, PrefilterPacketDsizeMatch);
}
static bool PrefilterDsizeIsPrefilterable(const Signature *s)
/** \internal
*/
-static int
-SetupEngineForPacketHeader(DetectEngineCtx *de_ctx, SigGroupHead *sgh,
- int sm_type, PrefilterPacketHeaderHashCtx *hctx,
+static int SetupEngineForPacketHeader(DetectEngineCtx *de_ctx, SigGroupHead *sgh, int sm_type,
+ SignatureMask mask, PrefilterPacketHeaderHashCtx *hctx,
bool (*Compare)(PrefilterPacketHeaderValue v, void *),
void (*Match)(DetectEngineThreadCtx *det_ctx, Packet *p, const void *pectx))
{
SCLogDebug("%s: ctx %p extra type %u extra value %u, sig cnt %u",
sigmatch_table[sm_type].name, ctx, ctx->type, ctx->value,
ctx->sigs_cnt);
- PrefilterAppendEngine(de_ctx, sgh, Match, ctx,
- PrefilterPacketHeaderFree, sigmatch_table[sm_type].name);
+ PrefilterAppendEngine(
+ de_ctx, sgh, Match, mask, ctx, PrefilterPacketHeaderFree, sigmatch_table[sm_type].name);
return 0;
}
* \todo improve error handling
* \todo deduplicate sigs arrays
*/
-static int
-SetupEngineForPacketHeaderPrefilterPacketU8HashCtx(DetectEngineCtx *de_ctx,
- SigGroupHead *sgh, int sm_type, uint32_t *counts,
+static int SetupEngineForPacketHeaderPrefilterPacketU8HashCtx(DetectEngineCtx *de_ctx,
+ SigGroupHead *sgh, int sm_type, SignatureMask mask, uint32_t *counts,
void (*Set)(PrefilterPacketHeaderValue *v, void *),
bool (*Compare)(PrefilterPacketHeaderValue v, void *),
void (*Match)(DetectEngineThreadCtx *det_ctx, Packet *p, const void *pectx))
}
if (cnt) {
- PrefilterAppendEngine(de_ctx, sgh, Match, ctx,
- PrefilterPacketU8HashCtxFree,
+ PrefilterAppendEngine(de_ctx, sgh, Match, mask, ctx, PrefilterPacketU8HashCtxFree,
sigmatch_table[sm_type].name);
} else {
PrefilterPacketU8HashCtxFree(ctx);
/** \internal
* \brief setup a engine for each unique value
*/
-static void SetupSingle(DetectEngineCtx *de_ctx, HashListTable *hash_table,
- SigGroupHead *sgh, int sm_type,
- bool (*Compare)(PrefilterPacketHeaderValue v, void *),
- void (*Match)(DetectEngineThreadCtx *det_ctx,
- Packet *p, const void *pectx))
+static void SetupSingle(DetectEngineCtx *de_ctx, HashListTable *hash_table, SigGroupHead *sgh,
+ int sm_type, SignatureMask mask, bool (*Compare)(PrefilterPacketHeaderValue v, void *),
+ void (*Match)(DetectEngineThreadCtx *det_ctx, Packet *p, const void *pectx))
{
HashListTableBucket *hb = HashListTableGetListHead(hash_table);
for ( ; hb != NULL; hb = HashListTableGetListNext(hb)) {
PrefilterPacketHeaderHashCtx *ctx = HashListTableGetListData(hb);
- SetupEngineForPacketHeader(de_ctx, sgh, sm_type,
- ctx, Compare, Match);
+ SetupEngineForPacketHeader(de_ctx, sgh, sm_type, mask, ctx, Compare, Match);
}
}
/** \internal
* \brief setup a single engine with a hash map for u8 values
*/
-static void SetupU8Hash(DetectEngineCtx *de_ctx, HashListTable *hash_table,
- SigGroupHead *sgh, int sm_type,
- void (*Set)(PrefilterPacketHeaderValue *v, void *),
+static void SetupU8Hash(DetectEngineCtx *de_ctx, HashListTable *hash_table, SigGroupHead *sgh,
+ int sm_type, SignatureMask mask, void (*Set)(PrefilterPacketHeaderValue *v, void *),
bool (*Compare)(PrefilterPacketHeaderValue v, void *),
- void (*Match)(DetectEngineThreadCtx *det_ctx,
- Packet *p, const void *pectx))
+ void (*Match)(DetectEngineThreadCtx *det_ctx, Packet *p, const void *pectx))
{
uint32_t counts[256];
memset(&counts, 0, sizeof(counts));
}
}
- SetupEngineForPacketHeaderPrefilterPacketU8HashCtx(de_ctx, sgh, sm_type,
- counts, Set, Compare, Match);
+ SetupEngineForPacketHeaderPrefilterPacketU8HashCtx(
+ de_ctx, sgh, sm_type, mask, counts, Set, Compare, Match);
}
-static int PrefilterSetupPacketHeaderCommon(DetectEngineCtx *de_ctx,
- SigGroupHead *sgh, int sm_type,
- void (*Set)(PrefilterPacketHeaderValue *v, void *),
+static int PrefilterSetupPacketHeaderCommon(DetectEngineCtx *de_ctx, SigGroupHead *sgh, int sm_type,
+ SignatureMask mask, void (*Set)(PrefilterPacketHeaderValue *v, void *),
bool (*Compare)(PrefilterPacketHeaderValue v, void *),
- void (*Match)(DetectEngineThreadCtx *det_ctx,
- Packet *p, const void *pectx),
- bool u8hash)
+ void (*Match)(DetectEngineThreadCtx *det_ctx, Packet *p, const void *pectx), bool u8hash)
{
Signature *s = NULL;
uint32_t sig = 0;
}
if (!u8hash) {
- SetupSingle(de_ctx, hash_table, sgh, sm_type, Compare, Match);
+ SetupSingle(de_ctx, hash_table, sgh, sm_type, mask, Compare, Match);
} else {
- SetupU8Hash(de_ctx, hash_table, sgh, sm_type, Set, Compare, Match);
+ SetupU8Hash(de_ctx, hash_table, sgh, sm_type, mask, Set, Compare, Match);
}
HashListTableFree(hash_table);
return -1;
}
-int PrefilterSetupPacketHeaderU8Hash(DetectEngineCtx *de_ctx,
- SigGroupHead *sgh, int sm_type,
- void (*Set)(PrefilterPacketHeaderValue *v, void *),
+int PrefilterSetupPacketHeaderU8Hash(DetectEngineCtx *de_ctx, SigGroupHead *sgh, int sm_type,
+ SignatureMask mask, void (*Set)(PrefilterPacketHeaderValue *v, void *),
bool (*Compare)(PrefilterPacketHeaderValue v, void *),
- void (*Match)(DetectEngineThreadCtx *det_ctx,
- Packet *p, const void *pectx))
+ void (*Match)(DetectEngineThreadCtx *det_ctx, Packet *p, const void *pectx))
{
- return PrefilterSetupPacketHeaderCommon(de_ctx, sgh, sm_type, Set, Compare, Match, true);
+ return PrefilterSetupPacketHeaderCommon(de_ctx, sgh, sm_type, mask, Set, Compare, Match, true);
}
-int PrefilterSetupPacketHeader(DetectEngineCtx *de_ctx,
- SigGroupHead *sgh, int sm_type,
- void (*Set)(PrefilterPacketHeaderValue *v, void *),
+int PrefilterSetupPacketHeader(DetectEngineCtx *de_ctx, SigGroupHead *sgh, int sm_type,
+ SignatureMask mask, void (*Set)(PrefilterPacketHeaderValue *v, void *),
bool (*Compare)(PrefilterPacketHeaderValue v, void *),
- void (*Match)(DetectEngineThreadCtx *det_ctx,
- Packet *p, const void *pectx))
+ void (*Match)(DetectEngineThreadCtx *det_ctx, Packet *p, const void *pectx))
{
- return PrefilterSetupPacketHeaderCommon(de_ctx, sgh, sm_type, Set, Compare, Match, false);
+ return PrefilterSetupPacketHeaderCommon(de_ctx, sgh, sm_type, mask, Set, Compare, Match, false);
}
#define PREFILTER_U8HASH_MODE_GT DetectUintModeGt
#define PREFILTER_U8HASH_MODE_RA DetectUintModeRange
-int PrefilterSetupPacketHeader(DetectEngineCtx *de_ctx,
- SigGroupHead *sgh, int sm_type,
- void (*Set)(PrefilterPacketHeaderValue *v, void *),
+int PrefilterSetupPacketHeader(DetectEngineCtx *de_ctx, SigGroupHead *sgh, int sm_type,
+ SignatureMask mask, void (*Set)(PrefilterPacketHeaderValue *v, void *),
bool (*Compare)(PrefilterPacketHeaderValue v, void *),
- void (*Match)(DetectEngineThreadCtx *det_ctx,
- Packet *p, const void *pectx));
+ void (*Match)(DetectEngineThreadCtx *det_ctx, Packet *p, const void *pectx));
-int PrefilterSetupPacketHeaderU8Hash(DetectEngineCtx *de_ctx,
- SigGroupHead *sgh, int sm_type,
- void (*Set)(PrefilterPacketHeaderValue *v, void *),
+int PrefilterSetupPacketHeaderU8Hash(DetectEngineCtx *de_ctx, SigGroupHead *sgh, int sm_type,
+ SignatureMask mask, void (*Set)(PrefilterPacketHeaderValue *v, void *),
bool (*Compare)(PrefilterPacketHeaderValue v, void *),
- void (*Match)(DetectEngineThreadCtx *det_ctx,
- Packet *p, const void *pectx));
+ void (*Match)(DetectEngineThreadCtx *det_ctx, Packet *p, const void *pectx));
static inline bool
PrefilterPacketHeaderExtraMatch(const PrefilterPacketHeaderCtx *ctx,
}
}
-void Prefilter(DetectEngineThreadCtx *det_ctx, const SigGroupHead *sgh,
- Packet *p, const uint8_t flags)
+void Prefilter(DetectEngineThreadCtx *det_ctx, const SigGroupHead *sgh, Packet *p,
+ const uint8_t flags, const SignatureMask mask)
{
SCEnter();
#if 0
/* run packet engines */
PrefilterEngine *engine = sgh->pkt_engines;
do {
- PREFILTER_PROFILING_START(det_ctx);
- engine->cb.Prefilter(det_ctx, p, engine->pectx);
- PREFILTER_PROFILING_END(det_ctx, engine->gid);
+ if ((engine->ctx.pkt_mask & mask) == engine->ctx.pkt_mask) {
+ PREFILTER_PROFILING_START(det_ctx);
+ engine->cb.Prefilter(det_ctx, p, engine->pectx);
+ PREFILTER_PROFILING_END(det_ctx, engine->gid);
+ }
if (engine->is_last)
break;
}
int PrefilterAppendEngine(DetectEngineCtx *de_ctx, SigGroupHead *sgh, PrefilterPktFn PrefilterFunc,
- void *pectx, void (*FreeFunc)(void *pectx), const char *name)
+ SignatureMask mask, void *pectx, void (*FreeFunc)(void *pectx), const char *name)
{
if (sgh == NULL || PrefilterFunc == NULL || pectx == NULL)
return -1;
e->Prefilter = PrefilterFunc;
e->pectx = pectx;
e->Free = FreeFunc;
+ e->pkt_mask = mask;
if (sgh->init->pkt_engines == NULL) {
sgh->init->pkt_engines = e;
for (el = sgh->init->pkt_engines ; el != NULL; el = el->next) {
e->local_id = el->id;
e->cb.Prefilter = el->Prefilter;
+ e->ctx.pkt_mask = el->pkt_mask;
e->pectx = el->pectx;
el->pectx = NULL; // e now owns the ctx
e->gid = el->gid;
for (el = sgh->init->payload_engines ; el != NULL; el = el->next) {
e->local_id = el->id;
e->cb.Prefilter = el->Prefilter;
+ e->ctx.pkt_mask = el->pkt_mask;
e->pectx = el->pectx;
el->pectx = NULL; // e now owns the ctx
e->gid = el->gid;
pectx->mpm_ctx = mpm_ctx;
pectx->transforms = &mpm_reg->transforms;
- int r = PrefilterAppendEngine(de_ctx, sgh, PrefilterMpmPkt,
- pectx, PrefilterMpmPktFree, mpm_reg->pname);
+ int r = PrefilterAppendEngine(
+ de_ctx, sgh, PrefilterMpmPkt, 0, pectx, PrefilterMpmPktFree, mpm_reg->pname);
if (r != 0) {
SCFree(pectx);
}
uint32_t id;
} PrefilterStore;
-void Prefilter(DetectEngineThreadCtx *, const SigGroupHead *, Packet *p,
- const uint8_t flags);
+void Prefilter(DetectEngineThreadCtx *, const SigGroupHead *, Packet *p, const uint8_t flags,
+ const SignatureMask mask);
int PrefilterAppendEngine(DetectEngineCtx *de_ctx, SigGroupHead *sgh, PrefilterPktFn PrefilterFunc,
- void *pectx, void (*FreeFunc)(void *pectx), const char *name);
+ SignatureMask mask, void *pectx, void (*FreeFunc)(void *pectx), const char *name);
int PrefilterAppendPayloadEngine(DetectEngineCtx *de_ctx, SigGroupHead *sgh,
PrefilterPktFn PrefilterFunc, void *pectx, void (*FreeFunc)(void *pectx), const char *name);
int PrefilterAppendTxEngine(DetectEngineCtx *de_ctx, SigGroupHead *sgh,
static int PrefilterSetupFlowAge(DetectEngineCtx *de_ctx, SigGroupHead *sgh)
{
- return PrefilterSetupPacketHeader(de_ctx, sgh, DETECT_FLOW_AGE, PrefilterPacketU32Set,
- PrefilterPacketU32Compare, PrefilterPacketFlowAgeMatch);
+ return PrefilterSetupPacketHeader(de_ctx, sgh, DETECT_FLOW_AGE, SIG_MASK_REQUIRE_FLOW,
+ PrefilterPacketU32Set, PrefilterPacketU32Compare, PrefilterPacketFlowAgeMatch);
}
static bool PrefilterFlowAgeIsPrefilterable(const Signature *s)
static int PrefilterSetupFlowPktsToClient(DetectEngineCtx *de_ctx, SigGroupHead *sgh)
{
return PrefilterSetupPacketHeader(de_ctx, sgh, DETECT_FLOW_PKTS_TO_CLIENT,
- PrefilterPacketU32Set, PrefilterPacketU32Compare, PrefilterPacketFlowPktsToClientMatch);
+ SIG_MASK_REQUIRE_FLOW, PrefilterPacketU32Set, PrefilterPacketU32Compare,
+ PrefilterPacketFlowPktsToClientMatch);
}
static bool PrefilterFlowPktsToClientIsPrefilterable(const Signature *s)
static int PrefilterSetupFlowPktsToServer(DetectEngineCtx *de_ctx, SigGroupHead *sgh)
{
return PrefilterSetupPacketHeader(de_ctx, sgh, DETECT_FLOW_PKTS_TO_SERVER,
- PrefilterPacketU32Set, PrefilterPacketU32Compare, PrefilterPacketFlowPktsToServerMatch);
+ SIG_MASK_REQUIRE_FLOW, PrefilterPacketU32Set, PrefilterPacketU32Compare,
+ PrefilterPacketFlowPktsToServerMatch);
}
static bool PrefilterFlowPktsToServerIsPrefilterable(const Signature *s)
static int PrefilterSetupFlow(DetectEngineCtx *de_ctx, SigGroupHead *sgh)
{
- return PrefilterSetupPacketHeader(de_ctx, sgh, DETECT_FLOW,
- PrefilterPacketFlowSet,
- PrefilterPacketFlowCompare,
- PrefilterPacketFlowMatch);
+ return PrefilterSetupPacketHeader(de_ctx, sgh, DETECT_FLOW, 0, PrefilterPacketFlowSet,
+ PrefilterPacketFlowCompare, PrefilterPacketFlowMatch);
}
static bool PrefilterFlowIsPrefilterable(const Signature *s)
static int PrefilterSetupFragBits(DetectEngineCtx *de_ctx, SigGroupHead *sgh)
{
- return PrefilterSetupPacketHeader(de_ctx, sgh, DETECT_FRAGBITS,
- PrefilterPacketFragBitsSet,
- PrefilterPacketFragBitsCompare,
- PrefilterPacketFragBitsMatch);
+ return PrefilterSetupPacketHeader(de_ctx, sgh, DETECT_FRAGBITS, SIG_MASK_REQUIRE_REAL_PKT,
+ PrefilterPacketFragBitsSet, PrefilterPacketFragBitsCompare,
+ PrefilterPacketFragBitsMatch);
}
static bool PrefilterFragBitsIsPrefilterable(const Signature *s)
static int PrefilterSetupFragOffset(DetectEngineCtx *de_ctx, SigGroupHead *sgh)
{
- return PrefilterSetupPacketHeader(de_ctx, sgh, DETECT_FRAGOFFSET,
- PrefilterPacketFragOffsetSet,
- PrefilterPacketFragOffsetCompare,
- PrefilterPacketFragOffsetMatch);
+ return PrefilterSetupPacketHeader(de_ctx, sgh, DETECT_FRAGOFFSET, SIG_MASK_REQUIRE_REAL_PKT,
+ PrefilterPacketFragOffsetSet, PrefilterPacketFragOffsetCompare,
+ PrefilterPacketFragOffsetMatch);
}
static bool PrefilterFragOffsetIsPrefilterable(const Signature *s)
static int PrefilterSetupIcmpId(DetectEngineCtx *de_ctx, SigGroupHead *sgh)
{
- return PrefilterSetupPacketHeader(de_ctx, sgh, DETECT_ICMP_ID,
- PrefilterPacketIcmpIdSet,
- PrefilterPacketIcmpIdCompare,
- PrefilterPacketIcmpIdMatch);
+ return PrefilterSetupPacketHeader(de_ctx, sgh, DETECT_ICMP_ID, SIG_MASK_REQUIRE_REAL_PKT,
+ PrefilterPacketIcmpIdSet, PrefilterPacketIcmpIdCompare, PrefilterPacketIcmpIdMatch);
}
static bool PrefilterIcmpIdIsPrefilterable(const Signature *s)
static int PrefilterSetupIcmpSeq(DetectEngineCtx *de_ctx, SigGroupHead *sgh)
{
- return PrefilterSetupPacketHeader(de_ctx, sgh, DETECT_ICMP_SEQ,
- PrefilterPacketIcmpSeqSet,
- PrefilterPacketIcmpSeqCompare,
- PrefilterPacketIcmpSeqMatch);
+ return PrefilterSetupPacketHeader(de_ctx, sgh, DETECT_ICMP_SEQ, SIG_MASK_REQUIRE_REAL_PKT,
+ PrefilterPacketIcmpSeqSet, PrefilterPacketIcmpSeqCompare, PrefilterPacketIcmpSeqMatch);
}
static bool PrefilterIcmpSeqIsPrefilterable(const Signature *s)
static int PrefilterSetupIcmpv6mtu(DetectEngineCtx *de_ctx, SigGroupHead *sgh)
{
- return PrefilterSetupPacketHeader(de_ctx, sgh, DETECT_ICMPV6MTU,
- PrefilterPacketU32Set,
- PrefilterPacketU32Compare,
- PrefilterPacketIcmpv6mtuMatch);
+ return PrefilterSetupPacketHeader(de_ctx, sgh, DETECT_ICMPV6MTU, SIG_MASK_REQUIRE_REAL_PKT,
+ PrefilterPacketU32Set, PrefilterPacketU32Compare, PrefilterPacketIcmpv6mtuMatch);
}
static bool PrefilterIcmpv6mtuIsPrefilterable(const Signature *s)
static int PrefilterSetupICode(DetectEngineCtx *de_ctx, SigGroupHead *sgh)
{
- return PrefilterSetupPacketHeaderU8Hash(de_ctx, sgh, DETECT_ICODE, PrefilterPacketU8Set,
- PrefilterPacketU8Compare, PrefilterPacketICodeMatch);
+ return PrefilterSetupPacketHeaderU8Hash(de_ctx, sgh, DETECT_ICODE, SIG_MASK_REQUIRE_REAL_PKT,
+ PrefilterPacketU8Set, PrefilterPacketU8Compare, PrefilterPacketICodeMatch);
}
static bool PrefilterICodeIsPrefilterable(const Signature *s)
static int PrefilterSetupId(DetectEngineCtx *de_ctx, SigGroupHead *sgh)
{
- return PrefilterSetupPacketHeader(de_ctx, sgh, DETECT_ID,
- PrefilterPacketIdSet,
- PrefilterPacketIdCompare,
- PrefilterPacketIdMatch);
+ return PrefilterSetupPacketHeader(de_ctx, sgh, DETECT_ID, SIG_MASK_REQUIRE_REAL_PKT,
+ PrefilterPacketIdSet, PrefilterPacketIdCompare, PrefilterPacketIdMatch);
}
static bool PrefilterIdIsPrefilterable(const Signature *s)
static int PrefilterSetupIType(DetectEngineCtx *de_ctx, SigGroupHead *sgh)
{
- return PrefilterSetupPacketHeaderU8Hash(de_ctx, sgh, DETECT_ITYPE, PrefilterPacketU8Set,
- PrefilterPacketU8Compare, PrefilterPacketITypeMatch);
+ return PrefilterSetupPacketHeaderU8Hash(de_ctx, sgh, DETECT_ITYPE, SIG_MASK_REQUIRE_REAL_PKT,
+ PrefilterPacketU8Set, PrefilterPacketU8Compare, PrefilterPacketITypeMatch);
}
static bool PrefilterITypeIsPrefilterable(const Signature *s)
static int PrefilterSetupStreamSize(DetectEngineCtx *de_ctx, SigGroupHead *sgh)
{
- return PrefilterSetupPacketHeader(de_ctx, sgh, DETECT_STREAM_SIZE, PrefilterPacketStreamSizeSet,
+ return PrefilterSetupPacketHeader(de_ctx, sgh, DETECT_STREAM_SIZE,
+ SIG_MASK_REQUIRE_FLOW | SIG_MASK_REQUIRE_REAL_PKT, PrefilterPacketStreamSizeSet,
PrefilterPacketStreamSizeCompare, PrefilterPacketStreamsizeMatch);
}
static int PrefilterSetupTcpAck(DetectEngineCtx *de_ctx, SigGroupHead *sgh)
{
- return PrefilterSetupPacketHeader(de_ctx, sgh, DETECT_ACK,
- PrefilterPacketAckSet,
- PrefilterPacketAckCompare,
- PrefilterPacketAckMatch);
+ return PrefilterSetupPacketHeader(de_ctx, sgh, DETECT_ACK, SIG_MASK_REQUIRE_REAL_PKT,
+ PrefilterPacketAckSet, PrefilterPacketAckCompare, PrefilterPacketAckMatch);
}
static bool PrefilterTcpAckIsPrefilterable(const Signature *s)
static int PrefilterSetupTcpFlags(DetectEngineCtx *de_ctx, SigGroupHead *sgh)
{
- return PrefilterSetupPacketHeader(de_ctx, sgh, DETECT_FLAGS,
- PrefilterPacketFlagsSet,
- PrefilterPacketFlagsCompare,
- PrefilterPacketFlagsMatch);
-
+ return PrefilterSetupPacketHeader(de_ctx, sgh, DETECT_FLAGS, SIG_MASK_REQUIRE_REAL_PKT,
+ PrefilterPacketFlagsSet, PrefilterPacketFlagsCompare, PrefilterPacketFlagsMatch);
}
static bool PrefilterTcpFlagsIsPrefilterable(const Signature *s)
static int PrefilterSetupTcpSeq(DetectEngineCtx *de_ctx, SigGroupHead *sgh)
{
- return PrefilterSetupPacketHeader(de_ctx, sgh, DETECT_SEQ,
- PrefilterPacketSeqSet,
- PrefilterPacketSeqCompare,
- PrefilterPacketSeqMatch);
+ return PrefilterSetupPacketHeader(de_ctx, sgh, DETECT_SEQ, SIG_MASK_REQUIRE_REAL_PKT,
+ PrefilterPacketSeqSet, PrefilterPacketSeqCompare, PrefilterPacketSeqMatch);
}
static bool PrefilterTcpSeqIsPrefilterable(const Signature *s)
static int PrefilterSetupTcpmss(DetectEngineCtx *de_ctx, SigGroupHead *sgh)
{
- return PrefilterSetupPacketHeader(de_ctx, sgh, DETECT_TCPMSS, PrefilterPacketU16Set,
- PrefilterPacketU16Compare, PrefilterPacketTcpmssMatch);
+ return PrefilterSetupPacketHeader(de_ctx, sgh, DETECT_TCPMSS, SIG_MASK_REQUIRE_REAL_PKT,
+ PrefilterPacketU16Set, PrefilterPacketU16Compare, PrefilterPacketTcpmssMatch);
}
static bool PrefilterTcpmssIsPrefilterable(const Signature *s)
static int PrefilterSetupTemplate2(DetectEngineCtx *de_ctx, SigGroupHead *sgh)
{
- return PrefilterSetupPacketHeader(de_ctx, sgh, DETECT_TEMPLATE2, PrefilterPacketU8Set,
- PrefilterPacketU8Compare, PrefilterPacketTemplate2Match);
+ return PrefilterSetupPacketHeader(de_ctx, sgh, DETECT_TEMPLATE2, SIG_MASK_REQUIRE_REAL_PKT,
+ PrefilterPacketU8Set, PrefilterPacketU8Compare, PrefilterPacketTemplate2Match);
}
static bool PrefilterTemplate2IsPrefilterable(const Signature *s)
static int PrefilterSetupTtl(DetectEngineCtx *de_ctx, SigGroupHead *sgh)
{
- return PrefilterSetupPacketHeader(de_ctx, sgh, DETECT_TTL, PrefilterPacketU8Set,
- PrefilterPacketU8Compare, PrefilterPacketTtlMatch);
+ return PrefilterSetupPacketHeader(de_ctx, sgh, DETECT_TTL, SIG_MASK_REQUIRE_REAL_PKT,
+ PrefilterPacketU8Set, PrefilterPacketU8Compare, PrefilterPacketTtlMatch);
}
static bool PrefilterTtlIsPrefilterable(const Signature *s)
PACKET_PROFILING_DETECT_END(p, PROF_DETECT_NONMPMLIST);
/* run the prefilter engines */
- Prefilter(det_ctx, scratch->sgh, p, scratch->flow_flags);
+ Prefilter(det_ctx, scratch->sgh, p, scratch->flow_flags, scratch->pkt_mask);
/* create match list if we have non-pf and/or pf */
if (det_ctx->non_pf_store_cnt || det_ctx->pmq.rule_id_array_cnt) {
#ifdef PROFILING
uint8_t frame_type;
+ SignatureMask pkt_mask; /**< mask for pkt engines */
+
/** Context for matching. Might be MpmCtx for MPM engines, other ctx'
* for other engines. */
void *pectx;
AppProto alproto;
union {
+ SignatureMask pkt_mask; /**< mask for pkt engines */
/** Minimal Tx progress we need before running the engine. Only used
* with Tx Engine */
uint8_t tx_min_progress;