suricata
util-mpm.h File Reference
#include "util-prefilter.h"
Include dependency graph for util-mpm.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  MpmThreadCtx_
 
struct  MpmPattern_
 
struct  MpmCtx_
 
struct  MpmCtxFactoryItem_
 
struct  MpmCtxFactoryContainer_
 
struct  MpmTableElmt_
 

Macros

#define MPM_INIT_HASH_SIZE   65536
 
#define MPMCTX_FLAGS_GLOBAL   BIT_U8(0)
 
#define MPMCTX_FLAGS_NODEPTH   BIT_U8(1)
 
#define MPM_CTX_FACTORY_UNIQUE_CONTEXT   -1
 
#define MPM_PATTERN_FLAG_NOCASE   0x01
 
#define MPM_PATTERN_FLAG_NEGATED   0x02
 
#define MPM_PATTERN_FLAG_DEPTH   0x04
 
#define MPM_PATTERN_FLAG_OFFSET   0x08
 
#define MPM_PATTERN_ONE_BYTE   0x10
 
#define MPM_PATTERN_CTX_OWNS_ID   0x20
 

Typedefs

typedef uint32_t MpmPatternIndex
 
typedef struct MpmThreadCtx_ MpmThreadCtx
 
typedef struct MpmPattern_ MpmPattern
 
typedef struct MpmCtx_ MpmCtx
 
typedef struct MpmCtxFactoryItem_ MpmCtxFactoryItem
 
typedef struct MpmCtxFactoryContainer_ MpmCtxFactoryContainer
 
typedef struct MpmTableElmt_ MpmTableElmt
 

Enumerations

enum  {
  MPM_NOTSET = 0, MPM_AC, MPM_AC_BS, MPM_AC_KS,
  MPM_HS, MPM_TABLE_SIZE
}
 

Functions

int32_t MpmFactoryRegisterMpmCtxProfile (struct DetectEngineCtx_ *, const char *)
 Register a new Mpm Context. More...
 
void MpmFactoryReClaimMpmCtx (const struct DetectEngineCtx_ *, MpmCtx *)
 
MpmCtxMpmFactoryGetMpmCtxForProfile (const struct DetectEngineCtx_ *, int32_t, int)
 
void MpmFactoryDeRegisterAllMpmCtxProfiles (struct DetectEngineCtx_ *)
 
int32_t MpmFactoryIsMpmCtxAvailable (const struct DetectEngineCtx_ *, const MpmCtx *)
 
int PmqSetup (PrefilterRuleStore *)
 Setup a pmq. More...
 
void PmqReset (PrefilterRuleStore *)
 Reset a Pmq for reusage. Meant to be called after a single search. More...
 
void PmqCleanup (PrefilterRuleStore *)
 Cleanup a Pmq. More...
 
void PmqFree (PrefilterRuleStore *)
 Cleanup and free a Pmq. More...
 
void MpmTableSetup (void)
 
void MpmRegisterTests (void)
 
void MpmInitCtx (MpmCtx *mpm_ctx, uint16_t matcher)
 
void MpmInitThreadCtx (MpmThreadCtx *mpm_thread_ctx, uint16_t)
 
int MpmAddPatternCS (struct MpmCtx_ *mpm_ctx, uint8_t *pat, uint16_t patlen, uint16_t offset, uint16_t depth, uint32_t pid, SigIntId sid, uint8_t flags)
 
int MpmAddPatternCI (struct MpmCtx_ *mpm_ctx, uint8_t *pat, uint16_t patlen, uint16_t offset, uint16_t depth, uint32_t pid, SigIntId sid, uint8_t flags)
 
void MpmFreePattern (MpmCtx *mpm_ctx, MpmPattern *p)
 
int MpmAddPattern (MpmCtx *mpm_ctx, uint8_t *pat, uint16_t patlen, uint16_t offset, uint16_t depth, uint32_t pid, SigIntId sid, uint8_t flags)
 

Variables

MpmTableElmt mpm_table [MPM_TABLE_SIZE]
 
int mpm_default_matcher
 

Detailed Description

Author
Victor Julien victo.nosp@m.r@in.nosp@m.linia.nosp@m.c.ne.nosp@m.t

Definition in file util-mpm.h.

Macro Definition Documentation

◆ MPM_CTX_FACTORY_UNIQUE_CONTEXT

#define MPM_CTX_FACTORY_UNIQUE_CONTEXT   -1

Definition at line 114 of file util-mpm.h.

◆ MPM_INIT_HASH_SIZE

