diff --git a/src/alert-debuglog.c b/src/alert-debuglog.c index 85ce294150..95d29b2c65 100644 --- a/src/alert-debuglog.c +++ b/src/alert-debuglog.c @@ -481,7 +481,15 @@ static int AlertDebugLogLogger(ThreadVars *tv, void *thread_data, const Packet * void AlertDebugLogRegister(void) { + OutputPacketLoggerFunctions output_logger_functions = { + .LogFunc = AlertDebugLogLogger, + .FlushFunc = NULL, + .ConditionFunc = AlertDebugLogCondition, + .ThreadInitFunc = AlertDebugLogThreadInit, + .ThreadDeinitFunc = AlertDebugLogThreadDeinit, + .ThreadExitPrintStatsFunc = NULL, + }; + OutputRegisterPacketModule(LOGGER_ALERT_DEBUG, MODULE_NAME, "alert-debug", AlertDebugLogInitCtx, - AlertDebugLogLogger, AlertDebugLogCondition, AlertDebugLogThreadInit, - AlertDebugLogThreadDeinit); + &output_logger_functions); } diff --git a/src/alert-fastlog.c b/src/alert-fastlog.c index 7f43de4bef..8ced31debd 100644 --- a/src/alert-fastlog.c +++ b/src/alert-fastlog.c @@ -76,9 +76,17 @@ int AlertFastLogger(ThreadVars *tv, void *data, const Packet *p); void AlertFastLogRegister(void) { - OutputRegisterPacketModule(LOGGER_ALERT_FAST, MODULE_NAME, "fast", AlertFastLogInitCtx, - AlertFastLogger, AlertFastLogCondition, AlertFastLogThreadInit, - AlertFastLogThreadDeinit); + OutputPacketLoggerFunctions output_logger_functions = { + .LogFunc = AlertFastLogger, + .FlushFunc = NULL, + .ConditionFunc = AlertFastLogCondition, + .ThreadInitFunc = AlertFastLogThreadInit, + .ThreadDeinitFunc = AlertFastLogThreadDeinit, + .ThreadExitPrintStatsFunc = NULL, + }; + + OutputRegisterPacketModule( + LOGGER_ALERT_FAST, MODULE_NAME, "fast", AlertFastLogInitCtx, &output_logger_functions); AlertFastLogRegisterTests(); } diff --git a/src/alert-syslog.c b/src/alert-syslog.c index 016e633493..f22f650105 100644 --- a/src/alert-syslog.c +++ b/src/alert-syslog.c @@ -384,8 +384,15 @@ static int AlertSyslogLogger(ThreadVars *tv, void *thread_data, const Packet *p) void AlertSyslogRegister (void) { #ifndef OS_WIN32 + OutputPacketLoggerFunctions output_logger_functions = { + .LogFunc = AlertSyslogLogger, + .FlushFunc = NULL, + .ConditionFunc = AlertSyslogCondition, + .ThreadInitFunc = AlertSyslogThreadInit, + .ThreadDeinitFunc = AlertSyslogThreadDeinit, + .ThreadExitPrintStatsFunc = NULL, + }; OutputRegisterPacketModule(LOGGER_ALERT_SYSLOG, MODULE_NAME, "syslog", AlertSyslogInitCtx, - AlertSyslogLogger, AlertSyslogCondition, AlertSyslogThreadInit, - AlertSyslogThreadDeinit); + &output_logger_functions); #endif /* !OS_WIN32 */ } diff --git a/src/log-pcap.c b/src/log-pcap.c index a930d98fa3..de506ee255 100644 --- a/src/log-pcap.c +++ b/src/log-pcap.c @@ -209,8 +209,16 @@ static bool PcapLogCondition(ThreadVars *, void *, const Packet *); void PcapLogRegister(void) { - OutputRegisterPacketModule(LOGGER_PCAP, MODULE_NAME, "pcap-log", PcapLogInitCtx, PcapLog, - PcapLogCondition, PcapLogDataInit, PcapLogDataDeinit); + OutputPacketLoggerFunctions output_logger_functions = { + .LogFunc = PcapLog, + .FlushFunc = NULL, + .ConditionFunc = PcapLogCondition, + .ThreadInitFunc = PcapLogDataInit, + .ThreadDeinitFunc = PcapLogDataDeinit, + .ThreadExitPrintStatsFunc = NULL, + }; + OutputRegisterPacketModule( + LOGGER_PCAP, MODULE_NAME, "pcap-log", PcapLogInitCtx, &output_logger_functions); PcapLogProfileSetup(); SC_ATOMIC_INIT(thread_cnt); SC_ATOMIC_SET(thread_cnt, 1); /* first id is 1 */ diff --git a/src/output-eve-stream.c b/src/output-eve-stream.c index 3059f25181..15d262b435 100644 --- a/src/output-eve-stream.c +++ b/src/output-eve-stream.c @@ -452,7 +452,15 @@ static bool EveStreamLogCondition(ThreadVars *tv, void *data, const Packet *p) void EveStreamLogRegister(void) { + OutputPacketLoggerFunctions output_logger_functions = { + .LogFunc = EveStreamLogger, + .FlushFunc = NULL, + .ConditionFunc = EveStreamLogCondition, + .ThreadInitFunc = EveStreamLogThreadInit, + .ThreadDeinitFunc = EveStreamLogThreadDeinit, + .ThreadExitPrintStatsFunc = NULL, + }; + OutputRegisterPacketSubModule(LOGGER_JSON_STREAM, "eve-log", MODULE_NAME, "eve-log.stream", - EveStreamLogInitCtxSub, EveStreamLogger, EveStreamLogCondition, EveStreamLogThreadInit, - EveStreamLogThreadDeinit); + EveStreamLogInitCtxSub, &output_logger_functions); } diff --git a/src/output-json-alert.c b/src/output-json-alert.c index c5c15d32b5..419a1d2b42 100644 --- a/src/output-json-alert.c +++ b/src/output-json-alert.c @@ -1065,7 +1065,15 @@ error: void JsonAlertLogRegister (void) { + OutputPacketLoggerFunctions output_logger_functions = { + .LogFunc = JsonAlertLogger, + .FlushFunc = NULL, + .ConditionFunc = JsonAlertLogCondition, + .ThreadInitFunc = JsonAlertLogThreadInit, + .ThreadDeinitFunc = JsonAlertLogThreadDeinit, + .ThreadExitPrintStatsFunc = NULL, + }; + OutputRegisterPacketSubModule(LOGGER_JSON_ALERT, "eve-log", MODULE_NAME, "eve-log.alert", - JsonAlertLogInitCtxSub, JsonAlertLogger, JsonAlertLogCondition, JsonAlertLogThreadInit, - JsonAlertLogThreadDeinit); + JsonAlertLogInitCtxSub, &output_logger_functions); } diff --git a/src/output-json-anomaly.c b/src/output-json-anomaly.c index 00f82fa368..cd9e5dc068 100644 --- a/src/output-json-anomaly.c +++ b/src/output-json-anomaly.c @@ -449,9 +449,17 @@ static OutputInitResult JsonAnomalyLogInitCtxSub(ConfNode *conf, OutputCtx *pare void JsonAnomalyLogRegister (void) { + OutputPacketLoggerFunctions output_logger_functions = { + .LogFunc = JsonAnomalyLogger, + .FlushFunc = NULL, + .ConditionFunc = JsonAnomalyLogCondition, + .ThreadInitFunc = JsonAnomalyLogThreadInit, + .ThreadDeinitFunc = JsonAnomalyLogThreadDeinit, + .ThreadExitPrintStatsFunc = NULL, + }; + OutputRegisterPacketSubModule(LOGGER_JSON_ANOMALY, "eve-log", MODULE_NAME, "eve-log.anomaly", - JsonAnomalyLogInitCtxSub, JsonAnomalyLogger, JsonAnomalyLogCondition, - JsonAnomalyLogThreadInit, JsonAnomalyLogThreadDeinit); + JsonAnomalyLogInitCtxSub, &output_logger_functions); OutputRegisterTxSubModule(LOGGER_JSON_ANOMALY, "eve-log", MODULE_NAME, "eve-log.anomaly", JsonAnomalyLogInitCtxHelper, ALPROTO_UNKNOWN, JsonAnomalyTxLogger, diff --git a/src/output-json-arp.c b/src/output-json-arp.c index 87a80d8cdb..804e355135 100644 --- a/src/output-json-arp.c +++ b/src/output-json-arp.c @@ -103,9 +103,17 @@ static bool JsonArpLogCondition(ThreadVars *tv, void *thread_data, const Packet void JsonArpLogRegister(void) { + OutputPacketLoggerFunctions output_logger_functions = { + .LogFunc = JsonArpLogger, + .FlushFunc = NULL, + .ConditionFunc = JsonArpLogCondition, + .ThreadInitFunc = JsonLogThreadInit, + .ThreadDeinitFunc = JsonLogThreadDeinit, + .ThreadExitPrintStatsFunc = NULL, + }; + OutputRegisterPacketSubModule(LOGGER_JSON_ARP, "eve-log", "JsonArpLog", "eve-log.arp", - OutputJsonLogInitSub, JsonArpLogger, JsonArpLogCondition, JsonLogThreadInit, - JsonLogThreadDeinit); + OutputJsonLogInitSub, &output_logger_functions); SCLogDebug("ARP JSON logger registered."); } diff --git a/src/output-json-drop.c b/src/output-json-drop.c index 1ac27a209d..29ead13e07 100644 --- a/src/output-json-drop.c +++ b/src/output-json-drop.c @@ -390,7 +390,15 @@ static bool JsonDropLogCondition(ThreadVars *tv, void *data, const Packet *p) void JsonDropLogRegister (void) { + OutputPacketLoggerFunctions output_logger_functions = { + .LogFunc = JsonDropLogger, + .FlushFunc = NULL, + .ConditionFunc = JsonDropLogCondition, + .ThreadInitFunc = JsonDropLogThreadInit, + .ThreadDeinitFunc = JsonDropLogThreadDeinit, + .ThreadExitPrintStatsFunc = NULL, + }; + OutputRegisterPacketSubModule(LOGGER_JSON_DROP, "eve-log", MODULE_NAME, "eve-log.drop", - JsonDropLogInitCtxSub, JsonDropLogger, JsonDropLogCondition, JsonDropLogThreadInit, - JsonDropLogThreadDeinit); + JsonDropLogInitCtxSub, &output_logger_functions); } diff --git a/src/output-json-frame.c b/src/output-json-frame.c index 3fc875b051..dfd895b8ab 100644 --- a/src/output-json-frame.c +++ b/src/output-json-frame.c @@ -560,7 +560,14 @@ error: void JsonFrameLogRegister(void) { + OutputPacketLoggerFunctions output_logger_functions = { + .LogFunc = JsonFrameLogger, + .FlushFunc = NULL, + .ConditionFunc = JsonFrameLogCondition, + .ThreadInitFunc = JsonFrameLogThreadInit, + .ThreadDeinitFunc = JsonFrameLogThreadDeinit, + .ThreadExitPrintStatsFunc = NULL, + }; OutputRegisterPacketSubModule(LOGGER_JSON_FRAME, "eve-log", MODULE_NAME, "eve-log.frame", - JsonFrameLogInitCtxSub, JsonFrameLogger, JsonFrameLogCondition, JsonFrameLogThreadInit, - JsonFrameLogThreadDeinit); + JsonFrameLogInitCtxSub, &output_logger_functions); } diff --git a/src/output-json-metadata.c b/src/output-json-metadata.c index 2602e4b9b3..a87d735839 100644 --- a/src/output-json-metadata.c +++ b/src/output-json-metadata.c @@ -94,12 +94,19 @@ static bool JsonMetadataLogCondition(ThreadVars *tv, void *data, const Packet *p void JsonMetadataLogRegister (void) { + OutputPacketLoggerFunctions output_logger_functions = { + .LogFunc = JsonMetadataLogger, + .FlushFunc = NULL, + .ConditionFunc = JsonMetadataLogCondition, + .ThreadInitFunc = JsonLogThreadInit, + .ThreadDeinitFunc = JsonLogThreadDeinit, + .ThreadExitPrintStatsFunc = NULL, + }; + OutputRegisterPacketSubModule(LOGGER_JSON_METADATA, "eve-log", MODULE_NAME, "eve-log.metadata", - OutputJsonLogInitSub, JsonMetadataLogger, JsonMetadataLogCondition, JsonLogThreadInit, - JsonLogThreadDeinit); + OutputJsonLogInitSub, &output_logger_functions); /* Kept for compatibility. */ OutputRegisterPacketSubModule(LOGGER_JSON_METADATA, "eve-log", MODULE_NAME, "eve-log.vars", - OutputJsonLogInitSub, JsonMetadataLogger, JsonMetadataLogCondition, JsonLogThreadInit, - JsonLogThreadDeinit); + OutputJsonLogInitSub, &output_logger_functions); } diff --git a/src/output.c b/src/output.c index b86e3d483c..261fa9a5a7 100644 --- a/src/output.c +++ b/src/output.c @@ -85,6 +85,7 @@ typedef struct RootLogger_ { OutputLogFunc LogFunc; + OutputFlushFunc FlushFunc; ThreadInitFunc ThreadInit; ThreadDeinitFunc ThreadDeinit; OutputGetActiveCountFunc ActiveCntFunc; @@ -167,10 +168,10 @@ error: * \retval Returns 0 on success, -1 on failure. */ void OutputRegisterPacketModule(LoggerId id, const char *name, const char *conf_name, - OutputInitFunc InitFunc, PacketLogger PacketLogFunc, PacketLogCondition PacketConditionFunc, - ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit) + OutputInitFunc InitFunc, OutputPacketLoggerFunctions *output_module_functions) { - if (unlikely(PacketLogFunc == NULL || PacketConditionFunc == NULL)) { + if (unlikely(output_module_functions->LogFunc == NULL || + output_module_functions->ConditionFunc == NULL)) { goto error; } @@ -183,10 +184,11 @@ void OutputRegisterPacketModule(LoggerId id, const char *name, const char *conf_ module->name = name; module->conf_name = conf_name; module->InitFunc = InitFunc; - module->PacketLogFunc = PacketLogFunc; - module->PacketConditionFunc = PacketConditionFunc; - module->ThreadInit = ThreadInit; - module->ThreadDeinit = ThreadDeinit; + module->PacketLogFunc = output_module_functions->LogFunc; + module->PacketFlushFunc = output_module_functions->FlushFunc; + module->PacketConditionFunc = output_module_functions->ConditionFunc; + module->ThreadInit = output_module_functions->ThreadInitFunc; + module->ThreadDeinit = output_module_functions->ThreadDeinitFunc; TAILQ_INSERT_TAIL(&output_modules, module, entries); SCLogDebug("Packet logger \"%s\" registered.", name); @@ -204,11 +206,11 @@ error: * \retval Returns 0 on success, -1 on failure. */ void OutputRegisterPacketSubModule(LoggerId id, const char *parent_name, const char *name, - const char *conf_name, OutputInitSubFunc InitFunc, PacketLogger PacketLogFunc, - PacketLogCondition PacketConditionFunc, ThreadInitFunc ThreadInit, - ThreadDeinitFunc ThreadDeinit) + const char *conf_name, OutputInitSubFunc InitFunc, + OutputPacketLoggerFunctions *output_logger_functions) { - if (unlikely(PacketLogFunc == NULL || PacketConditionFunc == NULL)) { + if (unlikely(output_logger_functions->LogFunc == NULL || + output_logger_functions->ConditionFunc == NULL)) { goto error; } @@ -222,10 +224,11 @@ void OutputRegisterPacketSubModule(LoggerId id, const char *parent_name, const c module->conf_name = conf_name; module->parent_name = parent_name; module->InitSubFunc = InitFunc; - module->PacketLogFunc = PacketLogFunc; - module->PacketConditionFunc = PacketConditionFunc; - module->ThreadInit = ThreadInit; - module->ThreadDeinit = ThreadDeinit; + module->PacketLogFunc = output_logger_functions->LogFunc; + module->PacketFlushFunc = output_logger_functions->FlushFunc; + module->PacketConditionFunc = output_logger_functions->ConditionFunc; + module->ThreadInit = output_logger_functions->ThreadInitFunc; + module->ThreadDeinit = output_logger_functions->ThreadDeinitFunc; TAILQ_INSERT_TAIL(&output_modules, module, entries); SCLogDebug("Packet logger \"%s\" registered.", name); diff --git a/src/output.h b/src/output.h index 87a05adfbd..728a2310e6 100644 --- a/src/output.h +++ b/src/output.h @@ -51,6 +51,7 @@ typedef struct OutputInitResult_ { typedef OutputInitResult (*OutputInitFunc)(ConfNode *); typedef OutputInitResult (*OutputInitSubFunc)(ConfNode *, OutputCtx *); typedef TmEcode (*OutputLogFunc)(ThreadVars *, Packet *, void *); +typedef TmEcode (*OutputFlushFunc)(ThreadVars *, Packet *, void *); typedef uint32_t (*OutputGetActiveCountFunc)(void); typedef struct OutputModule_ { @@ -65,6 +66,7 @@ typedef struct OutputModule_ { ThreadDeinitFunc ThreadDeinit; PacketLogger PacketLogFunc; + PacketLogger PacketFlushFunc; PacketLogCondition PacketConditionFunc; TxLogger TxLogFunc; TxLoggerCondition TxLogCondition; @@ -81,17 +83,25 @@ typedef struct OutputModule_ { TAILQ_ENTRY(OutputModule_) entries; } OutputModule; +/* struct for packet module and packet sub-module registration */ +typedef struct OutputPacketLoggerFunctions_ { + PacketLogger LogFunc; + PacketLogger FlushFunc; + PacketLogCondition ConditionFunc; + ThreadInitFunc ThreadInitFunc; + ThreadDeinitFunc ThreadDeinitFunc; + ThreadExitPrintStatsFunc ThreadExitPrintStatsFunc; +} OutputPacketLoggerFunctions; + typedef TAILQ_HEAD(OutputModuleList_, OutputModule_) OutputModuleList; extern OutputModuleList output_modules; void OutputRegisterModule(const char *, const char *, OutputInitFunc); void OutputRegisterPacketModule(LoggerId id, const char *name, const char *conf_name, - OutputInitFunc InitFunc, PacketLogger LogFunc, PacketLogCondition ConditionFunc, - ThreadInitFunc, ThreadDeinitFunc); + OutputInitFunc InitFunc, OutputPacketLoggerFunctions *); void OutputRegisterPacketSubModule(LoggerId id, const char *parent_name, const char *name, - const char *conf_name, OutputInitSubFunc InitFunc, PacketLogger LogFunc, - PacketLogCondition ConditionFunc, ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit); + const char *conf_name, OutputInitSubFunc InitFunc, OutputPacketLoggerFunctions *); void OutputRegisterTxModule(LoggerId id, const char *name, const char *conf_name, OutputInitFunc InitFunc, AppProto alproto, TxLogger TxLogFunc, ThreadInitFunc ThreadInit,