📄 net_ip.c
字号:
return; /* Prevent 'break NOT reachable' compiler warning. */
}
}
/*$PAGE*/
/*
*********************************************************************************************************
* NetIP_Tx()
*
* Description : (1) Prepare & transmit packets from transport protocol layers to network interface layer :
*
* (a) Validate transmit packet
* (b) Prepare & transmit packet datagram
* (c) Update transmit statistics
*
*
* Argument(s) : pbuf Pointer to network buffer to transmit IP packet.
*
* addr_src Source IP address.
*
* addr_dest Destination IP address.
*
* TOS Specific TOS to transmit IP packet
* (see 'net_ip.h IP HEADER TYPE OF SERVICE (TOS) DEFINES').
*
* TTL Specific TTL to transmit IP packet (see RFC #1122, Section 3.2.1.7) :
*
* NET_IP_HDR_TTL_MIN 1 minimum TTL transmit value
* NET_IP_HDR_TTL_MAX 255 maximum TTL transmit value
* NET_IP_HDR_TTL_DFLT default TTL transmit value
* NET_IP_HDR_TTL_NONE 0 replace with default TTL
*
* flags Flags to select transmit options; bit-field flags logically OR'd :
*
* NET_IP_FLAG_NONE No IP transmit flags selected.
* NET_IP_FLAG_TX_DONT_FRAG Set IP 'Don't Frag' flag.
*
* popts Pointer to one or more IP options configuration data structures :
*
* NULL NO IP transmit options configuration.
* NET_IP_OPT_CFG_ROUTE_TS Route &/or Internet Timestamp options configuration.
* NET_IP_OPT_CFG_SECURITY Security options configuration
* (see 'net_ip.c Note #1f').
*
* perr Pointer to variable that will receive the return error code from this function :
*
* NET_IP_ERR_NONE IP datagram(s) successfully prepared & transmitted
* to network interface layer.
* NET_ERR_INIT_INCOMPLETE Network initialization NOT complete.
*
* ------- RETURNED BY NetIP_TxPktDiscard() : -------
* NET_ERR_TX Transmit error; packet discarded.
*
* Return(s) : none.
*
* Caller(s) : NetICMP_TxMsgErr(),
* NetICMP_TxMsgReq(),
* NetICMP_TxMsgReply(),
* NetUDP_Tx(),
* NetTCP_TxPkt().
*
* This function is an INTERNAL network protocol suite function & SHOULD NOT be called by
* application function(s).
*
* Note(s) : (2) NetIP_Tx() blocked until network initialization completes.
*
* (3) Network buffer already freed by lower layer; only increment error counter.
*********************************************************************************************************
*/
/*$PAGE*/
void NetIP_Tx (NET_BUF *pbuf,
NET_IP_ADDR addr_src,
NET_IP_ADDR addr_dest,
NET_IP_TOS TOS,
NET_IP_TTL TTL,
CPU_INT16U flags,
void *popts,
NET_ERR *perr)
{
#if (((NET_CTR_CFG_STAT_EN == DEF_ENABLED) || \
(NET_CTR_CFG_ERR_EN == DEF_ENABLED)) && \
(CPU_CFG_CRITICAL_METHOD == CPU_CRITICAL_METHOD_STATUS_LOCAL))
CPU_SR cpu_sr;
#endif
NET_BUF_HDR *pbuf_hdr;
#if (NET_ERR_CFG_ARG_CHK_EXT_EN == DEF_ENABLED)
if (Net_InitDone != DEF_YES) { /* If init NOT complete, exit tx (see Note #2). */
*perr = NET_ERR_INIT_INCOMPLETE;
return;
}
#endif
#if (NET_ERR_CFG_ARG_CHK_DBG_EN == DEF_ENABLED) /* ------------------- VALIDATE PTR ------------------- */
if (pbuf == (NET_BUF *)0) {
NetIP_TxPktDiscard(pbuf, perr);
NET_CTR_ERR_INC(NetIP_ErrNullPtrCtr);
return;
}
#endif
/* ---------------- VALIDATE TX IP PKT ---------------- */
pbuf_hdr = &pbuf->Hdr;
#if (NET_ERR_CFG_ARG_CHK_DBG_EN == DEF_ENABLED)
NetIP_TxPktValidate(pbuf,
pbuf_hdr,
addr_src,
addr_dest,
TOS,
TTL,
flags,
popts,
perr);
switch (*perr) {
case NET_IP_ERR_NONE:
break;
case NET_ERR_INVALID_PROTOCOL:
case NET_BUF_ERR_INVALID_IX:
case NET_IP_ERR_INVALID_LEN_DATA:
case NET_IP_ERR_INVALID_TOS:
case NET_IP_ERR_INVALID_ADDR_SRC:
case NET_IP_ERR_INVALID_ADDR_DEST:
case NET_IP_ERR_INVALID_FLAG:
case NET_IP_ERR_INVALID_OPT_TYPE:
case NET_IP_ERR_INVALID_OPT_LEN:
case NET_IP_ERR_INVALID_OPT_CFG:
case NET_IP_ERR_INVALID_OPT_ROUTE:
default:
NetIP_TxPktDiscard(pbuf, perr);
return; /* Prevent 'break NOT reachable' compiler warning. */
}
#endif
/*$PAGE*/
/* -------------------- TX IP PKT --------------------- */
NetIP_TxPkt(pbuf,
pbuf_hdr,
addr_src,
addr_dest,
TOS,
TTL,
flags,
popts,
perr);
/* ----------------- UPDATE TX STATS ------------------ */
switch (*perr) {
case NET_IP_ERR_NONE:
case NET_IF_ERR_NONE:
NET_CTR_STAT_INC(NetIP_StatTxDatagramCtr);
*perr = NET_IP_ERR_NONE;
break;
case NET_ERR_RX:
case NET_ERR_TX:
NET_CTR_ERR_INC(NetIP_ErrTxPktDiscardedCtr); /* See Note #3. */
*perr = NET_ERR_TX;
return; /* Prevent 'break NOT reachable' compiler warning. */
case NET_ERR_INIT_INCOMPLETE:
case NET_ERR_INVALID_PROTOCOL:
case NET_IP_ERR_INVALID_LEN_HDR:
case NET_IP_ERR_INVALID_FRAG:
case NET_IP_ERR_INVALID_OPT_TYPE:
case NET_IP_ERR_INVALID_OPT_LEN:
case NET_IP_ERR_TX_DEST_INVALID:
case NET_IP_ERR_INVALID_ADDR_HOST:
case NET_IP_ERR_INVALID_ADDR_NET:
case NET_IP_ERR_INVALID_ADDR_GATEWAY:
case NET_BUF_ERR_INVALID_IX:
case NET_BUF_ERR_INVALID_LEN:
case NET_UTIL_ERR_NULL_PTR:
case NET_UTIL_ERR_NULL_SIZE:
default:
NetIP_TxPktDiscard(pbuf, perr);
return; /* Prevent 'break NOT reachable' compiler warning. */
}
}
/*$PAGE*/
/*
*********************************************************************************************************
* NetIP_ReTx()
*
* Description : (1) Prepare & re-transmit packets from transport protocol layers to network interface layer :
*
* (a) Validate re-transmit packet
* (b) Prepare & re-transmit packet datagram
* (c) Update re-transmit statistics
*
*
* Argument(s) : pbuf Pointer to network buffer to re-transmit IP packet.
*
* perr Pointer to variable that will receive the return error code from this function :
*
* NET_IP_ERR_NONE IP datagram(s) successfully prepared & re-transmitted
* to network interface layer.
* NET_ERR_INIT_INCOMPLETE Network initialization NOT complete.
*
* -------- RETURNED BY NetIP_TxPktDiscard() : ---------
* NET_ERR_TX Transmit error; packet discarded.
*
* Return(s) : none.
*
* Caller(s) : NetTCP_TxConnReTxQ_Timeout().
*
* This function is an INTERNAL network protocol suite function & SHOULD NOT be called by
* application function(s).
*
* Note(s) : (2) NetIP_ReTx() blocked until network initialization completes.
*
* (3) Network buffer already freed by lower layer; only increment error counter.
*********************************************************************************************************
*/
/*$PAGE*/
void NetIP_ReTx (NET_BUF *pbuf,
NET_ERR *perr)
{
#if (((NET_CTR_CFG_STAT_EN == DEF_ENABLED) || \
(NET_CTR_CFG_ERR_EN == DEF_ENABLED)) && \
(CPU_CFG_CRITICAL_METHOD == CPU_CRITICAL_METHOD_STATUS_LOCAL))
CPU_SR cpu_sr;
#endif
NET_BUF_HDR *pbuf_hdr;
#if (NET_ERR_CFG_ARG_CHK_EXT_EN == DEF_ENABLED)
if (Net_InitDone != DEF_YES) { /* If init NOT complete, exit tx (see Note #2). */
*perr = NET_ERR_INIT_INCOMPLETE;
return;
}
#endif
#if (NET_ERR_CFG_ARG_CHK_DBG_EN == DEF_ENABLED) /* ------------------- VALIDATE PTR ------------------- */
if (pbuf == (NET_BUF *)0) {
NetIP_TxPktDiscard(pbuf, perr);
NET_CTR_ERR_INC(NetIP_ErrNullPtrCtr);
return;
}
#endif
/* -------------- VALIDATE RE-TX IP PKT --------------- */
pbuf_hdr = &pbuf->Hdr;
#if (NET_ERR_CFG_ARG_CHK_DBG_EN == DEF_ENABLED)
if (pbuf_hdr->IP_HdrIx == NET_BUF_IX_NONE) {
NetIP_TxPktDiscard(pbuf, perr);
NET_CTR_ERR_INC(NetIP_ErrTxInvalidBufIxCtr);
return;
}
#endif
/* ------------------- RE-TX IP PKT ------------------- */
NetIP_ReTxPkt(pbuf,
pbuf_hdr,
perr);
/* ---------------- UPDATE RE-TX STATS ---------------- */
switch (*perr) {
case NET_IP_ERR_NONE:
case NET_IF_ERR_NONE:
NET_CTR_STAT_INC(NetIP_StatTxDatagramCtr);
*perr = NET_IP_ERR_NONE;
break;
case NET_ERR_RX:
case NET_ERR_TX:
NET_CTR_ERR_INC(NetIP_ErrTxPktDiscardedCtr); /* See Note #3. */
*perr = NET_ERR_TX;
return; /* Prevent 'break NOT reachable' compiler warning. */
case NET_ERR_INIT_INCOMPLETE:
case NET_IP_ERR_TX_DEST_INVALID:
case NET_IP_ERR_INVALID_ADDR_HOST:
case NET_IP_ERR_INVALID_ADDR_NET:
case NET_IP_ERR_INVALID_ADDR_GATEWAY:
case NET_UTIL_ERR_NULL_PTR:
case NET_UTIL_ERR_NULL_SIZE:
default:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -