0

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

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

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

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

dhd_start_xmit(..)从另一个司机那里打电话寄出我的包裹。dhd_start_xmit(..)调用dhd_sendpkt(..),然后dhd_bus_txdata(..)(在 bcmdhd/dhdpcie.c 中)在数据排队的地方调用。基本上,这就是我忘记在队列安排后发生的事情的地方dhd_bus_schedule_queue(..)

问题

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

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

谢谢

4

2 回答 2

2

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

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

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

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

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

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

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

谢谢

于 2016-11-13T14:58:55.833 回答
1

数据包在函数中被释放

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

在文件dhd_msgbuf.c

PKTFREE(dhd->osh, pkt, TRUE);
于 2016-11-06T01:15:12.457 回答