返回信息流arm,pc机上都装了linux,已加载ipv6模块。
arm,pc都开好机后,如果pc机先ping6 arm,不通;arm ping6 pc机,通的;arm ping6 pc机,然后再执行pc机 ping6 arm,通,但是隔上几分钟又ping6不通了。
为什么?
ipv4,arm和pc机间一直都可以ping通。
现在需要用到udp socket,如果arm做client,pc做server,正常;arm做server,pc做client,pc机给arm发信息,也是有时候行有时候不行。
能帮我分析下原因吗?谢谢!
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #6490同步于 2009/11/12
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖
[求助]arm板可以ping6通pc机,pc机ping6不通arm板,为什么?
jennymasar
2009/11/12镜像同步13 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
socket上pc与arm板通信做过,确实没有lz的问题,建议先想办法定位吧,看看到底是哪
部分出问题
【 在 jennymasar (holy shit) 的大作中提到: 】
: arm,pc机上都装了linux,已加载ipv6模块。
: arm,pc都开好机后,如果pc机先ping6 arm,不通;arm ping6 pc机,通的;arm ping6 pc机,然后再执行pc机 ping6 arm,通,但是隔上几分钟又ping6不通了。
: 为什么?
: ...................
好好分析了下,找到一些问题,贴出来吧。问题还是没有最终解决
server端先发起的ping6(或udp、tcp),server的邻居表中没有arm ipv6地址与mac地址的映射关系,因此会先发送邻居请求,neighbor solicitation,按理说,arm应该会回应邻居公告,neighbor advertisement,报告自己的mac地址。但是我的arm板并没有进行这一步,目前观察到的是,邻居请求包并没有进入到arm的网卡驱动接收程序中,原因没有查明。
若arm发起ping6,同样的过程,pc server能够正确发出邻居公告,并且会将arm的mac地址与v6地址映射关系加入邻居表中,此时这一映射关系在邻居表中的状态为REACHABLE。因此,若此时server ping6 arm,不用再发邻居请求,直接从邻居表中找映射关系,完成v6通信。邻居表项有存活期,很短的时间内,状态由变为STALE,再过一段时间这一表项会被删除。对应的观察到的现象就是,过一段时间再由server ping6 arm,又不通了。
可以这样来暂时解决问题:
在邻居表中添加arm v6地址与mac地址的映射关系,并设置这一表项的状态为permanent,邻居表中将永远存在这一表项。
最彻底的解决当然还是要找出sever发出的邻居请求包为什么没有进入到网卡驱动接收处理程序中。
大家遇到过这类问题吗?
邻居表更新的相关分析很细致,很不错!
关于进一步的调试,有些建议,不知是否符合情况
1、pc和arm两边最好确定帧已经发出并收到了(即使明确知道是OS丢弃了也行)。具体的:ifconfig看看能不能检测到,不行的话pc这边可以装sniffer,或者用集线器再连接一个pc抓包看看。另外,看看包的细节,比如比较一下两个pc对ping时候包的各个字段,省的arm不认识。
2、可以翻翻内核代码或者ipv6的软件包,找找这个报文的处理流程,如果有时间的话,加些调试语句重编内核。这个比较费时,不过应该对理解此部分运作机制有很大的好处。
说的比较泛,也不知道有没有用
期待lz的进一步发现哦~
【 在 jennymasar (holy shit) 的大作中提到: 】
: 好好分析了下,找到一些问题,贴出来吧。问题还是没有最终解决
: server端先发起的ping6(或udp、tcp),server的邻居表中没有arm ipv6地址与mac地址的映射关系,因此会先发送邻居请求,neighbor solicitation,按理说,arm应该会回应邻居公告,neighbor advertisement,报告自己的mac地址。但是我的arm板并没有进行这一步,目前观察到
: 若arm发起ping6,同样的过程,pc server能够正确发出邻居公告,并且会将arm的mac地址与v6地址映射关系加入邻居表中,此时这一映射关系在邻居表中的状态为REACHABLE。因此,若此时server ping6 arm,不要再查发邻居请求,直接从邻居表中找映射关系,完成v6通信。邻居表项
: ...................
后来就没去弄这个问题了
【 在 haov000 的大作中提到: 】
: 请问一下这个问题解决了没,我最近也在搞ipv6,也是遇到了这个问题,情况跟你的一样,不知大虾知道答案了没,还请回复一下,谢谢!
: --
好帖!
你是如何观察到ARP请求包没有进入ARM的网卡驱动程序中的呢?在驱动程序中解析报文打印log?
PC有几个网卡呢
PC机和ARM板在物理上是怎么连接的呢?
PC机和ARM的IP是怎么设置的呢 在一个局域网网段中么
PC机上是否有默认的路由到ARM板呢
先确定ARM板是否收到了PC机的ARP请求报文
如果收到了再看ARM板的内核对V6是怎么处理的 是否被丢弃了
物理连接,路由设置应该是正确的,ipv6只要在同一个链路层就可以吧。后来可以ping6通,只是在pc机第一次ping6 arm板的时候,arm板不响应pc的邻居请求,而pc机可以响应arm板的邻居请求,arm板存下pc的mac地址后就可以正常通信了
【 在 ssailing 的大作中提到: 】
: 好帖!
: 你是如何观察到ARP请求包没有进入ARM的网卡驱动程序中的呢?在驱动程序中解析报文打印log?
: PC有几个网卡呢
: ...................