⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 net_ip.c

📁 ucos的tcpip协议占
💻 C
📖 第 1 页 / 共 5 页
字号:
* Description : (1) Initialize Internet Protocol Layer :
*
*                   (a) Initialize IP pointers   & counters
*                   (b) Initialize IP statistics & error counters
*
*
* Argument(s) : none.
*
* 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)     : none.
*********************************************************************************************************
*/

void  NetIP_Init (void)
{
                                                                /* ---------------- INIT IP PTRS/CTRS ----------------- */
                                                                /* Ptrs used to update Rx Frag Reasm Lists.             */
    NetIP_FragReasmListsHead            = (NET_BUF *)0;
    NetIP_FragReasmListsTail            = (NET_BUF *)0;

    NetIP_TxIDCtr                       =  NET_IP_ID_INIT;


                                                                /* ------------- INIT IP STAT & ERR CTRS -------------- */
#if (NET_CTR_CFG_STAT_EN == DEF_ENABLED)
    NetIP_StatRxPktCtr                  =  0;
    NetIP_StatRxDatagramProcessedCtr    =  0;

    NetIP_StatRxDestLocalCtr            =  0;
    NetIP_StatRxDestBroadcastCtr        =  0;

    NetIP_StatRxFragCtr                 =  0;
    NetIP_StatRxFragDatagramReasmCtr    =  0;

    NetIP_StatTxDatagramCtr             =  0;
    NetIP_StatTxDestLocalCtr            =  0;
    NetIP_StatTxDestBroadcastCtr        =  0;
#endif


#if (NET_CTR_CFG_ERR_EN == DEF_ENABLED)
    NetIP_ErrNullPtrCtr                 =  0;


    NetIP_ErrCfgAddrThisHostCtr         =  0;
    NetIP_ErrCfgAddrDfltGatewayCtr      =  0;


    NetIP_ErrRxHdrVerCtr                =  0;
    NetIP_ErrRxHdrLenCtr                =  0;
    NetIP_ErrRxHdrTotLenCtr             =  0;
    NetIP_ErrRxHdrFlagsCtr              =  0;
    NetIP_ErrRxHdrFragCtr               =  0;
    NetIP_ErrRxHdrProtocolCtr           =  0;
    NetIP_ErrRxHdrChkSumCtr             =  0;
    NetIP_ErrRxHdrAddrSrcCtr            =  0;
    NetIP_ErrRxHdrOptsCtr               =  0;
    NetIP_ErrRxHdrOptsBufNoneAvailCtr   =  0;
    NetIP_ErrRxHdrOptsBufWrCtr          =  0;

    NetIP_ErrRxDestCtr                  =  0;
    NetIP_ErrRxDestBroadcastCtr         =  0;

    NetIP_ErrRxFragDiscardedCtr         =  0;
    NetIP_ErrRxFragDatagramDiscardedCtr =  0;
    NetIP_ErrRxFragDatagramTimeoutCtr   =  0;

    NetIP_ErrRxPktDiscardedCtr          =  0;


    NetIP_ErrTxProtocolCtr              =  0;
    NetIP_ErrTxOptTypeCtr               =  0;

    NetIP_ErrTxDestCtr                  =  0;

    NetIP_ErrTxPktDiscardedCtr          =  0;

/*$PAGE*/
#if (NET_ERR_CFG_ARG_CHK_DBG_EN == DEF_ENABLED)
    NetIP_ErrRxInvalidBufIxCtr          =  0;

    NetIP_ErrRxHdrDataLenCtr            =  0;

    NetIP_ErrRxFragFlagsCtr             =  0;
    NetIP_ErrRxFragOffsetCtr            =  0;
    NetIP_ErrRxFragSizeCtr              =  0;


    NetIP_ErrTxInvalidBufIxCtr          =  0;

    NetIP_ErrTxHdrTOS_Ctr               =  0;
    NetIP_ErrTxHdrDataLenCtr            =  0;
    NetIP_ErrTxHdrAddrSrcCtr            =  0;
    NetIP_ErrTxHdrAddrDestCtr           =  0;
    NetIP_ErrTxHdrFlagsCtr              =  0;
    NetIP_ErrTxHdrOptLenCtr             =  0;
    NetIP_ErrTxHdrOptCfgCtr             =  0;
#endif


#if 0                                                           /* #### NOT currently implemented.                      */
                                                                /* See 'net_ip.c  Note #1e'.                            */
    NetIP_ErrTxFragDiscardedCtr         =  0;
    NetIP_ErrTxFragDiscardedDontFragCtr =  0;
#endif
#endif
}


