123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306 |
- #ifndef _GPXE_TCP_H
- #define _GPXE_TCP_H
-
-
-
- #include "latch.h"
- #include <gpxe/tcpip.h>
-
-
- struct tcp_header {
- uint16_t src;
- uint16_t dest;
- uint32_t seq;
- uint32_t ack;
- uint8_t hlen;
- uint8_t flags;
- uint16_t win;
- uint16_t csum;
- uint16_t urg;
- };
-
-
-
-
- #define TCP_OPTION_END 0
-
-
- #define TCP_OPTION_NOP 1
-
-
- struct tcp_option {
- uint8_t kind;
- uint8_t length;
- } __attribute__ (( packed ));
-
-
- struct tcp_mss_option {
- uint8_t kind;
- uint8_t length;
- uint16_t mss;
- } __attribute__ (( packed ));
-
-
- #define TCP_OPTION_MSS 2
-
-
- struct tcp_timestamp_option {
- uint8_t kind;
- uint8_t length;
- uint32_t tsval;
- uint32_t tsecr;
- } __attribute__ (( packed ));
-
-
- struct tcp_timestamp_padded_option {
- uint8_t nop[2];
- struct tcp_timestamp_option tsopt;
- } __attribute__ (( packed ));
-
-
- #define TCP_OPTION_TS 8
-
-
- struct tcp_options {
-
- const struct tcp_mss_option *mssopt;
-
- const struct tcp_timestamp_option *tsopt;
- };
-
-
-
-
- #define TCP_CWR 0x80
- #define TCP_ECE 0x40
- #define TCP_URG 0x20
- #define TCP_ACK 0x10
- #define TCP_PSH 0x08
- #define TCP_RST 0x04
- #define TCP_SYN 0x02
- #define TCP_FIN 0x01
-
-
-
-
- #define TCP_STATE_SENT(flags) ( (flags) << 0 )
- #define TCP_FLAGS_SENT(state) ( ( (state) >> 0 ) & 0xff )
-
-
- #define TCP_STATE_ACKED(flags) ( (flags) << 8 )
- #define TCP_FLAGS_ACKED(state) ( ( (state) >> 8 ) & 0xff )
-
-
- #define TCP_STATE_RCVD(flags) ( (flags) << 16 )
- #define TCP_FLAGS_RCVD(state) ( ( (state) >> 16 ) & 0xff )
-
-
- #define TCP_FLAGS_SENDING(state) \
- ( TCP_FLAGS_SENT ( state ) & ~TCP_FLAGS_ACKED ( state ) )
-
-
- #define TCP_CLOSED TCP_RST
-
-
- #define TCP_LISTEN 0
-
-
- #define TCP_SYN_SENT ( TCP_STATE_SENT ( TCP_SYN ) )
-
-
- #define TCP_SYN_RCVD ( TCP_STATE_SENT ( TCP_SYN | TCP_ACK ) | \
- TCP_STATE_RCVD ( TCP_SYN ) )
-
-
- #define TCP_ESTABLISHED ( TCP_STATE_SENT ( TCP_SYN | TCP_ACK ) | \
- TCP_STATE_ACKED ( TCP_SYN ) | \
- TCP_STATE_RCVD ( TCP_SYN ) )
-
-
- #define TCP_FIN_WAIT_1 ( TCP_STATE_SENT ( TCP_SYN | TCP_ACK | TCP_FIN ) | \
- TCP_STATE_ACKED ( TCP_SYN ) | \
- TCP_STATE_RCVD ( TCP_SYN ) )
-
-
- #define TCP_FIN_WAIT_2 ( TCP_STATE_SENT ( TCP_SYN | TCP_ACK | TCP_FIN ) | \
- TCP_STATE_ACKED ( TCP_SYN | TCP_FIN ) | \
- TCP_STATE_RCVD ( TCP_SYN ) )
-
-
- #define TCP_CLOSING_OR_LAST_ACK \
- ( TCP_STATE_SENT ( TCP_SYN | TCP_ACK | TCP_FIN ) | \
- TCP_STATE_ACKED ( TCP_SYN ) | \
- TCP_STATE_RCVD ( TCP_SYN | TCP_FIN ) )
-
-
- #define TCP_TIME_WAIT ( TCP_STATE_SENT ( TCP_SYN | TCP_ACK | TCP_FIN ) | \
- TCP_STATE_ACKED ( TCP_SYN | TCP_FIN ) | \
- TCP_STATE_RCVD ( TCP_SYN | TCP_FIN ) )
-
-
- #define TCP_CLOSE_WAIT ( TCP_STATE_SENT ( TCP_SYN | TCP_ACK ) | \
- TCP_STATE_ACKED ( TCP_SYN ) | \
- TCP_STATE_RCVD ( TCP_SYN | TCP_FIN ) )
-
-
- #define TCP_CAN_SEND_DATA(state) \
- ( ( (state) & ( TCP_STATE_ACKED ( TCP_SYN ) | \
- TCP_STATE_SENT ( TCP_FIN ) ) ) \
- == TCP_STATE_ACKED ( TCP_SYN ) )
-
-
- #define TCP_CLOSED_GRACEFULLY(state) \
- ( ( (state) & ( TCP_STATE_ACKED ( TCP_FIN ) | \
- TCP_STATE_RCVD ( TCP_FIN ) ) ) \
- == ( TCP_STATE_ACKED ( TCP_FIN ) | TCP_STATE_RCVD ( TCP_FIN ) ) )
-
-
-
-
- #define TCP_MASK_HLEN 0xf0
-
-
- #define TCP_MIN_PORT 1
-
-
- #define MAX_HDR_LEN 100
- #define MAX_IOB_LEN 1500
- #define MIN_IOB_LEN MAX_HDR_LEN + 100
-
-
- #define TCP_MAX_WINDOW_SIZE ( 65536 - 4 )
-
-
- #define TCP_PATH_MTU 1460
-
-
- #define TCP_MSS 1460
-
-
- #define TCP_MSL ( 2 * 60 * TICKS_PER_SEC )
-
- extern struct tcpip_protocol tcp_protocol;
-
- #endif
|