When moving between networks slaacd configures new addresses but
authorflorian <florian@openbsd.org>
Mon, 23 Jul 2018 17:25:52 +0000 (17:25 +0000)
committerflorian <florian@openbsd.org>
Mon, 23 Jul 2018 17:25:52 +0000 (17:25 +0000)
commit96316c8ddaeecefec32be78d215850f29699c19d
tree60cad407e6a0cd9540c21fb20a1abb7cf7e6df89
parent8af032af4fd2ca6ae7f38b9a794159fb6e007d0b
When moving between networks slaacd configures new addresses but
leaves old ones behind. The IPv6 RFCs don't seem to offer guidance on
what to do in this case. (RFC 5220 discusses related issues, but not
exactly this.)

It seems a bit harsh to just delete old addresses - a naive
implementation can easily lead to flip-flopping between two prefixes.

Instead set the preferred lifetime to 0 for all addresses on an
interface when the link goes down, thus marking addresses as
deprecated but still usable. When the link comes back send a router
solicitation. If we are still on the old network and receive a router
advertisement the preferred lifetime will increase and the addresses
will no longer be deprecated.

If we moved to a new network we will get new router advertisements and
form new addresses. The old ones will stay deprecated and the address
selection algorithm will prefer new addresses.

Problem reported by many.

testing & OK phessler
sbin/slaacd/engine.c
sbin/slaacd/frontend.c
sbin/slaacd/slaacd.c
sbin/slaacd/slaacd.h