Multicast Join auf Linux und IGMPv3
Wir haben in einem schwierigen problem. Wir schreiben ein c++ - Programm, das empfängt, die multicast-UDP-Datenverkehr. Wir sind in den Prozess der Umstellung unserer Anwendungen, zu einem anderen Netzwerk Umwelt und unserem operations-team hat sich gewünscht, dass wir Unterstützung von IGMPv3-Mitgliedschaft, Ankündigungen von unseren Anwendungen. Erste Untersuchungen weisen darauf hin, dass der Linux 2.6 Kernel unterstützt IGMPv3. Deshalb bin ich verwundert dass, wenn wir laufen tcpdump sehen wir die folgende Ausgabe Spuren:
[rtv@myhost]$ sudo /usr/sbin/tcpdump -i eth1.22 igmp
tcpdump: listening on eth1.22
00:20:09.007094 switch-a.stage > ALL-SYSTEMS.MCAST.NET: igmp query v2 [max resp time 20] [ttl 1]
00:20:09.241946 10.129.22.236 > 232.0.1.10: igmp v2 report 232.0.1.10 (DF) [tos 0xc0] [ttl 1]
00:20:10.472159 10.129.22.236 > 236.0.1.101: igmp v2 report 236.0.1.101 (DF) [tos 0xc0] [ttl 1]
44 packets received by filter
Mein Verständnis ist, dass man Kraft der kernel verwenden Sie eine niedrigere version von IGMP durch die Angabe einer nicht-null-Wert in der Datei /proc/sys/net/ipv4/conf/eth1.22/force_igmp_version; jedoch, ich haben bestätigt, dass die Datei hat eine null-Wert-Konfiguration.
Unsere Anwendung wird mit dem folgenden code zu der multicast-Gruppe beitreten:
... joinMulticast(in_addr mcast_addr, in_addr interface_addr)
{
struct ip_mreq mcast_req;
mcast_req.imr_multiaddr.s_addr = mcast_addr;
mcast_req.imr_interface.s_addr = interface_addr;
int err = setsockopt(fFileDesc, IPPROTO_IP, IP_ADD_MEMBERSHIP,
(char*)&theMulti, sizeof(theMulti));
//handle errors etc.
//...
}
Gibt es etwas extra, die wir brauchen, um in dem source-Programm zu zwingen, IGMPv3?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Paar Dinge zu beachten.
Die erste ist, dass (wie ich es verstehe) die Einstellung der
/proc/sys/net/ipv4/conf/eth1.22/force_igmp_version
auf 0 bedeutet nicht "benutzen v3", aber eigentlich setzt es auf "auto". Ich glaube, man kann Sie auf 3, um ihn zu zwingen verwenden igmp v3.Jedoch die andere Sache zu beachten ist, dass das Verhalten des igmp-stack ist bestimmt durch die Umgebung, es findet sich in. Wenn Ihre linux-box ist der Empfang von igmp-v2-Mitgliedschaft Abfragen von einem upstream-igmp-router, dann glaube ich, dass der Standard-linux-Verhalten (im Auftrag des igmp v3 rfc) ist die Verwendung nur igmp v2 für Berichte.
Wie ich es verstehe, wenn Sie
/proc/sys/net/ipv4/conf/eth1.22/force_igmp_version
auf 0 wird dieses Verhalten.