suricata
stream-tcp-reassemble.h
Go to the documentation of this file.
1 /* Copyright (C) 2007-2010 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 Gurvinder Singh <gurvindersinghdahiya@gmail.com>
23  */
24 
25 #ifndef __STREAM_TCP_REASSEMBLE_H__
26 #define __STREAM_TCP_REASSEMBLE_H__
27 
28 #include "stream-tcp-private.h"
29 #include "stream.h"
30 #include "app-layer-detect-proto.h"
31 #include "stream-tcp-private.h"
32 
33 /** Supported OS list and default OS policy is BSD */
34 enum
35 {
52 };
53 
58 };
59 
60 typedef struct TcpReassemblyThreadCtx_ {
61  void *app_tctx;
62 
64 
65  /** TCP segments which are not being reassembled due to memcap was reached */
67  /** number of streams that stop reassembly because their depth is reached */
69  /** count number of streams with a unrecoverable stream gap (missing pkts) */
71 
72  /** count packet data overlaps */
74  /** count overlaps with different data */
76 
81 
82 #define OS_POLICY_DEFAULT OS_POLICY_BSD
83 
86 int StreamTcpReassembleInit(char);
87 void StreamTcpReassembleFree(char);
92  TcpSession *ssn, TcpStream *stream,
93  Packet *p, enum StreamUpdateDir dir);
94 
95 void StreamTcpCreateTestPacket(uint8_t *, uint8_t, uint8_t, uint8_t);
96 
99 void StreamTcpSetDisableRawReassemblyFlag (TcpSession *ssn, char direction);
100 
102 
104  TcpSession *ssn, TcpStream *stream, Packet *p);
105 int StreamTcpReassembleInsertSegment(ThreadVars *, TcpReassemblyThreadCtx *, TcpStream *, TcpSegment *, Packet *, uint32_t pkt_seq, uint8_t *pkt_data, uint16_t pkt_datalen);
107 
110 
112 
113 void StreamTcpPruneSession(Flow *, uint8_t);
115 
116 void StreamTcpReassembleIncrMemuse(uint64_t size);
117 void StreamTcpReassembleDecrMemuse(uint64_t size);
118 int StreamTcpReassembleSetMemcap(uint64_t size);
119 uint64_t StreamTcpReassembleGetMemcap(void);
120 int StreamTcpReassembleCheckMemcap(uint64_t size);
122 
125 
126 #ifdef UNITTESTS
127 int StreamTcpCheckStreamContents(uint8_t *, uint16_t , TcpStream *);
128 #endif
129 
131 void StreamTcpReassemblySetMinInspectDepth(TcpSession *ssn, int direction, uint32_t depth);
132 
133 static inline bool STREAM_LASTACK_GT_BASESEQ(const TcpStream *stream)
134 {
135  /* last ack not yet initialized */
136  if (STREAM_BASE_OFFSET(stream) == 0 && stream->last_ack == 0)
137  return false;
138  if (SEQ_GT(stream->last_ack, stream->base_seq))
139  return true;
140  return false;
141 }
142 
143 #endif /* __STREAM_TCP_REASSEMBLE_H__ */
144 
void StreamTcpSetSessionNoReassemblyFlag(TcpSession *, char)
disable reassembly
Definition: stream-tcp.c:5786
#define STREAM_BASE_OFFSET(stream)
void StreamTcpReassemblySetMinInspectDepth(TcpSession *ssn, int direction, uint32_t depth)
void StreamTcpReassembleIncrMemuse(uint64_t size)
Function to Increment the memory usage counter for the TCP reassembly segments.
void StreamTcpSegmentReturntoPool(TcpSegment *)
Function to return the segment back to the pool.
void StreamTcpSetOSPolicy(TcpStream *, Packet *)
Function to set the OS policy for the given stream based on the destination of the received packet...
Definition: stream-tcp.c:770
void StreamTcpDisableAppLayer(Flow *f)
uint64_t StreamTcpReassembleGetMemcap(void)
Return memcap value.
void StreamTcpPruneSession(Flow *, uint8_t)
Remove idle TcpSegments from TcpSession.
void StreamTcpCreateTestPacket(uint8_t *, uint8_t, uint8_t, uint8_t)
The Function to create the packet with given payload, which is used to test the reassembly of the eng...
void StreamTcpReassembleFreeThreadCtx(TcpReassemblyThreadCtx *)
TcpReassemblyThreadCtx * StreamTcpReassembleInitThreadCtx(ThreadVars *tv)
void StreamTcpReassembleInitMemuse(void)
int StreamTcpReassembleAppLayer(ThreadVars *tv, TcpReassemblyThreadCtx *ra_ctx, TcpSession *ssn, TcpStream *stream, Packet *p, enum StreamUpdateDir dir)
Update the stream reassembly upon receiving a packet.
struct TcpReassemblyThreadCtx_ TcpReassemblyThreadCtx
int StreamTcpAppLayerIsDisabled(Flow *f)
void StreamTcpSetSessionBypassFlag(TcpSession *)
enable bypass
Definition: stream-tcp.c:5813
int StreamTcpCheckStreamContents(uint8_t *, uint16_t, TcpStream *)
The Function Checks the reassembled stream contents against predefined stream contents according to O...
void StreamTcpSetDisableRawReassemblyFlag(TcpSession *ssn, char direction)
Set the No reassembly flag for the given direction in given TCP session.
Definition: stream-tcp.c:5802
void StreamTcpReassembleDecrMemuse(uint64_t size)
Function to Decrease the memory usage counter for the TCP reassembly segments.
#define SEQ_GT(a, b)
int StreamTcpReassembleInit(char)
void StreamTcpReassembleFree(char)
int StreamTcpReassembleInsertSegment(ThreadVars *, TcpReassemblyThreadCtx *, TcpStream *, TcpSegment *, Packet *, uint32_t pkt_seq, uint8_t *pkt_data, uint16_t pkt_datalen)
int StreamTcpReassembleDepthReached(Packet *p)
check if stream in pkt direction has depth reached
void StreamTcpReturnStreamSegments(TcpStream *)
return all segments in this stream into the pool(s)
int StreamTcpReassembleHandleSegmentHandleData(ThreadVars *tv, TcpReassemblyThreadCtx *ra_ctx, TcpSession *ssn, TcpStream *stream, Packet *p)
Insert a packets TCP data into the stream reassembly engine.
int StreamTcpReassembleSetMemcap(uint64_t size)
Update memcap value.
int StreamTcpReassembleHandleSegment(ThreadVars *, TcpReassemblyThreadCtx *, TcpSession *, TcpStream *, Packet *, PacketQueue *)
int StreamTcpReassembleCheckMemcap(uint64_t size)
Function to Check the reassembly memory usage counter against the allowed max memory usgae for TCP se...
void StreamTcpReassembleRegisterTests(void)
The Function Register the Unit tests to test the reassembly engine for various OS policies...
bool StreamReassembleRawHasDataReady(TcpSession *ssn, Packet *p)
does the stream engine have data to inspect?
Per thread variable structure.
Definition: threadvars.h:57
void StreamTcpReassembleTriggerRawReassembly(TcpSession *, int direction)
Trigger RAW stream reassembly.
TcpSegment * StreamTcpGetSegment(ThreadVars *, TcpReassemblyThreadCtx *)
get a segment from the pool
uint64_t StreamTcpReassembleMemuseGlobalCounter(void)
Flow data structure.
Definition: flow.h:327