]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
logging: convert file logging to non-thread module
authorJason Ish <ish@unx.ca>
Fri, 27 May 2016 17:59:13 +0000 (11:59 -0600)
committerVictor Julien <victor@inliniac.net>
Mon, 19 Sep 2016 11:47:52 +0000 (13:47 +0200)
src/log-file.c
src/output-file.c
src/output-file.h
src/output-json-file.c
src/output.c
src/output.h
src/runmodes.c
src/tm-modules.c
src/tm-threads-common.h

index 402bf936a2764fd0a7f12af0bcd39bcd2d3469ca..5a7e4b87a38911549e347c08f2c4c959e6a0d573 100644 (file)
@@ -455,17 +455,9 @@ int LogFileLogOpenFileCtx(LogFileCtx *file_ctx, const char *filename, const
 
 void TmModuleLogFileLogRegister (void)
 {
-    tmm_modules[TMM_FILELOG].name = MODULE_NAME;
-    tmm_modules[TMM_FILELOG].ThreadInit = LogFileLogThreadInit;
-    tmm_modules[TMM_FILELOG].Func = NULL;
-    tmm_modules[TMM_FILELOG].ThreadExitPrintStats = LogFileLogExitPrintStats;
-    tmm_modules[TMM_FILELOG].ThreadDeinit = LogFileLogThreadDeinit;
-    tmm_modules[TMM_FILELOG].RegisterTests = NULL;
-    tmm_modules[TMM_FILELOG].cap_flags = 0;
-    tmm_modules[TMM_FILELOG].flags = TM_FLAG_LOGAPI_TM;
-
     OutputRegisterFileModule(MODULE_NAME, "file-log", LogFileLogInitCtx,
-            LogFileLogger);
+        LogFileLogger, LogFileLogThreadInit, LogFileLogThreadDeinit,
+        LogFileLogExitPrintStats);
 
     SCLogDebug("registered");
 }
index 7defa39a0b0d612f2e3474dfda98548870502ba0..50075c5b66e215816530580da71b8196d28fbed5 100644 (file)
@@ -51,15 +51,23 @@ typedef struct OutputFileLogger_ {
     struct OutputFileLogger_ *next;
     const char *name;
     TmmId module_id;
+    ThreadInitFunc ThreadInit;
+    ThreadDeinitFunc ThreadDeinit;
+    ThreadExitPrintStatsFunc ThreadExitPrintStats;
 } OutputFileLogger;
 
 static OutputFileLogger *list = NULL;
 