#define MPM_INIT_HASH_SIZE   65536

Definition at line 30 of file util-mpm.h.

◆ MPM_PATTERN_CTX_OWNS_ID

#define MPM_PATTERN_CTX_OWNS_ID   0x20

the ctx uses it's own internal id instead of what is passed through the API

Definition at line 140 of file util-mpm.h.

◆ MPM_PATTERN_FLAG_DEPTH

#define MPM_PATTERN_FLAG_DEPTH   0x04

pattern has a depth setting

Definition at line 133 of file util-mpm.h.

◆ MPM_PATTERN_FLAG_NEGATED

#define MPM_PATTERN_FLAG_NEGATED   0x02

pattern is negated

Definition at line 131 of file util-mpm.h.

◆ MPM_PATTERN_FLAG_NOCASE

#define MPM_PATTERN_FLAG_NOCASE   0x01

pattern is case insensitive

Definition at line 129 of file util-mpm.h.

◆ MPM_PATTERN_FLAG_OFFSET

#define MPM_PATTERN_FLAG_OFFSET   0x08

pattern has an offset setting

Definition at line 135 of file util-mpm.h.

◆ MPM_PATTERN_ONE_BYTE

#define MPM_PATTERN_ONE_BYTE   0x10

one byte pattern (used in b2g)

Definition at line 137 of file util-mpm.h.

◆ MPMCTX_FLAGS_GLOBAL

#define MPMCTX_FLAGS_GLOBAL   BIT_U8(0)

Definition at line 86 of file util-mpm.h.

◆ MPMCTX_FLAGS_NODEPTH

#define MPMCTX_FLAGS_NODEPTH   BIT_U8(1)

Definition at line 87 of file util-mpm.h.

Typedef Documentation

◆ MpmCtx

typedef struct MpmCtx_ MpmCtx

◆ MpmCtxFactoryContainer

◆ MpmCtxFactoryItem

◆ MpmPattern

typedef struct MpmPattern_ MpmPattern

◆ MpmPatternIndex

typedef uint32_t MpmPatternIndex

Definition at line 44 of file util-mpm.h.

◆ MpmTableElmt

typedef struct MpmTableElmt_ MpmTableElmt

◆ MpmThreadCtx

typedef struct MpmThreadCtx_ MpmThreadCtx

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
MPM_NOTSET 
MPM_AC 
MPM_AC_BS 
MPM_AC_KS 
MPM_HS 
MPM_TABLE_SIZE 

Definition at line 31 of file util-mpm.h.

Function Documentation

◆ MpmAddPattern()

int MpmAddPattern ( MpmCtx mpm_ctx,
uint8_t *  pat,
uint16_t  patlen,
uint16_t  offset,
uint16_t  depth,
uint32_t  pid,
SigIntId  sid,
uint8_t  flags 
)

◆ MpmAddPatternCI()

int MpmAddPatternCI ( struct MpmCtx_ mpm_ctx,
uint8_t *  pat,
uint16_t  patlen,
uint16_t  offset,
uint16_t  depth,
uint32_t  pid,
SigIntId  sid,
uint8_t  flags 
)

Definition at line 304 of file util-mpm.c.

References MpmTableElmt_::AddPatternNocase, flags, mpm_table, MpmCtx_::mpm_type, and offset.

◆ MpmAddPatternCS()

int MpmAddPatternCS ( struct MpmCtx_ mpm_ctx,
uint8_t *  pat,
uint16_t  patlen,
uint16_t  offset,
uint16_t  depth,
uint32_t  pid,
SigIntId  sid,
uint8_t  flags 
)

Definition at line 295 of file util-mpm.c.

References MpmTableElmt_::AddPattern, flags, mpm_table, MpmCtx_::mpm_type, and offset.

◆ MpmFactoryDeRegisterAllMpmCtxProfiles()

◆ MpmFactoryGetMpmCtxForProfile()

MpmCtx* MpmFactoryGetMpmCtxForProfile ( const struct DetectEngineCtx_ ,
int32_t  ,
int   
)

◆ MpmFactoryIsMpmCtxAvailable()

int32_t MpmFactoryIsMpmCtxAvailable ( const struct DetectEngineCtx_ ,
const MpmCtx  
)

◆ MpmFactoryReClaimMpmCtx()

void MpmFactoryReClaimMpmCtx ( const struct DetectEngineCtx_ ,
MpmCtx  
)

◆ MpmFactoryRegisterMpmCtxProfile()

int32_t MpmFactoryRegisterMpmCtxProfile ( DetectEngineCtx de_ctx,
const char *  name 
)

