LWIP的網絡接口


1、網絡接口結構

1.1、網絡接口簡介

      TCP/IP參考模型中網絡分為4層:應用層、傳輸層、網絡層和網絡接口層。網絡接口層就對應着我們實際的網卡,LWIP支持多網口設計,LWIP中使用netif來描述每種網絡接口的特性,如接口的IP地址、接口狀態等等。那么如果有多個網卡的話LWIP是如何來組織這些網卡呢?在LWIP中用鏈表netif_list來管理眾多的網卡,當上層有數據要發送的時候LWIP會從netif_list鏈表中選擇一個合適的網卡來將數據發送出去。

1.2、netif結構

netif結構體在文件netif.h中有定義,netif結構體中每個成員變量的含義如下:
      next:該字段指向下一個neitif類型的結構體,因為LWIP可以支持多個網絡接口,當設備有多個網絡接口的話LWIP就會把所有的netif結構體組成鏈表來管理這些網絡接口。
       ipaddr,netmask和gw:分別為網絡接口的IP地址、子網掩碼和默認網關。
       input:此字段為一個函數,這個函數將網卡接收到的數據交給IP層。
       output:此字段為一個函數,當IP層向接口發送一個數據包時調用此函數。這個函數通常首先解析硬件地址,然后發送數據包。此字段我們一般使用etharp.c中的etharp_output()函數。 
linkoutput:此字段為一個函數,該函數被ARP模塊調用,完成網絡數據的發送。上面說的etharp_output函數將IP數據包封裝成以太網數據幀以后就會調用linkoutput函數將數據發送出去。
      state:用來定義一些關於接口的信息,用戶可以自行設置。
      mtu:網絡接口所能傳輸的最大數據長度,一般設置為1500。
      hwaddr_len:網卡MAC地址長度,6個字節。
      hwaddr:MAC地址。
      flags:網絡的接口狀態,屬性信息字段。
      name:網卡的名字。
      num:此字段為協議棧為每個網絡接口設置的一個編號,編號從0開始。

2、相關函數

2.1、netif_add

netif_add(struct netif *netif, ip_addr_t *ipaddr, ip_addr_t *netmask,  ip_addr_t
                *gw, void *state, netif_init_fn init, netif_input_fn input)

就是把netif網絡接口添加到網絡list隊列中,向網卡列表中添加一個網卡

2.2、netif_set_default

netif_set_default(struct netif *netif)

將這個網卡設置為默認網卡

2.3、netif_set_up

netif_set_up(struct netif *netif)

打開網卡 

 

點擊查看本文所在的專輯,STM32F207網絡開發


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM