Ubuntu a multicast na localhost

elopin

Ubuntu a multicast na localhost
« kdy: 20. 10. 2013, 21:35:42 »
Dobrý den,

mám problém s multicastem na svém notebooku s Ubuntu 12.04. Pokud není wifi nebo ethernet připojen k jakékoliv síti, nefunguje přeposílání multicastových paketů. Zjistil jsem to při praktickém cvičení ve třídě, při implementaci multicastové aplikace klient - server. Během cvičení vypadla školní wifi. Všem ostatním s Windows testování aplikace fungovalo na localhost, jen mě ne. Java aplikace, a později i ping, mě informovala NETWORK UNREACHABLE.

Už dva dny googlím a hledám, čím to je.

Zkoušel jsem přidat routu : sudo ip route add 224.0.0.0/4 dev eth0
ping na 224.0.0.1 sice posílá pakety, ale žádný se nevrátí, takže 100% lost

Hardware:

Kód: [Vybrat]
Dell Inspiron 1525
NIC -  description: Ethernet interface
                product: 88E8040 PCI-E Fast Ethernet Controller
                vendor: Marvell Technology Group Ltd.
                physical id: 0
                bus info: pci@0000:09:00.0
                logical name: eth0
                version: 12
                serial: 00:1d:09:43:c9:5f
                capacity: 100Mbit/s
                width: 64 bits
                clock: 33MHz
                capabilities: bus_master cap_list ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd autonegotiation
                configuration: autonegotiation=on broadcast=yes driver=sky2 driverversion=1.30 latency=0 link=no multicast=yes port=twisted pair
                resources: irq:43 memory:fe8fc000-fe8fffff ioport:de00(size=256)

WIFI - description: Network controller
                product: BCM4312 802.11b/g LP-PHY
                vendor: Broadcom Corporation
                physical id: 0
                bus info: pci@0000:0b:00.0
                version: 01
                width: 64 bits
                clock: 33MHz
                capabilities: bus_master cap_list
                configuration: driver=b43-pci-bridge latency=0
                resources: irq:17 memory:fe7fc000-fe7fffff

aktivní rozhraní - eth0, wlan0, lo

Stav, kdy není zařízení v síti, kdy tedy vypadne wifi a ve třídě jsme bez sítě.

Kód: [Vybrat]
NETSTAT - G
IPv6/IPv4 Group Memberships
Interface       RefCnt Group
--------------- ------ ---------------------
lo              1      224.0.0.1
eth0            1      224.0.0.1
wlan0           1      224.0.0.1
lo              1      ip6-allnodes
eth0            1      ip6-allnodes
wlan0           1      ip6-allnodes

Rozdíl vidím akorát ve výpisu netstat -g, kdy při připojené wifi (nebo eth0):

Kód: [Vybrat]
IPv6/IPv4 Group Memberships
Interface       RefCnt Group
--------------- ------ ---------------------
lo              1      all-systems.mcast.net
eth0            1      all-systems.mcast.net
wlan0           1      224.0.0.251
wlan0           1      all-systems.mcast.net
lo              1      ip6-allnodes
eth0            1      ip6-allnodes
wlan0           1      ff02::fb
wlan0           1      ff02::1:ffa5:20a0
wlan0           1      ip6-allnodes


Aktivní network-manager v interfaces je tedy jen

Kód: [Vybrat]
auto lo
iface lo inet loopback

Soubor hosts jsem nijak neměnil, nikde jsem takovou radu nedostal, ale možná s tím souvisí, proto je zde:

Kód: [Vybrat]
127.0.0.1 localhost
127.0.1.1 elopbook

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

IFCONFIG při nedostupnosti sítě:

Kód: [Vybrat]
eth0      Link encap:Ethernet  HWaddr 00:1d:09:43:c9:5f 
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
          Interrupt:16

lo        Link encap:Local Loopback 
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:2162 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2162 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:188207 (188.2 KB)  TX bytes:188207 (188.2 KB)

wlan0     Link encap:Ethernet  HWaddr 00:16:44:a5:20:a0 
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:37325 errors:0 dropped:0 overruns:0 frame:0
          TX packets:23676 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:26397365 (26.3 MB)  TX bytes:3665773 (3.6 MB)

Dále jsem podle vygooglených rad zkoušel nastavit soubor /etc/sysctl.conf, nefungovalo nic, takhle vypadá teď:

Kód: [Vybrat]
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.all.rp_filter=0
net.ipv4.ip_forward=1
net.ipv4.conf.all.accept_redirects = 0

