]> git.baikalelectronics.ru Git - kernel.git/commit
ipv6: Fix for adding multicast route for loopback device automatically.
authorLi Wei <lw@cn.fujitsu.com>
Tue, 6 Dec 2011 21:23:45 +0000 (21:23 +0000)
committerDavid S. Miller <davem@davemloft.net>
Mon, 12 Dec 2011 23:48:18 +0000 (18:48 -0500)
commit8a11312fb0d229e52b3b6e0c667e6a24c3b1050e
tree07bf02f171e03fb66d66e12011e56d459d44be25
parent8b1f4819839e8aba4de7464b70dade0699d7fed9
ipv6: Fix for adding multicast route for loopback device automatically.

There is no obvious reason to add a default multicast route for loopback
devices, otherwise there would be a route entry whose dst.error set to
-ENETUNREACH that would blocking all multicast packets.

====================

[ more detailed explanation ]

The problem is that the resulting routing table depends on the sequence
of interface's initialization and in some situation, that would block all
muticast packets. Suppose there are two interfaces on my computer
(lo and eth0), if we initailize 'lo' before 'eth0', the resuting routing
table(for multicast) would be

# ip -6 route show | grep ff00::
unreachable ff00::/8 dev lo metric 256 error -101
ff00::/8 dev eth0 metric 256

When sending multicasting packets, routing subsystem will return the first
route entry which with a error set to -101(ENETUNREACH).

I know the kernel will set the default ipv6 address for 'lo' when it is up
and won't set the default multicast route for it, but there is no reason to
stop 'init' program from setting address for 'lo', and that is exactly what
systemd did.

I am sure there is something wrong with kernel or systemd, currently I preferred
kernel caused this problem.

====================

Signed-off-by: Li Wei <lw@cn.fujitsu.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv6/addrconf.c