我正在维护一些网络驱动程序,但我遇到了丢失数据的问题。结果是当我使用ping或nping发送例如ICMP或UDP ping时,一些udp / icmp数据包丢失了。
我确信在传输的ping / nping端,我的驱动程序和内核收到ping回复(tcpdump显示传入的udp或icmp数据包作为回复)。
但应用程序ping / nping有时会显示80%的数据包丢失。我怀疑这些数据包在内核和用户空间之间丢失了。
我知道对UDP来说,有一个程序udp_rcv()用于维护UDP数据包,但我不知道在将数据包传送到用户空间应用程序的路径中接下来是哪个程序。
Linux内核版本为3.3.8。
我的问题是 - 如何跟踪从驱动程序到用户空间套接字缓冲区的数据包转换的整个路径?
答案 0 :(得分:0)
udp_rcv()
是一个回传,作为struct net_protocol
传递给.handler
。
您可以查看结构中此处理程序字段的用法,也可以查看是否发生了某些错误。有一个回调err_handler
。可能在这里发生数据包丢失并且将调用错误处理程序。
P上。 S.请记住,UDP不保证100%的传输成功,而100个丢失的数据包可能是预期的行为。 (: