doubao_chat/include_lib/net/uC-HTTPc/include/net_sock.h

1783 lines
86 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
*********************************************************************************************************
* uC/TCP-IP
* The Embedded TCP/IP Suite
*
* Copyright 2004-2020 Silicon Laboratories Inc. www.silabs.com
*
* SPDX-License-Identifier: APACHE-2.0
*
* This software is subject to an open source license and is distributed by
* Silicon Laboratories Inc. pursuant to the terms of the Apache License,
* Version 2.0 available at www.apache.org/licenses/LICENSE-2.0.
*
*********************************************************************************************************
*/
/*
*********************************************************************************************************
*
* NETWORK SOCKET LAYER
*
* Filename : net_sock.h
* Version : V3.05.04
*********************************************************************************************************
* Note(s) : (1) Supports BSD 4.x Socket Layer with the following restrictions/constraints :
*
* (a) ONLY supports a single address family from the following families :
* (1) IPv4 (AF_INET)
*
* (b) ONLY supports the following socket types :
* (1) Datagram (SOCK_DGRAM)
* (2) Stream (SOCK_STREAM)
*
* (c) ONLY supports a single protocol family from the following families :
* (1) IPv4 (PF_INET)
* (A) ONLY supports the following protocols :
* (1) UDP (IPPROTO_UDP)
* (2) TCP (IPPROTO_TCP)
*
* (d) ONLY supports the following socket options :
*
* Blocking
* Secure (TLS/SSL)
* Rx Queue size
* Tx Queue size
* Time of server (IPv4-TOS)
* Time to life (IPv4-TTL)
* Time to life multicast
* UDP connection receive timeout
* TCP connection accept timeout
* TCP connection close timeout
* TCP connection connect request timeout
* TCP connection receive timeout
* TCP connection transmit timeout
* TCP keep alive
* TCP MSL
* Force connection using a specific Interface
*
* (e) Multiple socket connections with the same local & remote address -- both
* addresses & port numbers -- OR multiple socket connections with only a
* local address but the same local address -- both address & port number --
* is NOT currently supported.
*
* See 'NetSock_BindHandler() Note #8'.
*
*********************************************************************************************************
* Notice(s) : (1) The Institute of Electrical and Electronics Engineers and The Open Group, have given
* us permission to reprint portions of their documentation. Portions of this text are
* reprinted and reproduced in electronic form from the IEEE Std 1003.1, 2004 Edition,
* Standard for Information Technology -- Portable Operating System Interface (POSIX),
* The Open Group Base Specifications Issue 6, Copyright (C) 2001-2004 by the Institute
* of Electrical and Electronics Engineers, Inc and The Open Group. In the event of any
* discrepancy between these versions and the original IEEE and The Open Group Standard,
* the original IEEE and The Open Group Standard is the referee document. The original
* Standard can be obtained online at http://www.opengroup.org/unix/online.html.
*********************************************************************************************************
*/
/*
*********************************************************************************************************
*********************************************************************************************************
* MODULE
*********************************************************************************************************
*********************************************************************************************************
*/
#ifndef NET_SOCK_MODULE_PRESENT
#define NET_SOCK_MODULE_PRESENT
/*
*********************************************************************************************************
*********************************************************************************************************
* INCLUDE FILES
*********************************************************************************************************
*********************************************************************************************************
*/
#include "net_cfg_net.h"
#ifdef NET_IPv4_MODULE_EN
#include "net_ipv4.h"
#endif
#ifdef NET_IPv6_MODULE_EN
#include "../IP/IPv6/net_ipv6.h"
#endif
#include "net_if.h"
#include "net_type.h"
#include "net_stat.h"
#include "net_err.h"
#include "lib_def.h"
#include "kal.h"
/*
*********************************************************************************************************
*********************************************************************************************************
* EXTERNS
*********************************************************************************************************
*********************************************************************************************************
*/
#ifdef NET_SOCK_MODULE
#define NET_SOCK_EXT
#else
#define NET_SOCK_EXT extern
#endif
/*
*********************************************************************************************************
*********************************************************************************************************
* DEFINES
*********************************************************************************************************
*********************************************************************************************************
*/
#define NET_SOCK_NBR_SOCK NET_SOCK_CFG_SOCK_NBR_UDP + \
(NET_SOCK_CFG_SOCK_NBR_TCP)
#if (NET_SOCK_CFG_SOCK_NBR_TCP > 0)
#define NET_SOCK_CONN_NBR NET_SOCK_CFG_SOCK_NBR_UDP + \
(NET_SOCK_CFG_SOCK_NBR_TCP * NET_SOCK_CFG_CONN_ACCEPT_Q_SIZE_MAX)
#else
#define NET_SOCK_CONN_NBR NET_SOCK_CFG_SOCK_NBR_UDP
#endif
#if (defined(NET_IPv6_MODULE_EN))
#define NET_SOCK_ADDR_LEN_MAX NET_SOCK_ADDR_LEN_IP_V6
#elif (defined(NET_IPv4_MODULE_EN))
#define NET_SOCK_ADDR_LEN_MAX NET_SOCK_ADDR_LEN_IP_V4
#else
#define NET_SOCK_ADDR_LEN_MAX 0
#endif
/*
*********************************************************************************************************
* NETWORK SOCKET PORT NUMBER DEFINES
*
* Note(s) : (1) Socket port numbers defined in host-order.
*
* See also 'net_sock.h NETWORK SOCKET ADDRESS DATA TYPES Note #2'.
*********************************************************************************************************
*/
#define NET_SOCK_PORT_NBR_RESERVED NET_PORT_NBR_RESERVED
#define NET_SOCK_PORT_NBR_NONE NET_SOCK_PORT_NBR_RESERVED
#define NET_SOCK_PORT_NBR_RANDOM NET_SOCK_PORT_NBR_RESERVED
#ifndef NET_SOCK_DFLT_NO_BLOCK_EN
#define NET_SOCK_DFLT_NO_BLOCK_EN DEF_DISABLED
#endif
#ifndef NET_SOCK_DFLT_PORT_NBR_RANDOM_BASE
#define NET_SOCK_DFLT_PORT_NBR_RANDOM_BASE 49152u
#endif
#ifndef NET_SOCK_DFLT_PORT_NBR_RANDOM_END
#define NET_SOCK_DFLT_PORT_NBR_RANDOM_END 65535u
#endif
#define NET_SOCK_PORT_NBR_RANDOM_MIN NET_SOCK_DFLT_PORT_NBR_RANDOM_BASE
#define NET_SOCK_PORT_NBR_RANDOM_MAX NET_SOCK_DFLT_PORT_NBR_RANDOM_END
#ifndef NET_SOCK_DFLT_TIMEOUT_RX_Q_MS
/* Configure socket timeout values (see Note #5) : */
/* Configure (datagram) socket receive queue timeout. */
#define NET_SOCK_DFLT_TIMEOUT_RX_Q_MS 5000u
#endif
#ifndef NET_SOCK_DFLT_TIMEOUT_CONN_REQ_MS
/* Configure socket connection request timeout. */
#define NET_SOCK_DFLT_TIMEOUT_CONN_REQ_MS 5000u
#endif
#ifndef NET_SOCK_DFLT_TIMEOUT_CONN_ACCEPT_MS
/* Configure socket connection accept timeout. */
#define NET_SOCK_DFLT_TIMEOUT_CONN_ACCEPT_MS 5000u
#endif
#ifndef NET_SOCK_DFLT_TIMEOUT_CONN_CLOSE_MS
/* Configure socket connection close timeout. */
#define NET_SOCK_DFLT_TIMEOUT_CONN_CLOSE_MS 10000u
#endif
/*
*********************************************************************************************************
* NETWORK SOCKET STATES
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* NETWORK SOCKET BLOCKING MODE SELECT DEFINES
*
* Note(s) : (1) The following socket values MUST be pre-#define'd in 'net_def.h' PRIOR to 'net_cfg.h'
* so that the developer can configure sockets for the desired socket blocing mode (see
* 'net_def.h BSD 4.x & NETWORK SOCKET LAYER DEFINES Note #1b' & 'net_cfg_net.h NETWORK
* SOCKET LAYER CONFIGURATION') :
*
* (a) NET_SOCK_BLOCK_SEL_DFLT
* (b) NET_SOCK_BLOCK_SEL_BLOCK
* (c) NET_SOCK_BLOCK_SEL_NO_BLOCK
*
* (2) Stevens/Fenner/Rudoff, UNIX Network Programming, Volume 1, 3rd Edition, 6th Printing,
* Section 6.2 'Blocking I/O Model', Page 154 states that "by default, all sockets are
* blocking".
*********************************************************************************************************
*/
#if 0 /* See Note #1. */
/* ------------------ SOCK BLOCK SEL ------------------ */
#define NET_SOCK_BLOCK_SEL_NONE 0u
#define NET_SOCK_BLOCK_SEL_DFLT 1u /* Sock block mode determined by run-time sock opts ... */
#define NET_SOCK_BLOCK_SEL_BLOCK 2u /* ... but dflts to blocking (see Note #2). */
#define NET_SOCK_BLOCK_SEL_NO_BLOCK 3u
#endif
/*
*********************************************************************************************************
* NETWORK SOCKET (OBJECT) FLAG DEFINES
*********************************************************************************************************
*/
/* ---------------- NET SOCK OBJ FLAGS ---------------- */
#define NET_SOCK_FLAG_SOCK_NONE DEF_BIT_NONE
#define NET_SOCK_FLAG_SOCK_USED DEF_BIT_08 /* Sock cur used; i.e. NOT in free sock pool. */
#define NET_SOCK_FLAG_SOCK_NO_BLOCK MSG_DONTWAIT /* Sock blocking DISABLED. */
#define NET_SOCK_FLAG_SOCK_SECURE DEF_BIT_09 /* Sock security ENABLED. */
#define NET_SOCK_FLAG_SOCK_SECURE_NEGO DEF_BIT_10
/*
*********************************************************************************************************
* NETWORK SOCKET EVENT TYPE DEFINES
*
* Note(s) : (1) 'EVENT_TYPE' abbreviated to 'EVENT' to enforce ANSI-compliance of 31-character symbol
* length uniqueness.
*********************************************************************************************************
*/
#define NET_SOCK_EVENT_NONE 0u
#define NET_SOCK_EVENT_ERR 1u
#define NET_SOCK_EVENT_SOCK_RX 10u
#define NET_SOCK_EVENT_SOCK_TX 11u
#define NET_SOCK_EVENT_SOCK_ACCEPT 12u
#define NET_SOCK_EVENT_SOCK_CONN 13u
#define NET_SOCK_EVENT_SOCK_CLOSE 14u
#define NET_SOCK_EVENT_SOCK_ERR_RX 20u
#define NET_SOCK_EVENT_SOCK_ERR_TX 21u
#define NET_SOCK_EVENT_SOCK_ERR_ACCEPT 22u
#define NET_SOCK_EVENT_SOCK_ERR_CONN 23u
#define NET_SOCK_EVENT_SOCK_ERR_CLOSE 24u
#define NET_SOCK_EVENT_TRANSPORT_RX 30u
#define NET_SOCK_EVENT_TRANSPORT_TX 31u
#define NET_SOCK_EVENT_TRANSPORT_ERR_RX 40u
#define NET_SOCK_EVENT_TRANSPORT_ERR_TX 41u
/*
*********************************************************************************************************
* NETWORK SOCKET FAMILY & PROTOCOL DEFINES
*
* Note(s) : (1) The following socket values MUST be pre-#define'd in 'net_def.h' PRIOR to 'net_cfg.h'
* so that the developer can configure sockets for the correct socket family values (see
* 'net_def.h BSD 4.x & NETWORK SOCKET LAYER DEFINES Note #1' & 'net_cfg_net.h NETWORK
* SOCKET LAYER CONFIGURATION') :
*
* (a) (1) NET_SOCK_ADDR_FAMILY_IP_V4
* (2) NET_SOCK_PROTOCOL_FAMILY_IP_V4
* (3) NET_SOCK_FAMILY_IP_V4
*
* (b) (1) NET_SOCK_ADDR_LEN_IP_V4
* (2) NET_SOCK_PROTO_MAX_IP_V4
*
* (2) 'NET_SOCK_PROTOCOL_MAX' abbreviated to 'NET_SOCK_PROTO_MAX' to enforce ANSI-compliance of
* 31-character symbol length uniqueness.
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* NETWORK SOCKET ADDRESS DEFINES
*********************************************************************************************************
*/
/* ------------------ SOCK ADDR CFG ------------------- */
#define NET_SOCK_ADDR_IP_LEN_PORT (sizeof(NET_PORT_NBR))
#define NET_SOCK_ADDR_IP_IX_BASE 0
#define NET_SOCK_ADDR_IP_IX_PORT NET_SOCK_ADDR_IP_IX_BASE
/* ---------------- IPv4 SOCK ADDR CFG ---------------- */
#ifdef NET_IPv4_MODULE_EN
#define NET_SOCK_ADDR_IP_V4_LEN_ADDR (sizeof(NET_IPv4_ADDR))
#define NET_SOCK_ADDR_IP_V4_LEN_PORT_ADDR NET_SOCK_ADDR_IP_V4_LEN_ADDR + NET_SOCK_ADDR_IP_LEN_PORT
#define NET_SOCK_ADDR_IP_V4_IX_ADDR (NET_SOCK_ADDR_IP_IX_PORT + NET_SOCK_ADDR_IP_LEN_PORT)
#define NET_SOCK_ADDR_IP_V4_WILDCARD NET_IPv4_ADDR_NONE
#define NET_SOCK_ADDR_IP_V4_BROADCAST INADDR_BROADCAST
#endif
/* ---------------- IPv6 SOCK ADDR CFG ---------------- */
#ifdef NET_IPv6_MODULE_EN
#define NET_SOCK_ADDR_IP_V6_LEN_FLOW (sizeof(CPU_INT32U))
#define NET_SOCK_ADDR_IP_V6_LEN_ADDR (sizeof(NET_IPv6_ADDR))
#define NET_SOCK_ADDR_IP_V6_LEN_PORT_ADDR NET_SOCK_ADDR_IP_V6_LEN_ADDR + NET_SOCK_ADDR_IP_LEN_PORT
#define NET_SOCK_ADDR_IP_V6_IX_FLOW (NET_SOCK_ADDR_IP_IX_PORT + NET_SOCK_ADDR_IP_LEN_PORT)
#define NET_SOCK_ADDR_IP_V6_IX_ADDR (NET_SOCK_ADDR_IP_V6_IX_FLOW + NET_SOCK_ADDR_IP_V6_LEN_FLOW)
#define NET_SOCK_ADDR_IP_V6_WILDCARD NET_IPv6_ADDR_ANY
#endif
/*
*********************************************************************************************************
* NETWORK SOCKET API DEFINES
*********************************************************************************************************
*/
#define NET_SOCK_BSD_ERR_NONE NET_BSD_ERR_NONE
#define NET_SOCK_BSD_ERR_DFLT NET_BSD_ERR_DFLT
#define NET_SOCK_BSD_ERR_OPEN NET_SOCK_BSD_ERR_DFLT
#define NET_SOCK_BSD_ERR_CLOSE NET_SOCK_BSD_ERR_DFLT
#define NET_SOCK_BSD_ERR_BIND NET_SOCK_BSD_ERR_DFLT
#define NET_SOCK_BSD_ERR_CONN NET_SOCK_BSD_ERR_DFLT
#define NET_SOCK_BSD_ERR_LISTEN NET_SOCK_BSD_ERR_DFLT
#define NET_SOCK_BSD_ERR_ACCEPT NET_SOCK_BSD_ERR_DFLT
#define NET_SOCK_BSD_ERR_RX NET_SOCK_BSD_ERR_DFLT
#define NET_SOCK_BSD_ERR_TX NET_SOCK_BSD_ERR_DFLT
#define NET_SOCK_BSD_ERR_SEL NET_SOCK_BSD_ERR_DFLT
#define NET_SOCK_BSD_ERR_OPT_SET NET_SOCK_BSD_ERR_DFLT
#define NET_SOCK_BSD_ERR_OPT_GET NET_SOCK_BSD_ERR_DFLT
#define NET_SOCK_BSD_RTN_CODE_OK NET_BSD_RTN_CODE_OK
#define NET_SOCK_BSD_RTN_CODE_TIMEOUT NET_BSD_RTN_CODE_TIMEOUT
#define NET_SOCK_BSD_RTN_CODE_CONN_CLOSED NET_BSD_RTN_CODE_CONN_CLOSED
/*
*********************************************************************************************************
* NETWORK SOCKET (ARGUMENT) FLAG DEFINES
*********************************************************************************************************
*/
#define NET_SOCK_FLAG_NONE NET_SOCK_FLAG_SOCK_NONE
#define NET_SOCK_FLAG_RX_DATA_PEEK MSG_PEEK
#define NET_SOCK_FLAG_NO_BLOCK MSG_DONTWAIT
#define NET_SOCK_FLAG_RX_NO_BLOCK NET_SOCK_FLAG_NO_BLOCK
#define NET_SOCK_FLAG_TX_NO_BLOCK NET_SOCK_FLAG_NO_BLOCK
/*
*********************************************************************************************************
*********************************************************************************************************
* DATA TYPES
*********************************************************************************************************
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* NETWORK SOCKET ADDRESS FAMILY DATA TYPE
*********************************************************************************************************
*/
#define NET_SOCK_ADDR_FAMILY_IP_V4 AF_INET /* TCP/IPv4 sock addr family type. */
#define NET_SOCK_ADDR_FAMILY_IP_V6 AF_INET6 /* TCP/IPv6 sock addr family type. */
typedef CPU_INT16U NET_SOCK_ADDR_FAMILY;
/*
*********************************************************************************************************
* NETWORK SOCKET ADDRESS LENGTH DATA TYPE
*********************************************************************************************************
*/
typedef CPU_INT08U NET_SOCK_ADDR_LEN;
/*
*********************************************************************************************************
* NETWORK SOCKET PROTOCOL FAMILY DATA TYPE
*********************************************************************************************************
*/
typedef enum net_sock_protocol_family {
NET_SOCK_PROTOCOL_FAMILY_NONE = 0,
NET_SOCK_PROTOCOL_FAMILY_IP_V4 = PF_INET, /* TCP/IPv4 sock protocol family type. */
NET_SOCK_PROTOCOL_FAMILY_IP_V6 = PF_INET6 /* TCP/IPv6 sock protocol family type. */
} NET_SOCK_PROTOCOL_FAMILY;
/*
*********************************************************************************************************
* NETWORK SOCKET FAMILY DATA TYPE
*********************************************************************************************************
*/
typedef enum net_sock_family {
NET_SOCK_FAMILY_IP_V4 = NET_SOCK_PROTOCOL_FAMILY_IP_V4,
NET_SOCK_FAMILY_IP_V6 = NET_SOCK_PROTOCOL_FAMILY_IP_V6
} NET_SOCK_FAMILY;
/*
*********************************************************************************************************
* NETWORK SOCKET PROTOCOL DATA TYPE
*********************************************************************************************************
*/
/*修改:与lwip类型对应*/
typedef enum net_sock_protocol {
// NET_SOCK_PROTOCOL_DFLT = 0,
// NET_SOCK_PROTOCOL_NONE = NET_SOCK_PROTOCOL_DFLT,
NET_SOCK_PROTOCOL_TCP = IPPROTO_TCP,
NET_SOCK_PROTOCOL_UDP = IPPROTO_UDP,
NET_SOCK_PROTOCOL_IP = IPPROTO_IP,
NET_SOCK_PROTOCOL_SOCK = SOL_SOCKET
} NET_SOCK_PROTOCOL;
/*
*********************************************************************************************************
* NETWORK SOCKET TYPE DATA TYPE
*********************************************************************************************************
*/
typedef enum net_sock_type {
NET_SOCK_TYPE_NONE = 0,
NET_SOCK_TYPE_FAULT = -1,
NET_SOCK_TYPE_DATAGRAM = SOCK_DGRAM,
NET_SOCK_TYPE_STREAM = SOCK_STREAM
} NET_SOCK_TYPE;
#if 0
/* -------------------- SOCK TYPES -------------------- */
#define NET_SOCK_TYPE_NONE 0
#define NET_SOCK_TYPE_FAULT -1
#if 0
#define NET_SOCK_TYPE_DATAGRAM SOCK_DGRAM
#define NET_SOCK_TYPE_STREAM SOCK_STREAM
#endif
typedef CPU_INT16S NET_SOCK_TYPE;
#endif
/*
*********************************************************************************************************
* NETWORK SOCKET DATA LENGTH & (ERROR) RETURN CODE DATA TYPES
*
* Note(s) : (1) IEEE Std 1003.1, 2004 Edition, Section 'sys/types.h : DESCRIPTION' states that :
*
* (a) "ssize_t - Used for a count of bytes or an error indication."
*
* (b) "ssize_t shall be [a] signed integer type ... capable of storing values at least in
* the range [-1, {SSIZE_MAX}]."
*
* (1) IEEE Std 1003.1, 2004 Edition, Section 'limits.h : DESCRIPTION' states that the
* "Minimum Acceptable Value ... [for] {SSIZE_MAX}" is "32767".
*
* (2) To avoid possible integer overflow, the network socket return code data type MUST
* be declared as a signed integer data type with a maximum positive value greater
* than or equal to all transport layers' maximum positive return value.
*
* See also 'net_udp.c NetUDP_RxAppData() Return(s)',
* 'net_udp.c NetUDP_TxAppData() Return(s)',
* 'net_tcp.c NetTCP_RxAppData() Return(s)',
* & 'net_tcp.c NetTCP_TxConnAppData() Return(s)'.
*
* (2) NET_SOCK_DATA_SIZE_MAX SHOULD be #define'd based on 'NET_SOCK_DATA_SIZE' data type declared.
*********************************************************************************************************
*/
typedef CPU_INT32S NET_SOCK_DATA_SIZE;
typedef NET_SOCK_DATA_SIZE NET_SOCK_RTN_CODE;
#define NET_SOCK_DATA_SIZE_MIN 0
#define NET_SOCK_DATA_SIZE_MAX DEF_INT_32S_MAX_VAL /* See Note #2. */
/*
*********************************************************************************************************
* NETWORK SOCKET STATE DATA TYPE
*********************************************************************************************************
*/
/* typedef CPU_INT08U NET_SOCK_STATE; */
typedef enum net_sock_state {
NET_SOCK_STATE_NONE = 1u,
NET_SOCK_STATE_FREE = 2u,
NET_SOCK_STATE_DISCARD = 3u,
NET_SOCK_STATE_CLOSED = 10u,
NET_SOCK_STATE_CLOSED_FAULT = 11u,
NET_SOCK_STATE_CLOSE_IN_PROGRESS = 15u,
NET_SOCK_STATE_CLOSING_DATA_AVAIL = 16u,
NET_SOCK_STATE_BOUND = 20u,
NET_SOCK_STATE_LISTEN = 30u,
NET_SOCK_STATE_CONN = 40u,
NET_SOCK_STATE_CONN_IN_PROGRESS = 41u,
NET_SOCK_STATE_CONN_DONE = 42u
} NET_SOCK_STATE;
/*
*********************************************************************************************************
* NETWORK SOCKET SHUTDOWN MODE DATA TYPE
*********************************************************************************************************
*/
typedef enum net_sock_sd_mode {
NET_SOCK_SHUTDOWN_MODE_RD = SHUT_RD,
NET_SOCK_SHUTDOWN_MODE_WR = SHUT_WR,
NET_SOCK_SHUTDOWN_MODE_RDWR = SHUT_RDWR,
NET_SOCK_SHUTDOWN_MODE_NONE = 3u
} NET_SOCK_SD_MODE;
/*
*********************************************************************************************************
* NETWORK SOCKET QUANTITY DATA TYPE
*
* Note(s) : (1) See also 'NETWORK SOCKET IDENTIFICATION DATA TYPE Note #1'.
*********************************************************************************************************
*/
typedef CPU_INT16S NET_SOCK_QTY; /* Defines max qty of socks to support. */
/*
*********************************************************************************************************
* NETWORK SOCKET IDENTIFICATION DATA TYPE
*
* Note(s) : (1) (a) NET_SOCK_NBR_MAX SHOULD be #define'd based on 'NET_SOCK_QTY' data type declared.
*
* (b) However, since socket handle identifiers are data-typed as 16-bit signed integers;
* the maximum unique number of valid socket handle identifiers, & therefore the
* maximum number of valid sockets, is the total number of non-negative values that
* 16-bit signed integers support.
*********************************************************************************************************
*/
//typedef CPU_INT16S NET_SOCK_ID;
typedef unsigned int NET_SOCK_ID;
#define NET_SOCK_NBR_MIN 1
#define NET_SOCK_NBR_MAX DEF_INT_16S_MAX_VAL /* See Note #1. */
#define NET_SOCK_ID_NONE -1
#define NET_SOCK_ID_MIN 0
#define NET_SOCK_ID_MAX (NET_SOCK_NBR_SOCK - 1)
/*
*********************************************************************************************************
* NETWORK SOCKET FLAGS DATA TYPES
*
* Note(s) : (1) Ideally, network socket API argument flags data type SHOULD be defined as an unsigned
* integer data type since logical bitwise operations should be performed ONLY on unsigned
* integer data types.
*********************************************************************************************************
*/
typedef NET_FLAGS NET_SOCK_FLAGS;
typedef CPU_INT16S NET_SOCK_API_FLAGS; /* See Note #1. */
/*
*********************************************************************************************************
* NETWORK SOCKET OPTION NAME DATA TYPES
*********************************************************************************************************
*/
typedef enum net_sock_opt_name {
NET_SOCK_OPT_SOCK_TX_BUF_SIZE = SO_SNDBUF,
NET_SOCK_OPT_SOCK_RX_BUF_SIZE = SO_RCVBUF,
NET_SOCK_OPT_SOCK_RX_TIMEOUT = SO_RCVTIMEO,
NET_SOCK_OPT_SOCK_TX_TIMEOUT = SO_SNDTIMEO,
NET_SOCK_OPT_SOCK_ERROR = SO_ERROR,
NET_SOCK_OPT_SOCK_TYPE = SO_TYPE,
NET_SOCK_OPT_SOCK_KEEP_ALIVE = SO_KEEPALIVE,
NET_SOCK_OPT_SOCK_ACCEPT_CONN = SO_ACCEPTCONN,
NET_SOCK_OPT_TCP_NO_DELAY = TCP_NODELAY,
NET_SOCK_OPT_TCP_KEEP_CNT = TCP_KEEPCNT,
NET_SOCK_OPT_TCP_KEEP_IDLE = TCP_KEEPIDLE,
NET_SOCK_OPT_TCP_KEEP_INTVL = TCP_KEEPINTVL,
NET_SOCK_OPT_IP_TOS = IP_TOS,
NET_SOCK_OPT_IP_TTL = IP_TTL,
NET_SOCK_OPT_IP_RX_IF = IP_RECVIF,
NET_SOCK_OPT_IP_OPT = IP_OPTIONS,
NET_SOCK_OPT_IP_HDR_INCL = IP_HDRINCL,
NET_SOCK_OPT_IP_ADD_MEMBERSHIP = IP_ADD_MEMBERSHIP,
NET_SOCK_OPT_IP_DROP_MEMBERSHIP = IP_DROP_MEMBERSHIP
} NET_SOCK_OPT_NAME;
/*
*********************************************************************************************************
* NETWORK SOCKET ADDRESS LENGTH DATA TYPE
*
* Note(s) : (1) IEEE Std 1003.1, 2004 Edition, Section 'sys/socket.h : DESCRIPTION' states that
* "socklen_t ... is an integer type of width of at least 32 bits".
*********************************************************************************************************
*/
typedef CPU_INT32S NET_SOCK_OPT_LEN;
/*
*********************************************************************************************************
* NETWORK SOCKET QUEUE SIZE DATA TYPE
*
* Note(s) : (1) (a) NET_SOCK_Q_SIZE #define's SHOULD be #define'd based on 'NET_SOCK_Q_SIZE'
* data type declared.
*
* (b) However, since socket/connection handle identifiers are data-typed as 16-bit
* signed integers; the maximum unique number of valid socket/connection handle
* identifiers, & therefore the maximum number of valid sockets/connections, is
* the total number of non-negative values that 16-bit signed integers support.
*
* See also 'NETWORK SOCKET IDENTIFICATION DATA TYPE Note #1b'
* & 'net_conn.h NETWORK CONNECTION IDENTIFICATION DATA TYPE Note #2b'.
*
* (2) (a) NET_SOCK_Q_IX #define's SHOULD be #define'd based on 'NET_SOCK_Q_SIZE'
* data type declared.
*
* (b) Since socket queue size is data typed as a 16-bit unsigned integer but the
* maximum queue sizes are #define'd as 16-bit signed integer values ... :
*
* (1) Valid socket queue indices are #define'd within the range of 16-bit
* signed integer values, ...
* (2) but socket queue indice exception values may be #define'd with 16-bit
* unsigned integer values.
*********************************************************************************************************
*/
typedef CPU_INT16U NET_SOCK_Q_SIZE;
/* See Note #1. */
#define NET_SOCK_Q_SIZE_NONE 0
#define NET_SOCK_Q_SIZE_UNLIMITED 0
#define NET_SOCK_Q_SIZE_MIN NET_SOCK_NBR_MIN
#define NET_SOCK_Q_SIZE_MAX NET_SOCK_NBR_MAX /* See Note #1b. */
/* See Note #2. */
#define NET_SOCK_Q_IX_NONE DEF_INT_16U_MAX_VAL /* See Note #2b. */
#define NET_SOCK_Q_IX_MIN 0
#define NET_SOCK_Q_IX_MAX (NET_SOCK_Q_SIZE_MAX - 1)
/*
*********************************************************************************************************
* NETWORK SOCKET ADDRESS DATA TYPES
*
* Note(s) : (1) See 'net_sock.h Note #1a' for supported socket address families.
*
* (2) (a) Socket address structure 'AddrFamily' member MUST be configured in host-order & MUST
* NOT be converted to/from network-order.
*
* (b) Socket address structure addresses MUST be configured/converted from host-order to
* network-order.
*
* See also 'net_bsd.h BSD 4.x SOCKET DATA TYPES Note #2b'.
*********************************************************************************************************
*/
/* ------------ NET SOCK ADDR IPv4 ------------ */
#define NET_SOCK_ADDR_IPv4_NBR_OCTETS_UNUSED 8
typedef struct net_sock_addr_ipv4 {
NET_SOCK_ADDR_FAMILY AddrFamily; /* Sock addr family type (see Note #2a). */
NET_PORT_NBR Port; /* UDP/TCP port nbr (see Note #2b). */
NET_IPv4_ADDR Addr; /* IPv6 addr (see Note #2b). */
CPU_INT08U Unused[NET_SOCK_ADDR_IPv4_NBR_OCTETS_UNUSED]; /* Unused (MUST be zero). */
} NET_SOCK_ADDR_IPv4;
#define NET_SOCK_ADDR_IPv4_SIZE (sizeof(NET_SOCK_ADDR_IPv4))
/* ------------ NET SOCK ADDR IPv6 ------------ */
typedef struct net_sock_addr_ipv6 {
NET_SOCK_ADDR_FAMILY AddrFamily; /* Sock addr family type (see Note #2a). */
NET_PORT_NBR Port; /* UDP/TCP port nbr (see Note #2b). */
CPU_INT32U FlowInfo;
NET_IPv6_ADDR Addr; /* IPv6 addr (see Note #2b). */
CPU_INT32U ScopeID; /* Unused (MUST be zero). */
} NET_SOCK_ADDR_IPv6;
#define NET_SOCK_ADDR_IPv6_SIZE (sizeof(NET_SOCK_ADDR_IPv6))
/* -------------- NET SOCK ADDR --------------- */
#if (defined(NET_IPv6_MODULE_EN))
#define NET_SOCK_BSD_ADDR_LEN_MAX (NET_SOCK_ADDR_IPv6_SIZE - sizeof(NET_SOCK_ADDR_FAMILY))
#elif (defined(NET_IPv4_MODULE_EN))
#define NET_SOCK_BSD_ADDR_LEN_MAX (NET_SOCK_ADDR_IPv4_SIZE - sizeof(NET_SOCK_ADDR_FAMILY))
#else
#define NET_SOCK_BSD_ADDR_LEN_MAX 0
#endif
typedef struct net_sock_addr {
NET_SOCK_ADDR_FAMILY AddrFamily; /* Sock addr family type (see Note #2a). */
CPU_INT08U Addr[NET_SOCK_BSD_ADDR_LEN_MAX]; /* Sock addr (see Note #2b). */
} NET_SOCK_ADDR;
#define NET_SOCK_ADDR_SIZE (sizeof(NET_SOCK_ADDR))
/*
*********************************************************************************************************
* NETWORK SOCKET ACCEPT Q DATA TYPE
*********************************************************************************************************
*/
typedef struct net_sock_accept_q_obj {
NET_CONN_ID ConnID;
CPU_BOOLEAN IsRdy;
struct net_sock_accept_q_obj *Next;
} NET_SOCK_ACCEPT_Q_OBJ;
/*
*********************************************************************************************************
* NETWORK SOCKET SEL EVENT DATA TYPES
*********************************************************************************************************
*/
typedef enum net_sock_msg_type {
NET_SOCK_EVENT_TYPE_CONN_REQ_SIGNAL,
NET_SOCK_EVENT_TYPE_CONN_REQ_ABORT,
NET_SOCK_EVENT_TYPE_CONN_CLOSE_ABORT,
NET_SOCK_EVENT_TYPE_CONN_CLOSE_SIGNAL,
NET_SOCK_EVENT_TYPE_CONN_ACCEPT_SIGNAL,
NET_SOCK_EVENT_TYPE_CONN_ACCEPT_ABORT,
NET_SOCK_EVENT_TYPE_RX_ABORT,
NET_SOCK_EVENT_TYPE_RX,
NET_SOCK_EVENT_TYPE_TX,
NET_SOCK_EVENT_TYPE_SEL_ABORT
} NET_SOCK_EVENT_TYPE;
typedef CPU_INT08U NET_SOCK_SEL_EVENT_FLAG;
#define NET_SOCK_SEL_EVENT_FLAG_NONE DEF_BIT_NONE
#define NET_SOCK_SEL_EVENT_FLAG_RD DEF_BIT_00
#define NET_SOCK_SEL_EVENT_FLAG_WR DEF_BIT_01
#define NET_SOCK_SEL_EVENT_FLAG_ERR DEF_BIT_02
/*
*********************************************************************************************************
* NETWORK SOCKET DATA TYPE
*
* NET_SOCK
* |-------------|
* | Sock Type |
* |-------------| Next
* | O----------> Socket Buffer Queue
* |-------------| Heads -------
* | O------------------------------------> | |
* |-------------| | |
* | O---------------------- -------
* |-------------| | | ^
* | Conn IDs | | v |
* |-------------| | -------
* | Sock | | | |
* | Family/ | | | |
* | Protocol | | -------
* |-------------| | | ^
* | Conn Ctrls | | Buffer Queue v |
* |-------------| | Tails -------
* | Flags | ---------------> | |
* |-------------| | |
* | State | -------
* |-------------|
*
*
* Note(s) : (1) (a) 'TxQ_Head'/'TxQ_Tail' may NOT be necessary but are included for consistency.
* (b) 'TxQ_SizeCur' may NOT be necessary but is included for consistency.
*********************************************************************************************************
*/
typedef struct net_sock_sel_obj NET_SOCK_SEL_OBJ;
struct net_sock_sel_obj {
KAL_SEM_HANDLE *SockSelTaskSignalObj;
NET_SOCK_SEL_EVENT_FLAG SockSelPendingFlags;
NET_SOCK_SEL_OBJ *ObjPrevPtr;
};
/* ----------------- NET SOCK ----------------- */
typedef struct net_sock NET_SOCK;
struct net_sock {
NET_SOCK *NextPtr; /* Ptr to NEXT sock. */
#if (NET_SOCK_CFG_SEL_EN == DEF_ENABLED)
NET_SOCK_SEL_OBJ *SelObjTailPtr;
#endif
KAL_SEM_HANDLE RxQ_SignalObj;
CPU_INT32U RxQ_SignalTimeout_ms;
NET_BUF *RxQ_Head; /* Ptr to head of sock's datagram rx buf Q. */
NET_BUF *RxQ_Tail; /* Ptr to tail of sock's datagram rx buf Q. */
#if 0 /* See Note #2a. */
NET_BUF *TxQ_Head; /* Ptr to head of sock's datagram tx buf Q. */
NET_BUF *TxQ_Tail; /* Ptr to tail of sock's datagram tx buf Q. */
#endif
NET_SOCK_DATA_SIZE RxQ_SizeCfgd; /* Datagram rx buf Q size cfg'd (in octets). */
NET_SOCK_DATA_SIZE RxQ_SizeCur; /* Datagram rx buf Q size cur (in octets). */
NET_SOCK_DATA_SIZE TxQ_SizeCfgd; /* Datagram tx buf Q size cfg'd (in octets). */
#if 0 /* See Note #2b. */
NET_SOCK_DATA_SIZE TxQ_SizeCur; /* Datagram tx buf Q size cur (in octets). */
#endif
NET_SOCK_ID ID; /* Sock id. */
#ifdef NET_SOCK_TYPE_STREAM_MODULE_EN
NET_SOCK_ID ID_SockParent; /* Parent sock id. */
#endif
NET_CONN_ID ID_Conn; /* Conn id. */
NET_IF_NBR IF_Nbr; /* IF nbr. */
NET_SOCK_PROTOCOL_FAMILY ProtocolFamily; /* Sock protocol family. */
NET_SOCK_PROTOCOL Protocol; /* Sock protocol. */
NET_SOCK_TYPE SockType; /* Sock type. */
#ifdef NET_SECURE_MODULE_EN
void *SecureSession; /* Sock secure session. */
#endif
#ifdef NET_SOCK_TYPE_STREAM_MODULE_EN
KAL_SEM_HANDLE ConnReqSignalObj;
CPU_INT32U ConnReqSignalTimeout_ms;
KAL_SEM_HANDLE ConnAcceptQSignalObj;
CPU_INT32U ConnAcceptQSignalTimeout_ms;
KAL_SEM_HANDLE ConnCloseSignalObj;
CPU_INT32U ConnCloseSignalTimeout_ms;
NET_SOCK_ACCEPT_Q_OBJ *ConnAcceptQ_Ptr;
NET_SOCK_Q_SIZE ConnAcceptQ_SizeMax; /* Max Q size to accept rx'd conn reqs. */
NET_SOCK_Q_SIZE ConnAcceptQ_SizeCur; /* Cur Q size to accept rx'd conn reqs. */
NET_SOCK_Q_SIZE ConnChildQ_SizeMax; /* Max Q size to child conn. */
NET_SOCK_Q_SIZE ConnChildQ_SizeCur; /* Cur Q size to child conn. */ /* Conn accept Q (conn id's q'd into array). */
#endif
NET_SOCK_STATE State; /* Sock state. */
NET_SOCK_SD_MODE ShutdownMode; /* Indicates if sock is fully or part shut down.*/
NET_SOCK_FLAGS Flags; /* Sock flags. */
};
/*
*********************************************************************************************************
* NETWORK SOCKET TIMEOUT DATA TYPE
*
* Note(s) : (1) (a) IEEE Std 1003.1, 2004 Edition, Section 'sys/select.h : DESCRIPTION' states that "the
* timeval structure ... includes at least the following members" :
*
* (1) time_t tv_sec Seconds
* (2) suseconds_t tv_usec Microseconds
*
* (b) Ideally, the Network Socket Layer's 'NET_SOCK_TIMEOUT' data type would be based on the
* BSD 4.x Layer's 'timeval' data type definition. However, since BSD 4.x Layer application
* programming interface (API) is NOT guaranteed to be present in the project build (see
* 'net_bsd.h MODULE Note #1bA'); the Network Socket Layer's 'NET_SOCK_TIMEOUT' data type
* MUST be independently defined.
*
* However, for correct interoperability between the BSD 4.x Layer 'timeval' data type &
* the Network Socket Layer's 'NET_SOCK_TIMEOUT' data type; ANY modification to either of
* these data types MUST be appropriately synchronized.
*
* See also 'net_bsd.h BSD 4.x SOCKET DATA TYPES Note #4'.
*********************************************************************************************************
*/
typedef struct net_sock_timeout { /* See Note #1a. */
CPU_INT32S timeout_sec;
CPU_INT32S timeout_us;
} NET_SOCK_TIMEOUT;
/*
*********************************************************************************************************
* NETWORK SOCKET (IDENTIFICATION) DESCRIPTOR SET DATA TYPE
*
* Note(s) : (1) (a) (1) IEEE Std 1003.1, 2004 Edition, Section 'sys/select.h : DESCRIPTION' states
* that the "'fd_set' type ... shall [be] define[d] ... as a structure".
*
* (2) Stevens/Fenner/Rudoff, UNIX Network Programming, Volume 1, 3rd Edition,
* 6th Printing, Section 6.3, Pages 162-163 states that "descriptor sets [are]
* typically an array of integers, with each bit in each integer corresponding
* to a descriptor".
*
* (b) Ideally, the Network Socket Layer's 'NET_SOCK_DESC' data type would be based on
* the BSD 4.x Layer's 'fd_set' data type definition. However, since BSD 4.x Layer
* application programming interface (API) is NOT guaranteed to be present in the
* project build (see 'net_bsd.h MODULE Note #1bA'); the Network Socket Layer's
* 'NET_SOCK_DESC' data type MUST be independently defined.
*
* However, for correct interoperability between the BSD 4.x Layer 'fd_set' data type
* & the Network Socket Layer's 'NET_SOCK_DESC' data type; ANY modification to either
* of these data types MUST be appropriately synchronized.
*
* See also 'net_bsd.h BSD 4.x SOCKET DATA TYPES Note #5'.
*********************************************************************************************************
*/
#define NET_SOCK_DESC_NBR_MIN_DESC 0
#define NET_SOCK_DESC_NBR_MAX_DESC NET_SOCK_NBR_SOCK
#define NET_SOCK_DESC_NBR_MIN 0
#define NET_SOCK_DESC_NBR_MAX (NET_SOCK_DESC_NBR_MAX_DESC - 1)
#define NET_SOCK_DESC_ARRAY_SIZE (((NET_SOCK_DESC_NBR_MAX_DESC - 1) / (sizeof(CPU_DATA) * DEF_OCTET_NBR_BITS)) + 1)
typedef struct net_sock_desc { /* See Note #1a. */
CPU_DATA SockID_DescNbrSet[NET_SOCK_DESC_ARRAY_SIZE];
} NET_SOCK_DESC;
/*
*********************************************************************************************************
* NETWORK SOCKET SECURITY CERTIFICATE & KEY INSTALLATION DEFINES
*********************************************************************************************************
*/
typedef enum NET_SOCK_SECURE_TYPE {
NET_SOCK_SECURE_TYPE_NONE,
NET_SOCK_SECURE_TYPE_SERVER,
NET_SOCK_SECURE_TYPE_CLIENT
} NET_SOCK_SECURE_TYPE;
typedef enum net_sock_secure_cert_key_fmt {
NET_SOCK_SECURE_CERT_KEY_FMT_NONE,
NET_SOCK_SECURE_CERT_KEY_FMT_PEM,
NET_SOCK_SECURE_CERT_KEY_FMT_DER
} NET_SOCK_SECURE_CERT_KEY_FMT;
/*
*********************************************************************************************************
* NETWORK SECURE SOCKET FUNCTION POINTER DATA TYPE
*********************************************************************************************************
*/
typedef enum net_sock_secure_untrusted_reason {
NET_SOCK_SECURE_UNTRUSTED_BY_CA,
NET_SOCK_SECURE_EXPIRE_DATE,
NET_SOCK_SECURE_INVALID_DATE,
NET_SOCK_SECURE_SELF_SIGNED,
NET_SOCK_SECURE_UNKNOWN
} NET_SOCK_SECURE_UNTRUSTED_REASON;
typedef CPU_BOOLEAN(*NET_SOCK_SECURE_TRUST_FNCT)(void *,
NET_SOCK_SECURE_UNTRUSTED_REASON);
/*
*********************************************************************************************************
*********************************************************************************************************
* GLOBAL VARIABLES
*********************************************************************************************************
*********************************************************************************************************
*/
NET_SOCK_EXT NET_SOCK *NetSock_PoolPtr; /* Ptr to pool of free socks. */
NET_SOCK_EXT NET_STAT_POOL NetSock_PoolStat;
/*
*********************************************************************************************************
*********************************************************************************************************
* MACRO'S
*********************************************************************************************************
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* NETWORK SOCKET DESCRIPTOR MACRO'S
*
* Description : Initialize, modify, & check network socket descriptor sets for multiplexed I/O functions.
*
* Argument(s) : desc_nbr Socket descriptor number to initialize, modify, or check; when applicable.
*
* p_desc_set Pointer to a descriptor set.
*
* Return(s) : Return values macro-dependent :
*
* none, for network socket descriptor initialization & modification macro's.
*
* 1, if any network socket descriptor condition(s) satisfied.
*
* 0, otherwise.
*
* See also 'net_bsd.h BSD 4.x FILE DESCRIPTOR MACRO'S Note #2a2'.
*
* Caller(s) : Application.
*
* These macro's are network protocol suite application programming interface (API) macro's
* & MAY be called by application function(s).
*
* Note(s) : (1) Ideally, network socket descriptor macro's ('NET_SOCK_DESC_&&&()') would be based
* on the BSD 4.x Layer's file descriptor macro ('FD_&&&()') definitions. However,
* since BSD 4.x Layer application programming interface (API) is NOT guaranteed to
* be present in the project build (see 'net_bsd.h MODULE Note #1bA'); the network
* socket descriptor macro's MUST be independently defined.
*
* However, for correct interoperability between network socket descriptor macro's
* & BSD 4.x Layer file descriptor macro's; ANY modification to any of these macro
* definitions MUST be appropriately synchronized.
*
* See also 'net_bsd.h BSD 4.x FILE DESCRIPTOR MACRO'S Note #3'.
*********************************************************************************************************
*/
#define NET_SOCK_DESC_COPY(p_desc_set_dest, p_desc_set_src) \
do { \
if ((((NET_SOCK_DESC *)(p_desc_set_dest)) != (NET_SOCK_DESC *)0) && \
(((NET_SOCK_DESC *)(p_desc_set_src )) != (NET_SOCK_DESC *)0)) { \
Mem_Copy((void *) (&(((NET_SOCK_DESC *)(p_desc_set_dest))->SockID_DescNbrSet[0])), \
(void *) (&(((NET_SOCK_DESC *)(p_desc_set_src ))->SockID_DescNbrSet[0])), \
(CPU_SIZE_T)(sizeof(((NET_SOCK_DESC *)(p_desc_set_dest))->SockID_DescNbrSet))); \
} \
} while (0)
#define NET_SOCK_DESC_INIT(p_desc_set) \
do { \
if (((NET_SOCK_DESC *)(p_desc_set)) != (NET_SOCK_DESC *)0) { \
Mem_Clr ((void *) (&(((NET_SOCK_DESC *)(p_desc_set))->SockID_DescNbrSet[0])), \
(CPU_SIZE_T)(sizeof(((NET_SOCK_DESC *)(p_desc_set))->SockID_DescNbrSet))); \
} \
} while (0)
#define NET_SOCK_DESC_CLR(desc_nbr, p_desc_set) \
do { \
if (((desc_nbr) >= NET_SOCK_DESC_NBR_MIN) && \
((desc_nbr) <= NET_SOCK_DESC_NBR_MAX) && \
(((NET_SOCK_DESC *)(p_desc_set)) != (NET_SOCK_DESC *)0)) { \
DEF_BIT_CLR ((((NET_SOCK_DESC *)(p_desc_set))->SockID_DescNbrSet[(desc_nbr) / (sizeof(CPU_DATA) * DEF_OCTET_NBR_BITS)]), \
DEF_BIT ((desc_nbr) % (sizeof(CPU_DATA) * DEF_OCTET_NBR_BITS))); \
} \
} while (0)
#define NET_SOCK_DESC_SET(desc_nbr, p_desc_set) \
do { \
if (((desc_nbr) >= NET_SOCK_DESC_NBR_MIN) && \
((desc_nbr) <= NET_SOCK_DESC_NBR_MAX) && \
(((NET_SOCK_DESC *)(p_desc_set)) != (NET_SOCK_DESC *)0)) { \
DEF_BIT_SET ((((NET_SOCK_DESC *)(p_desc_set))->SockID_DescNbrSet[(desc_nbr) / (sizeof(CPU_DATA) * DEF_OCTET_NBR_BITS)]), \
DEF_BIT ((desc_nbr) % (sizeof(CPU_DATA) * DEF_OCTET_NBR_BITS))); \
} \
} while (0)
#define NET_SOCK_DESC_IS_SET(desc_nbr, p_desc_set) \
((((desc_nbr) >= NET_SOCK_DESC_NBR_MIN) && \
((desc_nbr) <= NET_SOCK_DESC_NBR_MAX) && \
(((NET_SOCK_DESC *)(p_desc_set)) != (NET_SOCK_DESC *)0)) ? \
(((DEF_BIT_IS_SET((((NET_SOCK_DESC *)(p_desc_set))->SockID_DescNbrSet[(desc_nbr) / (sizeof(CPU_DATA) * DEF_OCTET_NBR_BITS)]), \
DEF_BIT ((desc_nbr) % (sizeof(CPU_DATA) * DEF_OCTET_NBR_BITS)))) \
== DEF_YES) ? 1 : 0) \
: 0)
/*
*********************************************************************************************************
*********************************************************************************************************
* FUNCTION PROTOTYPES
*
* Note(s) : (1) Ideally, socket data handler functions should be defined as local functions. However,
* since these handler functions are required as callback functions for network security
* manager port files; these handler functions MUST be defined as global functions.
*********************************************************************************************************
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* EXTERNAL C LANGUAGE LINKAGE
*
* Note(s) : (1) C++ compilers MUST 'extern'ally declare ALL C function prototypes & variable/object
* declarations for correct C language linkage.
*********************************************************************************************************
*/
#ifdef __cplusplus
extern "C" {
#endif
/*
*********************************************************************************************************
* PUBLIC API
*********************************************************************************************************
*/
/* ------ SOCK API FNCTS ------ */
NET_SOCK_ID NetSock_Open(NET_SOCK_PROTOCOL_FAMILY protocol_family,
NET_SOCK_TYPE sock_type,
NET_SOCK_PROTOCOL protocol,
NET_ERR *p_err);
NET_SOCK_RTN_CODE NetSock_Close(NET_SOCK_ID sock_id,
NET_ERR *p_err);
NET_SOCK_RTN_CODE NetSock_Bind(NET_SOCK_ID sock_id,
NET_SOCK_ADDR *paddr_local,
NET_SOCK_ADDR_LEN addr_len,
NET_ERR *p_err);
NET_SOCK_RTN_CODE NetSock_Conn(NET_SOCK_ID sock_id,
NET_SOCK_ADDR *paddr_remote,
NET_SOCK_ADDR_LEN addr_len,
NET_ERR *p_err);
#ifdef NET_SOCK_TYPE_STREAM_MODULE_EN
NET_SOCK_RTN_CODE NetSock_Listen(NET_SOCK_ID sock_id,
NET_SOCK_Q_SIZE sock_q_size,
NET_ERR *p_err);
NET_SOCK_ID NetSock_Accept(NET_SOCK_ID sock_id,
NET_SOCK_ADDR *paddr_remote,
NET_SOCK_ADDR_LEN *paddr_len,
NET_ERR *p_err);
#endif /* NET_SOCK_TYPE_STREAM_MODULE_EN */
NET_SOCK_RTN_CODE NetSock_RxDataFrom(NET_SOCK_ID sock_id,
void *pdata_buf,
CPU_INT16U data_buf_len,
NET_SOCK_API_FLAGS flags,
NET_SOCK_ADDR *paddr_remote,
NET_SOCK_ADDR_LEN *paddr_len,
void *pip_opts_buf,
CPU_INT08U ip_opts_buf_len,
CPU_INT08U *pip_opts_len,
NET_ERR *p_err);
NET_SOCK_RTN_CODE NetSock_RxData(NET_SOCK_ID sock_id,
void *pdata_buf,
CPU_INT16U data_buf_len,
NET_SOCK_API_FLAGS flags,
NET_ERR *p_err);
NET_SOCK_RTN_CODE NetSock_TxDataTo(NET_SOCK_ID sock_id,
void *p_data,
CPU_INT16U data_len,
NET_SOCK_API_FLAGS flags,
NET_SOCK_ADDR *paddr_remote,
NET_SOCK_ADDR_LEN addr_len,
NET_ERR *p_err);
NET_SOCK_RTN_CODE NetSock_TxData(NET_SOCK_ID sock_id,
void *p_data,
CPU_INT16U data_len,
NET_SOCK_API_FLAGS flags,
NET_ERR *p_err);
#if (NET_SOCK_CFG_SEL_EN == DEF_ENABLED)
NET_SOCK_RTN_CODE NetSock_Sel(NET_SOCK_QTY sock_nbr_max,
NET_SOCK_DESC *psock_desc_rd,
NET_SOCK_DESC *psock_desc_wr,
NET_SOCK_DESC *psock_desc_err,
NET_SOCK_TIMEOUT *ptimeout,
NET_ERR *p_err);
void NetSock_SelAbort(NET_SOCK_ID sock_id,
NET_ERR *p_err);
#endif /* NET_SOCK_CFG_SEL_EN */
CPU_BOOLEAN NetSock_IsConn(NET_SOCK_ID sock_id,
NET_ERR *p_err);
/* ------ SOCK CFG FNCTS ------ */
/* Cfg sock block mode. */
CPU_BOOLEAN NetSock_CfgBlock(NET_SOCK_ID sock_id,
CPU_INT08U block,
NET_ERR *p_err);
CPU_INT08U NetSock_BlockGet(NET_SOCK_ID sock_id,
NET_ERR *p_err);
/* Cfg sock secure mode. */
CPU_BOOLEAN NetSock_CfgSecure(NET_SOCK_ID sock_id,
CPU_BOOLEAN secure,
NET_ERR *p_err);
CPU_BOOLEAN NetSock_CfgSecureServerCertKeyInstall(NET_SOCK_ID sock_id,
const void *p_cert,
CPU_INT32U cert_len,
const void *p_key,
CPU_INT32U key_len,
NET_SOCK_SECURE_CERT_KEY_FMT fmt,
CPU_BOOLEAN cert_chain,
NET_ERR *p_err);
CPU_BOOLEAN NetSock_CfgSecureClientCertKey(NET_SOCK_ID sock_id,
const void *p_cert,
CPU_INT32U cert_size,
const void *p_key,
CPU_INT32U key_size,
NET_SOCK_SECURE_CERT_KEY_FMT fmt,
CPU_BOOLEAN cert_chain,
NET_ERR *p_err);
CPU_BOOLEAN NetSock_CfgSecureClientCommonName(NET_SOCK_ID sock_id,
CPU_CHAR *pcommon_name,
NET_ERR *p_err);
CPU_BOOLEAN NetSock_CfgSecureClientTrustCallBack(NET_SOCK_ID sock_id,
NET_SOCK_SECURE_TRUST_FNCT call_back_fnct,
NET_ERR *p_err);
/* Cfg interface socket. */
CPU_BOOLEAN NetSock_CfgIF(NET_SOCK_ID sock_id,
NET_IF_NBR if_nbr,
NET_ERR *p_err);
/* Cfg sock rx Q size. */
CPU_BOOLEAN NetSock_CfgRxQ_Size(NET_SOCK_ID sock_id,
NET_SOCK_DATA_SIZE size,
NET_ERR *p_err);
/* Cfg sock tx Q size. */
CPU_BOOLEAN NetSock_CfgTxQ_Size(NET_SOCK_ID sock_id,
NET_SOCK_DATA_SIZE size,
NET_ERR *p_err);
/* Cfg/set sock conn child Q size. */
CPU_BOOLEAN NetSock_CfgConnChildQ_SizeSet(NET_SOCK_ID sock_id,
NET_SOCK_Q_SIZE queue_size,
NET_ERR *p_err);
/* Get sock conn child Q size. */
NET_SOCK_Q_SIZE NetSock_CfgConnChildQ_SizeGet(NET_SOCK_ID sock_id,
NET_ERR *p_err);
CPU_BOOLEAN NetSock_CfgTxNagle(NET_SOCK_ID sock_id,
CPU_BOOLEAN nagle_en,
NET_ERR *p_err);
#ifdef NET_IPv4_MODULE_EN
/* Cfg sock tx IP TOS. */
CPU_BOOLEAN NetSock_CfgTxIP_TOS(NET_SOCK_ID sock_id,
NET_IPv4_TOS ip_tos,
NET_ERR *p_err);
/* Cfg sock tx IP TTL. */
CPU_BOOLEAN NetSock_CfgTxIP_TTL(NET_SOCK_ID sock_id,
NET_IPv4_TTL ip_ttl,
NET_ERR *p_err);
/* Cfg sock tx IP TTL multicast.*/
CPU_BOOLEAN NetSock_CfgTxIP_TTL_Multicast(NET_SOCK_ID sock_id,
NET_IPv4_TTL ip_ttl,
NET_ERR *p_err);
#endif /* NET_IPv4_MODULE_EN */
/* Cfg dflt sock rx Q timeout.*/
CPU_BOOLEAN NetSock_CfgTimeoutRxQ_Dflt(NET_SOCK_ID sock_id,
NET_ERR *p_err);
/* Cfg/set sock rx Q timeout.*/
CPU_BOOLEAN NetSock_CfgTimeoutRxQ_Set(NET_SOCK_ID sock_id,
CPU_INT32U timeout_ms,
NET_ERR *p_err);
/* Get sock rx Q timeout.*/
CPU_INT32U NetSock_CfgTimeoutRxQ_Get_ms(NET_SOCK_ID sock_id,
NET_ERR *p_err);
/* Cfg dflt sock tx Q timeout.*/
CPU_BOOLEAN NetSock_CfgTimeoutTxQ_Dflt(NET_SOCK_ID sock_id,
NET_ERR *p_err);
/* Cfg/set sock tx Q timeout.*/
CPU_BOOLEAN NetSock_CfgTimeoutTxQ_Set(NET_SOCK_ID sock_id,
CPU_INT32U timeout_ms,
NET_ERR *p_err);
/* Get sock tx Q timeout.*/
CPU_INT32U NetSock_CfgTimeoutTxQ_Get_ms(NET_SOCK_ID sock_id,
NET_ERR *p_err);
/* Cfg dflt sock conn timeout.*/
CPU_BOOLEAN NetSock_CfgTimeoutConnReqDflt(NET_SOCK_ID sock_id,
NET_ERR *p_err);
/* Cfg/set sock conn timeout.*/
CPU_BOOLEAN NetSock_CfgTimeoutConnReqSet(NET_SOCK_ID sock_id,
CPU_INT32U timeout_ms,
NET_ERR *p_err);
/* Get sock conn timeout.*/
CPU_INT32U NetSock_CfgTimeoutConnReqGet_ms(NET_SOCK_ID sock_id,
NET_ERR *p_err);
#ifdef NET_SOCK_TYPE_STREAM_MODULE_EN
/* Cfg dflt sock accept timeout.*/
CPU_BOOLEAN NetSock_CfgTimeoutConnAcceptDflt(NET_SOCK_ID sock_id,
NET_ERR *p_err);
/* Cfg/set sock accept timeout.*/
CPU_BOOLEAN NetSock_CfgTimeoutConnAcceptSet(NET_SOCK_ID sock_id,
CPU_INT32U timeout_ms,
NET_ERR *p_err);
/* Get sock accept timeout.*/
CPU_INT32U NetSock_CfgTimeoutConnAcceptGet_ms(NET_SOCK_ID sock_id,
NET_ERR *p_err);
#endif /* NET_SOCK_TYPE_STREAM_MODULE_EN */
/* Cfg dflt sock close timeout.*/
CPU_BOOLEAN NetSock_CfgTimeoutConnCloseDflt(NET_SOCK_ID sock_id,
NET_ERR *p_err);
/* Cfg/set sock close timeout.*/
CPU_BOOLEAN NetSock_CfgTimeoutConnCloseSet(NET_SOCK_ID sock_id,
CPU_INT32U timeout_ms,
NET_ERR *p_err);
/* Get sock close timeout.*/
CPU_INT32U NetSock_CfgTimeoutConnCloseGet_ms(NET_SOCK_ID sock_id,
NET_ERR *p_err);
NET_SOCK_RTN_CODE NetSock_OptGet(NET_SOCK_ID sock_id,
NET_SOCK_PROTOCOL level,
NET_SOCK_OPT_NAME opt_name,
void *popt_val,
NET_SOCK_OPT_LEN *popt_len,
NET_ERR *p_err);
NET_SOCK_RTN_CODE NetSock_OptSet(NET_SOCK_ID sock_id,
NET_SOCK_PROTOCOL level,
NET_SOCK_OPT_NAME opt_name,
const void *popt_val,
NET_SOCK_OPT_LEN opt_len,
NET_ERR *p_err);
NET_STAT_POOL NetSock_PoolStatGet(void);
void NetSock_PoolStatResetMaxUsed(void);
void NetSock_GetLocalIPAddr(NET_SOCK_ID sock_id,
CPU_INT08U *p_buf_addr,
NET_SOCK_FAMILY *p_family,
NET_ERR *p_err);
/*
*********************************************************************************************************
* INTERNAL FUNCTIONS
*********************************************************************************************************
*/
void NetSock_Init(NET_ERR *p_err);
/* --------- RX FNCTS --------- */
void NetSock_Rx(NET_BUF *pbuf,
NET_ERR *p_err);
void NetSock_CloseFromConn(NET_SOCK_ID sock_id);
void NetSock_FreeConnFromSock(NET_SOCK_ID sock_id,
NET_CONN_ID conn_id);
#ifdef NET_SOCK_TYPE_STREAM_MODULE_EN
void NetSock_ConnChildAdd(NET_SOCK_ID sock_id,
NET_CONN_ID conn_id,
NET_ERR *p_err);
void NetSock_ConnSignalReq(NET_SOCK_ID sock_id,
NET_ERR *p_err);
void NetSock_ConnSignalAccept(NET_SOCK_ID sock_id,
NET_CONN_ID conn_id,
NET_ERR *p_err);
void NetSock_ConnSignalClose(NET_SOCK_ID sock_id,
CPU_BOOLEAN data_avail,
NET_ERR *p_err);
NET_SOCK_RTN_CODE NetSock_RxDataHandlerStream(NET_SOCK_ID sock_id,
NET_SOCK *psock,
void *pdata_buf,
CPU_INT16U data_buf_len,
NET_SOCK_API_FLAGS flags,
NET_SOCK_ADDR *paddr_remote,
NET_SOCK_ADDR_LEN *paddr_len,
NET_ERR *p_err);
NET_SOCK_RTN_CODE NetSock_TxDataHandlerStream(NET_SOCK_ID sock_id,
NET_SOCK *psock,
void *p_data,
CPU_INT16U data_len,
NET_SOCK_API_FLAGS flags,
NET_ERR *p_err);
#endif /* NET_SOCK_TYPE_STREAM_MODULE_EN */
/* ---- SOCK STATUS FNCTS ----- */
CPU_BOOLEAN NetSock_IsUsed(NET_SOCK_ID sock_id,
NET_ERR *p_err);
NET_SOCK *NetSock_GetObj(NET_SOCK_ID sock_id);
NET_CONN_ID NetSock_GetConnTransportID(NET_SOCK_ID sock_id,
NET_ERR *p_err);
/* Clr sock rx Q signal. */
void NetSock_RxQ_Clr(NET_SOCK *p_sock,
NET_ERR *p_err);
/* Wait for sock rx Q signal. */
void NetSock_RxQ_Wait(NET_SOCK *p_sock,
NET_ERR *p_err);
/* Signal sock rx Q. */
void NetSock_RxQ_Signal(NET_SOCK *p_sock,
NET_ERR *p_err);
/* Abort sock rx Q. */
void NetSock_RxQ_Abort(NET_SOCK *p_sock,
NET_ERR *p_err);
/* Set dflt sock rx Q timeout. */
void NetSock_RxQ_TimeoutDflt(NET_SOCK *p_sock,
NET_ERR *p_err);
/* Set sock rx Q timeout. */
void NetSock_RxQ_TimeoutSet(NET_SOCK *p_sock,
CPU_INT32U timeout_ms,
NET_ERR *p_err);
/* Get sock rx Q timeout. */
CPU_INT32U NetSock_RxQ_TimeoutGet_ms(NET_SOCK *p_sock,
NET_ERR *p_err);
#ifdef NET_SOCK_TYPE_STREAM_MODULE_EN
/* Clr sock conn signal. */
void NetSock_ConnReqClr(NET_SOCK *p_sock,
NET_ERR *p_err);
/* Wait for sock conn signal. */
void NetSock_ConnReqWait(NET_SOCK *p_sock,
NET_ERR *p_err);
/* Signal sock conn. */
void NetSock_ConnReqSignal(NET_SOCK *p_sock,
NET_ERR *p_err);
/* Abort sock conn. */
void NetSock_ConnReqAbort(NET_SOCK *p_sock,
NET_ERR *p_err);
/* Set dflt sock conn timeout. */
void NetSock_ConnReqTimeoutDflt(NET_SOCK *p_sock,
NET_ERR *p_err);
/* Set sock conn timeout. */
void NetSock_ConnReqTimeoutSet(NET_SOCK *p_sock,
CPU_INT32U timeout_ms,
NET_ERR *p_err);
/* Get sock conn timeout. */
CPU_INT32U NetSock_ConnReqTimeoutGet_ms(NET_SOCK *p_sock,
NET_ERR *p_err);
/* Clr sock accept Q signal. */
void NetSock_ConnAcceptQ_SemClr(NET_SOCK *p_sock,
NET_ERR *p_err);
/* Wait for sock accept Q signal. */
void NetSock_ConnAcceptQ_Wait(NET_SOCK *p_sock,
NET_ERR *p_err);
/* Signal sock accept Q. */
void NetSock_ConnAcceptQ_Signal(NET_SOCK *p_sock,
NET_ERR *p_err);
/* Abort sock accept Q wait. */
void NetSock_ConnAcceptQ_Abort(NET_SOCK *p_sock,
NET_ERR *p_err);
/* Set dflt sock accept Q timeout. */
void NetSock_ConnAcceptQ_TimeoutDflt(NET_SOCK *p_sock,
NET_ERR *p_err);
/* Set sock accept Q timeout. */
void NetSock_ConnAcceptQ_TimeoutSet(NET_SOCK *p_sock,
CPU_INT32U timeout_ms,
NET_ERR *p_err);
/* Get sock accept Q timeout. */
CPU_INT32U NetSock_ConnAcceptQ_TimeoutGet_ms(NET_SOCK *p_sock,
NET_ERR *p_err);
/* Clr sock close signal. */
void NetSock_ConnCloseClr(NET_SOCK *p_sock,
NET_ERR *p_err);
/* Wait for sock close signal. */
void NetSock_ConnCloseWait(NET_SOCK *p_sock,
NET_ERR *p_err);
/* Signal sock close. */
void NetSock_ConnCloseSignal(NET_SOCK *p_sock,
NET_ERR *p_err);
/* Abort sock close. */
void NetSock_ConnCloseAbort(NET_SOCK *p_sock,
NET_ERR *p_err);
/* Set dflt sock close timeout. */
void NetSock_ConnCloseTimeoutDflt(NET_SOCK *p_sock,
NET_ERR *p_err);
/* Set sock close timeout. */
void NetSock_ConnCloseTimeoutSet(NET_SOCK *p_sock,
CPU_INT32U timeout_ms,
NET_ERR *p_err);
/* Get sock close timeout. */
CPU_INT32U NetSock_ConnCloseTimeoutGet_ms(NET_SOCK *p_sock,
NET_ERR *p_err);
#endif /* NET_SOCK_TYPE_STREAM_MODULE_EN */
/*
*********************************************************************************************************
* EXTERNAL C LANGUAGE LINKAGE END
*********************************************************************************************************
*/
#ifdef __cplusplus
}
#endif
/*
*********************************************************************************************************
*********************************************************************************************************
* CONFIGURATION ERRORS
*********************************************************************************************************
*********************************************************************************************************
*/
#ifndef NET_SOCK_NBR_SOCK
#error "NET_SOCK_NBR_SOCK not #define'd in 'net_cfg.h'"
#error " [MUST be >= NET_SOCK_NBR_MIN ]"
#error " [ && <= NET_SOCK_NBR_MAX ]"
#elif (DEF_CHK_VAL(NET_SOCK_NBR_SOCK, \
NET_SOCK_NBR_MIN, \
NET_SOCK_NBR_MAX) != DEF_OK)
#error "NET_SOCK_NBR_SOCK illegally #define'd in 'net_cfg.h'"
#error " [MUST be >= NET_SOCK_NBR_MIN ]"
#error " [ && <= NET_SOCK_NBR_MAX ]"
#endif
#ifndef NET_SOCK_CFG_SEL_EN
#error "NET_SOCK_CFG_SEL_EN not #define'd in 'net_cfg.h'"
#error " [MUST be DEF_DISABLED] "
#error " [ || DEF_ENABLED ] "
#elif ((NET_SOCK_CFG_SEL_EN != DEF_DISABLED) && \
(NET_SOCK_CFG_SEL_EN != DEF_ENABLED ))
#error "NET_SOCK_CFG_SEL_EN illegally #define'd in 'net_cfg.h'"
#error " [MUST be DEF_DISABLED] "
#error " [ || DEF_ENABLED ] "
#endif
#ifndef NET_SOCK_CFG_RX_Q_SIZE_OCTET
#error "NET_SOCK_CFG_RX_Q_SIZE_OCTET not #define'd in 'net_cfg.h' "
#error " [MUST be >= NET_SOCK_DATA_SIZE_MIN]"
#error " [ && <= NET_SOCK_DATA_SIZE_MIN]"
#elif (DEF_CHK_VAL(NET_SOCK_CFG_RX_Q_SIZE_OCTET, \
NET_SOCK_DATA_SIZE_MIN, \
NET_SOCK_DATA_SIZE_MAX) != DEF_OK)
#error "NET_SOCK_CFG_RX_Q_SIZE_OCTET illegally #define'd in 'net_cfg.h' "
#error " [MUST be >= NET_SOCK_DATA_SIZE_MIN]"
#error " [ && <= NET_SOCK_DATA_SIZE_MIN]"
#endif
#ifndef NET_SOCK_CFG_TX_Q_SIZE_OCTET
#error "NET_SOCK_CFG_TX_Q_SIZE_OCTET not #define'd in 'net_cfg.h' "
#error " [MUST be >= NET_SOCK_DATA_SIZE_MIN]"
#error " [ && <= NET_SOCK_DATA_SIZE_MIN]"
#elif (DEF_CHK_VAL(NET_SOCK_CFG_TX_Q_SIZE_OCTET, \
NET_SOCK_DATA_SIZE_MIN, \
NET_SOCK_DATA_SIZE_MAX) != DEF_OK)
#error "NET_SOCK_CFG_TX_Q_SIZE_OCTET illegally #define'd in 'net_cfg.h' "
#error " [MUST be >= NET_SOCK_DATA_SIZE_MIN]"
#error " [ && <= NET_SOCK_DATA_SIZE_MIN]"
#endif
#ifndef NET_SOCK_DFLT_TIMEOUT_RX_Q_MS
#error "NET_SOCK_DFLT_TIMEOUT_RX_Q_MS not #define'd in 'net_cfg.h' "
#error " [MUST be >= NET_TIMEOUT_MIN_mS] "
#error " [ && <= NET_TIMEOUT_MAX_mS] "
#error " [ || == NET_TMR_TIME_INFINITE]"
#elif ((DEF_CHK_VAL(NET_SOCK_DFLT_TIMEOUT_RX_Q_MS, \
NET_TIMEOUT_MIN_mS, \
NET_TIMEOUT_MAX_mS) != DEF_OK) && \
(!((DEF_CHK_VAL_MIN(NET_SOCK_DFLT_TIMEOUT_RX_Q_MS, 0) == DEF_OK) && \
(NET_SOCK_DFLT_TIMEOUT_RX_Q_MS == NET_TMR_TIME_INFINITE))))
#error "NET_SOCK_DFLT_TIMEOUT_RX_Q_MS illegally #define'd in 'net_cfg.h' "
#error " [MUST be >= NET_TIMEOUT_MIN_mS] "
#error " [ && <= NET_TIMEOUT_MAX_mS] "
#error " [ || == NET_TMR_TIME_INFINITE]"
#endif
#ifdef NET_SOCK_TYPE_STREAM_MODULE_EN
#ifndef NET_SOCK_DFLT_TIMEOUT_CONN_REQ_MS
#error "NET_SOCK_DFLT_TIMEOUT_CONN_REQ_MS not #define'd in 'net_cfg.h' "
#error " [MUST be >= NET_TIMEOUT_MIN_mS] "
#error " [ && <= NET_TIMEOUT_MAX_mS] "
#error " [ || == NET_TMR_TIME_INFINITE]"
#elif ((DEF_CHK_VAL(NET_SOCK_DFLT_TIMEOUT_CONN_REQ_MS, \
NET_TIMEOUT_MIN_mS, \
NET_TIMEOUT_MAX_mS) != DEF_OK) && \
(!((DEF_CHK_VAL_MIN(NET_SOCK_DFLT_TIMEOUT_CONN_REQ_MS, 0) == DEF_OK) && \
(NET_SOCK_DFLT_TIMEOUT_CONN_REQ_MS == NET_TMR_TIME_INFINITE))))
#error "NET_SOCK_DFLT_TIMEOUT_CONN_REQ_MS illegally #define'd in 'net_cfg.h' "
#error " [MUST be >= NET_TIMEOUT_MIN_mS] "
#error " [ && <= NET_TIMEOUT_MAX_mS] "
#error " [ || == NET_TMR_TIME_INFINITE]"
#endif
#ifndef NET_SOCK_DFLT_TIMEOUT_CONN_ACCEPT_MS
#error "NET_SOCK_DFLT_TIMEOUT_CONN_ACCEPT_MS not #define'd in 'net_cfg.h' "
#error " [MUST be >= NET_TIMEOUT_MIN_mS] "
#error " [ && <= NET_TIMEOUT_MAX_mS] "
#error " [ || == NET_TMR_TIME_INFINITE]"
#elif ((DEF_CHK_VAL(NET_SOCK_DFLT_TIMEOUT_CONN_ACCEPT_MS, \
NET_TIMEOUT_MIN_mS, \
NET_TIMEOUT_MAX_mS) != DEF_OK) && \
(!((DEF_CHK_VAL_MIN(NET_SOCK_DFLT_TIMEOUT_CONN_ACCEPT_MS, 0) == DEF_OK) && \
(NET_SOCK_DFLT_TIMEOUT_CONN_ACCEPT_MS == NET_TMR_TIME_INFINITE))))
#error "NET_SOCK_DFLT_TIMEOUT_CONN_ACCEPT_MS illegally #define'd in 'net_cfg.h' "
#error " [MUST be >= NET_TIMEOUT_MIN_mS] "
#error " [ && <= NET_TIMEOUT_MAX_mS] "
#error " [ || == NET_TMR_TIME_INFINITE]"
#endif
#if 0
#ifndef NET_SOCK_DFLT_TIMEOUT_CONN_CLOSE_MS
#error "NET_SOCK_DFLT_TIMEOUT_CONN_CLOSE_MS not #define'd in 'net_cfg.h' "
#error " [MUST be >= NET_TIMEOUT_MIN_mS] "
#error " [ && <= NET_TIMEOUT_MAX_mS] "
#error " [ || == NET_TMR_TIME_INFINITE]"
#elif ((DEF_CHK_VAL(NET_SOCK_DFLT_TIMEOUT_CONN_CLOSE_MS, \
NET_TIMEOUT_MIN_mS, \
NET_TIMEOUT_MAX_mS) != DEF_OK) && \
(!((DEF_CHK_VAL_MIN(NET_SOCK_DFLT_TIMEOUT_CONN_CLOSE_MS, 0) == DEF_OK) && \
(NET_SOCK_DFLT_TIMEOUT_CONN_CLOSE_MS == NET_TMR_TIME_INFINITE))))
#error "NET_SOCK_DFLT_TIMEOUT_CONN_CLOSE_MS illegally #define'd in 'net_cfg.h' "
#error " [MUST be >= NET_TIMEOUT_MIN_mS]"
#error " [ && <= NET_TIMEOUT_MAX_mS]"
#error " [ || == NET_TMR_TIME_INFINITE]"
#endif
#endif
#endif
/*
*********************************************************************************************************
*********************************************************************************************************
* MODULE END
*********************************************************************************************************
*********************************************************************************************************
*/
#endif /* NET_SOCK_MODULE_PRESENT */