日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LWIP源码结构分析

發布時間:2025/6/15 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LWIP源码结构分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

LWIP(Light weight internet protocol)主要模塊包括:配置模塊,初始化模塊,NetIf模塊,mem(memp)模塊,netarp模塊,ip模塊,udp模塊,icmp模 塊,dhcp模塊,tcp模塊,snmp模塊等。下面我們主要對需關心的協議處理進行說明和梳理。

配置模塊

配置模塊通過各種宏定義的方式對系統、子系統進行配置。比如:通過宏,配置了mem管理模塊的參數。該配置模塊還通過宏,配置了協議棧所支持的協議簇,通過宏定制的方式,決定了支持那些協議。主要的文件是opt.h

初始化模塊

初始化模塊入口的文件為tcpip.c,其初始化入口函數為:

void tcpip_init(void (* initfunc)(void *),void *arg)

該入口通過調用lwip_init ()函數,初始化了所有的子模塊,并啟動了協議棧管理進程。同時,該函數還帶有回調函數及其參數。可以在需要的地方進行調用。

協議棧數據分發管理進程負責了輸入報文的處理、超時處理、API函數以及回調的處理,原型如下:

static void tcpip_thread(void *arg)

NetIf模塊

NetIf模塊為協議棧與底層驅動的接口模塊,其將底層的一個網口設備描述成協議棧的一個接口設備(net interface)。該模塊的主要文件為netif.c。其通過鏈表的方式描述了系統中的所有網口設備。

NetIf的數據結構描述了網口的參數,包括IP地址、MAC地址、link狀態、網口號、收發函數等等參數。一個網口設備的數據收發主要通過該結構進行。

Mem(memp)模塊

Mem模塊同一管理了協議棧使用的內容緩沖區,并管理pbuf結構以及報文的字段處理。主要的文件包括mem.c、memp.c、pbuf.c。

netarp 模塊

netarp模塊是處理arp協議的模塊,主要源文件為etharp.c。其主要入口函數為:

err_t ethernet_input(struct pbuf *p,struct netif *netif)

該入口函數通過判斷輸入報文p的協議類型來決定是按照arp協議進處理還是將該報文提交到IP協議。如果報文是ARP報文,該接口則調用etharp_arp_input,進行arp請求處理。

如果是ip報文,該接口就調用etharp_ip_input進行arp更新,并調用ip_input接口,將報文提交給ip層。

?

在該模塊中,創建了設備的地址映射arp表,并提供地址映射關系查詢接口。同時還提供了arp報文的發送接口。如下:

err_t etharp_output(struct netif *netif, struct pbuf *q, struct ip_addr *ipaddr)

?

該接口需要注冊到netifoutput字段,ip層在輸出報文時,通過該接口獲取目標機的MAC地址,組合最終報文后,由該接口調用底層設備的驅動接口發送數據。

?

etharp_output接口中,判斷報文類型,如果是廣播包或者組播包,就調用etharp_send_ip(組裝目標mac和源mac)接口,etharp_send_ip調用netif結構中的設備驅動注冊的linkoutput鉤子函數發送最終報文。如果是單播包,etharp_output接口就調用etharp_query進行ip地址和MAC地址的映射,來獲取到目標機的MAC地址。并在etharp_query中調用etharp_send_ip來發送最終組合報文。

?

ip模塊

ip模塊實現了協議的ip層處理,主要文件為ip.c。其主要入口函數為:

err_t ip_input(struct pbuf *p, struct netif *inp)

該接口通過判斷輸入報文的協議類型,將其輸入到相應的上層協議模塊中去。比如,將udp報文送到udp_input

?

該模塊另外一個接口是輸入函數,原型如下:

err_t ip_output(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, u8_t ttl, u8_t tos, u8_t proto)

?

該接口通過路由表或者傳輸ip后,調用netifoutput字段函數鉤子發送報文。

udp模塊

udp模塊實現了udp協議層的協議處理,主要文件為udp.c。該模塊通過PCB控制塊將應用端口跟應用程序做了綁定。在接收到新報文時,分析其對應的PCB,找到對應的處理鉤子,進行應用的處理。主要入口函數為:

void udp_input(struct pbuf *p, struct netif *inp)

?

該模塊負責輸出的接口如下:

err_t udp_send(struct udp_pcb *pcb, struct pbuf *p)

?

該模塊負責將一個PCB跟一個本地端口進行綁定的接口如下:

err_t udp_bind(struct udp_pcb *pcb, struct ip_addr *ipaddr, u16_t port)

?

該模塊負責將一個PCB跟一個遠端端口綁定的接口如下:

err_t udp_connect(struct udp_pcb *pcb, struct ip_addr *ipaddr, u16_t port)

?

icmp模塊

該模塊負責icmp協議的處理,其比較簡單。主要的處理接口如下:

?

Void icmp_input(struct pbuf *p, struct netif *inp)

上述接口負責icmp輸入報文的分析和處理。

?

igmp模塊

igmp模塊負責分組管理。其主要的接口函數如下:

?

void igmp_input(struct pbuf *p, struct netif *inp, struct ip_addr *dest)

