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

问题描述 投票:0回答:2

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

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

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

这是司机: 驱动程序/网络/无线/bcmdhd/dhd_linux.c

我给另一位司机打电话

dhd_start_xmit(..)
来寄出我的包裹。
dhd_start_xmit(..)
调用
dhd_sendpkt(..)
,然后在数据排队的地方调用
dhd_bus_txdata(..)
(在 bcmdhd/dhdpcie.c 中)。这基本上就是我不知道在
dhd_bus_schedule_queue(..)
安排队列后发生的情况。

问题

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

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

谢谢

linux-kernel driver wifi broadcom
2个回答
2
投票

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

1.驱动程序有一个传输描述符,其格式可以为硬件所理解。

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

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

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

在第 1 行。 1829,可以看到数据包已经被释放了。

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

谢谢


1
投票

数据包在函数中被释放

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

在文件 dhd_msgbuf.c

PKTFREE(dhd->osh, pkt, TRUE);
© www.soinside.com 2019 - 2024. All rights reserved.