socket.h
Go to the documentation of this file.
1 /**
2  * @file socket.h
3  * @brief Socket API
4  *
5  * @section License
6  *
7  * SPDX-License-Identifier: GPL-2.0-or-later
8  *
9  * Copyright (C) 2010-2024 Oryx Embedded SARL. All rights reserved.
10  *
11  * This file is part of CycloneTCP Open.
12  *
13  * This program is free software; you can redistribute it and/or
14  * modify it under the terms of the GNU General Public License
15  * as published by the Free Software Foundation; either version 2
16  * of the License, or (at your option) any later version.
17  *
18  * This program is distributed in the hope that it will be useful,
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21  * GNU General Public License for more details.
22  *
23  * You should have received a copy of the GNU General Public License
24  * along with this program; if not, write to the Free Software Foundation,
25  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
26  *
27  * @author Oryx Embedded SARL (www.oryx-embedded.com)
28  * @version 2.4.4
29  **/
30 
31 #ifndef _SOCKET_H
32 #define _SOCKET_H
33 
34 //Forward declaration of Socket structure
35 struct _Socket;
36 #define Socket struct _Socket
37 
38 //Dependencies
39 #include "core/net.h"
40 #include "core/ethernet.h"
41 #include "core/ip.h"
42 #include "core/tcp.h"
43 
44 //Number of sockets that can be opened simultaneously
45 #ifndef SOCKET_MAX_COUNT
46  #define SOCKET_MAX_COUNT 16
47 #elif (SOCKET_MAX_COUNT < 1)
48  #error SOCKET_MAX_COUNT parameter is not valid
49 #endif
50 
51 //Maximum number of multicast groups
52 #ifndef SOCKET_MAX_MULTICAST_GROUPS
53  #define SOCKET_MAX_MULTICAST_GROUPS 1
54 #elif (SOCKET_MAX_MULTICAST_GROUPS < 0)
55  #error SOCKET_MAX_MULTICAST_GROUPS parameter is not valid
56 #endif
57 
58 //Maximum number of multicast sources
59 #ifndef SOCKET_MAX_MULTICAST_SOURCES
60  #define SOCKET_MAX_MULTICAST_SOURCES 0
61 #elif (SOCKET_MAX_MULTICAST_SOURCES < 0)
62  #error SOCKET_MAX_MULTICAST_SOURCES parameter is not valid
63 #endif
64 
65 //Dynamic port range (lower limit)
66 #ifndef SOCKET_EPHEMERAL_PORT_MIN
67  #define SOCKET_EPHEMERAL_PORT_MIN 49152
68 #elif (SOCKET_EPHEMERAL_PORT_MIN < 1024)
69  #error SOCKET_EPHEMERAL_PORT_MIN parameter is not valid
70 #endif
71 
72 //Dynamic port range (upper limit)
73 #ifndef SOCKET_EPHEMERAL_PORT_MAX
74  #define SOCKET_EPHEMERAL_PORT_MAX 65535
75 #elif (SOCKET_EPHEMERAL_PORT_MAX <= SOCKET_EPHEMERAL_PORT_MIN || SOCKET_EPHEMERAL_PORT_MAX > 65535)
76  #error SOCKET_EPHEMERAL_PORT_MAX parameter is not valid
77 #endif
78 
79 //C++ guard
80 #ifdef __cplusplus
81 extern "C" {
82 #endif
83 
84 
85 /**
86  * @brief Socket types
87  **/
88 
89 typedef enum
90 {
97 
98 
99 /**
100  * @brief IP protocols
101  **/
102 
103 typedef enum
104 {
111 
112 
113 /**
114  * @brief Ethernet protocols
115  **/
116 
117 typedef enum
118 {
126  SOCKET_ETH_PROTO_PTP = 0x88F7
128 
129 
130 /**
131  * @brief Flags used by I/O functions
132  **/
133 
134 typedef enum
135 {
144  SOCKET_FLAG_DELAY = 0x8000
146 
147 
148 //The SOCKET_FLAG_BREAK macro causes the I/O functions to stop reading
149 //data whenever the specified break character is encountered
150 #define SOCKET_FLAG_BREAK(c) (SOCKET_FLAG_BREAK_CHAR | LSB(c))
151 
152 
153 /**
154  * @brief Flags used by shutdown function
155  **/
156 
157 typedef enum
158 {
161  SOCKET_SD_BOTH = 2
163 
164 
165 /**
166  * @brief Socket events
167  **/
168 
169 typedef enum
170 {
182  SOCKET_EVENT_LINK_DOWN = 0x0400
184 
185 
186 /**
187  * @brief Socket options
188  **/
189 
190 typedef enum
191 {
208 
209 
210 /**
211  * @brief Host types
212  **/
213 
214 typedef enum
215 {
218  HOST_TYPE_IPV6 = 32
220 
221 
222 /**
223  * @brief Name resolution protocols
224  **/
225 
226 typedef enum
227 {
234 
235 
236 /**
237  * @brief Message and ancillary data
238  **/
239 
240 typedef struct
241 {
242  void *data; ///<Pointer to the payload
243  size_t size; ///<Size of the payload, in bytes
244  size_t length; ///<Actual length of the payload, in bytes
245  uint8_t ttl; ///<Time-to-live value
246  uint8_t tos; ///<Type-of-service value
247  bool_t dontFrag; ///<Do not fragment the IP packet
248  NetInterface *interface; ///<Underlying network interface
249  IpAddr srcIpAddr; ///<Source IP address
250  uint16_t srcPort; ///<Source port
251  IpAddr destIpAddr; ///<Destination IP address
252  uint16_t destPort; ///<Destination port
253 #if (ETH_SUPPORT == ENABLED)
254  MacAddr srcMacAddr; ///<Source MAC address
255  MacAddr destMacAddr; ///<Destination MAC address
256  uint16_t ethType; ///<Ethernet type field
257 #endif
258 #if (ETH_PORT_TAGGING_SUPPORT == ENABLED)
259  uint8_t switchPort; ///<Switch port identifier
260 #endif
261 #if (ETH_TIMESTAMP_SUPPORT == ENABLED)
262  int32_t timestampId; ///<Unique identifier for hardware time stamping
263  NetTimestamp timestamp; ///<Captured time stamp
264 #endif
265 } SocketMsg;
266 
267 
268 /**
269  * @brief Multicast group
270  **/
271 
272 typedef struct
273 {
274  IpAddr addr; ///<Multicast address
275 #if (SOCKET_MAX_MULTICAST_SOURCES > 0)
276  IpFilterMode filterMode; ///<Multicast filter mode
277  uint_t numSources; ///<Number of source addresses
278  IpAddr sources[SOCKET_MAX_MULTICAST_SOURCES]; ///<Source addresses
279 #endif
281 
282 
283 /**
284  * @brief Receive queue item
285  **/
286 
287 typedef struct _SocketQueueItem
288 {
292  uint16_t srcPort;
295  size_t offset;
298 
299 
300 /**
301  * @brief Structure describing a socket
302  **/
303 
304 struct _Socket
305 {
311  uint16_t localPort;
313  uint16_t remotePort;
314  uint32_t options; ///<Socket options
316  uint8_t tos; ///<Type-of-service value
317  uint8_t ttl; ///<Time-to-live value for unicast datagrams
318  uint8_t multicastTtl; ///<Time-to-live value for multicast datagrams
319 #if (SOCKET_MAX_MULTICAST_GROUPS > 0)
321 #endif
322 #if (ETH_VLAN_SUPPORT == ENABLED)
323  int8_t vlanPcp; ///<VLAN priority (802.1Q)
324  int8_t vlanDei; ///<Drop eligible indicator
325 #endif
326 #if (ETH_VMAN_SUPPORT == ENABLED)
327  int8_t vmanPcp; ///<VMAN priority (802.1ad)
328  int8_t vmanDei; ///<Drop eligible indicator
329 #endif
335 
336 //TCP specific variables
337 #if (TCP_SUPPORT == ENABLED)
338  TcpState state; ///<Current state of the TCP finite state machine
339  bool_t ownedFlag; ///<The user is the owner of the TCP socket
340  bool_t closedFlag; ///<The connection has been closed properly
341  bool_t resetFlag; ///<The connection has been reset
342 
343  uint16_t mss; ///<Maximum segment size
344  uint16_t smss; ///<Sender maximum segment size
345  uint16_t rmss; ///<Receiver maximum segment size
346  uint32_t iss; ///<Initial send sequence number
347  uint32_t irs; ///<Initial receive sequence number
348 
349  uint32_t sndUna; ///<Data that have been sent but not yet acknowledged
350  uint32_t sndNxt; ///<Sequence number of the next byte to be sent
351  uint16_t sndUser; ///<Amount of data buffered but not yet sent
352  uint16_t sndWnd; ///<Size of the send window
353  uint16_t maxSndWnd; ///<Maximum send window it has seen so far on the connection
354  uint32_t sndWl1; ///<Segment sequence number used for last window update
355  uint32_t sndWl2; ///<Segment acknowledgment number used for last window update
356 
357  uint32_t rcvNxt; ///<Receive next sequence number
358  uint16_t rcvUser; ///<Number of data received but not yet consumed
359  uint16_t rcvWnd; ///<Receive window
360 
361  bool_t rttBusy; ///<RTT measurement is being performed
362  uint32_t rttSeqNum; ///<Sequence number identifying a TCP segment
363  systime_t rttStartTime; ///<Round-trip start time
364  systime_t srtt; ///<Smoothed round-trip time
365  systime_t rttvar; ///<Round-trip time variation
366  systime_t rto; ///<Retransmission timeout
367 
368 #if (TCP_CONGEST_CONTROL_SUPPORT == ENABLED)
369  TcpCongestState congestState; ///<Congestion state
370  uint16_t cwnd; ///<Congestion window
371  uint16_t ssthresh; ///<Slow start threshold
372  uint_t dupAckCount; ///<Number of consecutive duplicate ACKs
373  uint_t n; ///<Number of bytes acknowledged during the whole round-trip
374  uint32_t recover; ///<NewReno modification to TCP's fast recovery algorithm
375 #endif
376 
377 #if (TCP_KEEP_ALIVE_SUPPORT == ENABLED)
378  bool_t keepAliveEnabled; ///<Specifies whether TCP keep-alive mechanism is enabled
379  systime_t keepAliveIdle; ///<Keep-alive idle time
380  systime_t keepAliveInterval; ///<Time interval between subsequent keep-alive probes
381  uint_t keepAliveMaxProbes; ///<Number of keep-alive probes
382  uint_t keepAliveProbeCount; ///<Keep-alive probe counter
383  systime_t keepAliveTimestamp; ///<Keep-alive timestamp
384 #endif
385 
386 #if (TCP_SACK_SUPPORT == ENABLED)
387  bool_t sackPermitted; ///<SACK Permitted option received
388 #endif
389 
390  TcpSackBlock sackBlock[TCP_MAX_SACK_BLOCKS]; ///<List of non-contiguous blocks that have been received
391  uint_t sackBlockCount; ///<Number of non-contiguous blocks that have been received
392 
393  TcpTxBuffer txBuffer; ///<Send buffer
394  size_t txBufferSize; ///<Size of the send buffer
395  TcpRxBuffer rxBuffer; ///<Receive buffer
396  size_t rxBufferSize; ///<Size of the receive buffer
397 
398  TcpQueueItem *retransmitQueue; ///<Retransmission queue
399  NetTimer retransmitTimer; ///<Retransmission timer
400  uint_t retransmitCount; ///<Number of retransmissions
401 
402  TcpSynQueueItem *synQueue; ///<SYN queue for listening sockets
403  uint_t synQueueSize; ///<Maximum number of pending connections for listening sockets
404 
405  uint_t wndProbeCount; ///<Zero window probe counter
406  systime_t wndProbeInterval; ///<Interval between successive probes
407 
408  NetTimer persistTimer; ///<Persist timer
409  NetTimer overrideTimer; ///<Override timer
410  NetTimer finWait2Timer; ///<FIN-WAIT-2 timer
411  NetTimer timeWaitTimer; ///<2MSL timer
412 #endif
413 
414 //UDP specific variables
415 #if (UDP_SUPPORT == ENABLED || RAW_SOCKET_SUPPORT == ENABLED)
417 #endif
418 };
419 
420 
421 /**
422  * @brief Structure describing socket events
423  **/
424 
425 typedef struct
426 {
427  Socket *socket; ///<Handle to a socket to monitor
428  uint_t eventMask; ///<Requested events
429  uint_t eventFlags; ///<Returned events
431 
432 
433 //Global constants
434 extern const SocketMsg SOCKET_DEFAULT_MSG;
435 
436 //Global variables
438 
439 //Socket related functions
440 error_t socketInit(void);
441 
443 
445 
448 
449 error_t socketSetDscp(Socket *socket, uint8_t dscp);
450 
451 error_t socketSetVlanPcp(Socket *socket, uint8_t pcp);
453 error_t socketSetVmanPcp(Socket *socket, uint8_t pcp);
455 
457 
460 
462  IpFilterMode filterMode, const IpAddr *sources, uint_t numSources);
463 
465  IpFilterMode *filterMode, IpAddr *sources, uint_t *numSources);
466 
468  const IpAddr *srcAddr);
469 
471  const IpAddr *srcAddr);
472 
474  const IpAddr *srcAddr);
475 
477  const IpAddr *srcAddr);
478 
480 
482  systime_t interval, uint_t maxProbes);
483 
485 
488 
491 
492 error_t socketBind(Socket *socket, const IpAddr *localIpAddr,
493  uint16_t localPort);
494 
495 error_t socketConnect(Socket *socket, const IpAddr *remoteIpAddr,
496  uint16_t remotePort);
497 
499 
500 Socket *socketAccept(Socket *socket, IpAddr *clientIpAddr,
501  uint16_t *clientPort);
502 
503 error_t socketSend(Socket *socket, const void *data, size_t length,
504  size_t *written, uint_t flags);
505 
507  const void *data, size_t length, size_t *written, uint_t flags);
508 
510 
512  size_t size, size_t *received, uint_t flags);
513 
514 error_t socketReceiveFrom(Socket *socket, IpAddr *srcIpAddr, uint16_t *srcPort,
515  void *data, size_t size, size_t *received, uint_t flags);
516 
517 error_t socketReceiveEx(Socket *socket, IpAddr *srcIpAddr, uint16_t *srcPort,
518  IpAddr *destIpAddr, void *data, size_t size, size_t *received, uint_t flags);
519 
521 
523  uint16_t *localPort);
524 
526  uint16_t *remotePort);
527 
529 void socketClose(Socket *socket);
530 
531 error_t socketPoll(SocketEventDesc *eventDesc, uint_t size, OsEvent *extEvent,
532  systime_t timeout);
533 
534 error_t getHostByName(NetInterface *interface, const char_t *name,
536 
537 //C++ guard
538 #ifdef __cplusplus
539 }
540 #endif
541 
542 #endif
IpFilterMode
Multicast filter mode.
Definition: ip.h:67
SocketQueueItem * receiveQueue
Definition: socket.h:416
error_t socketConnect(Socket *socket, const IpAddr *remoteIpAddr, uint16_t remotePort)
Establish a connection to a specified socket.
Definition: socket.c:1349
uint16_t maxSndWnd
Maximum send window it has seen so far on the connection.
Definition: socket.h:353
@ SOCKET_IP_PROTO_UDP
Definition: socket.h:108
HostType
Host types.
Definition: socket.h:215
Retransmission queue item.
Definition: tcp.h:386
@ SOCKET_ETH_PROTO_LLC
Definition: socket.h:120
uint32_t sndNxt
Sequence number of the next byte to be sent.
Definition: socket.h:350
Multicast group.
Definition: socket.h:273
HostnameResolver
Name resolution protocols.
Definition: socket.h:227
@ SOCKET_OPTION_IPV4_RECV_TOS
Definition: socket.h:197
int bool_t
Definition: compiler_port.h:53
error_t socketListen(Socket *socket, uint_t backlog)
Place a socket in the listening state.
Definition: socket.c:1413
int8_t vmanPcp
VMAN priority (802.1ad)
Definition: socket.h:327
@ SOCKET_FLAG_WAIT_ALL
Definition: socket.h:138
uint32_t rcvNxt
Receive next sequence number.
Definition: socket.h:357
error_t socketLeaveMulticastGroup(Socket *socket, const IpAddr *groupAddr)
Leave the specified host group.
Definition: socket.c:494
struct _SocketQueueItem SocketQueueItem
Receive queue item.
uint8_t protocol
Definition: ipv4.h:326
@ HOST_NAME_RESOLVER_DNS
Definition: socket.h:229
signed int int_t
Definition: compiler_port.h:49
error_t socketEnableBroadcast(Socket *socket, bool_t enabled)
Enable reception of broadcast messages.
Definition: socket.c:392
IP network address.
Definition: ip.h:90
systime_t keepAliveIdle
Keep-alive idle time.
Definition: socket.h:379
uint16_t cwnd
Congestion window.
Definition: socket.h:370
TcpCongestState
TCP congestion states.
Definition: tcp.h:287
IpAddr remoteIpAddr
Definition: socket.h:312
uint8_t ttl
Time-to-live value for unicast datagrams.
Definition: socket.h:317
error_t socketJoinMulticastGroup(Socket *socket, const IpAddr *groupAddr)
Join the specified host group.
Definition: socket.c:426
OsEvent * userEvent
Definition: socket.h:334
@ SOCKET_FLAG_WAIT_ACK
Definition: socket.h:142
@ HOST_TYPE_ANY
Definition: socket.h:216
uint_t keepAliveProbeCount
Keep-alive probe counter.
Definition: socket.h:382
@ SOCKET_FLAG_DONT_ROUTE
Definition: socket.h:137
Structure describing a buffer that spans multiple chunks.
Definition: net_mem.h:89
uint8_t message[]
Definition: chap.h:154
@ SOCKET_IP_PROTO_ICMPV6
Definition: socket.h:109
@ SOCKET_OPTION_REUSE_ADDR
Definition: socket.h:192
uint_t wndProbeCount
Zero window probe counter.
Definition: socket.h:405
uint8_t data[]
Definition: ethernet.h:222
Message and ancillary data.
Definition: socket.h:241
#define SOCKET_MAX_MULTICAST_GROUPS
Definition: socket.h:53
SocketIpProtocol
IP protocols.
Definition: socket.h:104
Event object.
uint16_t sndUser
Amount of data buffered but not yet sent.
Definition: socket.h:351
uint16_t srcPort
Definition: socket.h:292
error_t socketBind(Socket *socket, const IpAddr *localIpAddr, uint16_t localPort)
Associate a local address with a socket.
Definition: socket.c:1316
@ HOST_NAME_RESOLVER_LLMNR
Definition: socket.h:232
uint32_t irs
Initial receive sequence number.
Definition: socket.h:347
OsEvent event
Definition: socket.h:331
@ SOCKET_TYPE_DGRAM
Definition: socket.h:93
uint_t type
Definition: socket.h:307
@ SOCKET_OPTION_IPV6_ONLY
Definition: socket.h:200
uint32_t sndWl2
Segment acknowledgment number used for last window update.
Definition: socket.h:355
void * data
Pointer to the payload.
Definition: socket.h:242
size_t txBufferSize
Size of the send buffer.
Definition: socket.h:394
uint8_t type
Definition: coap_common.h:176
IpAddr srcIpAddr
Definition: socket.h:291
uint_t eventFlags
Definition: socket.h:333
uint8_t multicastTtl
Time-to-live value for multicast datagrams.
Definition: socket.h:318
error_t socketSendMsg(Socket *socket, const SocketMsg *message, uint_t flags)
Send a message to a connectionless socket.
Definition: socket.c:1634
uint16_t rmss
Receiver maximum segment size.
Definition: socket.h:345
char_t name[]
bool_t resetFlag
The connection has been reset.
Definition: socket.h:341
uint16_t destPort
Definition: tcp.h:340
NetTimestamp timestamp
Captured time stamp.
Definition: socket.h:263
uint32_t recover
NewReno modification to TCP's fast recovery algorithm.
Definition: socket.h:374
Ipv4Addr srcIpAddr
Definition: ipcp.h:79
struct _SocketQueueItem * next
Definition: socket.h:289
error_t socketSetTimeout(Socket *socket, systime_t timeout)
Set timeout value for blocking operations.
Definition: socket.c:148
@ SOCKET_OPTION_IPV6_DONT_FRAG
Definition: socket.h:201
systime_t srtt
Smoothed round-trip time.
Definition: socket.h:364
@ SOCKET_TYPE_STREAM
Definition: socket.h:92
SocketType
Socket types.
Definition: socket.h:90
uint_t descriptor
Definition: socket.h:306
Structure describing socket events.
Definition: socket.h:426
@ SOCKET_OPTION_IPV6_RECV_TRAFFIC_CLASS
Definition: socket.h:203
void socketClose(Socket *socket)
Close an existing socket.
Definition: socket.c:2062
int8_t vlanPcp
VLAN priority (802.1Q)
Definition: socket.h:323
Ethernet.
@ SOCKET_FLAG_PEEK
Definition: socket.h:136
NetTimer finWait2Timer
FIN-WAIT-2 timer.
Definition: socket.h:410
@ SOCKET_FLAG_DELAY
Definition: socket.h:144
error_t socketSetMulticastTtl(Socket *socket, uint8_t ttl)
Set TTL value for multicast datagrams.
Definition: socket.c:198
uint16_t ethType
Ethernet type field.
Definition: socket.h:256
@ HOST_TYPE_IPV6
Definition: socket.h:218
@ SOCKET_OPTION_IPV4_RECV_TTL
Definition: socket.h:198
error_t socketSend(Socket *socket, const void *data, size_t length, size_t *written, uint_t flags)
Send data to a connected socket.
Definition: socket.c:1486
TcpRxBuffer rxBuffer
Receive buffer.
Definition: socket.h:395
TcpCongestState congestState
Congestion state.
Definition: socket.h:369
IpAddr addr
Multicast address.
Definition: socket.h:274
uint16_t destPort
Destination port.
Definition: socket.h:252
#define TCP_MAX_SACK_BLOCKS
Definition: tcp.h:243
@ SOCKET_SD_SEND
Definition: socket.h:160
systime_t rto
Retransmission timeout.
Definition: socket.h:366
NetRxAncillary ancillary
Definition: socket.h:296
NetInterface * interface
Underlying network interface.
Definition: socket.h:248
TcpState
TCP FSM states.
Definition: tcp.h:267
size_t length
Actual length of the payload, in bytes.
Definition: socket.h:244
error_t socketReceiveFrom(Socket *socket, IpAddr *srcIpAddr, uint16_t *srcPort, void *data, size_t size, size_t *received, uint_t flags)
Receive a datagram from a connectionless socket.
Definition: socket.c:1714
error_t socketAddMulticastSource(Socket *socket, const IpAddr *groupAddr, const IpAddr *srcAddr)
Accept specific source for specific group (delta-based API)
Definition: socket.c:753
systime_t keepAliveInterval
Time interval between subsequent keep-alive probes.
Definition: socket.h:380
uint32_t options
Socket options.
Definition: socket.h:314
Timestamp.
Definition: net_misc.h:105
error_t
Error codes.
Definition: error.h:43
error_t socketSetMaxSegmentSize(Socket *socket, size_t mss)
Specify the maximum segment size for outgoing TCP packets.
Definition: socket.c:1164
const SocketMsg SOCKET_DEFAULT_MSG
Definition: socket.c:52
IpAddr localIpAddr
Definition: socket.h:310
@ SOCKET_ETH_PROTO_EAPOL
Definition: socket.h:124
uint16_t rcvWnd
Receive window.
Definition: socket.h:359
error_t socketBlockMulticastSource(Socket *socket, const IpAddr *groupAddr, const IpAddr *srcAddr)
Block specific source for specific group (delta-based API)
Definition: socket.c:917
uint16_t rcvUser
Number of data received but not yet consumed.
Definition: socket.h:358
@ SOCKET_OPTION_IPV6_RECV_HOP_LIMIT
Definition: socket.h:204
error_t socketEnableKeepAlive(Socket *socket, bool_t enabled)
Enable TCP keep-alive.
Definition: socket.c:1073
int_t socket(int_t family, int_t type, int_t protocol)
Create a socket that is bound to a specific transport service provider.
Definition: bsd_socket.c:65
@ HOST_NAME_RESOLVER_MDNS
Definition: socket.h:230
@ SOCKET_EVENT_TX_READY
Definition: socket.h:175
uint16_t remotePort
Definition: socket.h:313
uint16_t smss
Sender maximum segment size.
Definition: socket.h:344
@ SOCKET_EVENT_LINK_DOWN
Definition: socket.h:182
Timer.
Definition: net_misc.h:175
NetInterface * socketGetInterface(Socket *socket)
Retrieve the underlying interface.
Definition: socket.c:1293
SocketShutdownFlags
Flags used by shutdown function.
Definition: socket.h:158
#define NetRxAncillary
Definition: net_misc.h:40
#define NetInterface
Definition: net.h:36
IpAddr srcIpAddr
Source IP address.
Definition: socket.h:249
TcpTxBuffer txBuffer
Send buffer.
Definition: socket.h:393
@ SOCKET_EVENT_ACCEPT
Definition: socket.h:172
NetTimer persistTimer
Persist timer.
Definition: socket.h:408
Socket * socketAccept(Socket *socket, IpAddr *clientIpAddr, uint16_t *clientPort)
Permit an incoming connection attempt on a socket.
Definition: socket.c:1451
@ SOCKET_EVENT_RX_SHUTDOWN
Definition: socket.h:180
bool_t keepAliveEnabled
Specifies whether TCP keep-alive mechanism is enabled.
Definition: socket.h:378
uint16_t localPort
Definition: socket.h:311
uint8_t switchPort
Switch port identifier.
Definition: socket.h:259
@ SOCKET_OPTION_IPV4_DONT_FRAG
Definition: socket.h:195
@ SOCKET_OPTION_BROADCAST
Definition: socket.h:193
error_t socketSetMulticastSourceFilter(Socket *socket, const IpAddr *groupAddr, IpFilterMode filterMode, const IpAddr *sources, uint_t numSources)
Set multicast source filter (full-state API)
Definition: socket.c:562
error_t socketSetVmanPcp(Socket *socket, uint8_t pcp)
Set VMAN priority.
Definition: socket.c:322
int32_t timestampId
Unique identifier for hardware time stamping.
Definition: socket.h:262
@ SOCKET_TYPE_RAW_IP
Definition: socket.h:94
IpAddr destIpAddr
Definition: socket.h:293
uint_t keepAliveMaxProbes
Number of keep-alive probes.
Definition: socket.h:381
uint8_t length
Definition: tcp.h:368
uint_t eventMask
Definition: socket.h:332
bool_t closedFlag
The connection has been closed properly.
Definition: socket.h:340
TcpSynQueueItem * synQueue
SYN queue for listening sockets.
Definition: socket.h:402
SocketOptions
Socket options.
Definition: socket.h:191
uint16_t ssthresh
Slow start threshold.
Definition: socket.h:371
systime_t keepAliveTimestamp
Keep-alive timestamp.
Definition: socket.h:383
NetTimer timeWaitTimer
2MSL timer
Definition: socket.h:411
@ HOST_TYPE_IPV4
Definition: socket.h:217
@ SOCKET_EVENT_TX_DONE
Definition: socket.h:176
uint_t eventFlags
Returned events.
Definition: socket.h:429
@ SOCKET_IP_PROTO_IGMP
Definition: socket.h:106
size_t rxBufferSize
Size of the receive buffer.
Definition: socket.h:396
uint_t retransmitCount
Number of retransmissions.
Definition: socket.h:400
error_t socketSetVmanDei(Socket *socket, bool_t dei)
Set VMAN DEI flag.
Definition: socket.c:359
@ SOCKET_EVENT_LINK_UP
Definition: socket.h:181
uint8_t tos
Type-of-service value.
Definition: socket.h:246
MacAddr
Definition: ethernet.h:195
MacAddr srcMacAddr
Source MAC address.
Definition: socket.h:254
error_t socketSetTxBufferSize(Socket *socket, size_t size)
Specify the size of the TCP send buffer.
Definition: socket.c:1201
uint_t dupAckCount
Number of consecutive duplicate ACKs.
Definition: socket.h:372
bool_t sackPermitted
SACK Permitted option received.
Definition: socket.h:387
bool_t dontFrag
Do not fragment the IP packet.
Definition: socket.h:247
@ SOCKET_FLAG_BREAK_CHAR
Definition: socket.h:140
uint32_t systime_t
System time.
Socket socketTable[SOCKET_MAX_COUNT]
Definition: socket.c:49
Receive queue item.
Definition: socket.h:288
uint32_t iss
Initial send sequence number.
Definition: socket.h:346
NetInterface * interface
Definition: socket.h:309
IpAddr destIpAddr
Destination IP address.
Definition: socket.h:251
uint8_t flags
Definition: tcp.h:351
SocketFlags
Flags used by I/O functions.
Definition: socket.h:135
error_t socketSetTtl(Socket *socket, uint8_t ttl)
Set TTL value for unicast datagrams.
Definition: socket.c:173
MacAddr destMacAddr
Destination MAC address.
Definition: socket.h:255
char char_t
Definition: compiler_port.h:48
error_t socketSetVlanDei(Socket *socket, bool_t dei)
Set VLAN DEI flag.
Definition: socket.c:289
error_t socketSendTo(Socket *socket, const IpAddr *destIpAddr, uint16_t destPort, const void *data, size_t length, size_t *written, uint_t flags)
Send a datagram to a specific destination.
Definition: socket.c:1507
SACK block.
Definition: tcp.h:419
@ SOCKET_EVENT_TX_ACKED
Definition: socket.h:177
uint_t synQueueSize
Maximum number of pending connections for listening sockets.
Definition: socket.h:403
@ SOCKET_EVENT_NONE
Definition: socket.h:171
error_t socketSetVlanPcp(Socket *socket, uint8_t pcp)
Set VLAN priority.
Definition: socket.c:252
uint32_t sndWl1
Segment sequence number used for last window update.
Definition: socket.h:354
Socket * socketOpen(uint_t type, uint_t protocol)
Create a socket (UDP or TCP)
Definition: socket.c:125
bool_t rttBusy
RTT measurement is being performed.
Definition: socket.h:361
@ SOCKET_ETH_PROTO_PTP
Definition: socket.h:126
@ SOCKET_OPTION_IPV4_MULTICAST_LOOP
Definition: socket.h:194
IPv4 and IPv6 common routines.
@ SOCKET_FLAG_NO_DELAY
Definition: socket.h:143
@ SOCKET_EVENT_RX_READY
Definition: socket.h:179
systime_t wndProbeInterval
Interval between successive probes.
Definition: socket.h:406
@ HOST_NAME_RESOLVER_ANY
Definition: socket.h:228
@ SOCKET_ETH_PROTO_IPV4
Definition: socket.h:121
int8_t vlanDei
Drop eligible indicator.
Definition: socket.h:324
@ SOCKET_IP_PROTO_ICMP
Definition: socket.h:105
error_t socketGetMulticastSourceFilter(Socket *socket, const IpAddr *groupAddr, IpFilterMode *filterMode, IpAddr *sources, uint_t *numSources)
Get multicast source filter.
Definition: socket.c:679
TCP (Transmission Control Protocol)
@ SOCKET_EVENT_TX_SHUTDOWN
Definition: socket.h:178
error_t socketReceive(Socket *socket, void *data, size_t size, size_t *received, uint_t flags)
Receive data from a connected socket.
Definition: socket.c:1692
@ SOCKET_TYPE_UNUSED
Definition: socket.h:91
@ SOCKET_ETH_PROTO_IPV6
Definition: socket.h:123
error_t socketPoll(SocketEventDesc *eventDesc, uint_t size, OsEvent *extEvent, systime_t timeout)
Wait for one of a set of sockets to become ready to perform I/O.
Definition: socket.c:2149
Ipv4Addr groupAddr
Definition: igmp_common.h:214
@ SOCKET_SD_RECEIVE
Definition: socket.h:159
#define Socket
Definition: socket.h:36
@ SOCKET_ETH_PROTO_ARP
Definition: socket.h:122
@ HOST_NAME_RESOLVER_NBNS
Definition: socket.h:231
#define SOCKET_MAX_MULTICAST_SOURCES
Definition: socket.h:60
@ SOCKET_OPTION_IPV6_PKT_INFO
Definition: socket.h:202
error_t socketGetRemoteAddr(Socket *socket, IpAddr *remoteIpAddr, uint16_t *remotePort)
Retrieve the address of the peer to which a socket is connected.
Definition: socket.c:1985
MacAddr srcAddr
Definition: ethernet.h:220
int8_t vmanDei
Drop eligible indicator.
Definition: socket.h:328
size_t size
Size of the payload, in bytes.
Definition: socket.h:243
@ SOCKET_OPTION_IPV6_MULTICAST_LOOP
Definition: socket.h:199
error_t socketDropMulticastSource(Socket *socket, const IpAddr *groupAddr, const IpAddr *srcAddr)
Drop specific source for specific group (delta-based API)
Definition: socket.c:840
uint16_t sndWnd
Size of the send window.
Definition: socket.h:352
@ SOCKET_TYPE_RAW_ETH
Definition: socket.h:95
error_t socketReceiveMsg(Socket *socket, SocketMsg *message, uint_t flags)
Receive a message from a connectionless socket.
Definition: socket.c:1894
SYN queue item.
Definition: tcp.h:400
error_t socketSetInterface(Socket *socket, NetInterface *interface)
Bind a socket to a particular network interface.
Definition: socket.c:1273
uint32_t sndUna
Data that have been sent but not yet acknowledged.
Definition: socket.h:349
error_t socketInit(void)
Socket related initialization.
Definition: socket.c:85
NetInterface * interface
Definition: socket.h:290
Ipv4Addr ipAddr
Definition: ipcp.h:105
TcpSackBlock sackBlock[TCP_MAX_SACK_BLOCKS]
List of non-contiguous blocks that have been received.
Definition: socket.h:390
uint_t protocol
Definition: socket.h:308
error_t socketShutdown(Socket *socket, uint_t how)
Disable reception, transmission, or both.
Definition: socket.c:2020
systime_t timeout
Definition: socket.h:315
NetTimer retransmitTimer
Retransmission timer.
Definition: socket.h:399
error_t socketSetRxBufferSize(Socket *socket, size_t size)
Specify the size of the TCP receive buffer.
Definition: socket.c:1237
bool_t ownedFlag
The user is the owner of the TCP socket.
Definition: socket.h:339
error_t socketGetLocalAddr(Socket *socket, IpAddr *localIpAddr, uint16_t *localPort)
Retrieve the local address for a given socket.
Definition: socket.c:1953
error_t socketUnblockMulticastSource(Socket *socket, const IpAddr *groupAddr, const IpAddr *srcAddr)
Unblock specific source for specific group (delta-based API)
Definition: socket.c:1004
uint32_t ttl
Definition: dns_common.h:221
Structure describing a socket.
Definition: socket.h:305
Socket * socket
Handle to a socket to monitor.
Definition: socket.h:427
@ SOCKET_EVENT_CONNECTED
Definition: socket.h:173
SocketEthProtocol
Ethernet protocols.
Definition: socket.h:118
Receive buffer.
Definition: tcp.h:442
TcpQueueItem * retransmitQueue
Retransmission queue.
Definition: socket.h:398
Transmit buffer.
Definition: tcp.h:430
unsigned int uint_t
Definition: compiler_port.h:50
systime_t rttvar
Round-trip time variation.
Definition: socket.h:365
@ SOCKET_FLAG_DONT_WAIT
Definition: socket.h:139
TCP/IP stack core.
@ SOCKET_EVENT_CLOSED
Definition: socket.h:174
TcpState state
Current state of the TCP finite state machine.
Definition: socket.h:338
uint_t sackBlockCount
Number of non-contiguous blocks that have been received.
Definition: socket.h:391
uint8_t ttl
Time-to-live value.
Definition: socket.h:245
#define SOCKET_MAX_COUNT
Definition: socket.h:46
uint8_t tos
Type-of-service value.
Definition: socket.h:316
systime_t rttStartTime
Round-trip start time.
Definition: socket.h:363
@ SOCKET_SD_BOTH
Definition: socket.h:161
uint32_t rttSeqNum
Sequence number identifying a TCP segment.
Definition: socket.h:362
SocketEvent
Socket events.
Definition: socket.h:170
@ SOCKET_ETH_PROTO_ALL
Definition: socket.h:119
@ SOCKET_IP_PROTO_TCP
Definition: socket.h:107
uint16_t srcPort
Source port.
Definition: socket.h:250
SocketMulticastGroup multicastGroups[SOCKET_MAX_MULTICAST_GROUPS]
Multicast groups.
Definition: socket.h:320
@ SOCKET_FLAG_BREAK_CRLF
Definition: socket.h:141
error_t socketSetKeepAliveParams(Socket *socket, systime_t idle, systime_t interval, uint_t maxProbes)
Set TCP keep-alive parameters.
Definition: socket.c:1122
uint_t n
Number of bytes acknowledged during the whole round-trip.
Definition: socket.h:373
NetBuffer * buffer
Definition: socket.h:294
uint_t eventMask
Requested events.
Definition: socket.h:428
@ SOCKET_OPTION_UDP_NO_CHECKSUM
Definition: socket.h:206
error_t socketReceiveEx(Socket *socket, IpAddr *srcIpAddr, uint16_t *srcPort, IpAddr *destIpAddr, void *data, size_t size, size_t *received, uint_t flags)
Receive a datagram.
Definition: socket.c:1736
@ SOCKET_OPTION_TCP_NO_DELAY
Definition: socket.h:205
int_t errnoCode
Definition: socket.h:330
size_t offset
Definition: socket.h:295
@ SOCKET_ETH_PROTO_LLDP
Definition: socket.h:125
@ SOCKET_OPTION_IPV4_PKT_INFO
Definition: socket.h:196
error_t socketSetDscp(Socket *socket, uint8_t dscp)
Set DSCP field.
Definition: socket.c:223
error_t getHostByName(NetInterface *interface, const char_t *name, IpAddr *ipAddr, uint_t flags)
Resolve a host name into an IP address.
Definition: socket.c:2274
NetTimer overrideTimer
Override timer.
Definition: socket.h:409
uint16_t mss
Maximum segment size.
Definition: socket.h:343
Ipv4Addr destIpAddr
Definition: ipcp.h:80