2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS TCP/IP protocol driver
5 * PURPOSE: Transmission Control Protocol definitions
11 (*PTCP_COMPLETION_ROUTINE
)( PVOID Context
, NTSTATUS Status
, ULONG Count
);
13 /* TCPv4 header structure */
14 typedef struct TCPv4_HEADER
{
15 USHORT SourcePort
; /* Source port */
16 USHORT DestinationPort
; /* Destination port */
17 ULONG SequenceNumber
; /* Sequence number */
18 ULONG AckNumber
; /* Acknowledgement number */
19 UCHAR DataOffset
; /* Data offset; 32-bit words (leftmost 4 bits) */
20 UCHAR Flags
; /* Control bits (rightmost 6 bits) */
21 USHORT Window
; /* Maximum acceptable receive window */
22 USHORT Checksum
; /* Checksum of segment */
23 USHORT Urgent
; /* Pointer to urgent data */
24 } __attribute__((packed
)) TCPv4_HEADER
, *PTCPv4_HEADER
;
26 /* TCPv4 header flags */
35 #define TCPOPT_END_OF_LIST 0x0
36 #define TCPOPT_NO_OPERATION 0x1
37 #define TCPOPT_MAX_SEG_SIZE 0x2
39 #define TCPOPTLEN_MAX_SEG_SIZE 0x4
41 #define TCP_CANCEL_DISCONNECT 0
42 #define TCP_CANCEL_CLOSE 1
44 /* Data offset; 32-bit words (leftmost 4 bits); convert to bytes */
45 #define TCP_DATA_OFFSET(DataOffset)(((DataOffset) & 0xF0) >> (4-2))
48 /* TCPv4 pseudo header */
49 typedef struct TCPv4_PSEUDO_HEADER
{
50 ULONG SourceAddress
; /* Source address */
51 ULONG DestinationAddress
; /* Destination address */
52 UCHAR Zero
; /* Reserved */
53 UCHAR Protocol
; /* Protocol */
54 USHORT TCPLength
; /* Size of TCP segment */
55 } __attribute__((packed
)) TCPv4_PSEUDO_HEADER
, *PTCPv4_PSEUDO_HEADER
;
57 typedef struct _SLEEPING_THREAD
{
61 } SLEEPING_THREAD
, *PSLEEPING_THREAD
;
63 typedef struct _CANCEL_REQUEST
{
68 } CANCEL_REQUEST
, *PCANCEL_REQUEST
;
70 /* Retransmission timeout constants */
72 /* Lower bound for retransmission timeout in TCP timer ticks */
73 #define TCP_MIN_RETRANSMISSION_TIMEOUT 1*1000 /* 1 tick */
75 /* Upper bound for retransmission timeout in TCP timer ticks */
76 #define TCP_MAX_RETRANSMISSION_TIMEOUT 1*60*1000 /* 1 tick */
78 /* Smoothing factor */
79 #define TCP_ALPHA_RETRANSMISSION_TIMEOUT(x)(((x)*8)/10) /* 0.8 */
81 /* Delay variance factor */
82 #define TCP_BETA_RETRANSMISSION_TIMEOUT(x)(((x)*16)/10) /* 1.6 */
85 /* Datagram/segment send request flags */
87 #define SRF_URG TCP_URG
88 #define SRF_ACK TCP_ACK
89 #define SRF_PSH TCP_PSH
90 #define SRF_RST TCP_RST
91 #define SRF_SYN TCP_SYN
92 #define SRF_FIN TCP_FIN
94 extern LONG TCP_IPIdentification
;
95 extern LIST_ENTRY SignalledConnections
;
96 extern LIST_ENTRY SleepingThreadsList
;
97 extern FAST_MUTEX SleepingThreadsLock
;
98 extern RECURSIVE_MUTEX TCPLock
;
101 NTSTATUS
TCPServiceListeningSocket( PCONNECTION_ENDPOINT Listener
,
102 PCONNECTION_ENDPOINT Connection
,
103 PTDI_REQUEST_KERNEL Request
);
104 NTSTATUS
TCPListen( PCONNECTION_ENDPOINT Connection
, UINT Backlog
);
105 VOID
TCPAbortListenForSocket( PCONNECTION_ENDPOINT Listener
,
106 PCONNECTION_ENDPOINT Connection
);
108 ( PTDI_REQUEST Request
,
109 PCONNECTION_ENDPOINT Listener
,
110 PCONNECTION_ENDPOINT Connection
,
111 PTCP_COMPLETION_ROUTINE Complete
,
115 PCONNECTION_ENDPOINT
TCPAllocateConnectionEndpoint( PVOID ClientContext
);
116 VOID
TCPFreeConnectionEndpoint( PCONNECTION_ENDPOINT Connection
);
118 NTSTATUS
TCPSocket( PCONNECTION_ENDPOINT Connection
,
119 UINT Family
, UINT Type
, UINT Proto
);
121 PTCP_SEGMENT
TCPCreateSegment(
123 PTCPv4_HEADER TCPHeader
,
124 ULONG SegmentLength
);
127 PTCP_SEGMENT Segment
);
130 PCONNECTION_ENDPOINT Connection
,
131 PTCP_SEGMENT Segment
,
132 PULONG Acknowledged
);
135 PCONNECTION_ENDPOINT Connection
,
136 PTDI_CONNECTION_INFORMATION ConnInfo
,
137 PTDI_CONNECTION_INFORMATION ReturnInfo
,
138 PTCP_COMPLETION_ROUTINE Complete
,
141 NTSTATUS
TCPDisconnect(
142 PCONNECTION_ENDPOINT Connection
,
144 PTDI_CONNECTION_INFORMATION ConnInfo
,
145 PTDI_CONNECTION_INFORMATION ReturnInfo
,
146 PTCP_COMPLETION_ROUTINE Complete
,
149 NTSTATUS
TCPReceiveData(
150 PCONNECTION_ENDPOINT Connection
,
153 PULONG BytesReceived
,
155 PTCP_COMPLETION_ROUTINE Complete
,
158 NTSTATUS
TCPSendData(
159 PCONNECTION_ENDPOINT Connection
,
165 NTSTATUS
TCPClose( PCONNECTION_ENDPOINT Connection
);
167 PVOID
TCPPrepareInterface( PIP_INTERFACE IF
);
169 VOID
TCPDisposeInterfaceData( PVOID Data
);
171 NTSTATUS
TCPTranslateError( int OskitError
);
175 UINT
TCPAllocatePort( UINT HintPort
);
177 VOID
TCPFreePort( UINT Port
);
179 NTSTATUS TCPGetPeerAddress
180 ( PCONNECTION_ENDPOINT Connection
,
181 PTRANSPORT_ADDRESS TransportAddress
);
186 NTSTATUS
TCPShutdown(
189 void TCPMarkForDisconnect(
190 PCONNECTION_ENDPOINT Connection
, BOOLEAN Marked
);