38 #include <ti/drivers/net/wifi/slnetifwifi.h> 45 #define SPLIT_SEC_AND_INPUT_FLAGS(inputFlags, secFlags) (secFlags = inputFlags >> 24) 48 #define SECURITY_FLAGS_IN_32BIT_REPRESENTATION (0xFF000000) 49 #define DISABLE_SEC_BITS_FROM_INPUT_FLAGS(inputFlags) (inputFlags &= ~SECURITY_FLAGS_IN_32BIT_REPRESENTATION) 91 static const int16_t StartSecOptName[10] =
93 SL_SO_SECURE_FILES_PRIVATE_KEY_FILE_NAME,
94 SL_SO_SECURE_FILES_CERTIFICATE_FILE_NAME,
95 SL_SO_SECURE_FILES_CA_FILE_NAME,
96 SL_SO_SECURE_FILES_PEER_CERT_OR_DH_KEY_FILE_NAME,
100 SL_SO_SECURE_EXT_CLIENT_CHLNG_RESP,
101 SL_SO_SECURE_DOMAIN_NAME_VERIFICATION,
102 SL_SO_SECURE_DISABLE_CERTIFICATE_STORE
105 static const int16_t socketType[8] =
110 SLNETSOCK_SOCK_RX_MTR,
113 SLNETSOCK_SOCK_BRIDGE,
114 SLNETSOCK_SOCK_ROUTER,
126 int16_t
SlNetIfWifi_socket(
void *ifContext, int16_t Domain, int16_t Type, int16_t Protocol,
void **sdContext)
129 int16_t mappedSocketType = socketType[Type - 1];
130 return (
sl_Socket(Domain, mappedSocketType, Protocol));
151 int16_t
SlNetIfWifi_accept(int16_t sd,
void *sdContext, SlNetSock_Addr_t *addr, SlNetSocklen_t *addrlen, uint8_t flags,
void **acceptedSdContext)
162 int32_t
SlNetIfWifi_bind(int16_t sd,
void *sdContext,
const SlNetSock_Addr_t *addr, int16_t addrlen)
184 int32_t
SlNetIfWifi_connect(int16_t sd,
void *sdContext,
const SlNetSock_Addr_t *addr, SlNetSocklen_t addrlen, uint8_t flags)
199 return SLNETERR_INVALPARAM;
208 int32_t
SlNetIfWifi_select(
void *ifContext, int16_t nfds, SlNetSock_SdSet_t *readsds, SlNetSock_SdSet_t *writesds, SlNetSock_SdSet_t *exceptsds, SlNetSock_Timeval_t *timeout)
210 SlNetSock_Timeval_t *slNetSockTimeVal;
213 slNetSockTimeVal = (SlNetSock_Timeval_t *)timeout;
214 tv.tv_sec = slNetSockTimeVal->tv_sec;
215 tv.tv_usec = slNetSockTimeVal->tv_usec;
225 int32_t
SlNetIfWifi_setSockOpt(int16_t sd,
void *sdContext, int16_t level, int16_t optname,
void *optval, SlNetSocklen_t optlen)
227 SlNetSock_Timeval_t *slNetSockTimeVal;
232 case SLNETSOCK_LVL_SOCKET:
236 case SLNETSOCK_OPSOCK_RCV_TIMEO:
239 slNetSockTimeVal = (SlNetSock_Timeval_t *)optval;
240 tv.tv_sec = slNetSockTimeVal->tv_sec;
241 tv.tv_usec = slNetSockTimeVal->tv_usec;
242 optval = (
void *)&tv;
257 return sl_SetSockOpt(sd, level, optname, optval, optlen);
266 int32_t
SlNetIfWifi_getSockOpt(int16_t sd,
void *sdContext, int16_t level, int16_t optname,
void *optval, SlNetSocklen_t *optlen)
270 SlNetSock_Timeval_t *slNetSockTimeVal;
275 case SLNETSOCK_LVL_SOCKET:
279 case SLNETSOCK_OPSOCK_RCV_TIMEO:
281 if (*optlen <
sizeof(SlNetSock_Timeval_t))
283 return (SLNETERR_RET_CODE_INVALID_INPUT);
289 slNetSockTimeVal = (SlNetSock_Timeval_t *)optval;
290 slNetSockTimeVal->tv_sec = tv.tv_sec;
291 slNetSockTimeVal->tv_usec = tv.tv_usec;
292 *optlen =
sizeof(SlNetSock_Timeval_t);
323 int32_t
SlNetIfWifi_recv(int16_t sd,
void *sdContext,
void *buf, uint32_t len, uint32_t flags)
325 DISABLE_SEC_BITS_FROM_INPUT_FLAGS(flags);
326 return sl_Recv(sd, buf, len, flags);
335 int32_t
SlNetIfWifi_recvFrom(int16_t sd,
void *sdContext,
void *buf, uint32_t len, uint32_t flags, SlNetSock_Addr_t *from, SlNetSocklen_t *fromlen)
337 DISABLE_SEC_BITS_FROM_INPUT_FLAGS(flags);
347 int32_t
SlNetIfWifi_send(int16_t sd,
void *sdContext,
const void *buf, uint32_t len, uint32_t flags)
349 DISABLE_SEC_BITS_FROM_INPUT_FLAGS(flags);
350 return sl_Send(sd, buf, len, flags);
359 int32_t
SlNetIfWifi_sendTo(int16_t sd,
void *sdContext,
const void *buf, uint32_t len, uint32_t flags,
const SlNetSock_Addr_t *to, SlNetSocklen_t tolen)
361 DISABLE_SEC_BITS_FROM_INPUT_FLAGS(flags);
373 SlNetSock_SecAttribNode_t *tempSecAttrib = *secAttrib;
374 int32_t retVal = SLNETERR_RET_CODE_OK;
376 if ( 0 != (flags & SLNETSOCK_SEC_BIND_CONTEXT_ONLY) )
379 while (NULL != tempSecAttrib)
381 if ( tempSecAttrib->attribName <= SLNETSOCK_SEC_ATTRIB_DISABLE_CERT_STORE)
383 retVal = sl_SetSockOpt(sd, SL_SOL_SOCKET, StartSecOptName[tempSecAttrib->attribName], tempSecAttrib->attribBuff, tempSecAttrib->attribBuffLen);
387 return SLNETERR_RET_CODE_INVALID_INPUT;
389 tempSecAttrib = tempSecAttrib->next;
393 if ( 0 != (flags & SLNETSOCK_SEC_START_SECURITY_SESSION_ONLY) )
409 int32_t
SlNetIfWifi_getHostByName(
void *ifContext,
char *name,
const uint16_t nameLen, uint32_t *ipAddr, uint16_t *ipAddrLen,
const uint8_t family)
411 int32_t retVal = SLNETERR_RET_CODE_OK;
418 if (retVal == SLNETERR_RET_CODE_OK)
433 int32_t matchModeByRole(SlNetIfAddressType_e addrType,
434 SlNetCfg_e *newAddrType ,
435 uint16_t *ipAddrLen )
444 case SLNETIF_IPV6_ADDR_LOCAL:
445 *newAddrType = SL_NETCFG_IPV6_ADDR_LOCAL;
447 retVal = SLNETERR_RET_CODE_OK;
450 case SLNETIF_IPV6_ADDR_GLOBAL:
451 *newAddrType = SL_NETCFG_IPV6_ADDR_GLOBAL;
453 retVal = SLNETERR_RET_CODE_OK;
457 case SLNETIF_IPV4_ADDR:
460 retVal =
sl_WlanGet(SL_WLAN_CONNECTION_INFO, NULL , &Len, (uint8_t*)&WlanConnectInfo);
461 if(retVal != SLNETERR_RET_CODE_OK)
465 if(WlanConnectInfo.ConnStatus == SL_WLAN_CONNECTED_STA || WlanConnectInfo.ConnStatus == SL_WLAN_CONNECTED_P2PCL)
467 *newAddrType = SL_NETCFG_IPV4_STA_ADDR_MODE;
468 retVal = SLNETERR_RET_CODE_OK;
470 else if(WlanConnectInfo.ConnStatus == SL_WLAN_CONNECTED_P2PGO || WlanConnectInfo.ConnStatus == SL_WLAN_AP_CONNECTED_STATIONS)
472 *newAddrType = SL_NETCFG_IPV4_AP_ADDR_MODE;
473 retVal = SLNETERR_RET_CODE_OK;
477 retVal = SLNETERR_BSD_ENOTCONN;
490 int32_t
SlNetIfWifi_getIPAddr(
void *ifContext, SlNetIfAddressType_e addrType, uint16_t *addrConfig, uint32_t *ipAddr)
494 SlNetCfg_e newAddrType;
497 retVal = matchModeByRole(addrType, &newAddrType, &ipAddrLen);
498 if(retVal == SLNETERR_RET_CODE_OK)
500 retVal =
sl_NetCfgGet(newAddrType, addrConfig, &ipAddrLen, (
unsigned char *)ipAddr);
519 memset(&connectionParams, 0, Size);
521 retVal =
sl_WlanGet(SL_WLAN_CONNECTION_INFO, &Opt, &Size, (uint8_t *)&connectionParams);
524 if (retVal < SLNETERR_RET_CODE_OK)
529 return connectionParams.ConnStatus;
538 int32_t
SlNetIfWifi_loadSecObj(
void *ifContext, uint16_t objType,
char *objName, int16_t objNameLen, uint8_t *objBuff, int16_t objBuffLen)
543 uint32_t MasterToken = 0;
544 int32_t OpenFlags = 0;
545 int32_t DeviceFileHandle = (-1);
546 uint16_t macAddressLen = SL_MAC_ADDR_LEN;
547 char *deviceFileName = objName;
548 uint8_t macAddress[SL_MAC_ADDR_LEN];
551 if ((NULL == objName) || (NULL == objBuff))
554 return SLNETERR_RET_CODE_INVALID_INPUT;
557 retVal =
sl_NetCfgGet(SL_NETCFG_MAC_ADDRESS_GET, 0, &macAddressLen, &macAddress[0]);
560 for (i = 0; i < strlen(deviceFileName); i++)
562 MasterToken = ((MasterToken << 8) ^ deviceFileName[i]);
569 OpenFlags = SL_FS_CREATE;
570 OpenFlags |= SL_FS_OVERWRITE;
571 OpenFlags |= SL_FS_CREATE_SECURE;
572 OpenFlags |= SL_FS_CREATE_VENDOR_TOKEN;
573 OpenFlags |= SL_FS_CREATE_NOSIGNATURE;
574 OpenFlags |= SL_FS_CREATE_FAILSAFE;
577 DeviceFileHandle =
sl_FsOpen((
unsigned char *)deviceFileName, OpenFlags | SL_FS_CREATE_MAX_SIZE( objBuffLen ), (
unsigned long *)&MasterToken);
580 if ( DeviceFileHandle < SLNETERR_RET_CODE_OK )
582 return DeviceFileHandle;
587 retVal =
sl_FsWrite(DeviceFileHandle, Offset, (
unsigned char *)objBuff, objBuffLen);
590 retVal =
sl_FsClose(DeviceFileHandle, NULL, NULL , 0);
603 return SLNETERR_RET_CODE_OK;
int32_t SlNetIfWifi_listen(int16_t sd, void *sdContext, int16_t backlog)
Listen for connections on a socket.
_i16 sl_Bind(_i16 sd, const SlSockAddr_t *addr, _i16 addrlen)
Assign a name to a socket.
int32_t SlNetIfWifi_CreateContext(uint16_t ifID, const char *ifName, void **context)
Allocate and store interface data.
int32_t SlNetIfWifi_getIPAddr(void *ifContext, SlNetIfAddressType_e addrType, uint16_t *addrConfig, uint32_t *ipAddr)
Get IP Address of specific interface.
_i16 sl_Select(_i16 nfds, SlFdSet_t *readsds, SlFdSet_t *writesds, SlFdSet_t *exceptsds, struct SlTimeval_t *timeout)
Monitor socket activity.
_i16 sl_WlanGet(const _u16 ConfigId, _u16 *pConfigOpt, _u16 *pConfigLen, _u8 *pValues)
Getting WLAN configurations.
int32_t SlNetIfWifi_setSockOpt(int16_t sd, void *sdContext, int16_t level, int16_t optname, void *optval, SlNetSocklen_t optlen)
Set socket options-.
int16_t SlNetIfWifi_accept(int16_t sd, void *sdContext, SlNetSock_Addr_t *addr, SlNetSocklen_t *addrlen, uint8_t flags, void **acceptedSdContext)
Accept a connection on a socket.
_i32 sl_FsOpen(const _u8 *pFileName, const _u32 AccessModeAndMaxSize, _u32 *pToken)
open file for read or write from/to storage device
int32_t SlNetIfWifi_recv(int16_t sd, void *sdContext, void *buf, uint32_t len, uint32_t flags)
Read data from TCP socket.
int32_t SlNetIfWifi_close(int16_t sd, void *sdContext)
Gracefully close socket.
int32_t SlNetIfWifi_bind(int16_t sd, void *sdContext, const SlNetSock_Addr_t *addr, int16_t addrlen)
Assign a name to a socket.
int32_t SlNetIfWifi_getConnectionStatus(void *ifContext)
Get interface connection status.
_i16 sl_FsClose(const _i32 FileHdl, const _u8 *pCeritificateFileName, const _u8 *pSignature, const _u32 SignatureLen)
Close file in storage device.
SlNetIf_Config_t SlNetIfConfigWifi
_i16 sl_StartTLS(_i16 sd)
Initiate TLS connection on a socket.
int32_t SlNetIfWifi_send(int16_t sd, void *sdContext, const void *buf, uint32_t len, uint32_t flags)
Write data to TCP socket.
int16_t SlNetIfWifi_socket(void *ifContext, int16_t Domain, int16_t Type, int16_t Protocol, void **sdContext)
Create an endpoint for communication.
_i16 sl_Close(_i16 sd)
Gracefully close socket.
_i16 sl_Recv(_i16 sd, void *buf, _i16 len, _i16 flags)
Read data from TCP socket.
int32_t SlNetIfWifi_select(void *ifContext, int16_t nfds, SlNetSock_SdSet_t *readsds, SlNetSock_SdSet_t *writesds, SlNetSock_SdSet_t *exceptsds, SlNetSock_Timeval_t *timeout)
Monitor socket activity.
_i16 sl_GetSockOpt(_i16 sd, _i16 level, _i16 optname, void *optval, SlSocklen_t *optlen)
Get socket options.
_i16 sl_NetCfgGet(const _u16 ConfigId, _u16 *pConfigOpt, _u16 *pConfigLen, _u8 *pValues)
Getting network configurations.
int32_t SlNetIfWifi_recvFrom(int16_t sd, void *sdContext, void *buf, uint32_t len, uint32_t flags, SlNetSock_Addr_t *from, SlNetSocklen_t *fromlen)
Read data from socket.
int32_t SlNetIfWifi_sockstartSec(int16_t sd, void *sdContext, SlNetSockSecAttrib_t *secAttrib, uint8_t flags)
Start a security session on an opened socket.
_i16 sl_NetAppDnsGetHostByName(_i8 *pHostName, const _u16 NameLen, _u32 *OutIpAddr, const _u8 Family)
Get host IP by name Obtain the IP Address of machine on network, by machine name. ...
int32_t SlNetIfWifi_sendTo(int16_t sd, void *sdContext, const void *buf, uint32_t len, uint32_t flags, const SlNetSock_Addr_t *to, SlNetSocklen_t tolen)
Write data to socket.
int32_t SlNetIfWifi_connect(int16_t sd, void *sdContext, const SlNetSock_Addr_t *addr, SlNetSocklen_t addrlen, uint8_t flags)
Initiate a connection on a socket.
int32_t SlNetIfWifi_loadSecObj(void *ifContext, uint16_t objType, char *objName, int16_t objNameLen, uint8_t *objBuff, int16_t objBuffLen)
Load secured buffer to the network stack.
_i16 sl_Socket(_i16 Domain, _i16 Type, _i16 Protocol)
Create an endpoint for communication.
_i16 sl_RecvFrom(_i16 sd, void *buf, _i16 len, _i16 flags, SlSockAddr_t *from, SlSocklen_t *fromlen)
Read data from socket.
_i16 sl_Accept(_i16 sd, SlSockAddr_t *addr, SlSocklen_t *addrlen)
Accept a connection on a socket.
_i32 sl_FsWrite(const _i32 FileHdl, _u32 Offset, _u8 *pData, _u32 Len)
Write block of data to a file in storage device.
int32_t SlNetIfWifi_getHostByName(void *ifContext, char *name, const uint16_t nameLen, uint32_t *ipAddr, uint16_t *ipAddrLen, const uint8_t family)
Get host IP by name Obtain the IP Address of machine on network, by machine name. ...
_i16 sl_Connect(_i16 sd, const SlSockAddr_t *addr, _i16 addrlen)
Initiate a connection on a socket.
int32_t SlNetIfWifi_getSockOpt(int16_t sd, void *sdContext, int16_t level, int16_t optname, void *optval, SlNetSocklen_t *optlen)
Get socket options.
_i16 sl_Listen(_i16 sd, _i16 backlog)
Listen for connections on a socket.
_i16 sl_SendTo(_i16 sd, const void *buf, _i16 len, _i16 flags, const SlSockAddr_t *to, SlSocklen_t tolen)
Write data to socket.
_i16 sl_Send(_i16 sd, const void *buf, _i16 len, _i16 flags)
Write data to TCP socket.
int32_t SlNetIfWifi_getSockName(int16_t sd, void *sdContext, SlNetSock_Addr_t *addr, SlNetSocklen_t *addrlen)
Get local address info by socket descriptor Returns the local address info of the socket descriptor...