У меня проблемы с многоадресным трафиком в Ubuntu Maverick. Кажется, что он работает только тогда, когда карта находится в режиме promisc (то есть если я установил его вручную или использую такой инструмент, как tcpdump).
Добавление многоадресного маршрута ...
user@pc-149:~$ sudo ip route add multicast 224.0.0.0/4 dev eth0
user@pc-149:~$ cat /proc/net/igmp
Idx Device : Count Querier Group Users Timer Reporter
1 lo : 1 V3
010000E0 1 0:00000000 0
2 eth0 : 2 V3
FB0000E0 1 0:00000000 0
010000E0 1 0:00000000 0
3 eth1 : 1 V3
010000E0 1 0:00000000 0
Запуск дампа потока mplayer ...
user@pc-149:~$ mplayer udp://225.0.0.1:9000 -dumpstream -dumpfile /tmp/test.mpg
mplayer: Symbol \`ff_codec_wav_tags' has different size in shared object, consider re-linking
mplayer: Symbol \`ff_codec_bmp_tags' has different size in shared object, consider re-linking
MPlayer 1.0rc4-4.4.5 (C) 2000-2010 MPlayer Team
mplayer: could not connect to socket
mplayer: No such file or directory
Failed to open LIRC support. You will not be able to use your remote control.
Playing udp://225.0.0.1:9000.
STREAM_UDP, URL: udp://225.0.0.1:9000
Timeout! No data from host 225.0.0.1
udp_streaming_start failed
No stream found to handle url udp://225.0.0.1:9000
Exiting... (End of file)
Он правильно добавляется в группу многоадресной рассылки (при попытке прочитать поток)
user@pc-149:~$ cat /proc/net/igmp
Idx Device : Count Querier Group Users Timer Reporter
1 lo : 1 V3
010000E0 1 0:00000000 0
2 eth0 : 3 V3
010000E1 1 0:00000000 0
FB0000E0 1 0:00000000 0
010000E0 1 0:00000000 0
3 eth1 : 1 V3
010000E0 1 0:00000000 0
Но tcpdump видит трафик
user@pc-149:~$ sudo tcpdump -vv -i eth0 dst 225.0.0.1
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
09:47:40.698483 IP (tos 0x0, ttl 64, id 23281, offset 0, flags [none], proto UDP (17), length 1344)
ls5.3203 > 225.0.0.1.9000: [udp sum ok] UDP, length 1316
09:47:40.698793 IP (tos 0x0, ttl 64, id 23283, offset 0, flags [none], proto UDP (17), length 1344)
ls5..3203 > 225.0.0.1.9000: [udp sum ok] UDP, length 1316
Сложность заключается в том, что пока карта находится в режиме promisc (т.е. во время работы tcpdump), mplayer ТАКЖЕ может видеть трафик ...
Я тоже проверил материал rp_filter ...
root@pc-149:~# sysctl -a | grep \\.rp_filter
error: "Invalid argument" reading key "fs.binfmt_misc.register"
error: permission denied on key 'net.ipv4.route.flush'
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.lo.rp_filter = 0
net.ipv4.conf.eth0.rp_filter = 0
net.ipv4.conf.eth1.rp_filter = 0
error: permission denied on key 'net.ipv6.route.flush'
Вот информация о моем маршруте
root@pc-149:~# ip route show
10.10.14.0/24 dev eth0 proto kernel scope link src 10.10.14.100 metric 1
169.254.0.0/16 dev eth0 scope link metric 1000
multicast 224.0.0.0/4 dev eth0 scope link
default via 10.10.14.xxx dev eth0 proto static
root@pc-149:~# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 5c:26:0a:xx:xx:xx
inet addr:10.10.14.xxx Bcast:10.10.14.255 Mask:255.255.255.0
inet6 addr: fe80::5e26:aff:xxxx:xxxx/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:155843 errors:0 dropped:0 overruns:0 frame:0
TX packets:82366 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:189808267 (189.8 MB) TX bytes:7068802 (7.0 MB)
Interrupt:20 Memory:e9600000-e9620000
Обновить: Итак, посмотрев другой пост здесь, кажется, что я жестяная банка заставить его работать после использования smcroute, но я не думаю, что это решает основную проблему. Кстати, простое добавление многоадресного маршрута отлично работает на centos 5.5, поэтому есть что-то принципиально другое в том, как это делает Ubuntu