40 #define TCP_SUPPORT ENABLED
41#elif (TCP_SUPPORT != ENABLED && TCP_SUPPORT != DISABLED)
42 #error TCP_SUPPORT parameter is not valid
46#ifndef TCP_TICK_INTERVAL
47 #define TCP_TICK_INTERVAL 100
48#elif (TCP_TICK_INTERVAL < 10)
49 #error TCP_TICK_INTERVAL parameter is not valid
54 #define TCP_MAX_MSS 1430
55#elif (TCP_MAX_MSS < 536)
56 #error TCP_MAX_MSS parameter is not valid
61 #define TCP_MIN_MSS 64
62#elif (TCP_MIN_MSS < 1)
63 #error TCP_MIN_MSS parameter is not valid
67#ifndef TCP_DEFAULT_TX_BUFFER_SIZE
68 #define TCP_DEFAULT_TX_BUFFER_SIZE 2860
69#elif (TCP_DEFAULT_TX_BUFFER_SIZE < 536)
70 #error TCP_DEFAULT_TX_BUFFER_SIZE parameter is not valid
74#ifndef TCP_MAX_TX_BUFFER_SIZE
75 #define TCP_MAX_TX_BUFFER_SIZE 22880
76#elif (TCP_MAX_TX_BUFFER_SIZE < 536)
77 #error TCP_MAX_TX_BUFFER_SIZE parameter is not valid
81#ifndef TCP_DEFAULT_RX_BUFFER_SIZE
82 #define TCP_DEFAULT_RX_BUFFER_SIZE 2860
83#elif (TCP_DEFAULT_RX_BUFFER_SIZE < 536)
84 #error TCP_DEFAULT_RX_BUFFER_SIZE parameter is not valid
88#ifndef TCP_MAX_RX_BUFFER_SIZE
89 #define TCP_MAX_RX_BUFFER_SIZE 22880
90#elif (TCP_MAX_RX_BUFFER_SIZE < 536)
91 #error TCP_MAX_RX_BUFFER_SIZE parameter is not valid
95#ifndef TCP_DEFAULT_SYN_QUEUE_SIZE
96 #define TCP_DEFAULT_SYN_QUEUE_SIZE 4
97#elif (TCP_DEFAULT_SYN_QUEUE_SIZE < 1)
98 #error TCP_DEFAULT_SYN_QUEUE_SIZE parameter is not valid
102#ifndef TCP_MAX_SYN_QUEUE_SIZE
103 #define TCP_MAX_SYN_QUEUE_SIZE 16
104#elif (TCP_MAX_SYN_QUEUE_SIZE < 1)
105 #error TCP_MAX_SYN_QUEUE_SIZE parameter is not valid
109#ifndef TCP_MAX_RETRIES
110 #define TCP_MAX_RETRIES 5
111#elif (TCP_MAX_RETRIES < 1)
112 #error TCP_MAX_RETRIES parameter is not valid
116#ifndef TCP_INITIAL_RTO
117 #define TCP_INITIAL_RTO 1000
118#elif (TCP_INITIAL_RTO < 100)
119 #error TCP_INITIAL_RTO parameter is not valid
124 #define TCP_MIN_RTO 1000
125#elif (TCP_MIN_RTO < 100)
126 #error TCP_MIN_RTO parameter is not valid
131 #define TCP_MAX_RTO 60000
132#elif (TCP_MAX_RTO < 1000)
133 #error TCP_MAX_RTO parameter is not valid
137#ifndef TCP_SECURE_ISN_SUPPORT
138 #define TCP_SECURE_ISN_SUPPORT DISABLED
139#elif (TCP_SECURE_ISN_SUPPORT != ENABLED && TCP_SECURE_ISN_SUPPORT != DISABLED)
140 #error TCP_SECURE_ISN_SUPPORT parameter is not valid
144#ifndef TCP_CONGEST_CONTROL_SUPPORT
145 #define TCP_CONGEST_CONTROL_SUPPORT ENABLED
146#elif (TCP_CONGEST_CONTROL_SUPPORT != ENABLED && TCP_CONGEST_CONTROL_SUPPORT != DISABLED)
147 #error TCP_CONGEST_CONTROL_SUPPORT parameter is not valid
151#ifndef TCP_FAST_RETRANSMIT_THRES
152 #define TCP_FAST_RETRANSMIT_THRES 3
153#elif (TCP_FAST_RETRANSMIT_THRES < 1)
154 #error TCP_FAST_RETRANSMIT_THRES parameter is not valid
158#ifndef TCP_INITIAL_WINDOW
159 #define TCP_INITIAL_WINDOW 3
160#elif (TCP_INITIAL_WINDOW < 1)
161 #error TCP_INITIAL_WINDOW parameter is not valid
165#ifndef TCP_LOSS_WINDOW
166 #define TCP_LOSS_WINDOW 1
167#elif (TCP_LOSS_WINDOW < 1)
168 #error TCP_LOSS_WINDOW parameter is not valid
172#ifndef TCP_DEFAULT_PROBE_INTERVAL
173 #define TCP_DEFAULT_PROBE_INTERVAL 1000
174#elif (TCP_DEFAULT_PROBE_INTERVAL < 100)
175 #error TCP_DEFAULT_PROBE_INTERVAL parameter is not valid
179#ifndef TCP_MAX_PROBE_INTERVAL
180 #define TCP_MAX_PROBE_INTERVAL 60000
181#elif (TCP_MAX_PROBE_INTERVAL < 1000)
182 #error TCP_MAX_PROBE_INTERVAL parameter is not valid
186#ifndef TCP_OVERRIDE_TIMEOUT
187 #define TCP_OVERRIDE_TIMEOUT 500
188#elif (TCP_OVERRIDE_TIMEOUT < 100)
189 #error TCP_OVERRIDE_TIMEOUT parameter is not valid
193#ifndef TCP_FIN_WAIT_2_TIMER
194 #define TCP_FIN_WAIT_2_TIMER 4000
195#elif (TCP_FIN_WAIT_2_TIMER < 1000)
196 #error TCP_FIN_WAIT_2_TIMER parameter is not valid
200#ifndef TCP_2MSL_TIMER
201 #define TCP_2MSL_TIMER 4000
202#elif (TCP_2MSL_TIMER < 0)
203 #error TCP_2MSL_TIMER parameter is not valid
207#ifndef TCP_KEEP_ALIVE_SUPPORT
208 #define TCP_KEEP_ALIVE_SUPPORT DISABLED
209#elif (TCP_KEEP_ALIVE_SUPPORT != ENABLED && TCP_KEEP_ALIVE_SUPPORT != DISABLED)
210 #error TCP_KEEP_ALIVE_SUPPORT parameter is not valid
214#ifndef TCP_DEFAULT_KEEP_ALIVE_IDLE
215 #define TCP_DEFAULT_KEEP_ALIVE_IDLE 60000
216#elif (TCP_DEFAULT_KEEP_ALIVE_IDLE < 1000)
217 #error TCP_DEFAULT_KEEP_ALIVE_IDLE parameter is not valid
221#ifndef TCP_DEFAULT_KEEP_ALIVE_INTERVAL
222 #define TCP_DEFAULT_KEEP_ALIVE_INTERVAL 15000
223#elif (TCP_DEFAULT_KEEP_ALIVE_INTERVAL < 1000)
224 #error TCP_DEFAULT_KEEP_ALIVE_INTERVAL parameter is not valid
228#ifndef TCP_DEFAULT_KEEP_ALIVE_PROBES
229 #define TCP_DEFAULT_KEEP_ALIVE_PROBES 5
230#elif (TCP_DEFAULT_KEEP_ALIVE_PROBES < 1)
231 #error TCP_DEFAULT_KEEP_ALIVE_PROBES parameter is not valid
235#ifndef TCP_SACK_SUPPORT
236 #define TCP_SACK_SUPPORT DISABLED
237#elif (TCP_SACK_SUPPORT != ENABLED && TCP_SACK_SUPPORT != DISABLED)
238 #error TCP_SACK_SUPPORT parameter is not valid
242#ifndef TCP_MAX_SACK_BLOCKS
243 #define TCP_MAX_SACK_BLOCKS 4
244#elif (TCP_MAX_SACK_BLOCKS < 1)
245 #error TCP_MAX_SACK_BLOCKS parameter is not valid
249#define TCP_MAX_HEADER_LENGTH 60
251#define TCP_DEFAULT_MSS 536
254#define TCP_CMP_SEQ(a, b) ((int32_t) ((a) - (b)))
268 TCP_STATE_CLOSED = 0,
269 TCP_STATE_LISTEN = 1,
270 TCP_STATE_SYN_SENT = 2,
271 TCP_STATE_SYN_RECEIVED = 3,
272 TCP_STATE_ESTABLISHED = 4,
273 TCP_STATE_CLOSE_WAIT = 5,
274 TCP_STATE_LAST_ACK = 6,
275 TCP_STATE_FIN_WAIT_1 = 7,
276 TCP_STATE_FIN_WAIT_2 = 8,
277 TCP_STATE_CLOSING = 9,
278 TCP_STATE_TIME_WAIT = 10
288 TCP_CONGEST_STATE_IDLE = 0,
289 TCP_CONGEST_STATE_RECOVERY = 1,
290 TCP_CONGEST_STATE_LOSS_RECOVERY = 2
317 TCP_OPTION_MAX_SEGMENT_SIZE = 2,
318 TCP_OPTION_WINDOW_SCALE_FACTOR = 3,
319 TCP_OPTION_SACK_PERMITTED = 4,
321 TCP_OPTION_TIMESTAMP = 8
326#if defined(__CWCC__) || defined(_WIN32)
327 #pragma pack(push, 1)
341#if defined(_CPU_BIG_ENDIAN) && !defined(__ICCRX__)
342 uint8_t dataOffset : 4;
343 uint8_t reserved1 : 4;
344 uint8_t reserved2 : 2;
347 uint8_t reserved1 : 4;
348 uint8_t dataOffset : 4;
350 uint8_t reserved2 : 2;
354 uint16_t urgentPointer;
372#if defined(__CWCC__) || defined(_WIN32)
387 uint8_t header[TCP_MAX_HEADER_LENGTH];
398 NetInterface *interface;
404#if (TCP_SACK_SUPPORT == ENABLED)
405 bool_t sackPermitted;
428 uint_t maxChunkCount;
429 ChunkDesc chunk[N(TCP_MAX_TX_BUFFER_SIZE)];
440 uint_t maxChunkCount;
441 ChunkDesc chunk[N(TCP_MAX_RX_BUFFER_SIZE)];
453uint16_t tcpGetDynamicPort(
void);
455error_t tcpConnect(Socket *socket,
const IpAddr *remoteIpAddr,
456 uint16_t remotePort);
458error_t tcpListen(Socket *socket, uint_t backlog);
459Socket *tcpAccept(Socket *socket,
IpAddr *clientIpAddr, uint16_t *clientPort);
461error_t tcpSend(Socket *socket,
const uint8_t *data,
size_t length,
462 size_t *written, uint_t flags);
464error_t tcpReceive(Socket *socket, uint8_t *data,
size_t size,
465 size_t *received, uint_t flags);
467error_t tcpShutdown(Socket *socket, uint_t how);
468error_t tcpAbort(Socket *socket);
470TcpState tcpGetState(Socket *socket);
472Socket *tcpKillOldestConnection(
void);
error_t
Error codes.
Definition error.h:43
IPv4 and IPv6 common routines.
CycloneTCP configuration file.
uint32_t systime_t
System time.
Definition os_port_none.h:90
Structure describing a chunk of data.
Definition net_mem.h:77
IP network address.
Definition ip.h:72
Receive buffer.
Definition tcp.h:438
SACK block.
Definition tcp.h:415
Transmit buffer.
Definition tcp.h:426
Retransmission queue item.
Definition tcp.h:382
SYN queue item.
Definition tcp.h:396
TcpOptionKind
TCP option types.
Definition tcp.h:314
TcpState
TCP FSM states.
Definition tcp.h:267
TcpFlags
TCP control flags.
Definition tcp.h:299
struct _TcpQueueItem TcpQueueItem
Retransmission queue item.
struct _TcpSynQueueItem TcpSynQueueItem
SYN queue item.
TcpCongestState
TCP congestion states.
Definition tcp.h:287
typedef __packed_struct
TCP header.
Definition tcp.h:336