Network Services API  2.10.01.02
slnetif.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2017, Texas Instruments Incorporated
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * * Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *
12  * * Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in the
14  * documentation and/or other materials provided with the distribution.
15  *
16  * * Neither the name of Texas Instruments Incorporated nor the names of
17  * its contributors may be used to endorse or promote products derived
18  * from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 
33 /*****************************************************************************/
34 /* Include files */
35 /*****************************************************************************/
36 
37 #ifndef __SL_NET_IF_H__
38 #define __SL_NET_IF_H__
39 
40 
41 #ifdef __cplusplus
42 extern "C" {
43 #endif
44 
45 #include <stdint.h>
46 #include <stdbool.h>
47 
48 #include <ti/net/slnetsock.h>
49 
63 /*****************************************************************************/
64 /* Macro declarations */
65 /*****************************************************************************/
66 
67 /* Interface ID bit pool to be used in interface add and in socket creation */
68 #define SLNETIF_ID_1 (1 << 0) //can be used for wifi interface
69 #define SLNETIF_ID_2 (1 << 1) //can be used for eth interface
70 #define SLNETIF_ID_3 (1 << 2)
71 #define SLNETIF_ID_4 (1 << 3)
72 #define SLNETIF_ID_5 (1 << 4)
73 #define SLNETIF_ID_6 (1 << 5)
74 #define SLNETIF_ID_7 (1 << 6)
75 #define SLNETIF_ID_8 (1 << 7)
76 #define SLNETIF_ID_9 (1 << 8)
77 #define SLNETIF_ID_10 (1 << 9)
78 #define SLNETIF_ID_11 (1 << 10)
79 #define SLNETIF_ID_12 (1 << 11)
80 #define SLNETIF_ID_13 (1 << 12)
81 #define SLNETIF_ID_14 (1 << 13)
82 #define SLNETIF_ID_15 (1 << 14)
83 #define SLNETIF_ID_16 (1 << 15)
84 
85 /* Maximum interfaces */
86 #define SLNETIF_MAX_IF (16)
87 
88 /* this macro returns 0 when only one bit is set and a number when it isn't */
89 #define ONLY_ONE_BIT_IS_SET(x) (((x > 0) && ((x & (x - 1)) == 0))?true:false)
90 
91 
92 /* Interface connection status bit pool to be used in set interface connection status function */
93 
94 #define SLNETIF_STATUS_DISCONNECTED (0)
95 #define SLNETIF_STATUS_CONNECTED (1)
96 
100 typedef enum
101 {
105 
109 typedef enum
110 {
115 
116 /* Address config return values that can be retrieved in get ip address function */
117 #define SLNETIF_ADDR_CFG_UNKNOWN (0)
118 #define SLNETIF_ADDR_CFG_DHCP (1)
119 #define SLNETIF_ADDR_CFG_DHCP_LLA (2)
120 #define SLNETIF_ADDR_CFG_STATIC (4)
121 #define SLNETIF_ADDR_CFG_STATELESS (5)
122 #define SLNETIF_ADDR_CFG_STATEFUL (6)
123 
124 /* Security object types for load Sec Obj function */
125 #define SLNETIF_SEC_OBJ_TYPE_RSA_PRIVATE_KEY (1)
126 #define SLNETIF_SEC_OBJ_TYPE_CERTIFICATE (2)
127 #define SLNETIF_SEC_OBJ_TYPE_DH_KEY (3)
128 
129 
130 /* The 32bit queryBitmap structure - SlNetIf_queryIf function:
131  Bit 0 : Interface state - Check if interface state set to enable
132  Bit 1 : Interface connection status - Check if interface connection status is up
133  Bit 2 : Force answer - Return last found netIf, if none of the existing interfaces answers the query
134  Bits 3-31 : Reserved
135 */
136 #define SLNETIF_QUERY_IF_STATE_BIT (1 << 0)
137 #define SLNETIF_QUERY_IF_CONNECTION_STATUS_BIT (1 << 1)
138 #define SLNETIF_QUERY_IF_ALLOW_PARTIAL_MATCH_BIT (1 << 2)
139 
140 /*****************************************************************************/
141 /* Structure/Enum declarations */
142 /*****************************************************************************/
143 
154 typedef struct SlNetIf_Config_t
155 {
156  /* socket related API's */
157  int16_t (*sockCreate) (void *ifContext, int16_t domain, int16_t type, int16_t protocol, void **sdContext);
158  int32_t (*sockClose) (int16_t sd, void *sdContext);
159  int32_t (*sockShutdown) (int16_t sd, void *sdContext, int16_t how);
160  int16_t (*sockAccept) (int16_t sd, void *sdContext, SlNetSock_Addr_t *addr, SlNetSocklen_t *addrlen, uint8_t flags, void **acceptedSdContext);
161  int32_t (*sockBind) (int16_t sd, void *sdContext, const SlNetSock_Addr_t *addr, int16_t addrlen);
162  int32_t (*sockListen) (int16_t sd, void *sdContext, int16_t backlog);
163  int32_t (*sockConnect) (int16_t sd, void *sdContext, const SlNetSock_Addr_t *addr, SlNetSocklen_t addrlen, uint8_t flags);
164  int32_t (*sockGetPeerName) (int16_t sd, void *sdContext, SlNetSock_Addr_t *addr, SlNetSocklen_t *addrlen);
165  int32_t (*sockGetLocalName) (int16_t sd, void *sdContext, SlNetSock_Addr_t *addr, SlNetSocklen_t *addrlen);
166  int32_t (*sockSelect) (void *ifContext, int16_t nsds, SlNetSock_SdSet_t *readsds, SlNetSock_SdSet_t *writesds, SlNetSock_SdSet_t *exceptsds, SlNetSock_Timeval_t *timeout);
167  int32_t (*sockSetOpt) (int16_t sd, void *sdContext, int16_t level, int16_t optname, void *optval, SlNetSocklen_t optlen);
168  int32_t (*sockGetOpt) (int16_t sd, void *sdContext, int16_t level, int16_t optname, void *optval, SlNetSocklen_t *optlen);
169  int32_t (*sockRecv) (int16_t sd, void *sdContext, void *buf, uint32_t len, uint32_t flags);
170  int32_t (*sockRecvFrom) (int16_t sd, void *sdContext, void *buf, uint32_t len, uint32_t flags, SlNetSock_Addr_t *from, SlNetSocklen_t *fromlen);
171  int32_t (*sockSend) (int16_t sd, void *sdContext, const void *buf, uint32_t len, uint32_t flags);
172  int32_t (*sockSendTo) (int16_t sd, void *sdContext, const void *buf, uint32_t len, uint32_t flags, const SlNetSock_Addr_t *to, SlNetSocklen_t tolen);
173  int32_t (*sockstartSec) (int16_t sd, void *sdContext, SlNetSockSecAttrib_t *secAttrib, uint8_t flags);
175  /* util related API's */
176  int32_t (*utilGetHostByName) (void *ifContext, char *name, const uint16_t nameLen, uint32_t *ipAddr, uint16_t *ipAddrLen, const uint8_t family);
178  /* if related API's */
179  int32_t (*ifGetIPAddr) (void *ifContext, SlNetIfAddressType_e addrType, uint16_t *addrConfig, uint32_t *ipAddr);
180  int32_t (*ifGetConnectionStatus) (void *ifContext);
181  int32_t (*ifLoadSecObj) (void *ifContext, uint16_t objType, char *objName, int16_t objNameLen, uint8_t *objBuff, int16_t objBuffLen);
182  int32_t (*ifCreateContext) (uint16_t ifID, const char *ifName, void **ifContext);
185 
186 
191 typedef struct SlNetIf_t
192 {
193  uint32_t ifID;
194  char *ifName;
195  int32_t flags;
197  void *ifContext;
198 } SlNetIf_t;
199 
200 /*****************************************************************************/
201 /* Function prototypes */
202 /*****************************************************************************/
203 
215 int32_t SlNetIf_init(int32_t flags);
216 
250 int32_t SlNetIf_add(uint16_t ifID, char *ifName, const SlNetIf_Config_t *ifConf, uint8_t priority);
251 
252 
280 SlNetIf_t * SlNetIf_getIfByID(uint16_t ifID);
281 
282 
319 SlNetIf_t * SlNetIf_queryIf(uint32_t ifBitmap, uint32_t queryBitmap);
320 
321 
350 const char * SlNetIf_getNameByID(uint16_t ifID);
351 
352 
386 int32_t SlNetIf_getIDByName(char *ifName);
387 
388 
417 int32_t SlNetIf_getPriority(uint16_t ifID);
418 
419 
450 int32_t SlNetIf_setPriority(uint16_t ifID, uint8_t priority);
451 
452 
483 int32_t SlNetIf_setState(uint16_t ifID, SlNetIfState_e ifState);
484 
485 
513 int32_t SlNetIf_getState(uint16_t ifID);
514 
515 
542 int32_t SlNetIf_getConnectionStatus(uint16_t ifID);
543 
544 
585 int32_t SlNetIf_getIPAddr(uint16_t ifID, SlNetIfAddressType_e addrType, uint16_t *addrConfig, uint32_t *ipAddr);
586 
587 
630 int32_t SlNetIf_loadSecObj(uint16_t objType, char *objName, int16_t objNameLen, uint8_t *objBuff, int16_t objBuffLen, uint32_t ifBitmap);
631 
639 #ifdef __cplusplus
640 }
641 #endif /* __cplusplus */
642 
643 #endif /* __SL_NET_IF_H__ */
int32_t(* sockSend)(int16_t sd, void *sdContext, const void *buf, uint32_t len, uint32_t flags)
Definition: slnetif.h:171
int32_t(* sockShutdown)(int16_t sd, void *sdContext, int16_t how)
Definition: slnetif.h:159
const char * SlNetIf_getNameByID(uint16_t ifID)
Get interface Name from interface ID.
int16_t(* sockAccept)(int16_t sd, void *sdContext, SlNetSock_Addr_t *addr, SlNetSocklen_t *addrlen, uint8_t flags, void **acceptedSdContext)
Definition: slnetif.h:160
int32_t(* sockGetOpt)(int16_t sd, void *sdContext, int16_t level, int16_t optname, void *optval, SlNetSocklen_t *optlen)
Definition: slnetif.h:168
int32_t(* sockSetOpt)(int16_t sd, void *sdContext, int16_t level, int16_t optname, void *optval, SlNetSocklen_t optlen)
Definition: slnetif.h:167
int32_t SlNetIf_setPriority(uint16_t ifID, uint8_t priority)
Set interface priority.
SlNetIf_Config_t structure contains all the function callbacks that are expected to be filled by the ...
Definition: slnetif.h:154
int32_t(* ifGetIPAddr)(void *ifContext, SlNetIfAddressType_e addrType, uint16_t *addrConfig, uint32_t *ipAddr)
Definition: slnetif.h:179
int32_t(* sockConnect)(int16_t sd, void *sdContext, const SlNetSock_Addr_t *addr, SlNetSocklen_t addrlen, uint8_t flags)
Definition: slnetif.h:163
Definition: slnetif.h:102
Definition: slnetif.h:103
The SlNetIf_t structure holds the configuration of the interface Its ID, name, flags and the configur...
Definition: slnetif.h:191
SlNetIfAddressType_e
Address type enum to be used in get ip address function.
Definition: slnetif.h:109
uint16_t SlNetSocklen_t
The SlNetSocklen_t is used for declaring the socket length parameter.
Definition: slnetsock.h:583
int32_t SlNetIf_init(int32_t flags)
Initialize the SlNetIf module.
int32_t(* sockGetLocalName)(int16_t sd, void *sdContext, SlNetSock_Addr_t *addr, SlNetSocklen_t *addrlen)
Definition: slnetif.h:165
SlNetIf_t * SlNetIf_queryIf(uint32_t ifBitmap, uint32_t queryBitmap)
Get highest priority interface configuration using interface bitmap.
int32_t SlNetIf_getIPAddr(uint16_t ifID, SlNetIfAddressType_e addrType, uint16_t *addrConfig, uint32_t *ipAddr)
Get IP Address of specific interface.
int32_t flags
Definition: slnetif.h:195
IpV4 socket address.
Definition: slnetsock.h:588
struct SlNetIf_Config_t SlNetIf_Config_t
SlNetIf_Config_t structure contains all the function callbacks that are expected to be filled by the ...
The SlNetSock_Timeval_t structure is used in SLNETSOCK_OPSOCK_RCV_TIMEO socket level option...
Definition: slnetsock.h:574
int32_t(* sockBind)(int16_t sd, void *sdContext, const SlNetSock_Addr_t *addr, int16_t addrlen)
Definition: slnetif.h:161
int32_t(* ifLoadSecObj)(void *ifContext, uint16_t objType, char *objName, int16_t objNameLen, uint8_t *objBuff, int16_t objBuffLen)
Definition: slnetif.h:181
The SlNetSock_SdSet_t structure holds the sd array for SlNetSock_select function. ...
Definition: slnetsock.h:620
int32_t(* utilGetHostByName)(void *ifContext, char *name, const uint16_t nameLen, uint32_t *ipAddr, uint16_t *ipAddrLen, const uint8_t family)
Definition: slnetif.h:176
int32_t(* sockClose)(int16_t sd, void *sdContext)
Definition: slnetif.h:158
int32_t(* sockstartSec)(int16_t sd, void *sdContext, SlNetSockSecAttrib_t *secAttrib, uint8_t flags)
Definition: slnetif.h:173
int32_t(* ifGetConnectionStatus)(void *ifContext)
Definition: slnetif.h:180
Definition: slnetif.h:113
SlNetIfState_e
Interface state bit pool to be used in set interface state function.
Definition: slnetif.h:100
Secure socket attribute context.
Definition: slnetsock.h:498
int32_t SlNetIf_getPriority(uint16_t ifID)
Get interface priority.
int32_t SlNetIf_getConnectionStatus(uint16_t ifID)
Get interface connection status.
struct SlNetIf_t SlNetIf_t
The SlNetIf_t structure holds the configuration of the interface Its ID, name, flags and the configur...
int16_t(* sockCreate)(void *ifContext, int16_t domain, int16_t type, int16_t protocol, void **sdContext)
Definition: slnetif.h:157
int32_t(* ifCreateContext)(uint16_t ifID, const char *ifName, void **ifContext)
Definition: slnetif.h:182
void * ifContext
Definition: slnetif.h:197
int32_t(* sockGetPeerName)(int16_t sd, void *sdContext, SlNetSock_Addr_t *addr, SlNetSocklen_t *addrlen)
Definition: slnetif.h:164
int32_t(* sockSelect)(void *ifContext, int16_t nsds, SlNetSock_SdSet_t *readsds, SlNetSock_SdSet_t *writesds, SlNetSock_SdSet_t *exceptsds, SlNetSock_Timeval_t *timeout)
Definition: slnetif.h:166
Definition: slnetif.h:111
int32_t(* sockSendTo)(int16_t sd, void *sdContext, const void *buf, uint32_t len, uint32_t flags, const SlNetSock_Addr_t *to, SlNetSocklen_t tolen)
Definition: slnetif.h:172
int32_t SlNetIf_add(uint16_t ifID, char *ifName, const SlNetIf_Config_t *ifConf, uint8_t priority)
Add a new SlNetIf-compatible interface to the system.
int32_t(* sockRecv)(int16_t sd, void *sdContext, void *buf, uint32_t len, uint32_t flags)
Definition: slnetif.h:169
SlNetIf_t * SlNetIf_getIfByID(uint16_t ifID)
Get interface configuration from interface ID.
int32_t(* sockRecvFrom)(int16_t sd, void *sdContext, void *buf, uint32_t len, uint32_t flags, SlNetSock_Addr_t *from, SlNetSocklen_t *fromlen)
Definition: slnetif.h:170
int32_t SlNetIf_getState(uint16_t ifID)
Get interface state.
char * ifName
Definition: slnetif.h:194
SlNetIf_Config_t * ifConf
Definition: slnetif.h:196
int32_t SlNetIf_getIDByName(char *ifName)
Get interface ID from interface name.
uint32_t ifID
Definition: slnetif.h:193
Definition: slnetif.h:112
int32_t(* sockListen)(int16_t sd, void *sdContext, int16_t backlog)
Definition: slnetif.h:162
int32_t SlNetIf_loadSecObj(uint16_t objType, char *objName, int16_t objNameLen, uint8_t *objBuff, int16_t objBuffLen, uint32_t ifBitmap)
Load secured buffer to the network stack.
int32_t SlNetIf_setState(uint16_t ifID, SlNetIfState_e ifState)
Set interface state.
Copyright 2017, Texas Instruments Incorporated