Multidiffusion Rejoindre sur Linux et IGMPv3
Nous avons exécuté dans un problème épineux. Nous sommes à l'écriture d'un programme c++ qui reçoit de multidiffusion UDP. Nous sommes dans le processus de l'évolution de nos applications sur un réseau différent de l'environnement et de notre équipe des opérations a demandé que nous soutenons IGMPv3 adhésion des annonces de nos applications. Des enquêtes initiales indiquent que les noyaux Linux 2.6 ne soutien IGMPv3. Donc, je suis intrigué par le fait que lorsque nous tcpdump, nous voyons le résultat suivant des traces:
[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
Ma compréhension est que l'on peut forcer le noyau à utiliser une version inférieure de IGMP en spécifiant une valeur non nulle dans le fichier /proc/sys/net/ipv4/conf/eth1.22/force_igmp_version; cependant, j'ai confirmé que le fichier a une valeur de zéro configuration.
Notre application utilise le code suivant pour rejoindre le groupe de multidiffusion:
... 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.
//...
}
Est-il quelque chose de plus que nous devons inclure dans le programme source de force IGMPv3?
OriginalL'auteur terson | 2008-10-22
Vous devez vous connecter pour publier un commentaire.
Couple de choses à connaître.
La première, c'est que (comme je le comprends) réglage de la
/proc/sys/net/ipv4/conf/eth1.22/force_igmp_version
à 0 "ne signifie pas "utiliser v3", mais en réalité, il définit à "auto". Je crois que vous pouvez le mettre à 3 pour forcer l'utilisation du protocole igmp v3.Cependant, l'autre chose à prendre en compte est que le comportement de l'igmp pile est déterminé par l'environnement où elle se trouve. Si votre linux reçoit igmp v2 adhésion des requêtes à partir d'amont d'un routeur igmp, alors je crois que par défaut, linux comportement (comme l'exigeait le protocole igmp v3 rfc) est à utiliser uniquement igmp v2 pour les rapports.
Ce que je comprends lorsque vous définissez
/proc/sys/net/ipv4/conf/eth1.22/force_igmp_version
à 0, il utilise ce comportement.OriginalL'auteur Andrew Edgecombe