suricata
output.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 Endace Technology Limited, Jason Ish <jason.ish@endace.com>
22  */
23 
24 #ifndef SURICATA_OUTPUT_H
25 #define SURICATA_OUTPUT_H
26 
27 #include "decode.h"
28 #include "tm-modules.h"
29 
30 #define DEFAULT_LOG_MODE_APPEND "yes"
31 #define DEFAULT_LOG_FILETYPE "regular"
32 
33 typedef struct OutputLoggerThreadStore_ {
34  void *thread_data;
37 
38 #include "output-packet.h"
39 #include "output-tx.h"
40 #include "output-file.h"
41 #include "output-filedata.h"
42 #include "output-flow.h"
43 #include "output-streaming.h"
44 #include "output-stats.h"
45 
46 typedef struct OutputInitResult_ {
48  bool ok;
50 
53 typedef TmEcode (*OutputLogFunc)(ThreadVars *, Packet *, void *);
54 typedef TmEcode (*OutputFlushFunc)(ThreadVars *, Packet *, void *);
55 typedef uint32_t (*OutputGetActiveCountFunc)(void);
56 
57 typedef struct OutputModule_ {
59  const char *name;
60  const char *conf_name;
61  const char *parent_name;
64 
67 
82 
85 
86 /* struct for packet module and packet sub-module registration */
95 
96 typedef TAILQ_HEAD(OutputModuleList_, OutputModule_) OutputModuleList;
97 extern OutputModuleList output_modules;
98 
99 void OutputRegisterModule(const char *, const char *, OutputInitFunc);
100 
101 void OutputRegisterPacketModule(LoggerId id, const char *name, const char *conf_name,
103 void OutputRegisterPacketSubModule(LoggerId id, const char *parent_name, const char *name,
104  const char *conf_name, OutputInitSubFunc InitFunc, OutputPacketLoggerFunctions *);
105 
106 void OutputRegisterTxModule(LoggerId id, const char *name, const char *conf_name,
107  OutputInitFunc InitFunc, AppProto alproto, TxLogger TxLogFunc, ThreadInitFunc ThreadInit,
108  ThreadDeinitFunc ThreadDeinit);
109 void OutputRegisterTxSubModule(LoggerId id, const char *parent_name, const char *name,
110  const char *conf_name, OutputInitSubFunc InitFunc, AppProto alproto, TxLogger TxLogFunc,
111  ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit);
112 
113 void OutputRegisterTxModuleWithCondition(LoggerId id, const char *name, const char *conf_name,
114  OutputInitFunc InitFunc, AppProto alproto, TxLogger TxLogFunc,
115  TxLoggerCondition TxLogCondition, ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit);
116 void OutputRegisterTxSubModuleWithCondition(LoggerId id, const char *parent_name, const char *name,
117  const char *conf_name, OutputInitSubFunc InitFunc, AppProto alproto, TxLogger TxLogFunc,
118  TxLoggerCondition TxLogCondition, ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit);
119 
120 void OutputRegisterTxModuleWithProgress(LoggerId id, const char *name, const char *conf_name,
121  OutputInitFunc InitFunc, AppProto alproto, TxLogger TxLogFunc, int tc_log_progress,
122  int ts_log_progress, ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit);
123 void OutputRegisterTxSubModuleWithProgress(LoggerId id, const char *parent_name, const char *name,
124  const char *conf_name, OutputInitSubFunc InitFunc, AppProto alproto, TxLogger TxLogFunc,
125  int tc_log_progress, int ts_log_progress, ThreadInitFunc ThreadInit,
126  ThreadDeinitFunc ThreadDeinit);
127 
128 void OutputRegisterFileSubModule(LoggerId id, const char *parent_name, const char *name,
129  const char *conf_name, OutputInitSubFunc InitFunc, SCFileLogger FileLogFunc,
130  ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit);
131 
132 void OutputRegisterFiledataModule(LoggerId id, const char *name, const char *conf_name,
133  OutputInitFunc InitFunc, SCFiledataLogger FiledataLogFunc, ThreadInitFunc ThreadInit,
134  ThreadDeinitFunc ThreadDeinit);
135 
136 void OutputRegisterFlowSubModule(LoggerId id, const char *parent_name, const char *name,
137  const char *conf_name, OutputInitSubFunc InitFunc, FlowLogger FlowLogFunc,
138  ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit);
139 
140 void OutputRegisterStreamingModule(LoggerId id, const char *name, const char *conf_name,
141  OutputInitFunc InitFunc, SCStreamingLogger StreamingLogFunc,
142  enum SCOutputStreamingType stream_type, ThreadInitFunc ThreadInit,
143  ThreadDeinitFunc ThreadDeinit);
144 
145 void OutputRegisterStatsModule(LoggerId id, const char *name, const char *conf_name,
146  OutputInitFunc InitFunc, StatsLogger StatsLogFunc, ThreadInitFunc ThreadInit,
147  ThreadDeinitFunc ThreadDeinit);
148 void OutputRegisterStatsSubModule(LoggerId id, const char *parent_name, const char *name,
149  const char *conf_name, OutputInitSubFunc InitFunc, StatsLogger StatsLogFunc,
150  ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit);
151 
153 void OutputDeregisterAll(void);
154 
155 int OutputDropLoggerEnable(void);
156 void OutputDropLoggerDisable(void);
157 
158 void OutputRegisterFileRotationFlag(int *flag);
159 void OutputUnregisterFileRotationFlag(int *flag);
160 void OutputNotifyFileRotation(void);
161 
162 void OutputRegisterRootLogger(ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit,
163  OutputLogFunc LogFunc, OutputGetActiveCountFunc ActiveCntFunc);
164 void TmModuleLoggerRegister(void);
165 
168 TmEcode OutputLoggerThreadInit(ThreadVars *, const void *, void **);
171 
172 void OutputSetupActiveLoggers(void);
173 void OutputClearActiveLoggers(void);
174 
175 typedef bool (*EveJsonSimpleTxLogFunc)(void *, struct JsonBuilder *);
176 
179  const char *name;
181 
183 
185  const char *confname;
186  const char *logname;
190 
192 
193 #endif /* ! SURICATA_OUTPUT_H */
OutputModule_::parent_name
const char * parent_name
Definition: output.h:61
output-tx.h
OutputModule_::FileLogFunc
SCFileLogger FileLogFunc
Definition: output.h:73
OutputLogFunc
TmEcode(* OutputLogFunc)(ThreadVars *, Packet *, void *)
Definition: output.h:53
OutputLoggerThreadStore_
Definition: output.h:33
OutputLoggerThreadInit
TmEcode OutputLoggerThreadInit(ThreadVars *, const void *, void **)
Definition: output.c:740
TAILQ_HEAD
typedef TAILQ_HEAD(OutputModuleList_, OutputModule_) OutputModuleList
OutputRegisterTxModule
void OutputRegisterTxModule(LoggerId id, const char *name, const char *conf_name, OutputInitFunc InitFunc, AppProto alproto, TxLogger TxLogFunc, ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit)
Register a tx output module.
Definition: output.c:372
OutputRegisterFileSubModule
void OutputRegisterFileSubModule(LoggerId id, const char *parent_name, const char *name, const char *conf_name, OutputInitSubFunc InitFunc, SCFileLogger FileLogFunc, ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit)
Register a file output sub-module.
Definition: output.c:396
EveJsonTxLoggerRegistrationData::LogTx
EveJsonSimpleTxLogFunc LogTx
Definition: output.h:188
OutputModule_::PacketFlushFunc
PacketLogger PacketFlushFunc
Definition: output.h:69
output-filedata.h
OutputModule
struct OutputModule_ OutputModule
OutputPreRegisterLogger
int OutputPreRegisterLogger(EveJsonTxLoggerRegistrationData reg_data)
Definition: output.c:979
OutputPacketLoggerFunctions_::ThreadExitPrintStatsFunc
ThreadExitPrintStatsFunc ThreadExitPrintStatsFunc
Definition: output.h:93
OutputPacketLoggerFunctions_::FlushFunc
PacketLogger FlushFunc
Definition: output.h:89
AppProto
uint16_t AppProto
Definition: app-layer-protos.h:85
output-streaming.h
SCFileLogger
int(* SCFileLogger)(ThreadVars *, void *thread_data, const Packet *, const File *, void *tx, const uint64_t tx_id, uint8_t direction)
Definition: output-file.h:48
OutputInitResult
struct OutputInitResult_ OutputInitResult
OutputModule_::name
const char * name
Definition: output.h:59
OutputModule_::logger_id
LoggerId logger_id
Definition: output.h:58
LoggerId
LoggerId
Definition: suricata-common.h:469
OutputModule_::ts_log_progress
int ts_log_progress
Definition: output.h:81
OutputLoggerThreadStore_::next
struct OutputLoggerThreadStore_ * next
Definition: output.h:35
OutputModule_::StatsLogFunc
StatsLogger StatsLogFunc
Definition: output.h:77
OutputModule_::TAILQ_ENTRY
TAILQ_ENTRY(OutputModule_) entries
tm-modules.h
TxLogger
int(* TxLogger)(ThreadVars *, void *thread_data, const Packet *, Flow *f, void *state, void *tx, uint64_t tx_id)
Transaction logger function pointer type.
Definition: output-tx.h:34
FlowLogger
int(* FlowLogger)(ThreadVars *, void *thread_data, Flow *f)
Flow logger function pointer type.
Definition: output-flow.h:36
output-packet.h
OutputRegisterPacketModule
void OutputRegisterPacketModule(LoggerId id, const char *name, const char *conf_name, OutputInitFunc InitFunc, OutputPacketLoggerFunctions *)
Register a packet output module.
Definition: output.c:170
PacketLogger
int(* PacketLogger)(ThreadVars *, void *thread_data, const Packet *)
Packet logger function pointer type.
Definition: output-packet.h:35
OutputModule_::InitSubFunc
OutputInitSubFunc InitSubFunc
Definition: output.h:63
OutputGetModuleByConfName
OutputModule * OutputGetModuleByConfName(const char *name)
Get an output module by name.
Definition: output.c:615
SCFiledataLogger
int(* SCFiledataLogger)(ThreadVars *, void *thread_data, const Packet *, File *, void *tx, const uint64_t tx_id, const uint8_t *, uint32_t, uint8_t, uint8_t dir)
File-data logger function pointer type.
Definition: output-filedata.h:51
OutputLoggerFlush
TmEcode OutputLoggerFlush(ThreadVars *, Packet *, void *)
Definition: output.c:711
OutputModule_::PacketLogFunc
PacketLogger PacketLogFunc
Definition: output.h:68
OutputLoggerLog
TmEcode OutputLoggerLog(ThreadVars *, Packet *, void *)
Definition: output.c:726
EveJsonSimpleTxLogFunc
bool(* EveJsonSimpleTxLogFunc)(void *, struct JsonBuilder *)
Definition: output.h:175
OutputModule_::FiledataLogFunc
SCFiledataLogger FiledataLogFunc
Definition: output.h:74
OutputModule_::alproto
AppProto alproto
Definition: output.h:78
OutputDeregisterAll
void OutputDeregisterAll(void)
Deregister all modules. Useful for a memory clean exit.
Definition: output.c:632
OutputPacketLoggerFunctions_::ConditionFunc
PacketLogCondition ConditionFunc
Definition: output.h:90
OutputCtx_
Definition: tm-modules.h:84
OutputLoggerThreadStore_::thread_data
void * thread_data
Definition: output.h:34
OutputModule_::stream_type
enum SCOutputStreamingType stream_type
Definition: output.h:79
OutputModule_::ThreadInit
ThreadInitFunc ThreadInit
Definition: output.h:65
OutputRegisterPacketSubModule
void OutputRegisterPacketSubModule(LoggerId id, const char *parent_name, const char *name, const char *conf_name, OutputInitSubFunc InitFunc, OutputPacketLoggerFunctions *)
Register a packet output sub-module.
Definition: output.c:208
SCEveJsonSimpleGetLogger
EveJsonSimpleAppLayerLogger * SCEveJsonSimpleGetLogger(AppProto alproto)
Definition: output.c:854
output_modules
OutputModuleList output_modules
OutputInitSubFunc
OutputInitResult(* OutputInitSubFunc)(ConfNode *, OutputCtx *)
Definition: output.h:52
OutputDropLoggerDisable
void OutputDropLoggerDisable(void)
Definition: output.c:654
decode.h
OutputInitResult_::ctx
OutputCtx * ctx
Definition: output.h:47
OutputModule_::ThreadDeinit
ThreadDeinitFunc ThreadDeinit
Definition: output.h:66
OutputRegisterStatsSubModule
void OutputRegisterStatsSubModule(LoggerId id, const char *parent_name, const char *name, const char *conf_name, OutputInitSubFunc InitFunc, StatsLogger StatsLogFunc, ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit)
Register a stats data output sub-module.
Definition: output.c:580
output-file.h
EveJsonTxLoggerRegistrationData::logname
const char * logname
Definition: output.h:186
OutputRegisterModule
void OutputRegisterModule(const char *, const char *, OutputInitFunc)
OutputRegisterTxSubModule
void OutputRegisterTxSubModule(LoggerId id, const char *parent_name, const char *name, const char *conf_name, OutputInitSubFunc InitFunc, AppProto alproto, TxLogger TxLogFunc, ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit)
Definition: output.c:380
EveJsonTxLoggerRegistrationData::alproto
AppProto alproto
Definition: output.h:187
ThreadVars_
Per thread variable structure.
Definition: threadvars.h:58
OutputRegisterStreamingModule
void OutputRegisterStreamingModule(LoggerId id, const char *name, const char *conf_name, OutputInitFunc InitFunc, SCStreamingLogger StreamingLogFunc, enum SCOutputStreamingType stream_type, ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit)
Register a streaming data output module.
Definition: output.c:506
ThreadInitFunc
TmEcode(* ThreadInitFunc)(ThreadVars *, const void *, void **)
Definition: tm-modules.h:39
OutputModule_::StreamingLogFunc
SCStreamingLogger StreamingLogFunc
Definition: output.h:76
OutputInitResult_::ok
bool ok
Definition: output.h:48
OutputPacketLoggerFunctions
struct OutputPacketLoggerFunctions_ OutputPacketLoggerFunctions
OutputLoggerThreadStore
struct OutputLoggerThreadStore_ OutputLoggerThreadStore
OutputUnregisterFileRotationFlag
void OutputUnregisterFileRotationFlag(int *flag)
Unregister a file rotation flag.
Definition: output.c:687
OutputFlushFunc
TmEcode(* OutputFlushFunc)(ThreadVars *, Packet *, void *)
Definition: output.h:54
OutputModule_::conf_name
const char * conf_name
Definition: output.h:60
OutputModule_::FlowLogFunc
FlowLogger FlowLogFunc
Definition: output.h:75
Packet_
Definition: decode.h:476
EveJsonSimpleAppLayerLogger
struct EveJsonSimpleAppLayerLogger EveJsonSimpleAppLayerLogger
TmModuleLoggerRegister
void TmModuleLoggerRegister(void)
Definition: output.c:848
EveJsonTxLoggerRegistrationData
Definition: output.h:184
OutputClearActiveLoggers
void OutputClearActiveLoggers(void)
Definition: output.c:839
TmEcode
TmEcode
Definition: tm-threads-common.h:79
name
const char * name
Definition: tm-threads.c:2081
output-flow.h
EveJsonSimpleAppLayerLogger
Definition: output.h:177
OutputRegisterTxModuleWithCondition
void OutputRegisterTxModuleWithCondition(LoggerId id, const char *name, const char *conf_name, OutputInitFunc InitFunc, AppProto alproto, TxLogger TxLogFunc, TxLoggerCondition TxLogCondition, ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit)
Register a tx output module with condition.
Definition: output.c:323
OutputRegisterStatsModule
void OutputRegisterStatsModule(LoggerId id, const char *name, const char *conf_name, OutputInitFunc InitFunc, StatsLogger StatsLogFunc, ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit)
Register a stats data output module.
Definition: output.c:544
TxLoggerCondition
bool(* TxLoggerCondition)(ThreadVars *, const Packet *, void *state, void *tx, uint64_t tx_id)
Transaction logger condition function pointer type.
Definition: output-tx.h:41
EveJsonTxLoggerRegistrationData
struct EveJsonTxLoggerRegistrationData EveJsonTxLoggerRegistrationData
OutputDropLoggerEnable
int OutputDropLoggerEnable(void)
Definition: output.c:646
OutputPacketLoggerFunctions_::ThreadDeinitFunc
ThreadDeinitFunc ThreadDeinitFunc
Definition: output.h:92
OutputInitResult_
Definition: output.h:46
OutputModule_::TxLogCondition
TxLoggerCondition TxLogCondition
Definition: output.h:72
OutputRegisterTxModuleWithProgress
void OutputRegisterTxModuleWithProgress(LoggerId id, const char *name, const char *conf_name, OutputInitFunc InitFunc, AppProto alproto, TxLogger TxLogFunc, int tc_log_progress, int ts_log_progress, ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit)
Register a tx output module with progress.
Definition: output.c:347
OutputRegisterFiledataModule
void OutputRegisterFiledataModule(LoggerId id, const char *name, const char *conf_name, OutputInitFunc InitFunc, SCFiledataLogger FiledataLogFunc, ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit)
Register a file data output module.
Definition: output.c:433
EveJsonTxLoggerRegistrationData::confname
const char * confname
Definition: output.h:185
EveJsonSimpleAppLayerLogger::LogTx
EveJsonSimpleTxLogFunc LogTx
Definition: output.h:178
OutputRegisterTxSubModuleWithCondition
void OutputRegisterTxSubModuleWithCondition(LoggerId id, const char *parent_name, const char *name, const char *conf_name, OutputInitSubFunc InitFunc, AppProto alproto, TxLogger TxLogFunc, TxLoggerCondition TxLogCondition, ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit)
Definition: output.c:331
OutputRegisterTxSubModuleWithProgress
void OutputRegisterTxSubModuleWithProgress(LoggerId id, const char *parent_name, const char *name, const char *conf_name, OutputInitSubFunc InitFunc, AppProto alproto, TxLogger TxLogFunc, int tc_log_progress, int ts_log_progress, ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit)
Definition: output.c:355
OutputPacketLoggerFunctions_::LogFunc
PacketLogger LogFunc
Definition: output.h:88
OutputLoggerThreadDeinit
TmEcode OutputLoggerThreadDeinit(ThreadVars *, void *)
Definition: output.c:771
PacketLogCondition
bool(* PacketLogCondition)(ThreadVars *, void *thread_data, const Packet *)
Packet logger condition function point type.
Definition: output-packet.h:43
OutputModule_::PacketConditionFunc
PacketLogCondition PacketConditionFunc
Definition: output.h:70
OutputGetActiveCountFunc
uint32_t(* OutputGetActiveCountFunc)(void)
Definition: output.h:55
OutputPacketLoggerFunctions_::ThreadInitFunc
ThreadInitFunc ThreadInitFunc
Definition: output.h:91
OutputRegisterFileRotationFlag
void OutputRegisterFileRotationFlag(int *flag)
Register a flag for file rotation notification.
Definition: output.c:666
EveJsonSimpleAppLayerLogger::name
const char * name
Definition: output.h:179
OutputRegisterFlowSubModule
void OutputRegisterFlowSubModule(LoggerId id, const char *parent_name, const char *name, const char *conf_name, OutputInitSubFunc InitFunc, FlowLogger FlowLogFunc, ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit)
Register a flow output sub-module.
Definition: output.c:469
OutputNotifyFileRotation
void OutputNotifyFileRotation(void)
Notifies all registered file rotation notification flags.
Definition: output.c:704
ConfNode_
Definition: conf.h:32
StatsLogger
int(* StatsLogger)(ThreadVars *, void *thread_data, const StatsTable *)
Definition: output-stats.h:50
OutputModule_::TxLogFunc
TxLogger TxLogFunc
Definition: output.h:71
OutputModule_::tc_log_progress
int tc_log_progress
Definition: output.h:80
OutputInitFunc
OutputInitResult(* OutputInitFunc)(ConfNode *)
Definition: output.h:51
output-stats.h
OutputLoggerExitPrintStats
void OutputLoggerExitPrintStats(ThreadVars *, void *)
SCOutputStreamingType
SCOutputStreamingType
Definition: output-streaming.h:35
OutputRegisterRootLogger
void OutputRegisterRootLogger(ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit, OutputLogFunc LogFunc, OutputGetActiveCountFunc ActiveCntFunc)
Definition: output.c:797
OutputModule_
Definition: output.h:57
OutputPacketLoggerFunctions_
Definition: output.h:87
SCStreamingLogger
int(* SCStreamingLogger)(ThreadVars *, void *thread_data, const Flow *f, const uint8_t *data, uint32_t data_len, uint64_t tx_id, uint8_t flags)
Definition: output-streaming.h:41
ThreadDeinitFunc
TmEcode(* ThreadDeinitFunc)(ThreadVars *, void *)
Definition: tm-modules.h:40
OutputModule_::InitFunc
OutputInitFunc InitFunc
Definition: output.h:62
OutputSetupActiveLoggers
void OutputSetupActiveLoggers(void)
Definition: output.c:826