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 ) unsigned long in_out_of_order
Total number of packets received out of order.
struct tcp_timestamp_option tsopt
Padded TCP window scale option (used for sending)
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
TCP selective acknowledgement option.
struct tcp_header __attribute__
Padded TCP selective acknowledgement option (used for sending)
struct tcp_sack_permitted_option __attribute
const struct tcp_window_scale_option * wsopt
Window scale option, if present.
unsigned long in_segs
Number of packets received.
u16 seq
802.11 Sequence Control field
uint32_t start
Starting offset.
const struct tcp_sack_permitted_option * spopt
SACK permitted option, if present.
Padded TCP selective acknowledgement permitted option (used for sending)
unsigned long in_discards
Total number of packets discarded due to lack of memory.
Padded TCP timestamp option (used for sending)
Transport-network layer interface.
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.
unsigned long in_octets_good
Number of octets processed and passed to upper layer.
A transport-layer protocol of the TCP/IP stack (eg.
struct tcpip_protocol tcp_protocol __tcpip_protocol
ICMPv4 TCP/IP protocol.
struct tcp_sack_option sackopt
struct tcp_window_scale_option wsopt
unsigned long in_octets
Number of octets received (including duplicate data)
static int32_t tcp_cmp(uint32_t seq1, uint32_t seq2)
Compare TCP sequence numbers.
const struct tcp_timestamp_option * tsopt
Timestamp option, if present.
TCP selective acknowledgement permitted option.
TCP selective acknowledgement block.
struct tcp_sack_permitted_option spopt