When an interface doesn't have a layer 2 address in6_get_ifid()
authorflorian <florian@openbsd.org>
Tue, 10 Jul 2018 20:43:26 +0000 (20:43 +0000)
committerflorian <florian@openbsd.org>
Tue, 10 Jul 2018 20:43:26 +0000 (20:43 +0000)
commitee4d7c36d09abda7c46a7e657523a8b515f579fb
treea159e73fa65b9df4cfb3ff1c619901795b81a886
parent1f5e00e09e5c77e5b4bdd78a462b52970f264d36
When an interface doesn't have a layer 2 address in6_get_ifid()
tries to "borrow" one from another interface.
But then it checks if the U bit is set int the generated EUI64
address and rejects it.
On the other hand for interfaces that do have a layer 2 address this
check is skipped, so relax it for the "borrowing" case, too.

With this one gets stable link local addresses on e.g. gre(4)
interfaces on certain virtualisation environments depending which mac
addresses get picked for the vio(4) interfaces while previously we
would end up with a random IP on every reboot.

Reported by Aaron A. Glenn via phessler.

OK phessler, benno
sys/netinet6/in6_ifattach.c