From: Jason Ish Date: Fri, 27 May 2016 17:59:13 +0000 (-0600) Subject: logging: convert file logging to non-thread module X-Git-Tag: suricata-3.2beta1~369 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f9bb9029c543d376a81ad59a824d470026caacba;p=thirdparty%2Fsuricata.git logging: convert file logging to non-thread module --- diff --git a/src/log-file.c b/src/log-file.c index 402bf936a2..5a7e4b87a3 100644 --- a/src/log-file.c +++ b/src/log-file.c @@ -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"); } diff --git a/src/output-file.c b/src/output-file.c index 7defa39a0b..50075c5b66 100644 --- a/src/output-file.c +++ b/src/output-file.c @@ -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; diff --git a/src/output-file.h b/src/output-file.h index 8b203e267c..75f3d8860b 100644 --- a/src/output-file.h +++ b/src/output-file.h @@ -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); diff --git a/src/output-json-file.c b/src/output-json-file.c index a06628225a..273750dc93 100644 --- a/src/output-json-file.c +++ b/src/output-json-file.c @@ -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 diff --git a/src/output.c b/src/output.c index 84fe7fab2e..b1262c06a4 100644 --- a/src/output.c +++ b/src/output.c @@ -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); diff --git a/src/output.h b/src/output.h index a895fdc310..72f89c89d7 100644 --- a/src/output.h +++ b/src/output.h @@ -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); diff --git a/src/runmodes.c b/src/runmodes.c index a22436a096..f55dea3ce3 100644 --- a/src/runmodes.c +++ b/src/runmodes.c @@ -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) { diff --git a/src/tm-modules.c b/src/tm-modules.c index 48b869bfca..8175a5e651 100644 --- a/src/tm-modules.c +++ b/src/tm-modules.c @@ -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); diff --git a/src/tm-threads-common.h b/src/tm-threads-common.h index 0544350075..76b357a5ea 100644 --- a/src/tm-threads-common.h +++ b/src/tm-threads-common.h @@ -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,