/*$PAGE*/
/*
*********************************************************************************************************
*                                       NetIP_CfgAddrThisHost()
*
* Description : (1) Configure this host's IP address :
*
*                   (a) Validate  this host's IP address & subnet mask
*                   (b) Configure this host's IP address,  subnet mask, & subnet
*
*
* Argument(s) : addr_host           Desired IP address             for this host (see Note #2).
*
*               addr_subnet_mask    Desired IP address subnet mask for this host (see Note #2).
*
* Return(s)   : DEF_OK,   if valid host IP address & subnet mask configured.
*
*               DEF_FAIL, otherwise.
*
* Caller(s)   : Net_InitDflt() [see Note #3],
*               Application.
*
*               This function is a network protocol suite application interface (API) function & MAY be 
*               called by application function(s).
*
* Note(s)     : (2) Host IP addresses MUST be in host-order.
*
*               (3) The default initialization configuration by Net_InitDflt() is invalid & forces the
*                   developer or higher-layer protocol application to configure a valid IP address &
*                   subnet mask.
*********************************************************************************************************
*/

CPU_BOOLEAN  NetIP_CfgAddrThisHost (NET_IP_ADDR  addr_host,
                                    NET_IP_ADDR  addr_subnet_mask)
{
#if (CPU_CFG_CRITICAL_METHOD == CPU_CRITICAL_METHOD_STATUS_LOCAL)
    CPU_SR       cpu_sr;
#endif
    CPU_BOOLEAN  valid_addr;
    CPU_BOOLEAN  valid_cfg;


    valid_addr =  NetIP_IsValidAddrThisHost(addr_host, addr_subnet_mask);
    valid_cfg  = (valid_addr == DEF_YES) ? DEF_OK : DEF_FAIL;

    if (valid_cfg == DEF_OK) {
        CPU_CRITICAL_ENTER();
        NetIP_AddrThisHost               =  addr_host;
        NetIP_AddrThisHostNetOrder       = (NET_IP_ADDR) NET_UTIL_HOST_TO_NET_32(addr_host);
        NetIP_AddrThisHostSubnetMask     = (NET_IP_ADDR) addr_subnet_mask;
        NetIP_AddrThisHostSubnetMaskHost = (NET_IP_ADDR)~addr_subnet_mask;
        NetIP_AddrThisHostSubnetNet      =  addr_host &  addr_subnet_mask;
        CPU_CRITICAL_EXIT();

    } else {
        NET_CTR_ERR_INC(NetIP_ErrCfgAddrThisHostCtr);
        CPU_CRITICAL_ENTER();
        NetIP_AddrThisHost               = (NET_IP_ADDR)NET_IP_ADDR_NONE;
        NetIP_AddrThisHostNetOrder       = (NET_IP_ADDR)NET_UTIL_HOST_TO_NET_32(NET_IP_ADDR_NONE);
        NetIP_AddrThisHostSubnetMask     = (NET_IP_ADDR)NET_IP_ADDR_NONE;
        NetIP_AddrThisHostSubnetMaskHost = (NET_IP_ADDR)NET_IP_ADDR_NONE;
        NetIP_AddrThisHostSubnetNet      = (NET_IP_ADDR)NET_IP_ADDR_NONE;
        CPU_CRITICAL_EXIT();
    }

    return (valid_cfg);
}


