From: Michael Altizer (mialtize) Date: Thu, 11 Jun 2020 18:24:20 +0000 (+0000) Subject: Merge pull request #2259 in SNORT/snort3 from ~OSERHIIE/snort3:trace_log_pkt_ptr... X-Git-Tag: 3.0.1-5~17 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1bdf498cb7a9e1470af91fce3fd331ff081ccd87;p=thirdparty%2Fsnort3.git Merge pull request #2259 in SNORT/snort3 from ~OSERHIIE/snort3:trace_log_pkt_ptr to master Squashed commit of the following: commit a403e8b5ae47db509d6ede99f8808293ba5bbc26 Author: Oleksandr Serhiienko Date: Thu Jun 11 20:55:55 2020 +0300 trace: remove redundant include commit 53d3063ce49228a25e267d2992b1d22f7edf7f08 Author: Oleksandr Serhiienko Date: Thu Jun 11 19:56:47 2020 +0300 trace: add support for passing in the packet pointer to loggers --- diff --git a/src/main/snort_debug.cc b/src/main/snort_debug.cc index 47ff7cf27..6207658ea 100644 --- a/src/main/snort_debug.cc +++ b/src/main/snort_debug.cc @@ -33,20 +33,20 @@ namespace snort { -template +template void trace_vprintf(const char* name, TraceLevel log_level, - const char* trace_option, const char* fmt, va_list ap) + const char* trace_option, const Packet* p, const char* fmt, va_list ap) { char buf[STD_BUF_SIZE]; vsnprintf(buf, sizeof(buf), fmt, ap); - log_func(buf, name, log_level, trace_option); + log_func(buf, name, log_level, trace_option, p); } void trace_vprintf(const char* name, TraceLevel log_level, - const char* trace_option, const char* fmt, va_list ap) + const char* trace_option, const Packet* p, const char* fmt, va_list ap) { - trace_vprintf(name, log_level, trace_option, fmt, ap); + trace_vprintf(name, log_level, trace_option, p, fmt, ap); } } @@ -74,7 +74,7 @@ struct TestCase static char testing_dump[STD_BUF_SIZE]; static void test_log(const char* log_msg, const char* name, - uint8_t log_level, const char* trace_option) + uint8_t log_level, const char* trace_option, const snort::Packet*) { snprintf(testing_dump, sizeof(testing_dump), "%s:%s:%d: %s", name, trace_option, log_level, log_msg); diff --git a/src/main/snort_debug.h b/src/main/snort_debug.h index a908d3448..a56313ddb 100644 --- a/src/main/snort_debug.h +++ b/src/main/snort_debug.h @@ -52,24 +52,24 @@ static inline bool trace_enabled(const snort::Trace* trace, namespace snort { SO_PUBLIC void trace_vprintf(const char* name, TraceLevel log_level, - const char* trace_option, const char* fmt, va_list); + const char* trace_option, const snort::Packet* p, const char* fmt, va_list); } -using trace_func = void(const char*, TraceLevel, const char*, const char*, va_list); +using trace_func = void(const char*, TraceLevel, const char*, const snort::Packet*, const char*, va_list); template static inline void trace_uprintf(const snort::Trace* trace, - TraceOptionID trace_option_id, const char* fmt, ...) __attribute__((format (printf, 3, 4))); + TraceOptionID trace_option_id, const snort::Packet* p, const char* fmt, ...) __attribute__((format (printf, 4, 5))); template static inline void trace_uprintf(const snort::Trace* trace, - TraceOptionID trace_option_id, const char* fmt, ...) + TraceOptionID trace_option_id, const snort::Packet* p, const char* fmt, ...) { va_list ap; va_start(ap, fmt); const char* trace_option_name = trace->option_name(trace_option_id); - trace_vprintf(trace->module_name(), DEFAULT_TRACE_LOG_LEVEL, trace_option_name, fmt, ap); + trace_vprintf(trace->module_name(), DEFAULT_TRACE_LOG_LEVEL, trace_option_name, p, fmt, ap); va_end(ap); } @@ -92,7 +92,7 @@ static inline void trace_printf(TraceLevel log_level, va_start(ap, fmt); const char* trace_option_name = trace->option_name(trace_option_id); - trace_vprintf(trace->module_name(), log_level, trace_option_name, + trace_vprintf(trace->module_name(), log_level, trace_option_name, p, fmt, ap); va_end(ap); @@ -115,7 +115,7 @@ static inline void trace_printf(TraceLevel log_level, va_start(ap, fmt); const char* trace_option_name = trace->option_name(DEFAULT_TRACE_OPTION_ID); - trace_vprintf(trace->module_name(), log_level, trace_option_name, + trace_vprintf(trace->module_name(), log_level, trace_option_name, p, fmt, ap); va_end(ap); @@ -138,7 +138,7 @@ static inline void trace_printf(const snort::Trace* trace, const char* trace_option_name = trace->option_name(trace_option_id); trace_vprintf(trace->module_name(), DEFAULT_TRACE_LOG_LEVEL, - trace_option_name, fmt, ap); + trace_option_name, p, fmt, ap); va_end(ap); } @@ -160,7 +160,7 @@ static inline void trace_printf(const snort::Trace* trace, const char* trace_option_name = trace->option_name(DEFAULT_TRACE_OPTION_ID); trace_vprintf(trace->module_name(), DEFAULT_TRACE_LOG_LEVEL, - trace_option_name, fmt, ap); + trace_option_name, p, fmt, ap); va_end(ap); } diff --git a/src/managers/inspector_manager.cc b/src/managers/inspector_manager.cc index 9bce7f08b..d42f0a700 100644 --- a/src/managers/inspector_manager.cc +++ b/src/managers/inspector_manager.cc @@ -1062,7 +1062,7 @@ static inline void execute( { timer.reset(); inspector_name = (*prep)->name.c_str(); - trace_ulogf(snort_trace, TRACE_INSPECTOR_MANAGER, "enter %s\n", inspector_name); + trace_ulogf(snort_trace, TRACE_INSPECTOR_MANAGER, p, "enter %s\n", inspector_name); timer.start(); } @@ -1077,7 +1077,7 @@ static inline void execute( (*prep)->handler->eval(p); if ( T ) - trace_ulogf(snort_trace, TRACE_INSPECTOR_MANAGER, + trace_ulogf(snort_trace, TRACE_INSPECTOR_MANAGER, p, "exit %s, elapsed time: %" PRId64" usec\n", inspector_name, TO_USECS(timer.get())); } } @@ -1119,12 +1119,12 @@ void InspectorManager::full_inspection(Packet* p) { Stopwatch timer; const char* inspector_name = flow->gadget->get_alias_name(); - trace_ulogf(snort_trace, TRACE_INSPECTOR_MANAGER, "enter %s\n", inspector_name); + trace_ulogf(snort_trace, TRACE_INSPECTOR_MANAGER, p, "enter %s\n", inspector_name); timer.start(); flow->gadget->eval(p); - trace_ulogf(snort_trace, TRACE_INSPECTOR_MANAGER, + trace_ulogf(snort_trace, TRACE_INSPECTOR_MANAGER, p, "exit %s, elapsed time: %" PRId64 "\n", inspector_name, TO_USECS(timer.get())); } @@ -1151,7 +1151,7 @@ void InspectorManager::internal_execute(Packet* p) { packet_type = p->is_rebuilt() ? "rebuilt" : "raw"; - trace_ulogf(snort_trace, TRACE_INSPECTOR_MANAGER, + trace_ulogf(snort_trace, TRACE_INSPECTOR_MANAGER, p, "start inspection, %s, packet %" PRId64", context %" PRId64"\n", packet_type, p->context->packet_number, p->context->context_num); @@ -1217,7 +1217,7 @@ void InspectorManager::internal_execute(Packet* p) } if ( T ) - trace_ulogf(snort_trace, TRACE_INSPECTOR_MANAGER, + trace_ulogf(snort_trace, TRACE_INSPECTOR_MANAGER, p, "stop inspection, %s, packet %" PRId64", context %" PRId64", total time: %" PRId64" usec\n", packet_type, p->context->packet_number, p->context->context_num, TO_USECS(timer.get())); } @@ -1233,7 +1233,7 @@ void InspectorManager::probe(Packet* p) { Stopwatch timer; const char* packet_type = p->is_rebuilt() ? "rebuilt" : "raw"; - trace_ulogf(snort_trace, TRACE_INSPECTOR_MANAGER, + trace_ulogf(snort_trace, TRACE_INSPECTOR_MANAGER, p, "post detection inspection, %s, packet %" PRId64", context %" PRId64"\n", packet_type, p->context->packet_number, p->context->context_num); @@ -1241,7 +1241,7 @@ void InspectorManager::probe(Packet* p) ::execute(p, fp->probe.vec, fp->probe.num); - trace_ulogf(snort_trace, TRACE_INSPECTOR_MANAGER, + trace_ulogf(snort_trace, TRACE_INSPECTOR_MANAGER, p, "end inspection, %s, packet %" PRId64", context %" PRId64", total time: %" PRId64" usec\n", packet_type, p->context->packet_number, p->context->context_num, TO_USECS(timer.get())); } diff --git a/src/trace/trace_api.cc b/src/trace/trace_api.cc index 2537c4008..4cc2b8e1c 100644 --- a/src/trace/trace_api.cc +++ b/src/trace/trace_api.cc @@ -75,9 +75,9 @@ void TraceApi::thread_reinit(const TraceConfig* trace_config) } void TraceApi::log(const char* log_msg, const char* name, - uint8_t log_level, const char* trace_option) + uint8_t log_level, const char* trace_option, const Packet* p) { - g_trace_logger->log(log_msg, name, log_level, trace_option); + g_trace_logger->log(log_msg, name, log_level, trace_option, p); } void TraceApi::filter(const Packet& p) diff --git a/src/trace/trace_api.h b/src/trace/trace_api.h index 074b30b6d..39836ba7c 100644 --- a/src/trace/trace_api.h +++ b/src/trace/trace_api.h @@ -38,7 +38,7 @@ public: static void thread_term(); static void log(const char* log_msg, const char* name, - uint8_t log_level, const char* trace_option); + uint8_t log_level, const char* trace_option, const Packet* p); static void filter(const Packet& p); static uint8_t get_constraints_generation(); }; diff --git a/src/trace/trace_log.cc b/src/trace/trace_log.cc index fe43ceb19..968d1b09c 100644 --- a/src/trace/trace_log.cc +++ b/src/trace/trace_log.cc @@ -40,7 +40,7 @@ public: StdoutTraceLogger(); void log(const char* log_msg, const char* name, - uint8_t log_level, const char* trace_option) override; + uint8_t log_level, const char* trace_option, const Packet* p) override; private: FILE* file; @@ -51,7 +51,7 @@ StdoutTraceLogger::StdoutTraceLogger() { } void StdoutTraceLogger::log(const char* log_msg, const char* name, - uint8_t log_level, const char* trace_option) + uint8_t log_level, const char* trace_option, const Packet*) { fprintf(file, "%s:%s:%d: %s", name, trace_option, log_level, log_msg); } @@ -64,7 +64,7 @@ public: SyslogTraceLogger(); void log(const char* log_msg, const char* name, - uint8_t log_level, const char* trace_option) override; + uint8_t log_level, const char* trace_option, const Packet* p) override; private: int priority; @@ -75,7 +75,7 @@ SyslogTraceLogger::SyslogTraceLogger() { } void SyslogTraceLogger::log(const char* log_msg, const char* name, - uint8_t log_level, const char* trace_option) + uint8_t log_level, const char* trace_option, const Packet*) { syslog(priority, "%s:%s:%d: %s", name, trace_option, log_level, log_msg); } diff --git a/src/trace/trace_log_base.h b/src/trace/trace_log_base.h index 61dff1311..adc9fbded 100644 --- a/src/trace/trace_log_base.h +++ b/src/trace/trace_log_base.h @@ -24,13 +24,15 @@ namespace snort { +struct Packet; + class TraceLogger { public: virtual ~TraceLogger() = default; virtual void log(const char* log_msg, const char* name, - uint8_t log_level, const char* trace_option) = 0; + uint8_t log_level, const char* trace_option, const Packet* p) = 0; }; class TraceLoggerFactory