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

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

?? netif.c

?? 一個輕量tcpip協(xié)議在移植在ucOS2系統(tǒng)上運行
?? C
字號:
/**
 * @file
 *
 * lwIP network interface abstraction
 */

/*
 * Copyright (c) 2001-2003 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/netif.h"
#include "lwip/ip_addr.h"


struct netif *netif_list = NULL;
struct netif *netif_default = NULL;

/**
 * Add a network interface to the list of lwIP netifs.
 *
 * @param ipaddr IP address for the new netif
 * @param netmask network mask for the new netif
 * @param gw default gateway IP address for the new netif
 * @param state opaque data passed to the new netif
 * @param init callback function that initializes the interface
 * @param input callback function that...
 *
 * @return netif, or NULL if failed.
 */
struct netif *
netif_add(struct ip_addr *ipaddr, struct ip_addr *netmask,
	  struct ip_addr *gw,
	  void *state,
	  err_t (* init)(struct netif *netif),
	  err_t (* input)(struct pbuf *p, struct netif *netif))
{
  struct netif *netif;
  static int netifnum = 0;

  /* allocate netif structure */  
  netif = mem_malloc(sizeof(struct netif));

  if(netif == NULL) {
    DEBUGF(NETIF_DEBUG, ("netif_add(): out of memory for netif\n"));
    return NULL;
  }
#if LWIP_DHCP
  /* netif not under DHCP control by default */
  netif->dhcp = NULL;
#endif  
  /* remember netif specific state information data */
  netif->state = state;
  netif->num = netifnum++;
  netif->input = input;

  netif_set_addr(netif, ipaddr, netmask, gw);
  
  /* call user specified initialization function for netif */
  if (init(netif) != ERR_OK) {
      mem_free(netif);
      return NULL;
  }
 
  /* add this netif to the list */
  netif->next = netif_list;
  netif_list = netif;
#if NETIF_DEBUG
  DEBUGF(NETIF_DEBUG, ("netif: added interface %c%c IP addr ",
		       netif->name[0], netif->name[1]));
  ip_addr_debug_print(ipaddr);
  DEBUGF(NETIF_DEBUG, (" netmask "));
  ip_addr_debug_print(netmask);
  DEBUGF(NETIF_DEBUG, (" gw "));  
  ip_addr_debug_print(gw);
  DEBUGF(NETIF_DEBUG, ("\n"));
#endif /* NETIF_DEBUG */
  return netif;
}

void
netif_set_addr(struct netif *netif,struct ip_addr *ipaddr, struct ip_addr *netmask,
	  struct ip_addr *gw)
{
  netif_set_ipaddr(netif, ipaddr);
  netif_set_netmask(netif, netmask);
  netif_set_gw(netif, gw);
}

/*-----------------------------------------------------------------------------------*/
void netif_remove(struct netif * netif)
{
	if ( netif == NULL ) return;  
 
	/*  is it the first netif? */
	if(netif_list == netif) {
		netif_list = netif->next;
	}    
	else
	{	
		/*  look for netif further down the list */
		struct netif * tmpNetif;
 		for(tmpNetif = netif_list; tmpNetif != NULL; tmpNetif = tmpNetif->next) {
			if(tmpNetif->next == netif) {
				tmpNetif->next = netif->next;
				break;
			}    
		}
		if(tmpNetif == NULL)
			return; /*  we didn't find any netif today */
	}
  /* this netif is default? */
	if (netif_default == netif)
    /* reset default netif */
		netif_default = NULL;

	DEBUGF(NETIF_DEBUG, ("netif_remove: removed netif\n"));
	mem_free( netif );
}

