Go to the documentation of this file.
56 static SCJsonBuilder *CreateEveHeaderFromFlow(
const Flow *f)
59 char srcip[46] = {0}, dstip[46] = {0};
62 SCJsonBuilder *jb = SCJbNewObject();
73 PrintInet(AF_INET, (
const void *)&(f->
src.addr_data32[0]), srcip,
sizeof(srcip));
74 PrintInet(AF_INET, (
const void *)&(f->
dst.addr_data32[0]), dstip,
sizeof(dstip));
83 PrintInet(AF_INET, (
const void *)&(f->
dst.addr_data32[0]), srcip,
sizeof(srcip));
84 PrintInet(AF_INET, (
const void *)&(f->
src.addr_data32[0]), dstip,
sizeof(dstip));
94 SCJbSetString(jb,
"timestamp", timebuf);
101 json_object_set_new(js,
"sensor_id", json_integer(sensor_id));
106 SCJbSetString(jb,
"in_iface", f->
livedev->
dev);
113 SCJbOpenArray(jb,
"vlan");
114 SCJbAppendUint(jb, f->
vlan_id[0]);
116 SCJbAppendUint(jb, f->
vlan_id[1]);
119 SCJbAppendUint(jb, f->
vlan_id[2]);
125 SCJbSetString(jb,
"src_ip", srcip);
132 SCJbSetUint(jb,
"src_port", sp);
135 SCJbSetString(jb,
"dest_ip", dstip);
142 SCJbSetUint(jb,
"dest_port", dp);
151 SCJbSetString(jb,
"proto",
proto);
157 SCJbSetUint(jb,
"icmp_type", f->
icmp_s.type);
158 SCJbSetUint(jb,
"icmp_code", f->
icmp_s.code);
160 SCJbSetUint(jb,
"response_icmp_type", f->
icmp_d.type);
161 SCJbSetUint(jb,
"response_icmp_code", f->
icmp_d.code);
165 SCJbSetUint(jb,
"spi", f->
esp.spi);
200 SCJbOpenObject(js,
"bypassed");
215 SCJbSetString(js,
"start", timebuf1);
218 static void EveExceptionPolicyLog(SCJsonBuilder *js, uint16_t flag)
222 SCJbSetString(js,
"target",
224 SCJbSetString(js,
"policy",
231 SCJbSetString(js,
"target",
233 SCJbSetString(js,
"policy",
240 SCJbSetString(js,
"target",
242 SCJbSetString(js,
"policy",
252 SCJbSetString(js,
"policy",
261 SCJbSetString(js,
"policy",
268 SCJbSetString(js,
"target",
270 SCJbSetString(js,
"policy",
281 SCJbOpenObject(jb,
"flow");
286 SCJbSetString(jb,
"end", timebuf2);
289 SCJbSetUint(jb,
"age", age);
295 switch (flow_state) {
309 #ifdef CAPTURE_OFFLOAD
310 case FLOW_STATE_CAPTURE_BYPASSED:
317 SCLogDebug(
"invalid flow state: %d, contact developers", flow_state);
320 const char *reason = NULL;
322 reason =
"tcp_reuse";
332 SCJbSetString(jb,
"reason", reason);
349 SCJbOpenArray(jb,
"exception_policy");
357 SCJbSetUint(jb,
"tx_cnt", tx_id);
367 if (f->
proto == IPPROTO_TCP) {
368 SCJbOpenObject(jb,
"tcp");
373 snprintf(hexflags,
sizeof(hexflags),
"%02x",
375 SCJbSetString(jb,
"tcp_flags", hexflags);
377 snprintf(hexflags,
sizeof(hexflags),
"%02x",
379 SCJbSetString(jb,
"tcp_flags_ts", hexflags);
381 snprintf(hexflags,
sizeof(hexflags),
"%02x",
383 SCJbSetString(jb,
"tcp_flags_tc", hexflags);
389 if (tcp_state != NULL)
390 SCJbSetString(jb,
"state", tcp_state);
418 MemBufferReset(thread->
buffer);
420 SCJsonBuilder *jb = CreateEveHeaderFromFlow(f);
425 EveFlowLogJSON(thread, jb, f);
struct Flow_::@118::@124 icmp_s
void CreateIsoTimeString(const SCTime_t ts, char *str, size_t size)
void EveAddFlow(Flow *f, SCJsonBuilder *js)
OutputJsonCommonSettings cfg
FlowStorageId GetFlowBypassInfoID(void)
void EveAddAppProto(Flow *f, SCJsonBuilder *js)
TmEcode JsonLogThreadInit(ThreadVars *t, const void *initdata, void **data)
const char * AppProtoToString(AppProto alproto)
Maps the ALPROTO_*, to its string equivalent.
#define EXCEPTION_TARGET_FLAG_APPLAYER_ERROR
bool SCProtoNameValid(uint16_t proto)
Function to check if the received protocol number is valid and do we have corresponding name entry fo...
void EveTcpFlags(const uint8_t flags, SCJsonBuilder *js)
jsonify tcp flags field Only add 'true' fields in an attempt to keep things reasonably compact.
const char * known_proto[256]
void OutputJsonBuilderBuffer(ThreadVars *tv, const Packet *p, Flow *f, SCJsonBuilder *js, OutputJsonThreadCtx *ctx)
void CreateEveFlowId(SCJsonBuilder *js, const Flow *f)
const char * ExceptionPolicyTargetFlagToString(uint8_t target_flag)
void JsonFlowLogRegister(void)
OutputInitResult OutputJsonLogInitSub(SCConfNode *conf, OutputCtx *parent_ctx)
void OutputRegisterFlowSubModule(LoggerId id, const char *parent_name, const char *name, const char *conf_name, OutputInitSubFunc InitFunc, FlowLogger FlowLogFunc, ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit)
Register a flow output sub-module.
@ FLOW_STATE_LOCAL_BYPASSED
#define EXCEPTION_TARGET_FLAG_DEFRAG_MEMCAP
enum ExceptionPolicy ExceptionPolicyTargetPolicy(uint8_t target_flag)
#define JB_SET_STRING(jb, key, val)
struct Flow_::@120::@126 icmp_d
void EveAddCommonOptions(const OutputJsonCommonSettings *cfg, const Packet *p, const Flow *f, SCJsonBuilder *js, enum SCOutputJsonLogDirection dir)
union FlowAddress_::@117 address
Per thread variable structure.
const char * PrintInet(int af, const void *src, char *dst, socklen_t size)
#define FLOW_WRONG_THREAD
#define JB_SET_TRUE(jb, key)
struct Flow_::@118::@125 esp
#define FLOW_END_FLAG_TCPREUSE
#define FLOW_END_FLAG_EMERGENCY
#define STREAMTCP_STREAM_FLAG_HAS_GAP
#define EXCEPTION_TARGET_FLAG_REASSEMBLY_MEMCAP
void * FlowGetStorageById(const Flow *f, FlowStorageId id)
#define EXCEPTION_TARGET_FLAG_MIDSTREAM
uint8_t applied_exception_policy
#define EXCEPTION_TARGET_FLAG_SESSION_MEMCAP
struct LiveDevice_ * livedev
#define FLOW_ACTION_ACCEPT
const char * ExceptionPolicyEnumToString(enum ExceptionPolicy policy, bool is_json)
#define FLOW_END_FLAG_SHUTDOWN
#define EXCEPTION_TARGET_FLAG_FLOW_MEMCAP
const char * StreamTcpStateAsString(const enum TcpState state)
uint16_t vlan_id[VLAN_MAX_LAYERS]
int FlowHasAlerts(const Flow *f)
Check if flow has alerts.
#define FLOW_END_FLAG_TIMEOUT
TmEcode JsonLogThreadDeinit(ThreadVars *t, void *data)
AppProto alproto
application level protocol
#define FLOW_END_FLAG_FORCED
#define FLOW_DIR_REVERSED
uint64_t AppLayerParserGetTxCnt(const Flow *f, void *alstate)
#define DEBUG_VALIDATE_BUG_ON(exp)