2012-06-06 6 views
6

Ich habe mehrere eingebettete Maschinen hören und streamen RTP-Audiodaten zu einer Multicast-Gruppe. Sie sind mit einem Smart Managed Switch verbunden (Netgear GS108Ev2), der an seinen Ports grundlegende Igmp-Snooping- und Multicast-Filterung durchführt, so dass der Rest meines (W) LANs nicht überflutet wird.Aktualisieren Multicast-Gruppenmitgliedschaft

Am Anfang funktioniert alles gut für ca. 500-520 Sekunden. Danach erhalten sie keine weiteren Daten mehr bis sie verlassen und der Gruppe wieder beitreten. Ich denke, der Switch vergisst den Join nach einer Zeitüberschreitung.

Gibt es eine Möglichkeit, die Gruppenzugehörigkeit zu aktualisieren, d. H. Den Switch wissen zu lassen, dass noch jemand zuhört, ohne Pakete zu verlieren?

Systeminfo:

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 

Antwort

2

Dies ist die Art und Weise Multicast/die IGMP-Protokoll funktioniert. Ein Client muss der Gruppe regelmäßig beitreten, indem er einen Mitgliedschaftsbericht sendet oder es wird angenommen, dass er die Gruppe nach einer kurzen Zeitüberschreitung verlassen hat. Diese Berichte werden jedoch normalerweise nur gesendet, wenn Sie eine Mitgliedsanfrage vom lokalen Multicast-Router erhalten. Entweder empfangen Ihre Clients die Abfrage nicht oder antworten nicht mit einem Bericht.

Versuchen Sie, ein Tool wie wireshark zu verwenden, um zu sehen, welche IGMP-Pakete über Ihr Netzwerk gesendet werden.

+0

Nun, gibt es eine Möglichkeit, in C manuell einen Mitgliedschaftsbericht zu senden, ohne auf die Abfrage zu warten oder die Gruppe zuerst zu verlassen? Ich bezweifle, dass mein 20 $ Schalter dies tut. – derhoch

+1

Ja, konstruiere einfach dein eigenes IGMP-Paket (IGMPv2 wird ausreichen) mit dem Typ Membership Report und deiner Multicast-Gruppenadresse. Sie benötigen wahrscheinlich einen Raw-Socket, um es zu senden, da es keinen TCP- oder UDP-Header gibt. – scai

1

Sie benötigen einen IGMP Querier senden Sie die, wie bereits von scai erklärt wurde.

Wenn Sie Ihren Router dazu nicht konfigurieren können, können Sie einen Ihrer Computer verwenden. Wenn Sie sehen, dass das Ausführen eines vollständigen Multicast-Routing-Daemons zu viel ist (und ich habe das nie getan), schlage ich vor, dass Sie versuchen, igmpproxy zu missbrauchen.

Zuerst eine Dummy-Upstream-Schnittstelle erstellen (dies ist nicht persistent ist!):

ip tap add dev tap6 mode tap 

schreiben 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 
... 

Schließlich beginnen igmpproxy (als root):

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

Wenn auf Ihren eingebetteten Geräten Linux ausgeführt wird, müssen Sie den Reverse Packet-Filter für sie deaktivieren oder sie werden nicht repo nd um Mitgliedschaftsanfragen zu gruppieren. In diesem Fall wird der Upstream-Switch annehmen, dass niemand auf diesen Multicast hört und ihn ausschaltet.

Verwandte Themen