Обновить членство в многоадресной группе

У меня есть несколько встроенных машин, которые прослушивают и передают аудиоданные rtp в многоадресную группу. Они подключены к интеллектуальному управляемому коммутатору (Netgear GS108Ev2), который выполняет базовое отслеживание igmp и многоадресную фильтрацию на своих портах, так что остальная часть моей (W) локальной сети не заполняется.

При запуске все отлично работает около 500-520 секунд. После этого они неreceive больше данных, пока они не уйдут и снова не присоединятся к группе. Я полагаю, что переключатель "забыл" о присоединении после тайм-аута.

Есть ли способ обновить членство в группе, то есть сообщить коммутатору, что все еще кто-то слушает, не теряя пакетов?

Системная информация:

Arch: blackfin

# cat /proc/version
Linux version 2.6.28.10-ADI-2009R1-uCBF54x-EMM
(gcc version 4.3.3 (ADI) ) #158 PREEMPT Tue Jun 5 20:05:42 CEST 2012

Ответы на вопрос(3)

IGMP querier отправитьMembership Queries, как уже объяснил Scai.

Если вы не можете настроить свой маршрутизатор для этого, вы можете использовать один из своих компьютеров. Видя, что запуск демона полной многоадресной маршрутизации будет излишним (а я никогда этого не делал), я предлагаю вам попытаться злоупотребитьigmpproxy.

Сначала создайте фиктивный восходящий интерфейс (это не является постоянным!):

ip tap add dev tap6 mode tap

Напишите igmpproxy.conf:

# Dummy upstream interface.
phyint tap6 upstream  ratelimit 0  threshold 1

# Local interface.
phyint eth0 downstream  ratelimit 0  threshold 1

# Explicitly disable any other interfaces (yes, it sucks).
phyint NAME disabled
...

Наконец, запустите igmpproxy (от имени root):

igmpproxy -v /path/to/igmpproxy.conf
Решение Вопроса

Именно так работает многоадресная передача / протокол IGMP. Клиент должен периодически вступать в группу, отправляяMembership Report или предполагается, что он покинул группу после небольшого перерыва. Однако эти отчеты обычно отправляются только при полученииMembership Query с локального многоадресного маршрутизатора. Либо ваши клиенты не получают запрос, либо не отвечают сообщением.

Попробуйте использовать такой инструмент, как wireshark, чтобы увидеть, какие пакеты IGMP отправляются через вашу сеть.

 07 июн. 2012 г., 07:41
Да, просто создайте свой собственный пакет IGMP (достаточно IGMPv2) с типом «Отчет о членстве» и адресом группы многоадресной рассылки. Вам, вероятно, понадобится необработанный сокет для отправки, так как нет заголовка TCP или UDP.
 derhoch06 июн. 2012 г., 20:45
ну, есть ли способ, в C, вручную отправить отчет о членстве, не дожидаясь запроса или не покидая группу первым? Я сомневаюсь, что мой 20 $ переключатель делает это.

Если ваши встроенные устройства работают под управлением Linux, вам необходимо отключить обратный фильтр пакетов на них, иначе они не будут отвечать на запросы членства в группах. В этом случае вышестоящий коммутатор предполагает, что никто не слушает эту многоадресную рассылку, и выключает ее.

Ваш ответ на вопрос