Come ricevere UDP Multicast in VxWorks 5.5
Domanda
Non sono stato in grado di ricevere il multicast UDP in VxWorks 5.5. Sono entrato nel gruppo multicast:
setsockopt(soc, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *) &ipMreq, sizeof (ipMreq));
Il codice simile su un computer Windows adiacente riceve multicast. Sono in grado di inviare multicast da VxWorks; ifShow () indica che l'interfaccia è abilitata per multicast; MCAST_ROUTING è abilitato nella configurazione del kernel, ma non è ancora in grado di ricevere multicast.
Modifica : dovevo impostare un po 'nel registro di configurazione RX dell'unità RealTek Ethernet per consentire il passaggio del multicast al livello applicazione.
#define RTL_RXCG_AM 0x04 /* Accept Multicast */
Soluzione
Stai verificando il valore restituito nella chiamata Join setsockopt () per essere sicuro che abbia effettivamente successo? Ho avuto un problema specifico con VxWorks 5.5 in passato in cui i miei join multicast fallivano quando non dovevano essere. Credo che abbiamo dovuto ottenere nuove librerie da WindRiver per risolvere il problema.
Modifica: non esiste un trucco specifico di cui sono a conoscenza per far funzionare multicast con VxWorks. Dovrebbe utilizzare le operazioni socket standard BSD. Se l'interfaccia può ricevere correttamente il traffico unicast e un analizzatore di rete (Wireshark, ad esempio) mostra che i JOIN multicast vengono inviati e che i pacchetti multicast in ingresso sono correttamente formati, sospetterei un problema con il driver. Il supporto di WindRiver è stato molto utile per noi in passato con questo tipo di problemi; Non so se hai un contratto di supporto con loro per ottenere quel livello di assistenza.