OutputCtx *output_ctx;
struct OutputFlowLogger_ *next;
const char *name;
- TmmId module_id;
+ TmEcode (*ThreadInit)(ThreadVars *, void *, void **);
+ TmEcode (*ThreadDeinit)(ThreadVars *, void *);
+ void (*ThreadExitPrintStats)(ThreadVars *, void *);
} OutputFlowLogger;
static OutputFlowLogger *list = NULL;
-int OutputRegisterFlowLogger(const char *name, FlowLogger LogFunc, OutputCtx *output_ctx)
+int OutputRegisterFlowLogger(const char *name, FlowLogger LogFunc,
+ OutputCtx *output_ctx, ThreadInitFunc ThreadInit,
+ ThreadDeinitFunc ThreadDeinit,
+ ThreadExitPrintStatsFunc ThreadExitPrintStats)
{
- int module_id = TmModuleGetIdByName(name);
- if (module_id < 0)
- return -1;
-
OutputFlowLogger *op = SCMalloc(sizeof(*op));
if (op == NULL)
return -1;
op->LogFunc = LogFunc;
op->output_ctx = output_ctx;
op->name = name;
- op->module_id = (TmmId) module_id;
+ op->ThreadInit = ThreadInit;
+ op->ThreadDeinit = ThreadDeinit;
+ op->ThreadExitPrintStats = ThreadExitPrintStats;
if (list == NULL)
list = op;
BUG_ON(logger->LogFunc == NULL);
SCLogDebug("logger %p", logger);
- //PACKET_PROFILING_TMM_START(p, logger->module_id);
+ //PACKET_PROFILING_LOGGER_START(p, logger->module_id);
logger->LogFunc(tv, store->thread_data, f);
- //PACKET_PROFILING_TMM_END(p, logger->module_id);
+ //PACKET_PROFILING_LOGGER_END(p, logger->module_id);
logger = logger->next;
store = store->next;
OutputFlowLogger *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));
OutputFlowLogger *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;
OutputFlowLogger *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;
*/
//typedef int (*TxLogCondition)(ThreadVars *, const Packet *);
-int OutputRegisterFlowLogger(const char *name, FlowLogger LogFunc, OutputCtx *);
+int OutputRegisterFlowLogger(const char *name, FlowLogger LogFunc,
+ OutputCtx *, ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit,
+ ThreadExitPrintStatsFunc ThreadExitPrintStats);
void OutputFlowShutdown(void);
void TmModuleJsonFlowLogRegister (void)
{
- tmm_modules[TMM_JSONFLOWLOG].name = "JsonFlowLog";
- tmm_modules[TMM_JSONFLOWLOG].ThreadInit = JsonFlowLogThreadInit;
- tmm_modules[TMM_JSONFLOWLOG].ThreadDeinit = JsonFlowLogThreadDeinit;
- tmm_modules[TMM_JSONFLOWLOG].RegisterTests = NULL;
- tmm_modules[TMM_JSONFLOWLOG].cap_flags = 0;
- tmm_modules[TMM_JSONFLOWLOG].flags = TM_FLAG_LOGAPI_TM;
-
/* register as separate module */
OutputRegisterFlowModule("JsonFlowLog", "flow-json-log",
- OutputFlowLogInit, JsonFlowLogger);
+ OutputFlowLogInit, JsonFlowLogger, JsonFlowLogThreadInit,
+ JsonFlowLogThreadDeinit, NULL);
/* also register as child of eve-log */
OutputRegisterFlowSubModule("eve-log", "JsonFlowLog", "eve-log.flow",
- OutputFlowLogInitSub, JsonFlowLogger);
+ OutputFlowLogInitSub, JsonFlowLogger, JsonFlowLogThreadInit,
+ JsonFlowLogThreadDeinit, 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 TmModuleJsonFlowLogRegister (void)
{
- tmm_modules[TMM_JSONFLOWLOG].name = "JsonFlowLog";
- tmm_modules[TMM_JSONFLOWLOG].ThreadInit = OutputJsonThreadInit;
+ SCLogInfo("Can't register JSON output - JSON support was disabled during build.");
}
#endif
/* register as separate module */
OutputRegisterFlowModule("JsonNetFlowLog", "netflow-json-log",
- OutputNetFlowLogInit, JsonNetFlowLogger);
+ OutputNetFlowLogInit, JsonNetFlowLogger, NULL, NULL, NULL);
/* also register as child of eve-log */
OutputRegisterFlowSubModule("eve-log", "JsonNetFlowLog", "eve-log.netflow",
- OutputNetFlowLogInitSub, JsonNetFlowLogger);
+ OutputNetFlowLogInitSub, JsonNetFlowLogger, NULL, NULL, NULL);
}
#else
*/
void
OutputRegisterFlowModule(const char *name, const char *conf_name,
- OutputCtx *(*InitFunc)(ConfNode *), FlowLogger FlowLogFunc)
+ OutputCtx *(*InitFunc)(ConfNode *), FlowLogger FlowLogFunc,
+ ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit,
+ ThreadExitPrintStatsFunc ThreadExitPrintStats)
{
if (unlikely(FlowLogFunc == NULL)) {
goto error;
module->conf_name = conf_name;
module->InitFunc = InitFunc;
module->FlowLogFunc = FlowLogFunc;
+ module->ThreadInit = ThreadInit;
+ module->ThreadDeinit = ThreadDeinit;
+ module->ThreadExitPrintStats = ThreadExitPrintStats;
TAILQ_INSERT_TAIL(&output_modules, module, entries);
SCLogDebug("Flow logger \"%s\" registered.", name);
void
OutputRegisterFlowSubModule(const char *parent_name, const char *name,
const char *conf_name, OutputCtx *(*InitFunc)(ConfNode *, OutputCtx *),
- FlowLogger FlowLogFunc)
+ FlowLogger FlowLogFunc, ThreadInitFunc ThreadInit,
+ ThreadDeinitFunc ThreadDeinit,
+ ThreadExitPrintStatsFunc ThreadExitPrintStats)
{
if (unlikely(FlowLogFunc == NULL)) {
goto error;
module->parent_name = parent_name;
module->InitSubFunc = InitFunc;
module->FlowLogFunc = FlowLogFunc;
+ module->ThreadInit = ThreadInit;
+ module->ThreadDeinit = ThreadDeinit;
+ module->ThreadExitPrintStats = ThreadExitPrintStats;
TAILQ_INSERT_TAIL(&output_modules, module, entries);
SCLogDebug("Flow logger \"%s\" registered.", name);
FiledataLogger FiledataLogFunc);
void OutputRegisterFlowModule(const char *name, const char *conf_name,
- OutputCtx *(*InitFunc)(ConfNode *), FlowLogger FlowLogFunc);
+ OutputCtx *(*InitFunc)(ConfNode *), FlowLogger FlowLogFunc,
+ ThreadInitFunc ThreadInit,
+ ThreadDeinitFunc ThreadDeinit,
+ ThreadExitPrintStatsFunc ThreadExitPrintStats);
void OutputRegisterFlowSubModule(const char *parent_name, const char *name,
const char *conf_name, OutputCtx *(*InitFunc)(ConfNode *, OutputCtx *),
- FlowLogger FlowLogFunc);
+ FlowLogger FlowLogFunc, ThreadInitFunc ThreadInit,
+ ThreadDeinitFunc ThreadDeinit,
+ ThreadExitPrintStatsFunc ThreadExitPrintStats);
void OutputRegisterStreamingModule(const char *name, const char *conf_name,
OutputCtx *(*InitFunc)(ConfNode *), StreamingLogger StreamingLogFunc,
{
/* flow logger doesn't run in the packet path */
if (module->FlowLogFunc) {
- OutputRegisterFlowLogger(module->name, module->FlowLogFunc, output_ctx);
+ OutputRegisterFlowLogger(module->name, module->FlowLogFunc,
+ output_ctx, module->ThreadInit, module->ThreadDeinit,
+ module->ThreadExitPrintStats);
return;
}
/* stats logger doesn't run in the packet path */
CASE_CODE (TMM_STREAMINGLOGGER);
CASE_CODE (TMM_JSONDROPLOG);
CASE_CODE (TMM_JSONFILELOG);
- CASE_CODE (TMM_JSONFLOWLOG);
CASE_CODE (TMM_JSONNETFLOWLOG);
CASE_CODE (TMM_JSONSMTPLOG);
CASE_CODE (TMM_JSONSSHLOG);
TMM_JSONFILELOG,
TMM_RECEIVENFLOG,
TMM_DECODENFLOG,
- TMM_JSONFLOWLOG,
TMM_JSONNETFLOWLOG,
TMM_LOGSTATSLOG,
TMM_JSONTEMPLATELOG,