Wireshark  4.3.0
The Wireshark network protocol analyzer
packet-tcpcl.h
1 /* packet-tcpcl.h
2  * References:
3  * RFC 7242: https://tools.ietf.org/html/rfc7242
4  * RFC 9174: https://www.rfc-editor.org/rfc/rfc9174.html
5  *
6  * TCPCLv4 portions copyright 2019-2021, Brian Sipos <brian.sipos@gmail.com>
7  * Copyright 2006-2007 The MITRE Corporation.
8  * All Rights Reserved.
9  * Approved for Public Release; Distribution Unlimited.
10  * Tracking Number 07-0090.
11  *
12  * The US Government will not be charged any license fee and/or royalties
13  * related to this software. Neither name of The MITRE Corporation; nor the
14  * names of its contributors may be used to endorse or promote products
15  * derived from this software without specific prior written permission.
16  *
17  * Wireshark - Network traffic analyzer
18  * By Gerald Combs <gerald@wireshark.org>
19  * Copyright 1998 Gerald Combs
20  *
21  * SPDX-License-Identifier: GPL-2.0-or-later
22  */
23 #ifndef PACKET_TCPCL_H
24 #define PACKET_TCPCL_H
25 
26 #include <ws_symbol_export.h>
27 #include <epan/tvbuff.h>
28 #include <epan/proto.h>
29 
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33 
43 /* TCP Convergence Layer v3 - Message Types */
44 typedef enum {
45  TCPCLV3_TYPE_MASK = 0xf0,
46  TCPCLV3_DATA_SEGMENT = 0x10,
47  TCPCLV3_ACK_SEGMENT = 0x20,
48  TCPCLV3_REFUSE_BUNDLE = 0x30,
49  TCPCLV3_KEEP_ALIVE = 0x40,
50  TCPCLV3_SHUTDOWN = 0x50,
51  TCPCLV3_LENGTH = 0x60,
52 } Tcpclv3MessageType;
53 
54 /* TCP Convergence Layer - Contact Header Flags */
55 typedef enum {
56  TCPCLV3_BUNDLE_ACK_FLAG = 0x01,
57  TCPCLV3_REACTIVE_FRAG_FLAG = 0x02,
58  TCPCLV3_CONNECTOR_RCVR_FLAG = 0x04,
59 } Tcpclv3ContactFlag;
60 
61 /* TCP Convergence Layer - Data Segment Flags */
62 typedef enum {
63  TCPCLV3_DATA_FLAGS = 0x03,
64  TCPCLV3_DATA_END_FLAG = 0x01,
65  TCPCLV3_DATA_START_FLAG = 0x02,
66 } Tcpclv3DataSegmentFlag;
67 
68 /* TCP Convergence Layer - Shutdown Segment Flags */
69 typedef enum {
70  TCPCLV3_SHUTDOWN_FLAGS = 0x03,
71  TCPCLV3_SHUTDOWN_REASON = 0x02,
72  TCPCLV3_SHUTDOWN_DELAY = 0x01,
73 } Tcpclv3ShutdownFlag;
74 
75 /* REFUSE-BUNDLE Reason-Codes */
76 typedef enum {
77  TCPCLV3_REFUSE_REASON_UNKNOWN = 0x00,
78  TCPCLV3_REFUSE_REASON_RX_COMPLETE = 0x01,
79  TCPCLV3_REFUSE_REASON_RX_EXHAUSTED = 0x02,
80  TCPCLV3_REFUSE_REASON_RX_RETRANSMIT = 0x03,
81  /* 0x4-0x7 - Unassigned
82  * 0x8-0xf - Reserved for future Use */
83 } Tcpclv3RefuseType;
84 
85 typedef enum {
86  TCPCLV4_MSGTYPE_INVALID = 0x00,
87  TCPCLV4_MSGTYPE_XFER_SEGMENT = 0x01,
88  TCPCLV4_MSGTYPE_XFER_ACK = 0x02,
89  TCPCLV4_MSGTYPE_XFER_REFUSE = 0x03,
90  TCPCLV4_MSGTYPE_KEEPALIVE = 0x04,
91  TCPCLV4_MSGTYPE_SESS_TERM = 0x05,
92  TCPCLV4_MSGTYPE_MSG_REJECT = 0x06,
93  TCPCLV4_MSGTYPE_SESS_INIT = 0x07,
94 } Tcpclv4MessageType;
95 
96 typedef enum {
97  TCPCLV4_SESSEXT_INVALID = 0x00,
98 } Tcpclv4SessExtenionType;
99 
100 typedef enum {
101  TCPCLV4_XFEREXT_INVALID = 0x00,
102  TCPCLV4_XFEREXT_TRANSFER_LEN = 0x01,
103 } Tcpclv4XferExtenionType;
104 
105 typedef enum {
106  TCPCLV4_CONTACT_FLAG_CANTLS = 0x01,
107 } Tcpclv4ContactFlag;
108 
109 typedef enum {
110  TCPCLV4_SESS_TERM_FLAG_REPLY = 0x01,
111 } Tcpclv4SessTermFlag;
112 
113 typedef enum {
114  TCPCLV4_TRANSFER_FLAG_START = 0x02,
115  TCPCLV4_TRANSFER_FLAG_END = 0x01,
116 } Tcpclv4TransferFlag;
117 
118 typedef enum {
119  TCPCLV4_EXTENSION_FLAG_CRITICAL = 0x01,
120 } Tcpclv4ExtensionFlag;
121 
123 typedef struct {
125  guint32 frame_num;
127  gint src_ix;
131 
132 typedef struct {
135 
138 
140  guint64 *total_length;
142 
143 typedef struct {
147  guint32 port;
148 
150  gboolean chdr_missing;
154  guint8 version;
156  gboolean can_tls;
157 
161  guint16 keepalive;
163  guint64 segment_mru;
165  guint64 transfer_mru;
166 
171 
174 
177 } tcpcl_peer_t;
178 
180 typedef struct {
185 
188  guint8 *version;
192  gboolean session_use_tls;
195 
197  gboolean sess_negotiated;
199  guint16 sess_keepalive;
201 
203 typedef struct {
204  tcpcl_conversation_t *convo;
208  gboolean is_contact;
216 
224 WS_DLL_PUBLIC
225 tcpcl_dissect_ctx_t * tcpcl_dissect_ctx_get(tvbuff_t *tvb, packet_info *pinfo, const gint offset);
226 
227 #ifdef __cplusplus
228 }
229 #endif
230 
231 #endif /* PACKET_TCPCL_H */
232 
233 /*
234  * Editor modelines - https://www.wireshark.org/tools/modelines.html
235  *
236  * Local variables:
237  * c-basic-offset: 4
238  * tab-width: 8
239  * indent-tabs-mode: nil
240  * End:
241  *
242  * vi: set shiftwidth=4 tabstop=8 expandtab:
243  * :indentSize=4:tabSize=8:noTabs=true:
244  */
Definition: address.h:56
Definition: packet_info.h:44
Definition: wmem_list.c:23
Definition: wmem_map.c:44
Persistent state associated with a TCP conversation.
Definition: packet-tcpcl.h:180
gboolean session_use_tls
Negotiated use of TLS from can_tls of the peers.
Definition: packet-tcpcl.h:192
gboolean contact_negotiated
True when contact negotiation is finished.
Definition: packet-tcpcl.h:190
tcpcl_peer_t * passive
Information for the passive side of the session.
Definition: packet-tcpcl.h:184
guint8 * version
Definition: packet-tcpcl.h:188
gboolean sess_negotiated
True when session negotiation is finished.
Definition: packet-tcpcl.h:197
guint16 sess_keepalive
Negotiated session keepalive.
Definition: packet-tcpcl.h:199
tcpcl_peer_t * active
Information for the active side of the session.
Definition: packet-tcpcl.h:182
tcpcl_frame_loc_t * session_tls_start
The last frame before TLS handshake.
Definition: packet-tcpcl.h:194
Context for a single packet dissection.
Definition: packet-tcpcl.h:203
tcpcl_frame_loc_t * cur_loc
Dissection cursor.
Definition: packet-tcpcl.h:206
tcpcl_peer_t * rx_peer
The receiving peer.
Definition: packet-tcpcl.h:212
tcpcl_peer_t * tx_peer
The sending peer.
Definition: packet-tcpcl.h:210
tvbuff_t * xferload
Possible transfer payload.
Definition: packet-tcpcl.h:214
gboolean is_contact
True if the dissection is on a contact header.
Definition: packet-tcpcl.h:208
Finer grained locating than just the frame number.
Definition: packet-tcpcl.h:123
gint src_ix
Source index within the frame.
Definition: packet-tcpcl.h:127
gint raw_offset
Offset within the source TVB.
Definition: packet-tcpcl.h:129
guint32 frame_num
Index of the frame.
Definition: packet-tcpcl.h:125
Definition: packet-tcpcl.h:143
guint8 sess_term_reason
SESS_TERM reason.
Definition: packet-tcpcl.h:170
tcpcl_frame_loc_t * chdr_seen
Frame number in which the contact header starts.
Definition: packet-tcpcl.h:152
address addr
Address for this peer.
Definition: packet-tcpcl.h:145
gboolean can_tls
CAN_TLS flag from the contact header.
Definition: packet-tcpcl.h:156
gboolean chdr_missing
True if a contact header was not seen at the start of connection.
Definition: packet-tcpcl.h:150
wmem_map_t * transfers
Map from transfer ID guint64* to tcpcl_transfer_t* sent from this peer.
Definition: packet-tcpcl.h:176
guint32 port
Port for the this peer.
Definition: packet-tcpcl.h:147
guint64 transfer_mru
Transfer MRU.
Definition: packet-tcpcl.h:165
guint64 segment_mru
Segment MRU.
Definition: packet-tcpcl.h:163
guint16 keepalive
Keepalive duration (s) from v4 SESS_INIT.
Definition: packet-tcpcl.h:161
guint8 version
TCPCL version seen from this peer.
Definition: packet-tcpcl.h:154
wmem_map_t * frame_loc_to_transfer
Map from tcpcl_frame_loc_t* to possible associated transfer ID guint64*.
Definition: packet-tcpcl.h:173
tcpcl_frame_loc_t * sess_term_seen
Frame number in which the SESS_TERM message starts.
Definition: packet-tcpcl.h:168
tcpcl_frame_loc_t * sess_init_seen
Frame number in which the v4 SESS_INIT message starts.
Definition: packet-tcpcl.h:159
Definition: packet-tcpcl.h:132
wmem_list_t * ack_list
Ordered list of ack_meta_t* for XFER_ACK as seen in the first scan.
Definition: packet-tcpcl.h:137
guint64 * total_length
Optional Transfer Length extension.
Definition: packet-tcpcl.h:140
wmem_list_t * seg_list
Ordered list of seg_meta_t* for XFER_SEGMENT as seen in the first scan.
Definition: packet-tcpcl.h:134
Definition: tvbuff-int.h:35