LwIP之網路介面管理

2021-09-27 08:14:19 字數 2936 閱讀 3805

協議棧內部使用netif的結構體來描述網路介面,先來看一下這個結構體。

/* netif結構體 */

struct netif ;

關於標誌位的定義如下

/* 網路介面標誌位 */

#define netif_flag_up 0x01u /* 網路介面是否已被上層使能 */

#define netif_flag_broadcast 0x02u /* 網路介面是否支援廣播 */

#define netif_flag_pointtopoint 0x04u /* 網路介面是否支援點到點連線 */

#define netif_flag_dhcp 0x08u /* 網路介面是否支援dhcp功能 */

#define netif_flag_link_up 0x10u /* 網路介面鏈路層是否已經使能 */

#define netif_flag_etharp 0x20u /* 網路介面是否支援arp功能 */

#define netif_flag_igmp 0x40u /* 網路介面是否支援igmp功能 */

lwip最終會將所有網路介面組織成乙個鍊錶

/* 網路介面鍊錶 */

struct netif *netif_list;

netif_add函式用於向協議棧新增乙個網路介面

/* 新增乙個網路介面到鍊錶 */

struct netif *netif_add(struct netif *netif, 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))

/* 將網路介面新增到鍊錶 */

netif->next = netif_list;

netif_list = netif;

return netif;

}

netif_remove從協議棧中移除網路介面

/* 從鍊錶中移除乙個網路介面 */

void netif_remove(struct netif * netif)

else

}/* 沒找到該節點 */

if (tmpnetif == null)

return;

} /* 該網路介面為預設網路介面,預設網路介面置為mull */

if (netif_default == netif)

netif_set_default(null);

}

啟用和禁止網路介面

/* 使能網路介面 */ 

void netif_set_up(struct netif *netif)

}}

/* 關閉網路介面 */ 

void netif_set_down(struct netif *netif)

}

/* 網路介面是否使能 */ 

u8_t netif_is_up(struct netif *netif)

改變ip位址、子網掩碼、閘道器位址函式

/* 網路介面改變ip位址 */

void netif_set_ipaddr(struct netif *netif, struct ip_addr *ipaddr)

else

}/* 遍歷listen狀態tcp控制塊鍊錶 */

for (lpcb = tcp_listen_pcbs.listen_pcbs; lpcb != null; lpcb = lpcb->next)

}} /* 網路介面設定新的ip位址 */

ip_addr_set(&(netif->ip_addr), ipaddr);

}/* 設定ip位址 */

#define ip_addr_set(dest, src) (dest)->addr = \

((src) == null? 0:\

(src)->addr)

/* 網路介面改變子網掩碼 */

void netif_set_netmask(struct netif *netif, struct ip_addr *netmask)

/* 網路介面改變閘道器位址 */

void netif_set_gw(struct netif *netif, struct ip_addr *gw)

通過名字查詢網路介面

/* 通過名字查詢網路介面,name[0-1]為網路介面名字,name[2]為網路介面編號 */

struct netif *netif_find(char *name)

num = name[2] - '0';

/* 遍歷網路介面鍊錶 */

for(netif = netif_list; netif != null; netif = netif->next)

} return null;

}

lwip提供了乙個預設網路介面

/* 預設網路介面 */

struct netif *netif_default;

/* 設定netif為預設網路介面 */

void netif_set_default(struct netif *netif)

LwIP 網路介面管理

netif 各種型別網路介面的抽象 netif.c netif.h netif.h 網路介面最大實體地址長度,這裡定義為乙太網網絡卡 mac 位址的長度 6 define netif max hwaddr len 6u 下面幾個巨集為網路介面屬性 狀態相關的巨集,主要用於描述 netif 中 fla...

LwIP 網路介面管理

netif 各種型別網路介面的抽象 netif.c netif.h netif.h 網路介面最大實體地址長度,這裡定義為乙太網網絡卡 mac 位址的長度 6 define netif max hwaddr len 6u 下面幾個巨集為網路介面屬性 狀態相關的巨集,主要用於描述 netif 中 fla...

LwIP協議棧介面

協議棧api函式 1 netconn new udp tcp struct netconn netconn new enum netconn type t 為新連線申請乙個連線結構netconn空間 2 netconn delete udp tcp err t netconn delete stru...