Subject: Add/Delete IPv6 addresses and netlink

From: Ben Greear <[email-masked]>
Date: Mon, 16 Jun 2008 18:33:36 -0700

I am not sure this is a bug, but it is at least making my life difficult 
in user-space.

This is with 2.6.25.4 kernel plus some of my own hackings not directly 
related
to ipv6.

First:
You can get a state where you never get a netlink address add message, but
you do get the delete message.  Eth0 has no link, by the way, but it 
does not
seem to matter in this particular case:

ip -6 addr flush eth0
ip link set dev eth0 down
ip -6 addr add 2000::8:2/112 scope global dev eth0
ip -6 addr flush eth0

I would much prefer to have a netlink message when the address is added, 
regardless of
whether it is tentative or not.  A new message could be sent when it 
changes state to/from tentative.
As it is, there is no way to verify that an IP address was actually 
added by listening to netlink
messages if the address stays tentative.

Second:

NOTE:  I cannot reproduce this problem on FC8's 2.6.24.7-92.fc8 kernel 
on a different
machine.  It may just be something lame about my development 
environment, the different
hardware, or perhaps some issue with the newer lkml kernel.

I am not sure whether I am just confused about how all of this is 
supposed to work or not, but the
following commands will leave the global address in tentative state:

ip link set eth1 down; ip -6 addr flush dev eth1;
ip -6 addr add 2000::9:2/112 scope global dev eth1
ip link set eth1 up
# Wait 10+ seconds
ip -6 addr show dev eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
    inet6 2000::9:2/112 scope global tentative
       valid_lft forever preferred_lft forever
    inet6 fe80::203:2dff:fe0c:d022/64 scope link
       valid_lft forever preferred_lft forever

If you add the global addr while the device is already up, however, then 
it will not be in
tentative state.

Thanks,
Ben

-- 
Ben Greear <[email-masked]> 
Candela Technologies Inc  http://www.candelatech.com