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 *, const int)
 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 142 of file util-mpm.h.

◆ MPM_PATTERN_FLAG_DEPTH

#define MPM_PATTERN_FLAG_DEPTH   0x04

pattern has a depth setting

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

◆ MPM_PATTERN_FLAG_NEGATED

#define MPM_PATTERN_FLAG_NEGATED   0x02

pattern is negated

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

◆ MPM_PATTERN_FLAG_NOCASE

#define MPM_PATTERN_FLAG_NOCASE   0x01

pattern is case insensitive

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

◆ MPM_PATTERN_FLAG_OFFSET

#define MPM_PATTERN_FLAG_OFFSET   0x08

pattern has an offset setting

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

◆ MPM_PATTERN_ONE_BYTE

#define MPM_PATTERN_ONE_BYTE   0x10

one byte pattern (used in b2g)

Definition at line 139 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 311 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 302 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,
const int  sm_list 
)

Register a new Mpm Context.

Parameters
nameA new profile to be registered to store this MpmCtx.
sm_listsm_list for this name (might be variable with xforms)
Return values
idReturn the id created for the new MpmCtx profile.

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

References de_ctx, ENGINE_SGH_MPM_FACTORY_CONTEXT_START_ID_RANGE, FatalError, MpmCtx_::flags, MpmCtxFactoryItem_::id, MpmCtxFactoryContainer_::items, MpmCtxFactoryContainer_::max_id, 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, MpmCtxFactoryItem_::sm_list, and unlikely.

Referenced by DetectAppLayerMpmRegisterByParentId().

Here is the caller graph for this function:

◆ MpmFreePattern()

void MpmFreePattern ( MpmCtx mpm_ctx,
MpmPattern p 
)

Definition at line 410 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 261 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 256 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 624 of file util-mpm.c.

References g_ut_modules, MPM_NOTSET, mpm_table, and MPM_TABLE_SIZE.

◆ MpmTableSetup()

void MpmTableSetup ( void  )

Definition at line 276 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 112 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 125 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 PMQ_RESET.

◆ 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