suricata
tm-modules.h
Go to the documentation of this file.
1 /* Copyright (C) 2007-2024 Open Information Security Foundation
2  *
3  * You can copy, redistribute or modify this Program under the terms of
4  * the GNU General Public License version 2 as published by the Free
5  * Software Foundation.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * version 2 along with this program; if not, write to the Free Software
14  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
15  * 02110-1301, USA.
16  */
17 
18 /**
19  * \file
20  *
21  * \author Victor Julien <victor@inliniac.net>
22  */
23 
24 #ifndef SURICATA_TM_MODULES_H
25 #define SURICATA_TM_MODULES_H
26 
27 #include "tm-threads-common.h"
28 #include "threadvars.h"
29 #include "decode.h"
30 
31 /* thread flags */
32 #define TM_FLAG_RECEIVE_TM 0x01
33 #define TM_FLAG_DECODE_TM 0x02
34 #define TM_FLAG_STREAM_TM 0x04
35 #define TM_FLAG_DETECT_TM 0x08
36 #define TM_FLAG_MANAGEMENT_TM 0x10
37 #define TM_FLAG_COMMAND_TM 0x20
38 
39 typedef TmEcode (*ThreadInitFunc)(ThreadVars *, const void *, void **);
40 typedef TmEcode (*ThreadDeinitFunc)(ThreadVars *, void *);
41 typedef void (*ThreadExitPrintStatsFunc)(ThreadVars *, void *);
42 
43 typedef struct TmModule_ {
44  const char *name;
45 
46  /** thread handling */
47  TmEcode (*ThreadInit)(ThreadVars *, const void *, void **);
48  void (*ThreadExitPrintStats)(ThreadVars *, void *);
50 
51  /** the packet processing function */
52  TmEcode (*Func)(ThreadVars *, Packet *, void *);
53 
54  TmEcode (*PktAcqLoop)(ThreadVars *, void *, void *);
55 
56  /** terminates the capture loop in PktAcqLoop */
58 
59  /** does a thread still have tasks to complete before it can be killed?
60  * \retval bool
61  * \param tv threadvars
62  * \param thread_data thread module thread data (e.g. FlowWorkerThreadData for FlowWorker) */
63  bool (*ThreadBusy)(ThreadVars *tv, void *thread_data);
64 
65  TmEcode (*Management)(ThreadVars *, void *);
66 
67  /** global Init/DeInit */
68  TmEcode (*Init)(void);
69  TmEcode (*DeInit)(void);
70 #ifdef UNITTESTS
71  void (*RegisterTests)(void);
72 #endif
73  uint8_t cap_flags; /**< Flags to indicate the capability requirement of
74  the given TmModule */
75  /* Other flags used by the module */
76  uint8_t flags;
78 
80 
81 /**
82  * Structure that output modules use to maintain private data.
83  */
84 typedef struct OutputCtx_ {
85 
86  /** Pointer to data private to the output. */
87  void *data;
88 
89  /** Pointer to a cleanup function. */
90  void (*DeInit)(struct OutputCtx_ *);
91 
92  TAILQ_HEAD(, OutputModule_) submodules;
94 
95 TmModule *TmModuleGetByName(const char *name);
96 TmModule *TmModuleGetById(int id);
98 TmEcode TmModuleRegister(char *name, int (*module_func)(ThreadVars *, Packet *, void *));
99 void TmModuleDebugList(void);
100 void TmModuleRegisterTests(void);
101 #ifdef PROFILING
102 const char * TmModuleTmmIdToString(TmmId id);
103 #endif
104 void TmModuleRunInit(void);
105 void TmModuleRunDeInit(void);
106 
107 #endif /* SURICATA_TM_MODULES_H */
TmModule_::cap_flags
uint8_t cap_flags
Definition: tm-modules.h:73
TmModuleGetIDForTM
int TmModuleGetIDForTM(TmModule *tm)
Given a TM Module, returns its id.
Definition: tm-modules.c:88
TmModuleGetById
TmModule * TmModuleGetById(int id)
Returns a TM Module by its id.
Definition: tm-modules.c:69
tm-threads-common.h
TmModuleTmmIdToString
const char * TmModuleTmmIdToString(TmmId id)
Maps the TmmId, to its string equivalent.
Definition: tm-modules.c:170
TmModule_::ThreadBusy
bool(* ThreadBusy)(ThreadVars *tv, void *thread_data)
Definition: tm-modules.h:63
TmModuleGetByName
TmModule * TmModuleGetByName(const char *name)
get a tm module ptr by name
Definition: tm-modules.c:46
OutputCtx_::data
void * data
Definition: tm-modules.h:87
TmModule_::PktAcqLoop
TmEcode(* PktAcqLoop)(ThreadVars *, void *, void *)
Definition: tm-modules.h:54
OutputCtx_
Definition: tm-modules.h:84
TmModule_::ThreadDeinit
TmEcode(* ThreadDeinit)(ThreadVars *, void *)
Definition: tm-modules.h:49
TmModuleRegisterTests
void TmModuleRegisterTests(void)
register all unittests for the tm modules
Definition: tm-modules.c:135
decode.h
OutputCtx_::TAILQ_HEAD
TAILQ_HEAD(, OutputModule_) submodules
TmModule_::PktAcqBreakLoop
TmEcode(* PktAcqBreakLoop)(ThreadVars *, void *)
Definition: tm-modules.h:57
TmModule_::Init
TmEcode(* Init)(void)
Definition: tm-modules.h:68
ThreadVars_
Per thread variable structure.
Definition: threadvars.h:58
TmModuleRegister
TmEcode TmModuleRegister(char *name, int(*module_func)(ThreadVars *, Packet *, void *))
TmModule_::Management
TmEcode(* Management)(ThreadVars *, void *)
Definition: tm-modules.h:65
TmModule_::Func
TmEcode(* Func)(ThreadVars *, Packet *, void *)
Definition: tm-modules.h:52
ThreadInitFunc
TmEcode(* ThreadInitFunc)(ThreadVars *, const void *, void **)
Definition: tm-modules.h:39
Packet_
Definition: decode.h:473
TmModuleDebugList
void TmModuleDebugList(void)
Definition: tm-modules.c:31
TMM_SIZE
@ TMM_SIZE
Definition: tm-threads-common.h:75
TmModule_::RegisterTests
void(* RegisterTests)(void)
Definition: tm-modules.h:71
TmEcode
TmEcode
Definition: tm-threads-common.h:79
TmModuleRunDeInit
void TmModuleRunDeInit(void)
Definition: tm-modules.c:119
TmModule_::name
const char * name
Definition: tm-modules.h:44
TmModuleRunInit
void TmModuleRunInit(void)
Definition: tm-modules.c:104
TmModule_
Definition: tm-modules.h:43
OutputCtx_::DeInit
void(* DeInit)(struct OutputCtx_ *)
Definition: tm-modules.h:90
OutputCtx
struct OutputCtx_ OutputCtx
ThreadExitPrintStatsFunc
void(* ThreadExitPrintStatsFunc)(ThreadVars *, void *)
Definition: tm-modules.h:41
TmModule_::ThreadInit
TmEcode(* ThreadInit)(ThreadVars *, const void *, void **)
Definition: tm-modules.h:47
TmmId
TmmId
Thread Model Module id's.
Definition: tm-threads-common.h:33
tv
ThreadVars * tv
Definition: fuzz_decodepcapfile.c:32
TmModule_::ThreadExitPrintStats
void(* ThreadExitPrintStats)(ThreadVars *, void *)
Definition: tm-modules.h:48
threadvars.h
TmModule
struct TmModule_ TmModule
OutputModule_
Definition: output.h:56
tmm_modules
TmModule tmm_modules[TMM_SIZE]
Definition: tm-modules.c:29
TmModule_::flags
uint8_t flags
Definition: tm-modules.h:76
TmModule_::DeInit
TmEcode(* DeInit)(void)
Definition: tm-modules.h:69
ThreadDeinitFunc
TmEcode(* ThreadDeinitFunc)(ThreadVars *, void *)
Definition: tm-modules.h:40