Как получить многоадресную рассылку UDP в VxWorks 5.5

Мне не удалось получить многоадресную рассылку UDP в VxWorks 5.5. Я присоединился к многоадресной группе:

setsockopt(soc, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *) &ipMreq, sizeof (ipMreq));

Аналогичный код на соседнем компьютере с Windows получает многоадресную рассылку. Я могу отправлять мультикаст из VxWorks; ifShow() указывает, что интерфейс поддерживает многоадресную рассылку; MCAST_ROUTING включен в конфигурации ядра, но по-прежнему не может принимать многоадресную рассылку.

Редактировать: мне нужно было установить бит в регистре конфигурации RX привода RealTek Ethernet, чтобы разрешить многоадресную передачу на прикладной уровень.

#define RTL_RXCG_AM           0x04      /* Accept Multicast */

person jholl    schedule 25.09.2008    source источник


Ответы (1)


Проверяете ли вы возвращаемое значение при вызове Join setsockopt(), чтобы убедиться, что оно действительно успешно выполнено? В прошлом у меня была определенная проблема с VxWorks 5.5, когда мои многоадресные соединения терпели неудачу, хотя этого быть не должно. Я считаю, что нам пришлось получить новые библиотеки от WindRiver, чтобы решить эту проблему.

Редактировать: мне не известно какого-либо конкретного приема, позволяющего заставить многоадресную рассылку работать с VxWorks. Он должен использовать стандартные операции с сокетами BSD. Если интерфейс может правильно принимать одноадресный трафик, а сетевой анализатор (например, Wireshark) показывает, что многоадресные соединения JOIN отправляются, а входящие многоадресные пакеты формируются правильно, я подозреваю проблему с драйвером. В прошлом поддержка WindRiver очень помогала нам с подобными проблемами; Я не знаю, есть ли у вас договор о поддержке с ними, чтобы получить такой уровень помощи.

person mbyrne215    schedule 25.09.2008
comment
Да, setsockopt() возвращает NO_ERROR. - person jholl; 25.09.2008