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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ip.c

?? STR71X源代碼包括例程與各功能的源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
/* @file
 *
 * This is the IP layer implementation for incoming and outgoing IP traffic.
 * 
 * @see ip_frag.c
 *
 */
/*
 * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification,
 * are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice,
 *    this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 *    this list of conditions and the following disclaimer in the documentation
 *    and/or other materials provided with the distribution.
 * 3. The name of the author may not be used to endorse or promote products
 *    derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
 * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
 * OF SUCH DAMAGE.
 *
 * This file is part of the lwIP TCP/IP stack.
 *
 * Author: Adam Dunkels <adam@sics.se>
 *
 */

#include "lwip/opt.h"

#include "lwip/def.h"
#include "lwip/mem.h"
#include "lwip/ip.h"
#include "lwip/ip_frag.h"
#include "lwip/inet.h"
#include "lwip/netif.h"
#include "lwip/icmp.h"
#include "lwip/raw.h"
#include "lwip/udp.h"
#include "lwip/tcp.h"

#include "lwip/stats.h"

#include "arch/perf.h"

#include "lwip/snmp.h"
#if LWIP_DHCP
#  include "lwip/dhcp.h"
#endif /* LWIP_DHCP */


/**
 * Initializes the IP layer.
 */

void
ip_init(void)
{
  /* no initializations as of yet */
}

/**
 * Finds the appropriate network interface for a given IP address. It
 * searches the list of network interfaces linearly. A match is found
 * if the masked IP address of the network interface equals the masked
 * IP address given to the function.
 */

struct netif *
ip_route(struct ip_addr *dest)
{
  struct netif *netif;

  /* iterate through netifs */
  for(netif = netif_list; netif != NULL; netif = netif->next) {
    /* network mask matches? */
    if (ip_addr_netcmp(dest, &(netif->ip_addr), &(netif->netmask))) {
      /* return netif on which to forward IP packet */
      return netif;
    }
  }
  /* no matching netif found, use default netif */
  return netif_default;
}
#if IP_FORWARD

/**
 * Forwards an IP packet. It finds an appropriate route for the
 * packet, decrements the TTL value of the packet, adjusts the
 * checksum and outputs the packet on the appropriate interface.
 */

static struct netif *
ip_forward(struct pbuf *p, struct ip_hdr *iphdr, struct netif *inp)
{
  struct netif *netif;

  PERF_START;
  /* Find network interface where to forward this IP packet to. */
  netif = ip_route((struct ip_addr *)&(iphdr->dest));
  if (netif == NULL) {
    LWIP_DEBUGF(IP_DEBUG, ("ip_forward: no forwarding route for 0x%lx found\n",
                      iphdr->dest.addr));
    snmp_inc_ipnoroutes();
    return (struct netif *)NULL;
  }
  /* Do not forward packets onto the same network interface on which
   * they arrived. */
  if (netif == inp) {
    LWIP_DEBUGF(IP_DEBUG, ("ip_forward: not bouncing packets back on incoming interface.\n"));
    snmp_inc_ipnoroutes();
    return (struct netif *)NULL;
  }

  /* decrement TTL */
  IPH_TTL_SET(iphdr, IPH_TTL(iphdr) - 1);
  /* send ICMP if TTL == 0 */
  if (IPH_TTL(iphdr) == 0) {
    /* Don't send ICMP messages in response to ICMP messages */
    if (IPH_PROTO(iphdr) != IP_PROTO_ICMP) {
      icmp_time_exceeded(p, ICMP_TE_TTL);
      snmp_inc_icmpouttimeexcds();
    }
    return (struct netif *)NULL;
  }

  /* Incrementally update the IP checksum. */
  if (IPH_CHKSUM(iphdr) >= htons(0xffff - 0x100)) {
    IPH_CHKSUM_SET(iphdr, IPH_CHKSUM(iphdr) + htons(0x100) + 1);
  } else {
    IPH_CHKSUM_SET(iphdr, IPH_CHKSUM(iphdr) + htons(0x100));
  }

  LWIP_DEBUGF(IP_DEBUG, ("ip_forward: forwarding packet to 0x%lx\n",
                    iphdr->dest.addr));

  IP_STATS_INC(ip.fw);
  IP_STATS_INC(ip.xmit);
    snmp_inc_ipforwdatagrams();

  PERF_STOP("ip_forward");
  /* transmit pbuf on chosen interface */
  netif->output(netif, p, (struct ip_addr *)&(iphdr->dest));
  return netif;
}
#endif /* IP_FORWARD */

/**
 * This function is called by the network interface device driver when
 * an IP packet is received. The function does the basic checks of the
 * IP header such as packet size being at least larger than the header
 * size etc. If the packet was not destined for us, the packet is
 * forwarded (using ip_forward). The IP checksum is always checked.
 *
 * Finally, the packet is sent to the upper layer protocol input function.
 * 
 * 
 * 
 */

