Vínculo de alcance Multicast IPv6 no puede enrutar paquetes de repente en un MacBook Pro?
Pregunta
Esta es una pregunta un poco oscura, pero estoy perplejo y pensé que tal vez alguien por ahí podría tener más de una pista sobre el tema.
Mi compañero de trabajo ha estado funcionando con éxito una aplicación interna que utiliza la multidifusión IPv6 en su MacBook Pro durante varios meses, pero hoy el Mac decidió dejar de enrutamiento de los paquetes de multidifusión. En particular, el programa imprime este error:
SendDataUDP (FF02 :: grano: cede: escritura: alimentación @ 4) falló en la interfaz de Red [Name = [en0] Descripción = [] IP = [fe80 :: 222: 41ff: FE21: dfd4 @ 4] Máscara de red = . [ffff: ffff: ffff: ffff ::] Broadcast = [::]] (errno = 65 / No ruta al host)
..., que describe bastante bien lo que salió mal ... se trató de sendto () un paquete UDP a la dirección IP que se muestra, y enviar () falló con errno = EHOSTUNREACH.
Lo que no entiendo es, ¿qué podría causar un vínculo de alcance dirección multicast IPv6 sea "inalcanzable"? Si mi comprensión de multidifusión vínculo de alcance es correcta, el paquete sólo se tiene que salir del puerto local Ethernet (en0 en este caso, lo que está en marcha y trabajando en esa máquina).
¿Hay algún aspecto de multidifusión que me falta, o es sólo borked su máquina? Dice que no ha cambiado nada, sólo misteriosamente dejó de funcionar.
Solución
Podría ayudar a mirar el fuente del núcleo. (En particular, el camino de salida de salida de paquetes IPv6, ip6_output.c) Mientras estás ahí, se podría también echar un vistazo a las llamadas de socket que conducen a ella, etc.
Para multidifusión, asumiendo que usted está haciendo a ip6_output()
, parece que la única manera posible para obtener este error si no especifica la interfaz para enviar sucesivamente. (Que es extraño, ya que su mensaje de error menciona explícitamente la interfaz)
¿Es posible que la interfaz inalámbrica en este MacBook se ha habilitado cuando no lo era antes, y ahora la idea de una multidifusión "de enlace local" es ambiguo? ¿Está especificar explícitamente la interfaz cuando se utiliza la toma? El @ 4 al final de la dirección se ve extraño para mí. (¿Es que un índice de interfaz?) La convención es por lo general a utilizar %
para una interfaz de alcance-id, pero como se ha señalado en la respuesta anterior y sus comentarios, no es universalmente compatible.
Otros consejos
Para probar si en0 sigue siendo capaz de transmitir las solicitudes de multidifusión de enlace local, intente
ping6 ff02::1%en0
Este contactos todos los hosts, por lo que debe obtener un montón de respuestas (por diversión, trate de añadir -w).