[IPV6]: Fix address deletion
authorKristian Slavov <kristian.slavov@nomadiclab.com>
Thu, 22 Dec 2005 02:47:24 +0000 (18:47 -0800)
committerDavid S. Miller <davem@davemloft.net>
Thu, 22 Dec 2005 02:47:24 +0000 (18:47 -0800)
commit1d1428045c54ef3d172d480806e2066dde0b4b76
tree64a2a1a16e02416b2f49b62faaa5c9f7b7307373
parent7eb1b3d372a53fe9220b9e3b579886db0fe2f897
[IPV6]: Fix address deletion

If you add more than one IPv6 address belonging to the same prefix and
delete the address that was last added, routing table entry for that
prefix is also deleted.
Tested on 2.6.14.4

To reproduce:
ip addr add 3ffe::1/64 dev eth0
ip addr add 3ffe::2/64 dev eth0
/* wait DAD */
sleep 1
ip addr del 3ffe::2/64 dev eth0
ip -6 route

(route to 3ffe::/64 should be gone)

In ipv6_del_addr(), if ifa == ifp, we set ifa->if_next to NULL, and later
assign ifap = &ifa->if_next, effectively terminating the for-loop.
This prevents us from checking if there are other addresses using the same
prefix that are valid, and thus resulting in deletion of the prefix.
This applies only if the first entry in idev->addr_list is the address to
be deleted.

Signed-off-by: Kristian Slavov <kristian.slavov@nomadiclab.com>
Acked-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv6/addrconf.c