err_t
ip_input(struct pbuf *p, struct netif *inp) {
  struct ip_hdr *iphdr;
  struct netif *netif;
  u16_t iphdrlen;

  IP_STATS_INC(ip.recv);
  snmp_inc_ipinreceives();

  /* identify the IP header */
  iphdr = p->payload;
  if (IPH_V(iphdr) != 4) {
    LWIP_DEBUGF(IP_DEBUG | 1, ("IP packet dropped due to bad version number %u\n", IPH_V(iphdr)));
    ip_debug_print(p);
    pbuf_free(p);
    IP_STATS_INC(ip.err);
    IP_STATS_INC(ip.drop);
    snmp_inc_ipunknownprotos();
    return ERR_OK;
  }
  /* obtain IP header length in number of 32-bit words */
  iphdrlen = IPH_HL(iphdr);
  /* calculate IP header length in bytes */
  iphdrlen *= 4;

  /* header length exceeds first pbuf length? */
  if (iphdrlen > p->len) {
    LWIP_DEBUGF(IP_DEBUG | 2, ("IP header (len %u) does not fit in first pbuf (len %u), IP packet droppped.\n",
      iphdrlen, p->len));
    /* free (drop) packet pbufs */
    pbuf_free(p);
    IP_STATS_INC(ip.lenerr);
    IP_STATS_INC(ip.drop);
    snmp_inc_ipindiscards();
    return ERR_OK;
  }

  /* verify checksum */
#if CHECKSUM_CHECK_IP
  if (inet_chksum(iphdr, iphdrlen) != 0) {

    LWIP_DEBUGF(IP_DEBUG | 2, ("Checksum (0x%x) failed, IP packet dropped.\n", inet_chksum(iphdr, iphdrlen)));
    ip_debug_print(p);
    pbuf_free(p);
    IP_STATS_INC(ip.chkerr);
    IP_STATS_INC(ip.drop);
    snmp_inc_ipindiscards();
    return ERR_OK;
  }
#endif

  /* Trim pbuf. This should have been done at the netif layer,
   * but we'll do it anyway just to be sure that its done. */
  pbuf_realloc(p, ntohs(IPH_LEN(iphdr)));

  /* match packet against an interface, i.e. is this packet for us? */
  for (netif = netif_list; netif != NULL; netif = netif->next) {

    LWIP_DEBUGF(IP_DEBUG, ("ip_input: iphdr->dest 0x%lx netif->ip_addr 0x%lx (0x%lx, 0x%lx, 0x%lx)\n",
      iphdr->dest.addr, netif->ip_addr.addr,
      iphdr->dest.addr & netif->netmask.addr,
      netif->ip_addr.addr & netif->netmask.addr,
      iphdr->dest.addr & ~(netif->netmask.addr)));

    /* interface is up and configured? */
    if ((netif_is_up(netif)) && (!ip_addr_isany(&(netif->ip_addr))))
    {
      /* unicast to this interface address? */
      if (ip_addr_cmp(&(iphdr->dest), &(netif->ip_addr)) ||
         /* or broadcast on this interface network address? */
         ip_addr_isbroadcast(&(iphdr->dest), netif)) {
        LWIP_DEBUGF(IP_DEBUG, ("ip_input: packet accepted on interface %c%c\n",
          netif->name[0], netif->name[1]));
        /* break out of for loop */
        break;
      }
    }
  }
#if LWIP_DHCP
  /* Pass DHCP messages regardless of destination address. DHCP traffic is addressed
   * using link layer addressing (such as Ethernet MAC) so we must not filter on IP.
   * According to RFC 1542 section 3.1.1, referred by RFC 2131).
   */
  if (netif == NULL) {

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩色一区| 日本一区二区免费在线| 欧美精品一区二区三| 国产精品久久久久久久久久久免费看 | 欧美大黄免费观看| 国产精品久久久一本精品| 日韩不卡一二三区| 色88888久久久久久影院野外| 欧美日韩国产乱码电影| 国产日韩精品一区二区浪潮av| 亚洲va在线va天堂| 9人人澡人人爽人人精品| 日韩欧美国产不卡| 亚洲午夜国产一区99re久久| 床上的激情91.| 2022国产精品视频| 久久成人18免费观看| 欧美午夜片在线观看| 中文字幕一区二区三区四区不卡 | 亚洲欧洲国产日韩| 国产福利一区在线| 日韩精品资源二区在线| 肉肉av福利一精品导航| 欧美一a一片一级一片| 中文字幕亚洲成人| 成人18视频日本| 国产欧美一区二区精品秋霞影院| 男女男精品网站| 欧美精品123区| 日韩国产欧美在线观看| 欧美日韩你懂的| 亚洲福利一二三区| 欧美无砖专区一中文字| 亚洲欧洲无码一区二区三区| 国产乱码精品一区二区三 | 久久99国产精品久久| 在线不卡免费av| 男男视频亚洲欧美| 日韩一区二区三区精品视频 | 国产精品一区三区| 久久久久国产成人精品亚洲午夜| 精品综合久久久久久8888| 欧美大片一区二区三区| 国产麻豆视频精品| 国产精品美女一区二区在线观看| av在线播放成人| 一区二区欧美在线观看| 欧美日韩国产精选| 日本免费新一区视频| 精品国产3级a| 成人毛片在线观看| 一区二区三区在线观看网站| 69堂成人精品免费视频| 国产一区欧美日韩| 国产精品久久久久三级| 色婷婷综合久久久久中文一区二区| 亚洲精品五月天| 日韩午夜av一区| 成人亚洲一区二区一| 亚洲精品日韩一| 3d成人h动漫网站入口| 国产尤物一区二区| 亚洲色图丝袜美腿| 日韩女优电影在线观看| 成人免费电影视频| 亚洲成人你懂的| 欧美激情中文不卡| 欧美在线观看视频在线| 麻豆久久久久久| 中文字幕在线观看不卡| 欧美久久久一区| 国产不卡视频一区| 亚洲成人精品在线观看| 国产午夜精品一区二区三区视频| 色狠狠综合天天综合综合| 麻豆成人免费电影| 亚洲婷婷国产精品电影人久久| 6080yy午夜一二三区久久| 国产东北露脸精品视频| 亚洲第一主播视频| 中文字幕日韩精品一区| 欧美成人一区二区三区| 91视视频在线观看入口直接观看www| 日韩avvvv在线播放| 亚洲欧美日韩国产中文在线| 日韩欧美久久一区| 欧美日韩国产三级| 波多野结衣在线一区| 麻豆精品久久久| 亚洲第一二三四区| 亚洲欧洲av另类| 亚洲精品一区二区三区99| 欧美日韩精品一区二区天天拍小说 | 99国产精品久| 国模一区二区三区白浆| 亚洲国产裸拍裸体视频在线观看乱了| 国产婷婷色一区二区三区四区| 日韩一区二区电影在线| 欧美日韩视频在线一区二区| 91蝌蚪porny成人天涯| 国产成人综合视频| 久久国产精品99久久人人澡| 午夜欧美在线一二页| 亚洲乱码国产乱码精品精的特点 | 国产成a人无v码亚洲福利| 免费在线看一区| 日韩av电影天堂| 午夜av一区二区| 亚洲国产精品影院| 亚洲一区二区美女| 亚洲成人手机在线| 亚洲va中文字幕| 日本在线不卡视频| 日本不卡一区二区三区高清视频| 亚洲成人久久影院| 日韩中文欧美在线| 美美哒免费高清在线观看视频一区二区 | 狠狠色综合日日| 另类调教123区| 另类中文字幕网| 久久精品国产第一区二区三区| 日本不卡的三区四区五区| 日韩高清欧美激情| 日韩电影在线观看网站| 日本欧美大码aⅴ在线播放| 蜜桃91丨九色丨蝌蚪91桃色| 蜜臀a∨国产成人精品| 加勒比av一区二区| 精品一区二区三区的国产在线播放| 久久99精品久久久久久国产越南| 捆绑调教一区二区三区| 韩国三级中文字幕hd久久精品| 国产成a人亚洲精| 色综合激情五月| 在线观看一区二区视频| 91精品久久久久久久99蜜桃| 欧美成人福利视频| 国产精品视频在线看| 亚洲色图清纯唯美| 亚洲综合免费观看高清在线观看| 亚洲国产综合91精品麻豆| 日韩成人精品视频| 国产乱码一区二区三区| thepron国产精品| 欧美精品视频www在线观看| 欧美一级精品大片| 欧美国产视频在线| 亚洲福利一区二区三区| 国产剧情一区在线| 欧美系列日韩一区| 久久久亚洲高清| 亚洲精品国产无套在线观| 美腿丝袜亚洲色图| 色综合网色综合| 日韩精品一区二| 亚洲乱码精品一二三四区日韩在线| 日韩精品电影在线观看| 波多野结衣的一区二区三区| 欧美日韩另类一区| 国产精品日日摸夜夜摸av| 亚洲bt欧美bt精品| 成人av影院在线| 日韩丝袜情趣美女图片| 亚洲免费观看在线观看| 国产自产高清不卡| 欧美三级视频在线| 久久久美女艺术照精彩视频福利播放| 国产精品视频麻豆| 首页国产欧美日韩丝袜| 极品少妇一区二区| 欧美日韩一卡二卡| 亚洲图片另类小说| 久久99精品久久久久久久久久久久| 日本精品裸体写真集在线观看| av午夜精品一区二区三区| 久久天堂av综合合色蜜桃网| 亚洲影视在线观看| 国产精品综合一区二区| 91精品国产欧美一区二区18| 国产精品久久一卡二卡| 六月丁香婷婷色狠狠久久| 欧美日韩国产另类不卡| 中文字幕一区三区| 国产传媒久久文化传媒| 欧美性色欧美a在线播放| 亚洲欧美综合在线精品| 日日夜夜精品免费视频| 欧美伊人久久久久久久久影院| 18成人在线观看| 国产在线视视频有精品| 日韩欧美在线影院| 亚洲精品日韩专区silk| 色综合色狠狠综合色| 国产精品毛片无遮挡高清| 久久99精品国产.久久久久久| 91麻豆精品国产| 五月综合激情婷婷六月色窝| 在线观看亚洲精品| 亚洲成人第一页| 一本高清dvd不卡在线观看|