【问题标题】:What happens in linux wifi driver after a packet is sent (life of packet)?发送数据包(数据包的生命周期)后,linux wifi驱动程序会发生什么?
【发布时间】:2023-04-10 02:18:01
【问题描述】:

我正在开发一个低延迟应用程序,将 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(..) 中安排队列后发生的事情的地方。

问题

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

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

谢谢

【问题讨论】:

    标签: linux-kernel driver wireless broadcom


    【解决方案1】:

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

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

    2.driver用当前发送的数据包填充描述符,发送到硬件队列发送。

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

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

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

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

    谢谢

    【讨论】:

      【解决方案2】:

      在函数中释放数据包

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

      在文件dhd_msgbuf.c

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

      【讨论】:

        猜你喜欢
        • 2019-02-24
        • 2013-05-16
        • 2011-01-21
        • 2015-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-26
        • 1970-01-01
        相关资源
        最近更新 更多