simplelink: net: import SlNetSock
Bring in SlNetSock and its associated modules from the TI CC32xx SimpleLink SDK 4.10.00.07. SlNetSock is a module that implements a higher-level, BSD-socket-like abstraction that has the ability to support multiple network interfaces. When used on top of the native SimpleLink WiFi Host Driver API, it provides extra network-related functionality such as getaddrinfo(), which is necessary for addressing zephyrproject-rtos/zephyr#11890 Origin: Texas Instruments cc32xx SimpleLink SDK License: BSD 3-Clause URL: http://www.ti.com/tool/download/simplelink-cc32xx-sdk Purpose: Provide access to SlNetSock functions for TI CC32XX SoC Maintained-by: External Signed-off-by: Vincent Wan <vwan@ti.com>
This commit is contained in:
parent
b84ad97802
commit
13267bea30
|
@ -37,6 +37,10 @@ if(CONFIG_HAS_CC3220SDK)
|
|||
source/ti/drivers/net/wifi/porting/cc_pal.c
|
||||
source/ti/drivers/net/wifi/eventreg.c
|
||||
source/ti/drivers/net/wifi/source/sl_socket.c
|
||||
source/ti/drivers/net/wifi/slnetif/slnetifwifi.c
|
||||
source/ti/net/slnetif.c
|
||||
source/ti/net/slnetsock.c
|
||||
source/ti/net/slnetutils.c
|
||||
|
||||
source/ti/devices/cc32xx/driverlib/timer.c
|
||||
source/ti/devices/cc32xx/driverlib/udma.c
|
||||
|
|
|
@ -0,0 +1,80 @@
|
|||
/*
|
||||
* Copyright (c) 2019, Texas Instruments Incorporated
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* * Neither the name of Texas Instruments Incorporated nor the names of
|
||||
* its contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef __SL_NET_H__
|
||||
#define __SL_NET_H__
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*!
|
||||
\defgroup SlNet SlNet group
|
||||
|
||||
\short Interface for general SlNet services.
|
||||
|
||||
*/
|
||||
/*!
|
||||
\addtogroup SlNet
|
||||
@{
|
||||
*/
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Function prototypes */
|
||||
/*****************************************************************************/
|
||||
|
||||
/*!
|
||||
|
||||
\brief Prototype for SysConfig generated initialization function that
|
||||
initializes various parts of the NS stack based on the user's SysConfig
|
||||
script. This function should be called after the lower network stacks
|
||||
initialize. Non-SysConfig users can provide their own implementation of
|
||||
this function in their application's source code.
|
||||
|
||||
\return Zero on success, or negative error code on failure
|
||||
*/
|
||||
int32_t ti_net_SlNet_initConfig();
|
||||
|
||||
/*!
|
||||
|
||||
Close the Doxygen group.
|
||||
@}
|
||||
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* __SL_NET_H__ */
|
|
@ -0,0 +1,700 @@
|
|||
/*
|
||||
* Copyright (c) 2017-2019, Texas Instruments Incorporated
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* * Neither the name of Texas Instruments Incorporated nor the names of
|
||||
* its contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Include files */
|
||||
/*****************************************************************************/
|
||||
|
||||
#ifndef __SL_NET_ERR_H__
|
||||
#define __SL_NET_ERR_H__
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*!
|
||||
\defgroup SlNetErr SlNetErr group
|
||||
|
||||
\short Provide BSD and proprietary errors
|
||||
|
||||
*/
|
||||
/*!
|
||||
|
||||
\addtogroup SlNetErr
|
||||
@{
|
||||
|
||||
*/
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Macro declarations */
|
||||
/*****************************************************************************/
|
||||
|
||||
#define SLNETERR_RET_CODE_OK (0L) /**< Success */
|
||||
|
||||
#define SLNETERR_GENERAL_DEVICE (-6L) /**< General device error */
|
||||
|
||||
/* BSD SOCKET ERRORS CODES */
|
||||
|
||||
#define SLNETERR_BSD_SOC_ERROR (-1L) /**< Failure */
|
||||
#define SLNETERR_BSD_ENXIO (-6L) /**< No such device or address */
|
||||
#define SLNETERR_BSD_INEXE (-8L) /**< socket command in execution */
|
||||
#define SLNETERR_BSD_EBADF (-9L) /**< Bad file number */
|
||||
#define SLNETERR_BSD_ENSOCK (-10L) /**< The system limit on the total number of open sockets, has been reached */
|
||||
#define SLNETERR_BSD_EAGAIN (-11L) /**< Try again */
|
||||
#define SLNETERR_BSD_EWOULDBLOCK SLNETERR_BSD_EAGAIN
|
||||
#define SLNETERR_BSD_ENOMEM (-12L) /**< Out of memory */
|
||||
#define SLNETERR_BSD_EACCES (-13L) /**< Permission denied */
|
||||
#define SLNETERR_BSD_EFAULT (-14L) /**< Bad address */
|
||||
#define SLNETERR_BSD_ECLOSE (-15L) /**< close socket operation failed to transmit all queued packets */
|
||||
#define SLNETERR_BSD_EALREADY_ENABLED (-21L) /**< Transceiver - Transceiver already ON. there could be only one */
|
||||
#define SLNETERR_BSD_EINVAL (-22L) /**< Invalid argument */
|
||||
#define SLNETERR_BSD_EAUTO_CONNECT_OR_CONNECTING (-69L) /**< Transceiver - During connection, connected or auto mode started */
|
||||
#define SLNETERR_BSD_CONNECTION_PENDING (-72L) /**< Transceiver - Device is connected, disconnect first to open transceiver */
|
||||
#define SLNETERR_BSD_EUNSUPPORTED_ROLE (-86L) /**< Transceiver - Trying to start when WLAN role is AP or P2P GO */
|
||||
#define SLNETERR_BSD_ENOTSOCK (-88L) /**< Socket operation on non-socket */
|
||||
#define SLNETERR_BSD_EDESTADDRREQ (-89L) /**< Destination address required */
|
||||
#define SLNETERR_BSD_EMSGSIZE (-90L) /**< Message too long */
|
||||
#define SLNETERR_BSD_EPROTOTYPE (-91L) /**< Protocol wrong type for socket */
|
||||
#define SLNETERR_BSD_ENOPROTOOPT (-92L) /**< Protocol not available */
|
||||
#define SLNETERR_BSD_EPROTONOSUPPORT (-93L) /**< Protocol not supported */
|
||||
#define SLNETERR_BSD_ESOCKTNOSUPPORT (-94L) /**< Socket type not supported */
|
||||
#define SLNETERR_BSD_EOPNOTSUPP (-95L) /**< Operation not supported on transport endpoint */
|
||||
#define SLNETERR_BSD_EAFNOSUPPORT (-97L) /**< Address family not supported by protocol */
|
||||
#define SLNETERR_BSD_EADDRINUSE (-98L) /**< Address already in use */
|
||||
#define SLNETERR_BSD_EADDRNOTAVAIL (-99L) /**< Cannot assign requested address */
|
||||
#define SLNETERR_BSD_ENETDOWN (-100L) /**< Network is down */
|
||||
#define SLNETERR_BSD_ENETUNREACH (-101L) /**< Network is unreachable */
|
||||
#define SLNETERR_BSD_ECONNABORTED (-103L) /**< Software caused connection abort */
|
||||
#define SLNETERR_BSD_ECONNRESET (-104L) /**< Connection reset by peer */
|
||||
#define SLNETERR_BSD_ENOBUFS (-105L) /**< No buffer space available */
|
||||
#define SLNETERR_BSD_EOBUFF SLNETERR_BSD_ENOBUFS
|
||||
#define SLNETERR_BSD_EISCONN (-106L) /**< Transport endpoint is already connected */
|
||||
#define SLNETERR_BSD_ENOTCONN (-107L) /**< Transport endpoint is not connected */
|
||||
#define SLNETERR_BSD_ESHUTDOWN (-108L) /**< Cannot send after transport endpoint shutdown */
|
||||
#define SLNETERR_BSD_ETIMEDOUT (-110L) /**< Connection timed out */
|
||||
#define SLNETERR_BSD_ECONNREFUSED (-111L) /**< Connection refused */
|
||||
#define SLNETERR_BSD_EHOSTDOWN (-112L) /**< Host is down */
|
||||
#define SLNETERR_BSD_EHOSTUNREACH (-113L) /**< No route to host */
|
||||
#define SLNETERR_BSD_EALREADY (-114L) /**< Non blocking connect in progress, try again */
|
||||
#define SLNETERR_BSD_EDOM (-115L) /**< Mathematics argument out of domain of function. */
|
||||
#define SLNETERR_BSD_ENOSPC (-116L) /**< No space left on device. */
|
||||
|
||||
/* ssl tls security start with -300 offset */
|
||||
#define SLNETERR_ESEC_CLOSE_NOTIFY (-300L) /**< ssl/tls alerts */
|
||||
#define SLNETERR_ESEC_UNEXPECTED_MESSAGE (-310L) /**< ssl/tls alerts */
|
||||
#define SLNETERR_ESEC_BAD_RECORD_MAC (-320L) /**< ssl/tls alerts */
|
||||
#define SLNETERR_ESEC_DECRYPTION_FAILED (-321L) /**< ssl/tls alerts */
|
||||
#define SLNETERR_ESEC_RECORD_OVERFLOW (-322L) /**< ssl/tls alerts */
|
||||
#define SLNETERR_ESEC_DECOMPRESSION_FAILURE (-330L) /**< ssl/tls alerts */
|
||||
#define SLNETERR_ESEC_HANDSHAKE_FAILURE (-340L) /**< ssl/tls alerts */
|
||||
#define SLNETERR_ESEC_NO_CERTIFICATE (-341L) /**< ssl/tls alerts */
|
||||
#define SLNETERR_ESEC_BAD_CERTIFICATE (-342L) /**< ssl/tls alerts */
|
||||
#define SLNETERR_ESEC_UNSUPPORTED_CERTIFICATE (-343L) /**< ssl/tls alerts */
|
||||
#define SLNETERR_ESEC_ILLEGAL_PARAMETER (-347L) /**< ssl/tls alerts */
|
||||
#define SLNETERR_ESEC_ACCESS_DENIED (-349L) /**< ssl/tls alerts */
|
||||
#define SLNETERR_ESEC_DECODE_ERROR (-350L) /**< ssl/tls alerts */
|
||||
#define SLNETERR_ESEC_DECRYPT_ERROR1 (-351L) /**< ssl/tls alerts */
|
||||
#define SLNETERR_ESEC_EXPORT_RESTRICTION (-360L) /**< ssl/tls alerts */
|
||||
#define SLNETERR_ESEC_PROTOCOL_VERSION (-370L) /**< ssl/tls alerts */
|
||||
#define SLNETERR_ESEC_INSUFFICIENT_SECURITY (-371L) /**< ssl/tls alerts */
|
||||
#define SLNETERR_ESEC_INTERNAL_ERROR (-380L) /**< ssl/tls alerts */
|
||||
#define SLNETERR_ESEC_USER_CANCELLED (-390L) /**< ssl/tls alerts */
|
||||
#define SLNETERR_ESEC_NO_RENEGOTIATION (-400L) /**< ssl/tls alerts */
|
||||
#define SLNETERR_ESEC_UNSUPPORTED_EXTENSION (-410L) /**< ssl/tls alerts */
|
||||
#define SLNETERR_ESEC_CERTIFICATE_UNOBTAINABLE (-411L) /**< ssl/tls alerts */
|
||||
#define SLNETERR_ESEC_UNRECOGNIZED_NAME (-412L) /**< ssl/tls alerts */
|
||||
#define SLNETERR_ESEC_BAD_CERTIFICATE_STATUS_RESPONSE (-413L) /**< ssl/tls alerts */
|
||||
#define SLNETERR_ESEC_BAD_CERTIFICATE_HASH_VALUE (-414L) /**< ssl/tls alerts */
|
||||
|
||||
|
||||
/* proprietary secure */
|
||||
#define SLNETERR_ESEC_GENERAL (-450L) /**< error secure level general error */
|
||||
#define SLNETERR_ESEC_DECRYPT (-451L) /**< error secure level, decrypt recv packet fail */
|
||||
#define SLNETERR_ESEC_CLOSED (-452L) /**< secure layer is closed by other side, tcp is still connected */
|
||||
#define SLNETERR_ESEC_SNO_VERIFY (-453L) /**< Connected without server verification */
|
||||
#define SLNETERR_ESEC_NO_CA_FILE (-454L) /**< error secure level CA file not found */
|
||||
#define SLNETERR_ESEC_MEMORY (-455L) /**< error secure level No memory space available */
|
||||
#define SLNETERR_ESEC_BAD_CA_FILE (-456L) /**< error secure level bad CA file */
|
||||
#define SLNETERR_ESEC_BAD_CERT_FILE (-457L) /**< error secure level bad Certificate file */
|
||||
#define SLNETERR_ESEC_BAD_PRIVATE_FILE (-458L) /**< error secure level bad private file */
|
||||
#define SLNETERR_ESEC_BAD_DH_FILE (-459L) /**< error secure level bad DH file */
|
||||
#define SLNETERR_ESEC_T00_MANY_SSL_OPENED (-460L) /**< MAX SSL Sockets are opened */
|
||||
#define SLNETERR_ESEC_DATE_ERROR (-461L) /**< connected with certificate date verification error */
|
||||
#define SLNETERR_ESEC_HAND_SHAKE_TIMED_OUT (-462L) /**< connection timed out due to handshake time */
|
||||
#define SLNETERR_ESEC_TX_BUFFER_NOT_EMPTY (-463L) /**< cannot start ssl connection while send buffer is full */
|
||||
#define SLNETERR_ESEC_RX_BUFFER_NOT_EMPTY (-464L) /**< cannot start ssl connection while recv buffer is full */
|
||||
#define SLNETERR_ESEC_SSL_DURING_HAND_SHAKE (-465L) /**< cannot use while in handshaking */
|
||||
#define SLNETERR_ESEC_NOT_ALLOWED_WHEN_LISTENING (-466L) /**< the operation is not allowed when listening, do before listen */
|
||||
#define SLNETERR_ESEC_CERTIFICATE_REVOKED (-467L) /**< connected but one of the certificates in the chain is revoked */
|
||||
#define SLNETERR_ESEC_UNKNOWN_ROOT_CA (-468L) /**< connected but the root CA used to validate the peer is unknown */
|
||||
#define SLNETERR_ESEC_WRONG_PEER_CERT (-469L) /**< wrong peer cert (server cert) was received while trying to connect to server */
|
||||
#define SLNETERR_ESEC_TCP_DISCONNECTED_UNCOMPLETE_RECORD (-470L) /**< the other side disconnected the TCP layer and didn't send the whole ssl record */
|
||||
#define SLNETERR_ESEC_HELLO_VERIFY_ERROR (-471L) /**< Hello verification failed in DTLS */
|
||||
|
||||
#define SLNETERR_ESEC_BUFFER_E (-632L) /**< output buffer too small or input too large */
|
||||
#define SLNETERR_ESEC_ALGO_ID_E (-633L) /**< setting algo id error */
|
||||
#define SLNETERR_ESEC_PUBLIC_KEY_E (-634L) /**< setting public key error */
|
||||
#define SLNETERR_ESEC_DATE_E (-635L) /**< setting date validity error */
|
||||
#define SLNETERR_ESEC_SUBJECT_E (-636L) /**< setting subject name error */
|
||||
#define SLNETERR_ESEC_ISSUER_E (-637L) /**< setting issuer name error */
|
||||
#define SLNETERR_ESEC_CA_TRUE_E (-638L) /**< setting CA basic constraint true error */
|
||||
#define SLNETERR_ESEC_EXTENSIONS_E (-639L) /**< setting extensions error */
|
||||
#define SLNETERR_ESEC_ASN_PARSE_E (-640L) /**< ASN parsing error, invalid input */
|
||||
#define SLNETERR_ESEC_ASN_VERSION_E (-641L) /**< ASN version error, invalid number */
|
||||
#define SLNETERR_ESEC_ASN_GETINT_E (-642L) /**< ASN get big int error, invalid data */
|
||||
#define SLNETERR_ESEC_ASN_RSA_KEY_E (-643L) /**< ASN key init error, invalid input */
|
||||
#define SLNETERR_ESEC_ASN_OBJECT_ID_E (-644L) /**< ASN object id error, invalid id */
|
||||
#define SLNETERR_ESEC_ASN_TAG_NULL_E (-645L) /**< ASN tag error, not null */
|
||||
#define SLNETERR_ESEC_ASN_EXPECT_0_E (-646L) /**< ASN expect error, not zero */
|
||||
#define SLNETERR_ESEC_ASN_BITSTR_E (-647L) /**< ASN bit string error, wrong id */
|
||||
#define SLNETERR_ESEC_ASN_UNKNOWN_OID_E (-648L) /**< ASN oid error, unknown sum id */
|
||||
#define SLNETERR_ESEC_ASN_DATE_SZ_E (-649L) /**< ASN date error, bad size */
|
||||
#define SLNETERR_ESEC_ASN_BEFORE_DATE_E (-650L) /**< ASN date error, current date before */
|
||||
#define SLNETERR_ESEC_ASN_AFTER_DATE_E (-651L) /**< ASN date error, current date after */
|
||||
#define SLNETERR_ESEC_ASN_SIG_OID_E (-652L) /**< ASN signature error, mismatched oid */
|
||||
#define SLNETERR_ESEC_ASN_TIME_E (-653L) /**< ASN time error, unknown time type */
|
||||
#define SLNETERR_ESEC_ASN_INPUT_E (-654L) /**< ASN input error, not enough data */
|
||||
#define SLNETERR_ESEC_ASN_SIG_CONFIRM_E (-655L) /**< ASN sig error, confirm failure */
|
||||
#define SLNETERR_ESEC_ASN_SIG_HASH_E (-656L) /**< ASN sig error, unsupported hash type */
|
||||
#define SLNETERR_ESEC_ASN_SIG_KEY_E (-657L) /**< ASN sig error, unsupported key type */
|
||||
#define SLNETERR_ESEC_ASN_DH_KEY_E (-658L) /**< ASN key init error, invalid input */
|
||||
#define SLNETERR_ESEC_ASN_NTRU_KEY_E (-659L) /**< ASN ntru key decode error, invalid input */
|
||||
#define SLNETERR_ESEC_ASN_CRIT_EXT_E (-660L) /**< ASN unsupported critical extension */
|
||||
#define SLNETERR_ESEC_ECC_BAD_ARG_E (-670L) /**< ECC input argument of wrong type */
|
||||
#define SLNETERR_ESEC_ASN_ECC_KEY_E (-671L) /**< ASN ECC bad input */
|
||||
#define SLNETERR_ESEC_ECC_CURVE_OID_E (-672L) /**< Unsupported ECC OID curve type */
|
||||
#define SLNETERR_ESEC_BAD_FUNC_ARG (-673L) /**< Bad function argument provided */
|
||||
#define SLNETERR_ESEC_NOT_COMPILED_IN (-674L) /**< Feature not compiled in */
|
||||
#define SLNETERR_ESEC_UNICODE_SIZE_E (-675L) /**< Unicode password too big */
|
||||
#define SLNETERR_ESEC_NO_PASSWORD (-676L) /**< no password provided by user */
|
||||
#define SLNETERR_ESEC_ALT_NAME_E (-677L) /**< alt name size problem, too big */
|
||||
#define SLNETERR_ESEC_ASN_NO_SIGNER_E (-688L) /**< ASN no signer to confirm failure */
|
||||
#define SLNETERR_ESEC_ASN_CRL_CONFIRM_E (-689L) /**< ASN CRL signature confirm failure */
|
||||
#define SLNETERR_ESEC_ASN_CRL_NO_SIGNER_E (-690L) /**< ASN CRL no signer to confirm failure */
|
||||
#define SLNETERR_ESEC_ASN_OCSP_CONFIRM_E (-691L) /**< ASN OCSP signature confirm failure */
|
||||
#define SLNETERR_ESEC_VERIFY_FINISHED_ERROR (-704L) /**< verify problem on finished */
|
||||
#define SLNETERR_ESEC_VERIFY_MAC_ERROR (-705L) /**< verify mac problem */
|
||||
#define SLNETERR_ESEC_PARSE_ERROR (-706L) /**< parse error on header */
|
||||
#define SLNETERR_ESEC_UNKNOWN_HANDSHAKE_TYPE (-707L) /**< weird handshake type */
|
||||
#define SLNETERR_ESEC_SOCKET_ERROR_E (-708L) /**< error state on socket */
|
||||
#define SLNETERR_ESEC_SOCKET_NODATA (-709L) /**< expected data, not there */
|
||||
#define SLNETERR_ESEC_INCOMPLETE_DATA (-710L) /**< don't have enough data to complete task */
|
||||
#define SLNETERR_ESEC_UNKNOWN_RECORD_TYPE (-711L) /**< unknown type in record hdr */
|
||||
#define SLNETERR_ESEC_INNER_DECRYPT_ERROR (-712L) /**< error during decryption */
|
||||
#define SLNETERR_ESEC_FATAL_ERROR (-713L) /**< recvd alert fatal error */
|
||||
#define SLNETERR_ESEC_ENCRYPT_ERROR (-714L) /**< error during encryption */
|
||||
#define SLNETERR_ESEC_FREAD_ERROR (-715L) /**< fread problem */
|
||||
#define SLNETERR_ESEC_NO_PEER_KEY (-716L) /**< need peer's key */
|
||||
#define SLNETERR_ESEC_NO_PRIVATE_KEY (-717L) /**< need the private key */
|
||||
#define SLNETERR_ESEC_RSA_PRIVATE_ERROR (-718L) /**< error during rsa priv op */
|
||||
#define SLNETERR_ESEC_NO_DH_PARAMS (-719L) /**< server missing DH params */
|
||||
#define SLNETERR_ESEC_BUILD_MSG_ERROR (-720L) /**< build message failure */
|
||||
#define SLNETERR_ESEC_BAD_HELLO (-721L) /**< client hello malformed */
|
||||
#define SLNETERR_ESEC_DOMAIN_NAME_MISMATCH (-722L) /**< peer subject name mismatch */
|
||||
#define SLNETERR_ESEC_WANT_READ (-723L) /**< want read, call again */
|
||||
#define SLNETERR_ESEC_NOT_READY_ERROR (-724L) /**< handshake layer not ready */
|
||||
#define SLNETERR_ESEC_PMS_VERSION_ERROR (-725L) /**< pre m secret version error */
|
||||
#define SLNETERR_ESEC_WANT_WRITE (-727L) /**< want write, call again */
|
||||
#define SLNETERR_ESEC_BUFFER_ERROR (-728L) /**< malformed buffer input */
|
||||
#define SLNETERR_ESEC_VERIFY_CERT_ERROR (-729L) /**< verify cert error */
|
||||
#define SLNETERR_ESEC_VERIFY_SIGN_ERROR (-730L) /**< verify sign error */
|
||||
#define SLNETERR_ESEC_LENGTH_ERROR (-741L) /**< record layer length error */
|
||||
#define SLNETERR_ESEC_PEER_KEY_ERROR (-742L) /**< can't decode peer key */
|
||||
#define SLNETERR_ESEC_ZERO_RETURN (-743L) /**< peer sent close notify */
|
||||
#define SLNETERR_ESEC_SIDE_ERROR (-744L) /**< wrong client/server type */
|
||||
#define SLNETERR_ESEC_NO_PEER_CERT (-745L) /**< peer didn't send key */
|
||||
#define SLNETERR_ESEC_ECC_CURVETYPE_ERROR (-750L) /**< Bad ECC Curve Type */
|
||||
#define SLNETERR_ESEC_ECC_CURVE_ERROR (-751L) /**< Bad ECC Curve */
|
||||
#define SLNETERR_ESEC_ECC_PEERKEY_ERROR (-752L) /**< Bad Peer ECC Key */
|
||||
#define SLNETERR_ESEC_ECC_MAKEKEY_ERROR (-753L) /**< Bad Make ECC Key */
|
||||
#define SLNETERR_ESEC_ECC_EXPORT_ERROR (-754L) /**< Bad ECC Export Key */
|
||||
#define SLNETERR_ESEC_ECC_SHARED_ERROR (-755L) /**< Bad ECC Shared Secret */
|
||||
#define SLNETERR_ESEC_NOT_CA_ERROR (-757L) /**< Not a CA cert error */
|
||||
#define SLNETERR_ESEC_BAD_PATH_ERROR (-758L) /**< Bad path for opendir */
|
||||
#define SLNETERR_ESEC_BAD_CERT_MANAGER_ERROR (-759L) /**< Bad Cert Manager */
|
||||
#define SLNETERR_ESEC_OCSP_CERT_REVOKED (-760L) /**< OCSP Certificate revoked */
|
||||
#define SLNETERR_ESEC_CRL_CERT_REVOKED (-761L) /**< CRL Certificate revoked */
|
||||
#define SLNETERR_ESEC_CRL_MISSING (-762L) /**< CRL Not loaded */
|
||||
#define SLNETERR_ESEC_MONITOR_RUNNING_E (-763L) /**< CRL Monitor already running */
|
||||
#define SLNETERR_ESEC_THREAD_CREATE_E (-764L) /**< Thread Create Error */
|
||||
#define SLNETERR_ESEC_OCSP_NEED_URL (-765L) /**< OCSP need an URL for lookup */
|
||||
#define SLNETERR_ESEC_OCSP_CERT_UNKNOWN (-766L) /**< OCSP responder doesn't know */
|
||||
#define SLNETERR_ESEC_OCSP_LOOKUP_FAIL (-767L) /**< OCSP lookup not successful */
|
||||
#define SLNETERR_ESEC_MAX_CHAIN_ERROR (-768L) /**< max chain depth exceeded */
|
||||
#define SLNETERR_ESEC_NO_PEER_VERIFY (-778L) /**< Need peer cert verify Error */
|
||||
#define SLNETERR_ESEC_UNSUPPORTED_SUITE (-790L) /**< unsupported cipher suite */
|
||||
#define SLNETERR_ESEC_MATCH_SUITE_ERROR (-791L) /**< can't match cipher suite */
|
||||
|
||||
|
||||
|
||||
/* WLAN ERRORS CODES*/
|
||||
|
||||
#define SLNETERR_WLAN_KEY_ERROR (-2049L)
|
||||
#define SLNETERR_WLAN_INVALID_ROLE (-2050L)
|
||||
#define SLNETERR_WLAN_PREFERRED_NETWORKS_FILE_LOAD_FAILED (-2051L)
|
||||
#define SLNETERR_WLAN_CANNOT_CONFIG_SCAN_DURING_PROVISIONING (-2052L)
|
||||
#define SLNETERR_WLAN_INVALID_SECURITY_TYPE (-2054L)
|
||||
#define SLNETERR_WLAN_PASSPHRASE_TOO_LONG (-2055L)
|
||||
#define SLNETERR_WLAN_EAP_WRONG_METHOD (-2057L)
|
||||
#define SLNETERR_WLAN_PASSWORD_ERROR (-2058L)
|
||||
#define SLNETERR_WLAN_EAP_ANONYMOUS_LEN_ERROR (-2059L)
|
||||
#define SLNETERR_WLAN_SSID_LEN_ERROR (-2060L)
|
||||
#define SLNETERR_WLAN_USER_ID_LEN_ERROR (-2061L)
|
||||
#define SLNETERR_WLAN_PREFERRED_NETWORK_LIST_FULL (-2062L)
|
||||
#define SLNETERR_WLAN_PREFERRED_NETWORKS_FILE_WRITE_FAILED (-2063L)
|
||||
#define SLNETERR_WLAN_ILLEGAL_WEP_KEY_INDEX (-2064L)
|
||||
#define SLNETERR_WLAN_INVALID_DWELL_TIME_VALUES (-2065L)
|
||||
#define SLNETERR_WLAN_INVALID_POLICY_TYPE (-2066L)
|
||||
#define SLNETERR_WLAN_PM_POLICY_INVALID_OPTION (-2067L)
|
||||
#define SLNETERR_WLAN_PM_POLICY_INVALID_PARAMS (-2068L)
|
||||
#define SLNETERR_WLAN_WIFI_NOT_CONNECTED (-2069L)
|
||||
#define SLNETERR_WLAN_ILLEGAL_CHANNEL (-2070L)
|
||||
#define SLNETERR_WLAN_WIFI_ALREADY_DISCONNECTED (-2071L)
|
||||
#define SLNETERR_WLAN_TRANSCEIVER_ENABLED (-2072L)
|
||||
#define SLNETERR_WLAN_GET_NETWORK_LIST_EAGAIN (-2073L)
|
||||
#define SLNETERR_WLAN_GET_PROFILE_INVALID_INDEX (-2074L)
|
||||
#define SLNETERR_WLAN_FAST_CONN_DATA_INVALID (-2075L)
|
||||
#define SLNETERR_WLAN_NO_FREE_PROFILE (-2076L)
|
||||
#define SLNETERR_WLAN_AP_SCAN_INTERVAL_TOO_LOW (-2077L)
|
||||
#define SLNETERR_WLAN_SCAN_POLICY_INVALID_PARAMS (-2078L)
|
||||
|
||||
#define SLNETERR_RXFL_OK (0L) /**< O.K */
|
||||
#define SLNETERR_RXFL_RANGE_COMPARE_PARAMS_ARE_INVALID (-2079L)
|
||||
#define SLNETERR_RXFL_RXFL_INVALID_PATTERN_LENGTH (-2080L) /**< requested length for L1/L4 payload matching must not exceed 16 bytes */
|
||||
#define SLNETERR_RXFL_ACTION_USER_EVENT_ID_TOO_BIG (-2081L) /**< user action id for host event must not exceed SLNETERR_WLAN_RX_FILTER_MAX_USER_EVENT_ID */
|
||||
#define SLNETERR_RXFL_OFFSET_TOO_BIG (-2082L) /**< requested offset for L1/L4 payload matching must not exceed 1535 bytes */
|
||||
#define SLNETERR_RXFL_STAT_UNSUPPORTED (-2083L) /**< get rx filters statistics not supported */
|
||||
#define SLNETERR_RXFL_INVALID_FILTER_ARG_UPDATE (-2084L) /**< invalid filter args request */
|
||||
#define SLNETERR_RXFL_INVALID_SYSTEM_STATE_TRIGGER_FOR_FILTER_TYPE (-2085L) /**< system state not supported for this filter type */
|
||||
#define SLNETERR_RXFL_INVALID_FUNC_ID_FOR_FILTER_TYPE (-2086L) /**< function id not supported for this filter type */
|
||||
#define SLNETERR_RXFL_DEPENDENT_FILTER_DO_NOT_EXIST_3 (-2087L) /**< filter parent doesn't exist */
|
||||
#define SLNETERR_RXFL_OUTPUT_OR_INPUT_BUFFER_LENGTH_TOO_SMALL (-2088L) /**< ! The output buffer length is smaller than required for that operation */
|
||||
#define SLNETERR_RXFL_DEPENDENT_FILTER_SOFTWARE_FILTER_NOT_FIT (-2089L) /**< Node filter can't be child of software filter and vice_versa */
|
||||
#define SLNETERR_RXFL_DEPENDENCY_IS_NOT_PERSISTENT (-2090L) /**< Dependency filter is not persistent */
|
||||
#define SLNETERR_RXFL_RXFL_ALLOCATION_PROBLEM (-2091L)
|
||||
#define SLNETERR_RXFL_SYSTEM_STATE_NOT_SUPPORTED_FOR_THIS_FILTER (-2092L) /**< System state is not supported */
|
||||
#define SLNETERR_RXFL_TRIGGER_USE_REG5_TO_REG8 (-2093L) /**< Only counters 5 - 8 are allowed, for trigger */
|
||||
#define SLNETERR_RXFL_TRIGGER_USE_REG1_TO_REG4 (-2094L) /**< Only counters 1 - 4 are allowed, for trigger */
|
||||
#define SLNETERR_RXFL_ACTION_USE_REG5_TO_REG8 (-2095L) /**< Only counters 5 - 8 are allowed, for action */
|
||||
#define SLNETERR_RXFL_ACTION_USE_REG1_TO_REG4 (-2096L) /**< Only counters 1 - 4 are allowed, for action */
|
||||
#define SLNETERR_RXFL_FIELD_SUPPORT_ONLY_EQUAL_AND_NOTEQUAL (-2097L) /**< Rule compare function Id is out of range */
|
||||
#define SLNETERR_RXFL_WRONG_MULTICAST_BROADCAST_ADDRESS (-2098L) /**< The address should be of type multicast or broadcast */
|
||||
#define SLNETERR_RXFL_THE_FILTER_IS_NOT_OF_HEADER_TYPE (-2099L) /**< The filter should be of header type */
|
||||
#define SLNETERR_RXFL_WRONG_COMPARE_FUNC_FOR_BROADCAST_ADDRESS (-2100L) /**< The compare function is not suitable for broadcast address */
|
||||
#define SLNETERR_RXFL_WRONG_MULTICAST_ADDRESS (-2101L) /**< The address should be of multicast type */
|
||||
#define SLNETERR_RXFL_DEPENDENT_FILTER_IS_NOT_PERSISTENT (-2102L) /**< The dependency filter is not persistent */
|
||||
#define SLNETERR_RXFL_DEPENDENT_FILTER_IS_NOT_ENABLED (-2103L) /**< The dependency filter is not enabled */
|
||||
#define SLNETERR_RXFL_FILTER_HAS_CHILDS (-2104L) /**< The filter has childs and can't be removed */
|
||||
#define SLNETERR_RXFL_CHILD_IS_ENABLED (-2105L) /**< Can't disable filter while the child is enabled */
|
||||
#define SLNETERR_RXFL_DEPENDENCY_IS_DISABLED (-2106L) /**< Can't enable filter in case its dependency filter is disabled */
|
||||
#define SLNETERR_RXFL_MAC_SEND_MATCHDB_FAILED (-2107L)
|
||||
#define SLNETERR_RXFL_MAC_SEND_ARG_DB_FAILED (-2108L)
|
||||
#define SLNETERR_RXFL_MAC_SEND_NODEDB_FAILED (-2109L)
|
||||
#define SLNETERR_RXFL_MAC_OPERTATION_RESUME_FAILED (-2110L)
|
||||
#define SLNETERR_RXFL_MAC_OPERTATION_HALT_FAILED (-2111L)
|
||||
#define SLNETERR_RXFL_NUMBER_OF_CONNECTION_POINTS_EXCEEDED (-2112L) /**< Number of connection points exceeded */
|
||||
#define SLNETERR_RXFL_DEPENDENT_FILTER_DEPENDENCY_ACTION_IS_DROP (-2113L) /**< The dependent filter has Drop action, thus the filter can't be created */
|
||||
#define SLNETERR_RXFL_FILTER_DO_NOT_EXISTS (-2114L) /**< The filter doesn't exists */
|
||||
#define SLNETERR_RXFL_DEPEDENCY_NOT_ON_THE_SAME_LAYER (-2115L) /**< The filter and its dependency must be on the same layer */
|
||||
#define SLNETERR_RXFL_NUMBER_OF_ARGS_EXCEEDED (-2116L) /**< Number of arguments exceeded */
|
||||
#define SLNETERR_RXFL_ACTION_NO_REG_NUMBER (-2117L) /**< Action require counter number */
|
||||
#define SLNETERR_RXFL_DEPENDENT_FILTER_LAYER_DO_NOT_FIT (-2118L) /**< the filter and its dependency should be from the same layer */
|
||||
#define SLNETERR_RXFL_DEPENDENT_FILTER_SYSTEM_STATE_DO_NOT_FIT (-2119L) /**< The filter and its dependency system state don't fit */
|
||||
#define SLNETERR_RXFL_DEPENDENT_FILTER_DO_NOT_EXIST_2 (-2120L) /**< The parent filter don't exist */
|
||||
#define SLNETERR_RXFL_DEPENDENT_FILTER_DO_NOT_EXIST_1 (-2121L) /**< The parent filter is null */
|
||||
#define SLNETERR_RXFL_RULE_HEADER_ACTION_TYPE_NOT_SUPPORTED (-2122L) /**< The action type is not supported */
|
||||
#define SLNETERR_RXFL_RULE_HEADER_TRIGGER_COMPARE_FUNC_OUT_OF_RANGE (-2123L) /**< The Trigger comparison function is out of range */
|
||||
#define SLNETERR_RXFL_RULE_HEADER_TRIGGER_OUT_OF_RANGE (-2124L) /**< The Trigger is out of range */
|
||||
#define SLNETERR_RXFL_RULE_HEADER_COMPARE_FUNC_OUT_OF_RANGE (-2125L) /**< The rule compare function is out of range */
|
||||
#define SLNETERR_RXFL_FRAME_TYPE_NOT_SUPPORTED (-2126L) /**< ASCII frame type string is illegal */
|
||||
#define SLNETERR_RXFL_RULE_FIELD_ID_NOT_SUPPORTED (-2127L) /**< Rule field ID is out of range */
|
||||
#define SLNETERR_RXFL_RULE_HEADER_FIELD_ID_ASCII_NOT_SUPPORTED (-2128L) /**< This ASCII field ID is not supported */
|
||||
#define SLNETERR_RXFL_RULE_HEADER_NOT_SUPPORTED (-2129L) /**< The header rule is not supported on current release */
|
||||
#define SLNETERR_RXFL_RULE_HEADER_OUT_OF_RANGE (-2130L) /**< The header rule is out of range */
|
||||
#define SLNETERR_RXFL_RULE_HEADER_COMBINATION_OPERATOR_OUT_OF_RANGE (-2131L) /**< Combination function Id is out of range */
|
||||
#define SLNETERR_RXFL_RULE_HEADER_FIELD_ID_OUT_OF_RANGE (-2132L) /**< rule field Id is out of range */
|
||||
#define SLNETERR_RXFL_UPDATE_NOT_SUPPORTED (-2133L) /**< Update not supported */
|
||||
#define SLNETERR_RXFL_NO_FILTER_DATABASE_ALLOCATE (-2134L)
|
||||
#define SLNETERR_RXFL_ALLOCATION_FOR_GLOBALS_STRUCTURE_FAILED (-2135L)
|
||||
#define SLNETERR_RXFL_ALLOCATION_FOR_DB_NODE_FAILED (-2136L)
|
||||
#define SLNETERR_RXFL_READ_FILE_FILTER_ID_ILLEGAL (-2137L)
|
||||
#define SLNETERR_RXFL_READ_FILE_NUMBER_OF_FILTER_FAILED (-2138L)
|
||||
#define SLNETERR_RXFL_READ_FILE_FAILED (-2139L)
|
||||
#define SLNETERR_RXFL_NO_FILTERS_ARE_DEFINED (-2140L) /**< No filters are defined in the system */
|
||||
#define SLNETERR_RXFL_NUMBER_OF_FILTER_EXCEEDED (-2141L) /**< Number of max filters exceeded */
|
||||
#define SLNETERR_RXFL_BAD_FILE_MODE (-2142L)
|
||||
#define SLNETERR_RXFL_FAILED_READ_NVFILE (-2143L)
|
||||
#define SLNETERR_RXFL_FAILED_INIT_STORAGE (-2144L)
|
||||
#define SLNETERR_RXFL_CONTINUE_WRITE_MUST_BE_MOD_4 (-2145L)
|
||||
#define SLNETERR_RXFL_FAILED_LOAD_FILE (-2146L)
|
||||
#define SLNETERR_RXFL_INVALID_HANDLE (-2147L)
|
||||
#define SLNETERR_RXFL_FAILED_TO_WRITE (-2148L)
|
||||
#define SLNETERR_RXFL_OFFSET_OUT_OF_RANGE (-2149L)
|
||||
#define SLNETERR_RXFL_ALLOC (-2150L)
|
||||
#define SLNETERR_RXFL_READ_DATA_LENGTH (-2151L)
|
||||
#define SLNETERR_RXFL_INVALID_FILE_ID (-2152L)
|
||||
#define SLNETERR_RXFL_FILE_FILTERS_NOT_EXISTS (-2153L)
|
||||
#define SLNETERR_RXFL_FILE_ALREADY_IN_USE (-2154L)
|
||||
#define SLNETERR_RXFL_INVALID_ARGS (-2155L)
|
||||
#define SLNETERR_RXFL_FAILED_TO_CREATE_FILE (-2156L)
|
||||
#define SLNETERR_RXFL_FS_ALREADY_LOADED (-2157L)
|
||||
#define SLNETERR_RXFL_UNKNOWN (-2158L)
|
||||
#define SLNETERR_RXFL_FAILED_TO_CREATE_LOCK_OBJ (-2159L)
|
||||
#define SLNETERR_RXFL_DEVICE_NOT_LOADED (-2160L)
|
||||
#define SLNETERR_RXFL_INVALID_MAGIC_NUM (-2161L)
|
||||
#define SLNETERR_RXFL_FAILED_TO_READ (-2162L)
|
||||
#define SLNETERR_RXFL_NOT_SUPPORTED (-2163L)
|
||||
#define SLNETERR_WLAN_INVALID_COUNTRY_CODE (-2164L)
|
||||
#define SLNETERR_WLAN_NVMEM_ACCESS_FAILED (-2165L)
|
||||
#define SLNETERR_WLAN_OLD_FILE_VERSION (-2166L)
|
||||
#define SLNETERR_WLAN_TX_POWER_OUT_OF_RANGE (-2167L)
|
||||
#define SLNETERR_WLAN_INVALID_AP_PASSWORD_LENGTH (-2168L)
|
||||
#define SLNETERR_WLAN_PROVISIONING_ABORT_PROVISIONING_ALREADY_STARTED (-2169L)
|
||||
#define SLNETERR_WLAN_PROVISIONING_ABORT_HTTP_SERVER_DISABLED (-2170L)
|
||||
#define SLNETERR_WLAN_PROVISIONING_ABORT_PROFILE_LIST_FULL (-2171L)
|
||||
#define SLNETERR_WLAN_PROVISIONING_ABORT_INVALID_PARAM (-2172L)
|
||||
#define SLNETERR_WLAN_PROVISIONING_ABORT_GENERAL_ERROR (-2173L)
|
||||
#define SLNETERR_WLAN_MULTICAST_EXCEED_MAX_ADDR (-2174L)
|
||||
#define SLNETERR_WLAN_MULTICAST_INVAL_ADDR (-2175L)
|
||||
#define SLNETERR_WLAN_AP_SCAN_INTERVAL_TOO_SHORT (-2176L)
|
||||
#define SLNETERR_WLAN_PROVISIONING_CMD_NOT_EXPECTED (-2177L)
|
||||
|
||||
|
||||
#define SLNETERR_WLAN_AP_ACCESS_LIST_NO_ADDRESS_TO_DELETE (-2178L) /**< List is empty, no address to delete */
|
||||
#define SLNETERR_WLAN_AP_ACCESS_LIST_FULL (-2179L) /**< access list is full */
|
||||
#define SLNETERR_WLAN_AP_ACCESS_LIST_DISABLED (-2180L) /**< access list is disabled */
|
||||
#define SLNETERR_WLAN_AP_ACCESS_LIST_MODE_NOT_SUPPORTED (-2181L) /**< Trying to switch to unsupported mode */
|
||||
#define SLNETERR_WLAN_AP_STA_NOT_FOUND (-2182L) /**< trying to disconnect station which is not connected */
|
||||
|
||||
|
||||
|
||||
/* DEVICE ERRORS CODES*/
|
||||
#define SLNETERR_SUPPLICANT_ERROR (-4097L)
|
||||
#define SLNETERR_HOSTAPD_INIT_FAIL (-4098L)
|
||||
#define SLNETERR_HOSTAPD_INIT_IF_FAIL (-4099L)
|
||||
#define SLNETERR_WLAN_DRV_INIT_FAIL (-4100L)
|
||||
#define SLNETERR_MDNS_ENABLE_FAIL (-4103L) /**< mDNS enable failed */
|
||||
#define SLNETERR_ROLE_STA_ERR (-4107L) /**< Failure to load MAC/PHY in STA role */
|
||||
#define SLNETERR_ROLE_AP_ERR (-4108L) /**< Failure to load MAC/PHY in AP role */
|
||||
#define SLNETERR_ROLE_P2P_ERR (-4109L) /**< Failure to load MAC/PHY in P2P role */
|
||||
#define SLNETERR_CALIB_FAIL (-4110L) /**< Failure of calibration */
|
||||
#define SLNETERR_RESTORE_IMAGE_COMPLETE (-4113L) /**< Return to factory image completed, perform reset */
|
||||
#define SLNETERR_UNKNOWN_ERR (-4114L)
|
||||
#define SLNETERR_GENERAL_ERR (-4115L) /**< General error during init */
|
||||
#define SLNETERR_WRONG_ROLE (-4116L)
|
||||
#define SLNETERR_INCOMPLETE_PROGRAMMING (-4117L) /**< Error during programming, Program new image should be invoked (see sl_FsProgram) */
|
||||
|
||||
|
||||
#define SLNETERR_PENDING_TXRX_STOP_TIMEOUT_EXP (-4118L) /**< Timeout expired before completing all TX/RX */
|
||||
#define SLNETERR_PENDING_TXRX_NO_TIMEOUT (-4119L) /**< No Timeout, still have pending TX/RX */
|
||||
#define SLNETERR_INVALID_PERSISTENT_CONFIGURATION (-4120L) /**< persistent configuration can only be set to 0 (disabled) or 1 (enabled) */
|
||||
|
||||
|
||||
|
||||
/* NETAPP ERRORS CODES*/
|
||||
#define SLNETERR_MDNS_CREATE_FAIL (-6145L) /**< mDNS create failed */
|
||||
#define SLNETERR_DEVICE_NAME_LEN_ERR (-6146L) /**< Set Dev name error codes */
|
||||
#define SLNETERR_DEVICE_NAME_INVALID (-6147L) /**< Set Dev name error codes */
|
||||
#define SLNETERR_DOMAIN_NAME_LEN_ERR (-6148L) /**< Set domain name error codes */
|
||||
#define SLNETERR_DOMAIN_NAME_INVALID (-6149L) /**< Set domain name error codes */
|
||||
#define SLNETERR_NET_APP_DNS_QUERY_NO_RESPONSE (-6150L) /**< DNS query failed, no response */
|
||||
#define SLNETERR_NET_APP_DNS_ERROR (-6151L) /**< DNS internal error */
|
||||
#define SLNETERR_NET_APP_DNS_NO_SERVER (-6152L) /**< No DNS server was specified */
|
||||
#define SLNETERR_NET_APP_DNS_TIMEOUTR (-6153L) /**< mDNS parameters error */
|
||||
#define SLNETERR_NET_APP_DNS_QUERY_FAILED (-6154L) /**< DNS query failed; no DNS server sent an 'answer' */
|
||||
#define SLNETERR_NET_APP_DNS_BAD_ADDRESS_ERROR (-6155L) /**< Improperly formatted IPv4 or IPv6 address */
|
||||
#define SLNETERR_NET_APP_DNS_SIZE_ERROR (-6156L) /**< DNS destination size is too small */
|
||||
#define SLNETERR_NET_APP_DNS_MALFORMED_PACKET (-6157L) /**< Improperly formed or corrupted DNS packet received */
|
||||
#define SLNETERR_NET_APP_DNS_BAD_ID_ERROR (-6158L) /**< DNS packet from server does not match query ID */
|
||||
#define SLNETERR_NET_APP_DNS_PARAM_ERROR (-6159L) /**< Invalid params */
|
||||
#define SLNETERR_NET_APP_DNS_SERVER_NOT_FOUND (-6160L) /**< Server not found in Client list of DNS servers */
|
||||
#define SLNETERR_NET_APP_DNS_PACKET_CREATE_ERROR (-6161L) /**< Error creating DNS packet */
|
||||
#define SLNETERR_NET_APP_DNS_EMPTY_DNS_SERVER_LIST (-6162L) /**< DNS Client's list of DNS servers is empty */
|
||||
#define SLNETERR_NET_APP_DNS_SERVER_AUTH_ERROR (-6163L) /**< Server not able to authenticate answer/authority data*/
|
||||
#define SLNETERR_NET_APP_DNS_ZERO_GATEWAY_IP_ADDRESS (-6164L) /**< DNS Client IP instance has a zero gateway IP address */
|
||||
#define SLNETERR_NET_APP_DNS_MISMATCHED_RESPONSE (-6165L) /**< Server response type does not match the query request*/
|
||||
#define SLNETERR_NET_APP_DNS_DUPLICATE_ENTRY (-6166L) /**< Duplicate entry exists in DNS server table */
|
||||
#define SLNETERR_NET_APP_DNS_RETRY_A_QUERY (-6167L) /**< SOA status returned; web site only exists as IPv4 */
|
||||
#define SLNETERR_NET_APP_DNS_INVALID_ADDRESS_TYPE (-6168L) /**< IP address type (e.g. IPv6L) not supported */
|
||||
#define SLNETERR_NET_APP_DNS_IPV6_NOT_SUPPORTED (-6169L) /**< IPv6 disabled */
|
||||
#define SLNETERR_NET_APP_DNS_NEED_MORE_RECORD_BUFFER (-6170L) /**< The buffer size is not enough. */
|
||||
#define SLNETERR_NET_APP_MDNS_ERROR (-6171L) /**< MDNS internal error. */
|
||||
#define SLNETERR_NET_APP_MDNS_PARAM_ERROR (-6172L) /**< MDNS parameters error. */
|
||||
#define SLNETERR_NET_APP_MDNS_CACHE_ERROR (-6173L) /**< The Cache size is not enough. */
|
||||
#define SLNETERR_NET_APP_MDNS_UNSUPPORTED_TYPE (-6174L) /**< The unsupported resource record type. */
|
||||
#define SLNETERR_NET_APP_MDNS_DATA_SIZE_ERROR (-6175L) /**< The data size is too big. */
|
||||
#define SLNETERR_NET_APP_MDNS_AUTH_ERROR (-6176L) /**< Attempting to parse too large a data. */
|
||||
#define SLNETERR_NET_APP_MDNS_PACKET_ERROR (-6177L) /**< The packet can not add the resource record. */
|
||||
#define SLNETERR_NET_APP_MDNS_DEST_ADDRESS_ERROR (-6178L) /**< The destination address error. */
|
||||
#define SLNETERR_NET_APP_MDNS_UDP_PORT_ERROR (-6179L) /**< The udp port error. */
|
||||
#define SLNETERR_NET_APP_MDNS_NOT_LOCAL_LINK (-6180L) /**< The message that not originate from the local link. */
|
||||
#define SLNETERR_NET_APP_MDNS_EXCEED_MAX_LABEL (-6181L) /**< The data exceed the max label size. */
|
||||
#define SLNETERR_NET_APP_MDNS_EXIST_UNIQUE_RR (-6182L) /**< At least one unique record in the cache. */
|
||||
#define SLNETERR_NET_APP_MDNS_EXIST_ANSWER (-6183L) /**< At least one answer record in the cache. */
|
||||
#define SLNETERR_NET_APP_MDNS_EXIST_SAME_QUERY (-6184L) /**< Exist the same query. */
|
||||
#define SLNETERR_NET_APP_MDNS_DUPLICATE_SERVICE (-6185L) /**< Duplicate service. */
|
||||
#define SLNETERR_NET_APP_MDNS_NO_ANSWER (-6186L) /**< No response for one-shot query. */
|
||||
#define SLNETERR_NET_APP_MDNS_NO_KNOWN_ANSWER (-6187L) /**< No known answer for query. */
|
||||
#define SLNETERR_NET_APP_MDNS_NAME_MISMATCH (-6188L) /**< The name mismatch. */
|
||||
#define SLNETERR_NET_APP_MDNS_NOT_STARTED (-6189L) /**< MDNS does not start. */
|
||||
#define SLNETERR_NET_APP_MDNS_HOST_NAME_ERROR (-6190L) /**< MDNS host name error. */
|
||||
#define SLNETERR_NET_APP_MDNS_NO_MORE_ENTRIES (-6191L) /**< No more entries be found. */
|
||||
#define SLNETERR_NET_APP_MDNS_SERVICE_TYPE_MISMATCH (-6192L) /**< The service type mismatch */
|
||||
#define SLNETERR_NET_APP_MDNS_LOOKUP_INDEX_ERROR (-6193L) /**< Index is bigger than number of services. */
|
||||
#define SLNETERR_NET_APP_MDNS_MAX_SERVICES_ERROR (-6194L)
|
||||
#define SLNETERR_NET_APP_MDNS_IDENTICAL_SERVICES_ERROR (-6195L)
|
||||
#define SLNETERR_NET_APP_MDNS_EXISTED_SERVICE_ERROR (-6196L)
|
||||
#define SLNETERR_NET_APP_MDNS_ERROR_SERVICE_NAME_ERROR (-6197L)
|
||||
#define SLNETERR_NET_APP_MDNS_RX_PACKET_ALLOCATION_ERROR (-6198L)
|
||||
#define SLNETERR_NET_APP_MDNS_BUFFER_SIZE_ERROR (-6199L)
|
||||
#define SLNETERR_NET_APP_MDNS_NET_APP_SET_ERROR (-6200L)
|
||||
#define SLNETERR_NET_APP_MDNS_GET_SERVICE_LIST_FLAG_ERROR (-6201L)
|
||||
#define SLNETERR_NET_APP_MDNS_MDNS_NO_CONFIGURATION_ERROR (-6202L)
|
||||
#define SLNETERR_NET_APP_MDNS_STATUS_ERROR (-6203L)
|
||||
#define SLNETERR_NET_APP_ENOBUFS (-6204L)
|
||||
#define SLNETERR_NET_APP_DNS_IPV6_REQ_BUT_IPV6_DISABLED (-6205L) /**< trying to issue ipv6 DNS request but ipv6 is disabled */
|
||||
#define SLNETERR_NET_APP_DNS_INVALID_FAMILY_TYPE (-6206L) /**< Family type is not ipv4 and not ipv6 */
|
||||
#define SLNETERR_NET_APP_DNS_REQ_TOO_BIG (-6207L) /**< DNS request size is too big */
|
||||
#define SLNETERR_NET_APP_DNS_ALLOC_ERROR (-6208L) /**< Allocation error */
|
||||
#define SLNETERR_NET_APP_DNS_EXECUTION_ERROR (-6209L) /**< Execution error */
|
||||
#define SLNETERR_NET_APP_P2P_ROLE_IS_NOT_CONFIGURED (-6210L) /**< role p2p is not configured yet, should be CL or GO in order to execute command */
|
||||
#define SLNETERR_NET_APP_INCORECT_ROLE_FOR_APP (-6211L) /**< incorrect role for specific application */
|
||||
#define SLNETERR_NET_APP_INCORECT_APP_MASK (-6212L) /**< mask does not match any app */
|
||||
#define SLNETERR_NET_APP_MDNS_ALREADY_STARTED (-6213L) /**< mdns application already started */
|
||||
#define SLNETERR_NET_APP_HTTP_SERVER_ALREADY_STARTED (-6214L) /**< http server application already started */
|
||||
|
||||
#define SLNETERR_NET_APP_HTTP_GENERAL_ERROR (-6216L) /**< New error - Http handle request failed */
|
||||
#define SLNETERR_NET_APP_HTTP_INVALID_TIMEOUT (-6217L) /**< New error - Http timeout invalid argument */
|
||||
#define SLNETERR_NET_APP_INVALID_URN_LENGTH (-6218L) /**< invalid URN length */
|
||||
#define SLNETERR_NET_APP_RX_BUFFER_LENGTH (-6219L) /**< size of the requested services is smaller than size of the user buffer */
|
||||
|
||||
|
||||
|
||||
/*< NETCFG ERRORS CODES*/
|
||||
#define SLNETERR_STATIC_ADDR_SUBNET_ERROR (-8193L)
|
||||
#define SLNETERR_INCORRECT_IPV6_STATIC_LOCAL_ADDR (-8194L) /**< Ipv6 Local address prefix is wrong */
|
||||
#define SLNETERR_INCORRECT_IPV6_STATIC_GLOBAL_ADDR (-8195L) /**< Ipv6 Global address prefix is wrong */
|
||||
#define SLNETERR_IPV6_LOCAL_ADDR_SHOULD_BE_SET_FIRST (-8195L) /**< Attempt to set ipv6 global address before ipv6 local address is set */
|
||||
|
||||
|
||||
|
||||
/* NETUTIL ERRORS CODES */
|
||||
#define SLNETERR_NETUTIL_CRYPTO_GENERAL (-12289L)
|
||||
#define SLNETERR_NETUTIL_CRYPTO_INVALID_INDEX (-12290L)
|
||||
#define SLNETERR_NETUTIL_CRYPTO_INVALID_PARAM (-12291L)
|
||||
#define SLNETERR_NETUTIL_CRYPTO_MEM_ALLOC (-12292L)
|
||||
#define SLNETERR_NETUTIL_CRYPTO_INVALID_DB_VER (-12293L)
|
||||
#define SLNETERR_NETUTIL_CRYPTO_UNSUPPORTED_OPTION (-12294L)
|
||||
#define SLNETERR_NETUTIL_CRYPTO_BUFFER_TOO_SMALL (-12295L)
|
||||
#define SLNETERR_NETUTIL_CRYPTO_EMPTY_DB_ENTRY (-12296L)
|
||||
#define SLNETERR_NETUTIL_CRYPTO_NON_TEMPORARY_KEY (-12297L)
|
||||
#define SLNETERR_NETUTIL_CRYPTO_DB_ENTRY_NOT_FREE (-12298L)
|
||||
#define SLNETERR_NETUTIL_CRYPTO_CORRUPTED_DB_FILE (-12299L)
|
||||
|
||||
|
||||
|
||||
/* GENERAL ERRORS CODES*/
|
||||
#define SLNETERR_INVALID_OPCODE (-14337L)
|
||||
#define SLNETERR_INVALID_PARAM (-14338L)
|
||||
#define SLNETERR_STATUS_ERROR (-14341L)
|
||||
#define SLNETERR_NVMEM_ACCESS_FAILED (-14342L)
|
||||
#define SLNETERR_NOT_ALLOWED_NWP_LOCKED (-14343L) /**< Device is locked, Return to Factory Image or Program new image should be invoked (see sl_FsCtl, sl_FsProgram) */
|
||||
|
||||
/* SECURITY ERRORS CODE */
|
||||
#define SLNETERR_LOADING_CERTIFICATE_STORE (-28673L)
|
||||
|
||||
/* Device is Locked! Return to Factory Image or Program new
|
||||
image should be invoked (see sl_FsCtl, sl_FsProgram) */
|
||||
#define SLNETERR_DEVICE_LOCKED_SECURITY_ALERT (-28674L)
|
||||
|
||||
|
||||
|
||||
/* INTERNAL HOST ERRORS CODES*/
|
||||
|
||||
/* Receive this error in case there are no resources to issue the command
|
||||
If possible, increase the number of MAX_CONCURRENT_ACTIONS (result in memory increase)
|
||||
If not, try again later */
|
||||
#define SLNETERR_POOL_IS_EMPTY (-2000L)
|
||||
|
||||
/* Receive this error in case a given length for RX buffer was too small.
|
||||
Receive payload was bigger than the given buffer size. Therefore, payload is cut according to receive size
|
||||
Recommend to increase buffer size */
|
||||
#define SLNETERR_ESMALLBUF (-2001L)
|
||||
|
||||
/* Receive this error in case zero length is supplied to a "get" API
|
||||
Recommend to supply length according to requested information (view options defines for help) */
|
||||
#define SLNETERR_EZEROLEN (-2002L)
|
||||
|
||||
/* User supplied invalid parameter */
|
||||
#define SLNETERR_INVALPARAM (-2003L)
|
||||
|
||||
/* Failed to open interface */
|
||||
#define SLNETERR_BAD_INTERFACE (-2004L)
|
||||
|
||||
/* API has been aborted due to an error detected by host driver */
|
||||
#define SLNETERR_API_ABORTED (-2005L)
|
||||
|
||||
/* Parameters are invalid */
|
||||
#define SLNETERR_RET_CODE_INVALID_INPUT (-2006L)
|
||||
|
||||
/* Driver internal error */
|
||||
#define SLNETERR_RET_CODE_SELF_ERROR (-2007L)
|
||||
|
||||
/* NWP internal error */
|
||||
#define SLNETERR_RET_CODE_NWP_IF_ERROR (-2008L)
|
||||
|
||||
/* malloc error */
|
||||
#define SLNETERR_RET_CODE_MALLOC_ERROR (-2009L)
|
||||
|
||||
/* protocol error */
|
||||
#define SLNETERR_RET_CODE_PROTOCOL_ERROR (-2010L)
|
||||
|
||||
/* API has been aborted, command is not allowed in device lock state */
|
||||
#define SLNETERR_RET_CODE_DEV_LOCKED (-2011L)
|
||||
|
||||
/* SlNetSock_Start cannot be invoked twice */
|
||||
#define SLNETERR_RET_CODE_DEV_ALREADY_STARTED (-2012L)
|
||||
|
||||
/* SL Net API is in progress */
|
||||
#define SLNETERR_RET_CODE_API_COMMAND_IN_PROGRESS (-2013L)
|
||||
|
||||
/* Provisioning is in progress - */
|
||||
#define SLNETERR_RET_CODE_PROVISIONING_IN_PROGRESS (-2014L)
|
||||
|
||||
/* Wrong ping parameters - ping cannot be called with the following parameters:
|
||||
1. infinite ping packet
|
||||
2. report only when finished
|
||||
3. no callback supplied */
|
||||
#define SLNETERR_RET_CODE_NET_APP_PING_INVALID_PARAMS (-2015L)
|
||||
|
||||
|
||||
/* SlNetSock select already in progress.
|
||||
this error will be returned if app will try to call
|
||||
SlNetSock_select blocking when there is already select trigger in progress */
|
||||
#define SLNETERR_RET_CODE_SOCKET_SELECT_IN_PROGRESS_ERROR (-2016L)
|
||||
|
||||
#define SLNETERR_RET_CODE_STOP_IN_PROGRESS (-2017L)
|
||||
|
||||
|
||||
/* The device has not been started yet */
|
||||
#define SLNETERR_RET_CODE_DEV_NOT_STARTED (-2018L)
|
||||
|
||||
/* The event link was not found in the list */
|
||||
#define SLNETERR_RET_CODE_EVENT_LINK_NOT_FOUND (-2019L)
|
||||
|
||||
/* Function couldn't find any free space/location */
|
||||
#define SLNETERR_RET_CODE_NO_FREE_SPACE (-2020L)
|
||||
|
||||
/* Function couldn't execute correctly */
|
||||
#define SLNETERR_RET_CODE_FUNCTION_FAILED (-2021L)
|
||||
|
||||
/* Mutex creation failed */
|
||||
#define SLNETERR_RET_CODE_MUTEX_CREATION_FAILED (-2022L)
|
||||
|
||||
/* Function couldn't find the requested resource */
|
||||
#define SLNETERR_RET_CODE_COULDNT_FIND_RESOURCE (-2023L)
|
||||
|
||||
/* Interface doesn't support the non mandatory function */
|
||||
#define SLNETERR_RET_CODE_DOESNT_SUPPORT_NON_MANDATORY_FXN (-2024L)
|
||||
|
||||
/* Socket creation in progress */
|
||||
#define SLNETERR_RET_CODE_SOCKET_CREATION_IN_PROGRESS (-2025L)
|
||||
|
||||
/* Unsupported scenario, option or feature */
|
||||
#define SLNETERR_RET_CODE_UNSUPPORTED (-2026L)
|
||||
|
||||
|
||||
/* sock related API's from SlNetIf_Config_t failed */
|
||||
#define SLNETSOCK_ERR_SOCKCREATE_FAILED (-3000L)
|
||||
#define SLNETSOCK_ERR_SOCKCLOSE_FAILED (-3001L)
|
||||
#define SLNETSOCK_ERR_SOCKSELECT_FAILED (-3002L)
|
||||
#define SLNETSOCK_ERR_SOCKSETOPT_FAILED (-3003L)
|
||||
#define SLNETSOCK_ERR_SOCKGETOPT_FAILED (-3004L)
|
||||
#define SLNETSOCK_ERR_SOCKRECVFROM_FAILED (-3005L)
|
||||
#define SLNETSOCK_ERR_SOCKSENDTO_FAILED (-3006L)
|
||||
#define SLNETSOCK_ERR_SOCKSHUTDOWN_FAILED (-3007L)
|
||||
#define SLNETSOCK_ERR_SOCKACCEPT_FAILED (-3008L)
|
||||
#define SLNETSOCK_ERR_SOCKBIND_FAILED (-3009L)
|
||||
#define SLNETSOCK_ERR_SOCKLISTEN_FAILED (-3000L)
|
||||
#define SLNETSOCK_ERR_SOCKCONNECT_FAILED (-3001L)
|
||||
#define SLNETSOCK_ERR_SOCKGETPEERNAME_FAILED (-3002L)
|
||||
#define SLNETSOCK_ERR_SOCKGETLOCALNAME_FAILED (-3003L)
|
||||
#define SLNETSOCK_ERR_SOCKRECV_FAILED (-3004L)
|
||||
#define SLNETSOCK_ERR_SOCKSEND_FAILED (-3005L)
|
||||
#define SLNETSOCK_ERR_SOCKSTARTSEC_FAILED (-3006L)
|
||||
|
||||
/* util related API's from SlNetIf_Config_t failed */
|
||||
#define SLNETUTIL_ERR_UTILGETHOSTBYNAME_FAILED (-3100L)
|
||||
|
||||
/*
|
||||
* base for util error codes related to SlNetUtil_getAddrInfo and
|
||||
* SlNetUtil_gaiStrErr
|
||||
*/
|
||||
#define SLNETUTIL_EAI_BASE (-3120L)
|
||||
|
||||
/*
|
||||
* util error codes related to SlNetUtil_getAddrInfo and SlNetUtil_gaiStrErr
|
||||
* The numbering of these codes MUST match the order of the strErrorMsgs array
|
||||
* in <ti/net/slnetutils.c>
|
||||
*/
|
||||
#define SLNETUTIL_EAI_AGAIN (-3121L)
|
||||
#define SLNETUTIL_EAI_BADFLAGS (-3122L)
|
||||
#define SLNETUTIL_EAI_FAIL (-3123L)
|
||||
#define SLNETUTIL_EAI_FAMILY (-3124L)
|
||||
#define SLNETUTIL_EAI_MEMORY (-3125L)
|
||||
#define SLNETUTIL_EAI_NONAME (-3126L)
|
||||
#define SLNETUTIL_EAI_SERVICE (-3127L)
|
||||
#define SLNETUTIL_EAI_SOCKTYPE (-3128L)
|
||||
#define SLNETUTIL_EAI_SYSTEM (-3129L)
|
||||
#define SLNETUTIL_EAI_OVERFLOW (-3130L)
|
||||
#define SLNETUTIL_EAI_ADDRFAMILY (-3131L)
|
||||
|
||||
/* if related API's from SlNetIf_Config_t failed */
|
||||
#define SLNETIF_ERR_IFLOADSECOBJ_FAILED (-3200L)
|
||||
#define SLNETIF_ERR_IFGETIPADDR_FAILED (-3201L)
|
||||
#define SLNETIF_ERR_IFGETCONNECTIONSTATUS_FAILED (-3202L)
|
||||
#define SLNETIF_ERR_IFCREATECONTEXT_FAILED (-3203L)
|
||||
|
||||
/*!
|
||||
|
||||
Close the Doxygen group.
|
||||
@}
|
||||
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* __SL_NET_ERR_H__ */
|
|
@ -0,0 +1,862 @@
|
|||
/*
|
||||
* Copyright (c) 2017-2020, Texas Instruments Incorporated
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* * Neither the name of Texas Instruments Incorporated nor the names of
|
||||
* its contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Include files */
|
||||
/*****************************************************************************/
|
||||
|
||||
/* Global includes */
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#include <ti/net/slnetif.h>
|
||||
#include <ti/net/slneterr.h>
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Macro declarations */
|
||||
/*****************************************************************************/
|
||||
|
||||
#define SLNETIF_NORMALIZE_NEEDED 0
|
||||
#if SLNETIF_NORMALIZE_NEEDED
|
||||
#define SLNETIF_NORMALIZE_RET_VAL(retVal,err) ((retVal < 0)?(retVal = err):(retVal))
|
||||
#else
|
||||
#define SLNETIF_NORMALIZE_RET_VAL(retVal,err)
|
||||
#endif
|
||||
|
||||
/* Interface maximum priority */
|
||||
#define SLNETIF_MAX_PRIORITY (15)
|
||||
|
||||
/* The 32bit interface flags structure:
|
||||
Bits 0-3 : interface priority
|
||||
Bit 4 : Interface state
|
||||
Bits 5-31 : Reserved
|
||||
*/
|
||||
#define IF_PRIORITY_BITS (0x000f)
|
||||
#define IF_STATE_BIT (0x0010)
|
||||
|
||||
/* this macro returns the priority of the interface */
|
||||
#define GET_IF_PRIORITY(netIf) ((netIf).flags & IF_PRIORITY_BITS)
|
||||
|
||||
/* this macro reset the priority of the interface */
|
||||
#define RESET_IF_PRIORITY(netIf) ((netIf).flags &= ~IF_PRIORITY_BITS)
|
||||
|
||||
/* this macro set the priority of the interface */
|
||||
#define SET_IF_PRIORITY(netIf, priority) ((netIf).flags |= ((int32_t)priority))
|
||||
|
||||
/* this macro returns the state of the interface */
|
||||
#define GET_IF_STATE(netIf) (((netIf).flags & IF_STATE_BIT)?SLNETIF_STATE_ENABLE:SLNETIF_STATE_DISABLE)
|
||||
|
||||
/* this macro set the interface to enable state */
|
||||
#define SET_IF_STATE_ENABLE(netIf) ((netIf).flags |= IF_STATE_BIT)
|
||||
|
||||
/* this macro set the interface to disable state */
|
||||
#define SET_IF_STATE_DISABLE(netIf) ((netIf).flags &= ~IF_STATE_BIT)
|
||||
|
||||
/* Check if the state bit is set */
|
||||
#define IS_STATE_BIT_SET(queryBitmap) (0 != (queryBitmap & SLNETIF_QUERY_IF_STATE_BIT))
|
||||
|
||||
/* Check if the connection status bit is set */
|
||||
#define IS_CONNECTION_STATUS_BIT_SET(queryBitmap) (0 != (queryBitmap & SLNETIF_QUERY_IF_CONNECTION_STATUS_BIT))
|
||||
|
||||
/* Return last found netIf, if none of the existing interfaces answers
|
||||
the query */
|
||||
#define IS_ALLOW_PARTIAL_MATCH_BIT_SET(queryBitmap) (0 != (queryBitmap & SLNETIF_QUERY_IF_ALLOW_PARTIAL_MATCH_BIT))
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Structure/Enum declarations */
|
||||
/*****************************************************************************/
|
||||
|
||||
|
||||
/* Interface Node */
|
||||
typedef struct SlNetIf_Node_t
|
||||
{
|
||||
SlNetIf_t netIf;
|
||||
struct SlNetIf_Node_t *next;
|
||||
} SlNetIf_Node_t;
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Global declarations */
|
||||
/*****************************************************************************/
|
||||
|
||||
static SlNetIf_Node_t * SlNetIf_listHead = NULL;
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Function prototypes */
|
||||
/*****************************************************************************/
|
||||
|
||||
static int32_t SlNetIf_configCheck(const SlNetIf_Config_t *ifConf);
|
||||
|
||||
//*****************************************************************************
|
||||
//
|
||||
// SlNetIf_configCheck - Checks that all mandatory configuration exists
|
||||
//
|
||||
//*****************************************************************************
|
||||
|
||||
static int32_t SlNetIf_configCheck(const SlNetIf_Config_t *ifConf)
|
||||
{
|
||||
/* Check if the mandatory configuration exists
|
||||
This configuration needs to be updated when new mandatory is added */
|
||||
if ((NULL != ifConf) &&
|
||||
(NULL != ifConf->sockCreate) &&
|
||||
(NULL != ifConf->sockClose) &&
|
||||
(NULL != ifConf->sockSelect) &&
|
||||
(NULL != ifConf->sockSetOpt) &&
|
||||
(NULL != ifConf->sockGetOpt) &&
|
||||
(NULL != ifConf->sockRecvFrom) &&
|
||||
(NULL != ifConf->sockSendTo) &&
|
||||
(NULL != ifConf->ifGetIPAddr) &&
|
||||
(NULL != ifConf->ifGetConnectionStatus) )
|
||||
{
|
||||
/* All mandatory configuration exists - return success */
|
||||
return SLNETERR_RET_CODE_OK;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Not all mandatory configuration exists - return error code */
|
||||
return SLNETERR_INVALPARAM;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//*****************************************************************************
|
||||
//
|
||||
// SlNetIf_init - Initialize the SlNetIf module
|
||||
//
|
||||
//*****************************************************************************
|
||||
int32_t SlNetIf_init(int32_t flags)
|
||||
{
|
||||
return SLNETERR_RET_CODE_OK;
|
||||
}
|
||||
|
||||
|
||||
//*****************************************************************************
|
||||
//
|
||||
// SlNetIf_add - Adding new interface
|
||||
//
|
||||
//*****************************************************************************
|
||||
int32_t SlNetIf_add(uint16_t ifID, char *ifName, const SlNetIf_Config_t *ifConf, uint8_t priority)
|
||||
{
|
||||
SlNetIf_Node_t *ifNode = SlNetIf_listHead;
|
||||
SlNetIf_Node_t *prvNode = NULL;
|
||||
char *allocName = NULL;
|
||||
int16_t strLen;
|
||||
int32_t retVal;
|
||||
|
||||
/* Check if ifID is a valid input - Only one bit is set (Pow of 2) or if
|
||||
the priority isn't a valid input */
|
||||
if ( (false == ONLY_ONE_BIT_IS_SET(ifID)) || (priority > SLNETIF_MAX_PRIORITY) )
|
||||
{
|
||||
return SLNETERR_RET_CODE_INVALID_INPUT;
|
||||
}
|
||||
|
||||
/* Run over the interface list until finding the required ifID or Until
|
||||
reaching the end of the list */
|
||||
while (NULL != ifNode)
|
||||
{
|
||||
/* Check if the identifier of the interface is equal to the input */
|
||||
if ((ifNode->netIf).ifID == ifID)
|
||||
{
|
||||
/* Required interface found, ifID cannot be used again */
|
||||
return SLNETERR_RET_CODE_INVALID_INPUT;
|
||||
}
|
||||
/* Check if the identifier of the interface is equal to the input */
|
||||
if ((GET_IF_PRIORITY(ifNode->netIf)) > priority)
|
||||
{
|
||||
/* Higher priority interface found, save location */
|
||||
prvNode = ifNode;
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
ifNode = ifNode->next;
|
||||
}
|
||||
|
||||
|
||||
/* Check if all required configuration exists */
|
||||
retVal = SlNetIf_configCheck(ifConf);
|
||||
|
||||
/* Check retVal in order to continue with adding the interface */
|
||||
if (SLNETERR_RET_CODE_OK == retVal)
|
||||
{
|
||||
/* Interface node memory allocation */
|
||||
/* Allocate memory for new interface node for the interface list */
|
||||
ifNode = malloc(sizeof(SlNetIf_Node_t));
|
||||
|
||||
/* Check if the memory allocated successfully */
|
||||
if (NULL == ifNode)
|
||||
{
|
||||
/* Allocation failed, return error code */
|
||||
return SLNETERR_RET_CODE_MALLOC_ERROR;
|
||||
}
|
||||
|
||||
/* Interface name memory allocation */
|
||||
/* Check if memory allocation for the name of the string is required */
|
||||
if (NULL != ifName)
|
||||
{
|
||||
/* Store the length of the interface name */
|
||||
strLen = strlen(ifName);
|
||||
|
||||
/* Allocate memory that will store the name of the interface */
|
||||
allocName = malloc(strLen + 1);
|
||||
|
||||
/* Check if the memory allocated successfully */
|
||||
if (NULL == allocName)
|
||||
{
|
||||
/* Allocation failed, free ifNode before returning from
|
||||
function */
|
||||
free(ifNode);
|
||||
return SLNETERR_RET_CODE_MALLOC_ERROR;
|
||||
}
|
||||
/* Copy the input name into the allocated memory.
|
||||
*
|
||||
* Note, using strcpy (not strncpy) to work around gcc warning
|
||||
* https://gcc.gnu.org/bugzilla//show_bug.cgi?id=88059
|
||||
* ... and we know ifName will fit in allocName.
|
||||
*/
|
||||
strcpy(allocName, ifName);
|
||||
}
|
||||
|
||||
/* Fill the allocated interface node with the input parameters */
|
||||
|
||||
/* Copy the interface ID */
|
||||
(ifNode->netIf).ifID = ifID;
|
||||
/* Connect the string allocated memory into the allocated interface */
|
||||
(ifNode->netIf).ifName = allocName;
|
||||
/* Copy the interface configuration */
|
||||
(ifNode->netIf).ifConf = (SlNetIf_Config_t *)ifConf;
|
||||
/* Reset the flags, set state to ENABLE and set the priority */
|
||||
(ifNode->netIf).flags = 0;
|
||||
SET_IF_PRIORITY(ifNode->netIf, priority);
|
||||
SET_IF_STATE_ENABLE(ifNode->netIf);
|
||||
|
||||
/* Check if CreateContext function exists */
|
||||
if (NULL != ifConf->ifCreateContext)
|
||||
{
|
||||
/* Function exists, run it and fill the context */
|
||||
retVal = ifConf->ifCreateContext(ifID, allocName, &((ifNode->netIf).ifContext));
|
||||
}
|
||||
|
||||
/* Check retVal before continuing */
|
||||
if (SLNETERR_RET_CODE_OK == retVal)
|
||||
{
|
||||
/* After creating and filling the interface, add it to the right
|
||||
place in the list according to its priority */
|
||||
|
||||
/* Check if there isn't any higher priority node */
|
||||
if (NULL == prvNode)
|
||||
{
|
||||
/* there isn't any higher priority node so check if list is
|
||||
empty */
|
||||
if (NULL != SlNetIf_listHead)
|
||||
{
|
||||
/* List isn't empty, so use the new allocated interface
|
||||
as the new head and connect the old list head as the
|
||||
following node */
|
||||
ifNode->next = SlNetIf_listHead;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* List is empty, so the new allocated interface will be
|
||||
the head list */
|
||||
ifNode->next = NULL;
|
||||
}
|
||||
SlNetIf_listHead = ifNode;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Higher priority exists, connect the allocated node after
|
||||
the prvNode and the next node (if exists) of prvNode to
|
||||
the next of the node */
|
||||
ifNode->next = prvNode->next;
|
||||
prvNode->next = ifNode;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return retVal;
|
||||
}
|
||||
|
||||
|
||||
//*****************************************************************************
|
||||
//
|
||||
// SlNetIf_getIfByID - Get interface configuration from interface ID
|
||||
//
|
||||
//*****************************************************************************
|
||||
SlNetIf_t * SlNetIf_getIfByID(uint16_t ifID)
|
||||
{
|
||||
SlNetIf_Node_t *ifNode = SlNetIf_listHead;
|
||||
|
||||
/* Check if ifID is a valid input - Only one bit is set (Pow of 2) */
|
||||
if (false == ONLY_ONE_BIT_IS_SET(ifID))
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Run over the interface list until finding the required ifID or Until
|
||||
reaching the end of the list */
|
||||
while (NULL != ifNode)
|
||||
{
|
||||
/* Check if the identifier of the interface is equal to the input */
|
||||
if ((ifNode->netIf).ifID == ifID)
|
||||
{
|
||||
/* Required interface found, return the interface pointer */
|
||||
return &(ifNode->netIf);
|
||||
}
|
||||
ifNode = ifNode->next;
|
||||
}
|
||||
|
||||
/* Interface identifier was not found */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
//*****************************************************************************
|
||||
//
|
||||
// SlNetIf_queryIf - Get interface configuration with the highest priority
|
||||
// from the provided interface bitmap
|
||||
// Note: ifBitmap - 0 is not a valid input
|
||||
//
|
||||
//*****************************************************************************
|
||||
SlNetIf_t * SlNetIf_queryIf(uint32_t ifBitmap, uint32_t queryBitmap)
|
||||
{
|
||||
SlNetIf_Node_t *ifNode = SlNetIf_listHead;
|
||||
SlNetIf_t *bestPartialMatchIf = NULL;
|
||||
|
||||
if (0 == ifBitmap)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Run over the interface list until finding the first ifID that is
|
||||
set in the ifBitmap or Until reaching the end of the list if no
|
||||
ifID were found */
|
||||
while (NULL != ifNode)
|
||||
{
|
||||
/* Check if the identifier of the interface is equal to the input */
|
||||
if (((ifNode->netIf).ifID) & ifBitmap)
|
||||
{
|
||||
/* Save the netIf only at the first match */
|
||||
if (NULL == bestPartialMatchIf)
|
||||
{
|
||||
bestPartialMatchIf = &(ifNode->netIf);
|
||||
}
|
||||
/* Skip over Bitmap queries */
|
||||
if ( 0 != queryBitmap)
|
||||
{
|
||||
/* Check if the state bit needs to be set and if it is */
|
||||
if ( (true == IS_STATE_BIT_SET(queryBitmap)) &&
|
||||
(SLNETIF_STATE_DISABLE == (GET_IF_STATE(ifNode->netIf))) )
|
||||
{
|
||||
/* State is disabled when needed to be set, continue
|
||||
to the next interface */
|
||||
ifNode = ifNode->next;
|
||||
continue;
|
||||
}
|
||||
/* Check if the connection status bit needs to be set
|
||||
and if it is */
|
||||
if ( (true == IS_CONNECTION_STATUS_BIT_SET(queryBitmap)) &&
|
||||
(SLNETIF_STATUS_CONNECTED != SlNetIf_getConnectionStatus((ifNode->netIf).ifID)) )
|
||||
{
|
||||
/* Connection status is not connected when it needed to
|
||||
be - continue to the next interface */
|
||||
ifNode = ifNode->next;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
/* Required interface found, return the interface pointer */
|
||||
return &(ifNode->netIf);
|
||||
}
|
||||
ifNode = ifNode->next;
|
||||
}
|
||||
|
||||
/* When bit is set, return the last interface found if there isn't
|
||||
an existing interface that answers the query return the last
|
||||
netIf that was found */
|
||||
if (true == IS_ALLOW_PARTIAL_MATCH_BIT_SET(queryBitmap))
|
||||
{
|
||||
return bestPartialMatchIf;
|
||||
}
|
||||
else
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
//*****************************************************************************
|
||||
//
|
||||
// SlNetIf_getNameByID - Get interface Name from interface ID
|
||||
//
|
||||
//*****************************************************************************
|
||||
const char * SlNetIf_getNameByID(uint16_t ifID)
|
||||
{
|
||||
SlNetIf_t *netIf;
|
||||
|
||||
/* Run validity check and find the requested interface */
|
||||
netIf = SlNetIf_getIfByID(ifID);
|
||||
|
||||
/* Check if the requested interface exists or the function returned NULL */
|
||||
if (NULL == netIf)
|
||||
{
|
||||
/* Interface doesn't exists or invalid input, return NULL */
|
||||
return NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Interface exists, return the interface name */
|
||||
return netIf->ifName;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//*****************************************************************************
|
||||
//
|
||||
// SlNetIf_getIDByName - Get interface ID from interface name
|
||||
//
|
||||
//*****************************************************************************
|
||||
int32_t SlNetIf_getIDByName(char *ifName)
|
||||
{
|
||||
SlNetIf_Node_t *ifNode = SlNetIf_listHead;
|
||||
|
||||
/* Check if ifName is a valid input */
|
||||
if (NULL == ifName)
|
||||
{
|
||||
return(SLNETERR_RET_CODE_INVALID_INPUT);
|
||||
}
|
||||
|
||||
/* Run over the interface list until finding the required ifID or Until
|
||||
reaching the end of the list */
|
||||
while (NULL != ifNode)
|
||||
{
|
||||
/* Check if the identifier of the interface is equal to the input */
|
||||
if (strcmp((ifNode->netIf).ifName, ifName) == 0)
|
||||
{
|
||||
/* Required interface found, return the interface identifier */
|
||||
return ((ifNode->netIf).ifID);
|
||||
}
|
||||
ifNode = ifNode->next;
|
||||
}
|
||||
|
||||
/* Interface identifier was not found, return error code */
|
||||
return(SLNETERR_RET_CODE_INVALID_INPUT);
|
||||
}
|
||||
|
||||
|
||||
//*****************************************************************************
|
||||
//
|
||||
// SlNetIf_getPriority - Get interface priority
|
||||
//
|
||||
//*****************************************************************************
|
||||
int32_t SlNetIf_getPriority(uint16_t ifID)
|
||||
{
|
||||
SlNetIf_t *netIf;
|
||||
|
||||
/* Run validity check and find the requested interface */
|
||||
netIf = SlNetIf_getIfByID(ifID);
|
||||
|
||||
/* Check if the requested interface exists or the function returned NULL */
|
||||
if (NULL == netIf)
|
||||
{
|
||||
/* Interface doesn't exists or invalid input, return error code */
|
||||
return SLNETERR_RET_CODE_INVALID_INPUT;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Interface exists, return interface priority */
|
||||
return GET_IF_PRIORITY(*netIf);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//*****************************************************************************
|
||||
//
|
||||
// SlNetIf_setPriority - Set interface priority
|
||||
//
|
||||
//*****************************************************************************
|
||||
int32_t SlNetIf_setPriority(uint16_t ifID, uint8_t priority)
|
||||
{
|
||||
SlNetIf_Node_t *ifListNode = SlNetIf_listHead;
|
||||
SlNetIf_Node_t *prvIfListNode = SlNetIf_listHead;
|
||||
SlNetIf_Node_t *reqIfListNode = NULL;
|
||||
bool connectAgain = false;
|
||||
|
||||
if (priority > SLNETIF_MAX_PRIORITY)
|
||||
{
|
||||
/* Run validity check and find the requested interface */
|
||||
return SLNETERR_RET_CODE_INVALID_INPUT;
|
||||
}
|
||||
|
||||
/* Find the location of required interface */
|
||||
while (NULL != ifListNode)
|
||||
{
|
||||
/* If the location of the required interface found, store the
|
||||
location */
|
||||
if ((ifListNode->netIf.ifID) == ifID)
|
||||
{
|
||||
reqIfListNode = ifListNode;
|
||||
/* Check if the required interface is the last node and needs
|
||||
lower priority than the previous node, only update of the
|
||||
priority is required for this node */
|
||||
if (NULL == ifListNode->next)
|
||||
{
|
||||
if (GET_IF_PRIORITY(prvIfListNode->netIf) >= priority)
|
||||
{
|
||||
/* The required interface is the last node and needs
|
||||
lower priority than the previous node, only update
|
||||
of the priority is required for this node */
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* The required interface is the last node but has
|
||||
higher priority than the previous node, disconnect
|
||||
the interface from the list. connect the previous node
|
||||
to the end of the list
|
||||
If this is not the only node in the list, find where
|
||||
it now belongs based on its new priority. */
|
||||
if (reqIfListNode != SlNetIf_listHead)
|
||||
{
|
||||
prvIfListNode->next = NULL;
|
||||
connectAgain = true;
|
||||
/* This is the end of the list, so stop looping */
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
/* Check if the required interface is the first node in the list */
|
||||
else if (SlNetIf_listHead == ifListNode)
|
||||
{
|
||||
if ( (NULL == ifListNode->next) || ((GET_IF_PRIORITY(ifListNode->next->netIf)) <= priority) )
|
||||
{
|
||||
/* The required interface is the first node and needs
|
||||
higher priority than the following node, only update
|
||||
of the priority is required for this node */
|
||||
break;
|
||||
}
|
||||
/* The required interface is the first node but doesn't need
|
||||
higher priority than the following node so the following
|
||||
node will be the first node of the list */
|
||||
else
|
||||
{
|
||||
SlNetIf_listHead = ifListNode->next;
|
||||
connectAgain = true;
|
||||
}
|
||||
}
|
||||
/* The required interface isn't the first or last node and needs
|
||||
priority change but is in the correct location, only update
|
||||
of the priority is required for this node */
|
||||
else if ( (GET_IF_PRIORITY(prvIfListNode->netIf) >= priority) && ((GET_IF_PRIORITY(ifListNode->next->netIf)) <= priority) )
|
||||
{
|
||||
break;
|
||||
}
|
||||
/* The required interface isn't the first or last node and needs
|
||||
priority change, disconnect it from the list. connect the
|
||||
previous node with the following node */
|
||||
else
|
||||
{
|
||||
prvIfListNode->next = prvIfListNode->next->next;
|
||||
connectAgain = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
prvIfListNode = ifListNode;
|
||||
}
|
||||
ifListNode = ifListNode->next;
|
||||
}
|
||||
|
||||
/* When connectAgain is set, there's a need to find where to add back
|
||||
the required interface according to the priority */
|
||||
if (connectAgain == true)
|
||||
{
|
||||
ifListNode = SlNetIf_listHead;
|
||||
while (NULL != ifListNode)
|
||||
{
|
||||
/* If the incoming priority is higher than any present */
|
||||
if (ifListNode == SlNetIf_listHead)
|
||||
{
|
||||
if ((GET_IF_PRIORITY(ifListNode->netIf)) <= priority)
|
||||
{
|
||||
reqIfListNode->next = ifListNode;
|
||||
SlNetIf_listHead = reqIfListNode;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Check if the priority of the current interface is higher of
|
||||
the required priority, if so, store it as the previous
|
||||
interface and continue to search until finding interface with
|
||||
lower priority and than connect the required interface to the
|
||||
prior interface */
|
||||
if ((GET_IF_PRIORITY(ifListNode->netIf)) > priority)
|
||||
{
|
||||
prvIfListNode = ifListNode;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
reqIfListNode->next = prvIfListNode->next;
|
||||
prvIfListNode->next = reqIfListNode;
|
||||
break;
|
||||
}
|
||||
ifListNode = ifListNode->next;
|
||||
|
||||
if (NULL == ifListNode)
|
||||
{
|
||||
/* All interfaces have higher priorities than reqIfListNode */
|
||||
prvIfListNode->next = reqIfListNode;
|
||||
reqIfListNode->next = NULL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (NULL != reqIfListNode)
|
||||
{
|
||||
/* Interface exists, set the interface priority */
|
||||
RESET_IF_PRIORITY(reqIfListNode->netIf);
|
||||
SET_IF_PRIORITY(reqIfListNode->netIf, priority);
|
||||
}
|
||||
|
||||
return SLNETERR_RET_CODE_OK;
|
||||
}
|
||||
|
||||
|
||||
//*****************************************************************************
|
||||
//
|
||||
// SlNetIf_setState - Set interface state
|
||||
//
|
||||
//*****************************************************************************
|
||||
int32_t SlNetIf_setState(uint16_t ifID, SlNetIfState_e ifState)
|
||||
{
|
||||
SlNetIf_t *netIf;
|
||||
|
||||
/* Run validity check and find the requested interface */
|
||||
netIf = SlNetIf_getIfByID(ifID);
|
||||
|
||||
/* Check if the requested interface exists or the function returned NULL */
|
||||
if (NULL == netIf)
|
||||
{
|
||||
/* Interface doesn't exists or invalid input, return error code */
|
||||
return SLNETERR_RET_CODE_INVALID_INPUT;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Interface exists, set the interface state */
|
||||
if (ifState == SLNETIF_STATE_DISABLE)
|
||||
{
|
||||
/* Interface state - Disable */
|
||||
SET_IF_STATE_DISABLE(*netIf);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Interface state - Enable */
|
||||
SET_IF_STATE_ENABLE(*netIf);
|
||||
}
|
||||
}
|
||||
return SLNETERR_RET_CODE_OK;
|
||||
}
|
||||
|
||||
|
||||
//*****************************************************************************
|
||||
//
|
||||
// SlNetIf_getState - Get interface state
|
||||
//
|
||||
//*****************************************************************************
|
||||
int32_t SlNetIf_getState(uint16_t ifID)
|
||||
{
|
||||
SlNetIf_t *netIf;
|
||||
|
||||
/* Run validity check and find the requested interface */
|
||||
netIf = SlNetIf_getIfByID(ifID);
|
||||
|
||||
/* Check if the requested interface exists or the function returned NULL */
|
||||
if (NULL == netIf)
|
||||
{
|
||||
/* Interface doesn't exists or invalid input, return error code */
|
||||
return SLNETERR_RET_CODE_INVALID_INPUT;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Interface exists, return interface state */
|
||||
return GET_IF_STATE(*netIf);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//*****************************************************************************
|
||||
//
|
||||
// SlNetIf_getIPAddr - Get IP Address of specific interface
|
||||
//
|
||||
//*****************************************************************************
|
||||
int32_t SlNetIf_getIPAddr(uint16_t ifID, SlNetIfAddressType_e addrType, uint16_t *addrConfig, uint32_t *ipAddr)
|
||||
{
|
||||
SlNetIf_t *netIf;
|
||||
int32_t retVal;
|
||||
|
||||
/* Run validity check and find the requested interface */
|
||||
netIf = SlNetIf_getIfByID(ifID);
|
||||
|
||||
/* Check if the requested interface exists or the function returned NULL */
|
||||
if (NULL == netIf)
|
||||
{
|
||||
/* Interface doesn't exists or invalid input, return NULL */
|
||||
return SLNETERR_RET_CODE_INVALID_INPUT;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Interface exists, return interface IP address */
|
||||
retVal = (netIf->ifConf)->ifGetIPAddr(netIf->ifContext, addrType, addrConfig, ipAddr);
|
||||
SLNETIF_NORMALIZE_RET_VAL(retVal,SLNETIF_ERR_IFGETIPADDR_FAILED);
|
||||
|
||||
/* Check retVal for error codes */
|
||||
if (retVal < SLNETERR_RET_CODE_OK)
|
||||
{
|
||||
/* Return retVal, function error */
|
||||
return retVal;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Return success */
|
||||
return SLNETERR_RET_CODE_OK;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//*****************************************************************************
|
||||
//
|
||||
// SlNetIf_getConnectionStatus - Get interface connection status
|
||||
//
|
||||
//*****************************************************************************
|
||||
int32_t SlNetIf_getConnectionStatus(uint16_t ifID)
|
||||
{
|
||||
SlNetIf_t *netIf;
|
||||
int16_t connectionStatus;
|
||||
|
||||
/* Run validity check and find the requested interface */
|
||||
netIf = SlNetIf_getIfByID(ifID);
|
||||
|
||||
/* Check if the requested interface exists or the function returned NULL */
|
||||
if (NULL == netIf)
|
||||
{
|
||||
/* Interface doesn't exists or invalid input, return NULL */
|
||||
return SLNETERR_RET_CODE_INVALID_INPUT;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Interface exists, return interface connection status */
|
||||
connectionStatus = (netIf->ifConf)->ifGetConnectionStatus(netIf->ifContext);
|
||||
|
||||
/* Interface exists, set the interface state */
|
||||
if (connectionStatus == SLNETIF_STATUS_DISCONNECTED)
|
||||
{
|
||||
/* Interface is disconnected */
|
||||
return SLNETIF_STATUS_DISCONNECTED;
|
||||
}
|
||||
else if (connectionStatus > SLNETIF_STATUS_DISCONNECTED)
|
||||
{
|
||||
SLNETIF_NORMALIZE_RET_VAL(connectionStatus,SLNETIF_STATUS_CONNECTED);
|
||||
}
|
||||
else
|
||||
{
|
||||
SLNETIF_NORMALIZE_RET_VAL(connectionStatus,SLNETIF_ERR_IFGETCONNECTIONSTATUS_FAILED);
|
||||
}
|
||||
return connectionStatus;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//*****************************************************************************
|
||||
//
|
||||
// SlNetIf_loadSecObj - Load secured buffer to the network stack
|
||||
//
|
||||
//*****************************************************************************
|
||||
int32_t SlNetIf_loadSecObj(uint16_t objType, char *objName, int16_t objNameLen, uint8_t *objBuff, int16_t objBuffLen, uint32_t ifBitmap)
|
||||
{
|
||||
SlNetIf_t *netIf;
|
||||
int32_t retVal;
|
||||
uint32_t ifIDIndex = 1; /* Set value to highest bit in uint32_t */
|
||||
uint32_t maxIDIndex = (uint32_t)1 << SLNETIF_MAX_IF;
|
||||
|
||||
/* validate params */
|
||||
if ((objName == NULL) || (strlen(objName) != objNameLen) ||
|
||||
((objType != SLNETIF_SEC_OBJ_TYPE_RSA_PRIVATE_KEY) &&
|
||||
(objType != SLNETIF_SEC_OBJ_TYPE_CERTIFICATE) &&
|
||||
(objType != SLNETIF_SEC_OBJ_TYPE_DH_KEY)))
|
||||
{
|
||||
return SLNETERR_RET_CODE_INVALID_INPUT;
|
||||
}
|
||||
|
||||
/* bitmap 0 entered, load sec obj to all available interfaces */
|
||||
if (0 == ifBitmap)
|
||||
{
|
||||
ifBitmap = ~ifBitmap;
|
||||
}
|
||||
|
||||
while ( ifIDIndex < maxIDIndex )
|
||||
{
|
||||
/* Check if ifIDIndex is a required ifID from the ifBitmap */
|
||||
if ( ifIDIndex & ifBitmap )
|
||||
{
|
||||
/* Run validity check and find the requested interface */
|
||||
netIf = SlNetIf_getIfByID(ifIDIndex & ifBitmap);
|
||||
|
||||
/* Check if the requested interface exists or the function
|
||||
returned NULL */
|
||||
if ( (NULL != netIf) && (NULL != (netIf->ifConf)->ifLoadSecObj) )
|
||||
{
|
||||
/* Interface exists, return interface IP address */
|
||||
retVal = (netIf->ifConf)->ifLoadSecObj(netIf->ifContext, objType, objName, objNameLen, objBuff, objBuffLen);
|
||||
SLNETIF_NORMALIZE_RET_VAL(retVal,SLNETIF_ERR_IFLOADSECOBJ_FAILED);
|
||||
|
||||
/* Check retVal for error codes */
|
||||
if (retVal < SLNETERR_RET_CODE_OK)
|
||||
{
|
||||
/* Return retVal, function error */
|
||||
return retVal;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Return success */
|
||||
return SLNETERR_RET_CODE_OK;
|
||||
}
|
||||
}
|
||||
}
|
||||
ifIDIndex <<= 1;
|
||||
}
|
||||
/* Interface doesn't exists or invalid input, return error code */
|
||||
return SLNETERR_RET_CODE_INVALID_INPUT;
|
||||
}
|
|
@ -0,0 +1,630 @@
|
|||
/*
|
||||
* Copyright (c) 2017-2019, Texas Instruments Incorporated
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* * Neither the name of Texas Instruments Incorporated nor the names of
|
||||
* its contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Include files */
|
||||
/*****************************************************************************/
|
||||
|
||||
#ifndef __SL_NET_IF_H__
|
||||
#define __SL_NET_IF_H__
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#include <ti/net/slnetsock.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*!
|
||||
\defgroup SlNetIf SlNetIf group
|
||||
|
||||
\short Controls standard stack/interface options and capabilities
|
||||
|
||||
*/
|
||||
/*!
|
||||
\addtogroup SlNetIf
|
||||
@{
|
||||
*/
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Macro declarations */
|
||||
/*****************************************************************************/
|
||||
|
||||
/* Interface ID bit pool to be used in interface add and in socket creation */
|
||||
#define SLNETIF_ID_1 (1 << 0) /**< Interface ID 1 */
|
||||
#define SLNETIF_ID_2 (1 << 1) /**< Interface ID 2 */
|
||||
#define SLNETIF_ID_3 (1 << 2) /**< Interface ID 3 */
|
||||
#define SLNETIF_ID_4 (1 << 3) /**< Interface ID 4 */
|
||||
#define SLNETIF_ID_5 (1 << 4) /**< Interface ID 5 */
|
||||
#define SLNETIF_ID_6 (1 << 5) /**< Interface ID 6 */
|
||||
#define SLNETIF_ID_7 (1 << 6) /**< Interface ID 7 */
|
||||
#define SLNETIF_ID_8 (1 << 7) /**< Interface ID 8 */
|
||||
#define SLNETIF_ID_9 (1 << 8) /**< Interface ID 9 */
|
||||
#define SLNETIF_ID_10 (1 << 9) /**< Interface ID 10 */
|
||||
#define SLNETIF_ID_11 (1 << 10) /**< Interface ID 11 */
|
||||
#define SLNETIF_ID_12 (1 << 11) /**< Interface ID 12 */
|
||||
#define SLNETIF_ID_13 (1 << 12) /**< Interface ID 13 */
|
||||
#define SLNETIF_ID_14 (1 << 13) /**< Interface ID 14 */
|
||||
#define SLNETIF_ID_15 (1 << 14) /**< Interface ID 15 */
|
||||
#define SLNETIF_ID_16 (1 << 15) /**< Interface ID 16 */
|
||||
|
||||
#define SLNETIF_MAX_IF (16) /**< Maximum interface */
|
||||
|
||||
/* this macro returns 0 when only one bit is set and a number when it isn't */
|
||||
#define ONLY_ONE_BIT_IS_SET(x) (((x > 0) && ((x & (x - 1)) == 0))?true:false)
|
||||
|
||||
|
||||
/* Interface connection status bit pool to be used in set interface connection status function */
|
||||
|
||||
#define SLNETIF_STATUS_DISCONNECTED (0)
|
||||
#define SLNETIF_STATUS_CONNECTED (1)
|
||||
|
||||
/*!
|
||||
\brief Interface state bit pool to be used in set interface state function
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
SLNETIF_STATE_DISABLE = 0,
|
||||
SLNETIF_STATE_ENABLE = 1
|
||||
} SlNetIfState_e;
|
||||
|
||||
/*!
|
||||
\brief Address type enum to be used in get ip address function
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
SLNETIF_IPV4_ADDR = 0,
|
||||
SLNETIF_IPV6_ADDR_LOCAL = 1,
|
||||
SLNETIF_IPV6_ADDR_GLOBAL = 2
|
||||
} SlNetIfAddressType_e;
|
||||
|
||||
/* Address config return values that can be retrieved in get ip address function */
|
||||
#define SLNETIF_ADDR_CFG_UNKNOWN (0)
|
||||
#define SLNETIF_ADDR_CFG_DHCP (1)
|
||||
#define SLNETIF_ADDR_CFG_DHCP_LLA (2)
|
||||
#define SLNETIF_ADDR_CFG_STATIC (4)
|
||||
#define SLNETIF_ADDR_CFG_STATELESS (5)
|
||||
#define SLNETIF_ADDR_CFG_STATEFUL (6)
|
||||
|
||||
/* Security object types for load Sec Obj function */
|
||||
#define SLNETIF_SEC_OBJ_TYPE_RSA_PRIVATE_KEY (1)
|
||||
#define SLNETIF_SEC_OBJ_TYPE_CERTIFICATE (2)
|
||||
#define SLNETIF_SEC_OBJ_TYPE_DH_KEY (3)
|
||||
|
||||
|
||||
/*!
|
||||
Check if interface state is enabled.
|
||||
|
||||
\sa SlNetIf_queryIf()
|
||||
*/
|
||||
#define SLNETIF_QUERY_IF_STATE_BIT (1 << 0)
|
||||
/*!
|
||||
Check if interface connection status is connected.
|
||||
|
||||
\sa SlNetIf_queryIf()
|
||||
*/
|
||||
#define SLNETIF_QUERY_IF_CONNECTION_STATUS_BIT (1 << 1)
|
||||
/*!
|
||||
Enable last partial match in an interface search, if no existing
|
||||
interface matches the query completely.
|
||||
|
||||
\sa SlNetIf_queryIf()
|
||||
*/
|
||||
#define SLNETIF_QUERY_IF_ALLOW_PARTIAL_MATCH_BIT (1 << 2)
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Structure/Enum declarations */
|
||||
/*****************************************************************************/
|
||||
|
||||
/*!
|
||||
\brief SlNetIf_Config_t structure contains all the function callbacks that are expected to be filled by the relevant network stack interface \n
|
||||
Each interface has different capabilities, so not all the API's must be supported therefore an API's can be defined as:
|
||||
- <b>Mandatory API's</b> - must be supported by the interface in order to be part of SlNetSock layer
|
||||
- <b>Non-Mandatory API's</b> - can be supported, but not mandatory for basic SlNetSock proper operation
|
||||
|
||||
\note Interface that is not supporting a non-mandatory API should set it to \b NULL in its function list
|
||||
|
||||
\sa SlNetIf_Config_t
|
||||
*/
|
||||
typedef struct SlNetIf_Config_t
|
||||
{
|
||||
/* socket related API's */
|
||||
int16_t (*sockCreate) (void *ifContext, int16_t domain, int16_t type, int16_t protocol, void **sdContext); /*!< \b Mandatory API \n The actual implementation of the interface for ::SlNetSock_create */
|
||||
int32_t (*sockClose) (int16_t sd, void *sdContext); /*!< \b Mandatory API \n The actual implementation of the interface for ::SlNetSock_close */
|
||||
int32_t (*sockShutdown) (int16_t sd, void *sdContext, int16_t how); /*!< \b Non-Mandatory API \n The actual implementation of the interface for ::SlNetSock_shutdown */
|
||||
int16_t (*sockAccept) (int16_t sd, void *sdContext, SlNetSock_Addr_t *addr, SlNetSocklen_t *addrlen, uint8_t flags, void **acceptedSdContext); /*!< \b Non-Mandatory API \n The actual implementation of the interface for ::SlNetSock_accept */
|
||||
int32_t (*sockBind) (int16_t sd, void *sdContext, const SlNetSock_Addr_t *addr, int16_t addrlen); /*!< \b Non-Mandatory API \n The actual implementation of the interface for ::SlNetSock_bind */
|
||||
int32_t (*sockListen) (int16_t sd, void *sdContext, int16_t backlog); /*!< \b Non-Mandatory API \n The actual implementation of the interface for ::SlNetSock_listen */
|
||||
int32_t (*sockConnect) (int16_t sd, void *sdContext, const SlNetSock_Addr_t *addr, SlNetSocklen_t addrlen, uint8_t flags); /*!< \b Non-Mandatory API \n The actual implementation of the interface for ::SlNetSock_connect */
|
||||
int32_t (*sockGetPeerName) (int16_t sd, void *sdContext, SlNetSock_Addr_t *addr, SlNetSocklen_t *addrlen); /*!< \b Non-Mandatory API \n The actual implementation of the interface for ::SlNetSock_getPeerName */
|
||||
int32_t (*sockGetLocalName) (int16_t sd, void *sdContext, SlNetSock_Addr_t *addr, SlNetSocklen_t *addrlen); /*!< \b Non-Mandatory API \n The actual implementation of the interface for ::SlNetSock_getSockName */
|
||||
int32_t (*sockSelect) (void *ifContext, int16_t nsds, SlNetSock_SdSet_t *readsds, SlNetSock_SdSet_t *writesds, SlNetSock_SdSet_t *exceptsds, SlNetSock_Timeval_t *timeout); /*!< \b Mandatory API \n The actual implementation of the interface for ::SlNetSock_select */
|
||||
int32_t (*sockSetOpt) (int16_t sd, void *sdContext, int16_t level, int16_t optname, void *optval, SlNetSocklen_t optlen); /*!< \b Mandatory API \n The actual implementation of the interface for ::SlNetSock_setOpt */
|
||||
int32_t (*sockGetOpt) (int16_t sd, void *sdContext, int16_t level, int16_t optname, void *optval, SlNetSocklen_t *optlen); /*!< \b Mandatory API \n The actual implementation of the interface for ::SlNetSock_getOpt */
|
||||
int32_t (*sockRecv) (int16_t sd, void *sdContext, void *buf, uint32_t len, uint32_t flags); /*!< \b Non-Mandatory API \n The actual implementation of the interface for ::SlNetSock_recv */
|
||||
int32_t (*sockRecvFrom) (int16_t sd, void *sdContext, void *buf, uint32_t len, uint32_t flags, SlNetSock_Addr_t *from, SlNetSocklen_t *fromlen); /*!< \b Mandatory API \n The actual implementation of the interface for ::SlNetSock_recvFrom */
|
||||
int32_t (*sockSend) (int16_t sd, void *sdContext, const void *buf, uint32_t len, uint32_t flags); /*!< \b Non-Mandatory API \n The actual implementation of the interface for ::SlNetSock_send */
|
||||
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); /*!< \b Mandatory API \n The actual implementation of the interface for ::SlNetSock_sendTo */
|
||||
int32_t (*sockstartSec) (int16_t sd, void *sdContext, SlNetSockSecAttrib_t *secAttrib, uint8_t flags); /*!< \b Non-Mandatory API \n The actual implementation of the interface for ::SlNetSock_startSec */
|
||||
|
||||
/* util related API's */
|
||||
int32_t (*utilGetHostByName) (void *ifContext, char *name, const uint16_t nameLen, uint32_t *ipAddr, uint16_t *ipAddrLen, const uint8_t family); /*!< \b Non-Mandatory API \n The actual implementation of the interface for ::SlNetUtil_getHostByName */
|
||||
|
||||
/* if related API's */
|
||||
int32_t (*ifGetIPAddr) (void *ifContext, SlNetIfAddressType_e addrType, uint16_t *addrConfig, uint32_t *ipAddr); /*!< \b Mandatory API \n The actual implementation of the interface for ::SlNetIf_getIPAddr */
|
||||
int32_t (*ifGetConnectionStatus) (void *ifContext); /*!< \b Mandatory API \n The actual implementation of the interface for ::SlNetIf_getConnectionStatus */
|
||||
int32_t (*ifLoadSecObj) (void *ifContext, uint16_t objType, char *objName, int16_t objNameLen, uint8_t *objBuff, int16_t objBuffLen); /*!< \b Non-Mandatory API \n The actual implementation of the interface for ::SlNetIf_loadSecObj */
|
||||
int32_t (*ifCreateContext) (uint16_t ifID, const char *ifName, void **ifContext); /*!< \b Non-Mandatory API \n The actual implementation of the interface for ::SlNetIf_add */
|
||||
|
||||
} SlNetIf_Config_t;
|
||||
|
||||
|
||||
/*!
|
||||
\brief The SlNetIf_t structure holds the configuration of the interface
|
||||
Its ID, name, flags and the configuration list - ::SlNetIf_Config_t.
|
||||
*/
|
||||
typedef struct SlNetIf_t
|
||||
{
|
||||
uint32_t ifID;
|
||||
char *ifName;
|
||||
int32_t flags;
|
||||
SlNetIf_Config_t *ifConf;
|
||||
void *ifContext;
|
||||
} SlNetIf_t;
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Function prototypes */
|
||||
/*****************************************************************************/
|
||||
|
||||
/*!
|
||||
|
||||
\brief Initialize the SlNetIf module
|
||||
|
||||
\param[in] flags For future usage,
|
||||
The value 0 may be used in order to run the
|
||||
default flags
|
||||
|
||||
\return Zero on success, or negative error code on failure
|
||||
|
||||
\par Examples
|
||||
\snippet ti/net/test/snippets/slnetif.c SlNetIf_init snippet
|
||||
*/
|
||||
int32_t SlNetIf_init(int32_t flags);
|
||||
|
||||
/*!
|
||||
\brief Add a new SlNetIf-compatible interface to the system
|
||||
|
||||
The SlNetIf_add function allows the application to add specific interfaces
|
||||
with their priorities and function list.\n
|
||||
This function gives full control to the application on the interfaces.
|
||||
|
||||
\param[in] ifID Specifies the interface which needs
|
||||
to be added.\n
|
||||
The values of the interface identifier
|
||||
is defined with the prefix SLNETIF_ID_
|
||||
which defined in slnetif.h
|
||||
\param[in] ifName Specifies the name of the interface,
|
||||
\b Note: Can be set to NULL, but when set to NULL
|
||||
cannot be used with SlNetIf_getIDByName()
|
||||
\param[in] ifConf Specifies the function list for the
|
||||
interface
|
||||
\param[in] priority Specifies the priority of the interface
|
||||
(In ascending order).
|
||||
Note: maximum priority is 15
|
||||
|
||||
\return Zero on success, or negative error code on failure
|
||||
|
||||
\slnetif_not_threadsafe
|
||||
|
||||
\par Examples
|
||||
\snippet ti/net/test/snippets/slnetif.c SlNetIf_add wifi snippet
|
||||
\snippet ti/net/test/snippets/slnetif.c SlNetIf_add NDK snippet
|
||||
\snippet ti/net/test/snippets/slnetif.c SlNetIf_add NDKSec snippet
|
||||
*/
|
||||
int32_t SlNetIf_add(uint16_t ifID, char *ifName, const SlNetIf_Config_t *ifConf, uint8_t priority);
|
||||
|
||||
|
||||
/*!
|
||||
\brief Get interface configuration from interface ID
|
||||
|
||||
The SlNetIf_getIfByID function retrieves the configuration of the
|
||||
requested interface.
|
||||
|
||||
\param[in] ifID Specifies the interface which its configuration
|
||||
needs to be retrieved.\n
|
||||
The values of the interface identifier is
|
||||
defined with the prefix SLNETIF_ID_ which
|
||||
defined in slnetif.h
|
||||
|
||||
\return A pointer to the configuration of the
|
||||
interface on success, or NULL on failure
|
||||
|
||||
\sa SlNetIf_add()
|
||||
|
||||
\slnetif_not_threadsafe
|
||||
|
||||
\par Examples
|
||||
\snippet ti/net/test/snippets/slnetif.c SlNetIf_getIfByID snippet
|
||||
*/
|
||||
SlNetIf_t * SlNetIf_getIfByID(uint16_t ifID);
|
||||
|
||||
|
||||
/*!
|
||||
\brief Query for the highest priority interface, given a list of
|
||||
interfaces and properties.
|
||||
|
||||
\param[in] ifBitmap The bit-wise OR of interfaces to be searched.\n
|
||||
Note: Zero is currently not valid.
|
||||
\param[in] queryBitmap The bit-wise OR of additional query criteria.
|
||||
|
||||
\remarks @c queryBitmap can be set to :
|
||||
- #SLNETIF_QUERY_IF_STATE_BIT
|
||||
- #SLNETIF_QUERY_IF_CONNECTION_STATUS_BIT
|
||||
- #SLNETIF_QUERY_IF_ALLOW_PARTIAL_MATCH_BIT
|
||||
|
||||
\return A pointer to the configuration of a found
|
||||
interface on success, or NULL on failure
|
||||
|
||||
\sa SlNetIf_add()
|
||||
\slnetif_not_threadsafe
|
||||
|
||||
\par Examples
|
||||
\snippet ti/net/test/snippets/slnetif.c SlNetIf_queryIf snippet
|
||||
*/
|
||||
SlNetIf_t * SlNetIf_queryIf(uint32_t ifBitmap, uint32_t queryBitmap);
|
||||
|
||||
|
||||
/*!
|
||||
\brief Get interface Name from interface ID
|
||||
|
||||
The SlNetIf_getNameByID function retrieves the name of the requested
|
||||
interface.
|
||||
|
||||
\param[in] ifID Specifies the interface which its name needs
|
||||
to be retrieved.\n
|
||||
The values of the interface identifier is
|
||||
defined with the prefix SLNETIF_ID_ which
|
||||
defined in slnetif.h
|
||||
|
||||
\return A pointer to the name of the interface on
|
||||
success, or NULL on failure
|
||||
|
||||
\sa SlNetIf_add()
|
||||
\sa SlNetIf_getIDByName()
|
||||
|
||||
\slnetif_not_threadsafe
|
||||
|
||||
\par Examples
|
||||
\snippet ti/net/test/snippets/slnetif.c SlNetIf_getNameByID snippet
|
||||
*/
|
||||
const char * SlNetIf_getNameByID(uint16_t ifID);
|
||||
|
||||
|
||||
/*!
|
||||
\brief Get interface ID from interface name
|
||||
|
||||
The SlNetIf_getIDByName function retrieves the interface identifier of the
|
||||
requested interface name.
|
||||
|
||||
\param[in] ifName Specifies the interface which its interface
|
||||
identifier needs to be retrieved.\n
|
||||
|
||||
\return The interface identifier value of the interface
|
||||
on success, or negative error code on failure
|
||||
The values of the interface identifier is
|
||||
defined with the prefix SLNETIF_ID_ which
|
||||
defined in slnetif.h
|
||||
|
||||
\sa SlNetIf_add()
|
||||
\sa SlNetIf_getNameByID()
|
||||
\sa SlNetSock_getIfID()
|
||||
|
||||
\note - Input NULL as ifName will return error code.
|
||||
- When using more than one interface with the same
|
||||
name, the ID of the highest priority interface
|
||||
will be returned
|
||||
\slnetif_not_threadsafe
|
||||
|
||||
\par Examples
|
||||
\snippet ti/net/test/snippets/slnetif.c SlNetIf_getIDByName snippet
|
||||
*/
|
||||
int32_t SlNetIf_getIDByName(char *ifName);
|
||||
|
||||
|
||||
/*!
|
||||
\brief Get interface priority
|
||||
|
||||
The SlNetIf_getPriority function retrieves the priority of the
|
||||
interface.
|
||||
|
||||
\param[in] ifID Specifies the interface which its priority
|
||||
needs to be retrieved.\n
|
||||
The values of the interface identifier is
|
||||
defined with the prefix SLNETIF_ID_ which
|
||||
defined in slnetif.h
|
||||
|
||||
\return The priority value of the interface on success,
|
||||
or negative error code on failure
|
||||
|
||||
\sa SlNetIf_add()
|
||||
\sa SlNetIf_setPriority()
|
||||
|
||||
\slnetif_not_threadsafe
|
||||
|
||||
\par Examples
|
||||
\snippet ti/net/test/snippets/slnetif.c SlNetIf_getPriority snippet
|
||||
*/
|
||||
int32_t SlNetIf_getPriority(uint16_t ifID);
|
||||
|
||||
|
||||
/*!
|
||||
\brief Set interface priority
|
||||
|
||||
The SlNetIf_setPriority function sets new priority to the requested interface.
|
||||
|
||||
\param[in] ifID Specifies the interface which its priority
|
||||
needs to be changed.\n
|
||||
The values of the interface identifier is
|
||||
defined with the prefix SLNETIF_ID_ which
|
||||
defined in slnetif.h
|
||||
\param[in] priority Specifies the priority needs to be set.
|
||||
(In ascending order)
|
||||
Note: maximum priority is 15
|
||||
|
||||
\return Zero on success, or negative error code on
|
||||
failure
|
||||
|
||||
\sa SlNetIf_add()
|
||||
\sa SlNetIf_getPriority()
|
||||
|
||||
\slnetif_not_threadsafe
|
||||
|
||||
\par Examples
|
||||
\snippet ti/net/test/snippets/slnetif.c SlNetIf_setPriority snippet
|
||||
*/
|
||||
int32_t SlNetIf_setPriority(uint16_t ifID, uint8_t priority);
|
||||
|
||||
|
||||
/*!
|
||||
\brief Set interface state
|
||||
|
||||
Enable or disable the interface.
|
||||
|
||||
\param[in] ifID Specifies the interface which its state
|
||||
needs to be changed.\n
|
||||
The values of the interface identifier is
|
||||
defined with the prefix SLNETIF_ID_ which
|
||||
defined in slnetif.h
|
||||
\param[in] ifState Specifies the interface state.\n
|
||||
The values of the interface state are defined
|
||||
with the prefix SLNETIF_INTERFACE_ which
|
||||
defined in slnetif.h
|
||||
|
||||
\return Zero on success, or negative error code on
|
||||
failure
|
||||
|
||||
\sa SlNetIf_add()
|
||||
\sa SlNetIf_getState()
|
||||
|
||||
\slnetif_not_threadsafe
|
||||
|
||||
\par Examples
|
||||
\snippet ti/net/test/snippets/slnetif.c SlNetIf_setState snippet
|
||||
*/
|
||||
int32_t SlNetIf_setState(uint16_t ifID, SlNetIfState_e ifState);
|
||||
|
||||
|
||||
/*!
|
||||
\brief Get interface state
|
||||
|
||||
Obtain the current state of the interface.
|
||||
|
||||
\param[in] ifID Specifies the interface which its state needs
|
||||
to be retrieved.\n
|
||||
The values of the interface identifier is
|
||||
defined with the prefix SLNETIF_ID_ which
|
||||
defined in slnetif.h
|
||||
|
||||
\return State of the interface on success, or negative
|
||||
error code on failure
|
||||
|
||||
\sa SlNetIf_add()
|
||||
\sa SlNetIf_setState()
|
||||
|
||||
\slnetif_not_threadsafe
|
||||
|
||||
\par Examples
|
||||
\snippet ti/net/test/snippets/slnetif.c SlNetIf_getState snippet
|
||||
*/
|
||||
int32_t SlNetIf_getState(uint16_t ifID);
|
||||
|
||||
|
||||
/*!
|
||||
\brief Get the connection status of an interface
|
||||
|
||||
\param[in] ifID Interface ID
|
||||
|
||||
\return @c SLNETIF_STATUS_ value on success,
|
||||
or negative error code on failure
|
||||
|
||||
\remark @c ifID should be a value with the @c SLNETIF_ID_
|
||||
prefix
|
||||
|
||||
\sa SlNetIf_add()
|
||||
\sa SLNETIF_STATUS_CONNECTED
|
||||
\sa SLNETIF_STATUS_DISCONNECTED
|
||||
|
||||
\slnetif_not_threadsafe
|
||||
|
||||
\par Examples
|
||||
\snippet ti/net/test/snippets/slnetif.c SlNetIf_getConnectionStatus snippet
|
||||
*/
|
||||
int32_t SlNetIf_getConnectionStatus(uint16_t ifID);
|
||||
|
||||
|
||||
/*!
|
||||
\brief Get IP Address of specific interface
|
||||
|
||||
The SlNetIf_getIPAddr function retrieve the IP address of a specific
|
||||
interface according to the Address Type, IPv4, IPv6 LOCAL
|
||||
or IPv6 GLOBAL.
|
||||
|
||||
\param[in] ifID Specifies the interface which its connection
|
||||
state needs to be retrieved.\n
|
||||
The values of the interface identifier is
|
||||
defined with the prefix SLNETIF_ID_ which
|
||||
defined in slnetif.h
|
||||
\param[in] addrType Address type:
|
||||
- #SLNETIF_IPV4_ADDR
|
||||
- #SLNETIF_IPV6_ADDR_LOCAL
|
||||
- #SLNETIF_IPV6_ADDR_GLOBAL
|
||||
\param[out] addrConfig Address config:
|
||||
- #SLNETIF_ADDR_CFG_UNKNOWN
|
||||
- #SLNETIF_ADDR_CFG_DHCP
|
||||
- #SLNETIF_ADDR_CFG_DHCP_LLA
|
||||
- #SLNETIF_ADDR_CFG_STATIC
|
||||
- #SLNETIF_ADDR_CFG_STATELESS
|
||||
- #SLNETIF_ADDR_CFG_STATEFUL
|
||||
\param[out] ipAddr IP Address according to the Address Type
|
||||
|
||||
\return Zero on success, or negative error code on failure
|
||||
|
||||
\sa SlNetIfAddressType_e
|
||||
|
||||
\slnetif_not_threadsafe
|
||||
|
||||
\par Examples
|
||||
\snippet ti/net/test/snippets/slnetif.c SlNetIf_getIPAddr snippet
|
||||
*/
|
||||
int32_t SlNetIf_getIPAddr(uint16_t ifID, SlNetIfAddressType_e addrType, uint16_t *addrConfig, uint32_t *ipAddr);
|
||||
|
||||
|
||||
/*!
|
||||
\brief Load/unload/replace a secure object into a network interface/stack
|
||||
|
||||
SlNetIf_loadSecObj() loads a named secure object into specific
|
||||
network stack for future use by secure sockets. To unload the
|
||||
named secure object, pass a NULL object buffer with the
|
||||
appropriate name.
|
||||
|
||||
\param[in] objType The secure object type:
|
||||
- #SLNETIF_SEC_OBJ_TYPE_RSA_PRIVATE_KEY
|
||||
- #SLNETIF_SEC_OBJ_TYPE_CERTIFICATE
|
||||
- #SLNETIF_SEC_OBJ_TYPE_DH_KEY
|
||||
\param[in] objName The secure object name
|
||||
\param[in] objNameLen The secure object name length
|
||||
\param[in] objBuff The secure object buffer to be loaded, or
|
||||
NULL if the named object is to be unloaded
|
||||
\param[in] objBuffLen The secure object buffer length
|
||||
\param[in] ifBitmap The interfaces which the secure
|
||||
objects should be loaded to
|
||||
|
||||
\remark Loaded secure objects are added to secure attributes using
|
||||
the SlNetSock_secAttribCreate(),
|
||||
SlNetSock_secAttribSet(), and
|
||||
SlNetSock_secAttribDelete() lifecycle APIs. The
|
||||
loading/unloading of secure objects (via
|
||||
SlNetIf_loadSecObj()) must be done while the secure
|
||||
object is not associated with any existing secure
|
||||
attributes. Restating, you must delete any existing
|
||||
secure attributes before changing any secure objects
|
||||
associated with them.
|
||||
|
||||
\remark The values of @c ifBitmap typically have the prefix
|
||||
@c SLNETIF_ID_.
|
||||
|
||||
\remark SlNetIf_loadSecObj() internally validates the @c objName,
|
||||
@c objNameLen, and @c objType arguments, so the
|
||||
underlying interface/stack functions do not need to
|
||||
check them again.
|
||||
|
||||
\remark For stacks that use file systems (e.g. CC3XXX), @c objName
|
||||
will be the file name used on the file system.
|
||||
|
||||
\remark Note that ownership of @c objBuff after returning from
|
||||
SlNetIf_loadSecObj() varies by stack/interface, often
|
||||
depending on how the underlying stack implements it's
|
||||
TLS support.
|
||||
- On CC3XXX-based stacks, the TLS support is managed
|
||||
on a separate network processor, and loading a
|
||||
secure object results in persisting the secure
|
||||
object to a file system. As a result, after
|
||||
successfully calling SlNetIf_loadSecObj(), the @c
|
||||
objBuff is no longer needed, and can be considered
|
||||
"owned" by the application.
|
||||
|
||||
- On NDK-based stacks, the TLS support is typically
|
||||
managed by a software library like mbedTLS. As a
|
||||
result, only a reference to @c objBuff is made
|
||||
within the SlNetIf_loadSecObj() call, and the
|
||||
buffer must persist as long as the secure object
|
||||
remains loaded. Ownership of the buffer returns
|
||||
to the user only after unloading the secure
|
||||
object (or resetting the device).
|
||||
|
||||
\remark To replace an existing named secure object with another
|
||||
secure object of the same name, call
|
||||
SlNetIf_loadSecObj() with the same @c objName.
|
||||
Resources associated with the previously loaded secure
|
||||
object will be released and replaced by the new secure
|
||||
object.
|
||||
|
||||
\remark When unloading a named secure object, @c objBuffLen is
|
||||
ignored.
|
||||
|
||||
\return 0 on success, negative on failure. Common errors include:
|
||||
- #SLNETERR_RET_CODE_INVALID_INPUT
|
||||
- #SLNETERR_RET_CODE_NO_FREE_SPACE
|
||||
- #SLNETERR_RET_CODE_MALLOC_ERROR
|
||||
|
||||
\sa SlNetSock_setOpt()
|
||||
\sa SlNetSock_secAttribSet()
|
||||
|
||||
\slnetif_not_threadsafe
|
||||
|
||||
*/
|
||||
int32_t SlNetIf_loadSecObj(uint16_t objType, char *objName, int16_t objNameLen, uint8_t *objBuff, int16_t objBuffLen, uint32_t ifBitmap);
|
||||
|
||||
/*!
|
||||
|
||||
Close the Doxygen group.
|
||||
@}
|
||||
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* __SL_NET_IF_H__ */
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,428 @@
|
|||
/*
|
||||
* Copyright (c) 2017-2019, Texas Instruments Incorporated
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* * Neither the name of Texas Instruments Incorporated nor the names of
|
||||
* its contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Include files */
|
||||
/*****************************************************************************/
|
||||
|
||||
#ifndef __SL_NET_UTILS_H__
|
||||
#define __SL_NET_UTILS_H__
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
#include "slnetsock.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*!
|
||||
\defgroup SlNetUtils SlNetUtils group
|
||||
|
||||
\short Sockets related commands and configuration
|
||||
|
||||
*/
|
||||
/*!
|
||||
|
||||
\addtogroup SlNetUtils
|
||||
@{
|
||||
|
||||
*/
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Macro declarations */
|
||||
/*****************************************************************************/
|
||||
#define SLNETUTIL_AI_PASSIVE 0x00000001
|
||||
#define SLNETUTIL_AI_NUMERICHOST 0x00000004
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Structure/Enum declarations */
|
||||
/*****************************************************************************/
|
||||
|
||||
typedef struct SlNetUtil_addrInfo_t {
|
||||
int ai_flags;
|
||||
int ai_family;
|
||||
int ai_socktype;
|
||||
int ai_protocol;
|
||||
size_t ai_addrlen;
|
||||
struct SlNetSock_Addr_t *ai_addr;
|
||||
char *ai_canonname;
|
||||
struct SlNetUtil_addrInfo_t *ai_next;
|
||||
} SlNetUtil_addrInfo_t;
|
||||
|
||||
/* Creating one address parameter from 4 separate address parameters */
|
||||
#define SLNETUTIL_IPV4_VAL(add_3,add_2,add_1,add_0) ((((uint32_t)add_3 << 24) & 0xFF000000) | (((uint32_t)add_2 << 16) & 0xFF0000) | (((uint32_t)add_1 << 8) & 0xFF00) | ((uint32_t)add_0 & 0xFF) )
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Function prototypes */
|
||||
/*****************************************************************************/
|
||||
|
||||
/*!
|
||||
|
||||
\brief Initialize the SlNetUtil module
|
||||
|
||||
\param[in] flags Reserved
|
||||
|
||||
\return Zero on success, or negative error code on failure
|
||||
*/
|
||||
int32_t SlNetUtil_init(int32_t flags);
|
||||
|
||||
/*!
|
||||
\brief Return text descriptions of getAddrInfo error codes
|
||||
|
||||
\param[in] errorCode A getAddrInfo error code
|
||||
|
||||
\return Text description of the passed in getAddrInfo error code.
|
||||
If the error code does not exist returns "Unknown Error"
|
||||
*/
|
||||
const char *SlNetUtil_gaiStrErr(int32_t errorCode);
|
||||
|
||||
/*!
|
||||
\brief Get host IP by name\n
|
||||
Obtain the IP Address of machine on network, by machine name.
|
||||
|
||||
\param[in] ifBitmap Specifies the interfaces which the host ip
|
||||
needs to be retrieved from according to the
|
||||
priority until one of them will return an answer.\n
|
||||
Value 0 is used in order to choose automatic
|
||||
interfaces selection according to the priority
|
||||
interface list.
|
||||
Value can be combination of interfaces by OR'ing
|
||||
multiple interfaces bit identifiers (SLNETIFC_IDENT_
|
||||
defined in slnetif.h)
|
||||
Note: interface identifier bit must be configured
|
||||
prior to this socket creation using SlNetIf_add().
|
||||
\param[in] name Host name
|
||||
\param[in] nameLen Name length
|
||||
\param[out] ipAddr A buffer used to store the IP address(es) from
|
||||
the resulting DNS resolution. The caller is
|
||||
responsible for allocating this buffer. Upon
|
||||
return, this buffer can be accessed as an array
|
||||
of IPv4 or IPv6 addresses, depending on the
|
||||
protocol passed in for the family parameter.
|
||||
Addresses are stored in host byte order.
|
||||
\param[in,out] ipAddrLen Initially holds the number of IP addresses
|
||||
that the ipAddr buffer parameter is capable of
|
||||
storing. Upon successful return, the ipAddrLen
|
||||
parameter contains the number of IP addresses
|
||||
that were actually written into the ipAddr
|
||||
buffer, as a result of successful DNS
|
||||
resolution, or zero if DNS resolution failed.
|
||||
\param[in] family Protocol family
|
||||
|
||||
\return The interface ID of the interface which was
|
||||
able to successfully run the function, or
|
||||
negative on failure.\n
|
||||
#SLNETERR_POOL_IS_EMPTY may be return in case
|
||||
there are no resources in the system\n
|
||||
Possible DNS error codes:
|
||||
- #SLNETERR_NET_APP_DNS_QUERY_NO_RESPONSE
|
||||
- #SLNETERR_NET_APP_DNS_NO_SERVER
|
||||
- #SLNETERR_NET_APP_DNS_QUERY_FAILED
|
||||
- #SLNETERR_NET_APP_DNS_MALFORMED_PACKET
|
||||
- #SLNETERR_NET_APP_DNS_MISMATCHED_RESPONSE
|
||||
|
||||
\slnetutil_init_precondition
|
||||
|
||||
\warning
|
||||
In case an IP address in a string format is set as input, without
|
||||
any prefix (e.g. "1.2.3.4") the device will not try to access the
|
||||
DNS and it will return the input address in the \c ipAddr field
|
||||
\par Example
|
||||
- Getting IPv4 using get host by name:
|
||||
\code
|
||||
// A buffer capable of storing a single 32-bit IPv4 address
|
||||
uint32_t DestIP[1];
|
||||
|
||||
// The number of IP addresses that DestIP can hold
|
||||
uint16_t DestIPListSize = 1;
|
||||
|
||||
int32_t ifID;
|
||||
int16_t SockId;
|
||||
SlNetSock_AddrIn_t LocalAddr; //address of the server to connect to
|
||||
int32_t LocalAddrSize;
|
||||
|
||||
ifID = SlNetUtil_getHostByName(0, "www.ti.com", strlen("www.ti.com"), DestIP, &DestIPListSize, SLNETSOCK_PF_INET);
|
||||
|
||||
LocalAddr.sin_family = SLNETSOCK_AF_INET;
|
||||
LocalAddr.sin_addr.s_addr = SlNetUtil_htonl(DestIP[0]);
|
||||
LocalAddr.sin_port = SlNetUtil_htons(80);
|
||||
LocalAddrSize = sizeof(SlNetSock_AddrIn_t);
|
||||
|
||||
SockId = SlNetSock_create(SLNETSOCK_AF_INET, SLNETSOCK_SOCK_STREAM, ifID, 0);
|
||||
|
||||
if (SockId >= 0)
|
||||
{
|
||||
status = SlNetSock_connect(SockId, (SlNetSock_Addr_t *)&LocalAddr, LocalAddrSize);
|
||||
}
|
||||
\endcode
|
||||
*/
|
||||
int32_t SlNetUtil_getHostByName(uint32_t ifBitmap, char *name, const uint16_t nameLen, uint32_t *ipAddr, uint16_t *ipAddrLen, const uint8_t family);
|
||||
|
||||
|
||||
/*!
|
||||
\brief Network address and service translation
|
||||
|
||||
Create an IPv4 or IPv6 socket address structure, to be used with bind()
|
||||
and/or connect() to create a client or server socket
|
||||
|
||||
This is a "minimal" version for support on embedded devices. Supports a
|
||||
host name or an IPv4 or IPv6 address string passed in via the 'node'
|
||||
parameter for creating a client socket. A value of NULL should be passed
|
||||
for 'node' with AI_PASSIVE flag set to create a (non-loopback) server
|
||||
socket.
|
||||
|
||||
The caller is responsible for freeing the allocated results by calling
|
||||
SlNetUtil_freeAddrInfo().
|
||||
|
||||
\param[in] ifID Specifies the interface which needs
|
||||
to used for socket operations.\n
|
||||
The values of the interface identifier
|
||||
is defined with the prefix SLNETIF_ID_
|
||||
which defined in slnetif.h
|
||||
|
||||
\param[in] node An IP address or a host name.
|
||||
|
||||
\param[in] service The port number of the service to bind or connect to.
|
||||
|
||||
\param[in] hints An SlNetUtil_addrInfo_t struct used to filter the
|
||||
results returned.
|
||||
|
||||
\param[out] res one or more SlNetUtil_addrInfo_t structs, each of which
|
||||
can be used to bind or connect a socket.
|
||||
|
||||
\return Returns 0 on success, or an error code on failure.
|
||||
|
||||
\sa SlNetUtil_freeAddrInfo()
|
||||
*/
|
||||
int32_t SlNetUtil_getAddrInfo(uint16_t ifID, const char *node,
|
||||
const char *service, const struct SlNetUtil_addrInfo_t *hints,
|
||||
struct SlNetUtil_addrInfo_t **res);
|
||||
|
||||
/*!
|
||||
\brief Free the results returned from SlNetUtil_getAddrInfo
|
||||
|
||||
Free the chain of SlNetUtil_addrInfo_t structs allocated and returned by
|
||||
SlNetUtil_getAddrInfo
|
||||
|
||||
\param[in] res linked list of results returned from SlNetUtil_getAddrInfo
|
||||
|
||||
\return None.
|
||||
|
||||
\sa SlNetUtil_getAddrInfo()
|
||||
*/
|
||||
void SlNetUtil_freeAddrInfo(struct SlNetUtil_addrInfo_t *res);
|
||||
|
||||
/*!
|
||||
\brief Reorder the bytes of a 32-bit unsigned value
|
||||
|
||||
This function is used to reorder the bytes of a 32-bit unsigned value
|
||||
from host order to network order.
|
||||
|
||||
\param[in] val Variable in host order
|
||||
|
||||
\return Return the variable in network order
|
||||
|
||||
\slnetutil_init_precondition
|
||||
|
||||
\sa SlNetSock_bind()
|
||||
\sa SlNetSock_connect()
|
||||
\sa SlNetSock_recvFrom()
|
||||
\sa SlNetSock_accept()
|
||||
*/
|
||||
uint32_t SlNetUtil_htonl(uint32_t val);
|
||||
|
||||
|
||||
/*!
|
||||
\brief Reorder the bytes of a 32-bit unsigned value
|
||||
|
||||
This function is used to reorder the bytes of a 32-bit unsigned
|
||||
value from network order to host order.
|
||||
|
||||
\param[in] val Variable in network order
|
||||
|
||||
\return Return the variable in host order
|
||||
|
||||
\slnetutil_init_precondition
|
||||
|
||||
\sa SlNetSock_bind()
|
||||
\sa SlNetSock_connect()
|
||||
\sa SlNetSock_recvFrom()
|
||||
\sa SlNetSock_accept()
|
||||
*/
|
||||
uint32_t SlNetUtil_ntohl(uint32_t val);
|
||||
|
||||
|
||||
/*!
|
||||
\brief Reorder the bytes of a 16-bit unsigned value
|
||||
|
||||
This functions is used to reorder the bytes of a 16-bit unsigned
|
||||
value from host order to network order.
|
||||
|
||||
\param[in] val Variable in host order
|
||||
|
||||
\return Return the variable in network order
|
||||
|
||||
\slnetutil_init_precondition
|
||||
|
||||
\sa SlNetSock_bind()
|
||||
\sa SlNetSock_connect()
|
||||
\sa SlNetSock_recvFrom()
|
||||
\sa SlNetSock_accept()
|
||||
*/
|
||||
uint16_t SlNetUtil_htons(uint16_t val);
|
||||
|
||||
|
||||
/*!
|
||||
\brief Reorder the bytes of a 16-bit unsigned value
|
||||
|
||||
This functions is used to reorder the bytes of a 16-bit unsigned value
|
||||
from network order to host order.
|
||||
|
||||
\param[in] val Variable in network order
|
||||
|
||||
\return Return the variable in host order
|
||||
|
||||
\slnetutil_init_precondition
|
||||
|
||||
\sa SlNetSock_bind()
|
||||
\sa SlNetSock_connect()
|
||||
\sa SlNetSock_recvFrom()
|
||||
\sa SlNetSock_accept()
|
||||
*/
|
||||
uint16_t SlNetUtil_ntohs(uint16_t val);
|
||||
|
||||
/*!
|
||||
\brief Convert an IPv4 address in string format to binary format
|
||||
|
||||
This function converts an IPv4 address stored as a character string to a
|
||||
32-bit binary value in network byte order. Note that a leading zero or a
|
||||
"0x" in the address string are interpreted as octal or hexadecimal,
|
||||
respectively. The function stores the IPv4 address in the address structure
|
||||
pointed to by the addr parameter.
|
||||
|
||||
\param[in] str IPv4 address string in dotted decimal format
|
||||
|
||||
\param[out] addr pointer to an IPv4 address structure. The converted binary
|
||||
address is stored in this structure upon return (in network byte order)
|
||||
|
||||
\return returns nonzero if the address string is valid, zero if not
|
||||
*/
|
||||
int SlNetUtil_inetAton(const char *str, struct SlNetSock_InAddr_t *addr);
|
||||
|
||||
/*!
|
||||
\brief Converts IP address in binary representation to string representation
|
||||
|
||||
This functions is used to converts IP address in binary representation
|
||||
to IP address in string representation.
|
||||
|
||||
\param[in] addrFamily Specifies the address family of the created
|
||||
socket
|
||||
For example:
|
||||
- #SLNETSOCK_AF_INET for network address IPv4
|
||||
- #SLNETSOCK_AF_INET6 for network address IPv6
|
||||
\param[in] binaryAddr Pointer to an IP address structure indicating the
|
||||
address in binary representation. The address
|
||||
is assumed to be in network-byte order
|
||||
\param[out] strAddr Pointer to the address string representation
|
||||
for IPv4 or IPv6 according to the address
|
||||
family
|
||||
\param[in] strAddrLen Specifies the length of the StrAddress_dst,
|
||||
the maximum length of the address in string
|
||||
representation for IPv4 or IPv6 according to
|
||||
the address family
|
||||
|
||||
\return strAddr on success, or NULL on failure
|
||||
|
||||
\slnetutil_init_precondition
|
||||
|
||||
\par Example
|
||||
- IPv4 demo of inet_ntop()
|
||||
\code
|
||||
SlNetSock_AddrIn_t sa;
|
||||
char str[SLNETSOCK_INET_ADDRSTRLEN];
|
||||
|
||||
// store this IP address in sa:
|
||||
SlNetUtil_inetPton(SLNETSOCK_AF_INET, "192.0.2.33", &(sa.sin_addr));
|
||||
// now get it back and print it
|
||||
SlNetUtil_inetNtop(SLNETSOCK_AF_INET, &(sa.sin_addr), str, SLNETSOCK_INET_ADDRSTRLEN);
|
||||
\endcode
|
||||
*/
|
||||
const char *SlNetUtil_inetNtop(int16_t addrFamily, const void *binaryAddr, char *strAddr, SlNetSocklen_t strAddrLen);
|
||||
|
||||
|
||||
/*!
|
||||
\brief Converts IP address in string representation to binary representation
|
||||
|
||||
This functions is used to converts IP address in string representation
|
||||
to IP address in binary representation.
|
||||
|
||||
\param[in] addrFamily Specifies the address family of the created
|
||||
socket
|
||||
For example:
|
||||
- #SLNETSOCK_AF_INET for network address IPv4
|
||||
- #SLNETSOCK_AF_INET6 for network address IPv6
|
||||
\param[in] strAddr Specifies the IP address in string representation
|
||||
for IPv4 or IPv6 according to the address family
|
||||
\param[out] binaryAddr Pointer to an address structure that will be
|
||||
filled by the IP address in Binary representation.
|
||||
The address is returned in network-byte order
|
||||
|
||||
\return 1 on success, -1 on failure, or 0 if the input
|
||||
isn't a valid IP address
|
||||
|
||||
\slnetutil_init_precondition
|
||||
|
||||
\par Example
|
||||
- IPv6 demo of inet_pton()
|
||||
\code
|
||||
SlNetSock_AddrIn6_t sa;
|
||||
|
||||
// store this IP address in sa:
|
||||
SlNetUtil_inetPton(SLNETSOCK_AF_INET6, "0:0:0:0:0:0:0:0", &(sa.sin6_addr));
|
||||
\endcode
|
||||
*/
|
||||
int32_t SlNetUtil_inetPton(int16_t addrFamily, const char *strAddr, void *binaryAddr);
|
||||
|
||||
/*!
|
||||
|
||||
Close the Doxygen group.
|
||||
@}
|
||||
|
||||
*/
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* __SL_NET_UTILS_H__ */
|
Loading…
Reference in New Issue