namespace snort
{
-template <void (log_func)(const char*, const char*, uint8_t, const char*)>
+template <void (log_func)(const char*, const char*, uint8_t, const char*, const Packet*)>
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<TraceApi::log>(name, log_level, trace_option, fmt, ap);
+ trace_vprintf<TraceApi::log>(name, log_level, trace_option, p, fmt, ap);
}
}
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);
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 <trace_func>
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 <trace_func trace_vprintf = snort::trace_vprintf>
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);
}
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);
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);
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);
}
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);
}
{
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();
}
(*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()));
}
}
{
Stopwatch<SnortClock> 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()));
}
{
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);
}
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()));
}
{
Stopwatch<SnortClock> 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);
::execute<true>(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()));
}
}
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)
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();
};
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;
{ }
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);
}
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;
{ }
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);
}
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