1783 lines
86 KiB
C
1783 lines
86 KiB
C
/*
|
||
*********************************************************************************************************
|
||
* 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 */
|