Pokud je notebook připojen přes wifi nebo ethernet k nějaké síti, tak vše funguje normálně, netuším proč. Proč to na Windows funguje bez sítě a na Ubuntu ne?

Díky za rady,
elopin
« Poslední změna: 20. 10. 2013, 21:51:22 od Petr Krčmář »


tadeas

Re:Ubuntu a multicast na localhost
« Odpověď #1 kdy: 20. 10. 2013, 22:21:59 »
2. řádka výstupu z ifconfig: v eth0 a wlan0 máš "MULTICAST", v lo tam není. Jinými slovy máš vypnutej multicast pro loopback. Ovšem neručím za to, že se tam dá zapnout :) . Zkus
Kód: [Vybrat]
ifconfig lo multicast

elopin

Re:Ubuntu a multicast na localhost
« Odpověď #2 kdy: 20. 10. 2013, 22:42:32 »
2. řádka výstupu z ifconfig: v eth0 a wlan0 máš "MULTICAST", v lo tam není. Jinými slovy máš vypnutej multicast pro loopback. Ovšem neručím za to, že se tam dá zapnout :) . Zkus
Kód: [Vybrat]
ifconfig lo multicast

Zdravím,

ping 224.0.0.1 hlásí NETWORK UNREACHABLE
ping 224.0.0.1 -I lo posílá pakety, ale 100% lost

ale díky za radu,
elopin

elopin

Re:Ubuntu a multicast na localhost
« Odpověď #3 kdy: 22. 10. 2013, 07:14:22 »
Vidím, že problém je těžší, než jsem čekal. Zatím jsem si pomohl telefonem s Joiku Hot Spot, takže wifi je aktivní a ping na multicast odpovídá, ale i tak bych uvítal řešení bez telefonu, protože pro počáteční aktivaci Hot Spotu je potřeba na chvilku zapnout mobilní data.

jj

Re:Ubuntu a multicast na localhost
« Odpověď #4 kdy: 22. 10. 2013, 09:52:04 »
echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

?


tonda_

Re:Ubuntu a multicast na localhost
« Odpověď #5 kdy: 22. 10. 2013, 14:10:43 »
6.1 IP_MULTICAST_LOOP.

You have to decide, as the application writer, whether you want the data you send to be looped back to your host or not. If you plan to have more than one process or user "listening", loopback must be enabled. On the other hand, if you are sending the images your video camera is producing, you probably don't want loopback, even if you want to see yourself on the screen. In that latter case, your application will probably receive the images from a device attached to the computer and send them to the socket. As the application already "has" that data, it is improbable it wants to receive it again on the socket. Loopback is by default enabled.

Regard that optval is a pointer. You can't write:

    setsockopt(socket, IPPROTO_IP, IP_MULTICAST_LOOP, 0, 1);

to disable loopback. Instead write:

    u_char loop;
    setsockopt(socket, IPPROTO_IP, IP_MULTICAST_LOOP, &loop, sizeof(loop));

and set loop to 1 to enable loopback or 0 to disable it.

To know whether a socket is currently looping-back or not use something like:

    u_char loop;
    int size;

    getsockopt(socket, IPPROTO_IP, IP_MULTICAST_LOOP, &loop, &size)


tadeas

Re:Ubuntu a multicast na localhost
« Odpověď #6 kdy: 22. 10. 2013, 15:20:31 »
Ted jsem to na Debianu zkusil a multicast mi na stroji s odpojenou siti funguje. Ping 224.0.0.1 nejde, ale UDP packety na 224.1.1.1 mi prichazej pote co se na tuhle skupinu pripojim.

elopin

Re:Ubuntu a multicast na localhost
« Odpověď #7 kdy: 22. 10. 2013, 20:09:51 »
echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

?

bohužel nepomohlo, už jsem zkoušel dříve

elopin

Re:Ubuntu a multicast na localhost
« Odpověď #8 kdy: 22. 10. 2013, 21:09:01 »
Ted jsem to na Debianu zkusil a multicast mi na stroji s odpojenou siti funguje. Ping 224.0.0.1 nejde, ale UDP packety na 224.1.1.1 mi prichazej pote co se na tuhle skupinu pripojim.

tak tohle mi také nejde po poslání UDP packetu se stane toto

Kód: [Vybrat]
elopin@elopbook:$ echo “hello” > /dev/udp/224.1.1.1/4005
bash: connect: Network is unreachable
bash: /dev/udp/224.1.1.1/4005: Network is unreachable

pokud je wifi aktivní, můj klient tento packet normálně zachytí

elopin

Re:Ubuntu a multicast na localhost
« Odpověď #9 kdy: 22. 10. 2013, 21:19:16 »
6.1 IP_MULTICAST_LOOP.

