Skip to content

Commit

Permalink
Rollup merge of rust-lang#85791 - CDirkx:is_unicast, r=joshtriplett
Browse files Browse the repository at this point in the history
Add `Ipv6Addr::is_unicast`

Adds an unstable utility method `Ipv6Addr::is_unicast` under the feature flag `ip` (tracking issue: rust-lang#27709).

Added for completeness with the other unicast methods (see also rust-lang#85604 (comment)) and opposite of `is_multicast`.
  • Loading branch information
JohnTitor authored Jun 9, 2021
2 parents 58f4c0f + 187b415 commit 3bc8221
Showing 1 changed file with 29 additions and 1 deletion.
30 changes: 29 additions & 1 deletion library/std/src/net/ip.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1267,6 +1267,34 @@ impl Ipv6Addr {
(self.segments()[0] & 0xfe00) == 0xfc00
}

/// Returns [`true`] if this is a unicast address, as defined by [IETF RFC 4291].
/// Any address that is not a [multicast address] (`ff00::/8`) is unicast.
///
/// [IETF RFC 4291]: https://tools.ietf.org/html/rfc4291
/// [multicast address]: Ipv6Addr::is_multicast
///
/// # Examples
///
/// ```
/// #![feature(ip)]
///
/// use std::net::Ipv6Addr;
///
/// // The unspecified and loopback addresses are unicast.
/// assert_eq!(Ipv6Addr::UNSPECIFIED.is_unicast(), true);
/// assert_eq!(Ipv6Addr::LOCALHOST.is_unicast(), true);
///
/// // Any address that is not a multicast address (`ff00::/8`) is unicast.
/// assert_eq!(Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0, 0).is_unicast(), true);
/// assert_eq!(Ipv6Addr::new(0xff00, 0, 0, 0, 0, 0, 0, 0).is_unicast(), false);
/// ```
#[rustc_const_unstable(feature = "const_ipv6", issue = "76205")]
#[unstable(feature = "ip", issue = "27709")]
#[inline]
pub const fn is_unicast(&self) -> bool {
!self.is_multicast()
}

/// Returns `true` if the address is a unicast address with link-local scope,
/// as defined in [RFC 4291].
///
Expand Down Expand Up @@ -1417,7 +1445,7 @@ impl Ipv6Addr {
#[unstable(feature = "ip", issue = "27709")]
#[inline]
pub const fn is_unicast_global(&self) -> bool {
!self.is_multicast()
self.is_unicast()
&& !self.is_loopback()
&& !self.is_unicast_link_local()
&& !self.is_unique_local()
Expand Down

0 comments on commit 3bc8221

Please sign in to comment.