网络驱动:数据包接收与传输详解
数据包接收
在网络数据包接收过程中,em_rxeof函数起到了关键作用。在这个函数中,变量i会不断递增,这样em_rxeof就能访问环形缓冲区中的下一个mbuf。如果sendmp指向一个mbuf链,em(4)的输入例程会被执行,将这个链发送到上层。之后,会为em(4)分配新的mbuf。
需要注意的是,当一个mbuf链被发送到上层后,驱动程序就不能再访问这些mbuf了,从各方面来看,这些mbuf已经被释放。
em_rxeof函数中的for循环会将接收到的数据包中的每个mbuf链接在一起,然后发送到上层。这个过程会一直持续,直到环形缓冲区中的所有数据包都被处理完,或者达到rx_process_limit。
以下是em_rxeof函数的最后部分代码:
if (e1000_rx_unrefreshed(rxr)) em_refresh_mbufs(rxr, i); rxr->next_t