2012-06-06 4 views
6

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

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

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

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

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 

ответ

2

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

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

+0

Хорошо, есть ли способ на C, чтобы вручную отправить отчет о членстве, не дожидаясь запроса или покидая группу в первую очередь? Я сомневаюсь, что мой 20-долларовый коммутатор делает это. – derhoch

+1

Да, просто создайте собственный IGMP-пакет (достаточно IGMPv2) с типом отчета о членстве и вашим групповым адресом. Возможно, вам понадобится сырой сокет для его отправки, поскольку нет заголовка TCP или UDP. – scai

1

Вам необходимо 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 (как корень):

igmpproxy -v /path/to/igmpproxy.conf 
0

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