解决网卡模拟的一个bug

 现象: 在cfe中,当给网卡配上ip地址以后,外面可以ping -f,但系统启动以后,用initramfs中的ipconfig配上网卡后,发现不能ping通虚拟机,用tcpdump发现arp的通信是正常的,通过调试,发现在sb1250的驱动中有 
        len = (int)G_DMA_DSCRB_PKT_SIZE(dsc->dscr_b) - 4;
在收到包的时候会把dma传过来的长度减去4,查资料发现这个是crc的长度,由于在arp处理过程中没有检查skb的长度,所以,arp的通信正常,但在 ip_rcv中检查长度了,所以包被丢弃.在网卡模拟程序中加上crc的长度,问题解决.还可以用ping flood来测试呢:)

  [root@localhost ipconfig]# ping 192.168.0.1 -f
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
....................................................................................................................................

由于延迟比较大,刚开始会丢一些包,但以后就不丢了.这个是性能优化问题了,留待以后解决,不过现在网卡的模拟算是比较正常了.
posted @ 2011-04-05 13:44  konggang  阅读(199)  评论(0)    收藏  举报