发送数据包后 linux wifi driver 会发生什么(数据包生命周期)?

What happens in linux wifi driver after a packet is sent (life of packet)?

我正在开发一个低延迟应用程序,将 udp 数据包从主机发送到从机。主机充当接入点,将数据直接发送到从机。大多数情况下它运行良好,但有时数据在从站中到达较晚。为了缩小延迟的可能来源,我想在数据包在主设备中发送时为其添加时间戳。

为了实现这一点,我需要一个钩子,我可以在 数据包发出后立即获取时间戳。

根据 http://www.xml.com/ldd/chapter/book/ch14.html#t7 数据包发出后应该有一个中断,但我真的找不到服务 tx 中断的地方。

这是 driver: drivers/net/wireless/bcmdhd/dhd_linux.c

我从另一个 driver 呼叫 dhd_start_xmit(..) 来发送我的数据包。 dhd_start_xmit(..) 调用 dhd_sendpkt(..),然后 dhd_bus_txdata(..)(在 bcmdhd/dhdpcie.c 中)在数据排队的地方被调用。这基本上就是我忘记在 dhd_bus_schedule_queue(..).

中安排队列后发生的事情的地方

问题

有人知道在这个特定的 driver 中物理发送数据包后会发生什么吗,也许可以告诉我这段代码。

当然也欢迎任何其他解决问题的建议。

谢谢

数据包在函数中被释放

static void BCMFASTPATH
dhd_prot_txstatus_process(dhd_pub_t *dhd, void * buf, uint16 msglen)

在文件中dhd_msgbuf.c

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

对于任何网络硬件和网络驱动程序,都会发生这些步骤:-

1.driver 有一个传输描述符,其格式可以被硬件理解。

2.driver用当前发送包填充描述符,并送入硬件队列发送。

  1. 发送成功后硬件产生中断。

  2. 这个中断在驱动程序中调用传输完成函数,它将释放前一个数据包的内存并重置许多东西,包括描述符等

这里是第 1 行。 1829,可以看到数据包已经释放了。

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

谢谢