亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? net_ip.c

?? 又是一個ucos很好的嵌入式IP源程序
?? C
?? 第 1 頁 / 共 5 頁
字號:
*                       See also 'net_ip.h  IP ADDRESS DEFINES  Note #3'.
*
* Argument(s) : addr_subnet_mask    IP subnet mask to validate.
*
* Return(s)   : DEF_YES, if IP subnet mask valid.
*
*               DEF_NO,  otherwise.
*
* Caller(s)   : NetIP_IsValidAddrThisHost().
*
* Note(s)     : none.
*********************************************************************************************************
*/

CPU_BOOLEAN  NetIP_IsValidAddrSubnetMask (NET_IP_ADDR  addr_subnet_mask)
{
    CPU_BOOLEAN  valid;
    NET_IP_ADDR  mask;
    CPU_INT08U   mask_size;
    CPU_INT08U   mask_nbr_one_bits;
    CPU_INT08U   mask_nbr_one_bits_min;
    CPU_INT08U   mask_nbr_one_bits_max;
    CPU_INT08U   i;

                                                                    /* ------------- VALIDATE SUBNET MASK ------------- */
                                                                    /* Chk invalid subnet class (see Note #1c).         */
    if ((addr_subnet_mask & NET_IP_ADDR_CLASS_SUBNET_MASK) == NET_IP_ADDR_NONE) {
        valid = DEF_NO;

    } else {                                                        /* Chk invalid subnet mask (see Notes #1a & #1b).   */
        mask_size         = sizeof(addr_subnet_mask) * DEF_OCTET_NBR_BITS;
        mask              = DEF_BIT_00;
        mask_nbr_one_bits = 0;
        for (i = 0; i < mask_size; i++) {                           /* Calc nbr subnet bits.                            */
            if (addr_subnet_mask & mask) {
                mask_nbr_one_bits++;
            }
            mask <<= 1;
        }

        mask_nbr_one_bits_min = 2;                                  /* See Note #1a2.                                   */
        mask_nbr_one_bits_max = mask_size - mask_nbr_one_bits_min;
                                                                    /* Chk invalid nbr subnet bits (see Note #1a2).     */
        if (mask_nbr_one_bits < mask_nbr_one_bits_min) {
            valid = DEF_NO;

        } else if (mask_nbr_one_bits > mask_nbr_one_bits_max) {
            valid = DEF_NO;

        } else {
            valid = DEF_YES;
        }
    }


    return (valid);
}


