sys/netinet6: Implement RFC 7217
Implement RFC 7217 (A Method for Generating Semantically Opaque
Interface Identifiers with IPv6 Stateless Address Autoconfiguration
(SLAAC)) in our IPv6 stack.
A new ifconfig stableaddr flag is added to enable the feature on
interfaces, which defaults to on or off for new interfaces based
on the sysctl net.inet6.ip6.use_stableaddr (off by default, so
this commit causes no change in behavior with default settings).
The algorithm follows the RFC in its logic, using SHA256-HMAC as
the algorithm to derive addresses so as to provide code that can
be leveraged by future implentations of RFC 8981, leveraging the
hostuuid as the secret.
The source of the hostidentifier can be configured using the sysctl
net.inet6.ip6.stableaddr_netifsource, while the number of retries
generating a new address in case of collision can be configured
using the net.inet6.ip6.stableaddr_maxretries sysctl (default 3).
Documentation about all these flags is added to the ifconfig(8) man
page.
Reviewed by: cognet, glebius, hrs
Tested by: zarychtam@plan-b.pwste.edu.pl
Approved by: cognet, glebius
Relnotes: yes
Differential Revision: https://reviews.freebsd.org/D49681