std::net: add Ipv4Addr::is_reserved()
This commit is contained in:
@@ -532,6 +532,34 @@ impl Ipv4Addr {
|
||||
!self.is_broadcast() && !self.is_documentation() && !self.is_unspecified()
|
||||
}
|
||||
|
||||
/// Returns [`true`] if this address is reserved by IANA for future use. [IETF RFC 1112]
|
||||
/// defines the block of reserved addresses as `240.0.0.0/4`. This range normally includes the
|
||||
/// broadcast address `255.255.255.255`, but this implementation explicitely excludes it, since
|
||||
/// it is obviously not reserved for future use.
|
||||
///
|
||||
/// [IETF RFC 1112]: https://tools.ietf.org/html/rfc1112
|
||||
/// [`true`]: ../../std/primitive.bool.html
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(ip)]
|
||||
/// use std::net::Ipv4Addr;
|
||||
///
|
||||
/// fn main() {
|
||||
/// assert_eq!(Ipv4Addr::new(240, 0, 0, 0).is_reserved(), true);
|
||||
/// assert_eq!(Ipv4Addr::new(255, 255, 255, 254).is_reserved(), true);
|
||||
///
|
||||
/// assert_eq!(Ipv4Addr::new(239, 255, 255, 255).is_reserved(), false);
|
||||
/// // The broadcast address is not considered as reserved for future use by this
|
||||
/// // implementation
|
||||
/// assert_eq!(Ipv4Addr::new(255, 255, 255, 255).is_reserved(), false);
|
||||
/// }
|
||||
/// ```
|
||||
pub fn is_reserved(&self) -> bool {
|
||||
self.octets()[0] & 240 == 240 && !self.is_broadcast()
|
||||
}
|
||||
|
||||
/// Returns [`true`] if this is a multicast address (224.0.0.0/4).
|
||||
///
|
||||
/// Multicast addresses have a most significant octet between 224 and 239,
|
||||
|
||||
Reference in New Issue
Block a user