I'm running carp with rtadvd on 5.4, and see some strange behavior
regarding NDP during failover.
I run rtadvd with no configuration file and it runs on the carp
interface (carp is using carpdev, so no address on the physical
interface) on both carp nodes.
When rtadvd starts on the MASTER, it sends a router advertisement to the
network from the link-local address of the carp interface
(fe80::200:5eff:fe00:101), and the clients sets a default route to this
So when the clients sends a neighbor sol for fe80::200:5eff:fe00:101,
the carp MASTER responds with neighbor adv with tgt lladdr
00:00:5e:00:01:01, and the client populates the NDP table accordingly.
But when the current carp BACKUP becomes MASTER (using carpdemote), the
new MASTER immediately sends out two neighbor advertisements (one for
the link-local address and one for the global address with tgt lladdr as
the physical lladdr of the carpdev interface on the new MASTER. This
causes the clients to remove their default route to
fe80::200:5eff:fe00:101 and all clients are left without a default route
until rtadvd on the new MASTER sends out a new router advertisement.
In this case, the clients are both OpenBSD and Windows. So with
net.inet6.icmp6.nd6_debug=1 on the OpenBSD clients, I see this in the
log when neighbor advertisements are sent from the new carp MASTER:
ndp info overwritten for fe80:0002::0200:5eff:fe00:0101 by <physical
lladdr> on em1
I am able to work around this behavior by restarting rtadvd with
ifstated during transition to MASTER so that router advertisement are
sent when rtadvd starts. However, this takes some time.
So is it possible to not send out neighbor adv with the physical lladdr
when transitioning to MASTER?