You have to decide, as the application writer, whether you want the data you send to be looped back to your host or not. If you plan to have more than one process or user "listening", loopback must be enabled. On the other hand, if you are sending the images your video camera is producing, you probably don't want loopback, even if you want to see yourself on the screen. In that latter case, your application will probably receive the images from a device attached to the computer and send them to the socket. As the application already "has" that data, it is improbable it wants to receive it again on the socket. Loopback is by default enabled.

Regard that optval is a pointer. You can't write:

    setsockopt(socket, IPPROTO_IP, IP_MULTICAST_LOOP, 0, 1);

to disable loopback. Instead write:

    u_char loop;
    setsockopt(socket, IPPROTO_IP, IP_MULTICAST_LOOP, &loop, sizeof(loop));

and set loop to 1 to enable loopback or 0 to disable it.

To know whether a socket is currently looping-back or not use something like:

    u_char loop;
    int size;

    getsockopt(socket, IPPROTO_IP, IP_MULTICAST_LOOP, &loop, &size)

tondo_ díky za radu, ale jsem víceméně linuxová lama :-), C-čko mi sice úplně cizí není, ale ještě radši chvíli počkám, zda se neobjeví nějaké řešení bez nutnosti šťourat se v kódu. Pokud ne, počkám si na dlouhý zimní večer a zkusím to. :-)

monitor

Re:Ubuntu a multicast na localhost
« Odpověď #10 kdy: 22. 10. 2013, 21:39:00 »
Spravna cesta vedie asi smerom, ktory radil Tadeas...


tu
http://lcm.googlecode.com/svn-history/r522/www/reference/lcm/multicast-setup.html
radia tieto kroky (Remember, you must always do this ... if your machine is not connected to any external network.)

    sudo ifconfig lo multicast
    sudo route add -net 224.0.0.0 netmask 240.0.0.0 dev lo

tadeas

Re:Ubuntu a multicast na localhost
« Odpověď #11 kdy: 22. 10. 2013, 22:38:45 »
Hmm, po restartu mi to fungovat přestalo, moc nechápu, proč to předtim fungovalo. Nějaká vmwarovina asi, nebo jsem tam tu routu spíš měl z minula (taky teďko řešim multicast...). Nicméně "ifconfig lo multicast" (btw jaká je syntaxe pro tohle přes příkaz ip?), přidat routu a funguje mi to. Opět ping nefunguje (proč by taky měl mimochodem? On snad posílá IGMP join?), ale UDP packety přijdou.

elopin

Re:Ubuntu a multicast na localhost
« Odpověď #12 kdy: 22. 10. 2013, 22:41:52 »
VYŘEŠENO


Spravna cesta vedie asi smerom, ktory radil Tadeas...


tu
http://lcm.googlecode.com/svn-history/r522/www/reference/lcm/multicast-setup.html
radia tieto kroky (Remember, you must always do this ... if your machine is not connected to any external network.)
Kód: [Vybrat]
    sudo ifconfig lo multicast
    sudo route add -net 224.0.0.0 netmask 240.0.0.0 dev lo

Děkuju monitorovi a Tadeasovi, teď to jede, tak jak má.

Inteligentně jsem se snažil směrovat multicastovou adresu přes eth0 :-), když jsem potřeboval localhost. Opět se potvrdilo, že příčina problému často vzniká mezi klávesnicí a židlí. :-)

elopin

Re:Ubuntu a multicast na localhost
« Odpověď #13 kdy: 22. 10. 2013, 22:55:44 »
Hmm, po restartu mi to fungovat přestalo, moc nechápu, proč to předtim fungovalo. Nějaká vmwarovina asi, nebo jsem tam tu routu spíš měl z minula (taky teďko řešim multicast...). Nicméně "ifconfig lo multicast" (btw jaká je syntaxe pro tohle přes příkaz ip?), přidat routu a funguje mi to. Opět ping nefunguje (proč by taky měl mimochodem? On snad posílá IGMP join?), ale UDP packety přijdou.

Asi na oplátku moc nepomůžu, jen vím, že routy, které jsem přidal ručně po restartu zmizely. Jak jsem psal, kolegům na Windows vše fungovalo od začátku. Proto jsem také zkoušel vmware s windows guestem, ale problém se projevil i na virtuálním stroji a to při jakémkoliv nastavení síťové komunikace na rozhraních vmnetX. Z toho jsem usoudil, že virtualizovaný stroj přebírá veškeré nastavení hosta a vrátil jsem se zpět k řešení problému u hosta.

Zdravím,
elopin