我正在研究低延迟应用程序,将udp数据包从主服务器发送到从服务器。主设备充当接入点,将数据直接发送到从设备。它大部分都运行良好,但有时数据是在奴隶中到达的。为了缩小延迟的可能来源,我想在主设备发送数据包时为数据包加时间戳。
为了达到这个目的,我需要一个钩子,我可以在发送数据包后立即采用时间戳。
根据http://www.xml.com/ldd/chapter/book/ch14.html#t7,在发送数据包后应该有一个中断,但我无法真正找到服务于tx中断的位置。
这是驱动程序: drivers/net/wireless/bcmdhd/dhd_linux.c
我从另一个驱动程序调用{{1}}发送我的数据包。 import cv2
import cv
cap = cv2.VideoCapture(0)
while True:
ret,img=cap.read()
cv2.imshow('Video', img)
if(cv2.waitKey(10) & 0xFF == ord('b')):
break
调用dhd_start_xmit(..)
,然后在数据排队的地方调用dhd_start_xmit(..)
(在bcmdhd / dhdpcie.c中)。这基本上是我忘记在dhd_sendpkt(..)
中安排队列后发生的事情。
有人知道在这个特定的驱动程序中物理发送数据包之后会发生什么,也许可以指向我那段代码。
当然,欢迎任何其他建议如何解决这个问题。
由于
答案 0 :(得分:2)
如果出现任何网络硬件和网络驱动程序,则会发生以下步骤: -
1.driver有一个发送描述符,其格式可由硬件理解。
2.driver用当前发送数据包填充描述符并将其发送到硬件队列进行发送。
成功传输后,硬件会产生中断。
此中断在驱动程序中称为传输完成功能,它将释放先前数据包的内存并重置许多内容,包括描述符等。
这里没有。 1829年,你可以看到数据包已经被释放。
PKTFREE(dhd->osh, pkt, TRUE);
由于
答案 1 :(得分:1)
数据包在函数
中被释放static void BCMFASTPATH
dhd_prot_txstatus_process(dhd_pub_t *dhd, void * buf, uint16 msglen)
在文件dhd_msgbuf.c
中与
PKTFREE(dhd->osh, pkt, TRUE);