I pacchetti multicast IPv6 con ambito collegamento improvvisamente non sono instradabili su un MacBook Pro?

StackOverflow https://stackoverflow.com/questions/1264948

Domanda

Questa è una domanda un po' oscura, ma sono perplesso e ho pensato che forse qualcuno là fuori avrebbe potuto avere più indizi sulla questione.

Il mio collega ha eseguito con successo per diversi mesi un'applicazione interna che utilizza il multicasting IPv6 sul suo MacBook Pro, ma oggi il Mac ha deciso di interrompere l'instradamento dei pacchetti multicast.In particolare il programma stampa questo errore:

SendDataUDP(ff02::bead:cede:deed:feed@4) non riuscito sull'interfaccia di rete [Nome=[en0] Descrizione=[] IP=[fe80::222:41ff:fe21:dfd4@4] Netmask=[ffff: ffff:ffff:ffff::] Trasmissione=[::]] (errno=65/Nessun percorso verso l'host).

...che descrive abbastanza bene cosa è andato storto...ha provato a sendto() un pacchetto UDP all'indirizzo IP mostrato e send() ha fallito con errno=EHOSTUNREACH.

Quello che non capisco è: cosa potrebbe rendere "irraggiungibile" un indirizzo multicast con ambito collegamento IPv6?Se la mia comprensione del multicast con ambito collegamento è corretta, il pacchetto deve solo uscire dalla porta Ethernet locale (en0 in questo caso, che è attiva e funzionante su quella macchina).

C'è qualche aspetto del multicast che mi sfugge o la sua macchina è semplicemente rotta?Dice che non ha cambiato nulla, ha semplicemente smesso misteriosamente di funzionare.

È stato utile?

Soluzione

Potrebbe essere utile dare un'occhiata a sorgente del kernel.(In particolare, il percorso di uscita del pacchetto IPv6 in uscita, ip6_output.c) Mentre sei lì, potresti anche dare un'occhiata alle chiamate socket che portano ad esso, ecc.

Per il multicast, supponendo che tu ce la faccia ip6_output(), sembra che l'unico modo possibile per ottenere questo errore sia non specificare l'interfaccia su cui inviare.(il che è strano poiché il tuo messaggio di errore menziona esplicitamente l'interfaccia)

È possibile che l'interfaccia wireless su questo MacBook sia stata abilitata quando non lo era prima, e ora l'idea di un multicast "link-local" è ambigua?Stai specificando esplicitamente l'interfaccia quando usi il socket?Il @4 alla fine dell'indirizzo mi sembra strano.(È un indice di interfaccia?) Di solito la convenzione è quella di usare % per un'interfaccia scope-id, ma come notato nella risposta precedente e nei suoi commenti, non è universalmente supportato.

Altri suggerimenti

Per verificare se en0 è ancora in grado di trasmettere richieste multicast link-local, prova

ping6 ff02::1%en0

Questo contatta tutti gli host, quindi dovresti ricevere molte risposte (per divertimento, prova ad aggiungere -w).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top