SimpleLink CC31xx/CC32xx Host Driver  Version 3.0.1.71
Simplifies the implementation of Internet connectivity
sl_socket.h
1 /*
2  * sl_socket.h - CC31xx/CC32xx Host Driver Implementation
3  *
4  * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/
5  *
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  *
11  * Redistributions of source code must retain the above copyright
12  * notice, this list of conditions and the following disclaimer.
13  *
14  * Redistributions in binary form must reproduce the above copyright
15  * notice, this list of conditions and the following disclaimer in the
16  * documentation and/or other materials provided with the
17  * distribution.
18  *
19  * Neither the name of Texas Instruments Incorporated nor the names of
20  * its contributors may be used to endorse or promote products derived
21  * from this software without specific prior written permission.
22  *
23  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
26  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
27  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
28  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
29  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
30  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
33  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34  *
35 */
36 
37 /*****************************************************************************/
38 /* Include files */
39 /*****************************************************************************/
40 #include <ti/drivers/net/wifi/simplelink.h>
41 
42 #ifndef __SL_SOCKET_H__
43 #define __SL_SOCKET_H__
44 
45 
46 #ifdef __cplusplus
47 extern "C" {
48 #endif
49 
62 /*****************************************************************************/
63 /* Macro declarations */
64 /*****************************************************************************/
65 #undef SL_FD_SETSIZE
66 #define SL_FD_SETSIZE SL_MAX_SOCKETS /* Number of sockets to select on - same is max sockets! */
67 #define SL_BSD_SOCKET_ID_MASK (0x1F) /* Index using the LBS 4 bits for socket id 0-7 */
68 
69 /* Define some BSD protocol constants. */
70 #define SL_SOCK_STREAM (1) /* TCP Socket */
71 #define SL_SOCK_DGRAM (2) /* UDP Socket */
72 #define SL_SOCK_RAW (3) /* Raw socket */
73 #define SL_SOCK_RX_MTR (4) /* Used for traffic RX metrics */
74 #define SL_IPPROTO_TCP (6) /* TCP Raw Socket */
75 #define SL_IPPROTO_UDP (17) /* UDP Raw Socket */
76 #define SL_IPPROTO_RAW (255) /* Raw Socket */
77 #define SL_SEC_SOCKET (100) /* Secured Socket Layer (SSL,TLS) */
78 
79 /* Address families. */
80 #define SL_AF_INET (2) /* IPv4 socket (UDP, TCP, etc) */
81 #define SL_AF_INET6 (3) /* IPv6 socket (UDP, TCP, etc) */
82 #define SL_AF_RF (6) /* data include RF parameter, All layer by user (Wifi could be disconnected) */
83 #define SL_AF_PACKET (17)
84 /* Protocol families, same as address families. */
85 #define SL_PF_INET AF_INET
86 #define SL_PF_INET6 AF_INET6
87 #define SL_INADDR_ANY (0) /* bind any address */
88 #define SL_IN6ADDR_ANY (0)
89 
90 
91 /* Max payload size by protocol */
92 #define SL_SOCKET_PAYLOAD_TYPE_MASK (0xF0) /*4 bits type, 4 bits sockets id */
93 #define SL_SOCKET_PAYLOAD_TYPE_RAW_TRANCEIVER (0x80) /* 1536 bytes */
94 
95 /* SL_SOCKET_EVENT_CLASS_BSD user events */
96 #define SL_SOCKET_TX_FAILED_EVENT (1)
97 #define SL_SOCKET_ASYNC_EVENT (2)
98 
99 
100 /* SL_SOCKET_EVENT_CLASS_BSD user trigger events */
101 #define SL_SOCKET_TRIGGER_EVENT_SELECT (1)
102 
103 #define SL_SOL_SOCKET (1) /* Define the socket option category. */
104 #define SL_IPPROTO_IP (2) /* Define the IP option category. */
105 #define SL_SOL_PHY_OPT (3) /* Define the PHY option category. */
106 
107 #define SL_SO_RCVBUF (8) /* Setting TCP receive buffer size */
108 #define SL_SO_KEEPALIVE (9) /* Connections are kept alive with periodic messages */
109 #define SL_SO_LINGER (13) /* Socket lingers on close pending remaining send/receive packets. */
110 #define SL_SO_RCVTIMEO (20) /* Enable receive timeout */
111 #define SL_SO_SNDTIMEO (21) /* Enable send timeout */
112 #define SL_SO_NONBLOCKING (24) /* Enable . disable nonblocking mode */
113 #define SL_SO_SECMETHOD (25) /* security metohd */
114 #define SL_SO_SECURE_MASK (26) /* security mask */
115 #define SL_SO_SECURE_FILES (27) /* security files */
116 #define SL_SO_CHANGE_CHANNEL (28) /* This option is available only when transceiver started */
117 #define SL_SO_SECURE_FILES_PRIVATE_KEY_FILE_NAME (30) /* This option used to configue secure file */
118 #define SL_SO_SECURE_FILES_CERTIFICATE_FILE_NAME (31) /* This option used to configue secure file */
119 #define SL_SO_SECURE_FILES_CA_FILE_NAME (32) /* This option used to configue secure file */
120 #define SL_SO_SECURE_FILES_PEER_CERT_OR_DH_KEY_FILE_NAME (33) /* This option used to configue secure file - in server mode DH params file, and in client mode peer cert for domain verification */
121 #define SL_SO_STARTTLS (35) /* initiate STARTTLS on non secure socket */
122 #define SL_SO_SSL_CONNECTION_PARAMS (36) /* retrieve by getsockopt the connection params of the current SSL connection in to SlSockSSLConnectionParams_t*/
123 #define SL_SO_KEEPALIVETIME (37) /* keepalive time out */
124 #define SL_SO_SECURE_DISABLE_CERTIFICATE_STORE (38) /* disable certificate store */
125 #define SL_SO_RX_NO_IP_BOUNDARY (39) /* connectionless socket disable rx boundary */
126 #define SL_SO_SECURE_ALPN (40) /* set the ALPN bitmap list */
127 #define SL_SO_SECURE_EXT_CLIENT_CHLNG_RESP (41) /*set external challange for client certificate */
128 #define SL_SO_SECURE_DOMAIN_NAME_VERIFICATION (42) /* set a domain name for verification */
129 #define SL_SO_SECURE_ENABLE_OCSP (43) /* enable OCSP and OCSP stapling */
130 #define SL_SO_SECURE_ALPN_GENERAL (44) /* set ALPN protocol name by string - only one protocol name can be set */
131 
132 #define SL_IP_MULTICAST_IF (60) /* Specify outgoing multicast interface */
133 #define SL_IP_MULTICAST_TTL (61) /* Specify the TTL value to use for outgoing multicast packet. */
134 #define SL_IP_ADD_MEMBERSHIP (65) /* Join IPv4 multicast membership */
135 #define SL_IP_DROP_MEMBERSHIP (66) /* Leave IPv4 multicast membership */
136 #define SL_IP_HDRINCL (67) /* Raw socket IPv4 header included. */
137 #define SL_IP_RAW_RX_NO_HEADER (68) /* Proprietary socket option that does not includeIPv4/IPv6 header (and extension headers) on received raw sockets*/
138 #define SL_IP_RAW_IPV6_HDRINCL (69) /* Transmitted buffer over IPv6 socket contains IPv6 header. */
139 #define SL_IPV6_ADD_MEMBERSHIP (70) /* Join IPv6 multicast membership */
140 #define SL_IPV6_DROP_MEMBERSHIP (71) /* Leave IPv6 multicast membership */
141 #define SL_IPV6_MULTICAST_HOPS (72) /* Specify the hops value to use for outgoing multicast packet. */
142 
143 #define SL_SO_PHY_RATE (100) /* WLAN Transmit rate */
144 #define SL_SO_PHY_TX_POWER (101) /* TX Power level */
145 #define SL_SO_PHY_NUM_FRAMES_TO_TX (102) /* Number of frames to transmit */
146 #define SL_SO_PHY_PREAMBLE (103) /* Preamble for transmission */
147 #define SL_SO_PHY_TX_INHIBIT_THRESHOLD (104) /* TX Inhibit Threshold (CCA) */
148 #define SL_SO_PHY_TX_TIMEOUT (105) /* TX timeout for Transceiver frames (lifetime) in miliseconds (max value is 100ms) */
149 #define SL_SO_PHY_ALLOW_ACKS (106) /* Enable sending ACKs in transceiver mode */
150 #define SL_SO_PHY_RX_BSSID_DATA_FRAMES (107) /* Collect mertics from all data frames in the BSS on the RX metrics socket */
151 
152 typedef enum
153 {
154  SL_TX_INHIBIT_THRESHOLD_MIN = 1,
155  SL_TX_INHIBIT_THRESHOLD_LOW = 2,
156  SL_TX_INHIBIT_THRESHOLD_DEFAULT = 3,
157  SL_TX_INHIBIT_THRESHOLD_MED = 4,
158  SL_TX_INHIBIT_THRESHOLD_HIGH = 5,
159  SL_TX_INHIBIT_THRESHOLD_MAX = 6
160 } SlTxInhibitThreshold_e;
161 
162 #define SL_SO_SEC_METHOD_SSLV3 (0) /* security metohd SSL v3*/
163 #define SL_SO_SEC_METHOD_TLSV1 (1) /* security metohd TLS v1*/
164 #define SL_SO_SEC_METHOD_TLSV1_1 (2) /* security metohd TLS v1_1*/
165 #define SL_SO_SEC_METHOD_TLSV1_2 (3) /* security metohd TLS v1_2*/
166 #define SL_SO_SEC_METHOD_SSLv3_TLSV1_2 (4) /* use highest possible version from SSLv3 - TLS 1.2*/
167 #define SL_SO_SEC_METHOD_DLSV1 (5) /* security metohd DTL v1 */
168 
169 #define SL_SEC_MASK_SSL_RSA_WITH_RC4_128_SHA (1 << 0)
170 #define SL_SEC_MASK_SSL_RSA_WITH_RC4_128_MD5 (1 << 1)
171 #define SL_SEC_MASK_TLS_RSA_WITH_AES_256_CBC_SHA (1 << 2)
172 #define SL_SEC_MASK_TLS_DHE_RSA_WITH_AES_256_CBC_SHA (1 << 3)
173 #define SL_SEC_MASK_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (1 << 4)
174 #define SL_SEC_MASK_TLS_ECDHE_RSA_WITH_RC4_128_SHA (1 << 5)
175 #define SL_SEC_MASK_TLS_RSA_WITH_AES_128_CBC_SHA256 (1 << 6)
176 #define SL_SEC_MASK_TLS_RSA_WITH_AES_256_CBC_SHA256 (1 << 7)
177 #define SL_SEC_MASK_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (1 << 8)
178 #define SL_SEC_MASK_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 (1 << 9)
179 #define SL_SEC_MASK_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA (1 << 10)
180 #define SL_SEC_MASK_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA (1 << 11)
181 #define SL_SEC_MASK_TLS_RSA_WITH_AES_128_GCM_SHA256 (1 << 12)
182 #define SL_SEC_MASK_TLS_RSA_WITH_AES_256_GCM_SHA384 (1 << 13)
183 #define SL_SEC_MASK_TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (1 << 14)
184 #define SL_SEC_MASK_TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (1 << 15)
185 #define SL_SEC_MASK_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (1 << 16)
186 #define SL_SEC_MASK_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (1 << 17)
187 #define SL_SEC_MASK_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (1 << 18)
188 #define SL_SEC_MASK_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 (1 << 19)
189 #define SL_SEC_MASK_TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 (1 << 20)
190 #define SL_SEC_MASK_TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (1 << 21)
191 #define SL_SEC_MASK_TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (1 << 22)
192 
193 #define SL_SEC_MASK_SECURE_DEFAULT ((SL_SEC_MASK_TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 << 1) - 1)
194 
195 #define SL_SECURE_ALPN_H1 (1 << 0)
196 #define SL_SECURE_ALPN_H2 (1 << 1)
197 #define SL_SECURE_ALPN_H2C (1 << 2)
198 #define SL_SECURE_ALPN_H2_14 (1 << 3)
199 #define SL_SECURE_ALPN_H2_16 (1 << 4)
200 #define SL_SECURE_ALPN_FULL_LIST ((SL_SECURE_ALPN_H2_16 << 1 ) - 1)
201 
202 #define SL_MSG_DONTWAIT (0x00000008) /* Nonblocking IO */
203 
204 /* AP DHCP Server - IP Release reason code */
205 #define SL_IP_LEASE_PEER_RELEASE (0)
206 #define SL_IP_LEASE_PEER_DECLINE (1)
207 #define SL_IP_LEASE_EXPIRED (2)
208 
209 /* possible types when receiving SL_SOCKET_ASYNC_EVENT*/
210 #define SL_SSL_ACCEPT (0) /* accept failed due to ssl issue ( tcp pass) */
211 #define SL_RX_FRAGMENTATION_TOO_BIG (1) /* connection less mode, rx packet fragmentation > 16K, packet is being released */
212 #define SL_OTHER_SIDE_CLOSE_SSL_DATA_NOT_ENCRYPTED (2) /* remote side down from secure to unsecure */
213 #define SL_SSL_NOTIFICATION_CONNECTED_SECURED (3) /* STARTTLS success */
214 #define SL_SSL_NOTIFICATION_HANDSHAKE_FAILED (4) /* STARTTLS handshake faild */
215 #define SL_SSL_NOTIFICATION_WRONG_ROOT_CA (5) /* Root CA configured is wrong, the name is in SocketAsyncEvent.EventData.extraInfo */
216 #define SL_SOCKET_ASYNC_EVENT_SSL_NOTIFICATION_WRONG_ROOT_CA (5)
217 #define SL_MAX_ISSUER_AND_SUBJECT_NAME_LEN (16)
218 
219 /*****************************************************************************/
220 /* Structure/Enum declarations */
221 /*****************************************************************************/
222 
223 /* Internet address */
224 typedef struct SlInAddr_t
225 {
226 #ifndef s_addr
227  _u32 s_addr; /* Internet address 32 bits */
228 #else
229  union S_un {
230  struct { _u8 s_b1,s_b2,s_b3,s_b4; } S_un_b;
231  struct { _u16 s_w1,s_w2; } S_un_w;
232  _u32 S_addr;
233  } S_un;
234 #endif
235 }SlInAddr_t;
236 
237 /* IpV6 or Ipv6 EUI64 */
238 typedef struct SlIn6Addr_t
239 {
240  union
241  {
242  _u8 _S6_u8[16];
243  _u32 _S6_u32[4];
244  } _S6_un;
245 }SlIn6Addr_t;
246 
247 
248 /* sockopt */
249 typedef struct
250 {
251  _u32 KeepaliveEnabled; /* 0 = disabled;1 = enabled; default = 1*/
253 
254 typedef struct
255 {
256  _u32 ReuseaddrEnabled; /* 0 = disabled; 1 = enabled; default = 1*/
258 
259 typedef struct
260 {
261  _i32 RxIpNoBoundaryEnabled; /* 0 = keep IP boundary; 1 = don`t keep ip boundary; default = 0; */
263 
264 typedef struct
265 {
266  _u32 WinSize; /* receive window size for tcp sockets */
268 
269 typedef struct
270 {
271  _u32 NonBlockingEnabled;/* 0 = disabled;1 = enabled;default = 1*/
273 
274 typedef struct
275 {
276  _u8 Sd;
277  _u8 Type;
278  _i16 Val;
279  _i8 pExtraInfo[128];
281 
282 typedef struct
283 {
284  _i16 Status;
285  _u8 Sd;
286  _u8 Padding;
288 
289 
290 typedef union
291 {
292  SlSockTxFailEventData_t SockTxFailData;
293  SlSocketAsyncEvent_t SockAsyncData;
295 
296 
297 typedef struct
298 {
299  _u32 Event;
300  SlSockEventData_u SocketAsyncEvent;
301 } SlSockEvent_t;
302 
303 typedef struct
304 {
305  _u32 Event;
306  _u32 EventData;
308 
309 
310 typedef struct
311 {
312  _u32 SecureALPN;
314 
315 typedef struct
316 {
317  _u32 SecureMask;
319 
320 typedef struct
321 {
322  _u8 SecureMethod;
324 
325 typedef struct
326 {
327  _u16 SubjectNameXoredSha1;
328  _u16 IssuerNameXoredSha1;
329  _i8 FromDate[8];
330  _i8 ToDate[8];
331  _i8 SubjectName[SL_MAX_ISSUER_AND_SUBJECT_NAME_LEN];
332  _i8 IssuerName[SL_MAX_ISSUER_AND_SUBJECT_NAME_LEN];
333  _i8 SubjectNameLen;
334  _i8 IssuerNameLen;
335  _i8 Padding[2];
337 
338 
339 typedef struct
340 {
341  _u32 SecureVersion; /* what version of SSL decided in the handshake */
342  _u32 SecureCipherSuit; /* what Cipher Index was decided in the handshake */
343  _u32 SecureIsPeerValidated; /* was the other peer verified */
344  _u32 SecureALPNChosenProtocol; /* bit indicate one of the protocol defined above
345  SL_SECURE_ALPN_H1
346  SL_SECURE_ALPN_H2
347  SL_SECURE_ALPN_H2C
348  SL_SECURE_ALPN_H2_14
349  SL_SECURE_ALPN_H2_16
350  */
351  SlSockSSLCertInfo_t SecurePeerCertinfo;
353 
354 
355 typedef struct
356 {
357  _u16 type; /* holds the type of the info frame, currently only value 1 indicating DATA frame */
358  _u16 length; /* holds the length of the info frame recevied */
360 
361 
362 typedef enum
363 {
364  SL_SOCK_TX_RATE_1M = 1,
365  SL_SOCK_TX_RATE_2M = 2,
366  SL_SOCK_TX_RATE_5_5M = 3,
367  SL_SOCK_TX_RATE_11M = 4,
368  SL_SOCK_TX_RATE_6M = 6,
369  SL_SOCK_TX_RATE_9M = 7,
370  SL_SOCK_TX_RATE_12M = 8,
371  SL_SOCK_TX_RATE_18M = 9,
372  SL_SOCK_TX_RATE_24M = 10,
373  SL_SOCK_TX_RATE_36M = 11,
374  SL_SOCK_TX_RATE_48M = 12,
375  SL_SOCK_TX_RATE_54M = 13,
376  SL_SOCK_TX_RATE_MCS_0 = 14,
377  SL_SOCK_TX_RATE_MCS_1 = 15,
378  SL_SOCK_TX_RATE_MCS_2 = 16,
379  SL_SOCK_TX_RATE_MCS_3 = 17,
380  SL_SOCK_TX_RATE_MCS_4 = 18,
381  SL_SOCK_TX_RATE_MCS_5 = 19,
382  SL_SOCK_TX_RATE_MCS_6 = 20,
383  SL_SOCK_TX_RATE_MCS_7 = 21,
384  SL_SOCK_TX_MAX_NUM_RATES = 0xFF
385 }slSockTransceiverTXRateTable_e;
386 
387 
388 typedef enum
389 {
390  SL_SOCK_RX_RATE_1M = 0,
391  SL_SOCK_RX_RATE_2M = 1,
392  SL_SOCK_RX_RATE_5_5M = 2,
393  SL_SOCK_RX_RATE_11M = 3,
394  SL_SOCK_RX_RATE_6M = 4,
395  SL_SOCK_RX_RATE_9M = 5,
396  SL_SOCK_RX_RATE_12M = 6,
397  SL_SOCK_RX_RATE_18M = 7,
398  SL_SOCK_RX_RATE_24M = 8,
399  SL_SOCK_RX_RATE_36M = 9,
400  SL_SOCK_RX_RATE_48M = 10,
401  SL_SOCK_RX_RATE_54M = 11,
402  SL_SOCK_RX_RATE_MCS0 = 12, /* 6.5Mbps */
403  SL_SOCK_RX_RATE_MCS1 = 13, /* 13Mbps */
404  SL_SOCK_RX_RATE_MCS2 = 14, /* 19.5Mbps */
405  SL_SOCK_RX_RATE_MCS3 = 15, /* 26Mbps */
406  SL_SOCK_RX_RATE_MCS4 = 16, /* 39Mbps */
407  SL_SOCK_RX_RATE_MCS5 = 17, /* 52Mbps */
408  SL_SOCK_RX_RATE_MCS6 = 18, /* 58.5Mbps */
409  SL_SOCK_RX_RATE_MCS7 = 19, /* 65Mbps */
410  SL_SOCK_RX_RATE_MCS7_SGI = 20, /* 65Mbps+10% */
411 
412 }SlSockTransceiverRXRates_e;
413 
414 typedef enum
415 {
416  SL_BSD_SECURED_PRIVATE_KEY_IDX = 0,
417  SL_BSD_SECURED_CERTIFICATE_IDX,
418  SL_BSD_SECURED_CA_IDX,
419  SL_BSD_SECURED_DH_IDX
420 }SlSockSecureSocketFilesIndex_e;
421 
422 typedef struct
423 {
424  SlInAddr_t imr_multiaddr; /* The IPv4 multicast address to join */
425  SlInAddr_t imr_interface; /* The interface to use for this group */
427 
428 typedef struct{
429  SlIn6Addr_t ipv6mr_multiaddr; /* IPv6 multicast address of group */
430  _u32 ipv6mr_interface; /*should be 0 to choose the default multicast interface*/
432 
433 typedef struct
434 {
435  _u32 l_onoff; /* 0 = disabled; 1 = enabled; default = 0;*/
436  _u32 l_linger; /* linger time in seconds; default = 0;*/
438 
439 /* sockopt */
440 typedef _i32 SlTime_t;
441 typedef _i32 SlSuseconds_t;
442 
443 typedef struct SlTimeval_t
444 {
445  SlTime_t tv_sec; /* Seconds */
446  SlSuseconds_t tv_usec; /* Microseconds */
447 }SlTimeval_t;
448 
449 typedef _u16 SlSocklen_t;
450 
451 /* IpV4 socket address */
452 typedef struct SlSockAddr_t
453 {
454  _u16 sa_family; /* Address family (e.g. , AF_INET) */
455  _u8 sa_data[14]; /* Protocol- specific address information*/
456 }SlSockAddr_t;
457 
458 typedef struct SlSockAddrIn6_t
459 {
460  _u16 sin6_family; /* AF_INET6 || AF_INET6_EUI_48*/
461  _u16 sin6_port; /* Transport layer port. */
462  _u32 sin6_flowinfo; /* IPv6 flow information. */
463  SlIn6Addr_t sin6_addr; /* IPv6 address. */
464  _u32 sin6_scope_id; /* set of interfaces for a scope. */
466 
467 /* Socket address, Internet style. */
468 
469 typedef struct SlSockAddrIn_t
470 {
471  _u16 sin_family; /* Internet Protocol (AF_INET). */
472  _u16 sin_port; /* Address port (16 bits). */
473  SlInAddr_t sin_addr; /* Internet address (32 bits). */
474  _i8 sin_zero[8]; /* Not used. */
476 
477 typedef struct
478 {
479  _u8 SecureFiles[4];
481 
482 typedef struct SlFdSet_t /* The select socket array manager */
483 {
484  _u32 fd_array[(SL_FD_SETSIZE + (_u8)31)/(_u8)32]; /* Bit map of SOCKET Descriptors */
485 } SlFdSet_t;
486 
487 typedef struct
488 {
489  _u8 Rate; /* Received Rate, refer to slSockTransceiverRXRateTable_e */
490  _u8 Channel; /* The received channel*/
491  _i8 Rssi; /* The computed RSSI value in db of current frame */
492  _u8 Padding; /* pad to align to 32 bits */
493  _u32 Timestamp; /* Timestamp in microseconds */
495 
496 typedef struct
497 {
498  _u32 enableDisable; /* 1 to enable collecting metrics from BSS, 0 - collecting metrics from AP only. (0 is the default state) */
500 
501 
502 /*****************************************************************************/
503 /* Function prototypes */
504 /*****************************************************************************/
505 
563 #if _SL_INCLUDE_FUNC(sl_Socket)
564 _i16 sl_Socket(_i16 Domain, _i16 Type, _i16 Protocol);
565 #endif
566 
581 #if _SL_INCLUDE_FUNC(sl_Close)
582 _i16 sl_Close(_i16 sd);
583 #endif
584 
634 #if _SL_INCLUDE_FUNC(sl_Accept)
635 _i16 sl_Accept(_i16 sd, SlSockAddr_t *addr, SlSocklen_t *addrlen);
636 #endif
637 
662 #if _SL_INCLUDE_FUNC(sl_Bind)
663 _i16 sl_Bind(_i16 sd, const SlSockAddr_t *addr, _i16 addrlen);
664 #endif
665 
685 #if _SL_INCLUDE_FUNC(sl_Listen)
686 _i16 sl_Listen(_i16 sd, _i16 backlog);
687 #endif
688 
726 #if _SL_INCLUDE_FUNC(sl_Connect)
727 _i16 sl_Connect(_i16 sd, const SlSockAddr_t *addr, _i16 addrlen);
728 #endif
729 
787 #if _SL_INCLUDE_FUNC(sl_Select)
788 _i16 sl_Select(_i16 nfds, SlFdSet_t *readsds, SlFdSet_t *writesds, SlFdSet_t *exceptsds, struct SlTimeval_t *timeout);
789 #endif
790 
791 
792 
1237 #if _SL_INCLUDE_FUNC(sl_SetSockOpt)
1238 _i16 sl_SetSockOpt(_i16 sd, _i16 level, _i16 optname, const void *optval, SlSocklen_t optlen);
1239 #endif
1240 
1280 #if _SL_INCLUDE_FUNC(sl_GetSockOpt)
1281 _i16 sl_GetSockOpt(_i16 sd, _i16 level, _i16 optname, void *optval, SlSocklen_t *optlen);
1282 #endif
1283 
1350 #if _SL_INCLUDE_FUNC(sl_Recv)
1351 _i16 sl_Recv(_i16 sd, void *buf, _i16 len, _i16 flags);
1352 #endif
1353 
1408 #if _SL_INCLUDE_FUNC(sl_RecvFrom)
1409 _i16 sl_RecvFrom(_i16 sd, void *buf, _i16 len, _i16 flags, SlSockAddr_t *from, SlSocklen_t *fromlen);
1410 #endif
1411 
1458 #if _SL_INCLUDE_FUNC(sl_Send )
1459 _i16 sl_Send(_i16 sd, const void *buf, _i16 len, _i16 flags);
1460 #endif
1461 
1509 #if _SL_INCLUDE_FUNC(sl_SendTo)
1510 _i16 sl_SendTo(_i16 sd, const void *buf, _i16 len, _i16 flags, const SlSockAddr_t *to, SlSocklen_t tolen);
1511 #endif
1512 
1528 #if _SL_INCLUDE_FUNC(sl_StartTLS)
1529 _i16 sl_StartTLS(_i16 sd);
1530 #endif
1531 
1545 #if _SL_INCLUDE_FUNC(sl_Htonl )
1546 _u32 sl_Htonl( _u32 val );
1547 
1548 #define sl_Ntohl sl_Htonl /* Reorder the bytes of a 16-bit unsigned value from network order to processor orde. */
1549 #endif
1550 
1564 #if _SL_INCLUDE_FUNC(sl_Htons )
1565 _u16 sl_Htons( _u16 val );
1566 
1567 #define sl_Ntohs sl_Htons /* Reorder the bytes of a 16-bit unsigned value from network order to processor orde. */
1568 #endif
1569 
1579 void SL_SOCKET_FD_SET(_i16 fd, SlFdSet_t *fdset);
1580 
1586 void SL_SOCKET_FD_CLR(_i16 fd, SlFdSet_t *fdset);
1587 
1588 
1597 _i16 SL_SOCKET_FD_ISSET(_i16 fd, SlFdSet_t *fdset);
1598 
1604 void SL_SOCKET_FD_ZERO(SlFdSet_t *fdset);
1605 
1618 #ifdef __cplusplus
1619 }
1620 #endif /* __cplusplus */
1621 
1622 #endif /* __SOCKET_H__ */
1623 
1624 
_i16 sl_Bind(_i16 sd, const SlSockAddr_t *addr, _i16 addrlen)
Assign a name to a socket.
Definition: sl_socket.c:237
_u32 sl_Htonl(_u32 val)
Reorder the bytes of a 32-bit unsigned value.
Definition: sl_socket.c:806
_i16 sl_Select(_i16 nfds, SlFdSet_t *readsds, SlFdSet_t *writesds, SlFdSet_t *exceptsds, struct SlTimeval_t *timeout)
Monitor socket activity.
Definition: sl_socket.c:1762
_i16 sl_SetSockOpt(_i16 sd, _i16 level, _i16 optname, const void *optval, SlSocklen_t optlen)
Set socket options.
Definition: sl_socket.c:932
_i16 sl_StartTLS(_i16 sd)
Initiate TLS connection on a socket.
Definition: sl_socket.c:1972
_u16 sl_Htons(_u16 val)
Reorder the bytes of a 16-bit unsigned value.
Definition: sl_socket.c:827
_i16 sl_Close(_i16 sd)
Gracefully close socket.
Definition: sl_socket.c:176
_i16 sl_Recv(_i16 sd, void *buf, _i16 len, _i16 flags)
Read data from TCP socket.
Definition: sl_socket.c:881
_i16 sl_GetSockOpt(_i16 sd, _i16 level, _i16 optname, void *optval, SlSocklen_t *optlen)
Get socket options.
Definition: sl_socket.c:975
_i16 sl_Socket(_i16 Domain, _i16 Type, _i16 Protocol)
Create an endpoint for communication.
Definition: sl_socket.c:133
_i16 sl_RecvFrom(_i16 sd, void *buf, _i16 len, _i16 flags, SlSockAddr_t *from, SlSocklen_t *fromlen)
Read data from socket.
Definition: sl_socket.c:360
_i16 sl_Accept(_i16 sd, SlSockAddr_t *addr, SlSocklen_t *addrlen)
Accept a connection on a socket.
Definition: sl_socket.c:692
_i16 sl_Connect(_i16 sd, const SlSockAddr_t *addr, _i16 addrlen)
Initiate a connection on a socket.
Definition: sl_socket.c:449
_i16 sl_Listen(_i16 sd, _i16 backlog)
Listen for connections on a socket.
Definition: sl_socket.c:658
_i16 sl_SendTo(_i16 sd, const void *buf, _i16 len, _i16 flags, const SlSockAddr_t *to, SlSocklen_t tolen)
Write data to socket.
Definition: sl_socket.c:283
_i16 sl_Send(_i16 sd, const void *buf, _i16 len, _i16 flags)
Write data to TCP socket.
Definition: sl_socket.c:594