链接范围IPv6多播数据包突然无法在MacBook Pro上路由?

这是一个有点模糊的问题,但我很难过,我想也许有人可能会对这个问题有更多的线索.

我的同事已成功运行一个内部应用程序,在他的MacBook Pro上使用IPv6多播几个月,但今天Mac决定停止路由多播数据包.特别是,程序打印此错误:

网络接口上的SendDataUDP(ff02 :: bead:cede:deed:feed @ 4)失败[名称= [en0]描述= [] IP = [fe80 :: 222:41ff:fe21:dfd4 @ 4]网络掩码= [ffff: ffff:ffff:ffff ::] Broadcast = [::]](错误= 65 /没有到主机的路由).

…它很好地描述了出错的地方……它试图将UDP数据包发送到(或)一个UDP数据包到显示的IP地址,而send()则用errno = EHOSTUNREACH发送失败.

我不明白的是,什么可能导致IPv6链路范围多播地址“无法访问”?如果我对链路范围组播的理解是正确的,那么数据包只需要从本地以太网端口出去(在这种情况下为en0,它在该机器上工作).

我错过了多播的某些方面,还是他的机器只是被塞了?他说他没有改变什么,只是神秘地停止了工作.

最佳答案
查看kernel source可能会有所帮助.(特别是出口IPv6数据包出口路径,ip6_output.c)当你在那里时,你还可以查看导致它的套接字调用等.

对于多播,假设您将其设置为ip6_output(),看起来获得此错误的唯一可能方法是不指定要发送的接口. (这是奇怪的,因为您的错误消息明确提到接口)

这个MacBook上的无线接口是否有可能在以前没有启用,现在“链路本地”多播的想法是不明确的?您在使用套接字时是否明确指定了接口?地址末尾的@ 4对我来说很奇怪. (这是一个接口索引吗?)约定通常是使用%作为接口scope-id,但正如前面的答案及其注释所述,它并不是普遍支持的.

转载注明原文:链接范围IPv6多播数据包突然无法在MacBook Pro上路由? - 代码日志