pacotes Link-alcance IPv6 Multicast de repente não roteáveis ??em um MacBook Pro?
Pergunta
Esta é uma pergunta um pouco obscura, mas estou perplexo e pensei que talvez alguém lá fora pode ter mais de uma pista sobre o assunto.
Meu colega de trabalho foi executado com êxito uma aplicação in-house que usa IPv6 multicast em seu MacBook Pro por vários meses, mas hoje o Mac decidiu parar de encaminhamento dos pacotes multicast. Em particular, o programa imprime este erro:
SendDataUDP (FF02 :: talão: cede: ação: alimentação @ 4) falhou na interface de rede [Name = [en0] Descrição = [] IP = [fe80 :: 222: 41ff: fe21: dfd4 @ 4] Netmask = [ffff: ffff: ffff: ffff ::]. broadcast = [::]] (errno = 65 / No route to host)
... que muito bem descreve o que deu errado ... ele tentou sendto () um pacote UDP para o endereço IP mostrado, e send () falhou com errno = EHOSTUNREACH.
O que eu não entendo é, o que poderia possivelmente causar um endereço link-alcance multicast IPv6 para ser "inatingível"? Se o meu entendimento de ligação de âmbito multicast está correto, o pacote só tem de ir para fora da porta local ethernet (en0 neste caso, o que está instalado e funcionando na máquina).
Existe algum aspecto de multicast que estou em falta, ou é a sua máquina apenas borked? Ele diz que não muda nada, ele apenas misteriosamente parou de funcionar.
Solução
Pode ajudar a olhar para o fonte do kernel . (Em particular, a saída IPv6 caminho de pacotes de saída, ip6_output.c) Enquanto você está lá, você também pode dar uma olhada nas chamadas de soquete que a antecederam, etc.
Para multicast, supondo que você está fazendo isso para ip6_output()
, parece que a única maneira possível para obter este erro é não especificando a interface para enviar por diante. (O que é estranho, já que a sua mensagem de erro menciona explicitamente a interface)
É possível que a interface wireless neste MacBook foi habilitado quando não era antes, e agora a idéia de um "link-local" multicast é ambígua? Você está especificando explicitamente a interface quando você usa o soquete? O @ 4 no final do endereço parece estranho para mim. (Isso é um índice interface?) A convenção é geralmente para uso %
para uma interface âmbito-id, mas, como mencionado na resposta anterior e as suas observações, não é universalmente suportado.
Outras dicas
Para testar se en0 ainda é capaz de transmitir pedidos multicast link-local, tente
ping6 ff02::1%en0
Este contactos todos os hosts, então você deve começar a abundância de respostas (por diversão, tente adicionar -W).