mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-23 23:34:48 +00:00
Auto merge of #85820 - CDirkx:is_unicast_site_local, r=joshtriplett
Remove `Ipv6Addr::is_unicast_site_local` Removes the unstable method `Ipv6Addr::is_unicast_site_local`, see also #85604 where I have tried to summarize related discussion so far. Unicast site-local addresses (`fec0::/10`) were deprecated in [IETF RFC #3879](https://datatracker.ietf.org/doc/html/rfc3879), see also [RFC #4291 Section 2.5.7](https://datatracker.ietf.org/doc/html/rfc4291#section-2.5.7). Any new implementation must no longer support the special behaviour of site-local addresses. This is mentioned in the docs of `is_unicast_site_local` and already implemented in `is_unicast_global`, which considers addresses in `fec0::/10` to have global scope, thus overlapping with `is_unicast_site_local`. Given that RFC #3879 was published in 2004, long before Rust existed, and it is specified that any new implementation must no longer support the special behaviour of site-local addresses, I don't see how a user would ever have a need for `is_unicast_site_local`. It is also confusing that currently both `is_unicast_site_local` and `is_unicast_global` can be `true` for an address, but an address can actually only have a single scope. The deprecating RFC mentions that Site-Local scope was confusing to work with and that the classification of an address as either Link-Local or Global better matches the mental model of users. There has been earlier discussion of removing `is_unicast_site_local` (https://github.com/rust-lang/rust/pull/60145#issuecomment-485970669) which decided against it, but that had the incorrect assumption that the method was already stable; it is not. (This confusion arose from the placement of the unstable attribute on the entire module, instead of on individual methods, resolved in #85672) r? `@joshtriplett` as reviewer of all the related PRs
This commit is contained in:
commit
d192c80d22
@ -1346,47 +1346,6 @@ impl Ipv6Addr {
|
||||
(self.segments()[0] & 0xffc0) == 0xfe80
|
||||
}
|
||||
|
||||
/// Returns [`true`] if this is a deprecated unicast site-local address (`fec0::/10`). The
|
||||
/// unicast site-local address format is defined in [RFC 4291 section 2.5.7] as:
|
||||
///
|
||||
/// ```no_rust
|
||||
/// | 10 |
|
||||
/// | bits | 54 bits | 64 bits |
|
||||
/// +----------+-------------------------+----------------------------+
|
||||
/// |1111111011| subnet ID | interface ID |
|
||||
/// +----------+-------------------------+----------------------------+
|
||||
/// ```
|
||||
///
|
||||
/// [RFC 4291 section 2.5.7]: https://tools.ietf.org/html/rfc4291#section-2.5.7
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(ip)]
|
||||
///
|
||||
/// use std::net::Ipv6Addr;
|
||||
///
|
||||
/// assert_eq!(
|
||||
/// Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff).is_unicast_site_local(),
|
||||
/// false
|
||||
/// );
|
||||
/// assert_eq!(Ipv6Addr::new(0xfec2, 0, 0, 0, 0, 0, 0, 0).is_unicast_site_local(), true);
|
||||
/// ```
|
||||
///
|
||||
/// # Warning
|
||||
///
|
||||
/// As per [RFC 3879], the whole `fec0::/10` prefix is
|
||||
/// deprecated. New software must not support site-local
|
||||
/// addresses.
|
||||
///
|
||||
/// [RFC 3879]: https://tools.ietf.org/html/rfc3879
|
||||
#[rustc_const_unstable(feature = "const_ipv6", issue = "76205")]
|
||||
#[unstable(feature = "ip", issue = "27709")]
|
||||
#[inline]
|
||||
pub const fn is_unicast_site_local(&self) -> bool {
|
||||
(self.segments()[0] & 0xffc0) == 0xfec0
|
||||
}
|
||||
|
||||
/// Returns [`true`] if this is an address reserved for documentation
|
||||
/// (`2001:db8::/32`).
|
||||
///
|
||||
|
@ -480,7 +480,6 @@ fn ipv6_properties() {
|
||||
let unique_local: u16 = 1 << 2;
|
||||
let global: u16 = 1 << 3;
|
||||
let unicast_link_local: u16 = 1 << 4;
|
||||
let unicast_site_local: u16 = 1 << 6;
|
||||
let unicast_global: u16 = 1 << 7;
|
||||
let documentation: u16 = 1 << 8;
|
||||
let multicast_interface_local: u16 = 1 << 9;
|
||||
@ -523,11 +522,6 @@ fn ipv6_properties() {
|
||||
} else {
|
||||
assert!(!ip!($s).is_unicast_link_local());
|
||||
}
|
||||
if ($mask & unicast_site_local) == unicast_site_local {
|
||||
assert!(ip!($s).is_unicast_site_local());
|
||||
} else {
|
||||
assert!(!ip!($s).is_unicast_site_local());
|
||||
}
|
||||
if ($mask & unicast_global) == unicast_global {
|
||||
assert!(ip!($s).is_unicast_global());
|
||||
} else {
|
||||
@ -581,7 +575,6 @@ fn ipv6_properties() {
|
||||
let unique_local: u16 = 1 << 2;
|
||||
let global: u16 = 1 << 3;
|
||||
let unicast_link_local: u16 = 1 << 4;
|
||||
let unicast_site_local: u16 = 1 << 6;
|
||||
let unicast_global: u16 = 1 << 7;
|
||||
let documentation: u16 = 1 << 8;
|
||||
let multicast_interface_local: u16 = 1 << 9;
|
||||
@ -651,7 +644,7 @@ fn ipv6_properties() {
|
||||
check!(
|
||||
"fec0::",
|
||||
&[0xfe, 0xc0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
unicast_site_local | unicast_global | global
|
||||
unicast_global | global
|
||||
);
|
||||
|
||||
check!(
|
||||
@ -889,9 +882,6 @@ fn ipv6_const() {
|
||||
const IS_UNICAST_LINK_LOCAL: bool = IP_ADDRESS.is_unicast_link_local();
|
||||
assert!(!IS_UNICAST_LINK_LOCAL);
|
||||
|
||||
const IS_UNICAST_SITE_LOCAL: bool = IP_ADDRESS.is_unicast_site_local();
|
||||
assert!(!IS_UNICAST_SITE_LOCAL);
|
||||
|
||||
const IS_DOCUMENTATION: bool = IP_ADDRESS.is_documentation();
|
||||
assert!(!IS_DOCUMENTATION);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user