logging: convert dns log to a non-thread module

pull/2245/head
Jason Ish 10 years ago committed by Victor Julien
parent 99dce740ef
commit 637aa34610

@ -346,16 +346,9 @@ static OutputCtx *LogDnsLogInitCtx(ConfNode *conf)
void TmModuleLogDnsLogRegister (void) void TmModuleLogDnsLogRegister (void)
{ {
tmm_modules[TMM_LOGDNSLOG].name = MODULE_NAME;
tmm_modules[TMM_LOGDNSLOG].ThreadInit = LogDnsLogThreadInit;
tmm_modules[TMM_LOGDNSLOG].ThreadExitPrintStats = LogDnsLogExitPrintStats;
tmm_modules[TMM_LOGDNSLOG].ThreadDeinit = LogDnsLogThreadDeinit;
tmm_modules[TMM_LOGDNSLOG].RegisterTests = NULL;
tmm_modules[TMM_LOGDNSLOG].cap_flags = 0;
tmm_modules[TMM_LOGDNSLOG].flags = TM_FLAG_LOGAPI_TM;
OutputRegisterTxModule(MODULE_NAME, "dns-log", LogDnsLogInitCtx, OutputRegisterTxModule(MODULE_NAME, "dns-log", LogDnsLogInitCtx,
ALPROTO_DNS, LogDnsLogger); ALPROTO_DNS, LogDnsLogger, LogDnsLogThreadInit, LogDnsLogThreadDeinit,
LogDnsLogExitPrintStats);
/* enable the logger for the app layer */ /* enable the logger for the app layer */
SCLogDebug("registered %s", MODULE_NAME); SCLogDebug("registered %s", MODULE_NAME);

@ -74,7 +74,7 @@ void TmModuleLogHttpLogRegister (void)
tmm_modules[TMM_LOGHTTPLOG].flags = TM_FLAG_LOGAPI_TM; tmm_modules[TMM_LOGHTTPLOG].flags = TM_FLAG_LOGAPI_TM;
OutputRegisterTxModule(MODULE_NAME, "http-log", LogHttpLogInitCtx, OutputRegisterTxModule(MODULE_NAME, "http-log", LogHttpLogInitCtx,
ALPROTO_HTTP, LogHttpLogger); ALPROTO_HTTP, LogHttpLogger, NULL, NULL, NULL);
} }
#define LOG_HTTP_MAXN_NODES 64 #define LOG_HTTP_MAXN_NODES 64