/*-----------------------------------------------------------------------------------*/
struct netif *
netif_find(char *name)
{
  struct netif *netif;
  u8_t num;
  
  if(name == NULL) {
    return NULL;
  }

  num = name[2] - '0';
 
  for(netif = netif_list; netif != NULL; netif = netif->next) {
    if(num == netif->num &&
       name[0] == netif->name[0] &&
       name[1] == netif->name[1]) {
      DEBUGF(NETIF_DEBUG, ("netif_find: found %s\n", name));
      return netif;
    }    
  }
  DEBUGF(NETIF_DEBUG, ("netif_find: didn't find %s\n", name));
  return NULL;
}
/*-----------------------------------------------------------------------------------*/
void
netif_set_ipaddr(struct netif *netif, struct ip_addr *ipaddr)
{
  DEBUGF(NETIF_DEBUG | DBG_TRACE | DBG_STATE, ("netif: setting IP address of interface %c%c%u to %u.%u.%u.%u\n",
		       netif->name[0], netif->name[1], netif->num,
		       (u8_t)(ntohl(ipaddr->addr) >> 24 & 0xff),
		       (u8_t)(ntohl(ipaddr->addr) >> 16 & 0xff),
		       (u8_t)(ntohl(ipaddr->addr) >> 8 & 0xff),
		       (u8_t)(ntohl(ipaddr->addr) & 0xff)));
  ip_addr_set(&(netif->ip_addr), ipaddr);
}
/*-----------------------------------------------------------------------------------*/
void
netif_set_gw(struct netif *netif, struct ip_addr *gw)
{
  DEBUGF(NETIF_DEBUG | DBG_TRACE | DBG_STATE, ("netif: setting GW address of interface %c%c%u to %u.%u.%u.%u\n",
		       netif->name[0], netif->name[1], netif->num,
		       (u8_t)(ntohl(gw->addr) >> 24 & 0xff),
		       (u8_t)(ntohl(gw->addr) >> 16 & 0xff),
		       (u8_t)(ntohl(gw->addr) >> 8 & 0xff),
		       (u8_t)(ntohl(gw->addr) & 0xff)));
  ip_addr_set(&(netif->gw), gw);
}
/*-----------------------------------------------------------------------------------*/
void
netif_set_netmask(struct netif *netif, struct ip_addr *netmask)
{
  DEBUGF(NETIF_DEBUG | DBG_TRACE | DBG_STATE, ("netif: setting netmask of interface %c%c%u to %u.%u.%u.%u\n",
		       netif->name[0], netif->name[1], netif->num,
		       (u8_t)(ntohl(netmask->addr) >> 24 & 0xff),
		       (u8_t)(ntohl(netmask->addr) >> 16 & 0xff),
		       (u8_t)(ntohl(netmask->addr) >> 8 & 0xff),
		       (u8_t)(ntohl(netmask->addr) & 0xff)));
  ip_addr_set(&(netif->netmask), netmask);
}
/*-----------------------------------------------------------------------------------*/
void
netif_set_default(struct netif *netif)
{
  netif_default = netif;
  DEBUGF(NETIF_DEBUG, ("netif: setting default interface %c%c\n",
		       netif ? netif->name[0] : '\'', netif ? netif->name[1] : '\''));
}
/*-----------------------------------------------------------------------------------*/
void
netif_init(void)
{
  netif_list = netif_default = NULL;
}
/*-----------------------------------------------------------------------------------*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜电影网一区| 色女孩综合影院| 99久久99精品久久久久久| 欧美绝品在线观看成人午夜影视| 久久久一区二区| 亚洲自拍偷拍av| 丁香婷婷综合网| 欧美一级精品在线| 亚洲夂夂婷婷色拍ww47| 成人小视频免费在线观看| 91麻豆精品国产| 亚洲人亚洲人成电影网站色| 国产在线一区观看| 欧美人狂配大交3d怪物一区| 亚洲天堂2016| 波多野洁衣一区| 精品99999| 久久国产精品区| 91精品欧美一区二区三区综合在 | 欧美一二三四在线| 亚洲欧美国产毛片在线| 国产suv精品一区二区883| 日韩欧美国产wwwww| 日韩电影在线免费看| 欧美三级午夜理伦三级中视频| 亚洲情趣在线观看| 不卡高清视频专区| 亚洲国产高清在线观看视频| 狠狠狠色丁香婷婷综合激情| 精品捆绑美女sm三区| 美女一区二区在线观看| 欧美一级日韩不卡播放免费| 奇米影视7777精品一区二区| 欧美精品vⅰdeose4hd| 五月天久久比比资源色| 69堂国产成人免费视频| 三级欧美在线一区| 91精品国产福利在线观看| 日韩国产欧美视频| 日韩欧美视频在线| 精品一区二区三区免费观看| 国产日韩欧美精品电影三级在线| 国产精品一区免费在线观看| 精品久久久久久久久久久久包黑料 | 午夜视频久久久久久| 欧美日韩一级片在线观看| 亚洲高清在线精品| 日韩免费福利电影在线观看| 国产mv日韩mv欧美| 亚洲婷婷国产精品电影人久久| 色婷婷精品久久二区二区蜜臂av | 中文字幕成人av| 一本到高清视频免费精品| 亚洲国产日日夜夜| 欧美久久久久中文字幕| 久久精品99久久久| 国产精品久久久久久久第一福利 | 99在线热播精品免费| 亚洲手机成人高清视频| 欧美日韩aaaaaa| 国产在线精品一区二区三区不卡| 国产精品久久久久桃色tv| 欧美日韩一区精品| 国产精品中文字幕一区二区三区| 国产精品久久久久四虎| 欧美一区二区在线视频| 国产成人夜色高潮福利影视| 亚洲日本一区二区| 日韩欧美一级精品久久| 国产精品69久久久久水密桃| 亚洲老司机在线| 精品国产乱码91久久久久久网站| aaa亚洲精品一二三区| 美腿丝袜在线亚洲一区| 欧美高清在线视频| 4438x亚洲最大成人网| 处破女av一区二区| 日本欧美一区二区三区乱码| 国产精品人成在线观看免费 | 麻豆久久一区二区| 亚洲欧美另类小说| 国产午夜精品一区二区| 欧美性生活大片视频| 成人一区二区在线观看| 日本视频一区二区| 亚洲一区二区高清| 亚洲欧美综合色| 久久久久99精品国产片| 欧美日韩dvd在线观看| 91丨porny丨在线| 国产一区啦啦啦在线观看| 日韩精品电影一区亚洲| 亚洲欧美怡红院| 国产欧美日韩卡一| 欧美电影免费观看高清完整版| 精品1区2区在线观看| 色婷婷av一区二区三区之一色屋| 国产传媒一区在线| 久久精品国产亚洲a| 婷婷一区二区三区| 亚洲午夜一二三区视频| 亚洲欧美另类久久久精品| 国产精品拍天天在线| 国产亚洲欧美在线| 久久亚洲一级片| 精品欧美乱码久久久久久1区2区 | 亚洲一区av在线| |精品福利一区二区三区| 国产欧美一区二区三区鸳鸯浴| 日韩欧美在线网站| 欧美一卡二卡三卡| 日韩一级成人av| 欧美成人a∨高清免费观看| 欧美肥妇free| 日韩免费电影一区| 久久综合久久99| 久久久久9999亚洲精品| 国产视频一区二区在线观看| 久久品道一品道久久精品| 欧美成人官网二区| 精品国产伦一区二区三区免费| 日韩欧美一级在线播放| 精品国产91久久久久久久妲己| 精品免费国产二区三区| 久久综合丝袜日本网| 国产欧美一区在线| 亚洲天堂成人在线观看| 一区二区成人在线观看| 夜夜夜精品看看| 亚洲高清免费一级二级三级| 亚洲成精国产精品女| 奇米在线7777在线精品| 国产在线观看一区二区| 国产91精品一区二区麻豆网站| 岛国精品一区二区| 在线成人午夜影院| 久久综合九色综合久久久精品综合 | 日本一二三不卡| 亚洲欧美日韩系列| 视频一区中文字幕| 黄色小说综合网站| 成熟亚洲日本毛茸茸凸凹| 91美女蜜桃在线| 91精品国产手机| 国产欧美一区二区精品秋霞影院| 亚洲视频免费看| 视频一区免费在线观看| 国产999精品久久久久久| 在线观看日韩精品| 亚洲精品在线观看网站| 亚洲免费成人av| 麻豆91在线播放免费| 不卡视频一二三四| 69堂精品视频| 国产精品白丝在线| 免费观看一级特黄欧美大片| 国产成人aaaa| 在线播放日韩导航| 国产精品久久久久永久免费观看| 五月天中文字幕一区二区| 国产成人精品免费网站| 欧美视频一区二区三区四区 | 樱花草国产18久久久久| 秋霞影院一区二区| 在线欧美小视频| 久久精品一区二区三区不卡| 亚洲福利视频一区二区| 成人黄色a**站在线观看| 欧美狂野另类xxxxoooo| 亚洲人成影院在线观看| 国产一区在线观看麻豆| 欧美军同video69gay| 日韩一区在线播放| 国产毛片一区二区| 91精品国产欧美一区二区| 亚洲视频一二区| 国产在线播放一区三区四| 欧美在线观看禁18| 国产精品麻豆网站| 国产麻豆9l精品三级站| 在线综合亚洲欧美在线视频| 亚洲一区二区四区蜜桃| 丁香婷婷综合色啪| 国产欧美在线观看一区| 经典三级一区二区| 欧美一级夜夜爽| 亚洲成av人片在线| 欧美性生活一区| 亚洲动漫第一页| 色哟哟国产精品| 亚洲美女区一区| 99riav一区二区三区| 国产精品美女久久久久久| 国产激情一区二区三区| 精品国产1区二区| 国产一区在线看| 国产日韩欧美精品一区| 国产不卡视频一区| 国产精品成人一区二区艾草 | 久久99精品久久久久久动态图|