ip6_tunnel: ensure to always have a link local address
authorNicolas Dichtel <nicolas.dichtel@6wind.com>
Tue, 20 Aug 2013 10:16:06 +0000 (12:16 +0200)
committerDavid S. Miller <davem@davemloft.net>
Wed, 21 Aug 2013 06:45:42 +0000 (23:45 -0700)
commite837735ec406a347756e0ef3aea124a6d51ea1ba
tree258f140ccfda951a6e91b3db041abcaec3c395e4
parent7eaa48a45ca74d8dbc65e7dedaa8c0736154fd5f
ip6_tunnel: ensure to always have a link local address

When an Xin6 tunnel is set up, we check other netdevices to inherit the link-
local address. If none is available, the interface will not have any link-local
address. RFC4862 expects that each interface has a link local address.

Now than this kind of tunnels supports x-netns, it's easy to fall in this case
(by creating the tunnel in a netns where ethernet interfaces stand and then
moving it to a other netns where no ethernet interface is available).

RFC4291, Appendix A suggests two methods: the first is the one currently
implemented, the second is to generate a unique identifier, so that we can
always generate the link-local address. Let's use eth_random_addr() to generate
this interface indentifier.

I remove completly the previous method, hence for the whole life of the
interface, the link-local address remains the same (previously, it depends on
which ethernet interfaces were up when the tunnel interface was set up).

Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv6/addrconf.c
net/ipv6/ip6_tunnel.c