[radvd-devel-l] resetting ipv6-allrouters membership on eth6

Ivan Skytte Jørgensen isj-radvddev at i1.dk
Tue Apr 27 04:07:47 EDT 2010


[This is possibly a resend]

After configuring a previously-unused interface eth6 I see:

soekris2:~ # fgrep ipv6-allrouters /var/log/messages|tail
Apr 25 20:04:26 soekris2 radvd[5000]: resetting ipv6-allrouters membership on eth6
Apr 25 20:06:44 soekris2 radvd[5000]: resetting ipv6-allrouters membership on eth6
Apr 25 20:08:09 soekris2 radvd[5000]: resetting ipv6-allrouters membership on eth6
Apr 25 20:11:11 soekris2 radvd[5000]: resetting ipv6-allrouters membership on eth6
Apr 25 20:14:27 soekris2 radvd[5000]: resetting ipv6-allrouters membership on eth6
Apr 25 20:18:50 soekris2 radvd[5000]: resetting ipv6-allrouters membership on eth6
Apr 25 20:23:30 soekris2 radvd[5000]: resetting ipv6-allrouters membership on eth6
Apr 25 20:24:48 soekris2 radvd[5000]: resetting ipv6-allrouters membership on eth6
Apr 25 20:28:31 soekris2 radvd[5000]: resetting ipv6-allrouters membership on eth6
Apr 25 20:32:45 soekris2 radvd[5000]: resetting ipv6-allrouters membership on eth6

I have IPv6 and radvd running on all the other interfaces. The eth6interface is the only that generates this warning.
The only special thing about eth6 is that it it has a VLAN running on top of it. (radvd runs fine on the VLAN)

I did manage to get an strace of when radvd logs the warning:

--- SIGALRM (Alarm clock) @ 0 (0) ---
gettimeofday({1272219810, 505741}, NULL) = 0
ioctl(4, SIOCGIFFLAGS, {ifr_name="eth6", ifr_flags=IFF_UP|IFF_BROADCAST|IFF_RUNNING|IFF_PROMISC|IFF_MULTICAST}) = 0
open("/proc/net/igmp6", O_RDONLY)       = 5
fstat64(5, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f2d000
read(5, "1    lo              ff020000000"..., 1024) = 1024
read(5, "000000000000001ffca90c2     1 00"..., 1024) = 1024
read(5, "00000004 0\n12   sixxs           "..., 1024) = 437
read(5, "", 1024)                       = 0
read(5, "", 1024)                       = 0
close(5)                                = 0
munmap(0xb7f2d000, 4096)                = 0
time(NULL)                              = 1272219810
send(3, "<28>Apr 25 20:23:30 radvd[5000]:"..., 77, MSG_NOSIGNAL) = 77
setsockopt(4, SOL_IPV6, IPV6_ADD_MEMBERSHIP, "\377\2\0\0\0\0\0\0\0\0\0\0\0\0\0\2\10\0\0\0", 20) = -1 EADDRINUSE (Address already in use)
gettimeofday({1272219810, 511303}, NULL) = 0
open("/proc/sys/net/ipv6/conf/all/forwarding", O_RDONLY) = 5

Looking at the device-linux.c source it appears that the all-routers multicast membership is not found, radvd tries to join the multicast group, but kernel says "already in use".
Yet the group membership isn't there:

soekris2:~ # cat /proc/net/igmp6
1    lo              ff020000000000000000000000000001     1 0000000C 0
2    eth0            ff0200000000000000000001ff000000     3 00000004 0
2    eth0            ff020000000000000000000000000002     2 00000004 0
2    eth0            ff020000000000000000000000000202     1 00000004 0
2    eth0            ff0200000000000000000001ffca90c0     3 00000004 0
2    eth0            ff020000000000000000000000000001     1 0000000C 0
3    eth1            ff0200000000000000000001ff000000     3 00000004 0
3    eth1            ff020000000000000000000000000002     2 00000004 0
3    eth1            ff020000000000000000000000000202     1 00000004 0
3    eth1            ff0200000000000000000001ffca90c1     3 00000004 0
3    eth1            ff020000000000000000000000000001     1 0000000C 0
4    eth2            ff0200000000000000000001ff000000     1 00000004 0
4    eth2            ff020000000000000000000000000002     1 00000004 0
4    eth2            ff020000000000000000000000000202     1 00000004 0
4    eth2            ff0200000000000000000001ffca90c2     1 00000004 0
4    eth2            ff020000000000000000000000000001     1 0000000C 0
5    eth3            ff020000000000000000000000000002     1 00000004 0
5    eth3            ff020000000000000000000000000202     1 00000004 0
5    eth3            ff0200000000000000000001ffca90c3     1 00000004 0
5    eth3            ff020000000000000000000000000001     1 0000000C 0
7    eth5            ff020000000000000000000000000002     1 00000004 0
7    eth5            ff020000000000000000000000000001     1 0000000C 0
8    eth6            ff0200000000000000000001ff000000     3 00000004 0
8    eth6            ff0200000000000000000001ffca3c42     3 00000004 0
8    eth6            ff020000000000000000000000000001     1 0000000C 0
9    eth7            ff020000000000000000000000000002     1 00000004 0
9    eth7            ff020000000000000000000000000001     1 0000000C 0
10   sit0            ff020000000000000000000000000001     1 0000000C 0
12   sixxs           ff020000000000000000000000000002     1 00000004 0
12   sixxs           ff020000000000000000000000000001     1 0000000C 0
13   vlan60          ff020000000000000000000000000002     1 00000004 0
13   vlan60          ff0200000000000000000001ff000000     3 00000004 0
13   vlan60          ff0200000000000000000001ffca3c42     3 00000004 0
13   vlan60          ff020000000000000000000000000001     1 0000000C 0
14   tun6to4         ff020000000000000000000000000001     1 0000000C 0

Rhe setsockopt() call looks OK to me (..\10.. means ifindex 8 which is the correct one) and radvd is giving the correct information to the kernel, but something goes wrong. I cannot imagine why. The kernel code looks OK, and it works fine for all the other active interface.

radvd version: 1.1
soekris2:~ # uname -a
Linux soekris2 2.6.27.7-isj #2 SMP Tue Feb 17 18:04:18 CET 2009 i586 i586 i386 GNU/Linux


I am not sure if there is something wrong in my configuration, or if I am looking at an obscure kernel bug.

Do anyone recognise this error, or have any advice?

/isj



More information about the radvd-devel-l mailing list