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.

Foi útil?

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).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top