链路范围IPv6组播数据突然无法在MacBook Pro上可路由?
题
这是一个稍微模糊的问题,但我很为难,我想也许有人在那里可能有更多的线索上的问题。
我的同事已经成功运行了他的MacBook Pro几个月使用IPv6组播的内部应用程序,但今天苹果决定停止路由组播报文。特别地,该程序将打印这个错误:
SendDataUDP(FF02 ::珠:半寸:契:饲料@ 4)发生故障的网络接口上的[名称= [EN0]描述= [] IP = [FE80 :: 222:41ff:FE21:dfd4 @ 4] =掩码[FFFF:FFFF:FFFF:FFFF ::]广播= [:]](错误= 65 /否到主机的路由)
...这很好说明了什么问题......它试图SENDTO()一个UDP包,显示的IP地址,并发送()的错误号= EHOSTUNREACH失败。
我不明白的是,什么可能导致IPv6链路范围的组播地址为“无法访问”?如果我的链路范围多播的理解是正确的,数据包只需要走出本地以太网口(EN0在这种情况下,启动并工作的那台机器上)。
有一些方面多播我失踪,或者被他的机器只是borked?他说,他没有任何改变,只是神秘地停止了工作。
解决方案
这可能有助于看的内核源。 (尤其是出口IPv6数据包出口路径,ip6_output.c)当你在里面,你也可以看看的套接字调用导致它,等等。
有关组播,假设你正在做它ip6_output()
,它看起来像唯一可能的方式来得到这个错误是不指定发送的接口。 (这是因为奇你的错误消息明确提到的界面)
是否有可能,当它之前并不在这款MacBook无线接口已启用,现在“链路本地”多播的概念是模糊的?你明确指定接口时,可以使用socket?在地址的末尾@ 4看起来很奇怪我。 (那是一个接口索引?)的约定,通常是使用%
为一个接口范围-ID,但如前面的答案,其评论中指出,它没有得到普遍支持。
其他提示
要测试EN0是否仍然能够发送链路本地多播请求,尝试
ping6 ff02::1%en0
该联系人的所有主机,所以你应该得到足够的响应(为了好玩,尝试添加-w)。