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