发送数据包后,linux wifi驱动程序会发生什么(数据包的生命周期)?

时间:2016-10-01 04:18:55

标签: linux-kernel driver wireless broadcom

我正在研究低延迟应用程序,将udp数据包从主服务器发送到从服务器。主设备充当接入点,将数据直接发送到从设备。它大部分都运行良好,但有时数据是在奴隶中到达的。为了缩小延迟的可能来源,我想在主设备发送数据包时为数据包加时间戳。

为了达到这个目的,我需要一个钩子,我可以在发送数据包后立即采用时间戳

根据http://www.xml.com/ldd/chapter/book/ch14.html#t7,在发送数据包后应该有一个中断,但我无法真正找到服务于tx中断的位置。

这是驱动程序: drivers/net/wireless/bcmdhd/dhd_linux.c

我从另一个驱动程序调用{​​{1}}发送我的数据包。 import cv2 import cv cap = cv2.VideoCapture(0) while True: ret,img=cap.read() cv2.imshow('Video', img) if(cv2.waitKey(10) & 0xFF == ord('b')): break 调用dhd_start_xmit(..),然后在数据排队的地方调用dhd_start_xmit(..)(在bcmdhd / dhdpcie.c中)。这基本上是我忘记在dhd_sendpkt(..)中安排队列后发生的事情。

问题

有人知道在这个特定的驱动程序中物理发送数据包之后会发生什么,也许可以指向我那段代码。

当然,欢迎任何其他建议如何解决这个问题。

由于

2 个答案:

答案 0 :(得分:2)

如果出现任何网络硬件和网络驱动程序,则会发生以下步骤: -

1.driver有一个发送描述符,其格式可由硬件理解。

2.driver用当前发送数据包填充描述符并将其发送到硬件队列进行发送。

  1. 成功传输后,硬件会产生中断。

  2. 此中断在驱动程序中称为传输完成功能,它将释放先前数据包的内存并重置许多内容,包括描述符等。

  3. 这里没有。 1829年,你可以看到数据包已经被释放。

    PKTFREE(dhd->osh, pkt, TRUE);
    

    由于

答案 1 :(得分:1)

数据包在函数

中被释​​放
static void BCMFASTPATH
dhd_prot_txstatus_process(dhd_pub_t *dhd, void * buf, uint16 msglen)

在文件dhd_msgbuf.c

PKTFREE(dhd->osh, pkt, TRUE);