发送数据包后 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 行。 1829,可以看到数据包已经释放了。
PKTFREE(dhd->osh, pkt, TRUE);
谢谢
我正在开发一个低延迟应用程序,将 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 行。 1829,可以看到数据包已经释放了。
PKTFREE(dhd->osh, pkt, TRUE);
谢谢