logging: convert dns log to a non-thread module

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

@ -346,16 +346,9 @@ static OutputCtx *LogDnsLogInitCtx(ConfNode *conf)
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,
ALPROTO_DNS, LogDnsLogger);
ALPROTO_DNS, LogDnsLogger, LogDnsLogThreadInit, LogDnsLogThreadDeinit,
LogDnsLogExitPrintStats);
/* enable the logger for the app layer */
SCLogDebug("registered %s", MODULE_NAME);

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

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

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

@ -55,17 +55,25 @@ typedef struct OutputTxLogger_ {
uint32_t id;
int tc_log_progress;
int ts_log_progress;
TmEcode (*ThreadInit)(ThreadVars *, void *, void **);
TmEcode (*ThreadDeinit)(ThreadVars *, void *);
void (*ThreadExitPrintStats)(ThreadVars *, void *);
} OutputTxLogger;
static OutputTxLogger *list = NULL;
int OutputRegisterTxLogger(const char *name, AppProto alproto, TxLogger LogFunc,
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);
if (module_id < 0)
return -1;
#endif
if (!(AppLayerParserIsTxAware(alproto))) {
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->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 (tc_log_progress < 0) {
op->tc_log_progress =
@ -260,16 +273,29 @@ static TmEcode OutputTxLogThreadInit(ThreadVars *tv, void *initdata, void **data
OutputTxLogger *logger = list;
while (logger) {
TmModule *tm_module = TmModuleGetByName((char *)logger->name);
if (tm_module == NULL) {
SCLogError(SC_ERR_INVALID_ARGUMENT,
TmEcode (*ThreadInit)(ThreadVars *, void *, void **) = NULL;
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);
exit(EXIT_FAILURE);
exit(EXIT_FAILURE);
}
ThreadInit = tm_module->ThreadInit;
}
if (tm_module->ThreadInit) {
if (ThreadInit) {
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));
/* todo */ BUG_ON(ts == NULL);
memset(ts, 0x00, sizeof(*ts));
@ -303,15 +329,24 @@ static TmEcode OutputTxLogThreadDeinit(ThreadVars *tv, void *thread_data)
OutputTxLogger *logger = list;
while (logger && store) {
TmModule *tm_module = TmModuleGetByName((char *)logger->name);
if (tm_module == NULL) {
SCLogError(SC_ERR_INVALID_ARGUMENT,
TmEcode (*ThreadDeinit)(ThreadVars *, void *) = NULL;
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);
exit(EXIT_FAILURE);
exit(EXIT_FAILURE);
}
ThreadDeinit = tm_module->ThreadDeinit;
}
if (tm_module->ThreadDeinit) {
tm_module->ThreadDeinit(tv, store->thread_data);
if (ThreadDeinit) {
ThreadDeinit(tv, store->thread_data);
}
OutputLoggerThreadStore *next_store = store->next;
@ -331,15 +366,24 @@ static void OutputTxLogExitPrintStats(ThreadVars *tv, void *thread_data)
OutputTxLogger *logger = list;
while (logger && store) {
TmModule *tm_module = TmModuleGetByName((char *)logger->name);
if (tm_module == NULL) {
SCLogError(SC_ERR_INVALID_ARGUMENT,
void (*ThreadExitPrintStats)(ThreadVars *, void *) = NULL;
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);
exit(EXIT_FAILURE);
exit(EXIT_FAILURE);
}
ThreadExitPrintStats = tm_module->ThreadExitPrintStats;
}
if (tm_module->ThreadExitPrintStats) {
tm_module->ThreadExitPrintStats(tv, store->thread_data);
if (ThreadExitPrintStats) {
ThreadExitPrintStats(tv, store->thread_data);
}
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,
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);

@ -159,7 +159,10 @@ error:
void OutputRegisterTxModuleWrapper(const char *name, const char *conf_name,
OutputCtx *(*InitFunc)(ConfNode *), AppProto alproto,
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)) {
goto error;
@ -178,6 +181,9 @@ void OutputRegisterTxModuleWrapper(const char *name, const char *conf_name,
module->alproto = alproto;
module->tc_log_progress = tc_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);
SCLogDebug("Tx logger \"%s\" registered.", name);
@ -233,7 +239,8 @@ void OutputRegisterTxModuleWithCondition(const char *name, const char *conf_name
TxLogger TxLogFunc, TxLoggerCondition TxLogCondition)
{
OutputRegisterTxModuleWrapper(name, conf_name, InitFunc, alproto,
TxLogFunc, -1, -1, TxLogCondition);
TxLogFunc, -1, -1, TxLogCondition, NULL, NULL,
NULL);
}
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,
TxLogFunc, tc_log_progress, ts_log_progress,
NULL);
NULL, NULL, NULL, NULL);
}
void OutputRegisterTxSubModuleWithProgress(const char *parent_name,
@ -284,10 +291,13 @@ void OutputRegisterTxSubModuleWithProgress(const char *parent_name,
void
OutputRegisterTxModule(const char *name, const char *conf_name,
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,
TxLogFunc, -1, -1, NULL);
TxLogFunc, -1, -1, NULL, ThreadInit,
ThreadDeinit, ThreadExitPrintStats);
}
void

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

@ -106,7 +106,10 @@ static char *active_runmode;
/* free list for our outputs */
typedef struct OutputFreeList_ {
#if 0
TmModule *tm_module;
#endif
OutputModule *output_module;
OutputCtx *output_ctx;
TAILQ_ENTRY(OutputFreeList_) entries;
@ -466,7 +469,11 @@ void RunOutputFreeList(void)
{
OutputFreeList *output;
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)
output->output_ctx->DeInit(output->output_ctx);
@ -528,16 +535,21 @@ void RunModeShutDown(void)
* the output ctx at shutdown and unix socket reload */
static void AddOutputToFreeList(OutputModule *module, OutputCtx *output_ctx)
{
#if 0
TmModule *tm_module = TmModuleGetByName(module->name);
if (tm_module == NULL) {
SCLogError(SC_ERR_INVALID_ARGUMENT,
"TmModuleGetByName for %s failed", module->name);
exit(EXIT_FAILURE);
}
#endif
OutputFreeList *fl_output = SCCalloc(1, sizeof(OutputFreeList));
if (unlikely(fl_output == NULL))
return;
#if 0
fl_output->tm_module = tm_module;
#endif
fl_output->output_module = module;
fl_output->output_ctx = output_ctx;
TAILQ_INSERT_TAIL(&output_free_list, fl_output, entries);
}
@ -582,14 +594,17 @@ static void SetupOutput(const char *name, OutputModule *module, OutputCtx *outpu
return;
}
#if 0
TmModule *tm_module = TmModuleGetByName(module->name);
if (tm_module == NULL) {
SCLogError(SC_ERR_INVALID_ARGUMENT,
"TmModuleGetByName for %s failed", module->name);
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;
#endif
if (module->PacketLogFunc) {
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);
OutputRegisterTxLogger(module->name, module->alproto,
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 */
if (tx_logger_module == NULL) {
@ -712,7 +729,9 @@ static void SetupOutput(const char *name, OutputModule *module, OutputCtx *outpu
if (unlikely(runmode_output == NULL))
return;
runmode_output->name = module->name;
#if 0
runmode_output->tm_module = tm_module;
#endif
runmode_output->output_ctx = output_ctx;
InsertInRunModeOutputs(runmode_output);
}

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

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

Loading…
Cancel
Save