pub struct Aaaa { /* private fields */ }Implementations§
Methods from Deref<Target = Ipv6Addr>§
pub const LOCALHOST: Ipv6Addr = Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1)
pub const UNSPECIFIED: Ipv6Addr = Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 0)
1.0.0 · sourcepub fn segments(&self) -> [u16; 8]
pub fn segments(&self) -> [u16; 8]
Returns the eight 16-bit segments that make up this address.
Examples
use std::net::Ipv6Addr;
assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff).segments(),
[0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff]);1.7.0 · sourcepub fn is_unspecified(&self) -> bool
pub fn is_unspecified(&self) -> bool
Returns true for the special ‘unspecified’ address (::).
This property is defined in IETF RFC 4291.
Examples
use std::net::Ipv6Addr;
assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff).is_unspecified(), false);
assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 0).is_unspecified(), true);1.7.0 · sourcepub fn is_loopback(&self) -> bool
pub fn is_loopback(&self) -> bool
Returns true if this is the loopback address (::1),
as defined in IETF RFC 4291 section 2.5.3.
Contrary to IPv4, in IPv6 there is only one loopback address.
Examples
use std::net::Ipv6Addr;
assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff).is_loopback(), false);
assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 0x1).is_loopback(), true);sourcepub fn is_global(&self) -> bool
🔬This is a nightly-only experimental API. (ip)
pub fn is_global(&self) -> bool
ip)Returns true if the address appears to be globally reachable
as specified by the IANA IPv6 Special-Purpose Address Registry.
Whether or not an address is practically reachable will depend on your network configuration.
Most IPv6 addresses are globally reachable; unless they are specifically defined as not globally reachable.
Non-exhaustive list of notable addresses that are not globally reachable:
- The unspecified address (
is_unspecified) - The loopback address (
is_loopback) - IPv4-mapped addresses
- Addresses reserved for benchmarking
- Addresses reserved for documentation (
is_documentation) - Unique local addresses (
is_unique_local) - Unicast addresses with link-local scope (
is_unicast_link_local)
For the complete overview of which addresses are globally reachable, see the table at the IANA IPv6 Special-Purpose Address Registry.
Note that an address having global scope is not the same as being globally reachable, and there is no direct relation between the two concepts: There exist addresses with global scope that are not globally reachable (for example unique local addresses), and addresses that are globally reachable without having global scope (multicast addresses with non-global scope).
Examples
#![feature(ip)]
use std::net::Ipv6Addr;
// Most IPv6 addresses are globally reachable:
assert_eq!(Ipv6Addr::new(0x26, 0, 0x1c9, 0, 0, 0xafc8, 0x10, 0x1).is_global(), true);
// However some addresses have been assigned a special meaning
// that makes them not globally reachable. Some examples are:
// The unspecified address (`::`)
assert_eq!(Ipv6Addr::UNSPECIFIED.is_global(), false);
// The loopback address (`::1`)
assert_eq!(Ipv6Addr::LOCALHOST.is_global(), false);
// IPv4-mapped addresses (`::ffff:0:0/96`)
assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff).is_global(), false);
// Addresses reserved for benchmarking (`2001:2::/48`)
assert_eq!(Ipv6Addr::new(0x2001, 2, 0, 0, 0, 0, 0, 1,).is_global(), false);
// Addresses reserved for documentation (`2001:db8::/32`)
assert_eq!(Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0, 1).is_global(), false);
// Unique local addresses (`fc00::/7`)
assert_eq!(Ipv6Addr::new(0xfc02, 0, 0, 0, 0, 0, 0, 1).is_global(), false);
// Unicast addresses with link-local scope (`fe80::/10`)
assert_eq!(Ipv6Addr::new(0xfe81, 0, 0, 0, 0, 0, 0, 1).is_global(), false);
// For a complete overview see the IANA IPv6 Special-Purpose Address Registry.sourcepub fn is_unique_local(&self) -> bool
🔬This is a nightly-only experimental API. (ip)
pub fn is_unique_local(&self) -> bool
ip)Returns true if this is a unique local address (fc00::/7).
This property is defined in IETF RFC 4193.
Examples
#![feature(ip)]
use std::net::Ipv6Addr;
assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff).is_unique_local(), false);
assert_eq!(Ipv6Addr::new(0xfc02, 0, 0, 0, 0, 0, 0, 0).is_unique_local(), true);sourcepub fn is_unicast(&self) -> bool
🔬This is a nightly-only experimental API. (ip)
pub fn is_unicast(&self) -> bool
ip)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.
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);sourcepub fn is_unicast_link_local(&self) -> bool
🔬This is a nightly-only experimental API. (ip)
pub fn is_unicast_link_local(&self) -> bool
ip)Returns true if the address is a unicast address with link-local scope,
as defined in RFC 4291.
A unicast address has link-local scope if it has the prefix fe80::/10, as per RFC 4291 section 2.4.
Note that this encompasses more addresses than those defined in RFC 4291 section 2.5.6,
which describes “Link-Local IPv6 Unicast Addresses” as having the following stricter format:
| 10 bits | 54 bits | 64 bits |
+----------+-------------------------+----------------------------+
|1111111010| 0 | interface ID |
+----------+-------------------------+----------------------------+
So while currently the only addresses with link-local scope an application will encounter are all in fe80::/64,
this might change in the future with the publication of new standards. More addresses in fe80::/10 could be allocated,
and those addresses will have link-local scope.
Also note that while RFC 4291 section 2.5.3 mentions about the loopback address (::1) that “it is treated as having Link-Local scope”,
this does not mean that the loopback address actually has link-local scope and this method will return false on it.
Examples
#![feature(ip)]
use std::net::Ipv6Addr;
// The loopback address (`::1`) does not actually have link-local scope.
assert_eq!(Ipv6Addr::LOCALHOST.is_unicast_link_local(), false);
// Only addresses in `fe80::/10` have link-local scope.
assert_eq!(Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0, 0).is_unicast_link_local(), false);
assert_eq!(Ipv6Addr::new(0xfe80, 0, 0, 0, 0, 0, 0, 0).is_unicast_link_local(), true);
// Addresses outside the stricter `fe80::/64` also have link-local scope.
assert_eq!(Ipv6Addr::new(0xfe80, 0, 0, 1, 0, 0, 0, 0).is_unicast_link_local(), true);
assert_eq!(Ipv6Addr::new(0xfe81, 0, 0, 0, 0, 0, 0, 0).is_unicast_link_local(), true);sourcepub fn is_documentation(&self) -> bool
🔬This is a nightly-only experimental API. (ip)
pub fn is_documentation(&self) -> bool
ip)Returns true if this is an address reserved for documentation
(2001:db8::/32).
This property is defined in IETF RFC 3849.
Examples
#![feature(ip)]
use std::net::Ipv6Addr;
assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff).is_documentation(), false);
assert_eq!(Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0, 0).is_documentation(), true);sourcepub fn is_benchmarking(&self) -> bool
🔬This is a nightly-only experimental API. (ip)
pub fn is_benchmarking(&self) -> bool
ip)Returns true if this is an address reserved for benchmarking (2001:2::/48).
This property is defined in IETF RFC 5180, where it is mistakenly specified as covering the range 2001:0200::/48.
This is corrected in IETF RFC Errata 1752 to 2001:0002::/48.
#![feature(ip)]
use std::net::Ipv6Addr;
assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc613, 0x0).is_benchmarking(), false);
assert_eq!(Ipv6Addr::new(0x2001, 0x2, 0, 0, 0, 0, 0, 0).is_benchmarking(), true);sourcepub fn is_unicast_global(&self) -> bool
🔬This is a nightly-only experimental API. (ip)
pub fn is_unicast_global(&self) -> bool
ip)Returns true if the address is a globally routable unicast address.
The following return false:
- the loopback address
- the link-local addresses
- unique local addresses
- the unspecified address
- the address range reserved for documentation
This method returns true for site-local addresses as per RFC 4291 section 2.5.7
The special behavior of [the site-local unicast] prefix defined in [RFC3513] must no longer
be supported in new implementations (i.e., new implementations must treat this prefix as
Global Unicast).
Examples
#![feature(ip)]
use std::net::Ipv6Addr;
assert_eq!(Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0, 0).is_unicast_global(), false);
assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff).is_unicast_global(), true);sourcepub fn multicast_scope(&self) -> Option<Ipv6MulticastScope>
🔬This is a nightly-only experimental API. (ip)
pub fn multicast_scope(&self) -> Option<Ipv6MulticastScope>
ip)Returns the address’s multicast scope if the address is multicast.
Examples
#![feature(ip)]
use std::net::{Ipv6Addr, Ipv6MulticastScope};
assert_eq!(
Ipv6Addr::new(0xff0e, 0, 0, 0, 0, 0, 0, 0).multicast_scope(),
Some(Ipv6MulticastScope::Global)
);
assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff).multicast_scope(), None);1.7.0 · sourcepub fn is_multicast(&self) -> bool
pub fn is_multicast(&self) -> bool
Returns true if this is a multicast address (ff00::/8).
This property is defined by IETF RFC 4291.
Examples
use std::net::Ipv6Addr;
assert_eq!(Ipv6Addr::new(0xff00, 0, 0, 0, 0, 0, 0, 0).is_multicast(), true);
assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff).is_multicast(), false);1.63.0 · sourcepub fn to_ipv4_mapped(&self) -> Option<Ipv4Addr>
pub fn to_ipv4_mapped(&self) -> Option<Ipv4Addr>
Converts this address to an IPv4 address if it’s an IPv4-mapped address,
as defined in IETF RFC 4291 section 2.5.5.2, otherwise returns None.
::ffff:a.b.c.d becomes a.b.c.d.
All addresses not starting with ::ffff will return None.
Examples
use std::net::{Ipv4Addr, Ipv6Addr};
assert_eq!(Ipv6Addr::new(0xff00, 0, 0, 0, 0, 0, 0, 0).to_ipv4_mapped(), None);
assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff).to_ipv4_mapped(),
Some(Ipv4Addr::new(192, 10, 2, 255)));
assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1).to_ipv4_mapped(), None);1.0.0 · sourcepub fn to_ipv4(&self) -> Option<Ipv4Addr>
pub fn to_ipv4(&self) -> Option<Ipv4Addr>
Converts this address to an IPv4 address if it is either
an IPv4-compatible address as defined in IETF RFC 4291 section 2.5.5.1,
or an IPv4-mapped address as defined in IETF RFC 4291 section 2.5.5.2,
otherwise returns None.
Note that this will return an IPv4 address for the IPv6 loopback address ::1. Use
Ipv6Addr::to_ipv4_mapped to avoid this.
::a.b.c.d and ::ffff:a.b.c.d become a.b.c.d. ::1 becomes 0.0.0.1.
All addresses not starting with either all zeroes or ::ffff will return None.
Examples
use std::net::{Ipv4Addr, Ipv6Addr};
assert_eq!(Ipv6Addr::new(0xff00, 0, 0, 0, 0, 0, 0, 0).to_ipv4(), None);
assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff).to_ipv4(),
Some(Ipv4Addr::new(192, 10, 2, 255)));
assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1).to_ipv4(),
Some(Ipv4Addr::new(0, 0, 0, 1)));sourcepub fn to_canonical(&self) -> IpAddr
🔬This is a nightly-only experimental API. (ip)
pub fn to_canonical(&self) -> IpAddr
ip)Converts this address to an IpAddr::V4 if it is an IPv4-mapped addresses, otherwise it
returns self wrapped in an IpAddr::V6.
Examples
#![feature(ip)]
use std::net::Ipv6Addr;
assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0x7f00, 0x1).is_loopback(), false);
assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0x7f00, 0x1).to_canonical().is_loopback(), true);Trait Implementations§
source§impl CanonicalOrd<Aaaa> for Aaaa
impl CanonicalOrd<Aaaa> for Aaaa
source§fn canonical_cmp(&self, other: &Self) -> Ordering
fn canonical_cmp(&self, other: &Self) -> Ordering
self and other.source§fn canonical_lt(&self, other: &Rhs) -> bool
fn canonical_lt(&self, other: &Rhs) -> bool
self is canonically less than other.source§fn canonical_le(&self, other: &Rhs) -> bool
fn canonical_le(&self, other: &Rhs) -> bool
self is canonically less than or equal to other.source§fn canonical_gt(&self, other: &Rhs) -> bool
fn canonical_gt(&self, other: &Rhs) -> bool
self is canonically greater than other.source§fn canonical_ge(&self, other: &Rhs) -> bool
fn canonical_ge(&self, other: &Rhs) -> bool
self is canonically greater than or equal to other.source§impl Compose for Aaaa
impl Compose for Aaaa
source§impl<O, N> From<Aaaa> for AllRecordData<O, N>
impl<O, N> From<Aaaa> for AllRecordData<O, N>
source§impl<O, N> From<Aaaa> for ZoneRecordData<O, N>
impl<O, N> From<Aaaa> for ZoneRecordData<O, N>
source§impl OctetsFrom<Aaaa> for Aaaa
impl OctetsFrom<Aaaa> for Aaaa
source§impl Ord for Aaaa
impl Ord for Aaaa
source§impl PartialEq<Aaaa> for Aaaa
impl PartialEq<Aaaa> for Aaaa
source§impl PartialOrd<Aaaa> for Aaaa
impl PartialOrd<Aaaa> for Aaaa
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self and other) and is used by the <=
operator. Read more