Wir sind auf ein heikles Problem gestoßen. Wir schreiben ein C ++ - Programm, das Multicast-UDP-Datenverkehr empfängt. Wir sind dabei, unsere Anwendungen in eine andere Netzwerkumgebung zu verschieben, und unser Betriebsteam hat darum gebeten, dass wir IGMPv3-Mitgliedschaftsankündigungen von unseren Anwendungen unterstützen. Erste Untersuchungen zeigen, dass Linux 2.6 Kernel IGMPv3 unterstützen. Daher bin ich verwirrt, wenn wir tcpdump ausführen, sehen wir die folgenden Ausgabe-Traces:
%Vor%Nach meinem Verständnis könnte man den Kernel zwingen, eine niedrigere Version von IGMP zu verwenden, indem man einen Wert ungleich Null in der Datei /proc/sys/net/ipv4/conf/eth1.22/force_igmp_version angibt; Ich habe jedoch bestätigt, dass die Datei eine Nullwertkonfiguration hat.
Unsere Anwendung verwendet den folgenden Code, um der Multicast-Gruppe beizutreten:
%Vor%Gibt es etwas Zusätzliches, das wir in das Quellprogramm aufnehmen müssen, um IGMPv3 zu erzwingen?
Ein paar Dinge, die Sie beachten sollten.
Der erste ist, dass (wie ich es verstehe) das Setzen von /proc/sys/net/ipv4/conf/eth1.22/force_igmp_version
auf 0 nicht "v3 verwenden" bedeutet, sondern "auto". Ich glaube, dass Sie es auf 3 setzen können, um es zu zwingen, igmp v3 zu verwenden.
Die andere Sache, die Sie beachten sollten, ist, dass das Verhalten des igmp-Stacks von der Umgebung bestimmt wird, in der es sich befindet. Wenn Ihre Linux-Box Mitgliedschaftsanfragen von einem Upstream-IGMP-Router empfängt, dann glaube ich dass das Standard-Linux-Verhalten (wie von der igmp v3 rfc vorgeschrieben) darin besteht, nur igmp v2 für Berichte zu verwenden.
Wie ich es verstehe, wenn Sie /proc/sys/net/ipv4/conf/eth1.22/force_igmp_version
auf 0 setzen, verwendet es dieses Verhalten.
Tags und Links networking multicast igmp