Go to the documentation of this file.
59 #define MODULE_NAME "JsonDropLog"
61 #define LOG_DROP_ALERTS BIT_U8(1)
62 #define LOG_DROP_VERDICT BIT_U8(2)
75 static int g_droplog_flows_start = 1;
97 if (
p->
flow != NULL) {
99 SCJbSetString(js,
"direction",
"to_server");
101 SCJbSetString(js,
"direction",
"to_client");
105 SCJbOpenObject(js,
"drop");
108 if (PacketIsIPv4(
p)) {
109 const IPV4Hdr *ip4h = PacketGetIPv4(
p);
115 }
else if (PacketIsIPv6(
p)) {
116 const IPV6Hdr *ip6h = PacketGetIPv6(
p);
125 if (PacketIsTCP(
p)) {
126 const TCPHdr *tcph = PacketGetTCP(
p);
141 if (PacketIsUDP(
p)) {
142 const UDPHdr *udph = PacketGetUDP(
p);
147 if (PacketIsICMPv4(
p)) {
150 }
else if (PacketIsICMPv6(
p)) {
158 SCJbSetString(js,
"reason",
str);
195 static TmEcode JsonDropLogThreadInit(
ThreadVars *t,
const void *initdata,
void **data)
203 SCLogDebug(
"Error getting context for EveLogDrop. \"initdata\" argument NULL");
232 memset(aft, 0,
sizeof(*aft));
240 if (drop_ctx != NULL) {
245 static void JsonDropLogDeInitCtxSub(
OutputCtx *output_ctx)
251 SCLogDebug(
"cleaning up sub output_ctx %p", output_ctx);
267 if (drop_ctx == NULL)
272 JsonDropOutputCtxFree(drop_ctx);
278 if (extended != NULL) {
284 if (extended != NULL) {
285 if (strcasecmp(extended,
"start") == 0) {
286 g_droplog_flows_start = 1;
287 }
else if (strcasecmp(extended,
"all") == 0) {
288 g_droplog_flows_start = 0;
291 "'flow' are 'start' and 'all'");
299 }
else if (extended != NULL) {
308 output_ctx->
data = drop_ctx;
309 output_ctx->
DeInit = JsonDropLogDeInitCtxSub;
311 result.
ctx = output_ctx;
328 int r = DropLogJSON(
tv, td,
p);
332 if (!g_droplog_flows_start)
357 SCLogDebug(
"engine is not running in inline mode, so returning");
361 SCLogDebug(
"drop log doesn't log pseudo packets");
369 if (g_droplog_flows_start &&
p->
flow != NULL) {
394 .ConditionFunc = JsonDropLogCondition,
395 .ThreadInitFunc = JsonDropLogThreadInit,
396 .ThreadDeinitFunc = JsonDropLogThreadDeinit,
397 .ThreadExitPrintStatsFunc = NULL,
401 JsonDropLogInitCtxSub, &output_logger_functions);
#define PKT_IS_TOCLIENT(p)
struct SCJsonBuilder SCJsonBuilder
#define TCP_GET_RAW_SEQ(tcph)
bool PacketCheckAction(const Packet *p, const uint8_t a)
#define IPV4_GET_RAW_IPID(ip4h)
int SCConfValIsTrue(const char *val)
Check if a value is true.
#define TCP_GET_RAW_X2(tcph)
int OutputDropLoggerEnable(void)
#define IPV6_GET_RAW_PLEN(ip6h)
const struct Signature_ * s
JsonDropOutputCtx * drop_ctx
#define IPV6_GET_RAW_HLIM(ip6h)
#define IPV4_GET_RAW_IPPROTO(ip4h)
#define PKT_IS_PSEUDOPKT(p)
return 1 if the packet is a pseudo packet
OutputJsonCommonSettings cfg
const char * PacketDropReasonToString(enum PacketDropReason r)
void FreeEveThreadCtx(OutputJsonThreadCtx *ctx)
SCJsonBuilder * CreateEveHeader(const Packet *p, enum SCOutputJsonLogDirection dir, const char *event_type, JsonAddrInfo *addr, OutputJsonCtx *eve_ctx)
#define ICMPV6_GET_SEQ(p)
#define IPV6_GET_RAW_CLASS(ip6h)
void JsonAddrInfoInit(const Packet *p, enum SCOutputJsonLogDirection dir, JsonAddrInfo *addr, OutputJsonCommonSettings *cfg)
struct JsonDropOutputCtx_ JsonDropOutputCtx
void AlertJsonHeader(const Packet *p, const PacketAlert *pa, SCJsonBuilder *js, uint16_t flags, JsonAddrInfo *addr, char *xff_buffer)
OutputJsonThreadCtx * CreateEveThreadCtx(ThreadVars *t, OutputJsonCtx *ctx)
const JsonAddrInfo json_addr_info_zero
#define FLOW_PKT_TOSERVER
#define IPV6_GET_L4PROTO(p)
void OutputJsonBuilderBuffer(ThreadVars *tv, const Packet *p, Flow *f, SCJsonBuilder *js, OutputJsonThreadCtx *ctx)
#define FLOW_TOSERVER_DROP_LOGGED
const char * SCConfNodeLookupChildValue(const SCConfNode *node, const char *name)
Lookup the value of a child configuration node by name.
bool EngineModeIsFirewall(void)
#define TCP_GET_RAW_WINDOW(tcph)
#define ICMPV4_GET_SEQ(p)
#define ACTION_REJECT_DST
#define UDP_GET_RAW_LEN(udph)
#define IPV4_GET_RAW_IPTOS(ip4h)
#define PKT_IS_TOSERVER(p)
#define TCP_ISSET_FLAG_RAW_ACK(tcph)
OutputJsonThreadCtx * ctx
#define TCP_ISSET_FLAG_RAW_RST(tcph)
Per thread variable structure.
#define SCLogWarning(...)
Macro used to log WARNING messages.
#define IPV4_GET_RAW_IPTTL(ip4h)
#define TCP_ISSET_FLAG_RAW_FIN(tcph)
#define ACTION_REJECT_BOTH
void(* DeInit)(struct OutputCtx_ *)
#define IPV6_GET_RAW_FLOW(ip6h)
void OutputRegisterPacketSubModule(LoggerId id, const char *parent_name, const char *name, const char *conf_name, OutputInitSubFunc InitFunc, OutputPacketLoggerFunctions *output_logger_functions)
Register a packet output sub-module.
void EveAddVerdict(SCJsonBuilder *jb, const Packet *p, const uint8_t alert_action)
Build verdict object.
#define SCLogError(...)
Macro used to log ERROR messages.
struct JsonDropLogThread_ JsonDropLogThread
void JsonDropLogRegister(void)
#define FLOW_TOCLIENT_DROP_LOGGED
int EngineModeIsIPS(void)
#define IPV4_GET_RAW_IPLEN(ip4h)
#define TCP_ISSET_FLAG_RAW_SYN(tcph)
#define TCP_GET_RAW_URG_POINTER(tcph)
#define TCP_GET_RAW_ACK(tcph)
#define TCP_ISSET_FLAG_RAW_URG(tcph)
void OutputDropLoggerDisable(void)
#define TCP_ISSET_FLAG_RAW_PUSH(tcph)