SimpleLink CC31xx/CC32xx Host Driver  Version 3.0.1.55
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 - https://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_NONBLOCKING (24) /* Enable . disable nonblocking mode */
112 #define SL_SO_SECMETHOD (25) /* security metohd */
113 #define SL_SO_SECURE_MASK (26) /* security mask */
114 #define SL_SO_SECURE_FILES (27) /* security files */
115 #define SL_SO_CHANGE_CHANNEL (28) /* This option is available only when transceiver started */
116 #define SL_SO_SECURE_FILES_PRIVATE_KEY_FILE_NAME (30) /* This option used to configue secure file */
117 #define SL_SO_SECURE_FILES_CERTIFICATE_FILE_NAME (31) /* This option used to configue secure file */
118 #define SL_SO_SECURE_FILES_CA_FILE_NAME (32) /* This option used to configue secure file */
119 #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 */
120 #define SL_SO_STARTTLS (35) /* initiate STARTTLS on non secure socket */
121 #define SL_SO_SSL_CONNECTION_PARAMS (36) /* retrieve by getsockopt the connection params of the current SSL connection in to SlSockSSLConnectionParams_t*/
122 #define SL_SO_KEEPALIVETIME (37) /* keepalive time out */
123 #define SL_SO_SECURE_DISABLE_CERTIFICATE_STORE (38) /* disable certificate store */
124 #define SL_SO_RX_NO_IP_BOUNDARY (39) /* connectionless socket disable rx boundary */
125 #define SL_SO_SECURE_ALPN (40) /* set the ALPN bitmap list */
126 #define SL_SO_SECURE_EXT_CLIENT_CHLNG_RESP (41) /*set external challange for client certificate */
127 #define SL_SO_SECURE_DOMAIN_NAME_VERIFICATION (42) /* set a domain name for verification */
128 #define SL_SO_SECURE_ENABLE_OCSP (43) /* enable OCSP and OCSP stapling */
129 #define SL_SO_SECURE_ALPN_GENERAL (44) /* set ALPN protocol name by string - only one protocol name can be set */
130 
131 #define SL_IP_MULTICAST_IF (60) /* Specify outgoing multicast interface */
132 #define SL_IP_MULTICAST_TTL (61) /* Specify the TTL value to use for outgoing multicast packet. */
133 #define SL_IP_ADD_MEMBERSHIP (65) /* Join IPv4 multicast membership */
134 #define SL_IP_DROP_MEMBERSHIP (66) /* Leave IPv4 multicast membership */
135 #define SL_IP_HDRINCL (67) /* Raw socket IPv4 header included. */
136 #define SL_IP_RAW_RX_NO_HEADER (68) /* Proprietary socket option that does not includeIPv4/IPv6 header (and extension headers) on received raw sockets*/
137 #define SL_IP_RAW_IPV6_HDRINCL (69) /* Transmitted buffer over IPv6 socket contains IPv6 header. */
138 #define SL_IPV6_ADD_MEMBERSHIP (70) /* Join IPv6 multicast membership */
139 #define SL_IPV6_DROP_MEMBERSHIP (71) /* Leave IPv6 multicast membership */
140 #define SL_IPV6_MULTICAST_HOPS (72) /* Specify the hops value to use for outgoing multicast packet. */
141 
142 #define SL_SO_PHY_RATE (100) /* WLAN Transmit rate */
143 #define SL_SO_PHY_TX_POWER (101) /* TX Power level */
144 #define SL_SO_PHY_NUM_FRAMES_TO_TX (102) /* Number of frames to transmit */
145 #define SL_SO_PHY_PREAMBLE (103) /* Preamble for transmission */
146 #define SL_SO_PHY_TX_INHIBIT_THRESHOLD (104) /* TX Inhibit Threshold (CCA) */
147 #define SL_SO_PHY_TX_TIMEOUT (105) /* TX timeout for Transceiver frames (lifetime) in miliseconds (max value is 100ms) */
148 #define SL_SO_PHY_ALLOW_ACKS (106) /* Enable sending ACKs in transceiver mode */
149 #define SL_SO_PHY_RX_BSSID_DATA_FRAMES (107) /* Collect mertics from all data frames in the BSS on the RX metrics socket */
150 
151 typedef enum
152 {
153  SL_TX_INHIBIT_THRESHOLD_MIN = 1,
154  SL_TX_INHIBIT_THRESHOLD_LOW = 2,
155  SL_TX_INHIBIT_THRESHOLD_DEFAULT = 3,
156  SL_TX_INHIBIT_THRESHOLD_MED = 4,
157  SL_TX_INHIBIT_THRESHOLD_HIGH = 5,
158  SL_TX_INHIBIT_THRESHOLD_MAX = 6
159 } SlTxInhibitThreshold_e;
160 
161 #define SL_SO_SEC_METHOD_SSLV3 (0) /* security metohd SSL v3*/
162 #define SL_SO_SEC_METHOD_TLSV1 (1) /* security metohd TLS v1*/
163 #define SL_SO_SEC_METHOD_TLSV1_1 (2) /* security metohd TLS v1_1*/
164 #define SL_SO_SEC_METHOD_TLSV1_2 (3) /* security metohd TLS v1_2*/
165 #define SL_SO_SEC_METHOD_SSLv3_TLSV1_2 (4) /* use highest possible version from SSLv3 - TLS 1.2*/
166 #define SL_SO_SEC_METHOD_DLSV1 (5) /* security metohd DTL v1 */
167 
168 #define SL_SEC_MASK_SSL_RSA_WITH_RC4_128_SHA (1 << 0)
169 #define SL_SEC_MASK_SSL_RSA_WITH_RC4_128_MD5 (1 << 1)
170 #define SL_SEC_MASK_TLS_RSA_WITH_AES_256_CBC_SHA (1 << 2)
171 #define SL_SEC_MASK_TLS_DHE_RSA_WITH_AES_256_CBC_SHA (1 << 3)
172 #define SL_SEC_MASK_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (1 << 4)
173 #define SL_SEC_MASK_TLS_ECDHE_RSA_WITH_RC4_128_SHA (1 << 5)
174 #define SL_SEC_MASK_TLS_RSA_WITH_AES_128_CBC_SHA256 (1 << 6)
175 #define SL_SEC_MASK_TLS_RSA_WITH_AES_256_CBC_SHA256 (1 << 7)
176 #define SL_SEC_MASK_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (1 << 8)
177 #define SL_SEC_MASK_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 (1 << 9)
178 #define SL_SEC_MASK_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA (1 << 10)
179 #define SL_SEC_MASK_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA (1 << 11)
180 #define SL_SEC_MASK_TLS_RSA_WITH_AES_128_GCM_SHA256 (1 << 12)
181 #define SL_SEC_MASK_TLS_RSA_WITH_AES_256_GCM_SHA384 (1 << 13)
182 #define SL_SEC_MASK_TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (1 << 14)
183 #define SL_SEC_MASK_TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (1 << 15)
184 #define SL_SEC_MASK_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (1 << 16)
185 #define SL_SEC_MASK_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (1 << 17)
186 #define SL_SEC_MASK_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (1 << 18)
187 #define SL_SEC_MASK_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 (1 << 19)
188 #define SL_SEC_MASK_TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 (1 << 20)
189 #define SL_SEC_MASK_TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (1 << 21)
190 #define SL_SEC_MASK_TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (1 << 22)
191 
192 #define SL_SEC_MASK_SECURE_DEFAULT ((SL_SEC_MASK_TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 << 1) - 1)
193 
194 #define SL_SECURE_ALPN_H1 (1 << 0)
195 #define SL_SECURE_ALPN_H2 (1 << 1)
196 #define SL_SECURE_ALPN_H2C (1 << 2)
197 #define SL_SECURE_ALPN_H2_14 (1 << 3)
198 #define SL_SECURE_ALPN_H2_16 (1 << 4)
199 #define SL_SECURE_ALPN_FULL_LIST ((SL_SECURE_ALPN_H2_16 << 1 ) - 1)
200 
201 #define SL_MSG_DONTWAIT (0x00000008) /* Nonblocking IO */
202 
203 /* AP DHCP Server - IP Release reason code */
204 #define SL_IP_LEASE_PEER_RELEASE (0)
205 #define SL_IP_LEASE_PEER_DECLINE (1)
206 #define SL_IP_LEASE_EXPIRED (2)
207 
208 /* possible types when receiving SL_SOCKET_ASYNC_EVENT*/
209 #define SL_SSL_ACCEPT (0) /* accept failed due to ssl issue ( tcp pass) */
210 #define SL_RX_FRAGMENTATION_TOO_BIG (1) /* connection less mode, rx packet fragmentation > 16K, packet is being released */
211 #define SL_OTHER_SIDE_CLOSE_SSL_DATA_NOT_ENCRYPTED (2) /* remote side down from secure to unsecure */
212 #define SL_SSL_NOTIFICATION_CONNECTED_SECURED (3) /* STARTTLS success */
213 #define SL_SSL_NOTIFICATION_HANDSHAKE_FAILED (4) /* STARTTLS handshake faild */
214 #define SL_SSL_NOTIFICATION_WRONG_ROOT_CA (5) /* Root CA configured is wrong, the name is in SocketAsyncEvent.EventData.extraInfo */
215 #define SL_SOCKET_ASYNC_EVENT_SSL_NOTIFICATION_WRONG_ROOT_CA (5)
216 #define SL_MAX_ISSUER_AND_SUBJECT_NAME_LEN (16)
217 
218 /*****************************************************************************/
219 /* Structure/Enum declarations */
220 /*****************************************************************************/
221 
222 /* Internet address */
223 typedef struct SlInAddr_t
224 {
225 #ifndef s_addr
226  _u32 s_addr; /* Internet address 32 bits */
227 #else
228  union S_un {
229  struct { _u8 s_b1,s_b2,s_b3,s_b4; } S_un_b;
230  struct { _u16 s_w1,s_w2; } S_un_w;
231  _u32 S_addr;
232  } S_un;
233 #endif
234 }SlInAddr_t;
235 
236 /* IpV6 or Ipv6 EUI64 */
237 typedef struct SlIn6Addr_t
238 {
239  union
240  {
241  _u8 _S6_u8[16];
242  _u32 _S6_u32[4];
243  } _S6_un;
244 }SlIn6Addr_t;
245 
246 
247 /* sockopt */
248 typedef struct
249 {
250  _u32 KeepaliveEnabled; /* 0 = disabled;1 = enabled; default = 1*/
252 
253 typedef struct
254 {
255  _u32 ReuseaddrEnabled; /* 0 = disabled; 1 = enabled; default = 1*/
257 
258 typedef struct
259 {
260  _i32 RxIpNoBoundaryEnabled; /* 0 = keep IP boundary; 1 = don`t keep ip boundary; default = 0; */
262 
263 typedef struct
264 {
265  _u32 WinSize; /* receive window size for tcp sockets */
267 
268 typedef struct
269 {
270  _u32 NonBlockingEnabled;/* 0 = disabled;1 = enabled;default = 1*/
272 
273 typedef struct
274 {
275  _u8 Sd;
276  _u8 Type;
277  _i16 Val;
278  _i8 pExtraInfo[128];
280 
281 typedef struct
282 {
283  _i16 Status;
284  _u8 Sd;
285  _u8 Padding;
287 
288 
289 typedef union
290 {
291  SlSockTxFailEventData_t SockTxFailData;
292  SlSocketAsyncEvent_t SockAsyncData;
294 
295 
296 typedef struct
297 {
298  _u32 Event;
299  SlSockEventData_u SocketAsyncEvent;
300 } SlSockEvent_t;
301 
302 typedef struct
303 {
304  _u32 Event;
305  _u32 EventData;
307 
308 
309 typedef struct
310 {
311  _u32 SecureALPN;
313 
314 typedef struct
315 {
316  _u32 SecureMask;
318 
319 typedef struct
320 {
321  _u8 SecureMethod;
323 
324 typedef struct
325 {
326  _u16 SubjectNameXoredSha1;
327  _u16 IssuerNameXoredSha1;
328  _i8 FromDate[8];
329  _i8 ToDate[8];
330  _i8 SubjectName[SL_MAX_ISSUER_AND_SUBJECT_NAME_LEN];
331  _i8 IssuerName[SL_MAX_ISSUER_AND_SUBJECT_NAME_LEN];
332  _i8 SubjectNameLen;
333  _i8 IssuerNameLen;
334  _i8 Padding[2];
336 
337 
338 typedef struct
339 {
340  _u32 SecureVersion; /* what version of SSL decided in the handshake */
341  _u32 SecureCipherSuit; /* what Cipher Index was decided in the handshake */
342  _u32 SecureIsPeerValidated; /* was the other peer verified */
343  _u32 SecureALPNChosenProtocol; /* bit indicate one of the protocol defined above
344  SL_SECURE_ALPN_H1
345  SL_SECURE_ALPN_H2
346  SL_SECURE_ALPN_H2C
347  SL_SECURE_ALPN_H2_14
348  SL_SECURE_ALPN_H2_16
349  */
350  SlSockSSLCertInfo_t SecurePeerCertinfo;
352 
353 
354 typedef struct
355 {
356  _u16 type; /* holds the type of the info frame, currently only value 1 indicating DATA frame */
357  _u16 length; /* holds the length of the info frame recevied */
359 
360 
361 typedef enum
362 {
363  SL_SOCK_TX_RATE_1M = 1,
364  SL_SOCK_TX_RATE_2M = 2,
365  SL_SOCK_TX_RATE_5_5M = 3,
366  SL_SOCK_TX_RATE_11M = 4,
367  SL_SOCK_TX_RATE_6M = 6,
368  SL_SOCK_TX_RATE_9M = 7,
369  SL_SOCK_TX_RATE_12M = 8,
370  SL_SOCK_TX_RATE_18M = 9,
371  SL_SOCK_TX_RATE_24M = 10,
372  SL_SOCK_TX_RATE_36M = 11,
373  SL_SOCK_TX_RATE_48M = 12,
374  SL_SOCK_TX_RATE_54M = 13,
375  SL_SOCK_TX_RATE_MCS_0 = 14,
376  SL_SOCK_TX_RATE_MCS_1 = 15,
377  SL_SOCK_TX_RATE_MCS_2 = 16,
378  SL_SOCK_TX_RATE_MCS_3 = 17,
379  SL_SOCK_TX_RATE_MCS_4 = 18,
380  SL_SOCK_TX_RATE_MCS_5 = 19,
381  SL_SOCK_TX_RATE_MCS_6 = 20,
382  SL_SOCK_TX_RATE_MCS_7 = 21,
383  SL_SOCK_TX_MAX_NUM_RATES = 0xFF
384 }slSockTransceiverTXRateTable_e;
385 
386 
387 typedef enum
388 {
389  SL_SOCK_RX_RATE_1M = 0,
390  SL_SOCK_RX_RATE_2M = 1,
391  SL_SOCK_RX_RATE_5_5M = 2,
392  SL_SOCK_RX_RATE_11M = 3,
393  SL_SOCK_RX_RATE_6M = 4,
394  SL_SOCK_RX_RATE_9M = 5,
395  SL_SOCK_RX_RATE_12M = 6,
396  SL_SOCK_RX_RATE_18M = 7,
397  SL_SOCK_RX_RATE_24M = 8,
398  SL_SOCK_RX_RATE_36M = 9,
399  SL_SOCK_RX_RATE_48M = 10,
400  SL_SOCK_RX_RATE_54M = 11,
401  SL_SOCK_RX_RATE_MCS0 = 12, /* 6.5Mbps */
402  SL_SOCK_RX_RATE_MCS1 = 13, /* 13Mbps */
403  SL_SOCK_RX_RATE_MCS2 = 14, /* 19.5Mbps */
404  SL_SOCK_RX_RATE_MCS3 = 15, /* 26Mbps */
405  SL_SOCK_RX_RATE_MCS4 = 16, /* 39Mbps */
406  SL_SOCK_RX_RATE_MCS5 = 17, /* 52Mbps */
407  SL_SOCK_RX_RATE_MCS6 = 18, /* 58.5Mbps */
408  SL_SOCK_RX_RATE_MCS7 = 19, /* 65Mbps */
409  SL_SOCK_RX_RATE_MCS7_SGI = 20, /* 65Mbps+10% */
410 
411 }SlSockTransceiverRXRates_e;
412 
413 typedef enum
414 {
415  SL_BSD_SECURED_PRIVATE_KEY_IDX = 0,
416  SL_BSD_SECURED_CERTIFICATE_IDX,
417  SL_BSD_SECURED_CA_IDX,
418  SL_BSD_SECURED_DH_IDX
419 }SlSockSecureSocketFilesIndex_e;
420 
421 typedef struct
422 {
423  SlInAddr_t imr_multiaddr; /* The IPv4 multicast address to join */
424  SlInAddr_t imr_interface; /* The interface to use for this group */
426 
427 typedef struct{
428  SlIn6Addr_t ipv6mr_multiaddr; /* IPv6 multicast address of group */
429  _u32 ipv6mr_interface; /*should be 0 to choose the default multicast interface*/
431 
432 typedef struct
433 {
434  _u32 l_onoff; /* 0 = disabled; 1 = enabled; default = 0;*/
435  _u32 l_linger; /* linger time in seconds; default = 0;*/
437 
438 /* sockopt */
439 typedef _i32 SlTime_t;
440 typedef _i32 SlSuseconds_t;
441 
442 typedef struct SlTimeval_t
443 {
444  SlTime_t tv_sec; /* Seconds */
445  SlSuseconds_t tv_usec; /* Microseconds */
446 }SlTimeval_t;
447 
448 typedef _u16 SlSocklen_t;
449 
450 /* IpV4 socket address */
451 typedef struct SlSockAddr_t
452 {
453  _u16 sa_family; /* Address family (e.g. , AF_INET) */
454  _u8 sa_data[14]; /* Protocol- specific address information*/
455 }SlSockAddr_t;
456 
457 typedef struct SlSockAddrIn6_t
458 {
459  _u16 sin6_family; /* AF_INET6 || AF_INET6_EUI_48*/
460  _u16 sin6_port; /* Transport layer port. */
461  _u32 sin6_flowinfo; /* IPv6 flow information. */
462  SlIn6Addr_t sin6_addr; /* IPv6 address. */
463  _u32 sin6_scope_id; /* set of interfaces for a scope. */
465 
466 /* Socket address, Internet style. */
467 
468 typedef struct SlSockAddrIn_t
469 {
470  _u16 sin_family; /* Internet Protocol (AF_INET). */
471  _u16 sin_port; /* Address port (16 bits). */
472  SlInAddr_t sin_addr; /* Internet address (32 bits). */
473  _i8 sin_zero[8]; /* Not used. */
475 
476 typedef struct
477 {
478  _u8 SecureFiles[4];
480 
481 typedef struct SlFdSet_t /* The select socket array manager */
482 {
483  _u32 fd_array[(SL_FD_SETSIZE + (_u8)31)/(_u8)32]; /* Bit map of SOCKET Descriptors */
484 } SlFdSet_t;
485 
486 typedef struct
487 {
488  _u8 Rate; /* Received Rate, refer to slSockTransceiverRXRateTable_e */
489  _u8 Channel; /* The received channel*/
490  _i8 Rssi; /* The computed RSSI value in db of current frame */
491  _u8 Padding; /* pad to align to 32 bits */
492  _u32 Timestamp; /* Timestamp in microseconds */
494 
495 typedef struct
496 {
497  _u32 enableDisable; /* 1 to enable collecting metrics from BSS, 0 - collecting metrics from AP only. (0 is the default state) */
499 
500 
501 /*****************************************************************************/
502 /* Function prototypes */
503 /*****************************************************************************/
504 
562 #if _SL_INCLUDE_FUNC(sl_Socket)
563 _i16 sl_Socket(_i16 Domain, _i16 Type, _i16 Protocol);
564 #endif
565 
580 #if _SL_INCLUDE_FUNC(sl_Close)
581 _i16 sl_Close(_i16 sd);
582 #endif
583 
634 #if _SL_INCLUDE_FUNC(sl_Accept)
635 _i16 sl_Accept(_i16 sd, SlSockAddr_t *addr, SlSocklen_t *addrlen);
636 #endif
637 
664 #if _SL_INCLUDE_FUNC(sl_Bind)
665 _i16 sl_Bind(_i16 sd, const SlSockAddr_t *addr, _i16 addrlen);
666 #endif
667 
687 #if _SL_INCLUDE_FUNC(sl_Listen)
688 _i16 sl_Listen(_i16 sd, _i16 backlog);
689 #endif
690 
729 #if _SL_INCLUDE_FUNC(sl_Connect)
730 _i16 sl_Connect(_i16 sd, const SlSockAddr_t *addr, _i16 addrlen);
731 #endif
732 
790 #if _SL_INCLUDE_FUNC(sl_Select)
791 _i16 sl_Select(_i16 nfds, SlFdSet_t *readsds, SlFdSet_t *writesds, SlFdSet_t *exceptsds, struct SlTimeval_t *timeout);
792 #endif
793 
794 
795 
1228 #if _SL_INCLUDE_FUNC(sl_SetSockOpt)
1229 _i16 sl_SetSockOpt(_i16 sd, _i16 level, _i16 optname, const void *optval, SlSocklen_t optlen);
1230 #endif
1231 
1271 #if _SL_INCLUDE_FUNC(sl_GetSockOpt)
1272 _i16 sl_GetSockOpt(_i16 sd, _i16 level, _i16 optname, void *optval, SlSocklen_t *optlen);
1273 #endif
1274 
1341 #if _SL_INCLUDE_FUNC(sl_Recv)
1342 _i16 sl_Recv(_i16 sd, void *buf, _i16 len, _i16 flags);
1343 #endif
1344 
1401 #if _SL_INCLUDE_FUNC(sl_RecvFrom)
1402 _i16 sl_RecvFrom(_i16 sd, void *buf, _i16 len, _i16 flags, SlSockAddr_t *from, SlSocklen_t *fromlen);
1403 #endif
1404 
1451 #if _SL_INCLUDE_FUNC(sl_Send )
1452 _i16 sl_Send(_i16 sd, const void *buf, _i16 len, _i16 flags);
1453 #endif
1454 
1504 #if _SL_INCLUDE_FUNC(sl_SendTo)
1505 _i16 sl_SendTo(_i16 sd, const void *buf, _i16 len, _i16 flags, const SlSockAddr_t *to, SlSocklen_t tolen);
1506 #endif
1507 
1523 #if _SL_INCLUDE_FUNC(sl_StartTLS)
1524 _i16 sl_StartTLS(_i16 sd);
1525 #endif
1526 
1540 #if _SL_INCLUDE_FUNC(sl_Htonl )
1541 _u32 sl_Htonl( _u32 val );
1542 
1543 #define sl_Ntohl sl_Htonl /* Reorder the bytes of a 16-bit unsigned value from network order to processor orde. */
1544 #endif
1545 
1559 #if _SL_INCLUDE_FUNC(sl_Htons )
1560 _u16 sl_Htons( _u16 val );
1561 
1562 #define sl_Ntohs sl_Htons /* Reorder the bytes of a 16-bit unsigned value from network order to processor orde. */
1563 #endif
1564 
1574 void SL_SOCKET_FD_SET(_i16 fd, SlFdSet_t *fdset);
1575 
1581 void SL_SOCKET_FD_CLR(_i16 fd, SlFdSet_t *fdset);
1582 
1583 
1592 _i16 SL_SOCKET_FD_ISSET(_i16 fd, SlFdSet_t *fdset);
1593 
1599 void SL_SOCKET_FD_ZERO(SlFdSet_t *fdset);
1600 
1613 #ifdef __cplusplus
1614 }
1615 #endif /* __cplusplus */
1616 
1617 #endif /* __SOCKET_H__ */
1618 
1619 
_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:1761
_i16 sl_StartTLS(_i16 sd)
Initiate TLS connection on a socket.
Definition: sl_socket.c:1971
_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