Register a new Mpm Context.

Parameters
nameA new profile to be registered to store this MpmCtx.
Return values
idReturn the id created for the new MpmCtx profile.

Definition at line 58 of file util-mpm.c.

References de_ctx, FatalError, MpmCtx_::flags, MpmCtxFactoryItem_::id, MpmCtxFactoryContainer_::items, DetectEngineCtx_::mpm_ctx_factory_container, MpmCtxFactoryItem_::mpm_ctx_tc, MpmCtxFactoryItem_::mpm_ctx_ts, MPMCTX_FLAGS_GLOBAL, MpmCtxFactoryItem_::name, MpmCtxFactoryContainer_::no_of_items, SC_ERR_FATAL, SCFree, SCMalloc, SCRealloc, and unlikely.

◆ MpmFreePattern()

void MpmFreePattern ( MpmCtx mpm_ctx,
MpmPattern p 
)

Definition at line 403 of file util-mpm.c.

References MpmPattern_::ci, MpmPattern_::cs, MpmPattern_::len, MpmCtx_::memory_cnt, MpmCtx_::memory_size, MpmPattern_::original_pat, and SCFree.

Referenced by SCACBSDestroyCtx(), and SCACDestroyCtx().

Here is the caller graph for this function:

◆ MpmInitCtx()

void MpmInitCtx ( MpmCtx mpm_ctx,
uint16_t  matcher 
)

Definition at line 254 of file util-mpm.c.

References MpmTableElmt_::InitCtx, mpm_table, and MpmCtx_::mpm_type.

◆ MpmInitThreadCtx()

void MpmInitThreadCtx ( MpmThreadCtx mpm_thread_ctx,
uint16_t   
)

Definition at line 249 of file util-mpm.c.

References MpmTableElmt_::InitThreadCtx, and mpm_table.

Referenced by PatternMatchThreadPrepare().

Here is the caller graph for this function:

◆ MpmRegisterTests()

void MpmRegisterTests ( void  )

Definition at line 617 of file util-mpm.c.

References g_ut_modules, MPM_NOTSET, mpm_table, and MPM_TABLE_SIZE.

◆ MpmTableSetup()

void MpmTableSetup ( void  )

Definition at line 269 of file util-mpm.c.

References DEFAULT_MPM, mpm_default_matcher, mpm_table, MpmACBSRegister(), MpmACRegister(), MpmACTileRegister(), MpmHSRegister(), and SCLogInfo.

Referenced by ListAppLayerProtocols(), ListKeywords(), LLVMFuzzerTestOneInput(), PostConfLoadedSetup(), and RunUnittests().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ PmqCleanup()

void PmqCleanup ( PrefilterRuleStore pmq)

Cleanup a Pmq.

Parameters
pmqPattern matcher queue to be cleaned up.

Definition at line 113 of file util-prefilter.c.

References PrefilterRuleStore_::rule_id_array, and SCFree.

Referenced by PmqFree().

Here is the caller graph for this function:

◆ PmqFree()

void PmqFree ( PrefilterRuleStore pmq)

Cleanup and free a Pmq.

Parameters
pmqPattern matcher queue to be free'd.

Definition at line 126 of file util-prefilter.c.

References PmqCleanup().

Here is the call graph for this function:

◆ PmqReset()

void PmqReset ( PrefilterRuleStore pmq)

Reset a Pmq for reusage. Meant to be called after a single search.

Parameters
pmqPattern matcher to be reset.
Todo:
memset is expensive, but we need it as we merge pmq's. We might use a flag so we can clear pmq's the old way if we can.

Definition at line 101 of file util-prefilter.c.

References PrefilterRuleStore_::rule_id_array_cnt.

Referenced by PacketPatternCleanup().

Here is the caller graph for this function:

◆ PmqSetup()

int PmqSetup ( PrefilterRuleStore pmq)

Setup a pmq.

Parameters
pmqPattern matcher queue to be initialized
Return values
-1error
0ok

Definition at line 36 of file util-prefilter.c.

References PrefilterRuleStore_::rule_id_array, PrefilterRuleStore_::rule_id_array_cnt, PrefilterRuleStore_::rule_id_array_size, SCEnter, SCMalloc, SCReturnInt, and SigIntId.

Variable Documentation

◆ mpm_default_matcher

int mpm_default_matcher

Definition at line 49 of file util-mpm.c.

Referenced by MpmTableSetup(), and PatternMatchDefaultMatcher().

◆ mpm_table