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_FLOWWORKER_TM 0x04
35 #define TM_FLAG_VERDICT_TM 0x08
36 #define TM_FLAG_MANAGEMENT_TM 0x10
37 #define TM_FLAG_COMMAND_TM 0x20
38 
39 /* all packet modules combined */
40 #define TM_FLAG_PACKET_ALL \
41  (TM_FLAG_RECEIVE_TM | TM_FLAG_DECODE_TM | TM_FLAG_FLOWWORKER_TM | TM_FLAG_VERDICT_TM)
42 
43 typedef TmEcode (*ThreadInitFunc)(ThreadVars *, const void *, void **);
44 typedef TmEcode (*ThreadDeinitFunc)(ThreadVars *, void *);
45 typedef void (*ThreadExitPrintStatsFunc)(ThreadVars *, void *);
46 
47 typedef struct TmModule_ {
48  const char *name;
49 
50  /** thread handling */
51  TmEcode (*ThreadInit)(ThreadVars *, const void *, void **);
52  void (*ThreadExitPrintStats)(ThreadVars *, void *);
54 
55  /** the packet processing function */
56  TmEcode (*Func)(ThreadVars *, Packet *, void *);
57 
58  TmEcode (*PktAcqLoop)(ThreadVars *, void *, void *);
59 
60  /** terminates the capture loop in PktAcqLoop */
62 
63  /** does a thread still have tasks to complete before it can be killed?
64  * \retval bool
65  * \param tv threadvars
66  * \param thread_data thread module thread data (e.g. FlowWorkerThreadData for FlowWorker) */
67  bool (*ThreadBusy)(ThreadVars *tv, void *thread_data);
68 
69  TmEcode (*Management)(ThreadVars *, void *);
70 
71  /** global Init/DeInit */
72  TmEcode (*Init)(void);
73  TmEcode (*DeInit)(void);
74 #ifdef UNITTESTS
75  void (*RegisterTests)(void);
76 #endif
77  uint8_t cap_flags; /**< Flags to indicate the capability requirement of
78  the given TmModule */
79  /* Other flags used by the module */
80  uint8_t flags;
82 
84 
85 /**
86  * Structure that output modules use to maintain private data.
87  */
88 typedef struct OutputCtx_ {
89 
90  /** Pointer to data private to the output. */
91  void *data;
92 
93  /** Pointer to a cleanup function. */
94  void (*DeInit)(struct OutputCtx_ *);
95 
96  TAILQ_HEAD(, OutputModule_) submodules;
98 
99 TmModule *TmModuleGetByName(const char *name);
100 TmModule *TmModuleGetById(int id);
102 TmEcode TmModuleRegister(char *name, int (*module_func)(ThreadVars *, Packet *, void *));
103 void TmModuleDebugList(void);
104 void TmModuleRegisterTests(void);
105 #ifdef PROFILING
106 const char * TmModuleTmmIdToString(TmmId id);
107 #endif
108 void TmModuleRunInit(void);
109 void TmModuleRunDeInit(void);
110 
111 #endif /* SURICATA_TM_MODULES_H */
TmModule_::cap_flags
uint8_t cap_flags
Definition: tm-modules.h:77
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:67
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:91
TmModule_::PktAcqLoop
TmEcode(* PktAcqLoop)(ThreadVars *, void *, void *)
Definition: tm-modules.h:58
OutputCtx_
Definition: tm-modules.h:88
TmModule_::ThreadDeinit
TmEcode(* ThreadDeinit)(ThreadVars *, void *)
Definition: tm-modules.h:53
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:61
TmModule_::Init
TmEcode(* Init)(void)
Definition: tm-modules.h:72
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:69
TmModule_::Func
TmEcode(* Func)(ThreadVars *, Packet *, void *)
Definition: tm-modules.h:56
ThreadInitFunc
TmEcode(* ThreadInitFunc)(ThreadVars *, const void *, void **)
Definition: tm-modules.h:43
Packet_
Definition: decode.h:501
TmModuleDebugList
void TmModuleDebugList(void)
Definition: tm-modules.c:31
TMM_SIZE
@ TMM_SIZE
Definition: tm-threads-common.h:76
TmModule_::RegisterTests
void(* RegisterTests)(void)
Definition: tm-modules.h:75
TmEcode
TmEcode
Definition: tm-threads-common.h:80
name
const char * name
Definition: tm-threads.c:2163
TmModuleRunDeInit
void TmModuleRunDeInit(void)
Definition: tm-modules.c:119
TmModule_::name
const char * name
Definition: tm-modules.h:48
TmModuleRunInit
void TmModuleRunInit(void)
Definition: tm-modules.c:104
TmModule_
Definition: tm-modules.h:47
OutputCtx_::DeInit
void(* DeInit)(struct OutputCtx_ *)
Definition: tm-modules.h:94
OutputCtx
struct OutputCtx_ OutputCtx
ThreadExitPrintStatsFunc
void(* ThreadExitPrintStatsFunc)(ThreadVars *, void *)
Definition: tm-modules.h:45
TmModule_::ThreadInit
TmEcode(* ThreadInit)(ThreadVars *, const void *, void **)
Definition: tm-modules.h:51
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:52
threadvars.h
TmModule
struct TmModule_ TmModule
OutputModule_
Definition: output.h:57
tmm_modules
TmModule tmm_modules[TMM_SIZE]
Definition: tm-modules.c:29
TmModule_::flags
uint8_t flags
Definition: tm-modules.h:80
TmModule_::DeInit
TmEcode(* DeInit)(void)
Definition: tm-modules.h:73
ThreadDeinitFunc
TmEcode(* ThreadDeinitFunc)(ThreadVars *, void *)
Definition: tm-modules.h:44