該接口負責IGMP協議報文的處理,比如分析當前報文是請求還是應答。

?

err_t igmp_joingroup(struct ip_addr *ifaddr, struct ip_addr *groupaddr)

該接口將一個網口加入一個組。

?

err_t igmp_leavegroup(struct ip_addr *ifaddr, struct ip_addr *groupaddr)

該接口將一個網口從一個組中移出。

dhcp模塊

dhcp模塊用于獲取設備ip地址的相關信息。其處理入口主要有這么幾個:dpch的啟動、dpch的接收報文處理以及定時器模塊的處理。

主要的接口原型如下:

?

err_t dhcp_start(struct netif *netif)

該接口用于設備啟動dhcp模塊,主要是客戶端的功能。該模塊實現設備dhcp描述結構生成,并將dhcp的端口綁定到udp協議中,以及將本dhcp模塊跟遠端服務器端口進行綁定。最后啟動dhcp申請。

?

static void dhcp_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, struct ip_addr *addr, u16_t port)

該接口為一個注冊接口,用于dhcp報文接收。在start dhcp時,該接口通過dhcpudp pcb注冊到udp協議層。Udp進行報文處理后,根據端口調用該注冊接口。該接口中,實現dhcp報文的協議處理。

Void dhcp_fine_tmr()

Void dhcp_coarse_tmr()

這兩個函數接口實現了dhcp的相關超時處理監控。上面一個用于請求應答超時處理。下面一個用于地址租用情況的到期處理。

?

從源碼分析看,上述的接口在應用lwip的協議棧時,需要重點關注。對于小內存應用的場合,該協議棧的內存管理以及pbuf應用部分需要自行改寫。

2 LWIP 的協議流程

下面這張圖比較清楚的描述了lwip的報文處理流程,呵呵,借用一下。不過,其對netif->output描述不夠。從代碼看,該output實際是arp層的輸出,最后通過arp層調用netif中的底層輸出接口發送報文。

總結

以上是生活随笔為你收集整理的LWIP源码结构分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美天堂在线视频 | 色在线视频 | 91片黄在线观 | 亚洲中文字幕无码一区 | 就是色| 国产午夜精品在线观看 | 欧美一区二区三区四区在线 | 黄色a级免费 | 麻豆一区产品精品蜜桃的特点 | 精品无码人妻一区二区免费蜜桃 | 最新中文字幕在线观看 | 激烈的性高湖波多野结衣 | 黄色一级网站 | 潘金莲三级野外 | 亚洲经典一区二区三区 | 午夜欧美精品 | 国产女主播一区二区三区 | 久久久久久久久久亚洲 | 成人免费视屏 | 精品日韩在线 | 欧美一区久久 | 69视频在线| 国产在线97 | 91在线精品观看 | 成人精品水蜜桃 | 男人的天堂你懂的 | 女优一区 | 西欧毛片 | а中文在线天堂 | 91免费污视频 | 成人午夜免费福利视频 | 免费看黄在线网站 | 韩国三级久久 | 欧美乱论 | 久久九九色 | 国产视频1 | 欧美日韩亚洲一区 | 欧美日本高清 | av资源网在线观看 | 欧美乱色| 日韩免费网站 | 成人午夜在线播放 | 欧美乱人伦| 国产色视频一区二区三区qq号 | 欧美日韩一区二区在线播放 | 打屁股无遮挡网站 | 色5月婷婷 | 99热免费在线观看 | 国产视频在线一区 | 我们的生活第五季在线观看免费 | 制服.丝袜.亚洲.中文.综合 | 久久久成人免费视频 | 不卡的av在线 | 亚洲欧美日韩综合一区二区 | 欧美理论片在线观看 | 国产婷婷在线视频 | 2019天天操 | 国产日韩欧美一区二区东京热 | 国产一区二区视频免费 | 国内精品免费视频 | 日韩精品在线观看一区二区 | 国产一区二区三区影视 | 成人小网站 | 国语对白做受按摩的注意事项 | 久久人人添人人爽添人人片 | 亚洲人成电影在线 | 青青草97国产精品麻豆 | 青青久久久 | 中文字幕av亚洲精品一部二部 | 国产视频久久久 | 91手机在线视频 | 黄色污污网站在线观看 | 亚洲国产日韩欧美一区二区三区 | 国产黄色大片在线观看 | 黄网av| 国产乱淫av片| 欧美在线视频观看 | 捆绑无遮挡打光屁股调教女仆 | 蜜桃臀一区二区三区 | 欧美三级在线观看视频 | 欧美在线国产 | 风间ゆみ大战黑人 | 波多野结衣潜藏淫欲 | 操操操网站 | 很嫩很紧直喷白浆h | 丝袜视频在线观看 | 插插看| 国产精品99久久久久久一二区 | 国产欧美日韩在线视频 | 艳母动漫在线播放 | 久久久少妇 | 成人免费三级 | 51ⅴ精品国产91久久久久久 | 五月深爱网 | 免费看污黄网站在线观看 | 久久久久久国产 | 91在线观看免费高清 | 玖草在线| 婷婷精品|