📄 net_sock.c
字号:
void *p_data,
CPU_INT16S data_len,
CPU_INT16S flags,
NET_SOCK_ADDR *paddr_remote,
NET_ERR *perr);
#if (NET_SOCK_CFG_TYPE_STREAM_EN == DEF_ENABLED)
static NET_SOCK_RTN_CODE NetSock_TxDataHandlerStream (NET_SOCK_ID sock_id,
NET_SOCK *psock,
void *p_data,
CPU_INT16S data_len,
CPU_INT16S flags,
NET_ERR *perr);
#endif
/*$PAGE*/
/* ---------- SOCK FNCTS ---------- */
static NET_SOCK *NetSock_Get (NET_ERR *perr);
#if (NET_SOCK_CFG_TYPE_STREAM_EN == DEF_ENABLED)
static NET_CONN_ID NetSock_GetConnTransport (NET_SOCK *psock,
NET_ERR *perr);
#endif
static void NetSock_CloseHandler (NET_SOCK *psock,
CPU_BOOLEAN close_conn,
CPU_BOOLEAN close_conn_transport);
static void NetSock_CloseSock (NET_SOCK *psock,
CPU_BOOLEAN close_conn,
CPU_BOOLEAN close_conn_transport);
static void NetSock_CloseSockHandler (NET_SOCK *psock,
CPU_BOOLEAN close_conn,
CPU_BOOLEAN close_conn_transport,
NET_ERR *perr);
static void NetSock_CloseSockFromClose (NET_SOCK *psock);
static void NetSock_CloseConn (NET_CONN_ID conn_id);
static void NetSock_CloseConnFree (NET_CONN_ID conn_id);
static void NetSock_Free (NET_SOCK *psock);
static void NetSock_FreeHandler (NET_SOCK *psock,
NET_ERR *perr);
static void NetSock_FreeAddr (NET_SOCK *psock);
static void NetSock_FreeBufQ (NET_BUF **pbuf_q_head,
NET_BUF **pbuf_q_tail);
static void NetSock_Clr (NET_SOCK *psock);
#if (NET_SOCK_CFG_TYPE_STREAM_EN == DEF_ENABLED)
static void NetSock_Copy (NET_SOCK *psock_dest,
NET_SOCK *psock_src);
#endif
static void NetSock_Discard (NET_SOCK *psock);
/* ----- RANDOM PORT Q FNCTS ------ */
static NET_PORT_NBR NetSock_RandomPortNbrGet (NET_ERR *perr);
static void NetSock_RandomPortNbrFree (NET_PORT_NBR port_nbr,
NET_ERR *perr);
static CPU_BOOLEAN NetSock_RandomPortNbrChkRange (NET_PORT_NBR port_nbr);
#if (NET_ERR_CFG_ARG_CHK_DBG_EN == DEF_ENABLED)
static CPU_BOOLEAN NetSock_RandomPortNbrSrch (NET_PORT_NBR port_nbr);
#endif
/*
*********************************************************************************************************
* LOCAL CONFIGURATION ERRORS
*********************************************************************************************************
*/
/*$PAGE*/
/*
*********************************************************************************************************
* NetSock_Init()
*
* Description : (1) Initialize Network Socket Layer :
*
* (a) Perform Socket/OS initialization
* (b) Initialize socket pool
* (c) Initialize socket table
* (d) Initialize random port number queue
* (e) Initialize socket statistics & error counters
*
*
* Argument(s) : perr Pointer to variable that will receive the return error code from this function :
*
* NET_SOCK_ERR_NONE Socket layer successfully initialized.
*
* ----- RETURNED BY NetOS_Sock_Init() : -----
* NET_OS_ERR_INIT_SOCK_RX_Q Socket receive queue(s)
* NOT successfully initialized.
* NET_OS_ERR_INIT_SOCK_RX_Q_TIMEOUT Socket receive queue timeout(s)
* NOT successfully configured.
* NET_OS_ERR_INIT_SOCK_CONN Socket connection request signal(s)
* NOT successfully initialized.
* NET_OS_ERR_INIT_SOCK_CONN_TIMEOUT Socket connection request signal timeout(s)
* NOT successfully configured.
* NET_OS_ERR_INIT_SOCK_ACCEPT Socket connection accept signal(s)
* NOT successfully initialized.
* NET_OS_ERR_INIT_SOCK_ACCEPT_TIMEOUT Socket connection accept signal timeout(s)
* NOT successfully configured.
* NET_OS_ERR_INIT_SOCK_CLOSE Socket connection close signal(s)
* NOT successfully initialized.
* NET_OS_ERR_INIT_SOCK_CLOSE_TIMEOUT Socket connection close signal timeout(s)
* NOT successfully configured.
*
* Return(s) : none.
*
* Caller(s) : Net_Init().
*
* This function is an INTERNAL network protocol suite function & MUST NOT be called by
* application function(s).
*
* Note(s) : (2) Socket pool MUST be initialized PRIOR to initializing the pool with pointers to sockets.
*********************************************************************************************************
*/
/*$PAGE*/
void NetSock_Init (NET_ERR *perr)
{
NET_SOCK *psock;
NET_PORT_NBR *pport_nbr_q;
NET_PORT_NBR port_nbr_q_nbr;
NET_SOCK_QTY i;
NET_PORT_NBR_QTY j;
NET_ERR stat_err;
/* --------------- PERFORM SOCK/OS INIT --------------- */
NetOS_Sock_Init(perr); /* Create sock obj(s). */
if (*perr != NET_OS_ERR_NONE) {
return;
}
/* --------------- INIT SOCK POOL/STATS --------------- */
NetSock_PoolPtr = (NET_SOCK *)0; /* See Note #2. */
NetStat_PoolInit((NET_STAT_POOL *)&NetSock_PoolStat,
(NET_STAT_POOL_QTY) NET_SOCK_CFG_NBR_SOCK,
(NET_ERR *)&stat_err);
/* ------------------ INIT SOCK TBL ------------------- */
psock = &NetSock_Tbl[0];
for (i = 0; i < NET_SOCK_CFG_NBR_SOCK; i++) {
psock->Type = NET_SOCK_TYPE_SOCK; /* Init each sock type/id--NEVER modify. */
psock->ID = (NET_SOCK_ID)i;
psock->State = NET_SOCK_STATE_FREE; /* Init each sock as free/NOT used. */
psock->Flags = NET_SOCK_FLAG_NONE;
#if (NET_DBG_CFG_MEM_CLR_EN == DEF_ENABLED)
NetSock_Clr(psock);
#endif
psock->NextSockPtr = (void *)NetSock_PoolPtr; /* Free each sock to sock pool (see Note #2). */
NetSock_PoolPtr = psock;
psock++;
}
/* -------------- INIT RANDOM PORT NBR Q -------------- */
pport_nbr_q = &NetSock_RandomPortNbrQ[0];
port_nbr_q_nbr = NET_SOCK_CFG_PORT_NBR_RANDOM_BASE;
for (j = 0; j < NET_SOCK_PORT_NBR_RANDOM_NBR; j++) {
*pport_nbr_q = port_nbr_q_nbr;
port_nbr_q_nbr++;
pport_nbr_q++;
}
NetSock_RandomPortNbrQ_HeadIx = 0;
NetSock_RandomPortNbrQ_TailIx = 0;
NetSock_RandomPortNbrQ_NbrUsed = 0;
/*$PAGE*/
/* ------------ INIT SOCK STAT & ERR CTRS ------------- */
#if (NET_CTR_CFG_STAT_EN == DEF_ENABLED)
NetSock_StatRxPktCtr = 0;
NetSock_StatRxPktProcessedCtr = 0;
#endif
#if (NET_CTR_CFG_ERR_EN == DEF_ENABLED)
NetSock_ErrNullPtrCtr = 0;
NetSock_ErrNullSizeCtr = 0;
NetSock_ErrNoneAvailCtr = 0;
NetSock_ErrNotUsedCtr = 0;
NetSock_ErrCloseCtr = 0;
NetSock_ErrInvalidFamilyCtr = 0;
NetSock_ErrInvalidProtocolCtr = 0;
NetSock_ErrInvalidSockTypeCtr = 0;
NetSock_ErrInvalidSockCtr = 0;
NetSock_ErrInvalidFlagsCtr = 0;
NetSock_ErrInvalidOpCtr = 0;
NetSock_ErrInvalidStateCtr = 0;
NetSock_ErrInvalidAddrCtr = 0;
NetSock_ErrInvalidAddrLenCtr = 0;
NetSock_ErrInvalidAddrInUseCtr = 0;
NetSock_ErrInvalidPortNbrCtr = 0;
NetSock_ErrInvalidConnInUseCtr = 0;
#if (NET_SOCK_CFG_TYPE_STREAM_EN == DEF_ENABLED)
NetSock_ErrConnAcceptQ_NoneAvailCtr = 0;
#endif
NetSock_ErrRandomPortNbrNoneAvailCtr = 0;
NetSock_ErrRxDestCtr = 0;
NetSock_ErrRxPktDiscardedCtr = 0;
#if (NET_ERR_CFG_ARG_CHK_EXT_EN == DEF_ENABLED)
NetSock_ErrTxInvalidSizeCtr = 0;
#endif
#if (NET_ERR_CFG_ARG_CHK_DBG_EN == DEF_ENABLED)
NetSock_ErrInvalidTypeCtr = 0;
NetSock_ErrInvalidConnCtr = 0;
NetSock_ErrRxInvalidBufIxCtr = 0;
#if (NET_SOCK_CFG_TYPE_STREAM_EN == DEF_ENABLED)
NetSock_ErrConnAcceptQ_MaxCtr = 0;
#endif
NetSock_ErrRandomPortNbrQ_UsedCtr = 0;
NetSock_ErrRandomPortNbrQ_NbrInQ_Ctr = 0;
#endif
#endif
*perr = NET_SOCK_ERR_NONE;
}
/*$PAGE*/
/*
*********************************************************************************************************
* NetSock_Rx()
*
* Description : (1) Process received socket data & forward to application :
*
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -