IPv6 getting a global address takes a long time (possibly only after starting a KDE session)

My ISP offers the service of native IPv6. So my ADSL router provides me with a local and global IPv6 address. However after a reboot it takes minutes to finally see the global address when using “ifconfog eth0”. During that time I can’t do a ping6 to an external server, which seems logical. So I waited several minutes, but no global address. After that I started a KDE session, went back to the console (<Ctrl>+<Alt>+F1) and now the global address was there. Is this normal behavior or should I file bug report?

I’m getting the exact same thing on 2x fresh installs of 11.4 with Gnome3.
As soon the desktop comes up I open a terminal and start checking ifconfig, ping & ping6.
Ipv4 is fine, ipv6 gets the local fe80 address straight away but no global address.
The global address & the ability to ping6 ipv6.google takes almost 9 minutes after the desktop has popped up.
I can force it sooner than that by yanking & reconnecting the LAN cable (if set on hotplug or cable connection).

Using Network Settings under the YaST2 Control Center, I’ve tried setting the interface on ‘hotplug’ , ‘at boot time’ , ‘on cable connection’ , ‘on nfsroot’
None of that seems to make a difference.
The only thing that made ipv6 come up quicker was handing control over to the Gnome Network Manager Applet.
Of course then you have to wait for the applet to start up anyway, still a reduction from 9 minutes to about 22 seconds.
Not quite acceptable & the bad part about nm-applet is I can’t configure a second ipv6 address without resorting to completely static addressing. This is a problem I have to sort out, because I will be loading an sshfs share over ipv6 to my raid server on startup.
I have to get this to the point where the ipv6 addresses load before the sshfs kicks in.
I still have a couple of things I want to try, I’ll keep you posted. At this stage, I’m thinking this might be a bug.

Ok. I got desperate.
I set the network interface to ‘manual’.
And I put

/sbin/ifup eth0

in my /etc/init.d/after.local file.

When the desktop loaded, I had ipv6 as soon as I could type in terminal. Still not sure if there was any delay after desktop loading, but all I did was open a terminal & hit the up arrow to bring up my last command to ping6 google. It worked by the time I got there.

Obviously this is a bit of a hack that doesn’t address the real issue. And even as a hack there is probably a better way to do it than with after.local
I’d like to hear from someone who knows what they’re doing, because I sure don’t…

Ok.
I’ve actually solved my situation to a certain degree of satisfaction. I’m not sure how much this will help you in KDE, since I am running Gnome3…
I had to do something pretty counter-intuitive. I mentioned earlier that I tried handing control over to the network manager applet, but here’s what I didn’t try before;
I actually had to tell network manager to Ignore Ipv6.
So here’s how it went;
In YasT - Network Settings - Global Options tab - Network Setup Method = ‘User Controlled with Network Manager’
I ran ‘gnome-session-properties’ to select network-manager-applet in the Startup Applications list.
Right-Click on the network icon on the top panel and go to Network Settings - Options
In the ipv4 tab, choose ‘Connect Automatically’ & ‘Automatic DHCP’
In the ipv6 tab, choose ‘Connect Automatically’ & ‘Ignore’

My secondary ipv6 address, I simply added to my /etc/init.d/after.local
like so;

ip -f inet6 addr add fd00::xxxx:xxxx:xxxx:xxxx/64 dev eth0

This got the network up before the desktop loaded, but it still wasn’t quick enough for my sshfs share. My ssh runs on ipv6, & the sshfs share is issued as a mount command in Startup Applications. It obviously tried & failed to load before the network was up properly, as it was not mounted when I arrived on the desktop. I’d like to get the ipv6 loaded a little quicker, but since it’s all up & running by the time the desktop loads, what I might do is find out if I can put a switch in my sshfs startup command to tell it to wait a couple of seconds before loading…
Made any progress on yours ?

I am not very dependent on IPv6. It is something I want to play with to gain knowledge.
I found using

grep avahi-daemon /var/log/messages | tail -50

that it took 6 minutes before I got the global IPv6 address.
I have a fixed IPv4 address, so I use the traditional ifup method. I did not really find a way to set a fixed IPv6 address using yast2.

Jul 12 21:27:01 eik114 avahi-daemon[1933]: Registering new address record for fe80::e2cb:4eff:fecd:d7b6 on eth0.*.
Jul 12 21:27:01 eik114 avahi-daemon[1933]: Registering new address record for 192.168.1.32 on eth0.IPv4.
Jul 12 21:33:46 eik114 avahi-daemon[1933]: Registering new address record for 2001:980:7480:1:e2cb:4eff:fecd:d7b6 on eth0.*.
Jul 12 21:33:46 eik114 avahi-daemon[1933]: Withdrawing address record for fe80::e2cb:4eff:fecd:d7b6 on eth0.

I filed a bug report several days ago at https://bugzilla.novell.com/show_bug.cgi?id=704666 but did not get any reaction yet.

Now I know how to do that. It is just an extra address. You click on Add and get a dialog with three text boxes. You can leave the box Alias empty, fill in the IPv6 address in the IP address box using x:x:x:x:x:x:x:x, where x is 0 through ffff and in the box for the netmask you enter ‘/y’, without the quotes and y is the netmask prefix, /y most likely is /64. It seems that you get two more IPv6 addresses, one is a derivative of the MAC address of your interface, I don’t know how the second one is generated.
It turns out that these two are the ones assigned after the delay. The one assigned in YaST is immediately active.

I forgot to mention that you also need to specify the default gateway for IPv6 in the Routing tab. Enter the first 64 bits of your IPv6 address followed by :: (all zeros). When you have done so the IPv6 network will work immediately. A strange thing is that later a extra IPv6 address will be added, derived from the MAC address, which will than be used as the source address in an IPv6 packet.