pub struct Ipv6Addr { /* private fields */ }
Expand description
An IPv6 address.
IPv6 addresses are defined as 128-bit integers in IETF RFC 4291. They are usually represented as eight 16-bit segments.
See IpAddr
for a type encompassing both IPv4 and IPv6 addresses.
§Textual representation
Ipv6Addr
provides a FromStr
implementation. There are many ways to represent
an IPv6 address in text, but in general, each segments is written in hexadecimal
notation, and segments are separated by :
. For more information, see
IETF RFC 5952.
§Examples
use no_std_net::Ipv6Addr;
let localhost = Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1);
assert_eq!("::1".parse(), Ok(localhost));
assert_eq!(localhost.is_loopback(), true);
Implementations§
Source§impl Ipv6Addr
impl Ipv6Addr
Sourcepub const LOCALHOST: Self = _
pub const LOCALHOST: Self = _
An IPv6 address representing localhost: ::1
.
§Examples
use no_std_net::Ipv6Addr;
let addr = Ipv6Addr::LOCALHOST;
assert_eq!(addr, Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1));
Sourcepub const UNSPECIFIED: Self = _
pub const UNSPECIFIED: Self = _
An IPv6 address representing the unspecified address: ::
§Examples
use no_std_net::Ipv6Addr;
let addr = Ipv6Addr::UNSPECIFIED;
assert_eq!(addr, Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 0));
Sourcepub const fn new(
a: u16,
b: u16,
c: u16,
d: u16,
e: u16,
f: u16,
g: u16,
h: u16,
) -> Ipv6Addr
pub const fn new( a: u16, b: u16, c: u16, d: u16, e: u16, f: u16, g: u16, h: u16, ) -> Ipv6Addr
Creates a new IPv6 address from eight 16-bit segments.
The result will represent the IP address a:b:c:d:e:f:g:h
.
§Examples
use no_std_net::Ipv6Addr;
let addr = Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff);
Sourcepub const fn segments(&self) -> [u16; 8]
pub const fn segments(&self) -> [u16; 8]
Returns the eight 16-bit segments that make up this address.
§Examples
use no_std_net::Ipv6Addr;
assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff).segments(),
[0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff]);
Sourcepub const fn is_unspecified(&self) -> bool
pub const fn is_unspecified(&self) -> bool
Returns true
for the special ‘unspecified’ address (::
).
This property is defined in IETF RFC 4291.
§Examples
use no_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);
Sourcepub const fn is_loopback(&self) -> bool
pub const fn is_loopback(&self) -> bool
Returns true
if this is a loopback address (::1).
This property is defined in IETF RFC 4291.
§Examples
use no_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 const fn is_multicast(&self) -> bool
pub const 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 no_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);
Sourcepub const fn to_ipv4(&self) -> Option<Ipv4Addr>
pub const fn to_ipv4(&self) -> Option<Ipv4Addr>
Converts this address to an IPv4
address. Returns None
if this address is
neither IPv4-compatible or IPv4-mapped.
::a.b.c.d
and ::ffff:a.b.c.d
become a.b.c.d
§Examples
use no_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)));
Trait Implementations§
Source§impl Display for Ipv6Addr
impl Display for Ipv6Addr
Write an Ipv6Addr, conforming to the canonical style described by RFC 5952.
Source§impl From<[u16; 8]> for Ipv6Addr
impl From<[u16; 8]> for Ipv6Addr
Source§fn from(segments: [u16; 8]) -> Ipv6Addr
fn from(segments: [u16; 8]) -> Ipv6Addr
Creates an Ipv6Addr
from an eight element 16-bit array.
§Examples
use no_std_net::Ipv6Addr;
let addr = Ipv6Addr::from([
525u16, 524u16, 523u16, 522u16,
521u16, 520u16, 519u16, 518u16,
]);
assert_eq!(
Ipv6Addr::new(
0x20d, 0x20c,
0x20b, 0x20a,
0x209, 0x208,
0x207, 0x206
),
addr
);
Source§impl From<[u8; 16]> for Ipv6Addr
impl From<[u8; 16]> for Ipv6Addr
Source§fn from(octets: [u8; 16]) -> Ipv6Addr
fn from(octets: [u8; 16]) -> Ipv6Addr
Creates an Ipv6Addr
from a sixteen element byte array.
§Examples
use no_std_net::Ipv6Addr;
let addr = Ipv6Addr::from([
25u8, 24u8, 23u8, 22u8, 21u8, 20u8, 19u8, 18u8,
17u8, 16u8, 15u8, 14u8, 13u8, 12u8, 11u8, 10u8,
]);
assert_eq!(
Ipv6Addr::new(
0x1918, 0x1716,
0x1514, 0x1312,
0x1110, 0x0f0e,
0x0d0c, 0x0b0a
),
addr
);
Source§impl Ord for Ipv6Addr
impl Ord for Ipv6Addr
Source§impl PartialOrd<IpAddr> for Ipv6Addr
impl PartialOrd<IpAddr> for Ipv6Addr
Source§impl PartialOrd<Ipv6Addr> for IpAddr
impl PartialOrd<Ipv6Addr> for IpAddr
Source§impl PartialOrd for Ipv6Addr
impl PartialOrd for Ipv6Addr
impl Copy for Ipv6Addr
impl Eq for Ipv6Addr
Auto Trait Implementations§
impl Freeze for Ipv6Addr
impl RefUnwindSafe for Ipv6Addr
impl Send for Ipv6Addr
impl Sync for Ipv6Addr
impl Unpin for Ipv6Addr
impl UnwindSafe for Ipv6Addr
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 16 bytes