-
-
[原创]Linux e1000网卡收包分析
-
发表于: 2019-7-8 14:12 7250
-
内核版本是5.2.0-rc4,调试是在QEMU下进行的,默认的网卡是e1000,为了方便调试将e1000的驱动编译进内核里
图1
在网卡分析前,图2和图3是抓取的收包和发包过程
图2
图3
其中e1000_clean_rx_irq()和e1000_xmit_frame()分别是网卡的收包和发包的核心函数。
其中e1000_clean_rx_irq()定义如下
图4
参数rx_ring中保存的从网卡中接收到的数据包,work_to_do这个变量是查询网卡中已经是否有接受好的数据的次数。work_done是表示在这些次数中,接收好的有几个。这样的设计是为了增加网卡的数据吞吐量并减少中断次数提升性能。网卡采用中断加轮询的方式。
rx_ring 的结构体定义如下
图5
其中desc,dma和buffer_info这三个变量是从网卡接收到内核的关键变量。首先是desc和dma的关系如下面代码所示。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
最后于 2019-7-8 14:14
被linuxfuns编辑
,原因:
赞赏
他的文章
看原图
赞赏
雪币:
留言: