2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS TCP/IP protocol driver
5 * PURPOSE: Transmission Control Protocol definitions
11 /* TCPv4 header structure */
12 typedef struct TCP_HEADER {
13 USHORT SourcePort; /* Source port */
14 USHORT DestPort; /* Destination port */
15 USHORT SeqNum; /* Sequence number */
16 USHORT AckNum; /* Acknowledgment number */
17 UCHAR DataOfs; /* Data offset (leftmost 4 bits) */
18 UCHAR Flags; /* Control bits (rightmost 6 bits) */
19 USHORT Window; /* Maximum acceptable receive window */
20 USHORT Checksum; /* Checksum of segment */
21 USHORT Urgent; /* Pointer to urgent data */
22 } __attribute__((packed)) TCP_HEADER, *PTCP_HEADER;
24 /* TCPv4 header flags */
33 #define TCPOPT_END_OF_LIST 0x0
34 #define TCPOPT_NO_OPERATION 0x1
35 #define TCPOPT_MAX_SEG_SIZE 0x2
37 #define TCPOPTLEN_MAX_SEG_SIZE 0x4
40 /* TCPv4 pseudo header */
41 typedef struct TCP_PSEUDO_HEADER {
42 ULONG SourceAddress; /* Source address */
43 ULONG DestAddress; /* Destination address */
44 UCHAR Zero; /* Reserved */
45 UCHAR Protocol; /* Protocol */
46 USHORT TCPLength; /* Size of TCP segment */
47 } __attribute__((packed)) TCP_PSEUDO_HEADER, *PTCP_PSEUDO_HEADER;
50 /* Retransmission timeout constants */
52 /* Lower bound for retransmission timeout in TCP timer ticks */
53 #define TCP_MIN_RETRANSMISSION_TIMEOUT 1*1000 /* 1 tick */
55 /* Upper bound for retransmission timeout in TCP timer ticks */
56 #define TCP_MAX_RETRANSMISSION_TIMEOUT 1*60*1000 /* 1 tick */
58 /* Smoothing factor */
59 #define TCP_ALPHA_RETRANSMISSION_TIMEOUT(x)(((x)*8)/10) /* 0.8 */
61 /* Delay variance factor */
62 #define TCP_BETA_RETRANSMISSION_TIMEOUT(x)(((x)*16)/10) /* 1.6 */
65 /* Datagram/segment send request flags */
67 #define SRF_URG TCP_URG
68 #define SRF_ACK TCP_ACK
69 #define SRF_PSH TCP_PSH
70 #define SRF_RST TCP_RST
71 #define SRF_SYN TCP_SYN
72 #define SRF_FIN TCP_FIN
75 inline NTSTATUS TCPBuildSendRequest(
76 PTCP_SEND_REQUEST *SendRequest,
77 PDATAGRAM_SEND_REQUEST *DGSendRequest,
78 PCONNECTION_ENDPOINT Connection,
79 DATAGRAM_COMPLETION_ROUTINE Complete,
85 inline NTSTATUS TCPBuildAndTransmitSendRequest(
86 PCONNECTION_ENDPOINT Connection,
87 DATAGRAM_COMPLETION_ROUTINE Complete,
95 PTDI_CONNECTION_INFORMATION ConnInfo,
96 PTDI_CONNECTION_INFORMATION ReturnInfo);
98 NTSTATUS TCPSendDatagram(
100 PTDI_CONNECTION_INFORMATION ConnInfo,
107 NTSTATUS TCPShutdown(