suricata
output-json.h
Go to the documentation of this file.
1/* Copyright (C) 2007-2021 Open Information Security Foundation
2 *
3 * You can copy, redistribute or modify this Program under the terms of
4 * the GNU General Public License version 2 as published by the Free
5 * Software Foundation.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 *
12 * You should have received a copy of the GNU General Public License
13 * version 2 along with this program; if not, write to the Free Software
14 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
15 * 02110-1301, USA.
16 */
17
18/**
19 * \file
20 *
21 * \author Tom DeCanio <td@npulsetech.com>
22 */
23
24#ifndef SURICATA_OUTPUT_JSON_H
25#define SURICATA_OUTPUT_JSON_H
26
27#include "suricata-common.h"
28#include "util-buffer.h"
29#include "util-logopenfile.h"
30#include "output.h"
31#include "output-eve-bindgen.h"
32
33#include "app-layer-htp-xff.h"
34
35void OutputJsonRegister(void);
36
37#define JSON_ADDR_LEN 46
38#define JSON_PROTO_LEN 16
39
40/* A struct to contain address info for rendering to JSON. */
41typedef struct JsonAddrInfo_ {
47 // Ports are logged only when provided by the transport protocol.
50
52
53void JsonAddrInfoInit(const Packet *p, enum SCOutputJsonLogDirection dir, JsonAddrInfo *addr);
54
55/* Suggested output buffer size */
56#define JSON_OUTPUT_BUFFER_SIZE 65535
57
58/* helper struct for OutputJSONMemBufferCallback */
60 MemBuffer **buffer; /**< buffer to use & expand as needed */
61 uint32_t expand_by; /**< expand by this size */
63
71
72/*
73 * Global configuration context data
74 */
82
89
90json_t *SCJsonString(const char *val);
91
92void CreateEveFlowId(SCJsonBuilder *js, const Flow *f);
93void EveFileInfo(SCJsonBuilder *js, const File *file, const uint64_t tx_id, const uint16_t flags);
94void EveTcpFlags(uint8_t flags, SCJsonBuilder *js);
95void EvePacket(const Packet *p, SCJsonBuilder *js, uint32_t max_length);
96SCJsonBuilder *CreateEveHeader(const Packet *p, enum SCOutputJsonLogDirection dir,
97 const char *event_type, JsonAddrInfo *addr, OutputJsonCtx *eve_ctx);
98SCJsonBuilder *CreateEveHeaderWithTxId(const Packet *p, enum SCOutputJsonLogDirection dir,
99 const char *event_type, JsonAddrInfo *addr, uint64_t tx_id, OutputJsonCtx *eve_ctx);
100int OutputJSONBuffer(json_t *js, LogFileCtx *file_ctx, MemBuffer **buffer);
102 ThreadVars *tv, const Packet *p, Flow *f, SCJsonBuilder *js, OutputJsonThreadCtx *ctx);
104
106TmEcode JsonLogThreadInit(ThreadVars *t, const void *initdata, void **data);
108
109void EveAddCommonOptions(const OutputJsonCommonSettings *cfg, const Packet *p, const Flow *f,
110 SCJsonBuilder *js, enum SCOutputJsonLogDirection dir);
111int OutputJsonLogFlush(ThreadVars *tv, void *thread_data, const Packet *p);
112void EveAddMetadata(const Packet *p, const Flow *f, SCJsonBuilder *js);
113
114int OutputJSONMemBufferCallback(const char *str, size_t size, void *data);
115
118void JSONFormatAndAddMACAddr(SCJsonBuilder *js, const char *key, const uint8_t *val, bool is_array);
120
121#endif /* SURICATA_OUTPUT_JSON_H */
uint8_t flags
Definition decode-gre.h:0
uint16_t Port
Definition decode.h:218
ThreadVars * tv
struct Thresholds ctx
SCOutputJsonLogDirection
void OutputJsonFlush(OutputJsonThreadCtx *ctx)
#define JSON_ADDR_LEN
Definition output-json.h:37
OutputInitResult OutputJsonInitCtx(SCConfNode *)
Create a new LogFileCtx for "fast" output style.
SCJsonBuilder * CreateEveHeader(const Packet *p, enum SCOutputJsonLogDirection dir, const char *event_type, JsonAddrInfo *addr, OutputJsonCtx *eve_ctx)
void EveTcpFlags(uint8_t flags, SCJsonBuilder *js)
jsonify tcp flags field Only add 'true' fields in an attempt to keep things reasonably compact.
int OutputJsonLogFlush(ThreadVars *tv, void *thread_data, const Packet *p)
void JsonAddrInfoInit(const Packet *p, enum SCOutputJsonLogDirection dir, JsonAddrInfo *addr)
OutputJsonThreadCtx * CreateEveThreadCtx(ThreadVars *t, OutputJsonCtx *ctx)
void EvePacket(const Packet *p, SCJsonBuilder *js, uint32_t max_length)
Jsonify a packet.
struct OutputJsonThreadCtx_ OutputJsonThreadCtx
struct OutputJsonCtx_ OutputJsonCtx
OutputInitResult OutputJsonLogInitSub(SCConfNode *conf, OutputCtx *parent_ctx)
int OutputJSONMemBufferCallback(const char *str, size_t size, void *data)
#define JSON_PROTO_LEN
Definition output-json.h:38
struct OutputJSONMemBufferWrapper_ OutputJSONMemBufferWrapper
const JsonAddrInfo json_addr_info_zero
Definition output-json.c:81
void OutputJsonRegister(void)
Definition output-json.c:83
void EveAddMetadata(const Packet *p, const Flow *f, SCJsonBuilder *js)
int OutputJSONBuffer(json_t *js, LogFileCtx *file_ctx, MemBuffer **buffer)
void EveFileInfo(SCJsonBuilder *js, const File *file, const uint64_t tx_id, const uint16_t flags)
TmEcode JsonLogThreadInit(ThreadVars *t, const void *initdata, void **data)
void JSONFormatAndAddMACAddr(SCJsonBuilder *js, const char *key, const uint8_t *val, bool is_array)
json_t * SCJsonString(const char *val)
Definition output-json.c:96
TmEcode JsonLogThreadDeinit(ThreadVars *t, void *data)
struct JsonAddrInfo_ JsonAddrInfo
void FreeEveThreadCtx(OutputJsonThreadCtx *ctx)
void OutputJsonBuilderBuffer(ThreadVars *tv, const Packet *p, Flow *f, SCJsonBuilder *js, OutputJsonThreadCtx *ctx)
void CreateEveFlowId(SCJsonBuilder *js, const Flow *f)
struct OutputJsonCommonSettings_ OutputJsonCommonSettings
SCJsonBuilder * CreateEveHeaderWithTxId(const Packet *p, enum SCOutputJsonLogDirection dir, const char *event_type, JsonAddrInfo *addr, uint64_t tx_id, OutputJsonCtx *eve_ctx)
void EveAddCommonOptions(const OutputJsonCommonSettings *cfg, const Packet *p, const Flow *f, SCJsonBuilder *js, enum SCOutputJsonLogDirection dir)
Flow data structure.
Definition flow.h:356
char proto[JSON_PROTO_LEN]
Definition output-json.h:46
char src_ip[JSON_ADDR_LEN]
Definition output-json.h:42
char dst_ip[JSON_ADDR_LEN]
Definition output-json.h:43
SCEveFileType * filetype
Definition output-json.h:80
enum LogFileType json_out
Definition output-json.h:77
OutputJsonCommonSettings cfg
Definition output-json.h:78
HttpXFFCfg * xff_cfg
Definition output-json.h:79
LogFileCtx * file_ctx
Definition output-json.h:76
LogFileCtx * file_ctx
Definition output-json.h:85
OutputJsonCtx * ctx
Definition output-json.h:84
Structure used to define an EVE output file type plugin.
Definition output-eve.h:74
Per thread variable structure.
Definition threadvars.h:58
#define str(s)
LogFileType