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)
219 int32_t
SlNetIfWifi_setSockOpt(int16_t sd,
void *sdContext, int16_t level, int16_t optname,
void *optval, SlNetSocklen_t optlen)
221 return sl_SetSockOpt(sd, level, optname, optval, optlen);
230 int32_t
SlNetIfWifi_getSockOpt(int16_t sd,
void *sdContext, int16_t level, int16_t optname,
void *optval, SlNetSocklen_t *optlen)
241 int32_t
SlNetIfWifi_recv(int16_t sd,
void *sdContext,
void *buf, uint32_t len, uint32_t flags)
243 DISABLE_SEC_BITS_FROM_INPUT_FLAGS(flags);
244 return sl_Recv(sd, buf, len, flags);
253 int32_t
SlNetIfWifi_recvFrom(int16_t sd,
void *sdContext,
void *buf, uint32_t len, uint32_t flags, SlNetSock_Addr_t *from, SlNetSocklen_t *fromlen)
255 DISABLE_SEC_BITS_FROM_INPUT_FLAGS(flags);
265 int32_t
SlNetIfWifi_send(int16_t sd,
void *sdContext,
const void *buf, uint32_t len, uint32_t flags)
267 DISABLE_SEC_BITS_FROM_INPUT_FLAGS(flags);
268 return sl_Send(sd, buf, len, flags);
277 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)
279 DISABLE_SEC_BITS_FROM_INPUT_FLAGS(flags);
291 SlNetSock_SecAttribNode_t *tempSecAttrib = *secAttrib;
292 int32_t retVal = SLNETERR_RET_CODE_OK;
294 if ( 0 != (flags & SLNETSOCK_SEC_BIND_CONTEXT_ONLY) )
297 while (NULL != tempSecAttrib)
299 if ( tempSecAttrib->attribName <= SLNETSOCK_SEC_ATTRIB_DISABLE_CERT_STORE)
301 retVal = sl_SetSockOpt(sd, SL_SOL_SOCKET, StartSecOptName[tempSecAttrib->attribName], tempSecAttrib->attribBuff, tempSecAttrib->attribBuffLen);
305 return SLNETERR_RET_CODE_INVALID_INPUT;
307 tempSecAttrib = tempSecAttrib->next;
311 if ( 0 != (flags & SLNETSOCK_SEC_START_SECURITY_SESSION_ONLY) )
327 int32_t
SlNetIfWifi_getHostByName(
void *ifContext,
char *name,
const uint16_t nameLen, uint32_t *ipAddr, uint16_t *ipAddrLen,
const uint8_t family)
329 int32_t retVal = SLNETERR_RET_CODE_OK;
336 if (retVal == SLNETERR_RET_CODE_OK)
351 int32_t matchModeByRole(SlNetIfAddressType_e addrType,
352 SlNetCfg_e *newAddrType ,
353 uint16_t *ipAddrLen )
362 case SLNETIF_IPV6_ADDR_LOCAL:
363 *newAddrType = SL_NETCFG_IPV6_ADDR_LOCAL;
365 retVal = SLNETERR_RET_CODE_OK;
368 case SLNETIF_IPV6_ADDR_GLOBAL:
369 *newAddrType = SL_NETCFG_IPV6_ADDR_GLOBAL;
371 retVal = SLNETERR_RET_CODE_OK;
375 case SLNETIF_IPV4_ADDR:
378 retVal =
sl_WlanGet(SL_WLAN_CONNECTION_INFO, NULL , &Len, (uint8_t*)&WlanConnectInfo);
379 if(retVal != SLNETERR_RET_CODE_OK)
383 if(WlanConnectInfo.ConnStatus == SL_WLAN_CONNECTED_STA || WlanConnectInfo.ConnStatus == SL_WLAN_CONNECTED_P2PCL)
385 *newAddrType = SL_NETCFG_IPV4_STA_ADDR_MODE;
386 retVal = SLNETERR_RET_CODE_OK;
388 else if(WlanConnectInfo.ConnStatus == SL_WLAN_CONNECTED_P2PGO || WlanConnectInfo.ConnStatus == SL_WLAN_AP_CONNECTED_STATIONS)
390 *newAddrType = SL_NETCFG_IPV4_AP_ADDR_MODE;
391 retVal = SLNETERR_RET_CODE_OK;
395 retVal = SLNETERR_BSD_ENOTCONN;
408 int32_t
SlNetIfWifi_getIPAddr(
void *ifContext, SlNetIfAddressType_e addrType, uint16_t *addrConfig, uint32_t *ipAddr)
412 SlNetCfg_e newAddrType;
415 retVal = matchModeByRole(addrType, &newAddrType, &ipAddrLen);
416 if(retVal == SLNETERR_RET_CODE_OK)
418 retVal =
sl_NetCfgGet(newAddrType, addrConfig, &ipAddrLen, (
unsigned char *)ipAddr);
437 memset(&connectionParams, 0, Size);
439 retVal =
sl_WlanGet(SL_WLAN_CONNECTION_INFO, &Opt, &Size, (uint8_t *)&connectionParams);
442 if (retVal < SLNETERR_RET_CODE_OK)
447 return connectionParams.ConnStatus;
456 int32_t
SlNetIfWifi_loadSecObj(
void *ifContext, uint16_t objType,
char *objName, int16_t objNameLen, uint8_t *objBuff, int16_t objBuffLen)
461 uint32_t MasterToken = 0;
462 int32_t OpenFlags = 0;
463 int32_t DeviceFileHandle = (-1);
464 uint16_t macAddressLen = SL_MAC_ADDR_LEN;
465 char *deviceFileName = objName;
466 uint8_t macAddress[SL_MAC_ADDR_LEN];
469 if ((NULL == objName) || (NULL == objBuff))
472 return SLNETERR_RET_CODE_INVALID_INPUT;
475 retVal =
sl_NetCfgGet(SL_NETCFG_MAC_ADDRESS_GET, 0, &macAddressLen, &macAddress[0]);
478 for (i = 0; i < strlen(deviceFileName); i++)
480 MasterToken = ((MasterToken << 8) ^ deviceFileName[i]);
487 OpenFlags = SL_FS_CREATE;
488 OpenFlags |= SL_FS_OVERWRITE;
489 OpenFlags |= SL_FS_CREATE_SECURE;
490 OpenFlags |= SL_FS_CREATE_VENDOR_TOKEN;
491 OpenFlags |= SL_FS_CREATE_NOSIGNATURE;
492 OpenFlags |= SL_FS_CREATE_FAILSAFE;
495 DeviceFileHandle =
sl_FsOpen((
unsigned char *)deviceFileName, OpenFlags | SL_FS_CREATE_MAX_SIZE( objBuffLen ), (
unsigned long *)&MasterToken);
498 if ( DeviceFileHandle < SLNETERR_RET_CODE_OK )
500 return DeviceFileHandle;
505 retVal =
sl_FsWrite(DeviceFileHandle, Offset, (
unsigned char *)objBuff, objBuffLen);
508 retVal =
sl_FsClose(DeviceFileHandle, NULL, NULL , 0);
521 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...