37#define TCP_OPTION_END 0
40#define TCP_OPTION_NOP 1
56#define TCP_OPTION_MSS 2
72#define TCP_OPTION_WS 3
81#define TCP_RX_WINDOW_SCALE 9
96#define TCP_OPTION_SACK_PERMITTED 4
114#define TCP_SACK_MAX 3
123#define TCP_OPTION_SACK 5
140#define TCP_OPTION_TS 8
177#define TCP_STATE_SENT(flags) ( (flags) << 0 )
178#define TCP_FLAGS_SENT(state) ( ( (state) >> 0 ) & 0xff )
184#define TCP_STATE_ACKED(flags) ( (flags) << 8 )
185#define TCP_FLAGS_ACKED(state) ( ( (state) >> 8 ) & 0xff )
192#define TCP_STATE_RCVD(flags) ( (flags) << 16 )
193#define TCP_FLAGS_RCVD(state) ( ( (state) >> 16 ) & 0xff )
196#define TCP_FLAGS_SENDING(state) \
197 ( TCP_FLAGS_SENT ( state ) & ~TCP_FLAGS_ACKED ( state ) )
203#define TCP_CLOSED TCP_RST
216#define TCP_SYN_SENT ( TCP_STATE_SENT ( TCP_SYN ) )
222#define TCP_SYN_RCVD ( TCP_STATE_SENT ( TCP_SYN | TCP_ACK ) | \
223 TCP_STATE_RCVD ( TCP_SYN ) )
229#define TCP_ESTABLISHED ( TCP_STATE_SENT ( TCP_SYN | TCP_ACK ) | \
230 TCP_STATE_ACKED ( TCP_SYN ) | \
231 TCP_STATE_RCVD ( TCP_SYN ) )
247#define TCP_FIN_WAIT_1 ( TCP_STATE_SENT ( TCP_SYN | TCP_ACK | TCP_FIN ) | \
248 TCP_STATE_ACKED ( TCP_SYN ) | \
249 TCP_STATE_RCVD ( TCP_SYN ) )
256#define TCP_FIN_WAIT_2 ( TCP_STATE_SENT ( TCP_SYN | TCP_ACK | TCP_FIN ) | \
257 TCP_STATE_ACKED ( TCP_SYN | TCP_FIN ) | \
258 TCP_STATE_RCVD ( TCP_SYN ) )
269#define TCP_CLOSING_OR_LAST_ACK \
270 ( TCP_STATE_SENT ( TCP_SYN | TCP_ACK | TCP_FIN ) | \
271 TCP_STATE_ACKED ( TCP_SYN ) | \
272 TCP_STATE_RCVD ( TCP_SYN | TCP_FIN ) )
279#define TCP_TIME_WAIT ( TCP_STATE_SENT ( TCP_SYN | TCP_ACK | TCP_FIN ) | \
280 TCP_STATE_ACKED ( TCP_SYN | TCP_FIN ) | \
281 TCP_STATE_RCVD ( TCP_SYN | TCP_FIN ) )
288#define TCP_CLOSE_WAIT ( TCP_STATE_SENT ( TCP_SYN | TCP_ACK ) | \
289 TCP_STATE_ACKED ( TCP_SYN ) | \
290 TCP_STATE_RCVD ( TCP_SYN | TCP_FIN ) )
297#define TCP_CAN_SEND_DATA(state) \
298 ( ( (state) & ( TCP_STATE_ACKED ( TCP_SYN ) | \
299 TCP_STATE_SENT ( TCP_FIN ) ) ) \
300 == TCP_STATE_ACKED ( TCP_SYN ) )
307#define TCP_HAS_BEEN_ESTABLISHED(state) \
308 ( ( (state) & ( TCP_STATE_ACKED ( TCP_SYN ) | \
309 TCP_STATE_RCVD ( TCP_SYN ) ) ) \
310 == ( TCP_STATE_ACKED ( TCP_SYN ) | TCP_STATE_RCVD ( TCP_SYN ) ) )
317#define TCP_CLOSED_GRACEFULLY(state) \
318 ( ( (state) & ( TCP_STATE_ACKED ( TCP_FIN ) | \
319 TCP_STATE_RCVD ( TCP_FIN ) ) ) \
320 == ( TCP_STATE_ACKED ( TCP_FIN ) | TCP_STATE_RCVD ( TCP_FIN ) ) )
325#define TCP_MASK_HLEN 0xf0
328#define TCP_MIN_PORT 1
363#define TCP_MAX_WINDOW_SIZE ( 2048 * 1024 )
379#define TCP_PATH_MTU \
380 ( 1280 - 40 - 20 - 12 )
386#define TCP_MSL ( 2 * 60 * TICKS_PER_SEC )
394#define TCP_KEEPALIVE_DELAY ( 15 * TICKS_PER_SEC )
400#define TCP_MAX_HEADER_LEN \
401 ( MAX_LL_NET_HEADER_LEN + \
402 sizeof ( struct tcp_header ) + \
403 sizeof ( struct tcp_mss_option ) + \
404 sizeof ( struct tcp_window_scale_padded_option ) + \
405 sizeof ( struct tcp_timestamp_padded_option ) )
420 return ( (
int32_t ) ( seq1 - seq2 ) );
441#define TCP_FINISH_TIMEOUT ( 1 * TICKS_PER_SEC )
uint32_t start
Starting offset.
#define FILE_LICENCE(_licence)
Declare a particular licence as applying to a file.
#define FILE_SECBOOT(_status)
Declare a file's UEFI Secure Boot permission status.
struct tcp_sack_permitted_option __attribute
u16 seq
802.11 Sequence Control field
Transport-network layer interface.
#define __tcpip_protocol
Declare a TCP/IP transport-layer protocol.
const struct tcp_window_scale_option * wsopt
Window scale option, if present.
const struct tcp_timestamp_option * tsopt
Timestamp option, if present.
const struct tcp_sack_permitted_option * spopt
SACK permitted option, if present.
TCP selective acknowledgement block.
TCP selective acknowledgement option.
Padded TCP selective acknowledgement option (used for sending)
struct tcp_sack_option sackopt
TCP selective acknowledgement permitted option.
Padded TCP selective acknowledgement permitted option (used for sending)
struct tcp_sack_permitted_option spopt
unsigned long in_segs
Number of packets received.
unsigned long in_octets
Number of octets received (including duplicate data)
unsigned long in_out_of_order
Total number of packets received out of order.
unsigned long in_octets_good
Number of octets processed and passed to upper layer.
unsigned long in_discards
Total number of packets discarded due to lack of memory.
Padded TCP timestamp option (used for sending)
struct tcp_timestamp_option tsopt
Padded TCP window scale option (used for sending)
struct tcp_window_scale_option wsopt
A transport-layer protocol of the TCP/IP stack (eg.
struct tcp_statistics tcp_stats
TCP statistics.
static int tcp_in_window(uint32_t seq, uint32_t start, uint32_t len)
Check if TCP sequence number lies within window.
static int32_t tcp_cmp(uint32_t seq1, uint32_t seq2)
Compare TCP sequence numbers.