diff options
| author | Pouria Mousavizadeh Tehrani <pouria@FreeBSD.org> | 2026-07-16 13:24:22 +0000 |
|---|---|---|
| committer | Pouria Mousavizadeh Tehrani <pouria@FreeBSD.org> | 2026-07-16 13:26:59 +0000 |
| commit | 7c22dda66913347fba2e488440cf00e7f8a26470 (patch) | |
| tree | 9db5ee87312806bd4c7c4a4e96fb51d2596112d8 | |
| parent | e18844223d1eabb7e435ff9da20d88915d3f4675 (diff) | |
nd6: Add router address and DHCPv6-PD flags in PIO headers
Make R-bit per RFC 6275 8.3 and P-bit per RFC 9762 7.1 in
Prefix Information option available to userland for future implementations.
RFC 9762 7.1: For each interface, the client MUST keep a list of every prefix
that was received from a PIO with the P flag set and currently has a non-zero
preferred lifetime.
Differential Revision: https://reviews.freebsd.org/D56207
| -rw-r--r-- | sys/netinet/icmp6.h | 6 | ||||
| -rw-r--r-- | sys/netinet6/in6_var.h | 6 | ||||
| -rw-r--r-- | sys/netinet6/nd6.h | 1 |
3 files changed, 10 insertions, 3 deletions
diff --git a/sys/netinet/icmp6.h b/sys/netinet/icmp6.h index 77145e4c7503..12fbf7cc3f5c 100644 --- a/sys/netinet/icmp6.h +++ b/sys/netinet/icmp6.h @@ -319,8 +319,10 @@ struct nd_opt_prefix_info { /* prefix information */ struct in6_addr nd_opt_pi_prefix; } __packed; -#define ND_OPT_PI_FLAG_ONLINK 0x80 -#define ND_OPT_PI_FLAG_AUTO 0x40 +#define ND_OPT_PI_FLAG_ONLINK 0x80 /* RFC 4861 */ +#define ND_OPT_PI_FLAG_AUTO 0x40 /* RFC 4861 */ +#define ND_OPT_PI_FLAG_ROUTER 0x20 /* RFC 6275 */ +#define ND_OPT_PI_FLAG_DHCP6PD 0x10 /* RFC 9762 */ struct nd_opt_rd_hdr { /* redirected header */ u_int8_t nd_opt_rh_type; diff --git a/sys/netinet6/in6_var.h b/sys/netinet6/in6_var.h index b1209a324cc9..655787c9ba53 100644 --- a/sys/netinet6/in6_var.h +++ b/sys/netinet6/in6_var.h @@ -306,7 +306,9 @@ struct in6_prflags { struct prf_ra { u_char onlink : 1; u_char autonomous : 1; - u_char reserved : 6; + u_char router : 1; + u_char dhcp6_pd : 1; + u_char reserved : 4; } prf_ra; u_char prf_reserved1; u_short prf_reserved2; @@ -337,6 +339,8 @@ struct in6_prefixreq { #define ipr_raf_onlink ipr_flags.prf_ra.onlink #define ipr_raf_auto ipr_flags.prf_ra.autonomous +#define ipr_raf_router ipr_flags.prf_ra.router +#define ipr_raf_dhcp6pd ipr_flags.prf_ra.dhcp6_pd #define ipr_statef_onlink ipr_flags.prf_state.onlink diff --git a/sys/netinet6/nd6.h b/sys/netinet6/nd6.h index 372d06b6574d..8c9eaed18627 100644 --- a/sys/netinet6/nd6.h +++ b/sys/netinet6/nd6.h @@ -230,6 +230,7 @@ struct nd_prefix { #define ndpr_raf_onlink ndpr_flags.onlink #define ndpr_raf_auto ndpr_flags.autonomous #define ndpr_raf_router ndpr_flags.router +#define ndpr_raf_dhcp6pd ndpr_flags.dhcp6_pd struct nd_pfxrouter { LIST_ENTRY(nd_pfxrouter) pfr_entry; |