@ -593,7 +593,7 @@ void TmModuleJsonHttpLogRegister (void)
/* register as separate module */ /* register as separate module */
OutputRegisterTxModule("JsonHttpLog", "http-json-log", OutputHttpLogInit, OutputRegisterTxModule("JsonHttpLog", "http-json-log", OutputHttpLogInit,
ALPROTO_HTTP, JsonHttpLogger); ALPROTO_HTTP, JsonHttpLogger, NULL, NULL, NULL);
/* also register as child of eve-log */ /* also register as child of eve-log */
OutputRegisterTxSubModule("eve-log", "JsonHttpLog", "eve-log.http", OutputHttpLogInitSub, OutputRegisterTxSubModule("eve-log", "JsonHttpLog", "eve-log.http", OutputHttpLogInitSub,

@ -266,9 +266,8 @@ void TmModuleJsonSmtpLogRegister (void) {
tmm_modules[TMM_JSONSMTPLOG].flags = TM_FLAG_LOGAPI_TM; tmm_modules[TMM_JSONSMTPLOG].flags = TM_FLAG_LOGAPI_TM;
/* register as separate module */ /* register as separate module */
OutputRegisterTxModule("JsonSmtpLog", "smtp-json-log", OutputRegisterTxModule("JsonSmtpLog", "smtp-json-log", OutputSmtpLogInit,
OutputSmtpLogInit, ALPROTO_SMTP, ALPROTO_SMTP, JsonSmtpLogger, NULL, NULL, NULL);
JsonSmtpLogger);
/* also register as child of eve-log */ /* also register as child of eve-log */
OutputRegisterTxSubModule("eve-log", "JsonSmtpLog", OutputRegisterTxSubModule("eve-log", "JsonSmtpLog",

@ -55,17 +55,25 @@ typedef struct OutputTxLogger_ {
uint32_t id; uint32_t id;
int tc_log_progress; int tc_log_progress;
int ts_log_progress; int ts_log_progress;
TmEcode (*ThreadInit)(ThreadVars *, void *, void **);
TmEcode (*ThreadDeinit)(ThreadVars *, void *);
void (*ThreadExitPrintStats)(ThreadVars *, void *);
} OutputTxLogger; } OutputTxLogger;
static OutputTxLogger *list = NULL; static OutputTxLogger *list = NULL;
int OutputRegisterTxLogger(const char *name, AppProto alproto, TxLogger LogFunc, int OutputRegisterTxLogger(const char *name, AppProto alproto, TxLogger LogFunc,
OutputCtx *output_ctx, int tc_log_progress, OutputCtx *output_ctx, int tc_log_progress,
int ts_log_progress, TxLoggerCondition LogCondition) int ts_log_progress, TxLoggerCondition LogCondition,
TmEcode (*ThreadInit)(ThreadVars *, void *, void **),
TmEcode (*ThreadDeinit)(ThreadVars *, void *),
void (*ThreadExitPrintStats)(ThreadVars *, void *))
{ {
#if 0
int module_id = TmModuleGetIdByName(name); int module_id = TmModuleGetIdByName(name);
if (module_id < 0) if (module_id < 0)
return -1; return -1;
#endif
if (!(AppLayerParserIsTxAware(alproto))) { if (!(AppLayerParserIsTxAware(alproto))) {
SCLogNotice("%s logger not enabled: protocol %s is disabled", SCLogNotice("%s logger not enabled: protocol %s is disabled",
@ -83,7 +91,12 @@ int OutputRegisterTxLogger(const char *name, AppProto alproto, TxLogger LogFunc,
op->LogCondition = LogCondition; op->LogCondition = LogCondition;
op->output_ctx = output_ctx; op->output_ctx = output_ctx;
op->name = name; op->name = name;
#if 0
op->module_id = (TmmId) module_id; op->module_id = (TmmId) module_id;
#endif
op->ThreadInit = ThreadInit;
op->ThreadDeinit = ThreadDeinit;
op->ThreadExitPrintStats = ThreadExitPrintStats;
if (tc_log_progress < 0) { if (tc_log_progress < 0) {
op->tc_log_progress = op->tc_log_progress =
@ -260,16 +273,29 @@ static TmEcode OutputTxLogThreadInit(ThreadVars *tv, void *initdata, void **data
OutputTxLogger *logger = list; OutputTxLogger *logger = list;
while (logger) { while (logger) {
TmModule *tm_module = TmModuleGetByName((char *)logger->name);
if (tm_module == NULL) { TmEcode (*ThreadInit)(ThreadVars *, void *, void **) = NULL;
SCLogError(SC_ERR_INVALID_ARGUMENT,
if (logger->ThreadInit) {
SCLogNotice("Logger %s has ThreadInit.", logger->name);
ThreadInit = logger->ThreadInit;
} else {
SCLogNotice("Logger %s DOES NOT have ThreadInit.", logger->name);
}
if (ThreadInit == NULL) {
TmModule *tm_module = TmModuleGetByName((char *)logger->name);
if (tm_module == NULL) {
SCLogError(SC_ERR_INVALID_ARGUMENT,
"TmModuleGetByName for %s failed", logger->name); "TmModuleGetByName for %s failed", logger->name);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
}
ThreadInit = tm_module->ThreadInit;
} }
if (tm_module->ThreadInit) { if (ThreadInit) {
void *retptr = NULL; void *retptr = NULL;
if (tm_module->ThreadInit(tv, (void *)logger->output_ctx, &retptr) == TM_ECODE_OK) { if (ThreadInit(tv, (void *)logger->output_ctx, &retptr) == TM_ECODE_OK) {
OutputLoggerThreadStore *ts = SCMalloc(sizeof(*ts)); OutputLoggerThreadStore *ts = SCMalloc(sizeof(*ts));
/* todo */ BUG_ON(ts == NULL); /* todo */ BUG_ON(ts == NULL);
memset(ts, 0x00, sizeof(*ts)); memset(ts, 0x00, sizeof(*ts));
@ -303,15 +329,24 @@ static TmEcode OutputTxLogThreadDeinit(ThreadVars *tv, void *thread_data)
OutputTxLogger *logger = list; OutputTxLogger *logger = list;
while (logger && store) { while (logger && store) {
TmModule *tm_module = TmModuleGetByName((char *)logger->name); TmEcode (*ThreadDeinit)(ThreadVars *, void *) = NULL;
if (tm_module == NULL) {
SCLogError(SC_ERR_INVALID_ARGUMENT, if (logger->ThreadDeinit) {
ThreadDeinit = logger->ThreadDeinit;
}
if (ThreadDeinit == NULL) {
TmModule *tm_module = TmModuleGetByName((char *)logger->name);
if (tm_module == NULL) {
SCLogError(SC_ERR_INVALID_ARGUMENT,
"TmModuleGetByName for %s failed", logger->name); "TmModuleGetByName for %s failed", logger->name);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
}
ThreadDeinit = tm_module->ThreadDeinit;
} }
if (tm_module->ThreadDeinit) { if (ThreadDeinit) {
tm_module->ThreadDeinit(tv, store->thread_data); ThreadDeinit(tv, store->thread_data);
} }
OutputLoggerThreadStore *next_store = store->next; OutputLoggerThreadStore *next_store = store->next;
@ -331,15 +366,24 @@ static void OutputTxLogExitPrintStats(ThreadVars *tv, void *thread_data)
OutputTxLogger *logger = list; OutputTxLogger *logger = list;
while (logger && store) { while (logger && store) {
TmModule *tm_module = TmModuleGetByName((char *)logger->name); void (*ThreadExitPrintStats)(ThreadVars *, void *) = NULL;
if (tm_module == NULL) {
SCLogError(SC_ERR_INVALID_ARGUMENT, if (logger->ThreadExitPrintStats) {
ThreadExitPrintStats = logger->ThreadExitPrintStats;
}
if (ThreadExitPrintStats == NULL) {
TmModule *tm_module = TmModuleGetByName((char *)logger->name);
if (tm_module == NULL) {
SCLogError(SC_ERR_INVALID_ARGUMENT,
"TmModuleGetByName for %s failed", logger->name); "TmModuleGetByName for %s failed", logger->name);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
}
ThreadExitPrintStats = tm_module->ThreadExitPrintStats;
} }
if (tm_module->ThreadExitPrintStats) { if (ThreadExitPrintStats) {
tm_module->ThreadExitPrintStats(tv, store->thread_data); ThreadExitPrintStats(tv, store->thread_data);
} }
logger = logger->next; logger = logger->next;

@ -38,7 +38,10 @@ typedef int (*TxLoggerCondition)(ThreadVars *, const Packet *, void *state, void
int OutputRegisterTxLogger(const char *name, AppProto alproto, TxLogger LogFunc, int OutputRegisterTxLogger(const char *name, AppProto alproto, TxLogger LogFunc,
OutputCtx *, int tc_log_progress, int ts_log_progress, OutputCtx *, int tc_log_progress, int ts_log_progress,
TxLoggerCondition LogCondition); TxLoggerCondition LogCondition,
TmEcode (*ThreadInit)(ThreadVars *, void *, void **),
TmEcode (*ThreadDeinit)(ThreadVars *, void *),
void (*ThreadExitPrintStats)(ThreadVars *, void *));
void TmModuleTxLoggerRegister (void); void TmModuleTxLoggerRegister (void);

@ -159,7 +159,10 @@ error:
void OutputRegisterTxModuleWrapper(const char *name, const char *conf_name, void OutputRegisterTxModuleWrapper(const char *name, const char *conf_name,
OutputCtx *(*InitFunc)(ConfNode *), AppProto alproto, OutputCtx *(*InitFunc)(ConfNode *), AppProto alproto,
TxLogger TxLogFunc, int tc_log_progress, int ts_log_progress, TxLogger TxLogFunc, int tc_log_progress, int ts_log_progress,
TxLoggerCondition TxLogCondition) TxLoggerCondition TxLogCondition,
TmEcode (*ThreadInit)(ThreadVars *t, void *, void **),
TmEcode (*ThreadDeinit)(ThreadVars *t, void *),
void (*ThreadExitPrintStats)(ThreadVars *, void *))
{ {
if (unlikely(TxLogFunc == NULL)) { if (unlikely(TxLogFunc == NULL)) {
goto error; goto error;
@ -178,6 +181,9 @@ void OutputRegisterTxModuleWrapper(const char *name, const char *conf_name,
module->alproto = alproto; module->alproto = alproto;
module->tc_log_progress = tc_log_progress; module->tc_log_progress = tc_log_progress;
module->ts_log_progress = ts_log_progress; module->ts_log_progress = ts_log_progress;
module->ThreadInit = ThreadInit;
module->ThreadDeinit = ThreadDeinit;
module->ThreadExitPrintStats = ThreadExitPrintStats;
TAILQ_INSERT_TAIL(&output_modules, module, entries); TAILQ_INSERT_TAIL(&output_modules, module, entries);
SCLogDebug("Tx logger \"%s\" registered.", name); SCLogDebug("Tx logger \"%s\" registered.", name);
@ -233,7 +239,8 @@ void OutputRegisterTxModuleWithCondition(const char *name, const char *conf_name
TxLogger TxLogFunc, TxLoggerCondition TxLogCondition) TxLogger TxLogFunc, TxLoggerCondition TxLogCondition)
{ {
OutputRegisterTxModuleWrapper(name, conf_name, InitFunc, alproto, OutputRegisterTxModuleWrapper(name, conf_name, InitFunc, alproto,
TxLogFunc, -1, -1, TxLogCondition); TxLogFunc, -1, -1, TxLogCondition, NULL, NULL,
NULL);
} }
void OutputRegisterTxSubModuleWithCondition(const char *parent_name, void OutputRegisterTxSubModuleWithCondition(const char *parent_name,
@ -260,7 +267,7 @@ void OutputRegisterTxModuleWithProgress(const char *name, const char *conf_name,
{ {
OutputRegisterTxModuleWrapper(name, conf_name, InitFunc, alproto, OutputRegisterTxModuleWrapper(name, conf_name, InitFunc, alproto,
TxLogFunc, tc_log_progress, ts_log_progress, TxLogFunc, tc_log_progress, ts_log_progress,
NULL); NULL, NULL, NULL, NULL);
} }
void OutputRegisterTxSubModuleWithProgress(const char *parent_name, void OutputRegisterTxSubModuleWithProgress(const char *parent_name,
@ -284,10 +291,13 @@ void OutputRegisterTxSubModuleWithProgress(const char *parent_name,
void void
OutputRegisterTxModule(const char *name, const char *conf_name, OutputRegisterTxModule(const char *name, const char *conf_name,
OutputCtx *(*InitFunc)(ConfNode *), AppProto alproto, OutputCtx *(*InitFunc)(ConfNode *), AppProto alproto,
TxLogger TxLogFunc) TxLogger TxLogFunc, TmEcode (*ThreadInit)(ThreadVars *, void *, void **),
TmEcode (*ThreadDeinit)(ThreadVars *, void *),
void (*ThreadExitPrintStats)(ThreadVars *, void *))
{ {
OutputRegisterTxModuleWrapper(name, conf_name, InitFunc, alproto, OutputRegisterTxModuleWrapper(name, conf_name, InitFunc, alproto,
TxLogFunc, -1, -1, NULL); TxLogFunc, -1, -1, NULL, ThreadInit,
ThreadDeinit, ThreadExitPrintStats);
} }
void void

@ -45,6 +45,10 @@ typedef struct OutputModule_ {
OutputCtx *(*InitFunc)(ConfNode *); OutputCtx *(*InitFunc)(ConfNode *);
OutputCtx *(*InitSubFunc)(ConfNode *, OutputCtx *parent_ctx); OutputCtx *(*InitSubFunc)(ConfNode *, OutputCtx *parent_ctx);
TmEcode (*ThreadInit)(ThreadVars *, void *, void **);
TmEcode (*ThreadDeinit)(ThreadVars *, void *);
void (*ThreadExitPrintStats)(ThreadVars *, void *);
PacketLogger PacketLogFunc; PacketLogger PacketLogFunc;
PacketLogCondition PacketConditionFunc; PacketLogCondition PacketConditionFunc;
TxLogger TxLogFunc; TxLogger TxLogFunc;
@ -76,7 +80,10 @@ void OutputRegisterPacketSubModule(const char *parent_name, const char *name,
void OutputRegisterTxModule(const char *name, const char *conf_name, void OutputRegisterTxModule(const char *name, const char *conf_name,
OutputCtx *(*InitFunc)(ConfNode *), AppProto alproto, OutputCtx *(*InitFunc)(ConfNode *), AppProto alproto,
TxLogger TxLogFunc); TxLogger TxLogFunc, TmEcode (*ThreadInit)(ThreadVars *t, void *, void **),
TmEcode (*ThreadDeinit)(ThreadVars *t, void *),
void (*ThreadExitPrintStats)(ThreadVars *, void *));
void OutputRegisterTxSubModule(const char *parent_name, const char *name, void OutputRegisterTxSubModule(const char *parent_name, const char *name,
const char *conf_name, OutputCtx *(*InitFunc)(ConfNode *, OutputCtx *parent_ctx), const char *conf_name, OutputCtx *(*InitFunc)(ConfNode *, OutputCtx *parent_ctx),
AppProto alproto, TxLogger TxLogFunc); AppProto alproto, TxLogger TxLogFunc);

@ -106,7 +106,10 @@ static char *active_runmode;
/* free list for our outputs */ /* free list for our outputs */
typedef struct OutputFreeList_ { typedef struct OutputFreeList_ {
#if 0
TmModule *tm_module; TmModule *tm_module;
#endif
OutputModule *output_module;
OutputCtx *output_ctx; OutputCtx *output_ctx;
TAILQ_ENTRY(OutputFreeList_) entries; TAILQ_ENTRY(OutputFreeList_) entries;
@ -466,7 +469,11 @@ void RunOutputFreeList(void)
{ {
OutputFreeList *output; OutputFreeList *output;
while ((output = TAILQ_FIRST(&output_free_list))) { while ((output = TAILQ_FIRST(&output_free_list))) {
SCLogDebug("output %s %p %p", output->tm_module->name, output, output->output_ctx); #if 0
SCLogNotice("output %s %p %p", output->tm_module->name, output, output->output_ctx);
#endif
SCLogDebug("output %s %p %p", output->output_module->name, output,
output->output_ctx);
if (output->output_ctx != NULL && output->output_ctx->DeInit != NULL) if (output->output_ctx != NULL && output->output_ctx->DeInit != NULL)
output->output_ctx->DeInit(output->output_ctx); output->output_ctx->DeInit(output->output_ctx);
@ -528,16 +535,21 @@ void RunModeShutDown(void)
* the output ctx at shutdown and unix socket reload */ * the output ctx at shutdown and unix socket reload */
static void AddOutputToFreeList(OutputModule *module, OutputCtx *output_ctx) static void AddOutputToFreeList(OutputModule *module, OutputCtx *output_ctx)
{ {
#if 0
TmModule *tm_module = TmModuleGetByName(module->name); TmModule *tm_module = TmModuleGetByName(module->name);
if (tm_module == NULL) { if (tm_module == NULL) {
SCLogError(SC_ERR_INVALID_ARGUMENT, SCLogError(SC_ERR_INVALID_ARGUMENT,
"TmModuleGetByName for %s failed", module->name); "TmModuleGetByName for %s failed", module->name);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
#endif
OutputFreeList *fl_output = SCCalloc(1, sizeof(OutputFreeList)); OutputFreeList *fl_output = SCCalloc(1, sizeof(OutputFreeList));
if (unlikely(fl_output == NULL)) if (unlikely(fl_output == NULL))
return; return;
#if 0
fl_output->tm_module = tm_module; fl_output->tm_module = tm_module;
#endif
fl_output->output_module = module;
fl_output->output_ctx = output_ctx; fl_output->output_ctx = output_ctx;
TAILQ_INSERT_TAIL(&output_free_list, fl_output, entries); TAILQ_INSERT_TAIL(&output_free_list, fl_output, entries);
} }
@ -582,14 +594,17 @@ static void SetupOutput(const char *name, OutputModule *module, OutputCtx *outpu
return; return;
} }
#if 0
TmModule *tm_module = TmModuleGetByName(module->name); TmModule *tm_module = TmModuleGetByName(module->name);
if (tm_module == NULL) { if (tm_module == NULL) {
SCLogError(SC_ERR_INVALID_ARGUMENT, SCLogError(SC_ERR_INVALID_ARGUMENT,
"TmModuleGetByName for %s failed", module->name); "TmModuleGetByName for %s failed", module->name);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
if (strcmp(tmm_modules[TMM_ALERTDEBUGLOG].name, tm_module->name) == 0) /* XXX What to do here? */
if (tm_module != NULL && strcmp(tmm_modules[TMM_ALERTDEBUGLOG].name, tm_module->name) == 0)
debuglog_enabled = 1; debuglog_enabled = 1;
#endif
if (module->PacketLogFunc) { if (module->PacketLogFunc) {
SCLogDebug("%s is a packet logger", module->name); SCLogDebug("%s is a packet logger", module->name);
@ -618,7 +633,9 @@ static void SetupOutput(const char *name, OutputModule *module, OutputCtx *outpu
SCLogDebug("%s is a tx logger", module->name); SCLogDebug("%s is a tx logger", module->name);
OutputRegisterTxLogger(module->name, module->alproto, OutputRegisterTxLogger(module->name, module->alproto,
module->TxLogFunc, output_ctx, module->tc_log_progress, module->TxLogFunc, output_ctx, module->tc_log_progress,
module->ts_log_progress, module->TxLogCondition); module->ts_log_progress, module->TxLogCondition,
module->ThreadInit, module->ThreadDeinit,
module->ThreadExitPrintStats);
/* need one instance of the tx logger module */ /* need one instance of the tx logger module */
if (tx_logger_module == NULL) { if (tx_logger_module == NULL) {
@ -712,7 +729,9 @@ static void SetupOutput(const char *name, OutputModule *module, OutputCtx *outpu
if (unlikely(runmode_output == NULL)) if (unlikely(runmode_output == NULL))
return; return;
runmode_output->name = module->name; runmode_output->name = module->name;
#if 0
runmode_output->tm_module = tm_module; runmode_output->tm_module = tm_module;
#endif
runmode_output->output_ctx = output_ctx; runmode_output->output_ctx = output_ctx;
InsertInRunModeOutputs(runmode_output); InsertInRunModeOutputs(runmode_output);
} }

@ -218,7 +218,6 @@ const char * TmModuleTmmIdToString(TmmId id)
CASE_CODE (TMM_ALERTSYSLOG); CASE_CODE (TMM_ALERTSYSLOG);
CASE_CODE (TMM_LOGDROPLOG); CASE_CODE (TMM_LOGDROPLOG);
CASE_CODE (TMM_RESPONDREJECT); CASE_CODE (TMM_RESPONDREJECT);
CASE_CODE (TMM_LOGDNSLOG);
CASE_CODE (TMM_LOGHTTPLOG); CASE_CODE (TMM_LOGHTTPLOG);
CASE_CODE (TMM_LOGTLSLOG); CASE_CODE (TMM_LOGTLSLOG);
CASE_CODE (TMM_LOGTCPDATALOG); CASE_CODE (TMM_LOGTCPDATALOG);

@ -48,7 +48,6 @@ typedef enum {
TMM_ALERTSYSLOG, TMM_ALERTSYSLOG,
TMM_LOGDROPLOG, TMM_LOGDROPLOG,
TMM_RESPONDREJECT, TMM_RESPONDREJECT,
TMM_LOGDNSLOG,
TMM_LOGHTTPLOG, TMM_LOGHTTPLOG,
TMM_LOGTLSLOG, TMM_LOGTLSLOG,
TMM_LOGTCPDATALOG, TMM_LOGTCPDATALOG,

Loading…
Cancel
Save