When radvd has been configured to listen on an interface but ignore if
missing, and when that interface is later brought up, a router
advertisement is sent for the prefix of the newly activated interface,
but it is sent to the wrong interface (i.e., some already existing
interface).
To reproduce: consider the following radvd.conf:
### cut after ###
interface eth0
{
AdvSendAdvert on;
MaxRtrAdvInterval 300;
prefix 2001:db8::/64
{
AdvOnLink on;
AdvAutonomous on;
};
};
interface dummy0
{
IgnoreIfMissing on;
AdvSendAdvert on;
MaxRtrAdvInterval 60;
prefix 2001:db8:bad::/64
{
AdvOnLink on;
AdvAutonomous on;
};
};
### cut before ###
Start radvd with eth0 up but dummy0 down. *Then* bring dummy0 up:
radvd sends a router advertisement for 2001:db8:bad::/64 on eth0
(rather than on dummy0): this is wrong.
[Please forward this bug upstream if appropriate.]
I can confirm this behaviour. I have a similar setup with two interfaces on two different subnets. Assume eth0 (which is not connected but ifup'ed on boot) should announce subnetE and wlan0 subnetW. On wlan0, both subnets are announced and accepted by a client. This unfortunately breaks IPv6 connectivity for the client on subnetE, because the address from subnetE takes precedence over the address from subnetW upon source address selection. However, the wlan0 interface has only an IPv6 address on subnetW and therefore the connection will timeout. My workaround: Instead of configuring the explicit prefix (e.g. 2001:db8::/64) in radvd.conf, I use the special prefix ::/64 (for both interfaces). With this setting, the behaviour is gone and the client receives only announcements for the proper subnet. Thanks for looking into this. Nicolas
Sorry, typo: This unfortunately breaks IPv6 connectivity for the client on _subnetW_ ! Nicolas
I have this bug too. I use radvd to announce prefix to Xen domUs and
each time I (re)start one, a RA is sent on other VMs virtual interfaces,
breaking routing, and making the whole system broken. Worse is when the
RA goes to the eth0, even if not listed in any interface xxx {} :/
Currently this makes radvd unusable in such env.
Alexandre.