suricata
app-layer.h
Go to the documentation of this file.
1/* Copyright (C) 2007-2014 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 Victor Julien <victor@inliniac.net>
22 * \author Anoop Saldanha <anoopsaldanha@gmail.com>
23 *
24 * Application layer handling and protocols implementation
25 */
26
27#ifndef SURICATA_APP_LAYER_H
28#define SURICATA_APP_LAYER_H
29
30#include "threadvars.h"
31#include "decode.h"
32#include "flow.h"
33
34#include "stream-tcp-private.h"
36
37
38#include "rust.h"
39
40#define APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER \
41 (~STREAM_TOSERVER & ~STREAM_TOCLIENT)
42
43/***** L7 layer dispatchers *****/
44
45/**
46 * \brief Handles reassembled tcp stream.
47 */
49 TcpSession *ssn, TcpStream **stream, uint8_t *data, uint32_t data_len, uint8_t flags,
50 enum StreamUpdateDir dir);
51
52/**
53 * \brief Handles an udp chunk.
54 */
56 Packet *p, Flow *f);
57
58/***** Utility *****/
59
60/**
61 * \brief Given a protocol string, returns the corresponding internal
62 * protocol id.
63 *
64 * \param The internal protocol id.
65 */
66AppProto AppLayerGetProtoByName(const char *alproto_name);
67
68/**
69 * \brief Given the internal protocol id, returns a string representation
70 * of the protocol.
71 *
72 * \param alproto The internal protocol id.
73 *
74 * \retval String representation of the protocol.
75 */
76const char *AppLayerGetProtoName(AppProto alproto);
77
79
80/***** Setup/General Registration *****/
81
82/**
83 * \brief Setup the app layer.
84 *
85 * Includes protocol detection setup and the protocol parser setup.
86 *
87 * \retval 0 On success.
88 * \retval -1 On failure.
89 */
90int AppLayerSetup(void);
91
92/**
93 * \brief De initializes the app layer.
94 *
95 * Includes de initializing protocol detection and the protocol parser.
96 */
97int AppLayerDeSetup(void);
98
99/**
100 * \brief Creates a new app layer thread context.
101 *
102 * \retval Pointer to the newly create thread context, on success;
103 * NULL, on failure.
104 */
106
107/**
108 * \brief Destroys the context created by AppLayerGetCtxThread().
109 *
110 * \param tctx Pointer to the thread context to destroy.
111 */
113
114/**
115 * \brief Registers per flow counters for all protocols
116 *
117 */
119
120/***** Profiling *****/
121
123
125
126#ifdef PROFILING
127#define AppLayerProfilingReset(app_tctx) AppLayerProfilingResetInternal(app_tctx)
128#define AppLayerProfilingStore(app_tctx, p) AppLayerProfilingStoreInternal(app_tctx, p)
129#else
130#define AppLayerProfilingReset(app_tctx)
131#define AppLayerProfilingStore(app_tctx, p)
132#endif
133
135
136/***** Unittests *****/
137
138#ifdef UNITTESTS
140#endif
141
142void AppLayerIncTxCounter(ThreadVars *tv, Flow *f, uint64_t step);
147
148static inline const uint8_t *StreamSliceGetData(const StreamSlice *stream_slice)
149{
150 return stream_slice->input;
151}
152
153static inline uint32_t StreamSliceGetDataLen(const StreamSlice *stream_slice)
154{
155 return stream_slice->input_len;
156}
157
158#endif
struct StreamSlice StreamSlice
uint16_t AppProto
void AppLayerProfilingStoreInternal(AppLayerThreadCtx *app_tctx, Packet *p)
Definition app-layer.c:1151
AppProto AppLayerGetProtoByName(const char *alproto_name)
Given a protocol string, returns the corresponding internal protocol id.
Definition app-layer.c:1002
void AppLayerListSupportedProtocols(void)
Definition app-layer.c:1016
void AppLayerIncInternalErrorCounter(ThreadVars *tv, Flow *f)
Definition app-layer.c:187
int AppLayerSetup(void)
Setup the app layer.
Definition app-layer.c:1078
void AppLayerRegisterGlobalCounters(void)
HACK to work around our broken unix manager (re)init loop.
Definition app-layer.c:1159
void AppLayerDestroyCtxThread(AppLayerThreadCtx *tctx)
Destroys the context created by AppLayerGetCtxThread().
Definition app-layer.c:1129
void AppLayerRegisterThreadCounters(ThreadVars *tv)
Registers per flow counters for all protocols.
Definition app-layer.c:1307
void AppLayerIncAllocErrorCounter(ThreadVars *tv, Flow *f)
Definition app-layer.c:171
const char * AppLayerGetProtoName(AppProto alproto)
Given the internal protocol id, returns a string representation of the protocol.
Definition app-layer.c:1009
void AppLayerIncGapErrorCounter(ThreadVars *tv, Flow *f)
Definition app-layer.c:163
void AppLayerIncParserErrorCounter(ThreadVars *tv, Flow *f)
Definition app-layer.c:179
void AppLayerIncTxCounter(ThreadVars *tv, Flow *f, uint64_t step)
Definition app-layer.c:155
int AppLayerHandleTCPData(ThreadVars *tv, TcpReassemblyThreadCtx *ra_ctx, Packet *p, Flow *f, TcpSession *ssn, TcpStream **stream, uint8_t *data, uint32_t data_len, uint8_t flags, enum StreamUpdateDir dir)
Handles reassembled tcp stream.
Definition app-layer.c:711
int AppLayerDeSetup(void)
De initializes the app layer.
Definition app-layer.c:1095
void AppLayerUnittestsRegister(void)
Definition app-layer.c:2891
AppLayerThreadCtx * AppLayerGetCtxThread(void)
Creates a new app layer thread context.
Definition app-layer.c:1108
void AppLayerProfilingResetInternal(AppLayerThreadCtx *app_tctx)
Definition app-layer.c:1146
int AppLayerHandleUdp(ThreadVars *tv, AppLayerThreadCtx *app_tctx, Packet *p, Flow *f)
Handles an udp chunk.
Definition app-layer.c:878
uint8_t flags
Definition decode-gre.h:0
ThreadVars * tv
This is for the app layer in general and it contains per thread context relevant to both the alpd and...
Definition app-layer.c:59
Flow data structure.
Definition flow.h:356
Per thread variable structure.
Definition threadvars.h:58