-int OutputRegisterFileLogger(const char *name, FileLogger LogFunc, OutputCtx *output_ctx)
+int OutputRegisterFileLogger(const char *name, FileLogger LogFunc,
+    OutputCtx *output_ctx, ThreadInitFunc ThreadInit,
+    ThreadDeinitFunc ThreadDeinit,
+    ThreadExitPrintStatsFunc ThreadExitPrintStats)
 {
+#if 0
     int module_id = TmModuleGetIdByName(name);
     if (module_id < 0)
         return -1;
+#endif
 
     OutputFileLogger *op = SCMalloc(sizeof(*op));
     if (op == NULL)
@@ -69,7 +77,12 @@ int OutputRegisterFileLogger(const char *name, FileLogger LogFunc, OutputCtx *ou
     op->LogFunc = LogFunc;
     op->output_ctx = output_ctx;
     op->name = name;
+#if 0
     op->module_id = (TmmId) module_id;
+#endif
+    op->ThreadInit = ThreadInit;
+    op->ThreadDeinit = ThreadDeinit;
+    op->ThreadExitPrintStats = ThreadExitPrintStats;
 
     if (list == NULL)
         list = op;
@@ -190,16 +203,9 @@ static TmEcode OutputFileLogThreadInit(ThreadVars *tv, void *initdata, void **da
 
     OutputFileLogger *logger = list;
     while (logger) {
-        TmModule *tm_module = TmModuleGetByName((char *)logger->name);
-        if (tm_module == NULL) {
-            SCLogError(SC_ERR_INVALID_ARGUMENT,
-                    "TmModuleGetByName for %s failed", logger->name);
-            exit(EXIT_FAILURE);
-        }
-
-        if (tm_module->ThreadInit) {
+        if (logger->ThreadInit) {
             void *retptr = NULL;
-            if (tm_module->ThreadInit(tv, (void *)logger->output_ctx, &retptr) == TM_ECODE_OK) {
+            if (logger->ThreadInit(tv, (void *)logger->output_ctx, &retptr) == TM_ECODE_OK) {
                 OutputLoggerThreadStore *ts = SCMalloc(sizeof(*ts));
 /* todo */      BUG_ON(ts == NULL);
                 memset(ts, 0x00, sizeof(*ts));
@@ -233,15 +239,8 @@ static TmEcode OutputFileLogThreadDeinit(ThreadVars *tv, void *thread_data)
     OutputFileLogger *logger = list;
 
     while (logger && store) {
-        TmModule *tm_module = TmModuleGetByName((char *)logger->name);
-        if (tm_module == NULL) {
-            SCLogError(SC_ERR_INVALID_ARGUMENT,
-                    "TmModuleGetByName for %s failed", logger->name);
-            exit(EXIT_FAILURE);
-        }
-
-        if (tm_module->ThreadDeinit) {
-            tm_module->ThreadDeinit(tv, store->thread_data);
+        if (logger->ThreadDeinit) {
+            logger->ThreadDeinit(tv, store->thread_data);
         }
 
         OutputLoggerThreadStore *next_store = store->next;
@@ -261,15 +260,8 @@ static void OutputFileLogExitPrintStats(ThreadVars *tv, void *thread_data)
     OutputFileLogger *logger = list;
 
     while (logger && store) {
-        TmModule *tm_module = TmModuleGetByName((char *)logger->name);
-        if (tm_module == NULL) {
-            SCLogError(SC_ERR_INVALID_ARGUMENT,
-                    "TmModuleGetByName for %s failed", logger->name);
-            exit(EXIT_FAILURE);
-        }
-
-        if (tm_module->ThreadExitPrintStats) {
-            tm_module->ThreadExitPrintStats(tv, store->thread_data);
+        if (logger->ThreadExitPrintStats) {
+            logger->ThreadExitPrintStats(tv, store->thread_data);
         }
 
         logger = logger->next;
index 8b203e267c1d6f804e79182a0b5fb8242d424124..75f3d8860bb53c4785647c0625e80eecf92c34c0 100644 (file)
@@ -37,7 +37,9 @@ typedef int (*FileLogger)(ThreadVars *, void *thread_data, const Packet *, const
  */
 //typedef int (*TxLogCondition)(ThreadVars *, const Packet *);
 
-int OutputRegisterFileLogger(const char *name, FileLogger LogFunc, OutputCtx *);
+int OutputRegisterFileLogger(const char *name, FileLogger LogFunc, OutputCtx *,
+    ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit,
+    ThreadExitPrintStatsFunc ThreadExitPrintStats);
 
 void TmModuleFileLoggerRegister (void);
 
index a06628225a3f25c006bd78f8bfaa349846a94899..273750dc93995cd86b95f50fd52b355f6b70bf77 100644 (file)
@@ -290,28 +290,17 @@ OutputCtx *OutputFileLogInitSub(ConfNode *conf, OutputCtx *parent_ctx)
 
 void TmModuleJsonFileLogRegister (void)
 {
-    tmm_modules[TMM_JSONFILELOG].name = "JsonFileLog";
-    tmm_modules[TMM_JSONFILELOG].ThreadInit = JsonFileLogThreadInit;
-    tmm_modules[TMM_JSONFILELOG].ThreadDeinit = JsonFileLogThreadDeinit;
-    tmm_modules[TMM_JSONFILELOG].flags = TM_FLAG_LOGAPI_TM;
-
     /* register as child of eve-log */
     OutputRegisterFileSubModule("eve-log", "JsonFileLog", "eve-log.files",
-            OutputFileLogInitSub, JsonFileLogger);
+        OutputFileLogInitSub, JsonFileLogger, JsonFileLogThreadInit,
+        JsonFileLogThreadDeinit, NULL);
 }
 
 #else
 
-static TmEcode OutputJsonThreadInit(ThreadVars *t, void *initdata, void **data)
-{
-    SCLogInfo("Can't init JSON output - JSON support was disabled during build.");
-    return TM_ECODE_FAILED;
-}
-
 void TmModuleJsonFileLogRegister (void)
 {
-    tmm_modules[TMM_JSONFILELOG].name = "JsonFileLog";
-    tmm_modules[TMM_JSONFILELOG].ThreadInit = OutputJsonThreadInit;
+    SCLogInfo("Can't register JSON output - JSON support was disabled during build.");
 }
 
 #endif
index 84fe7fab2eed1c3fd88376bed3550bd566c6faef..b1262c06a458fd26b136553e86933f3171df3445 100644 (file)
@@ -344,7 +344,9 @@ void OutputRegisterTxSubModule(const char *parent_name, const char *name,
  */
 void
 OutputRegisterFileModule(const char *name, const char *conf_name,
-    OutputCtx *(*InitFunc)(ConfNode *), FileLogger FileLogFunc)
+    OutputCtx *(*InitFunc)(ConfNode *), FileLogger FileLogFunc,
+    ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit,
+    ThreadExitPrintStatsFunc ThreadExitPrintStats)
 {
     if (unlikely(FileLogFunc == NULL)) {
         goto error;
@@ -359,6 +361,9 @@ OutputRegisterFileModule(const char *name, const char *conf_name,
     module->conf_name = conf_name;
     module->InitFunc = InitFunc;
     module->FileLogFunc = FileLogFunc;
+    module->ThreadInit = ThreadInit;
+    module->ThreadDeinit = ThreadDeinit;
+    module->ThreadExitPrintStats = ThreadExitPrintStats;
     TAILQ_INSERT_TAIL(&output_modules, module, entries);
 
     SCLogDebug("File logger \"%s\" registered.", name);
@@ -379,7 +384,9 @@ error:
 void
 OutputRegisterFileSubModule(const char *parent_name, const char *name,
     const char *conf_name, OutputCtx *(*InitFunc)(ConfNode *, OutputCtx *),
-    FileLogger FileLogFunc)
+    FileLogger FileLogFunc, ThreadInitFunc ThreadInit,
+    ThreadDeinitFunc ThreadDeinit,
+    ThreadExitPrintStatsFunc ThreadExitPrintStats)
 {
     if (unlikely(FileLogFunc == NULL)) {
         goto error;
@@ -395,6 +402,9 @@ OutputRegisterFileSubModule(const char *parent_name, const char *name,
     module->parent_name = parent_name;
     module->InitSubFunc = InitFunc;
     module->FileLogFunc = FileLogFunc;
+    module->ThreadInit = ThreadInit;
+    module->ThreadDeinit = ThreadDeinit;
+    module->ThreadExitPrintStats = ThreadExitPrintStats;
     TAILQ_INSERT_TAIL(&output_modules, module, entries);
 
     SCLogDebug("File logger \"%s\" registered.", name);
index a895fdc310b2c39a322b61a0c24ca3da0e908e4f..72f89c89d7463cb8c354cdf767d800e443e6ffe0 100644 (file)
@@ -117,10 +117,14 @@ void OutputRegisterTxSubModuleWithProgress(const char *parent_name,
     ThreadExitPrintStatsFunc ThreadExitPrintStats);
 
 void OutputRegisterFileModule(const char *name, const char *conf_name,
-    OutputCtx *(*InitFunc)(ConfNode *), FileLogger FileLogFunc);
+    OutputCtx *(*InitFunc)(ConfNode *), FileLogger FileLogFunc,
+    ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit,
+    ThreadExitPrintStatsFunc ThreadExitPrintStats);
 void OutputRegisterFileSubModule(const char *parent_name, const char *name,
     const char *conf_name, OutputCtx *(*InitFunc)(ConfNode *, OutputCtx *),
-    FileLogger FileLogFunc);
+    FileLogger FileLogFunc, ThreadInitFunc ThreadInit,
+    ThreadDeinitFunc ThreadDeinit,
+    ThreadExitPrintStatsFunc ThreadExitPrintStats);
 
 void OutputRegisterFiledataModule(const char *name, const char *conf_name,
     OutputCtx *(*InitFunc)(ConfNode *), FiledataLogger FiledataLogFunc);
index a22436a0969ad73f9adf73873c906a934f40b514..f55dea3ce368912fec92f06828d6a3130184d9ca 100644 (file)
@@ -684,7 +684,9 @@ static void SetupOutput(const char *name, OutputModule *module, OutputCtx *outpu
         }
     } else if (module->FileLogFunc) {
         SCLogDebug("%s is a file logger", module->name);
-        OutputRegisterFileLogger(module->name, module->FileLogFunc, output_ctx);
+        OutputRegisterFileLogger(module->name, module->FileLogFunc, output_ctx,
+            module->ThreadInit, module->ThreadDeinit,
+            module->ThreadExitPrintStats);
 
         /* need one instance of the tx logger module */
         if (file_logger_module == NULL) {
index 48b869bfca732e226f5059a5f63d240c1fd91309..8175a5e65160137b38f665649a82694b88c6daa2 100644 (file)
@@ -216,7 +216,6 @@ const char * TmModuleTmmIdToString(TmmId id)
         CASE_CODE (TMM_LOGTLSLOG);
         CASE_CODE (TMM_LOGTCPDATALOG);
         CASE_CODE (TMM_PCAPLOG);
-        CASE_CODE (TMM_FILELOG);
         CASE_CODE (TMM_FILESTORE);
         CASE_CODE (TMM_DECODEIPFW);
         CASE_CODE (TMM_VERDICTIPFW);
@@ -238,7 +237,6 @@ const char * TmModuleTmmIdToString(TmmId id)
         CASE_CODE (TMM_FILELOGGER);
         CASE_CODE (TMM_FILEDATALOGGER);
         CASE_CODE (TMM_STREAMINGLOGGER);
-        CASE_CODE (TMM_JSONFILELOG);
         CASE_CODE (TMM_OUTPUTJSON);
         CASE_CODE (TMM_FLOWMANAGER);
         CASE_CODE (TMM_FLOWRECYCLER);
index 0544350075f4c6f7e5bf2fdcb5692bfd571bd3cb..76b357a5ea3e1238e26fd748b1a7409c8cc682bd 100644 (file)
@@ -47,7 +47,6 @@ typedef enum {
     TMM_LOGTCPDATALOG,
     TMM_OUTPUTJSON,
     TMM_PCAPLOG,
-    TMM_FILELOG,
     TMM_FILESTORE,
     TMM_DECODEIPFW,
     TMM_VERDICTIPFW,
@@ -71,7 +70,6 @@ typedef enum {
     TMM_FILELOGGER,
     TMM_FILEDATALOGGER,
     TMM_STREAMINGLOGGER,
-    TMM_JSONFILELOG,
     TMM_RECEIVENFLOG,
     TMM_DECODENFLOG,