Wireshark 4.7.4
The Wireshark network protocol analyzer
Loading...
Searching...
No Matches
packet-tcp.h
1/* packet-tcp.h
2 *
3 * Wireshark - Network traffic analyzer
4 * By Gerald Combs <[email protected]>
5 * Copyright 1998 Gerald Combs
6 *
7 * SPDX-License-Identifier: GPL-2.0-or-later
8 */
9
10#ifndef __PACKET_TCP_H__
11#define __PACKET_TCP_H__
12
13#include "ws_symbol_export.h"
14
15#include <epan/conversation.h>
16#include <epan/reassemble.h>
17#include <epan/wmem_scopes.h>
18
19#ifdef __cplusplus
20extern "C" {
21#endif /* __cplusplus */
22
23/* TCP flags */
24#define TH_FIN 0x001
25#define TH_SYN 0x002
26#define TH_RST 0x004
27#define TH_PUSH 0x008
28#define TH_ACK 0x010
29#define TH_URG 0x020
30#define TH_ECE 0x040
31#define TH_CWR 0x080
32#define TH_AE 0x100
33#define TH_RES 0xE00 /* 3 reserved bits */
34#define TH_MASK 0x0FFF
35
36#define IS_TH_FIN(x) (x & TH_FIN)
37#define IS_TH_URG(x) (x & TH_URG)
38
39/* Idea for gt: either x > y, or y is much bigger (assume wrap) */
40#define GT_SEQ(x, y) ((int32_t)((y) - (x)) < 0)
41#define LT_SEQ(x, y) ((int32_t)((x) - (y)) < 0)
42#define GE_SEQ(x, y) ((int32_t)((y) - (x)) <= 0)
43#define LE_SEQ(x, y) ((int32_t)((x) - (y)) <= 0)
44#define EQ_SEQ(x, y) (x) == (y)
45
46/* Stop counting over 100 isolated parts, although it could technically reach 2^31 */
47#define MAX_CONTIGUOUS_SEQUENCES 100
48
49/* mh as in mptcp header */
51
52 bool mh_mpc; /* true if seen an mp_capable option */
53 bool mh_join; /* true if seen an mp_join option */
54 bool mh_dss; /* true if seen a dss */
55 bool mh_add; /* true if seen an MP_ADD */
56 bool mh_remove; /* true if seen an MP_REMOVE */
57 bool mh_prio; /* true if seen an MP_PRIO */
58 bool mh_fail; /* true if seen an MP_FAIL */
59 bool mh_fastclose; /* true if seen a fastclose */
60 bool mh_tcprst; /* true if seen a MP_TCPRST */
61
62 uint8_t mh_capable_flags; /* to get hmac version for instance */
63 uint8_t mh_dss_flags; /* data sequence signal flag */
64 uint32_t mh_dss_ssn; /* DSS Subflow Sequence Number */
65 uint64_t mh_dss_rawdsn; /* DSS Data Sequence Number */
66 uint64_t mh_dss_rawack; /* DSS raw data ack */
67 uint16_t mh_dss_length; /* mapping/DSS length */
68
69 uint64_t mh_key; /* Sender key in MP_CAPABLE */
70 uint32_t mh_token; /* seen in MP_JOIN. Should be a hash of the initial key */
71
72 uint32_t mh_stream; /* this stream index field is included to help differentiate when address/port pairs are reused */
73
74 /* Data Sequence Number of the current segment. It needs to be computed from previous mappings
75 * and as such is not necessarily set
76 */
77 uint64_t mh_rawdsn64;
78 /* DSN formatted according to the wireshark MPTCP options */
79 uint64_t mh_dsn;
80};
81
82/* the tcp header structure, passed to tap listeners */
83typedef struct tcpheader {
84 uint32_t th_rawseq; /* raw value */
85 uint32_t th_seq; /* raw or relative value depending on tcp_relative_seq */
86
87 uint32_t th_rawack; /* raw value */
88 uint32_t th_ack; /* raw or relative value depending on tcp_relative_seq */
89 bool flagkarn; /* XXX - might later become a bit field */
90
91 /* This is the absolute maximum we could find in TCP options (RFC2018, section 3) */
92 #define MAX_TCP_SACK_RANGES 4
93 uint8_t num_sack_ranges;
94 bool th_have_seglen; /* true if th_seglen is valid */
95 uint32_t th_seglen; /* in bytes */
96 uint32_t th_win; /* make it 32 bits so we can handle some scaling */
97 uint16_t th_sport;
98 uint16_t th_dport;
99 uint8_t th_hlen;
100 bool th_use_ace;
101 uint16_t th_flags;
102 uint32_t th_stream; /* this stream index field is included to help differentiate when address/port pairs are reused */
103 address ip_src;
104 address ip_dst;
105 uint32_t sack_left_edge[MAX_TCP_SACK_RANGES];
106 uint32_t sack_right_edge[MAX_TCP_SACK_RANGES];
107
108 /* header for TCP option Multipath Operation */
109 struct mptcpheader *th_mptcp;
110
111 uint32_t th_dup_count; /* capture-level duplicate count (0 = not checked) */
112 uint32_t th_dup_orig_frame; /* frame number of first occurrence in dedup group */
113} tcp_info_t;
114
115/*
116 * Private data passed from the TCP dissector to subdissectors.
117 * NOTE: This structure is used by Export PDU functionality so
118 * make sure that handling is also updated if this structure
119 * changes!
120 */
121struct tcpinfo {
122 uint32_t seq; /* Sequence number of first byte in the data */
123 uint32_t nxtseq; /* Sequence number of first byte after data */
124 uint32_t lastackseq; /* Sequence number of last ack */
125 uint16_t flags; /* TCP flags */
126 uint16_t urgent_pointer; /* Urgent pointer value for the current packet. */
127 uint32_t stream; /* Stream id passed to export PDU */
128 bool is_reassembled; /* This is reassembled data. */
129};
130
131/*
132 * Loop for dissecting PDUs within a TCP stream; assumes that a PDU
133 * consists of a fixed-length chunk of data that contains enough information
134 * to determine the length of the PDU, followed by rest of the PDU.
135 *
136 * The first three arguments are the arguments passed to the dissector
137 * that calls this routine.
138 *
139 * "proto_desegment" is the dissector's flag controlling whether it should
140 * desegment PDUs that cross TCP segment boundaries.
141 *
142 * "fixed_len" is the length of the fixed-length part of the PDU.
143 *
144 * "get_pdu_len()" is a routine called to get the length of the PDU from
145 * the fixed-length part of the PDU; it's passed "pinfo", "tvb", "offset" and
146 * "dissector_data".
147 *
148 * "dissect_pdu()" is the routine to dissect a PDU.
149 */
150WS_DLL_PUBLIC void
151tcp_dissect_pdus(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
152 bool proto_desegment, unsigned fixed_len,
153 unsigned (*get_pdu_len)(packet_info *, tvbuff_t *, int, void*),
154 dissector_t dissect_pdu, void* dissector_data);
155
157tcp_reassembly_table_functions;
158
159extern struct tcp_multisegment_pdu *
160pdu_store_sequencenumber_of_next_pdu(packet_info *pinfo, uint32_t seq, uint32_t nxtpdu, wmem_tree_t *multisegment_pdus);
161
162typedef struct _tcp_unacked_t {
163 struct _tcp_unacked_t *next;
164 uint32_t frame;
165 uint32_t seq;
166 uint32_t nextseq;
167 bool karn_flag; /* indication for the later Karn discovery */
168 bool a_lost_packet; /* true when marked with TCP_A_LOST_PACKET */
169 nstime_t ts;
170} tcp_unacked_t;
171
172struct tcp_acked {
173 uint32_t frame_acked;
174 uint32_t rto_frame;
175 nstime_t ts;
176
177 nstime_t rto_ts; /* Time since previous packet for
178 retransmissions. */
179 uint16_t flags; /* see TCP_A_* in packet-tcp.c */
180 bool partial_ack; /* true when acknowledging data
181 and not a full segment */
182 bool iskarn; /* true when this ACK is ambiguous according to Karn */
183 uint32_t dupack_num; /* dup ack number */
184 uint32_t dupack_frame; /* dup ack to frame # */
185 uint32_t bytes_in_flight; /* number of bytes in flight */
186 uint32_t push_bytes_sent; /* bytes since the last PSH flag */
187
188 uint32_t new_data_seq; /* For segments with old data,
189 where new data starts */
190 uint32_t dup_count; /* capture-level packet occurrence count; 0 = not yet checked */
191 uint32_t dup_orig_frame; /* frame number of the first occurrence of this packet */
192 wmem_array_t *dup_frame_list; /* shared list of all frame numbers in this dedup group */
193};
194
195/* One instance of this structure is created for each pdu that spans across
196 * multiple tcp segments.
197 */
199 uint32_t seq;
200 uint32_t nxtpdu;
201 uint32_t first_frame; /* The frame where this MSP was created (used as key in reassembly tables). */
202 uint32_t last_frame;
203 nstime_t last_frame_time;
204 uint32_t first_frame_with_seq; /* The frame that contains the first frame that matches 'seq'
205 (same as 'first_frame', larger than 'first_frame' for OoO segments) */
206 uint32_t flags;
207#define MSP_FLAGS_REASSEMBLE_ENTIRE_SEGMENT 0x00000001
208/* Whether this MSP is finished and no more segments can be added. */
209#define MSP_FLAGS_GOT_ALL_SEGMENTS 0x00000002
210/* Whether the first segment of this MSP was not yet seen. */
211#define MSP_FLAGS_MISSING_FIRST_SEGMENT 0x00000004
212};
213
214
215/* Represents the MPTCP DSS option mapping part
216 It allows to map relative subflow sequence number (ssn) to global MPTCP sequence numbers
217 under their 64 bits form
218*/
219typedef struct _mptcp_dss_mapping_t {
220
221/* In DSS, SSN are enumerated with relative seq_nb, i.e. starting from 0 */
222
223 uint32_t ssn_low;
224 uint32_t ssn_high;
225
226 uint64_t rawdsn; /* matches the low member of range
227 should be converted to the 64 bits version before being registered
228 */
229 /* to check if mapping was sent before or after packet */
230 uint32_t frame;
231 /* Ideally the dsn should always be registered with the extended version
232 * but it may not be possible if we don't know the 32 MSB of the base_dsn
233 */
234 bool extended_dsn; /* true if MPTCP_DSS_FLAG_DATA_8BYTES */
235} mptcp_dss_mapping_t;
236
237
238/* Structure used in mptcp meta member 'dsn_map'
239 */
241 uint32_t frame; /* packet to look into PINFO_FD_NUM */
242 struct tcp_analysis* subflow; /* in order to get statistics */
243} mptcp_dsn2packet_mapping_t;
244
245
246/* Should basically look like a_tcp_flow_t but for mptcp with 64bit sequence number.
247The meta is specific to a direction of the communication and aggregates information of
248all the subflows
249*/
250typedef struct _mptcp_meta_flow_t {
251
252 uint8_t static_flags; /* remember which fields are set */
253
254 /* flags exchanged between hosts during 3WHS. Gives checksum/extensibility/hmac information */
255 uint8_t flags;
256 uint8_t version; /* negotiated mptcp version */
257 uint64_t base_dsn; /* first data seq number (used by relative sequence numbers) seen. */
258 uint64_t nextseq; /* highest seen nextseq */
259 uint64_t dfin; /* data fin */
260
261 uint64_t key; /* if it was set */
262
263 /* expected token sha1 digest of keys, truncated to 32 most significant bits
264 derived from key. Stored to speed up subflow/MPTCP connection mapping */
265 uint32_t token;
266
267 uint32_t nextseqframe; /* frame number for segment with highest sequence number */
268
269 /* highest seen continuous seq number (without hole in the stream) */
270 uint64_t maxseqtobeacked;
271
272 uint64_t fin; /* frame number of the final dataFIN */
273
274 /* first addresses registered */
275 address ip_src;
276 address ip_dst;
277 uint32_t sport;
278 uint32_t dport;
279} mptcp_meta_flow_t;
280
281/* MPTCP data specific to this subflow direction */
283 /* map DSN to packets
284 * Used when looking for reinjections across subflows
285 */
286 wmem_itree_t *dsn2packet_map;
287
288 /* Map SSN to a DSS mappings
289 * a DSS can map DSN to SSNs possibly over several packets,
290 * hence some packets may have been mapped by previous DSS,
291 * whence the necessity to be able to look for SSN -> DSN */
292 wmem_itree_t *ssn2dsn_mappings;
293 /* meta flow to which it is attached. Helps setting forward and backward meta flow */
294 mptcp_meta_flow_t *meta;
295 uint32_t nonce; /* used only for MP_JOIN */
296 uint8_t static_flags; /* flags stating which of the flow */
297 uint8_t address_id; /* sent during an MP_JOIN */
298};
299
300
301typedef enum {
302 MPTCP_HMAC_NOT_SET = 0,
303 /* this is either SHA1 for MPTCP v0 or sha256 for MPTCP v1 */
304 MPTCP_HMAC_SHA = 1,
305 MPTCP_HMAC_LAST
306} mptcp_hmac_algorithm_t;
307
308
309#define MPTCP_CAPABLE_CRYPTO_MASK 0x3F
310
311#define MPTCP_CHECKSUM_MASK 0x80
312
313/* Information in a flow that is only used when tcp_analyze_seq preference
314 * is enabled, so save the memory when it isn't
315 */
317 tcp_unacked_t *segments;/* List of segments for which we haven't seen an ACK */
318 uint16_t segment_count; /* How many unacked segments we're currently storing */
319 uint8_t lastacklen; /* length of the last fwd ACK packet - 0 means pure ACK */
320
321 bool valid_bif; /* if lost pkts, disable BiF until ACK is recvd */
322 bool push_set_last; /* tracking last time PSH flag was set */
323
324 /*
325 * Handling of contiguous SEQ ranges
326 */
327 bool is_client; /* tracking who initiated the conversation */
328 uint8_t num_contiguous_ranges;
329
330 /*
331 * Handling of SACK blocks
332 * Copied from tcpheader
333 */
334 uint8_t num_sack_ranges;
335 nstime_t lastacktime; /* Time of the last ack packet */
336 uint32_t lastack; /* Last seen ack for the reverse flow */
337 uint32_t lastnondupack; /* frame number of last seen non dupack */
338 uint32_t dupacknum; /* dupack number */
339 bool dupack_thresh; /* dupack threshhold was reached ? */
340 uint32_t nextseq; /* highest seen nextseq */
341 uint32_t maxseqtobeacked;/* highest seen continuous seq number (without hole in the stream) from the fwd party,
342 * this is the maximum seq number that can be acked by the rev party in normal case.
343 * If the rev party sends an ACK beyond this seq number it indicates TCP_A_ACK_LOST_PACKET condition */
344 uint32_t nextseqframe; /* frame number for segment with highest
345 * sequence number
346 */
347 uint32_t push_bytes_sent; /* bytes since the last PSH flag */
348 nstime_t nextseqtime; /* Time of the nextseq packet so we can
349 * distinguish between retransmission,
350 * fast retransmissions and outoforder
351 */
352
353 uint32_t sack_left_edge[MAX_TCP_SACK_RANGES];
354 uint32_t sack_right_edge[MAX_TCP_SACK_RANGES];
355 uint32_t contiguous_ranges[MAX_CONTIGUOUS_SEQUENCES][2];
356
358
359 /* Process info, currently discovered via IPFIX */
360typedef struct tcp_process_info_t {
361 uint32_t process_uid; /* UID of local process */
362 uint32_t process_pid; /* PID of local process */
363 char *username; /* Username of the local process */
364 char *command; /* Local process name + path + args */
365
367
368typedef struct _tcp_flow_t {
369 uint32_t base_seq; /* base seq number (used by relative sequence numbers)*/
370#define TCP_MAX_UNACKED_SEGMENTS 10000 /* The most unacked segments we'll store */
371 uint32_t fin; /* frame number of the final FIN */
372 uint32_t window; /* last seen window */
373 int16_t win_scale; /* -1 is we don't know, -2 is window scaling is not used */
374 int16_t mss; /* maximum segment size, -1 unknown */
375 bool scps_capable; /* flow advertised scps capabilities */
376 uint8_t static_flags; /* true if base seq set */
377 uint16_t maxsizeacked; /* 0 if not yet known */
378/* This tcp flow/session contains only one single PDU and should
379 * be reassembled until the final FIN segment.
380 */
381#define TCP_FLOW_REASSEMBLE_UNTIL_FIN 0x0001
382 uint16_t flags;
383
384 /* The number of data flows seen in that direction */
385 uint16_t flow_count;
386 uint8_t mp_operations; /* tracking of the MPTCP operations */
387 bool is_first_ack; /* indicates if this is the first ACK */
388 bool closing_initiator; /* tracking who is responsible of the connection end */
389 bool closing_initiator_rst; /* tracking who sent TCP RST first */
390 tcp_analyze_seq_flow_info_t* tcp_analyze_seq_info;
391
392 /* see TCP_A_* in packet-tcp.c */
393 uint32_t lastsegmentflags;
394
395 /* The next (largest) sequence number after all segments seen so far.
396 * Valid only on the first pass and used to handle out-of-order segments
397 * during reassembly. */
398 uint32_t maxnextseq;
399
400 /* This tree is indexed by sequence number and keeps track of all
401 * all pdus spanning multiple segments for this flow.
402 */
403 wmem_tree_t *multisegment_pdus;
404
405 /* A sorted list of pending out-of-order segments. */
406 wmem_list_t *ooo_segments;
407 /* A hash map of the same, used on subsequent passes. */
408 wmem_map_t *ooo_segments_map;
409 /* NOTE - the same entries are place in the list and map, so this
410 * is not especially wasteful of memory, but memory could be saved
411 * (at the cost of some performance) with an implementation of a
412 * tree with a custom comparison function. */
413
414 /* Process info, currently discovered via IPFIX */
415 tcp_process_info_t* process_info;
416
417 /* MPTCP subflow intel */
418 struct mptcp_subflow *mptcp_subflow;
419} tcp_flow_t;
420
421/* Stores common information between both hosts of the MPTCP connection*/
423
424 uint16_t mp_flags; /* MPTCP meta analysis related, see MPTCP_META_* in packet-tcp.c */
425 uint8_t hmac_algo; /* hmac decided after negotiation */
426 /* Keep track of the last TCP operations seen in order to avoid false DUP ACKs */
427 uint8_t mp_operations;
428 uint32_t stream; /* Keep track of unique mptcp stream (per MP_CAPABLE handshake) */
429 wmem_list_t* subflows; /* List of subflows (tcp_analysis) */
430
431 /* identifier of the tcp stream that saw the initial 3WHS with MP_CAPABLE option */
432 struct tcp_analysis *master;
433
434 /*
435 * For other subflows, they link the meta via mptcp_subflow_t::meta_flow
436 * according to the validity of the token.
437 */
438 mptcp_meta_flow_t meta_flow[2];
439};
440
442 /* These two structs are managed based on comparing the source
443 * and destination addresses and, if they're equal, comparing
444 * the source and destination ports.
445 *
446 * If the source is greater than the destination, then stuff
447 * sent from src is in flow1.
448 *
449 * If the source is less than the destination, then stuff
450 * sent from src is in flow2.
451 *
452 * XXX - if the addresses and ports are equal, we don't guarantee
453 * the behavior.
454 */
455 tcp_flow_t flow1;
456 tcp_flow_t flow2;
457
458 /* These pointers are set by get_tcp_conversation_data()
459 * fwd point in the same direction as the current packet
460 * and rev in the reverse direction
461 */
462 tcp_flow_t *fwd;
463 tcp_flow_t *rev;
464
465 /* This pointer is NULL or points to a tcp_acked struct if this
466 * packet has "interesting" properties such as being a KeepAlive or
467 * similar
468 */
469 struct tcp_acked *ta;
470
471 /* This structure contains a tree containing all the various ta's
472 * keyed by frame number.
473 */
474 wmem_tree_t *acked_table;
475
476 /* Remember the timestamp of the first frame seen in this tcp
477 * conversation to be able to calculate a relative time compared
478 * to the start of this conversation
479 */
480 nstime_t ts_first;
481
482 /* Remember the timestamp of the most recent SYN in this conversation in
483 * order to calculate the first_rtt below. Not necessarily ts_first, if
484 * the SYN is retransmitted. */
485 nstime_t ts_mru_syn;
486
487 /* If we have the handshake, remember the RTT between the initial SYN
488 * and ACK for use detecting out-of-order segments. */
489 nstime_t ts_first_rtt;
490
491 /* Remember the timestamp of the frame that was last seen in this
492 * tcp conversation to be able to calculate a delta time compared
493 * to previous frame in this conversation
494 */
495 nstime_t ts_prev;
496
497 /* Keep track of tcp stream numbers instead of using the conversation
498 * index (as how it was done before). This prevents gaps in the
499 * stream index numbering
500 */
501 uint32_t stream;
502
503 /* Keep track of packet number within the TCP stream */
504 uint32_t pnum;
505
506 /* allocated only when mptcp enabled
507 * several tcp_analysis may refer to the same mptcp_analysis
508 * can exist without any meta
509 */
510 struct mptcp_analysis* mptcp_analysis;
511
512 /* Remembers the server port on the SYN (or SYN|ACK) packet to
513 * help determine which dissector to call
514 */
515 uint16_t server_port;
516
517 /* Set when the client sends a SYN with data and the cookie in the Fast Open
518 * option.
519 */
520 bool tfo_syn_data;
521
522 /* Remembers which side is currently sending data. */
523 int8_t flow_direction : 2;
524
525 /* Track the TCP conversation completeness, as the capture might
526 * contain all parts of a TCP flow (establishment, data, clearing) or
527 * just some parts if we jumped on the bandwagon of an already established
528 * connection or left before it was terminated explicitly
529 */
530 uint8_t conversation_completeness;
531 /* Track AccECN support */
532 bool had_acc_ecn_setup_syn;
533 bool had_acc_ecn_setup_syn_ack;
534 bool had_acc_ecn_option;
535
536 /* Stores the value as a String to be displayed in the appropriate field */
537 char *conversation_completeness_str;
538};
539
540/* Structure that keeps per packet data. First used to be able
541 * to calculate the time_delta from the last seen frame in this
542 * TCP conversation. Can be extended for future use.
543 */
545 nstime_t ts_del;
546 uint32_t pnum;
547 uint8_t tcp_snd_manual_analysis;
548 bool karn_flag; /* XXX - might later become a bit field */
549};
550
551/* Structure that keeps per packet data. Some operations are cpu-intensive and are
552 * best cached into this structure
553 */
555
556 /* Mapping that covers this packet content */
557 mptcp_dss_mapping_t *mapping;
558
559} mptcp_per_packet_data_t;
560
561
562WS_DLL_PUBLIC void dissect_tcp_payload(tvbuff_t *tvb, packet_info *pinfo, int offset,
563 uint32_t seq, uint32_t nxtseq, uint32_t sport,
564 uint32_t dport, proto_tree *tree,
565 proto_tree *tcp_tree,
566 struct tcp_analysis *tcpd, struct tcpinfo *tcpinfo);
567
568WS_DLL_PUBLIC struct tcp_analysis *get_tcp_conversation_data(conversation_t *conv,
569 packet_info *pinfo);
570
575WS_DLL_PUBLIC struct tcp_analysis *get_tcp_conversation_data_idempotent(conversation_t *conv);
576
577WS_DLL_PUBLIC bool decode_tcp_ports(tvbuff_t *, int, packet_info *, proto_tree *, int, int, struct tcp_analysis *, struct tcpinfo *);
578
591extern void add_tcp_process_info(uint32_t frame_num, address *local_addr, address *remote_addr, uint16_t local_port, uint16_t remote_port, uint32_t uid, uint32_t pid, char *username, char *command);
592
597WS_DLL_PUBLIC uint32_t get_tcp_stream_count(void);
598
603WS_DLL_PUBLIC uint32_t get_mptcp_stream_count(void);
604
605/* Follow Stream functionality shared with HTTP (and SSL?) */
606extern char *tcp_follow_conv_filter(epan_dissect_t *edt, packet_info *pinfo, unsigned *stream, unsigned *sub_stream);
607extern char *tcp_follow_index_filter(unsigned stream, unsigned sub_stream);
608extern char *tcp_follow_address_filter(address *src_addr, address *dst_addr, int src_port, int dst_port);
609
610#ifdef __cplusplus
611}
612#endif /* __cplusplus */
613
614#endif
struct _address address
Holds a network or link-layer address of any supported type.
struct conversation conversation_t
struct epan_dissect epan_dissect_t
Opaque type representing a single packet dissection context.
Definition epan.h:62
struct _packet_info packet_info
Represents the metadata and indexing information for a single captured frame.
struct _wmem_array_t wmem_array_t
Opaque type representing a dynamically resizable array in the wmem system.
Definition wmem_array.h:42
struct _wmem_tree_t wmem_itree_t
Alias for a wmem interval tree.
Definition wmem_interval_tree.h:46
struct _wmem_list_t wmem_list_t
Opaque type representing a scoped, doubly-linked list in the wmem system.
Definition wmem_list.h:42
struct _wmem_map_t wmem_map_t
Opaque type representing a wmem-managed hash map.
Definition wmem_map.h:46
struct _wmem_tree_t wmem_tree_t
Opaque type representing a red-black tree in the wmem system.
Definition wmem_tree.h:49
Definition packet-tcp.h:240
Definition packet-tcp.h:219
Definition packet-tcp.h:250
Definition packet-tcp.h:368
Definition packet-tcp.h:162
Definition packet-tcp.h:422
Definition packet-tcp.h:554
Definition packet-tcp.h:282
Definition packet-tcp.h:50
Definition nstime.h:26
Table of functions for a reassembly table.
Definition reassemble.h:151
Definition stream.c:41
Definition packet-tcp.h:172
Definition packet-tcp.h:441
Definition packet-tcp.h:316
Definition packet-tcp.h:198
Definition packet-tcp.h:544
Definition packet-tcp.h:360
Definition packet-tcp.h:83
Definition packet-tcp.h:121