J'ai des scripts qui exécutent des tests de multidiffusion IP; cependant, mes scripts échouent sur une machine Linux particulière.
Je sais que je peux regarder CONFIG_IP_MULTICAST
dans le fichier de configuration du noyau pour déterminer si le noyau a été compilé avec cela. Cependant, il serait plus facile de signaler les exigences manquantes dans mon script si je pouvais regarder /proc
ou sysctl
et obtenez la réponse.
Existe-t-il un moyen de savoir si la multidiffusion IP a été compilée dans le noyau sans regarder CONFIG_IP_MULTICAST
?
Il semble que la plupart des noyaux (post v1) prennent en charge la multidiffusion par défaut ou que CONFIG_IP_MULTICAST soit activé lors de la compilation. Pour vérifier si le noyau compilé et en cours d'exécution est abonné à un groupe de multidiffusion, j'utiliserais netstat -g
.
Il semble que la plupart des noyaux (post v1) prennent en charge la multidiffusion par défaut.
[root@centos module]# grep CONFIG_IP_MULTICAST /usr/src/kernels/2.6.18-274.7.1.el5-i686/.config
CONFIG_IP_MULTICAST=y
[root@centos module]# netstat -g
IPv6/IPv4 Group Memberships
Interface RefCnt Group
--------------- ------ ---------------------
lo 1 all-systems.mcast.net
eth0 1 224.0.0.251
eth0 1 all-systems.mcast.net
Je vois que l'interface eth0 sur mon hôte pense que son groupe mcast de base abonné 224.0.0.251. Alternativement, si je cingle le groupe ou le réseau et que tous les réseaux hôtes activés pour la multidiffusion connus me sont retournés, je dirais que la multidiffusion fonctionne sur l'hôte. Peux-tu essayer netstat -g
ou cat /proc/net/igmp
et voir s'il renvoie des groupes sur votre hôte?
Sur votre box Linux: ip maddr show
donne:
@4Gtest ~]$ ip maddr show
1: lo
inet 224.0.0.1
inet6 ff02::1
2: p3p1
link 01:00:5e:00:00:01
link 33:33:00:00:00:01
link 33:33:ff:bd:7e:0f
link 01:00:5e:00:00:fb
link 01:00:5e:7f:ff:05
inet 224.127.255.5
inet 224.0.0.251
inet 224.0.0.1
inet6 ff02::1:ffbd:7e0f
inet6 ff02::1
# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:0C:29:F1:FF:EA
inet addr:78.46.74.27 Bcast:78.46.74.31 Mask:255.255.255.224
inet6 addr: fe80::20c:29ff:fef1:ffea/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:5339836 errors:0 dropped:0 overruns:0 frame:0
TX packets:5486444 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:820300389 (782.2 MiB) TX bytes:1929979381 (1.7 GiB)
Base address:0x1400 Memory:e8820000-e8840000
Désactiver la multidiffusion:
ifconfig eth0 -multicast
résultat:
# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:0C:29:F1:FF:EA
inet addr:78.46.74.27 Bcast:78.46.74.31 Mask:255.255.255.224
inet6 addr: fe80::20c:29ff:fef1:ffea/64 Scope:Link
UP BROADCAST MTU:1500 Metric:1
RX packets:5339836 errors:0 dropped:0 overruns:0 frame:0
TX packets:5486444 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:820300389 (782.2 MiB) TX bytes:1929979381 (1.7 GiB)
Base address:0x1400 Memory:e8820000-e8840000
Pas de multidiffusion présente dans l'interface
Activer la multidiffusion:
ifconfig eth0 multicast
En utilisant la commande ip
, on peut vérifier si une interface est capable de multidiffusion en:
ip link show eth0 | grep MULTICAST
Pour activer ou désactiver la multidiffusion, vous pouvez utiliser:
Sudo ip link set dev eth0 multicast [on|off]