/*$PAGE*/
/*
*********************************************************************************************************
*                                             NetIP_Rx()
*
* Description : (1) Process received datagrams & forward to network protocol layers :
*
*                   (a) Validate IP packet & options
*                   (b) Reassemble fragmented datagrams
*                   (c) Demultiplex datagram to higher-layer protocols
*                   (d) Update receive statistics
*
*               (2) Although IP data units are typically referred to as 'datagrams' (see RFC #791, Section 1.1), 
*                   the term 'IP packet' (see RFC #1983, 'packet') is used for IP Receive until the packet is 
*                   validated, & possibly reassembled, as an IP datagram.
*
*
* Argument(s) : pbuf        Pointer to network buffer that received IP packet.
*
*               perr        Pointer to variable that will receive the return error code from this function :
*
*                               NET_IP_ERR_NONE                 IP datagram successfully received & processed.
*                               NET_ERR_INIT_INCOMPLETE         Network initialization NOT complete.
*
*                                                               ----- RETURNED BY NetIP_RxPktDiscard() : -----
*                               NET_ERR_RX                      Receive error; packet discarded.
*
* Return(s)   : none.
*
* Caller(s)   : NetIF_RxPktFrameDemux(),
*               NetIP_TxPktDatagram().
*
* Note(s)     : (3) NetIP_Rx() blocked until network initialization completes; perform NO action.
*
*               (4) Since NetIP_RxPktFragReasm() may return a pointer to a different packet buffer (see
*                   'NetIP_RxPktFragReasm()  Return(s)', 'pbuf_hdr' MUST be reloaded.
*
*               (5) (a) For single packet buffer IP datagrams, the datagram length is equal to the IP
*                       Total Length minus the IP Header Length.
*
*                   (b) For multiple packet buffer, fragmented IP datagrams, the datagram length is
*                       equal to the previously calculated total fragment size.
*
*                       (1) IP datagram length is stored ONLY in the first packet buffer of any
*                           fragmented packet buffers.
*
*               (6) Network buffer already freed by higher layer; only increment error counter.
*********************************************************************************************************
*/
/*$PAGE*/
void  NetIP_Rx (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;
    NET_IP_HDR   *pip_hdr;


#if (NET_ERR_CFG_ARG_CHK_EXT_EN == DEF_ENABLED)
    if (Net_InitDone != DEF_YES) {                              /* If init NOT complete, exit rx (see Note #3).         */
        NetIP_RxPktDiscard(pbuf, perr);
       *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_RxPktDiscard(pbuf, perr);
        NET_CTR_ERR_INC(NetIP_ErrNullPtrCtr);
        return;
    }
#endif


    NET_CTR_STAT_INC(NetIP_StatRxPktCtr);


                                                                /* ------------------ VALIDATE IP PKT ----------------- */
    pbuf_hdr = &pbuf->Hdr;
#if (NET_ERR_CFG_ARG_CHK_DBG_EN == DEF_ENABLED)
    NetIP_RxPktValidateBuf(pbuf_hdr, perr);                     /* Validate rx'd buf.                                   */
    switch (*perr) {
        case NET_IP_ERR_NONE:
             break;


        case NET_ERR_INVALID_PROTOCOL:
        case NET_BUF_ERR_INVALID_IX:
        default:
             NetIP_RxPktDiscard(pbuf, perr);
             return;                                            /* Prevent 'break NOT reachable' compiler warning.      */
    }
#endif
    pip_hdr = (NET_IP_HDR *)&pbuf->Data[pbuf_hdr->IP_HdrIx];
    NetIP_RxPktValidate(pbuf, pbuf_hdr, pip_hdr, perr);         /* Validate rx'd pkt.                                   */


                                                                /* ------------------- REASM FRAGS -------------------- */
    switch (*perr) {
        case NET_IP_ERR_NONE:
             pbuf = NetIP_RxPktFragReasm(pbuf, pbuf_hdr, pip_hdr, perr);
             break;


        case NET_IP_ERR_INVALID_VER:
        case NET_IP_ERR_INVALID_LEN_HDR:
        case NET_IP_ERR_INVALID_LEN_TOT:
        case NET_IP_ERR_INVALID_LEN_DATA:
        case NET_IP_ERR_INVALID_FLAG:
        case NET_IP_ERR_INVALID_FRAG:
        case NET_IP_ERR_INVALID_PROTOCOL:
        case NET_IP_ERR_INVALID_CHK_SUM:
        case NET_IP_ERR_INVALID_ADDR_SRC:
        case NET_IP_ERR_INVALID_ADDR_DEST:
        case NET_IP_ERR_INVALID_OPT:
        case NET_IP_ERR_INVALID_OPT_LEN:
        case NET_IP_ERR_INVALID_OPT_NBR:
        case NET_IP_ERR_INVALID_OPT_END:
        case NET_IP_ERR_INVALID_OPT_FLAG:
        case NET_IP_ERR_RX_OPT_BUF_NONE_AVAIL:
        case NET_IP_ERR_RX_OPT_BUF_WR:
        default:
             NetIP_RxPktDiscard(pbuf, perr);
             return;                                            /* Prevent 'break NOT reachable' compiler warning.      */
    }


/*$PAGE*/
                                                                        /* -------------- DEMUX DATAGRAM -------------- */
    switch (*perr) {                                                    /* Chk err from NetIP_RxPktFragReasm().         */
        case NET_IP_ERR_RX_FRAG_NONE:
        case NET_IP_ERR_RX_FRAG_COMPLETE:
             pbuf_hdr = &pbuf->Hdr;                                     /* Reload buf hdr ptr (see Note #4).            */
             if (*perr == NET_IP_ERR_RX_FRAG_NONE) {                    /* If pkt NOT frag'd, ...                       */
                 pbuf_hdr->IP_DatagramLen = pbuf_hdr->IP_TotLen         /* ... calc buf datagram len (see Note #5a).    */
                                          - pbuf_hdr->IP_HdrLen;
             } else {                                                   /* Else set tot frag size ...                   */
                 pbuf_hdr->IP_DatagramLen = pbuf_hdr->IP_FragSizeTot;   /* ...       as datagram len (see Note #5b).    */
             }
             NetIP_RxPktDemuxDatagram(pbuf, pbuf_hdr, perr);
             break;


        case NET_IP_ERR_RX_FRAG_REASM:                          /* Frag'd datagram in reasm.                            */
            *perr = NET_IP_ERR_NONE;
             return;                                            /* Prevent 'break NOT reachable' compiler warning.      */


        case NET_IP_ERR_RX_FRAG_OFFSET:
        case NET_IP_ERR_RX_FRAG_SIZE:
        case NET_IP_ERR_RX_FRAG_DISCARD:
        default:
             NetIP_RxPktDiscard(pbuf, perr);
             return;                                            /* Prevent 'break NOT reachable' compiler warning.      */
    }


                                                                /* ----------------- UPDATE RX STATS ------------------ */
    switch (*perr) {                                            /* Chk err from NetIP_RxPktDemuxDatagram().             */
        case NET_ICMP_ERR_NONE:
        case NET_TCP_ERR_NONE:
        case NET_UDP_ERR_NONE:
             NET_CTR_STAT_INC(NetIP_StatRxDatagramProcessedCtr);
            *perr = NET_IP_ERR_NONE;
             break;


        case NET_ERR_INIT_INCOMPLETE:
        case NET_ERR_RX:
             NET_CTR_ERR_INC(NetIP_ErrRxPktDiscardedCtr);       /* See Note #6.                                         */
             return;                                            /* Prevent 'break NOT reachable' compiler warning.      */
            

        case NET_ERR_INVALID_PROTOCOL:
        default:
             NetIP_RxPktDiscard(pbuf, perr);
             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 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().

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久香蕉国产线看观看99| 亚洲愉拍自拍另类高清精品| 日韩一区二区三区在线| 在线观看91精品国产麻豆| 欧美老肥妇做.爰bbww| 欧美美女喷水视频| 制服.丝袜.亚洲.另类.中文| 欧美精品777| 欧美一区在线视频| 日韩一级黄色大片| 久久久夜色精品亚洲| 久久久国产午夜精品| 中文字幕一区二区日韩精品绯色| 欧美激情综合在线| 中文字幕中文字幕中文字幕亚洲无线| 中文字幕中文乱码欧美一区二区| 亚洲日本在线观看| 亚洲一二三四在线观看| 亚洲福利一区二区三区| 伦理电影国产精品| 高清久久久久久| 色哟哟国产精品| 91麻豆精品国产综合久久久久久 | 欧美日本韩国一区二区三区视频 | 亚洲成av人综合在线观看| 天天综合色天天| 国产原创一区二区| 99国产精品99久久久久久| 欧美无砖专区一中文字| 精品国产一二三| 国产精品妹子av| 午夜影院在线观看欧美| 美国毛片一区二区| 成人不卡免费av| 欧美日韩国产综合草草| 精品国产乱码91久久久久久网站| 国产精品动漫网站| 午夜不卡av免费| 国产成人午夜视频| 欧美亚洲禁片免费| 久久免费美女视频| 亚洲欧美激情插 | jlzzjlzz国产精品久久| 欧美日韩一级大片网址| 久久久精品综合| 亚洲在线观看免费| 国产精品一区二区无线| 在线观看日韩国产| 久久久久久久久久看片| 亚洲一区二区欧美日韩| 国产福利91精品| 欧美日韩国产乱码电影| 国产午夜精品一区二区| 婷婷开心激情综合| 成人激情小说网站| 日韩视频在线永久播放| 亚洲视频一区二区在线| 久久精品99国产精品日本| 日本道免费精品一区二区三区| 日韩欧美亚洲一区二区| 亚洲另类一区二区| 国产宾馆实践打屁股91| 8x8x8国产精品| 亚洲日本在线a| 国产成人综合自拍| 91精品国产综合久久婷婷香蕉| 中文字幕在线不卡视频| 国产在线精品一区二区夜色| 欧美精品在线视频| 亚洲精品亚洲人成人网在线播放| 国产福利不卡视频| 精品va天堂亚洲国产| 午夜免费欧美电影| 一本久久a久久免费精品不卡| 久久精品一区四区| 久久99这里只有精品| 欧美精选午夜久久久乱码6080| 亚洲欧美日韩一区| 处破女av一区二区| 久久久久99精品国产片| 捆绑调教一区二区三区| 91精品欧美福利在线观看| 一区二区久久久久| 99视频国产精品| 中文在线一区二区| 国产高清无密码一区二区三区| 欧美一区二区三区人| 午夜一区二区三区视频| 色噜噜狠狠成人网p站| 国产精品嫩草影院com| 大白屁股一区二区视频| 国产亚洲精品bt天堂精选| 国产在线播放一区三区四| 日韩一级片在线播放| 日本aⅴ免费视频一区二区三区| 欧美日韩高清不卡| 日韩精品一二区| 欧美高清dvd| 男男成人高潮片免费网站| 欧美日韩国产片| 水野朝阳av一区二区三区| 欧美日韩欧美一区二区| 亚洲综合色自拍一区| 欧美在线不卡视频| 亚洲国产日产av| 欧美精选一区二区| 日韩国产欧美在线观看| 7777精品伊人久久久大香线蕉| 亚洲gay无套男同| 666欧美在线视频| 麻豆精品一二三| 久久久亚洲欧洲日产国码αv| 国产精品影视在线观看| 国产精品毛片无遮挡高清| 97久久超碰国产精品| 一区二区三区丝袜| 欧美日韩国产在线播放网站| 免费观看日韩av| 欧美精品一区二区三区久久久| 国产传媒久久文化传媒| 国产精品人妖ts系列视频| 91久久久免费一区二区| 日韩专区在线视频| 精品99999| av一二三不卡影片| 午夜电影网一区| 26uuu国产日韩综合| 成人综合激情网| 一区二区三区日本| 91精品国产综合久久久久久| 国模无码大尺度一区二区三区| 国产精品乱人伦一区二区| 色婷婷亚洲精品| 蜜桃久久久久久久| 国产精品久久久久久户外露出| 欧美伊人久久久久久久久影院| 麻豆91在线播放免费| 中文字幕在线观看不卡视频| 欧美色男人天堂| 国产精品亚洲第一| 亚洲国产精品人人做人人爽| 精品成人a区在线观看| 色婷婷久久久久swag精品| 欧美aaa在线| 中文字幕一区二区在线播放| 欧美精品精品一区| 成人一区二区三区中文字幕| 亚洲va国产天堂va久久en| 久久久久久免费网| 欧美日韩精品一区二区天天拍小说| 捆绑调教美女网站视频一区| 亚洲欧美另类在线| 久久婷婷成人综合色| 欧美性感一区二区三区| 国产一区二区免费看| 亚洲一区二区三区在线| 久久久久久一级片| 欧美精选一区二区| 91丝袜高跟美女视频| 久久国产欧美日韩精品| 亚洲一区二区三区在线| 国产欧美日韩亚州综合| 91精品国产综合久久久久久久久久| 成人性生交大片| 蜜臀av在线播放一区二区三区 | 美国av一区二区| 亚洲女同一区二区| 久久精品在线免费观看| 欧美蜜桃一区二区三区| av一区二区三区黑人| 国产精品主播直播| 另类的小说在线视频另类成人小视频在线| 亚洲欧美另类小说| 国产精品区一区二区三区| 亚洲精品一线二线三线无人区| 欧美日产在线观看| 在线免费亚洲电影| 成人91在线观看| 激情图区综合网| 免费观看久久久4p| 亚洲午夜久久久久中文字幕久| 国产精品成人在线观看| 久久免费看少妇高潮| 欧美成人a视频| 日韩手机在线导航| 欧美老人xxxx18| 欧美色综合天天久久综合精品| 99国产麻豆精品| 成人黄色国产精品网站大全在线免费观看 | 亚洲视频电影在线| 久久久国际精品| 2020国产精品| 精品免费99久久| 欧美一区二区三区性视频| 欧美日韩国产综合视频在线观看 | 日韩午夜精品电影| 555夜色666亚洲国产免| 538在线一区二区精品国产| 欧美日韩国产小视频| 欧美日韩国产一级|