logging: convert fast log to a non-thread module

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

@ -522,5 +522,5 @@ void TmModuleAlertDebugLogRegister (void)
tmm_modules[TMM_ALERTDEBUGLOG].flags = TM_FLAG_LOGAPI_TM; tmm_modules[TMM_ALERTDEBUGLOG].flags = TM_FLAG_LOGAPI_TM;
OutputRegisterPacketModule(MODULE_NAME, "alert-debug", OutputRegisterPacketModule(MODULE_NAME, "alert-debug",
AlertDebugLogInitCtx, AlertDebugLogLogger, AlertDebugLogCondition); AlertDebugLogInitCtx, AlertDebugLogLogger, AlertDebugLogCondition, NULL, NULL, NULL);
} }

@ -78,16 +78,10 @@ int AlertFastLogger(ThreadVars *tv, void *data, const Packet *p);
void TmModuleAlertFastLogRegister (void) void TmModuleAlertFastLogRegister (void)
{ {
tmm_modules[TMM_ALERTFASTLOG].name = MODULE_NAME; OutputRegisterPacketModule(MODULE_NAME, "fast", AlertFastLogInitCtx,
tmm_modules[TMM_ALERTFASTLOG].ThreadInit = AlertFastLogThreadInit; AlertFastLogger, AlertFastLogCondition, AlertFastLogThreadInit,
tmm_modules[TMM_ALERTFASTLOG].ThreadExitPrintStats = AlertFastLogExitPrintStats; AlertFastLogThreadDeinit, AlertFastLogExitPrintStats);
tmm_modules[TMM_ALERTFASTLOG].ThreadDeinit = AlertFastLogThreadDeinit; AlertFastLogRegisterTests();
tmm_modules[TMM_ALERTFASTLOG].RegisterTests = AlertFastLogRegisterTests;
tmm_modules[TMM_ALERTFASTLOG].cap_flags = 0;
tmm_modules[TMM_ALERTFASTLOG].flags = TM_FLAG_LOGAPI_TM;
OutputRegisterPacketModule(MODULE_NAME, "fast",
AlertFastLogInitCtx, AlertFastLogger, AlertFastLogCondition);
} }
typedef struct AlertFastLogThread_ { typedef struct AlertFastLogThread_ {

@ -421,7 +421,7 @@ void TmModuleAlertSyslogRegister (void)
tmm_modules[TMM_ALERTSYSLOG].flags = TM_FLAG_LOGAPI_TM; tmm_modules[TMM_ALERTSYSLOG].flags = TM_FLAG_LOGAPI_TM;
OutputRegisterPacketModule(MODULE_NAME, "syslog", OutputRegisterPacketModule(MODULE_NAME, "syslog",
AlertSyslogInitCtx, AlertSyslogLogger, AlertSyslogCondition); AlertSyslogInitCtx, AlertSyslogLogger, AlertSyslogCondition, NULL, NULL, NULL);
#endif /* !OS_WIN32 */ #endif /* !OS_WIN32 */
} }

@ -245,7 +245,7 @@ void TmModuleUnified2AlertRegister(void)
//OutputRegisterModule(MODULE_NAME, "unified2-alert", Unified2AlertInitCtx); //OutputRegisterModule(MODULE_NAME, "unified2-alert", Unified2AlertInitCtx);
OutputRegisterPacketModule(MODULE_NAME, "unified2-alert", OutputRegisterPacketModule(MODULE_NAME, "unified2-alert",
Unified2AlertInitCtx, Unified2Logger, Unified2Condition); Unified2AlertInitCtx, Unified2Logger, Unified2Condition, NULL, NULL, NULL);
} }
/** /**

@ -506,5 +506,5 @@ void TmModuleLogDropLogRegister (void)
tmm_modules[TMM_LOGDROPLOG].flags = TM_FLAG_LOGAPI_TM; tmm_modules[TMM_LOGDROPLOG].flags = TM_FLAG_LOGAPI_TM;
OutputRegisterPacketModule(MODULE_NAME, "drop", LogDropLogInitCtx, OutputRegisterPacketModule(MODULE_NAME, "drop", LogDropLogInitCtx,
LogDropLogger, LogDropCondition); LogDropLogger, LogDropCondition, NULL, NULL, NULL);
} }

@ -748,7 +748,7 @@ void TmModuleJsonAlertLogRegister (void)
tmm_modules[TMM_JSONALERTLOG].flags = TM_FLAG_LOGAPI_TM; tmm_modules[TMM_JSONALERTLOG].flags = TM_FLAG_LOGAPI_TM;
OutputRegisterPacketModule(MODULE_NAME, "alert-json-log", OutputRegisterPacketModule(MODULE_NAME, "alert-json-log",
JsonAlertLogInitCtx, JsonAlertLogger, JsonAlertLogCondition); JsonAlertLogInitCtx, JsonAlertLogger, JsonAlertLogCondition, NULL, NULL, NULL);
OutputRegisterPacketSubModule("eve-log", MODULE_NAME, "eve-log.alert", OutputRegisterPacketSubModule("eve-log", MODULE_NAME, "eve-log.alert",
JsonAlertLogInitCtxSub, JsonAlertLogger, JsonAlertLogCondition); JsonAlertLogInitCtxSub, JsonAlertLogger, JsonAlertLogCondition);
} }

@ -436,7 +436,7 @@ void TmModuleJsonDropLogRegister (void)
tmm_modules[TMM_JSONDROPLOG].flags = TM_FLAG_LOGAPI_TM; tmm_modules[TMM_JSONDROPLOG].flags = TM_FLAG_LOGAPI_TM;
OutputRegisterPacketModule(MODULE_NAME, "drop-json-log", OutputRegisterPacketModule(MODULE_NAME, "drop-json-log",
JsonDropLogInitCtx, JsonDropLogger, JsonDropLogCondition); JsonDropLogInitCtx, JsonDropLogger, JsonDropLogCondition, NULL, NULL, NULL);
OutputRegisterPacketSubModule("eve-log", MODULE_NAME, "eve-log.drop", OutputRegisterPacketSubModule("eve-log", MODULE_NAME, "eve-log.drop",
JsonDropLogInitCtxSub, JsonDropLogger, JsonDropLogCondition); JsonDropLogInitCtxSub, JsonDropLogger, JsonDropLogCondition);
} }

@ -325,7 +325,7 @@ void TmModuleJsonSshLogRegister (void)
/* register as separate module */ /* register as separate module */
OutputRegisterPacketModule("JsonSshLog", "ssh-json-log", OutputSshLogInit, OutputRegisterPacketModule("JsonSshLog", "ssh-json-log", OutputSshLogInit,
JsonSshLogger, JsonSshCondition); JsonSshLogger, JsonSshCondition, NULL, NULL, NULL);
/* also register as child of eve-log */ /* also register as child of eve-log */
OutputRegisterPacketSubModule("eve-log", "JsonSshLog", "eve-log.ssh", OutputSshLogInitSub, OutputRegisterPacketSubModule("eve-log", "JsonSshLog", "eve-log.ssh", OutputSshLogInitSub,

@ -49,15 +49,23 @@ typedef struct OutputPacketLogger_ {
struct OutputPacketLogger_ *next; struct OutputPacketLogger_ *next;
const char *name; const char *name;
TmmId module_id; TmmId module_id;
ThreadInitFunc ThreadInit;
ThreadDeinitFunc ThreadDeinit;
ThreadExitPrintStatsFunc ThreadExitPrintStats;
} OutputPacketLogger; } OutputPacketLogger;
static OutputPacketLogger *list = NULL; static OutputPacketLogger *list = NULL;
int OutputRegisterPacketLogger(const char *name, PacketLogger LogFunc, PacketLogCondition ConditionFunc, OutputCtx *output_ctx) int OutputRegisterPacketLogger(const char *name, PacketLogger LogFunc,
PacketLogCondition ConditionFunc, OutputCtx *output_ctx,
ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit,
ThreadExitPrintStatsFunc ThreadExitPrintStats)
{ {
#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
OutputPacketLogger *op = SCMalloc(sizeof(*op)); OutputPacketLogger *op = SCMalloc(sizeof(*op));
if (op == NULL) if (op == NULL)
@ -68,7 +76,12 @@ int OutputRegisterPacketLogger(const char *name, PacketLogger LogFunc, PacketLog
op->ConditionFunc = ConditionFunc; op->ConditionFunc = ConditionFunc;
op->output_ctx = output_ctx; op->output_ctx = output_ctx;
op->name = name; op->name = name;
op->ThreadInit = ThreadInit;
op->ThreadDeinit = ThreadDeinit;
op->ThreadExitPrintStats = ThreadExitPrintStats;
#if 0
op->module_id = (TmmId) module_id; op->module_id = (TmmId) module_id;
#endif
if (list == NULL) if (list == NULL)
list = op; list = op;
@ -131,16 +144,9 @@ static TmEcode OutputPacketLogThreadInit(ThreadVars *tv, void *initdata, void **
OutputPacketLogger *logger = list; OutputPacketLogger *logger = list;
while (logger) { while (logger) {
TmModule *tm_module = TmModuleGetByName((char *)logger->name); if (logger->ThreadInit) {
if (tm_module == NULL) {
SCLogError(SC_ERR_INVALID_ARGUMENT,
"TmModuleGetByName for %s failed", logger->name);
exit(EXIT_FAILURE);
}
if (tm_module->ThreadInit) {
void *retptr = NULL; 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)); 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));
@ -174,15 +180,8 @@ static TmEcode OutputPacketLogThreadDeinit(ThreadVars *tv, void *thread_data)
OutputPacketLogger *logger = list; OutputPacketLogger *logger = list;
while (logger && store) { while (logger && store) {
TmModule *tm_module = TmModuleGetByName((char *)logger->name); if (logger->ThreadDeinit) {
if (tm_module == NULL) { logger->ThreadDeinit(tv, store->thread_data);
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);
} }
OutputLoggerThreadStore *next_store = store->next; OutputLoggerThreadStore *next_store = store->next;
@ -203,15 +202,8 @@ static void OutputPacketLogExitPrintStats(ThreadVars *tv, void *thread_data)
OutputPacketLogger *logger = list; OutputPacketLogger *logger = list;
while (logger && store) { while (logger && store) {
TmModule *tm_module = TmModuleGetByName((char *)logger->name); if (logger->ThreadExitPrintStats) {
if (tm_module == NULL) { logger->ThreadExitPrintStats(tv, store->thread_data);
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);
} }
logger = logger->next; logger = logger->next;

@ -37,7 +37,8 @@ typedef int (*PacketLogger)(ThreadVars *, void *thread_data, const Packet *);
typedef int (*PacketLogCondition)(ThreadVars *, const Packet *); typedef int (*PacketLogCondition)(ThreadVars *, const Packet *);
int OutputRegisterPacketLogger(const char *name, PacketLogger LogFunc, int OutputRegisterPacketLogger(const char *name, PacketLogger LogFunc,
PacketLogCondition ConditionFunc, OutputCtx *); PacketLogCondition ConditionFunc, OutputCtx *, ThreadInitFunc,
ThreadDeinitFunc, ThreadExitPrintStatsFunc);
void TmModulePacketLoggerRegister (void); void TmModulePacketLoggerRegister (void);

@ -65,8 +65,8 @@ 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 **), ThreadInitFunc ThreadInit,
TmEcode (*ThreadDeinit)(ThreadVars *, void *), ThreadDeinitFunc ThreadDeinit,
void (*ThreadExitPrintStats)(ThreadVars *, void *)) void (*ThreadExitPrintStats)(ThreadVars *, void *))
{ {
#if 0 #if 0

@ -39,8 +39,7 @@ 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 **), ThreadInitFunc, ThreadDeinitFunc,
TmEcode (*ThreadDeinit)(ThreadVars *, void *),
void (*ThreadExitPrintStats)(ThreadVars *, void *)); void (*ThreadExitPrintStats)(ThreadVars *, void *));
void TmModuleTxLoggerRegister (void); void TmModuleTxLoggerRegister (void);

@ -86,7 +86,9 @@ error:
void void
OutputRegisterPacketModule(const char *name, const char *conf_name, OutputRegisterPacketModule(const char *name, const char *conf_name,
OutputCtx *(*InitFunc)(ConfNode *), OutputCtx *(*InitFunc)(ConfNode *),
PacketLogger PacketLogFunc, PacketLogCondition PacketConditionFunc) PacketLogger PacketLogFunc, PacketLogCondition PacketConditionFunc,
ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit,
ThreadExitPrintStatsFunc ThreadExitPrintStats)
{ {
if (unlikely(PacketLogFunc == NULL || PacketConditionFunc == NULL)) { if (unlikely(PacketLogFunc == NULL || PacketConditionFunc == NULL)) {
goto error; goto error;
@ -102,6 +104,9 @@ OutputRegisterPacketModule(const char *name, const char *conf_name,
module->InitFunc = InitFunc; module->InitFunc = InitFunc;
module->PacketLogFunc = PacketLogFunc; module->PacketLogFunc = PacketLogFunc;
module->PacketConditionFunc = PacketConditionFunc; module->PacketConditionFunc = PacketConditionFunc;
module->ThreadInit = ThreadInit;
module->ThreadDeinit = ThreadDeinit;
module->ThreadExitPrintStats = ThreadExitPrintStats;
TAILQ_INSERT_TAIL(&output_modules, module, entries); TAILQ_INSERT_TAIL(&output_modules, module, entries);
SCLogDebug("Packet logger \"%s\" registered.", name); SCLogDebug("Packet logger \"%s\" registered.", name);

@ -73,7 +73,8 @@ void OutputRegisterModule(const char *, const char *, OutputCtx *(*)(ConfNode *)
void OutputRegisterPacketModule(const char *name, const char *conf_name, void OutputRegisterPacketModule(const char *name, const char *conf_name,
OutputCtx *(*InitFunc)(ConfNode *), OutputCtx *(*InitFunc)(ConfNode *),
PacketLogger LogFunc, PacketLogCondition ConditionFunc); PacketLogger LogFunc, PacketLogCondition ConditionFunc,
ThreadInitFunc, ThreadDeinitFunc, ThreadExitPrintStatsFunc);
void OutputRegisterPacketSubModule(const char *parent_name, const char *name, void OutputRegisterPacketSubModule(const char *parent_name, const char *name,
const char *conf_name, OutputCtx *(*InitFunc)(ConfNode *, OutputCtx *), const char *conf_name, OutputCtx *(*InitFunc)(ConfNode *, OutputCtx *),
PacketLogger LogFunc, PacketLogCondition ConditionFunc); PacketLogger LogFunc, PacketLogCondition ConditionFunc);

@ -607,9 +607,10 @@ static void SetupOutput(const char *name, OutputModule *module, OutputCtx *outpu
#endif #endif
if (module->PacketLogFunc) { if (module->PacketLogFunc) {
SCLogDebug("%s is a packet logger", module->name); SCLogNotice("%s is a packet logger", module->name);
OutputRegisterPacketLogger(module->name, module->PacketLogFunc, OutputRegisterPacketLogger(module->name, module->PacketLogFunc,
module->PacketConditionFunc, output_ctx); module->PacketConditionFunc, output_ctx, module->ThreadInit,
module->ThreadDeinit, module->ThreadExitPrintStats);
/* need one instance of the packet logger module */ /* need one instance of the packet logger module */
if (pkt_logger_module == NULL) { if (pkt_logger_module == NULL) {

@ -211,7 +211,6 @@ const char * TmModuleTmmIdToString(TmmId id)
CASE_CODE (TMM_DECODEPCAPFILE); CASE_CODE (TMM_DECODEPCAPFILE);
CASE_CODE (TMM_RECEIVEPFRING); CASE_CODE (TMM_RECEIVEPFRING);
CASE_CODE (TMM_DECODEPFRING); CASE_CODE (TMM_DECODEPFRING);
CASE_CODE (TMM_ALERTFASTLOG);
CASE_CODE (TMM_ALERTUNIFIED2ALERT); CASE_CODE (TMM_ALERTUNIFIED2ALERT);
CASE_CODE (TMM_ALERTPRELUDE); CASE_CODE (TMM_ALERTPRELUDE);
CASE_CODE (TMM_ALERTDEBUGLOG); CASE_CODE (TMM_ALERTDEBUGLOG);

@ -36,6 +36,10 @@
#define TM_FLAG_MANAGEMENT_TM 0x20 #define TM_FLAG_MANAGEMENT_TM 0x20
#define TM_FLAG_COMMAND_TM 0x40 #define TM_FLAG_COMMAND_TM 0x40
typedef TmEcode (*ThreadInitFunc)(ThreadVars *, void *, void **);
typedef TmEcode (*ThreadDeinitFunc)(ThreadVars *, void *);
typedef void (*ThreadExitPrintStatsFunc)(ThreadVars *, void *);
typedef struct TmModule_ { typedef struct TmModule_ {
char *name; char *name;

@ -41,7 +41,6 @@ typedef enum {
TMM_DECODEPCAPFILE, TMM_DECODEPCAPFILE,
TMM_RECEIVEPFRING, TMM_RECEIVEPFRING,
TMM_DECODEPFRING, TMM_DECODEPFRING,
TMM_ALERTFASTLOG,
TMM_ALERTUNIFIED2ALERT, TMM_ALERTUNIFIED2ALERT,
TMM_ALERTPRELUDE, TMM_ALERTPRELUDE,
TMM_ALERTDEBUGLOG, TMM_ALERTDEBUGLOG,

Loading…
Cancel
Save