38 #include <ti/drivers/net/wifi/slnetifwifi.h> 39 #include <ti/drivers/net/wifi/slwificonn.h> 46 #define SPLIT_SEC_AND_INPUT_FLAGS(inputFlags, secFlags) (secFlags = inputFlags >> 24) 49 #define SECURITY_FLAGS_IN_32BIT_REPRESENTATION (0xFF000000) 50 #define DISABLE_SEC_BITS_FROM_INPUT_FLAGS(inputFlags) (inputFlags &= ~SECURITY_FLAGS_IN_32BIT_REPRESENTATION) 98 static const int16_t StartSecOptName[10] =
100 SL_SO_SECURE_FILES_PRIVATE_KEY_FILE_NAME,
101 SL_SO_SECURE_FILES_CERTIFICATE_FILE_NAME,
102 SL_SO_SECURE_FILES_CA_FILE_NAME,
103 SL_SO_SECURE_FILES_PEER_CERT_OR_DH_KEY_FILE_NAME,
107 SL_SO_SECURE_EXT_CLIENT_CHLNG_RESP,
108 SL_SO_SECURE_DOMAIN_NAME_VERIFICATION,
109 SL_SO_SECURE_DISABLE_CERTIFICATE_STORE
112 static const int16_t socketType[8] =
117 SLNETSOCK_SOCK_RX_MTR,
120 SLNETSOCK_SOCK_BRIDGE,
121 SLNETSOCK_SOCK_ROUTER,
137 retVal = SlWifiConn_enable();
151 retVal = SlWifiConn_disable();
161 int16_t
SlNetIfWifi_socket(
void *ifContext, int16_t Domain, int16_t Type, int16_t Protocol,
void **sdContext)
164 int16_t mappedSocketType = socketType[Type - 1];
165 return (
sl_Socket(Domain, mappedSocketType, Protocol));
186 int16_t
SlNetIfWifi_accept(int16_t sd,
void *sdContext, SlNetSock_Addr_t *addr, SlNetSocklen_t *addrlen, uint8_t flags,
void **acceptedSdContext)
197 int32_t
SlNetIfWifi_bind(int16_t sd,
void *sdContext,
const SlNetSock_Addr_t *addr, int16_t addrlen)
219 int32_t
SlNetIfWifi_connect(int16_t sd,
void *sdContext,
const SlNetSock_Addr_t *addr, SlNetSocklen_t addrlen, uint8_t flags)
234 return SLNETERR_INVALPARAM;
243 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)
245 SlNetSock_Timeval_t *slNetSockTimeVal;
248 slNetSockTimeVal = (SlNetSock_Timeval_t *)timeout;
249 tv.tv_sec = slNetSockTimeVal->tv_sec;
250 tv.tv_usec = slNetSockTimeVal->tv_usec;
260 int32_t
SlNetIfWifi_setSockOpt(int16_t sd,
void *sdContext, int16_t level, int16_t optname,
void *optval, SlNetSocklen_t optlen)
262 SlNetSock_Timeval_t *slNetSockTimeVal;
267 case SLNETSOCK_LVL_SOCKET:
271 case SLNETSOCK_OPSOCK_RCV_TIMEO:
274 slNetSockTimeVal = (SlNetSock_Timeval_t *)optval;
275 tv.tv_sec = slNetSockTimeVal->tv_sec;
276 tv.tv_usec = slNetSockTimeVal->tv_usec;
277 optval = (
void *)&tv;
292 return sl_SetSockOpt(sd, level, optname, optval, optlen);
301 int32_t
SlNetIfWifi_getSockOpt(int16_t sd,
void *sdContext, int16_t level, int16_t optname,
void *optval, SlNetSocklen_t *optlen)
305 SlNetSock_Timeval_t *slNetSockTimeVal;
310 case SLNETSOCK_LVL_SOCKET:
314 case SLNETSOCK_OPSOCK_RCV_TIMEO:
316 if (*optlen <
sizeof(SlNetSock_Timeval_t))
318 return (SLNETERR_RET_CODE_INVALID_INPUT);
324 slNetSockTimeVal = (SlNetSock_Timeval_t *)optval;
325 slNetSockTimeVal->tv_sec = tv.tv_sec;
326 slNetSockTimeVal->tv_usec = tv.tv_usec;
327 *optlen =
sizeof(SlNetSock_Timeval_t);
358 int32_t
SlNetIfWifi_recv(int16_t sd,
void *sdContext,
void *buf, uint32_t len, uint32_t flags)
360 DISABLE_SEC_BITS_FROM_INPUT_FLAGS(flags);
361 return sl_Recv(sd, buf, len, flags);
370 int32_t
SlNetIfWifi_recvFrom(int16_t sd,
void *sdContext,
void *buf, uint32_t len, uint32_t flags, SlNetSock_Addr_t *from, SlNetSocklen_t *fromlen)
372 DISABLE_SEC_BITS_FROM_INPUT_FLAGS(flags);
382 int32_t
SlNetIfWifi_send(int16_t sd,
void *sdContext,
const void *buf, uint32_t len, uint32_t flags)
384 DISABLE_SEC_BITS_FROM_INPUT_FLAGS(flags);
385 return sl_Send(sd, buf, len, flags);
394 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)
396 DISABLE_SEC_BITS_FROM_INPUT_FLAGS(flags);
408 SlNetSock_SecAttribNode_t *tempSecAttrib = *secAttrib;
409 int32_t retVal = SLNETERR_RET_CODE_OK;
411 if ( 0 != (flags & SLNETSOCK_SEC_BIND_CONTEXT_ONLY) )
414 while (NULL != tempSecAttrib)
416 if ( tempSecAttrib->attribName <= SLNETSOCK_SEC_ATTRIB_DISABLE_CERT_STORE)
418 retVal = sl_SetSockOpt(sd, SL_SOL_SOCKET, StartSecOptName[tempSecAttrib->attribName], tempSecAttrib->attribBuff, tempSecAttrib->attribBuffLen);
422 return SLNETERR_RET_CODE_INVALID_INPUT;
424 tempSecAttrib = tempSecAttrib->next;
428 if ( 0 != (flags & SLNETSOCK_SEC_START_SECURITY_SESSION_ONLY) )
444 int32_t
SlNetIfWifi_getHostByName(
void *ifContext,
char *name,
const uint16_t nameLen, uint32_t *ipAddr, uint16_t *ipAddrLen,
const uint8_t family)
446 int32_t retVal = SLNETERR_RET_CODE_OK;
453 if (retVal == SLNETERR_RET_CODE_OK)
467 uint32_t
SlNetIfWifi_ping(
void *ifContext,
const SlNetSock_Addr_t *addr, SlNetSocklen_t addrLen, uint32_t attempts, uint16_t timeout, uint16_t interval, uint16_t packetSize, int16_t flags)
473 if(addr->sa_family == SLNETSOCK_AF_INET)
476 pingCommand.Ip = ((SlNetSock_AddrIn_t*)addr)->sin_addr.s_addr;
478 else if(addr->sa_family == SLNETSOCK_AF_INET6)
481 *((SlNetSock_In6Addr_t*)&pingCommand.Ip) = ((SlNetSock_AddrIn6_t*)addr)->sin6_addr;
485 pingCommand.PingSize = packetSize;
488 pingCommand.PingIntervalTime = interval;
491 pingCommand.PingRequestTimeout = timeout;
494 pingCommand.TotalNumberOfAttempts = attempts;
497 pingCommand.Flags = 0;
500 retVal =
sl_NetAppPing( &pingCommand, addr->sa_family, &report, NULL );
504 return report.PacketsReceived;
515 int32_t matchModeByRole(SlNetIfAddressType_e addrType,
516 SlNetCfg_e *newAddrType ,
517 uint16_t *ipAddrLen )
521 int32_t retVal = SLNETERR_RET_CODE_OK;
526 case SLNETIF_IPV6_ADDR_LOCAL:
527 *newAddrType = SL_NETCFG_IPV6_ADDR_LOCAL;
529 retVal = SLNETERR_RET_CODE_OK;
532 case SLNETIF_IPV6_ADDR_GLOBAL:
533 *newAddrType = SL_NETCFG_IPV6_ADDR_GLOBAL;
535 retVal = SLNETERR_RET_CODE_OK;
539 case SLNETIF_IPV4_ADDR:
542 retVal =
sl_WlanGet(SL_WLAN_CONNECTION_INFO, NULL , &Len, (uint8_t*)&WlanConnectInfo);
543 if(retVal != SLNETERR_RET_CODE_OK)
547 if(WlanConnectInfo.ConnStatus == SL_WLAN_CONNECTED_STA || WlanConnectInfo.ConnStatus == SL_WLAN_CONNECTED_P2PCL)
549 *newAddrType = SL_NETCFG_IPV4_STA_ADDR_MODE;
550 retVal = SLNETERR_RET_CODE_OK;
552 else if(WlanConnectInfo.ConnStatus == SL_WLAN_CONNECTED_P2PGO || WlanConnectInfo.ConnStatus == SL_WLAN_AP_CONNECTED_STATIONS)
554 *newAddrType = SL_NETCFG_IPV4_AP_ADDR_MODE;
555 retVal = SLNETERR_RET_CODE_OK;
559 retVal = SLNETERR_BSD_ENOTCONN;
572 int32_t
SlNetIfWifi_getIPAddr(
void *ifContext, SlNetIfAddressType_e addrType, uint16_t *addrConfig, uint32_t *ipAddr)
576 SlNetCfg_e newAddrType;
579 retVal = matchModeByRole(addrType, &newAddrType, &ipAddrLen);
580 if(retVal == SLNETERR_RET_CODE_OK)
582 retVal =
sl_NetCfgGet(newAddrType, addrConfig, &ipAddrLen, (
unsigned char *)ipAddr);
589 if(SLNETIF_IPV4_ADDR == addrType)
591 *ipAddr = SlNetUtil_htonl(*ipAddr);
611 memset(&connectionParams, 0, Size);
613 retVal =
sl_WlanGet(SL_WLAN_CONNECTION_INFO, &Opt, &Size, (uint8_t *)&connectionParams);
616 if (retVal < SLNETERR_RET_CODE_OK)
621 return connectionParams.ConnStatus;
630 int32_t
SlNetIfWifi_loadSecObj(
void *ifContext, uint16_t objType,
char *objName, int16_t objNameLen, uint8_t *objBuff, int16_t objBuffLen)
635 uint32_t MasterToken = 0;
636 int32_t OpenFlags = 0;
637 int32_t DeviceFileHandle = (-1);
638 uint16_t macAddressLen = SL_MAC_ADDR_LEN;
639 char *deviceFileName = objName;
640 uint8_t macAddress[SL_MAC_ADDR_LEN];
643 if ((NULL == objName) || (NULL == objBuff))
646 return SLNETERR_RET_CODE_INVALID_INPUT;
649 retVal =
sl_NetCfgGet(SL_NETCFG_MAC_ADDRESS_GET, 0, &macAddressLen, &macAddress[0]);
652 for (i = 0; i < strlen(deviceFileName); i++)
654 MasterToken = ((MasterToken << 8) ^ deviceFileName[i]);
661 OpenFlags = SL_FS_CREATE;
662 OpenFlags |= SL_FS_OVERWRITE;
663 OpenFlags |= SL_FS_CREATE_SECURE;
664 OpenFlags |= SL_FS_CREATE_VENDOR_TOKEN;
665 OpenFlags |= SL_FS_CREATE_NOSIGNATURE;
666 OpenFlags |= SL_FS_CREATE_FAILSAFE;
669 DeviceFileHandle =
sl_FsOpen((
unsigned char *)deviceFileName, OpenFlags | SL_FS_CREATE_MAX_SIZE( objBuffLen ), (
unsigned long *)&MasterToken);
672 if ( DeviceFileHandle < SLNETERR_RET_CODE_OK )
674 return DeviceFileHandle;
679 retVal =
sl_FsWrite(DeviceFileHandle, Offset, (
unsigned char *)objBuff, objBuffLen);
682 retVal =
sl_FsClose(DeviceFileHandle, NULL, NULL , 0);
699 retVal = SlWifiConn_registerNetIFCallback(ifCallback, ifID);
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_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.
int16_t slNetIfWifi_connDisable(void *ifContext)
Gracefully close connection.
_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_connEnable(void *ifContext)
Create and maintains a wifi connection to the local network.
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.
int32_t SlNetIfWifi_DeleteContext(uint16_t ifID, void **ifContext)
Free allocations of interface data. Remove registration of interface event handlers.
uint32_t SlNetIfWifi_ping(void *ifContext, const SlNetSock_Addr_t *addr, SlNetSocklen_t addrLen, uint32_t attempts, uint16_t timeout, uint16_t interval, uint16_t packetSize, int16_t flags)
Performs a ping.
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. ...
_i16 sl_NetAppPing(const SlNetAppPingCommand_t *pPingParams, const _u8 Family, SlNetAppPingReport_t *pReport, const P_SL_DEV_PING_CALLBACK pPingCallback)
send ICMP ECHO_REQUEST to network hosts
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_CreateContext(uint16_t ifID, const char *ifName, void **ifContext, SlNetIf_Event_t ifCallback)
Allocate and store interface data. Registers to interface event handlers.
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...