/*$PAGE*/
/*
*********************************************************************************************************
*                                     NetIP_CfgAddrDfltGateway()
*
* Description : (1) Configure this host's default gateway IP address :
*
*                   (a) Validate  this host's default gateway IP address
*                   (b) Configure this host's default gateway IP address
*
*
* Argument(s) : addr_dflt_gateway   Desired IP address for this host's default gateway (see Note #2).
*
* Return(s)   : DEF_OK,   if valid default gateway IP address configured.
*
*               DEF_FAIL, otherwise.
*
* Caller(s)   : Net_InitDflt() [see Note #3],
*               Application.
*
*               This function is a network protocol suite application interface (API) function & MAY be 
*               called by application function(s).
*
* Note(s)     : (2) Default gateway address MUST be in host-order.
*
*               (3) The default initialization configuration by Net_InitDflt() is invalid & forces the
*                   developer or higher-layer protocol application to configure a valid default gateway
*                   IP address.
*
*               (4) (a) RFC #1122, Section 3.3.1.1. states that "the host IP layer MUST operate correctly
*                       in a minimal network environment, and in particular, when there are no gateways".
*
*                       In other words, a host on an isolated network should be able to correctly operate
*                       & communicate with all other hosts on its local network without need of a gateway
*                       or configuration of a gateway.
*
*                   (b) However, if this host's network interface is a network type (versus a serial 
*                       connection) AND the default gateway is configured with an invalid IP address 
*                       NOT on the local network, then ALL non-local-network destination IP datagrams 
*                       will be discarded at the physical link-layer/network interface.
*********************************************************************************************************
*/

CPU_BOOLEAN  NetIP_CfgAddrDfltGateway (NET_IP_ADDR  addr_dflt_gateway)
{
#if (CPU_CFG_CRITICAL_METHOD == CPU_CRITICAL_METHOD_STATUS_LOCAL)
    CPU_SR       cpu_sr;
#endif
    CPU_BOOLEAN  valid_addr;
    CPU_BOOLEAN  valid_cfg;


    valid_addr =  NetIP_IsValidAddrHost(addr_dflt_gateway);
    valid_cfg  = (valid_addr == DEF_YES) ? DEF_OK : DEF_FAIL;

    if (valid_cfg == DEF_OK) {
        CPU_CRITICAL_ENTER();
        NetIP_AddrDfltGateway = (NET_IP_ADDR)addr_dflt_gateway;
        CPU_CRITICAL_EXIT();

    } else {
        NET_CTR_ERR_INC(NetIP_ErrCfgAddrDfltGatewayCtr);
        CPU_CRITICAL_ENTER();
        NetIP_AddrDfltGateway = (NET_IP_ADDR)NET_IP_ADDR_NONE;
        CPU_CRITICAL_EXIT();
    }

    return (valid_cfg);
}


/*$PAGE*/
/*
*********************************************************************************************************
*                                     NetIP_CfgFragReasmTimeout()
*
* Description : Configure IP fragment reassembly timeout.
*
*               (1) IP fragment reassembly timeout is the maximum time allowed between received IP fragments
*                   from the same IP datagram.
*
*
* Argument(s) : timeout_sec     Desired value for IP fragment reassembly timeout (in seconds).
*
* Return(s)   : DEF_OK, IP fragment reassembly timeout configured.
*
* Caller(s)   : Net_InitDflt(),
*               Application.
*
*               This function is a network protocol suite application interface (API) function & MAY be 
*               called by application function(s).
*
* Note(s)     : (2) Timeout in seconds converted to 'NET_TMR_TICK' ticks in order to set initial 'NET_TMR'
*                   timeout value.
*********************************************************************************************************
*/

CPU_BOOLEAN  NetIP_CfgFragReasmTimeout (CPU_INT08U  timeout_sec)
{
#if (CPU_CFG_CRITICAL_METHOD == CPU_CRITICAL_METHOD_STATUS_LOCAL)
    CPU_SR        cpu_sr;
#endif
    NET_TMR_TICK  tick;


    if (timeout_sec < NET_IP_FRAG_REASM_TIMEOUT_MIN_SEC) {
        timeout_sec = NET_IP_FRAG_REASM_TIMEOUT_MIN_SEC;
    }
    if (timeout_sec > NET_IP_FRAG_REASM_TIMEOUT_MAX_SEC) {
        timeout_sec = NET_IP_FRAG_REASM_TIMEOUT_MAX_SEC;
    }

    tick                        = (NET_TMR_TICK)timeout_sec * NET_TMR_TIME_TICK_PER_SEC;
    CPU_CRITICAL_ENTER();
    NetIP_FragReasmTimeout_sec  =  timeout_sec;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -