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?

InformationsquelleAutor terson | 2008-10-22
Schreibe einen Kommentar